fix(editor): v4.7.1 popovers Share/More/Activity/Move rendus sous le viewport + sous-menu Export inatteignable
FlowDeck CI / test (push) Failing after 19s
FlowDeck CI / docker (push) Skipped

- share-dialog/more-menu/activity-popover/move-dialog: enfants de .page-editor-wrapper
  (overflow-y:auto) ancores en absolute top:100% -> invisibles sous le viewport.
  Repositionnes en fixed sous la topbar, scope .page-editor-wrapper > (pas de
  regression sur .more-menu de library/local_workspace) + variante mobile <768px.
- Item Export du menu More faisait moreOpen=false avant d'ouvrir exportOpen:
  les 4 formats etaient inaccessibles. Devient un toggle, le menu reste ouvert.
- Cache busting app.css v=4.7.1; VERSION/main.py bump 4.7.1; CHANGELOG+ROADMAP a jour.
- Verifie Playwright headless: Share/More/Export/download Markdown/toast OK, 0 pageerror; 190/190 tests.
This commit is contained in:
2026-09-03 01:09:31 -04:00
parent 2bdf5e4166
commit aa2db0103d
8 changed files with 57 additions and 6 deletions
+11
View File
@@ -1,5 +1,16 @@
# Changelog — FlowDeck
## v4.7.1 (2026-09-03) — Fix UI éditeur : menus Share / More invisibles
### Fixed
- **Boutons « Share » et « ⋯ » (More) sans réaction visible dans l'éditeur de page** — les popovers (share-dialog, more-menu, activity-popover, move-dialog), enfants de `.page-editor-wrapper` (conteneur à `overflow-y:auto`), étaient ancrés en `absolute; top:100%` → rendus SOUS le viewport, donc invisibles. Repositionnés en `position:fixed` sous la topbar (scoped `.page-editor-wrapper > …` pour ne pas casser les `.more-menu` des pages library/local_workspace) + variantes mobile dans le media query < 768px.
- **Sous-menu Export se refermait** — l'itém « ↗ Export » faisait `moreOpen=false` avant d'ouvrir `exportOpen` : les 4 formats restaient inaccessibles au clic. Devient un toggle (`exportOpen = !exportOpen`), le menu More reste ouvert.
- **Cache CSS** — version du query string `app.css` bumpée (`v=3.0.0` → `v=4.7.1`) pour invalider le cache navigateur.
### Vérifié
- Playwright headless (desktop 1280×800) : Share, More, sous-menu Export, popover Activity et menu More après scroll = tous visibles dans le viewport ; téléchargement Markdown + toast « Exported as Markdown » OK ; zéro pageerror.
- 190/190 tests pytest passent.
## v4.7.0 (2026-09-03) — Export
### Added
+7 -1
View File
@@ -285,6 +285,12 @@ Détails livrés :
- PDF généré via `xhtml2pdf` (pip) — aucun lib système requise
- 6 nouveaux tests (Markdown, sous-pages, HTML, PDF, Site, 404)
### v4.7.1 — Fix UI Export / Share / More ✅ (2026-09-03)
- [x] **Share / More / Activity / Move-to popovers** — rendus sous le viewport (absolute + parent scrollable) → repositionnés fixed sous la topbar
- [x] **Sous-menu Export** — l'itém Export fermait le menu More ; devient un toggle, formats accessibles
- [x] **Cache CSS** — query string app.css bumpé v4.7.1
- [x] Vérifié Playwright headless + 190/190 tests
### v4.8.0 — Collaboration
- [ ] **Inline comments** — commentaires sur sélection de texte
- [ ] **@mentions** — notifier un utilisateur → page/commentaire
@@ -437,4 +443,4 @@ v4.0.2 ✅ v4.1.0 ✅ v4.2.0 ✅ v4.3.0 ✅ v4.4.0 ✅ v4.5.0 ✅
Quality Data Sources Templates + 10 Views Tasks & Sprints & Content Export Collab + Pro + Agent
& Tests & Linked DB Dashboards complets Dependencies My Tasks Blocks MD/PDF/HTML Agent IA (futur)
*Dernière mise à jour: 2026-09-03 — v4.7.0 Export complété ✅*
*Dernière mise à jour: 2026-09-03 — v4.7.1 Fix UI Share/More/Export ✅*
+1 -1
View File
@@ -1 +1 @@
4.7.0
4.7.1
+2 -2
View File
@@ -39,13 +39,13 @@ async def lifespan(_app: FastAPI):
(admin_hash,)
)
conn.commit()
logger.info("FlowDeck v4.7.0 started on port %d", settings.app_port)
logger.info("FlowDeck v4.7.1 started on port %d", settings.app_port)
yield
app = FastAPI(
title="FlowDeck",
version="4.7.0",
version="4.7.1",
docs_url="/docs" if settings.log_level == "DEBUG" else None,
redoc_url=None,
lifespan=lifespan,
+1 -1
View File
@@ -345,7 +345,7 @@
@click.outside="!_justOpened && (moreOpen = false)"
x-transition
>
<div class="more-menu-item" @click="moreOpen = false; exportOpen = true">↗ Export</div>
<div class="more-menu-item" @click="exportOpen = !exportOpen">↗ Export <span style="margin-left:auto;font-size:10px;opacity:.6">▾</span></div>
<template x-if="exportOpen">
<div class="more-menu-sub">
<div class="more-menu-item" @click="exportPage('markdown')"> Markdown (.md)</div>
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FlowDeck — {% block title_prefix %}Home{% endblock %}</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<link rel="stylesheet" href="/static/css/app.css?v=3.0.0">
<link rel="stylesheet" href="/static/css/app.css?v=4.7.1">
<link rel="stylesheet" href="/static/css/katex.min.css?v=0.16.11">
<style>
/* ── Mobile responsive (v4.0.2) ── */
+31
View File
@@ -2997,6 +2997,37 @@ button.breadcrumb-current { max-width: 260px; }
border-radius: var(--radius-lg); box-shadow: var(--shadow-modal);
z-index: 999;
}
/* Page editor: these popovers are children of .page-editor-wrapper (a scroll
container), so absolute top:100% anchored them BELOW the viewport. Pin them
fixed under the topbar instead. Scoped to the editor wrapper so other pages
(library, local_workspace) keep their relative-positioned .more-menu. */
.page-editor-wrapper > .share-dialog,
.page-editor-wrapper > .more-menu,
.page-editor-wrapper > .activity-popover,
.page-editor-wrapper > .move-dialog {
position: fixed !important;
top: calc(var(--topbar-height) + 6px) !important;
}
.page-editor-wrapper > .share-dialog { right: 72px; }
.page-editor-wrapper > .more-menu { right: 16px; }
.page-editor-wrapper > .activity-popover,
.page-editor-wrapper > .move-dialog { right: 16px !important; }
@media (max-width: 768px) {
/* Keep editor popovers centered/stacked on mobile (base.html media rule
uses !important; mirror the specificity so it still wins here). */
.page-editor-wrapper > .share-dialog,
.page-editor-wrapper > .more-menu,
.page-editor-wrapper > .activity-popover,
.page-editor-wrapper > .move-dialog {
right: auto !important;
top: 50% !important;
width: 92vw !important;
max-width: 400px;
transform: translate(-50%, -50%) !important;
}
.page-editor-wrapper > .more-menu,
.page-editor-wrapper > .activity-popover { top: 60px !important; transform: none !important; left: auto !important; right: 12px !important; width: auto !important; }
}
/* Header with tabs */
.sd-header {
display: flex; align-items: center; height: 56px;
Generated
+3
View File
@@ -0,0 +1,3 @@
version = 1
revision = 3
requires-python = ">=3.13"