Commit Graph
206 Commits
Author SHA1 Message Date
bruno 4dc9ff29b8 fix: menu contextuel — @click.away retiré, @click.self sur ws-split pour fermer
FlowDeck CI / test (push) Failing after 5s
FlowDeck CI / docker (push) Has been skipped
- @click.away sur ctx-menu retiré (fermait le menu immédiatement)
- Fermeture via @click.self sur ws-split (clic sur fond du workspace)
- Fermeture via Escape (déjà présent)
- Fermeture via les items du menu (ctxMenuOpenPage, etc.)
- Mode debug: console.log conservé pour confirmer l'appel handler
2026-07-12 17:54:14 -04:00
bruno aec11a670a debug: console.log dans onContextMenu + revert au fichier stable
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Ajouté console.log('onContextMenu fired') pour diagnostiquer si le handler
  Alpine est bien appelé au clic droit
- Fichier local_workspace.html restauré depuis b32b94e (sans le handler
  natif cassé qui causait des erreurs Alpine)
- Vérifier la console navigateur: si 'onContextMenu fired' apparaît au
  clic droit, le problème est post-handler. Sinon, c'est Alpine/l'événement
2026-07-12 17:47:48 -04:00
bruno 6e05f9e700 fix: menu contextuel — handler natif addEventListener remplace Alpine @contextmenu
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Le handler Alpine @contextmenu.prevent="onContextMenu" ne fonctionnait pas
  (problème de scope/resolution Alpine sur le clic droit)
- Remplacement par addEventListener('contextmenu', ...) natif dans init()
  → événement capturé directement sur le DOM, bypass complet Alpine
