2.5 KiB
2.5 KiB
Changelog
[0.1.0] — 2026-05-25 · MVP
Stack
- Vite + Svelte 5 (runes mode) + TypeScript
- TipTap (individual extensions, no starter-kit)
- odf-kit for ODT generation
- No backend — fully client-side
Implemented
- WYSIWYG editor with TipTap
- Bold, Italic, Underline
- Headings H1–H3
- Undo / Redo (History extension)
- Placeholder text on empty document
- Toolbar with active-state highlighting per button
- Reactivity via
tickcounter (Svelte 5 same-reference workaround)
- Reactivity via
- Fixed A4 paper canvas (794 × 1123 px at 96 dpi)
- LocalStorage auto-save (debounced 1 s, restores on reload)
- ODT export via
tiptapToOdt()from odf-kit- Filename derived from first H1/H2/H3 heading, fallback
document.odt
- Filename derived from first H1/H2/H3 heading, fallback
- Favicon (hand-coded SVG, no external assets)
- Lists (ordered / unordered)
- Light / Dark / Allblack / Auto appearance mode (settings menu in toolbar)
- expandable extended toolbar
- DIN A4 print layout with visual page breaks
- add bottom toolbar to show page number
- Zoom feature
- font selection
- font size selection
- line spacing + paragraph spacing
- text alignment
- show formatting marks
- margins
- page orientation
- tables
Not yet implemented
- ODT import / open existing file
- undo history
- Images
- Custom right-click context menu (formatting, cut/copy)
- Multi-document management
- PWA / offline support
- i18n
- ...
Known issues / deferred
- Zoom 100% does not visually match Word/LibreOffice at 100% on the same
screen. Root cause: the editor uses the browser's fixed 96 CSS DPI
(794×1123 px for A4 — see
editor.css,pageBreaks.ts), while Word and LibreOffice render against the OS-reported physical screen DPI so that 1 cm on paper ≈ 1 cm on screen. Possible future fix: add a user-side calibration (DPI value or visual ruler) that scales thezoomfactor. Decided 2026-05-26 not worth the effort for now. - Lists and headings inside a table cell are exported as plain text, not as
real ODF structures. odf-kit's
CellBuilderis run-based (text runs only), so a cell cannot hold a true<text:list>or<text:h>. On export (export/odt.ts): headings render as bold runs at the heading font size, and list items render as separate lines with literal markers (•,1.,2.…), nested lists indented. Content is preserved and readable, but loses list/heading semantics (no auto-numbering, not recognised as a heading). Noted 2026-06-06.