feat(phase 3d auto-tag): backfill area tags, bulk-edit UI, soft-delete cleanup
- migration 0012: one-shot populate empty tags from each item's area-roots (so chips on /?tag=work etc. actually filter the 40+ mai-backfilled rows) - migration 0013: cleanup 12 orphan item_links + BEFORE-UPDATE trigger that cascades soft-delete to item_links going forward — closes the data drift that made TestItemsUnifiedSurfacesMaiPointer fail since 3c - /admin/bulk page: flat filter+checkbox list with one-tx Apply for add/ remove tag, set management, set status. Per-row inline chip add/remove via /admin/bulk/chip. Reuses tree_filter URL params 1:1. - design.md §3.2 + §4.1 updated; tag+management section notes 0012 - bulk + tag-backfill + soft-delete-cascade tests cover the new surface
This commit is contained in:
@@ -157,3 +157,27 @@ table.classify input, table.classify select { width: 100%; }
|
||||
font-size: 1.05em; line-height: 1; padding: 2px 6px;
|
||||
}
|
||||
.documents .doc-remove .x:hover { color: var(--bad); border-color: var(--bad); }
|
||||
|
||||
/* --- /admin/bulk page --- */
|
||||
.bulk-section .counts { margin: 8px 0; color: var(--muted); }
|
||||
#bulk-filter { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-start; }
|
||||
#bulk-filter input[type=search] { width: 28em; }
|
||||
#bulk-filter select[multiple] { min-width: 9em; }
|
||||
#bulk-filter label.checkbox { display: inline-flex; align-items: center; gap: 4px; }
|
||||
#bulk-actions fieldset.actions {
|
||||
margin: 12px 0; padding: 8px 12px; border: 1px solid var(--border); border-radius: 4px;
|
||||
}
|
||||
#bulk-actions .action-row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
|
||||
#bulk-actions .action-row label { display: inline-flex; flex-direction: column; font-size: 0.85em; color: var(--muted); }
|
||||
#bulk-actions .action-row input, #bulk-actions .action-row select { padding: 4px 6px; }
|
||||
#bulk-actions button[type=submit] { padding: 6px 14px; align-self: flex-end; }
|
||||
table.bulk { width: 100%; border-collapse: collapse; margin-top: 12px; font-size: 0.92em; }
|
||||
table.bulk th, table.bulk td { padding: 6px 8px; border-bottom: 1px solid var(--border); text-align: left; vertical-align: middle; }
|
||||
table.bulk th { background: var(--bg-alt); color: var(--muted); font-weight: 500; }
|
||||
table.bulk td.cell-tags .tag { margin-right: 4px; }
|
||||
table.bulk .chip-x {
|
||||
background: transparent; border: none; color: var(--muted); padding: 0 4px; cursor: pointer; font-size: 1em;
|
||||
}
|
||||
table.bulk .chip-x:hover { color: var(--bad); }
|
||||
table.bulk .chip-add { display: inline-block; margin-left: 4px; }
|
||||
table.bulk .chip-add input { padding: 1px 4px; font-size: 0.85em; width: 7em; }
|
||||
|
||||
Reference in New Issue
Block a user