diff --git a/packages/text-editor/src/components/ReferenceInput.svelte b/packages/text-editor/src/components/ReferenceInput.svelte index 50cf4a6161..c2a7d1828c 100644 --- a/packages/text-editor/src/components/ReferenceInput.svelte +++ b/packages/text-editor/src/components/ReferenceInput.svelte @@ -20,7 +20,7 @@ import { createEventDispatcher } from 'svelte' import { Completion } from '../Completion' import textEditorPlugin from '../plugin' - import { RefInputAction, RefInputActionItem, TextEditorHandler } from '../types' + import { RefInputAction, RefInputActionItem, TextEditorHandler, FORMAT_MODES, FormatMode } from '../types' import Attach from './icons/Attach.svelte' import Bold from './icons/Bold.svelte' import Italic from './icons/Italic.svelte' @@ -46,8 +46,7 @@ let textEditor: TextEditor let isFormatting = false - let isBold = false - let isItalic = false + let activeModes = new Set() export let categories: ObjectSearchCategory[] = [] @@ -173,20 +172,15 @@ } function updateFormattingState () { - isBold = textEditor.checkIsActive('bold') - isItalic = textEditor.checkIsActive('italic') + activeModes = new Set(FORMAT_MODES.filter(textEditor.checkIsActive)) } - function toggleBold () { - textEditor.toggleBold() - textEditor.focus() - isBold = !isBold - } - - function toggleItalic () { - textEditor.toggleItalic() - textEditor.focus() - isItalic = !isItalic + function getToggler (toggle: () => void) { + return () => { + toggle() + textEditor.focus() + updateFormattingState() + } } @@ -194,31 +188,79 @@ {#if isFormatting}
-
{/if} diff --git a/packages/text-editor/src/components/TextEditor.svelte b/packages/text-editor/src/components/TextEditor.svelte index b5c0a42f10..a8c8d0171d 100644 --- a/packages/text-editor/src/components/TextEditor.svelte +++ b/packages/text-editor/src/components/TextEditor.svelte @@ -24,6 +24,7 @@ import StarterKit from '@tiptap/starter-kit' import { createEventDispatcher, onDestroy, onMount } from 'svelte' import textEditorPlugin from '../plugin' + import { FormatMode } from '../types' export let content: string = '' export let placeholder: IntlString = textEditorPlugin.string.EditorPlaceholder @@ -53,8 +54,8 @@ export function insertText (text: string): void { editor.commands.insertContent(text as HTMLContent) } - export function checkIsActive (markName: string) { - return editor.isActive(markName) + export function checkIsActive (formatMode: FormatMode) { + return editor.isActive(formatMode) } export function toggleBold () { editor.commands.toggleBold() @@ -62,6 +63,24 @@ export function toggleItalic () { editor.commands.toggleItalic() } + export function toggleStrike () { + editor.commands.toggleStrike() + } + export function toggleOrderedList () { + editor.commands.toggleOrderedList() + } + export function toggleBulletList () { + editor.commands.toggleBulletList() + } + export function toggleBlockquote () { + editor.commands.toggleBlockquote() + } + export function toggleCode () { + editor.commands.toggleCode() + } + export function toggleCodeBlock () { + editor.commands.toggleCodeBlock() + } let needFocus = false export function focus (): void { needFocus = true diff --git a/packages/text-editor/src/types.ts b/packages/text-editor/src/types.ts index 42fdcb0a7f..4c68c48fb7 100644 --- a/packages/text-editor/src/types.ts +++ b/packages/text-editor/src/types.ts @@ -24,3 +24,16 @@ export interface RefInputActionItem extends Doc { order?: number } + +export const FORMAT_MODES = [ + 'bold', + 'italic', + 'strike', + 'orderedList', + 'bulletList', + 'blockquote', + 'code', + 'codeBlock' +] as const + +export type FormatMode = typeof FORMAT_MODES[number]