From a43dcfcb9f162e540098d61dcc31aa633bba5f29 Mon Sep 17 00:00:00 2001 From: bruno Date: Sat, 11 Jul 2026 21:51:39 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20multi-s=C3=A9lection=20+=20vue=20tablea?= =?UTF-8?q?u=20+=20bulk=20delete=20=E2=80=94=20finalise=20ROADMAP=20v2.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A1 Multi-sélection: - Checkboxes sur chaque item (visibles au hover/sélectionnés) - Shift+click: range select entre le dernier clic et le courant - Ctrl+click: toggle individuel - Barre d'actions bulk: 'N selected' + Delete/Clear - bulkDelete(): supprime tous les items sélectionnés - selectAll() via checkbox dans l'en-tête tableau B1 Vue tableau: - Toggle 📋/🌳 entre arbre et tableau - flatTree getter + _flattenTree() - Colonnes: checkbox, Name+icon, Type, Size/Items - Lignes cliquables pour naviguer/ouvrir - Cohérent avec la multi-sélection ROADMAP v2.2.0: 35/35 implémentés. ✅ --- app/templates/local_workspace.html | 132 ++++++++++++++++++++++++++++- 1 file changed, 130 insertions(+), 2 deletions(-) diff --git a/app/templates/local_workspace.html b/app/templates/local_workspace.html index d7ffe63..1326af2 100644 --- a/app/templates/local_workspace.html +++ b/app/templates/local_workspace.html @@ -85,6 +85,26 @@ .ws-tree-item:hover .pin-icon{opacity:1;} .pin-icon.pinned{opacity:1;color:var(--accent);} +/* Multi-select */ +.item-checkbox{width:14px;height:14px;flex-shrink:0;cursor:pointer;accent-color:var(--accent);opacity:0;transition:opacity 150ms;} +.ws-tree-item:hover .item-checkbox,.ws-tree-item.selected .item-checkbox{opacity:1;} +.ws-tree-item.selected{background:rgba(35,131,226,.1);} + +/* Bulk bar */ +.bulk-bar{display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--accent);color:#fff;border-radius:8px;margin-bottom:10px;font-size:13px;font-weight:500;} +.bulk-bar .btn-danger{background:rgba(255,255,255,.15);color:#fff;border:1px solid rgba(255,255,255,.3);} +.bulk-bar .btn-secondary{background:rgba(255,255,255,.1);color:#fff;border:1px solid rgba(255,255,255,.2);} + +/* Table view */ +.ws-table{width:100%;border-collapse:collapse;font-size:13px;} +.ws-table th{text-align:left;padding:6px 12px;color:var(--text-tertiary);font-weight:500;border-bottom:1px solid var(--border);font-size:11px;text-transform:uppercase;letter-spacing:.5px;} +.ws-table td{padding:8px 12px;border-bottom:1px solid var(--border);} +.ws-table tr:hover td{background:var(--bg-hover);} +.ws-table .table-icon{font-size:16px;width:24px;} +.ws-table .table-name{font-weight:500;cursor:pointer;} +.ws-table .table-name:hover{color:var(--accent);} +.ws-table .table-meta{color:var(--text-tertiary);font-size:12px;} + .modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;z-index:999;backdrop-filter:blur(4px);} .modal-box{background:#1F1F1F;border:1px solid var(--border-strong);border-radius:16px;padding:28px;width:420px;max-width:90vw;box-shadow:0 20px 60px rgba(0,0,0,.5);} .modal-box h3{font-size:16px;margin-bottom:6px;display:flex;align-items:center;gap:8px;} @@ -240,6 +260,9 @@
+