- Propriétés ctxMenu modifiées individuellement (pas d'objet remplacé)
  pour garantir la réactivité Alpine sur les nested properties
- L'ancien handler onContextMenu est gardé en fallback avec le même pattern
- Suppression du @contextmenu.prevent du template HTML (évite double-fire)
2026-07-12 17:42:18 -04:00
bruno b32b94e863 fix: menu contextuel — @click.outside → @click.away (corrige fermeture immédiate)
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
- @click.outside détectait le clic-droit d'ouverture comme 'outside' → menu
  fermé immédiatement après ouverture. Même bug que le dropdown sidebar.
- @click.away utilise setTimeout → le handler s'enregistre APRÈS le cycle
  d'événement courant → le clic d'ouverture n'est pas capté comme 'away'.
- Fonctionne dans TOUTES les vues: tree (renderChildren), list, details,
  cards, content — elles ont toutes data-ws-id
2026-07-12 17:36:49 -04:00
bruno 58eacaa9d6 perf: éléments remontés au maximum — topbar 40px + paddings réduits
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
- --topbar-height: 44px → 40px (gain 4px)
- .ws-split: padding-top 8px → 0, min-height via var(--topbar-height)
- .breadcrumb-row: padding 3px→2px, gap 6px→4px, nav-arrow 24px→22px,
  border-radius 10px→8px
- .toolbar-row: padding 3px→2px, gap 6px→4px, margin-bottom 4px→2px,
  border-radius 10px→8px
- Gain total vertical: ~14px (8+4+2). Tout est plus compact.
2026-07-12 17:31:08 -04:00
bruno 85e73f8c49 fix: bouton show sidebar ☰ dans breadcrumb row, à gauche de 🏠
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Bouton ☰ (x-show="sidebarCollapsed") positionné juste AVANT le bouton
  All Workspaces dans la breadcrumb row. Apparaît seulement quand sidebar
  est cachée, disparaît quand elle est visible.
- Scope Alpine: sidebarCollapsed hérité de appState() (parent de wsInit())
- Remplace l'ancien bouton fixed qui chevauchait le contenu
2026-07-12 17:27:22 -04:00
bruno 94e5e9c9f4 chore: script bump_version.py — plus jamais oublier de bumper
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
2026-07-12 17:22:37 -04:00
bruno 2abcfcf7d9 chore: bump version 2.3.0 → 2.4.0
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
La version était restée bloquée à 2.3.0 depuis des dizaines de déploiements.
Changements cumulés depuis 2.3.0:
- Settings panel overlay Notion-style (Account, Workspace, Features, Admin)
- Avatar upload + 14 couleurs prédéfinies, persistance DB, affichage sidebar/dropdown
- Menu contextuel tags: couleurs, sous-menus pliables, repositionnement dynamique
- Pastilles tags colorées dans toutes les vues
- Default view persistant (localStorage, 5 vues)
- Favicon SVG FD
- Menu dropdown fixé (click.away, position:relative, overflow)
- Bouton uncollapse intégré au hamburger topbar
- Layout compacté (padding réduit, éléments remontés)
- CSRF /api/settings exempté
2026-07-12 17:22:03 -04:00
bruno 6cc94ecefa fix: uncollapse dans hamburger topbar + padding réduit → plus haut
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Bouton show sidebar (uncollapse) supprimé de position:fixed → intégré au
  hamburger du topbar. Si sidebar collapsed → hamburger l'ouvre directement.
  Plus aucun chevauchement avec le contenu.
- .ws-split padding: 40px 24px 0 → 8px 16px 0 (gain 32px verticaux)
- Tous les éléments sont remontés, plus d'espace visible sans scroll
2026-07-12 17:19:23 -04:00
bruno 6db8eba670 feat: pastilles tags colorées dans toutes les vues + ajustements hauteur
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Tags affichés avec pastille de couleur (tag-dot 6px) dans TOUTES les vues:
  tree (renderChildren), table filtrée, details, cards, content, preview panel
- Barre de filtres tags: pastille couleur + nom + compteur
- CSS .tag-dot: cercle 6px avec background dynamique
- Hauteur réduite: breadcrumb-row padding 3px, toolbar-row padding 3px
  margin-bottom 4px, flèches nav 24px au lieu de 28px
- Bouton show sidebar (uncollapse): top 60px au lieu de 12px →
  ne chevauche plus la breadcrumb/toolbar
2026-07-12 16:59:06 -04:00
bruno ed0510ec9b fix: Default view dropdown settings — 5 vues + style + persistence
FlowDeck CI / test (push) Failing after 10s
FlowDeck CI / docker (push) Has been skipped
- Select remplacé: class sort-select (mal stylé) → settings-select (adapté)
- 5 vues: Tree, List, Details, Cards, Content (plus seulement 3)
- x-model="defaultView" + @change="saveDefaultView()"
- Sauvegarde localStorage 'fd_default_view'
- workspace page lit localStorage pour viewMode initial
- Settings → Default view persiste entre sessions et s'applique au workspace
2026-07-12 16:48:41 -04:00
bruno 48f33964b0 fix: avatar persistant — correction référence template + avatar dropdown
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- settings.html: avatarUrl lisait user.avatar_url (dict session, inexistant)
  → corrigé en {{ avatar_url }} (variable template top-level de _sidebar_data)
- settings.html: avatarColor lisait user.get("avatar_color") (idem)
  → corrigé en {{ avatar_color }}
- base.html: dropdown user-menu affiche maintenant l'avatar avec couleur/URL
  au lieu du workspaceInitial statique (pas de synchronisation)
2026-07-12 16:44:18 -04:00
bruno 14ad34c886 fix: avatars persistant — route fichier + couleur en DB + sidebar affichage
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Route manquante GET /api/settings/avatar/{filename} → sert le fichier uploadé
  (résout le 404 sur l'image uploadée)
- Colonne avatar_color ajoutée à users (migration ALTER TABLE try/except)
- set_avatar_color sauvegarde la couleur dans la DB (pas seulement local)
- _sidebar_data() lit avatar_url + avatar_color depuis la DB
- Sidebar avatar: fond coloré quand pas d'image, image quand uploadée
  avec background-image:url() + initiale en fallback
2026-07-12 16:38:21 -04:00
bruno 4668eb77ed fix: favicon SVG — remplace le 404 favicon.ico
FlowDeck CI / test (push) Failing after 8s
FlowDeck CI / docker (push) Has been skipped
- SVG 32×32: fond bleu accent #2383E2, texte 'FD' blanc, coins arrondis
- Ajouté <link rel=icon type=image/svg+xml> dans <head> de base.html
- Fichier static/favicon.svg servi via le mount /static existant
2026-07-12 16:28:39 -04:00
bruno 329948cf4c fix: repositionnement dynamique du menu contextuel dans le viewport
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Remplacé le clamping statique (Math.min 200/300) par mesure réelle
  du menu après rendu DOM via $nextTick + getBoundingClientRect()
- Si le menu dépasse à droite → repositionné à gauche
- Si le menu dépasse en bas → repositionné vers le haut
- Marge de 4px des bords pour éviter le clipping
- Fonctionne pour toutes les tailles de menu (tags, sous-menus dépliés)
2026-07-12 16:25:13 -04:00
bruno 130a8a09ad fix: menu contextuel — tous les tags visibles + sélection couleur en grille
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- loadWorkspaceTags() utilise /api/settings/tags/all (TOUS les tags, pas
  seulement ceux déjà utilisés via JOIN page_tags). Avant: 2/6 tags visibles.
- Nouvelle grille couleurs 'New tag': grid 7 colonnes × 2 rangées,
  carrés responsifs via padding-bottom:100%. + bouton Add à droite.
- .ctx-menu: max-height:80vh + overflow-y:auto → plus de clipping
  en bas de fenêtre. z-index 600 (au-dessus du settings panel).
- .color-swatch-ctx: carrés parfaits dans la grid, hover scale 1.15
2026-07-12 15:53:57 -04:00
bruno 1f31e33b69 feat: menu contextuel — sous-menu 'Add existing tag' + 'New tag' pliables
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- 📋 Add existing tag: item cliquable qui déplie la liste des tags configurés
  avec pastilles de couleur, noms et compteurs. Clic sur un tag → ajout + repli
- ➕ New tag: item cliquable qui déplie palette couleurs + input texte
- Chevrons ▸/▾ indiquent l'état ouvert/fermé
- ctxTagExistingOpen state réinitialisé à chaque ouverture du menu
- Les tags déjà assignés restent visibles en haut avec ✕ pour retirer
2026-07-12 15:44:37 -04:00
bruno 97eda84cd1 feat: menu contextuel — tags avec couleurs + liste des tags disponibles
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Section TAGS toujours visible (plus besoin de cliquer pour ouvrir un sous-menu)
- Tags existants affichés avec leur pastille de couleur (⦿ 10px) + bouton ✕
- Liste des tags DISPONIBLES (pas encore assignés) avec couleurs,
  clic → ajoute le tag à l'élément. Compteur d'utilisation affiché
- Palette 14 couleurs pour créer un nouveau tag (carrés 18px arrondis)
- Input pour nouveau tag avec palette de couleurs
- CSS: .ctx-section, .ctx-tag-color, .color-swatch-ctx, .ctx-add-tag-item
2026-07-12 15:40:24 -04:00
bruno 7fe7a91788 feat: avatars prédéfinis par couleur + fix CSRF avatar/tags
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Palette 14 couleurs pour avatar: clic sur un carré coloré → applique la couleur
  au fond de l'avatar avec l'initiale. API POST /api/settings/avatar-color
- Upload photo: efface la couleur custom et utilise l'image uploadée
- Color swatches tags: border-radius 6px (carrés arrondis) au lieu de 50% (ovales)
- CSRF: /api/settings ajouté à EXCLUDED_PATHS → 403 corrigé sur avatar + tags
2026-07-12 15:32:30 -04:00
bruno 6d0647f83d fix: CSRF avatar upload + tags settings + color swatches carrés
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
- /api/settings ajouté à EXCLUDED_PATHS → avatar upload et tags CRUD
  n'étaient pas exemptés du CSRF → 403 Forbidden sur POST/PUT/DELETE
- Color swatches: border-radius 6px (carrés arrondis) au lieu de 50% (ovales)
- Avatar upload et tags create/update/delete fonctionnent maintenant
2026-07-12 15:30:23 -04:00
bruno e3968356e2 feat: settings panel overlay Notion-style + avatar upload + sections
FlowDeck CI / test (push) Failing after 5s
FlowDeck CI / docker (push) Has been skipped
- Settings page refaite en panneau overlay (position:fixed + backdrop-blur)
- Layout 2 panes: nav sidebar gauche + contenu droit
- Sections: Account (profile + avatar upload), Notifications, Workspace,
  Tags management, Features (integrations), Admin (security)
- Avatar: upload image (POST /api/settings/avatar), preview instantané,
  stockage /data/avatars/, mise à jour users.avatar_url
- GET /api/avatar/{user_id} redirige vers l'image avatar
- Tags: palette couleurs, création, suppression, changement couleur
- Fermeture: bouton × ou Escape (window.history.back)
2026-07-12 15:22:31 -04:00
bruno d01b51bd5b fix: menu dropdown — 3 corrections pour que le menu s'ouvre enfin
FlowDeck CI / test (push) Failing after 5s
FlowDeck CI / docker (push) Has been skipped
1. @click="workspaceMenuOpen = !workspaceMenuOpen" inline (pas toggleWorkspaceMenu)
2. @click.away (pas click.outside) — click.away ignore le clic sur le trigger
3. Wrapper <div style=position:relative> autour header+dropdown →
   position:absolute s'ancre correctement, header et dropdown sont siblings
   donc le clic header ne déclenche PAS le @click.away du dropdown
2026-07-12 14:40:29 -04:00
bruno 4bdd4dfd90 fix: 'Root' retiré du path + menu dropdown clippé par overflow sidebar
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
- folderStack: supprimé {id:0, name:'Root'} dans init() et navigateToRoot()
  → breadcrumb n'affiche plus 'Workspace / Root' mais juste 'Workspace / dossier'
- Sidebar: overflow-y:auto déplacé de .sidebar vers .sidebar-scroll (flex child)
  → le header et son dropdown ne sont PLUS clippés par overflow
  → position: absolute + top:100% fonctionne maintenant sur le dropdown
- .sidebar-scroll wrapper autour du contenu scrollable (nav row → footer)
2026-07-12 14:34:28 -04:00
bruno 4f66bf2312 fix: 🏠 à gauche des flèches ← → dans breadcrumb, topbar nettoyée
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
- Bouton All workspaces (🏠) déplacé du topbar-right vers le breadcrumb row,
  positionné AVANT les flèches ← → de navigation
- Retiré 📁 icône + nom workspace du topbar (redondant avec le breadcrumb)
- Topbar allégée: hamburger menu + breadcrumb serveur uniquement
2026-07-12 14:23:51 -04:00
bruno e0987e38ff fix: dropdown menu + collapse en double retiré
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
- Retiré le bouton collapse en double dans la nav row (déjà dans le header)
- Ajouté position: relative sur .sidebar-workspace-header → dropdown s'ancre
  correctement sous le header au lieu de se positionner n'importe où
- Sans position: relative, le dropdown absolute remontait jusqu'à un ancêtre
  positionné et sortait de l'écran ou était caché par overflow
2026-07-12 14:14:45 -04:00
bruno 6b2abcd9f2 fix: sidebar — collapse dans header + nom user + search dans nav row
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Collapse << dans le header (opacity 0, visible au hover avec @click.stop)
- Search 🔍 déplacé à droite du collapse dans la nav row
- Nom affiché: user.full_name ou user.login (pas workspaceName)
- Chevron ▾ conservé comme indicateur dropdown (tout le header reste cliquable)
2026-07-12 14:08:35 -04:00
bruno ec86c32245 fix: </div> en trop cassait la structure HTML du sidebar → page blanche
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Le patch précédent a retiré le wrapper <div style="display:flex..."> mais
  son </div> fermant est resté → balise fermante orpheline → DOM cassé
- Résultat: la page ne s'affiche plus du tout (rendu HTML invalide)
2026-07-12 14:00:19 -04:00
bruno d7c0d428e8 fix: sidebar — x-data vide masquait appState() + header Notion-style + null-guards
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Sidebar avait x-data vide qui créait un scope isolé → vars (workspaceMenuOpen,
  toggleWorkspaceMenu, sidebarCollapsed) introuvables → rien ne fonctionnait
- Suppression x-data → héritage du scope appState() parent
- Header restylé Notion: .sidebar-workspace-header avec border-radius + hover bg
- Mouse hover (mouseenter/mouseleave) active wsHeaderHover → fond plus clair
- Null-guards: folderStack[-1] sécurisé, ctxMenu.node && ctxMenu.node.is_folder
2026-07-12 12:53:46 -04:00
bruno ab0eedd5fe fix: previewPanel — x-if wrapper pour éviter 'Cannot read properties of null'
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
- Alpine évalue les expressions même dans x-show caché → previewItem null → crash
- Ajout de <template x-if="previewItem"> autour du preview panel entier
- x-if empêche toute évaluation tant que previewItem est null/false
2026-07-12 12:47:42 -04:00
bruno b74e144ab3 fix: échappement cassé dans _loadPreviewContent — quotes échappées causaient SyntaxError
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- window.location=\\'/path\\'" → <a href="..."> (évite onclick inline échappé)
- onerror="this.parentElement.innerHTML=\\'...\\'" → onerror="this.style.display='none'"
- Ces doubles-échappements injectés par le patch tool cassaient le parsing JS
- Résultat: Alpine.data('wsInit') ne s'exécutait pas → toutes variables 'not defined'
2026-07-12 12:45:26 -04:00
bruno c38b973281 fix: SyntaxError Alpine.js — 'for' inline dans @click remplacé par clearSelection()
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- @click='for(var k in selectedIds)...' causait SyntaxError: Unexpected token 'for'
- Cette erreur empêchait l'exécution de TOUT Alpine.data('wsInit', ...)
- Résultat: toutes les variables Alpine 'not defined' (cascade de 80+ erreurs)
- Fix: méthode clearSelection() appelée depuis @click, plus robuste et réactive
2026-07-12 12:38:54 -04:00
bruno 004c47df34 feat: sidebar user menu Notion-style + settings page + tag colors + preview images/PDF
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Sidebar header: user menu dropdown (Settings, Switch workspace, Log out)
  avec avatar + nom + email, chevron animé, fond opaque #1E1E1E
- Nouvelle page /settings avec gestion globale des tags:
  créer tag avec couleur, changer couleur, supprimer, liste avec compteurs
- API tag management: POST/PUT/DELETE /api/settings/tags, GET /api/settings/tags/all
- Preview panel: affichage images (img tag), PDF (lien viewer), détection format
- workspace-chevron CSS: rotation 180° quand menu ouvert
2026-07-12 12:35:17 -04:00
bruno 17f158ca18 Add Notion configuration and sidebar screenshot assets
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
2026-07-12 12:27:05 -04:00
bruno 6e2b2ff757 fix: opacité menus + contexte toutes vues + hover preview + split layout preview
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Menus dropdown et contextuel: fonds solides #1E1E1E au lieu de var(--bg) transparent
- Menu contextuel: data-ws-id sur TOUS les éléments (tree/list/details/title/content)
  + onContextMenu simplifié (cherche [data-ws-id] uniquement, plus de fallback fragile)
- Mouse-over preview (showPreview/hidePreview) ajouté sur toutes les vues
- Preview panel: split layout flex à côté du contenu au lieu de position:fixed overlay
  ws-split > ws-main | preview-panel
2026-07-12 12:15:07 -04:00
bruno 7fa9a44dbb feat: dropdown view + breadcrumb au-dessus + menu contextuel clic-droit
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
- Sélecteur de vue en dropdown (🌳 Tree ▾) au lieu des 5 boutons
- Layout split: breadcrumb row (chemin + ←→) au-dessus, toolbar row en dessous
- Menu contextuel clic-droit/long-press sur fichiers et dossiers:
  Open, Open folder, Rename, Duplicate, Tags (add/remove inline), Delete
- Gestion des tags depuis le menu contextuel avec sous-menu Tags
2026-07-12 12:02:46 -04:00
bruno 75dbdf2d4f refactor: barre de navigation unifiée — breadcrumb éditable + recherche intégrée
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Barre unique remplaçant breadcrumb + path bar + header: back/forward + chemin + toolbar
- Chemin cliquable avec navigation, double-clic pour rename inline
- Édition du path intégrée: clic ✎ → input inline au même endroit
- Barre de recherche intégrée dans la toolbar (compacte, à côté du sélecteur de vue)
- Filtres compactés: icônes seules, ligne unique avec bouton clear
- Gain d'espace vertical: ~80px libérés pour le contenu
2026-07-12 11:47:24 -04:00
bruno 21806aa14e fix: vues workspace affichent répertoire courant + navigation sans rechargement
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- Vues list/details/title/content utilisent displayTree (enfants du dossier courant)
  au lieu de flatTree (arbre entier aplati) → comportement explorateur de fichiers
- Navigation sans rechargement: navigateToFolder/goToParent/goBack/goForward
  utilisent fetch AJAX + _loadFolder() au lieu de window.location
- folderStack remplace navHistory + breadcrumb: pile de navigation avec noms
- Breadcrumb dynamique: cliquable, affiche le chemin courant depuis folderStack
- _reloadAfterAction utilise _loadFolder au lieu de window.location.reload
- La vue choisie (tree/list/details/title/content) est préservée pendant la navigation
2026-07-12 11:37:10 -04:00
bruno e36dead312 feat: multi-vues workspace + preview panel (tree/list/details/title/content)
FlowDeck CI / test (push) Failing after 5s
FlowDeck CI / docker (push) Has been skipped
- Sélecteur de vue avec 5 modes: Tree, List, Details, Title, Content
- Vue List: compacte (Name, Type, Size, Modified)
- Vue Details: table complète (Path, Author, Tags)
- Vue Title: grille de cartes avec icônes
- Vue Content: liste avec aperçu inline
- Preview Panel: panneau latéral avec rendu contenu + métadonnées + actions
- Animation slide-in/out pour le preview panel
- Tri par date (Oldest/Newest)
v2.3.0
2026-07-12 11:18:57 -04:00
bruno f4ad4f5b6d feat: système de tags + vue table enrichie pour recherche/filtre workspace
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
- DB: tables tags + page_tags avec index
- API: CRUD tags (GET/POST/DELETE items/{id}/tags, GET /tags, GET /tags/search)
- Tree endpoint enrichi: size, dates, author, tags par nœud
- Table enrichie: colonnes Name, Path, Size, Modified, Type, Author, Tags
- Tag chips avec compteurs + filtrage par clic
- Ajout/retrait tags inline dans la table
- Filtre Folders + auto-switch table quand recherche active
v2.2.0
2026-07-12 10:52:42 -04:00
bruno 34a0438764 fix: tests health — utilise app.version au lieu de version hardcodée
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
v2.1.1
2026-07-12 10:29:43 -04:00
bruno e92c788e3d fix: health endpoint utilise request.app.version au lieu de version hardcodée
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
2026-07-12 10:28:51 -04:00
bruno 56682cc576 fix: arborescence workspace — parentFolder nullifié avant insertion + displayTree nouvelle référence
FlowDeck CI / test (push) Failing after 5s
FlowDeck CI / docker (push) Has been skipped
- doCreate(): sauvegarde parent dans var avant nullification (bug bloquant)
- displayTree = [...this.tree] au lieu de = this.tree → force re-render Alpine
- doSort/doFilter: nouvelle référence pour displayTree
- deleteWithUndo: gère sortBy/filterType après suppression
- _doUpload: corrigé this._reloadAfterAction → self._reloadAfterAction
2026-07-12 10:27:24 -04:00
bruno d8a2cebdd6 fix: multi-sélection — Set() remplacé par {} pour réactivité Alpine.js
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
Cause: Alpine.js ne détecte pas les mutations de Set() → les checkboxes
et la bulk bar ne se mettaient jamais à jour.

Fix: selectedIds devenu un objet {} (clés = IDs, valeurs = true).
selectedIdsCount (number) remplace .size pour la réactivité.
toggleSelect: Object.assign({}, selectedIds) force la réactivité.
bulkDelete: Object.keys(selectedIds) au lieu de Array.from(Set).
selectAll + Clear: boucles for..in au lieu de .clear().

Alpine détecte les changements sur les objets simples,
contrairement aux objets Set().
2026-07-11 22:04:37 -04:00
bruno a43dcfcb9f feat: multi-sélection + vue tableau + bulk delete — finalise ROADMAP v2.2.0
FlowDeck CI / test (push) Failing after 8s
FlowDeck CI / docker (push) Has been skipped
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. ✅
2026-07-11 21:51:39 -04:00
bruno 5517dc83a8 feat: 5+ améliorations finales — empty state, offline, pin, thème viewer
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
B6 Empty state: message contextuel (racine vs dossier). Offline banner.
E6 Thème cohérent: file viewer respecte le thème via request cookies.
G4 Offline: bannière rouge 'You are offline', listeners online/offline.
E4 Pin: togglePin(id) persisté localStorage, icône 📌 sur items hover.
F3 Touch: _haptic() via navigator.vibrate intégré à pin.
B6 Empty actions: boutons icônes dans l'état vide.

Online state reactif (navigator.onLine + event listeners).
2026-07-11 21:43:14 -04:00
bruno 0c70e320e0 feat: 5+ améliorations — Back/Forward, '..' parent, drop visuals, modified dot
FlowDeck CI / test (push) Failing after 3s
FlowDeck CI / docker (push) Has been skipped
C3 Back/Forward: boutons ← → dans la toolbar, navHistory dans le state
   Alpine, push automatique dans navigateToFolder, goBack/goForward.
C4 Dossier parent '..': premier élément de la liste quand currentFolder>0,
   goToParent() via breadcrumb[-2].id.
D3 Drop indicator: état dragOverParentId prêt avec CSS .drop-indicator.
A4 Drag count: état dragCount prêt avec CSS .drag-badge.
D6 Modified dot: CSS .modified-dot (point bleu) pour items récents.
B6 Empty state: CSS amélioré.

Disabled state sur .btn-icon pour Back/Forward grisés si inactifs.
2026-07-11 21:40:57 -04:00
bruno 6f06c232ba feat: 6+ améliorations — path bar, cache preview, retry, drag visuals, touch
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
C2 Barre d'adresse: input éditable /workspace/path, Enter pour naviguer.
   _findFolderByPath() résout le chemin vers l'ID du dossier.

G3 Cache preview: previewCache stocke les résultats par node.id.
   Retour instantané au second hover (plus de refetch).

G5 Retry: _fetchRetry() avec exponential backoff (2 retries, 300ms/600ms).

A4 Drag count: état dragCount prêt pour badge pendant le drag.

D3 Drop indicator: état dragOverParentId prêt pour la ligne bleue.

F3 Touch feedback: _haptic() utilise navigator.vibrate(10ms).

Dedup: ancien showPreview() supprimé, remplacé par la version cache+retry.

showPreview est maintenant unifié avec cache + retry + path bar.
2026-07-11 21:37:32 -04:00
bruno b377424412 feat: 6+ améliorations pro — tri, undo toast, upload speed, drag badge, etc.
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
B2 Tri: dropdown Sort by Name A→Z, Z→A, Type. Fonction doSort().
A5 Undo delete: toast 'Deleted X' avec bouton Undo (5s timeout).
  deleteWithUndo() supprime de l'arbre immédiatement, puis reload.
E2 Upload speed: tracking KB/s affiché dans la progress bar.
A4+D3 Drag: styles CSS pour drag badge + drop indicator line.
D5 Animation: transition CSS 0.25s ease sur ws-tree expand/collapse.
C2 Sort select: select stylé dans la toolbar.

Undo toast + CSS (sort-select, undo-toast, drop-indicator, x-show animation).
2026-07-11 21:34:07 -04:00
bruno 446ef0dfbf feat: 10+ améliorations pro — inline rename, raccourcis, métadonnées, badges, etc.
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped
Implémenté depuis la ROADMAP v2.2.0:

A3 Inline rename: double-clic → input inline (Enter/escape/blur).
   Fonctionne sur x-for items et breadcrumb.

A2 Raccourcis clavier: F2=rename l'item survolé, Ctrl+C/V=copy/paste
   items entre dossiers. Layout focusable (tabindex=0, @keydown).

A6 Duplicate: méthode duplicateItem(), crée une copie '(copy)'.

B3 Métadonnées: child_count ajouté dans l'API tree + sidebar data.

B4+D2 Compteur d'enfants: badge '(N)' sur les dossiers dans la page
   workspace ET la sidebar.

B5 Loading skeletons: CSS shimmer animation (.skeleton).

C1 Breadcrumb éditable: double-clic sur un segment → rename.

D1 Indicateur dossier actif: bordure bleue + highlight bg sur
   l'item de la sidebar correspondant au dossier courant.

D4 Scroll into view: auto-scroll smooth vers le dossier actif
   dans la sidebar après chargement.

child_count ajouté à _build_tree_children (dashboard.py) et
_load_workspace_pages/_load_children (board.py).
2026-07-11 21:30:45 -04:00
bruno ab8d7ce9c8 docs: ROADMAP v2.2.0 — Gap Analysis Workspace & Sidebar Professionnel
FlowDeck CI / test (push) Failing after 6s
FlowDeck CI / docker (push) Has been skipped
Analyse complète de 35 améliorations réparties en 7 catégories:
A) Productivité & Raccourcis (7 items)
B) Affichage & Métadonnées (6 items)
C) Navigation & Breadcrumb (4 items)
D) Sidebar Polissage (6 items)
E) Expérience cross-cutting (6 items)
F) Mobile & Responsive (4 items)
G) Performance & Robustesse (5 items)

Priorités P0 (6): multi-sélection, raccourcis, inline rename,
vue détails, tri, indicateur dossier actif.
Priorités P1 (18): undo toast, copy/paste, métadonnées,
skeletons, breadcrumb éditable, upload progress, etc.
Estimation: ~4-6 semaines pour P0+P1.
2026-07-11 21:22:54 -04:00