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).
This commit is contained in:
2026-07-11 21:30:45 -04:00
parent ab8d7ce9c8
commit 446ef0dfbf
5 changed files with 147 additions and 11 deletions
+6 -2
View File
@@ -179,12 +179,14 @@ def _load_workspace_pages(ws_cookie: str) -> list:
for r in rows:
is_folder = r["parent_section"] == "Workspace"
title = r["title"] or "Untitled"
sub_children = _load_children(r["id"])
items.append({
"db_id": r["id"], "name": title,
"id": f"page/{r['id']}",
"icon": "📁" if is_folder else _file_icon(title, r["content_format"]),
"is_folder": is_folder,
"children": _load_children(r["id"]),
"child_count": len(sub_children),
"children": sub_children,
})
return items
except (ValueError, Exception):
@@ -202,12 +204,14 @@ def _load_children(parent_id: int) -> list:
for r in rows:
is_folder = r["parent_section"] == "Workspace"
title = r["title"] or "Untitled"
sub_children = _load_children(r["id"])
children.append({
"db_id": r["id"], "name": title,
"id": f"page/{r['id']}",
"icon": "📁" if is_folder else _file_icon(title, r["content_format"]),
"is_folder": is_folder,
"children": _load_children(r["id"]),
"child_count": len(sub_children),
"children": sub_children,
})
return children
+1
View File
@@ -604,6 +604,7 @@ def _build_tree_children(conn, parent_id: int | None, ws_id: int) -> list:
"content_format": r["content_format"] if not is_folder else None,
"children": children,
"has_children": len(children) > 0,
"child_count": len(children),
})
return tree