From 0098374ac84cf0170c504b290af85fb2507f95c0 Mon Sep 17 00:00:00 2001 From: Steffen Becker Date: Mon, 25 May 2026 12:55:05 +0200 Subject: [PATCH] feat: add bullet and ordered list support --- CHANGELOG.md | 2 +- package-lock.json | 57 +++++++++++++++++++++++++++++++++++ package.json | 3 ++ src/lib/editor/Toolbar.svelte | 21 +++++++++++++ src/lib/editor/extensions.ts | 6 ++++ src/styles/editor.css | 10 ++++++ 6 files changed, 98 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41e2d0a..3cdfba3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,9 +21,9 @@ - ODT export via `tiptapToOdt()` from odf-kit - Filename derived from first H1/H2/H3 heading, fallback `document.odt` - Favicon (hand-coded SVG, no external assets) +- Lists (ordered / unordered) ### Not yet implemented -- Lists (ordered / unordered) - light/dark and auto appearance mode in a settings menu - ODT import / open existing file - font size diff --git a/package-lock.json b/package-lock.json index cd5ad8f..d8b60fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,10 +10,13 @@ "dependencies": { "@tiptap/core": "^3.23.6", "@tiptap/extension-bold": "^3.23.6", + "@tiptap/extension-bullet-list": "^3.23.6", "@tiptap/extension-document": "^3.23.6", "@tiptap/extension-heading": "^3.23.6", "@tiptap/extension-history": "^3.23.6", "@tiptap/extension-italic": "^3.23.6", + "@tiptap/extension-list-item": "^3.23.6", + "@tiptap/extension-ordered-list": "^3.23.6", "@tiptap/extension-paragraph": "^3.23.6", "@tiptap/extension-placeholder": "^3.23.6", "@tiptap/extension-text": "^3.23.6", @@ -480,6 +483,19 @@ "@tiptap/core": "3.23.6" } }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "3.23.6", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.23.6.tgz", + "integrity": "sha512-RMRgfXZykr/13X8UBOwvpgysVOo9KchwqMoEbvqQSj4YFfU56iIn59C8sbxiQ1sKfeltUf0wH4fPc0I4iwKqAA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.23.6" + } + }, "node_modules/@tiptap/extension-document": { "version": "3.23.6", "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.23.6.tgz", @@ -532,6 +548,47 @@ "@tiptap/core": "3.23.6" } }, + "node_modules/@tiptap/extension-list": { + "version": "3.23.6", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.23.6.tgz", + "integrity": "sha512-z6vj9+Qht2sjdQkyyHcUpsC/yCIZqTrQiyHDhs/HGKrfvoANyAZGpqdNeKf1wSyjIso+27tQuIH5NDfk8ygyNw==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.23.6", + "@tiptap/pm": "3.23.6" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "3.23.6", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.23.6.tgz", + "integrity": "sha512-3zzyhdkUWcHVpXuvy6KiIwjh29rbH6gEDEqPQqHLrl1XGnO9pnShC7pSHctlCDjmcx3O4n9cd4QMtVBlUerbiA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.23.6" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "3.23.6", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.23.6.tgz", + "integrity": "sha512-1m/wWB/ZtXcmG2vNdiUkCqsOgqv5vBjCv/mVaHhF9OvV+zQS8YDjoWE7zEuT/GgELdT77Xq8lHrn4nCDudB3/A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.23.6" + } + }, "node_modules/@tiptap/extension-paragraph": { "version": "3.23.6", "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.23.6.tgz", diff --git a/package.json b/package.json index 6264149..fb2e56a 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,13 @@ "dependencies": { "@tiptap/core": "^3.23.6", "@tiptap/extension-bold": "^3.23.6", + "@tiptap/extension-bullet-list": "^3.23.6", "@tiptap/extension-document": "^3.23.6", "@tiptap/extension-heading": "^3.23.6", "@tiptap/extension-history": "^3.23.6", "@tiptap/extension-italic": "^3.23.6", + "@tiptap/extension-list-item": "^3.23.6", + "@tiptap/extension-ordered-list": "^3.23.6", "@tiptap/extension-paragraph": "^3.23.6", "@tiptap/extension-placeholder": "^3.23.6", "@tiptap/extension-text": "^3.23.6", diff --git a/src/lib/editor/Toolbar.svelte b/src/lib/editor/Toolbar.svelte index e7d4f5a..8d2979e 100644 --- a/src/lib/editor/Toolbar.svelte +++ b/src/lib/editor/Toolbar.svelte @@ -10,6 +10,8 @@ let isH1 = $derived(tick >= 0 && !!editor?.isActive('heading', { level: 1 })); let isH2 = $derived(tick >= 0 && !!editor?.isActive('heading', { level: 2 })); let isH3 = $derived(tick >= 0 && !!editor?.isActive('heading', { level: 3 })); + let isBulletList = $derived(tick >= 0 && !!editor?.isActive('bulletList')); + let isOrderedList= $derived(tick >= 0 && !!editor?.isActive('orderedList')); let canUndo = $derived(tick >= 0 && !!editor?.can().undo()); let canRedo = $derived(tick >= 0 && !!editor?.can().redo()); @@ -68,6 +70,25 @@
+
+ + +
+ +
+