From 03384c3da44dfe326a9a3b6811d4828e2c07549c Mon Sep 17 00:00:00 2001 From: Steffen Becker Date: Fri, 14 Aug 2026 12:07:32 +0200 Subject: [PATCH] chore: the gap list is current again, and the check is clean The Navigator was still listed as missing; only split view is. Formula recalculation stops the walk at the blocks a table cannot be in, or it visits every run of the document per keystroke. One dead CSS rule goes, so svelte-check reports nothing at all. --- CHANGELOG.md | 4 ++-- src/App.svelte | 6 ------ src/lib/editor/extensions/tableFormula.ts | 3 +++ 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cd4731..76ccd57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -139,7 +139,7 @@ ### Not yet implemented -The gap against Word/LibreOffice, most valuable first. Reviewed 2026-08-08. +The gap against Word/LibreOffice, most valuable first. Reviewed 2026-08-14. **Content an imported document loses** - Charts are **drawn** from the file (`import/chart.ts`: DrawingML `chartN.xml` and ODF `chart:chart`), but as a picture, not a chart object — a re-export carries the drawing and the numbers behind it are no longer editable. The same holds for an **EMF** metafile (`import/emf.ts`): it is drawn, but as the SVG picture it was rebuilt into, and only from the record set a plot consists of — a hatched brush, a clipping region or a rotated bitmap is skipped. **WMF/SVM** metafiles and OLE objects still keep their box and a placeholder label, and export writes that back out: WMF is a different (16-bit) record format, SVM is StarOffice-proprietary, and an OLE object cannot be rendered without its application @@ -160,7 +160,7 @@ The gap against Word/LibreOffice, most valuable first. Reviewed 2026-08-08. - Thesaurus, grammar check, word completion, AutoText / building blocks - Vertical writing modes (ODF `tb-rl`) and Asian typography (ruby) - Password-protected ODT/DOCX; digital signatures -- Navigator / outline view, split view +- Split view: two views of one document, scrolled independently - File handlers, so the OS can offer the installed app for a double-clicked `.odt`/`.docx` (Chrome's `file_handlers` + `launchQueue`) - A committed corpus of documents we author ourselves, so CI can test against real files (`.gitignore` excludes all of `tests/render-parity/fixtures/` today) diff --git a/src/App.svelte b/src/App.svelte index cfdabbf..2e0d340 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -1671,12 +1671,6 @@ transform: none; } - .action-separator { - width: 1px; - height: 1.5rem; - background: var(--color-border); - } - .file-action-btn { display: inline-flex; align-items: center; diff --git a/src/lib/editor/extensions/tableFormula.ts b/src/lib/editor/extensions/tableFormula.ts index d2005f2..c0a29ad 100644 --- a/src/lib/editor/extensions/tableFormula.ts +++ b/src/lib/editor/extensions/tableFormula.ts @@ -107,6 +107,9 @@ type Edit = { pos: number; cell: PMNode; text: string }; function formulaEdits(doc: PMNode, loc: NumberLocale): Edit[] { const edits: Edit[] = []; doc.descendants((node, pos) => { + // This runs on every edit, so the walk stops at the blocks a table cannot be in — + // otherwise it visits every run of the document per keystroke. + if (node.isTextblock) return false; if (node.type.name !== 'table') return; for (const [off, text] of evaluateTable(node, loc, t().table.formulaError)) { const cell = node.nodeAt(off);