From e5b7528c242ed0abc0068b267f82332dbe702e7a Mon Sep 17 00:00:00 2001 From: Steffen Becker Date: Wed, 27 May 2026 21:08:16 +0200 Subject: [PATCH] fix: heading and boldness inconsistencies --- src/lib/editor/Toolbar.svelte | 30 ++++++++++++++---- src/lib/editor/extensions.ts | 2 ++ src/lib/editor/fontWeight.ts | 60 +++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 src/lib/editor/fontWeight.ts diff --git a/src/lib/editor/Toolbar.svelte b/src/lib/editor/Toolbar.svelte index bf8c758..c1b782f 100644 --- a/src/lib/editor/Toolbar.svelte +++ b/src/lib/editor/Toolbar.svelte @@ -4,12 +4,16 @@ let { editor, tick }: { editor: Editor | null; tick: number } = $props(); // $derived re-evaluates whenever `tick` changes (i.e. on every TipTap transaction) - let isBold = $derived(tick >= 0 && !!editor?.isActive('bold')); - let isItalic = $derived(tick >= 0 && !!editor?.isActive('italic')); - let isUnderline = $derived(tick >= 0 && !!editor?.isActive('underline')); 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 isHeading = $derived(isH1 || isH2 || isH3); + // fontWeight:'normal' is set explicitly to override heading boldness + let hasNormalWeight = $derived(tick >= 0 && !!editor?.isActive('textStyle', { fontWeight: 'normal' })); + // Bold = explicit bold mark, OR inside a heading that hasn't been un-bolded + let isBold = $derived(tick >= 0 && (!!editor?.isActive('bold') || (isHeading && !hasNormalWeight))); + let isItalic = $derived(tick >= 0 && !!editor?.isActive('italic')); + let isUnderline = $derived(tick >= 0 && !!editor?.isActive('underline')); let isBulletList = $derived(tick >= 0 && !!editor?.isActive('bulletList')); let isOrderedList= $derived(tick >= 0 && !!editor?.isActive('orderedList')); let canUndo = $derived(tick >= 0 && !!editor?.can().undo()); @@ -21,7 +25,19 @@