# Changelog - FlowDeck ## v7.50.0 (2026-10-06) — Side peek : le document seul (mode édition), sans sidebar ni barre ### Fixed - **Tous les boutons « Open » ouvraient l'habillage pleine page dans le panneau latéral** — `library.js` (OPEN de hover), `local_workspace.js` (↢ Open + « Open in side peek » du menu contextuel) et `my_tasks.js` (peek des tâches) chargeaient `/pages/{id}` SANS `?embed=1` : le peek affichait sidebar + barre de navigation + éditeur (régression v7.49.0). Tous repassent en `/pages/{id}?embed=1` = le document en mode édition SEUL ; le cadre du panneau (garde/close/resize partagés `fdWirePeekResize`) reste identique. - **Le bouton « Open » du calendrier My Tasks ne faisait rien** — cause racine : le handler de clic testait `e.target.dataset.openRow`, mais les boutons `.mt-cal-open` du calendrier (et du Kanban) ne contiennent que leur `` : cliquer l'icône donnait `e.target` = `` sans dataset. Le handler résout désormais `t.closest('[data-open-row]')` — un seul chemin pour tableau, calendrier (5 vues) et Kanban. - **Menu contextuel global « Open in side peek »** — le clic ne faisait qu'afficher « Side peek not available in browser » : il route maintenant vers le peek de la page courante (`_libData.openPeekById` en Library, `_wsData.openSidePeek` en workspace local), repli nouvel onglet ailleurs. - **Peek d'une page de base (`content_format='collection'`)** — `?embed=1` forçait le template éditeur : une base ouverte dans le peek montrait un éditeur de blocs vide au lieu du tableau. Le template collection est gardé en mode embed (body.embed-mode retire sidebar + barre, le tableau reste). ### Added - **Bouton « Open » sur les tuiles du Kanban My Tasks** — le même que les lignes du tableau (`openButton(t)`, `.mt-hover-only` révélé au survol de la carte, overlay absolu pour ne pas déformer la tuile) ; ouvre le contenu de la tâche dans le panneau latéral. - **Bouton « pleine page » des peeks de bases** — navigue vers `/pages/{pageId}` (pleine page, sidebar + barre conservées) au lieu de l'URL `?embed=1` de l'iframe ; `dataset.page` porte l'id résolu. ### Tests - `test_my_tasks_workspace_coherence.py` : les 4 peek JS (`library`, `my_tasks`, `database_table`, `local_workspace`) doivent porter `?embed=1` (gate de cohérence inversé — l'ancien test imposait l'URL nue) ; nouveaux : résolution `closest('[data-open-row]')`, bouton Open sur tuiles Kanban, collection embed = tableau. Suite 1264 passed / 0 failed (-n auto) + ruff 0. ## v7.49.2 (2026-10-05) — Pages de base : titre au-dessus, tableau à gauche ### Fixed - **Le tableau d'une page de base commençait au 1/3 de la page** — une base créée depuis un document est un bloc `embed collection` rendu dans la colonne éditeur `.blocks-container` (`max-width: 900px; margin: 0 auto`) : centrée sur un grand écran, donc décalée loin du sidebar (mesuré x=694 sur 1920 px). Nouvelle classe `.db-first` sur le wrapper éditeur quand le premier bloc est une base : titre et blocs passent à `margin: 0` + `padding-left: var(--space-lg)` (liseré de la topbar) — tableau au ras du sidebar (x=256 mesuré), titre au-dessus, plus de débordement de l'embed (`max-width: 100%`, le scroll horizontal reste géré par `.db-table-wrapper`). - **Les pages de base dédiées (`content_format='collection'`) n'avaient pas de titre** — `page_editor_collection.html` rend le tableau sans en-tête de page. Un `

` est ajouté au-dessus du conteneur, avec le même liseré gauche que le tableau. ## v7.49.1 (2026-10-05) — Tableau des bases aligné sur le titre ### Fixed - **Le tableau d'une page de base était décalé sous le titre** — le conteneur `.database-table-container` avait `padding: 0 24px` tandis que la topbar (fil d'Ariane/titre) est à `var(--space-lg)` = 16 px : deux marges gauches différentes. Le conteneur passe à la même valeur que la topbar, `margin: 0` conservé — le bord gauche du tableau s'aligne désormais au ras du titre et de la marge. ## v7.49.0 (2026-10-05) — Side peek : l'éditeur plein écran, et un calendrier complet ### Added - **Calendrier My Tasks : cinq vues** — Mois, Année, Semaine, Jour et Planning, avec une navigation propre à chaque granularité (`←` / `→` et « Aujourd'hui » se recalculent : par exemple 5 – 11 octobre → 12 – 18 octobre en semaine, ou un jour en année). L'Année affiche les douze mini-mois de l'année courante et le Planning une ligne par jour avec ses tâches réparties par statut. - **Icône d'ouverture sur chaque tâche du calendrier** — même bouton « Open in side peek » que le tableau, révélé au survol. Elle porte le même attribut de ligne (`data-open-row`), donc un seul gestionnaire de clic pour toutes les vues : le titre est transmis par `data-open-title`, disponible là où il n'y a pas de ligne `.mt-row` (vues Jour, Semaine et Année). ### Fixed - **Impossible d'ajuster la largeur du side peek des bases** — le panneau avait été réécrit en bindings Alpine (`:class="dbPeekOpen"`, `@click.outside`) alors que le conteneur n'a aucun `x-data` : bindings inertes, `openPageInSidePeek` passait par `container.__x.$data` (undefined), le panneau ne s'ouvrait pas et la poignée de redimensionnement ne réagissait pas. Repassé en vanilla JS (câblage direct sur le document, repli discret pour les collections embarquées inline). Au passage : les quatre implémentations dupliquées du drag de largeur (Library, workspace local, My Tasks, bases) sont remplacées par un helper unique `window.fdWirePeekResize` (`app.js`) — pointer capture, borne 300 px–90 vw, clic = fermer, largeur persistée (`fd_peek_width`) et commune à tous les peeks, restaurée au chargement. My Tasks ne capturait ni le pointeur ni la largeur : son drag était erratique et non mémorisé. - **Largeur des pages standardisée sur celle de Library (1100 px)** — le conteneur des bases (`.database-table-container`) passe à `margin: 0` : le tableau est collé à gauche, au ras de la marge, au lieu d'être centré dans la page. `/trash` utilisait la classe `.lib-container` dont la règle vivait dans le `