feat(editor): v4.8.0 Bloc Tableau simple (edition Notion via /table)
FlowDeck CI / test (push) Failing after 20s
FlowDeck CI / docker (push) Skipped

- Bloc table editable: slash /table, cellules contenteditable, auto-save
- Colonnes: poignee par colonne -> Insert left/right, Duplicate, Clear, Delete
- Lignes: + Row (bas) + menu contextuel -> Insert above/below, Dup, Clear, Del
- md2b importe les tableaux GFM pipe en bloc table (au lieu de paragraphes)
- Roundtrip markdown (JS + export Python MD/HTML/PDF)
- CSS .ftable-editor + menu flottant (app.css?v=4.8.0)
- VERSION/CHANGELOG/ROADMAP bump 4.8.0 (Collaboration -> v4.9.0, Agent -> v4.10.0)
This commit is contained in:
2026-09-03 14:55:25 -04:00
parent 6e30589133
commit c809a864e6
8 changed files with 222 additions and 17 deletions
+44
View File
@@ -4442,3 +4442,47 @@ button.breadcrumb-current { max-width: 260px; }
}
.db-side-peek-close:hover, .db-side-peek-full:hover { background: var(--bg-hover); }
.db-side-peek iframe { flex: 1; }
/* ─── Simple Table block (v4.8.0) ─── */
.ftable-editor { flex: 1; min-width: 0; min-height: 0; padding: 4px 2px; }
.ftable-editor table.ftable-edit { width: 100%; table-layout: fixed; border-collapse: collapse; margin: 0; }
.ftable-edit th.ftable-cell, .ftable-edit td.ftable-cell {
border: 1px solid var(--border); padding: 6px 10px; vertical-align: top;
font-size: 15px; line-height: 1.5; color: var(--text-primary);
outline: none; text-align: left; word-break: break-word; overflow-wrap: break-word;
}
.ftable-edit th.ftable-cell { background: var(--bg-secondary); font-weight: 600; }
.ftable-edit .ftable-cell:hover { background: var(--bg-hover); }
.ftable-edit .ftable-cell:focus { background: var(--bg-hover); box-shadow: inset 0 0 0 1px var(--blue); }
.ftable-editor .ftable-colbar { display: flex; margin: 0 0 3px; }
.ftable-editor .ftable-colcell { flex: 1 1 0; min-width: 0; display: flex; justify-content: flex-end; }
.ftable-editor .ftable-colgrip {
width: 22px; height: 22px; margin: 0 2px 0 auto; display: flex; align-items: center;
justify-content: center; color: var(--text-dim); cursor: pointer; border-radius: 4px;
background: transparent; border: none; opacity: 0; transition: opacity .12s ease;
}
.ftable-editor .ftable-colcell:hover .ftable-colgrip,
.ftable-editor .ftable-colgrip:hover,
.ftable-editor .ftable-colgrip:focus-visible { opacity: 1; }
.ftable-editor .ftable-colgrip:hover { background: var(--bg-hover); color: var(--text-secondary); }
.ftable-editor .ftable-rowbar { display: flex; justify-content: center; margin-top: 2px; opacity: 0; transition: opacity .12s ease; }
.ftable-editor:hover .ftable-rowbar { opacity: 1; }
.ftable-editor .ftable-addrow {
border: none; background: transparent; color: var(--text-dim); cursor: pointer;
font-size: 13px; padding: 4px 12px; border-radius: 6px;
}
.ftable-editor .ftable-addrow:hover { background: var(--bg-hover); color: var(--text-primary); }
.ftable-menu {
min-width: 190px; background: var(--bg-modal); border: 1px solid var(--border);
border-radius: 8px; box-shadow: var(--shadow-modal); padding: 4px;
font-size: 13.5px; color: var(--text-primary);
}
.ftable-menu-item { padding: 6px 12px; border-radius: 5px; cursor: pointer; user-select: none; }
.ftable-menu-item:hover { background: var(--bg-hover); }
.ftable-menu-item.danger { color: var(--danger); }
.ftable-menu-item.danger:hover { background: rgba(229,72,77,.1); }
.ftable-menu-sep { height: 1px; background: var(--border); margin: 4px 8px; }
@media (max-width: 768px) {
.ftable-editor .ftable-colgrip { opacity: 1; }
.ftable-editor .ftable-rowbar { opacity: 1; }
}