From 15b9386eb72e2f333a6f330bb77d45a39c173eb2 Mon Sep 17 00:00:00 2001 From: Steffen Becker Date: Fri, 3 Jul 2026 23:58:11 +0200 Subject: [PATCH] feat: add table frame menue --- CHANGELOG.md | 1 + src/lib/components/TableBorderPicker.svelte | 310 ++++++++++++++++++ src/lib/components/TableToolbar.svelte | 3 + src/lib/editor/extensions.ts | 3 + src/lib/editor/extensions/tableCellBorders.ts | 239 ++++++++++++++ src/lib/export/docx.ts | 16 +- src/lib/export/odt.ts | 7 + src/lib/import/docx.ts | 43 ++- src/lib/import/odt.ts | 37 ++- src/lib/import/styleResolver.ts | 15 + tests/docx-roundtrip.test.ts | 8 +- tests/lo-roundtrip.test.ts | 7 +- tests/roundtrip.test.ts | 35 ++ tests/unit/table-borders.test.ts | 245 ++++++++++++++ 14 files changed, 963 insertions(+), 6 deletions(-) create mode 100644 src/lib/components/TableBorderPicker.svelte create mode 100644 src/lib/editor/extensions/tableCellBorders.ts create mode 100644 tests/unit/table-borders.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c35373c..3a44ec6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ **Insert** - Tables: insert via size picker, Word-style row/column drag-resize, add / delete rows & columns, delete table, cell borders, merge cells and split cells (N×M, Word/LibreOffice-style), cell background shading, header-row toggle (bold + shading); a table splits cleanly across page boundaries +- Table border control (Word/LibreOffice-style): per-side cell borders with presets (all / outside / inside / single edges / none), line width and color; buttons show active states matching the current pen and toggle borders off; round-trips to ODF `fo:border-*` and DOCX `w:tcBorders` - Images: inline or floating with text wrap (left / right / top-bottom), resize handles, rotation, live size badge; insert via toolbar, drag-and-drop, or paste - Special characters picker - Table of contents: generated from headings (H1–H3) with live page numbers and dot leaders, click an entry to jump to its heading; round-trips to ODF `text:table-of-content` and a Word TOC field diff --git a/src/lib/components/TableBorderPicker.svelte b/src/lib/components/TableBorderPicker.svelte new file mode 100644 index 0000000..61cf660 --- /dev/null +++ b/src/lib/components/TableBorderPicker.svelte @@ -0,0 +1,310 @@ + + +
+ + + {#if open} +
+
Borders
+
+ {#each PRESETS as preset} + + {/each} +
+ +
Line width
+
+ {#each WIDTHS as w} + + {/each} +
+ +
Line color
+
+ {#each COLORS as row} +
+ {#each row as c} + + {/each} +
+ {/each} +
+
+ {/if} +
+ + diff --git a/src/lib/components/TableToolbar.svelte b/src/lib/components/TableToolbar.svelte index ac1353b..b34d918 100644 --- a/src/lib/components/TableToolbar.svelte +++ b/src/lib/components/TableToolbar.svelte @@ -3,6 +3,7 @@ import { CellSelection } from '@tiptap/pm/tables'; import { isHeaderRowStyled } from '../editor/extensions/tableHeaderRow'; import ColorPicker from './ColorPicker.svelte'; + import TableBorderPicker from './TableBorderPicker.svelte'; let { editor, @@ -210,6 +211,8 @@ {/snippet} + +