@qalma/editor 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qalma-editor.mjs","sources":["../../../../libs/editor/src/lib/editor/editor-context.ts","../../../../libs/editor/src/lib/editor/command.ts","../../../../libs/editor/src/lib/editor/content.ts","../../../../libs/editor/src/lib/editor/editor.ts","../../../../libs/editor/src/lib/prosemirror/html.ts","../../../../libs/editor/src/lib/prosemirror/plugins.ts","../../../../libs/editor/src/lib/prosemirror/schema.ts","../../../../libs/editor/src/lib/prosemirror/state.ts","../../../../libs/editor/src/lib/editor/qalma-editor-controller.ts","../../../../libs/editor/src/lib/editor/toolbar.ts","../../../../libs/editor/src/lib/plugins/qalma-plugin.ts","../../../../libs/editor/src/lib/plugins/blockquote.ts","../../../../libs/editor/src/lib/plugins/clear-formatting.ts","../../../../libs/editor/src/lib/plugins/code-block.ts","../../../../libs/editor/src/lib/plugins/color.ts","../../../../libs/editor/src/lib/plugins/hard-break.ts","../../../../libs/editor/src/lib/plugins/highlight.ts","../../../../libs/editor/src/lib/plugins/history.ts","../../../../libs/editor/src/lib/plugins/headings.ts","../../../../libs/editor/src/lib/plugins/image.ts","../../../../libs/editor/src/lib/prosemirror/queries.ts","../../../../libs/editor/src/lib/plugins/link.ts","../../../../libs/editor/src/lib/plugins/lists.ts","../../../../libs/editor/src/lib/plugins/mention.ts","../../../../libs/editor/src/lib/plugins/paste-rules.ts","../../../../libs/editor/src/lib/plugins/placeholder.ts","../../../../libs/editor/src/lib/plugins/subscript-superscript.ts","../../../../libs/editor/src/lib/plugins/text-align.ts","../../../../libs/editor/src/lib/plugins/text-formatting.ts","../../../../libs/editor/src/lib/plugins/trailing-paragraph.ts","../../../../libs/editor/src/qalma-editor.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\n\nimport { QalmaEditorController } from './qalma-editor-controller';\n\nexport interface QalmaEditorContext {\n readonly editor: Signal<QalmaEditorController>;\n}\n\nexport const QALMA_EDITOR_CONTEXT = new InjectionToken<QalmaEditorContext>(\n 'QALMA_EDITOR_CONTEXT',\n);\n","import { Directive, computed, inject, input } from '@angular/core';\n\nimport { QALMA_EDITOR_CONTEXT } from './editor-context';\n\n@Directive({\n selector: 'button[qalmaCommand]',\n host: {\n '(click)': 'execute()',\n '(mousedown)': 'preserveSelection($event)',\n '[attr.aria-pressed]': 'ariaPressed()',\n '[class.qalma-command-active]': 'active()',\n '[disabled]': 'disabled()',\n },\n})\nexport class QalmaCommand {\n readonly command = input.required<string>({ alias: 'qalmaCommand' });\n readonly qalmaCommandValue = input<unknown>();\n\n private readonly context = inject(QALMA_EDITOR_CONTEXT);\n private readonly editor = computed(() => this.context.editor());\n\n protected readonly active = computed(() =>\n this.editor().isCommandActive(this.command()),\n );\n protected readonly disabled = computed(\n () =>\n !this.editor().canExecute(this.command(), this.qalmaCommandValue()),\n );\n protected readonly ariaPressed = computed(() =>\n this.editor().hasCommandState(this.command())\n ? String(this.active())\n : null,\n );\n\n protected execute(): void {\n this.editor().execute(this.command(), this.qalmaCommandValue());\n }\n\n protected preserveSelection(event: MouseEvent): void {\n event.preventDefault();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n afterNextRender,\n inject,\n viewChild,\n} from '@angular/core';\n\nimport { QALMA_EDITOR_CONTEXT } from './editor-context';\n\n@Component({\n selector: 'qalma-content',\n imports: [],\n template: `<div #editorHost class=\"qalma-content-surface\"></div>`,\n host: {\n '[class.qalma-content]': 'true',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QalmaContent {\n private readonly context = inject(QALMA_EDITOR_CONTEXT);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly editorHost =\n viewChild.required<ElementRef<HTMLDivElement>>('editorHost');\n\n private mountedHost?: HTMLElement;\n\n constructor() {\n afterNextRender(() => {\n const host = this.editorHost().nativeElement;\n\n this.context.editor().mount(host);\n this.mountedHost = host;\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.mountedHost) {\n this.context.editor().unmount(this.mountedHost);\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n input,\n} from '@angular/core';\n\nimport { QALMA_EDITOR_CONTEXT, QalmaEditorContext } from './editor-context';\nimport { QalmaEditorController } from './qalma-editor-controller';\n\n@Component({\n selector: 'qalma-editor',\n imports: [],\n providers: [\n {\n provide: QALMA_EDITOR_CONTEXT,\n useExisting: forwardRef(() => QalmaEditor),\n },\n ],\n template: `<ng-content />`,\n host: {\n '[class.qalma-editor]': 'true',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QalmaEditor implements QalmaEditorContext {\n readonly editor = input.required<QalmaEditorController>();\n}\n","import {\n DOMParser,\n DOMSerializer,\n Node as ProseMirrorNode,\n Schema,\n} from 'prosemirror-model';\n\nexport function parseHtmlDocument(\n html: string,\n schema: Schema,\n): ProseMirrorNode {\n const container = document.createElement('div');\n container.innerHTML = html.trim() || '<p></p>';\n\n return DOMParser.fromSchema(schema).parse(container);\n}\n\nexport function serializeHtmlDocument(\n doc: ProseMirrorNode,\n schema: Schema,\n): string {\n const fragment = DOMSerializer.fromSchema(schema).serializeFragment(\n doc.content,\n );\n const container = document.createElement('div');\n\n container.appendChild(fragment);\n\n return container.innerHTML.replace(/\\n/g, '&#10;');\n}\n","import { keymap } from 'prosemirror-keymap';\nimport { baseKeymap } from 'prosemirror-commands';\nimport { Schema } from 'prosemirror-model';\nimport { Command, Plugin as ProseMirrorPlugin } from 'prosemirror-state';\n\nimport {\n QalmaCommandHandler,\n QalmaPlugin,\n QalmaQuery,\n QalmaStateQuery,\n} from '../plugins/qalma-plugin';\n\nexport function createBasePlugins(\n schema: Schema,\n qalmaPlugins: readonly QalmaPlugin[],\n): ProseMirrorPlugin[] {\n const shortcuts = createShortcutRegistry(schema, qalmaPlugins);\n\n return [\n ...qalmaPlugins.flatMap(\n (plugin) => plugin.prosemirrorPlugins?.(schema) ?? [],\n ),\n ...(Object.keys(shortcuts).length > 0 ? [keymap(shortcuts)] : []),\n keymap(baseKeymap),\n ];\n}\n\nexport function createCommandRegistry(\n schema: Schema,\n qalmaPlugins: readonly QalmaPlugin[],\n): Record<string, QalmaCommandHandler> {\n const commands: Record<string, QalmaCommandHandler> = {};\n\n for (const plugin of qalmaPlugins) {\n for (const [name, command] of Object.entries(\n plugin.commands?.(schema) ?? {},\n )) {\n if (commands[name]) {\n throw new Error(\n `QALMA plugin \"${plugin.key}\" defines duplicate command \"${name}\".`,\n );\n }\n\n commands[name] = command;\n }\n }\n\n return commands;\n}\n\nexport function createCommandStateRegistry(\n schema: Schema,\n qalmaPlugins: readonly QalmaPlugin[],\n): Record<string, QalmaStateQuery> {\n const states: Record<string, QalmaStateQuery> = {};\n\n for (const plugin of qalmaPlugins) {\n for (const [commandName, query] of Object.entries(\n plugin.commandStates?.(schema) ?? {},\n )) {\n if (states[commandName]) {\n throw new Error(\n `QALMA plugin \"${plugin.key}\" defines duplicate command state \"${commandName}\".`,\n );\n }\n\n states[commandName] = query;\n }\n }\n\n return states;\n}\n\nexport function createQueryRegistry(\n schema: Schema,\n qalmaPlugins: readonly QalmaPlugin[],\n): Partial<Record<string, QalmaQuery>> {\n const queries: Partial<Record<string, QalmaQuery>> = {};\n\n for (const plugin of qalmaPlugins) {\n for (const [name, query] of Object.entries(\n plugin.queries?.(schema) ?? {},\n )) {\n if (queries[name]) {\n throw new Error(\n `QALMA plugin \"${plugin.key}\" defines duplicate query \"${name}\".`,\n );\n }\n\n queries[name] = query;\n }\n }\n\n return queries;\n}\n\nfunction createShortcutRegistry(\n schema: Schema,\n qalmaPlugins: readonly QalmaPlugin[],\n): Record<string, Command> {\n const shortcuts: Record<string, Command> = {};\n\n for (const plugin of qalmaPlugins) {\n for (const [shortcut, command] of Object.entries(\n plugin.shortcuts?.(schema) ?? {},\n )) {\n if (shortcuts[shortcut]) {\n throw new Error(\n `QALMA plugin \"${plugin.key}\" defines duplicate shortcut \"${shortcut}\".`,\n );\n }\n\n shortcuts[shortcut] = command;\n }\n }\n\n return shortcuts;\n}\n","import { MarkSpec, NodeSpec, Schema } from 'prosemirror-model';\n\nimport { QalmaPlugin } from '../plugins/qalma-plugin';\n\nconst baseNodes: Record<string, NodeSpec> = {\n doc: {\n content: 'block+',\n },\n paragraph: {\n content: 'inline*',\n group: 'block',\n parseDOM: [{ tag: 'p' }],\n toDOM: () => ['p', 0] as const,\n },\n text: {\n group: 'inline',\n },\n};\n\nexport function createQalmaSchema(plugins: readonly QalmaPlugin[]): Schema {\n assertUniquePluginKeys(plugins);\n\n const nodes: Record<string, NodeSpec> = { ...baseNodes };\n const marks: Record<string, MarkSpec> = {};\n\n for (const plugin of plugins) {\n addUniqueEntries(nodes, plugin.nodes, plugin.key, 'node');\n addUniqueEntries(marks, plugin.marks, plugin.key, 'mark');\n }\n\n for (const plugin of plugins) {\n extendExistingNodes(\n nodes,\n plugin.extendNodes?.(Object.freeze({ ...nodes })),\n plugin.key,\n );\n }\n\n return new Schema({\n nodes,\n marks,\n });\n}\n\nfunction assertUniquePluginKeys(plugins: readonly QalmaPlugin[]): void {\n const keys = new Set<string>();\n\n for (const plugin of plugins) {\n if (keys.has(plugin.key)) {\n throw new Error(`Duplicate QALMA plugin key \"${plugin.key}\".`);\n }\n\n keys.add(plugin.key);\n }\n}\n\nfunction addUniqueEntries<T>(\n target: Record<string, T>,\n entries: Record<string, T> | undefined,\n pluginKey: string,\n type: 'mark' | 'node',\n): void {\n for (const [name, spec] of Object.entries(entries ?? {})) {\n if (target[name]) {\n throw new Error(\n `QALMA plugin \"${pluginKey}\" defines duplicate ${type} \"${name}\".`,\n );\n }\n\n target[name] = spec;\n }\n}\n\nfunction extendExistingNodes(\n nodes: Record<string, NodeSpec>,\n extensions: Record<string, NodeSpec> | undefined,\n pluginKey: string,\n): void {\n for (const [name, spec] of Object.entries(extensions ?? {})) {\n if (!nodes[name]) {\n throw new Error(\n `QALMA plugin \"${pluginKey}\" extends unknown node \"${name}\".`,\n );\n }\n\n nodes[name] = spec;\n }\n}\n","import { Schema } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport { QalmaPlugin } from '../plugins/qalma-plugin';\nimport { parseHtmlDocument } from './html';\nimport { createBasePlugins } from './plugins';\n\ninterface QalmaStateOptions {\n html: string;\n plugins: readonly QalmaPlugin[];\n schema: Schema;\n}\n\nexport function createQalmaState(options: QalmaStateOptions): EditorState {\n return EditorState.create({\n doc: parseHtmlDocument(options.html, options.schema),\n schema: options.schema,\n plugins: createBasePlugins(options.schema, options.plugins),\n });\n}\n","import { Signal, WritableSignal, signal } from '@angular/core';\nimport { Schema } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport {\n QalmaCommandHandler,\n QalmaCommandValue,\n QalmaPlugin,\n QalmaQuery,\n QalmaStateQuery,\n} from '../plugins/qalma-plugin';\nimport { serializeHtmlDocument } from '../prosemirror/html';\nimport {\n createCommandRegistry,\n createCommandStateRegistry,\n createQueryRegistry,\n} from '../prosemirror/plugins';\nimport { createQalmaSchema } from '../prosemirror/schema';\nimport { createQalmaState } from '../prosemirror/state';\n\nexport interface QalmaEditorOptions {\n content?: string;\n editable?: boolean;\n plugins?: readonly QalmaPlugin[];\n}\n\nexport class QalmaEditorController {\n readonly html: Signal<string>;\n readonly editable: Signal<boolean>;\n\n private readonly plugins: readonly QalmaPlugin[];\n private readonly schema: Schema;\n private readonly htmlState: WritableSignal<string>;\n private readonly editableState: WritableSignal<boolean>;\n private readonly viewVersion = signal(0);\n private readonly commands: Record<string, QalmaCommandHandler>;\n private readonly commandStates: Record<string, QalmaStateQuery>;\n private readonly queries: Partial<Record<string, QalmaQuery>>;\n private editorState?: EditorState;\n private editorView?: EditorView;\n private host?: HTMLElement;\n\n constructor(options: QalmaEditorOptions = {}) {\n this.plugins = [...(options.plugins ?? [])];\n this.schema = createQalmaSchema(this.plugins);\n this.commands = createCommandRegistry(this.schema, this.plugins);\n this.commandStates = createCommandStateRegistry(this.schema, this.plugins);\n this.queries = createQueryRegistry(this.schema, this.plugins);\n\n this.htmlState = signal(options.content ?? '<p></p>');\n this.editableState = signal(options.editable ?? true);\n\n this.html = this.htmlState.asReadonly();\n this.editable = this.editableState.asReadonly();\n }\n\n mount(host: HTMLElement): void {\n if (this.host === host && this.editorView) {\n return;\n }\n\n this.unmount();\n host.replaceChildren();\n\n this.editorState = createQalmaState({\n html: this.html(),\n plugins: this.plugins,\n schema: this.schema,\n });\n this.host = host;\n this.editorView = new EditorView(host, {\n state: this.editorState,\n editable: () => this.editable(),\n attributes: this.createEditorAttributes(),\n dispatchTransaction: (transaction) =>\n this.dispatchTransaction(transaction),\n });\n this.syncHtmlFromEditorState();\n this.bumpViewVersion();\n }\n\n unmount(host?: HTMLElement): void {\n if (host && host !== this.host) {\n return;\n }\n\n this.editorView?.destroy();\n this.editorView = undefined;\n this.editorState = undefined;\n this.host = undefined;\n this.bumpViewVersion();\n }\n\n execute(commandName: string, value?: QalmaCommandValue): boolean {\n const command = this.commands[commandName];\n\n if (!this.editable() || !command || !this.editorState) {\n return false;\n }\n\n const executed = command(\n this.editorState,\n (transaction) => this.dispatchTransaction(transaction),\n this.editorView,\n value,\n );\n\n if (executed) {\n this.editorView?.focus();\n }\n\n return executed;\n }\n\n canExecute(commandName: string, value?: QalmaCommandValue): boolean {\n this.viewVersion();\n\n const command = this.commands[commandName];\n\n return Boolean(\n this.editable() &&\n command &&\n this.editorState &&\n command(this.editorState, undefined, this.editorView, value),\n );\n }\n\n hasCommandState(commandName: string): boolean {\n return Boolean(this.commandStates[commandName]);\n }\n\n isCommandActive(commandName: string): boolean {\n this.viewVersion();\n\n const query = this.commandStates[commandName];\n\n return Boolean(query && this.editorState && query(this.editorState));\n }\n\n hasQuery(queryName: string): boolean {\n return Boolean(this.queries[queryName]);\n }\n\n query<TValue = unknown>(queryName: string): TValue | null {\n this.viewVersion();\n\n const query = this.queries[queryName];\n\n return query && this.editorState\n ? (query(this.editorState) as TValue)\n : null;\n }\n\n setHtml(html: string): void {\n if (html === this.html()) {\n return;\n }\n\n if (!this.editorView) {\n this.htmlState.set(html);\n\n return;\n }\n\n this.editorState = createQalmaState({\n html,\n plugins: this.plugins,\n schema: this.schema,\n });\n this.editorView.updateState(this.editorState);\n this.syncHtmlFromEditorState();\n this.bumpViewVersion();\n }\n\n setEditable(editable: boolean): void {\n this.editableState.set(editable);\n this.editorView?.setProps({\n editable: () => editable,\n });\n }\n\n focus(): void {\n this.editorView?.focus();\n }\n\n private dispatchTransaction(transaction: Transaction): void {\n if (!this.editorState) {\n return;\n }\n\n this.editorState = this.editorState.apply(transaction);\n this.editorView?.updateState(this.editorState);\n\n if (transaction.docChanged) {\n this.syncHtmlFromEditorState();\n }\n\n this.bumpViewVersion();\n }\n\n private syncHtmlFromEditorState(): void {\n if (!this.editorState) {\n return;\n }\n\n const html = serializeHtmlDocument(this.editorState.doc, this.schema);\n\n if (html !== this.html()) {\n this.htmlState.set(html);\n }\n }\n\n private bumpViewVersion(): void {\n this.viewVersion.update((value) => value + 1);\n }\n\n private createEditorAttributes(): Record<string, string> {\n return {\n 'aria-label': 'Rich text editor',\n };\n }\n}\n\nexport function createQalmaEditor(\n options: QalmaEditorOptions = {},\n): QalmaEditorController {\n return new QalmaEditorController(options);\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'qalma-toolbar',\n imports: [],\n template: `<ng-content />`,\n host: {\n '[class.qalma-toolbar]': 'true',\n role: 'toolbar',\n '[attr.aria-label]': 'label()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QalmaToolbar {\n readonly label = input('Editor toolbar');\n}\n","import { MarkSpec, NodeSpec, Schema } from 'prosemirror-model';\nimport {\n Command,\n EditorState,\n Plugin as ProseMirrorPlugin,\n} from 'prosemirror-state';\n\nexport type QalmaStateQuery = (state: EditorState) => boolean;\nexport type QalmaQuery<TValue = unknown> = (state: EditorState) => TValue;\nexport type QalmaCommandValue = unknown;\nexport type QalmaCommandHandler = (\n state: Parameters<Command>[0],\n dispatch?: Parameters<Command>[1],\n view?: Parameters<Command>[2],\n value?: QalmaCommandValue,\n) => boolean;\n\nexport interface QalmaPlugin {\n key: string;\n nodes?: Record<string, NodeSpec>;\n extendNodes?: (\n nodes: Readonly<Record<string, NodeSpec>>,\n ) => Record<string, NodeSpec>;\n marks?: Record<string, MarkSpec>;\n commands?: (schema: Schema) => Record<string, QalmaCommandHandler>;\n commandStates?: (schema: Schema) => Record<string, QalmaStateQuery>;\n queries?: (schema: Schema) => Record<string, QalmaQuery>;\n shortcuts?: (schema: Schema) => Record<string, Command>;\n prosemirrorPlugins?: (schema: Schema) => ProseMirrorPlugin[];\n}\n\nexport interface ConfigurableQalmaPlugin<TOptions extends object>\n extends QalmaPlugin {\n readonly options: Readonly<TOptions>;\n configure(options?: Partial<TOptions>): ConfigurableQalmaPlugin<TOptions>;\n}\n\nexport function createQalmaPlugin(plugin: QalmaPlugin): QalmaPlugin {\n return plugin;\n}\n\nexport function createConfigurableQalmaPlugin<TOptions extends object>(\n defaultOptions: Readonly<TOptions>,\n createPlugin: (options: Readonly<TOptions>) => QalmaPlugin,\n options: Partial<TOptions> = {},\n): ConfigurableQalmaPlugin<TOptions> {\n const resolvedOptions = Object.freeze({\n ...defaultOptions,\n ...options,\n }) as Readonly<TOptions>;\n const plugin = createPlugin(resolvedOptions);\n\n return Object.assign(plugin, {\n options: resolvedOptions,\n configure(nextOptions: Partial<TOptions> = {}) {\n return createConfigurableQalmaPlugin(defaultOptions, createPlugin, {\n ...resolvedOptions,\n ...nextOptions,\n });\n },\n });\n}\n","import { lift, wrapIn } from 'prosemirror-commands';\nimport { NodeSpec, NodeType } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport { createQalmaPlugin, QalmaCommandHandler, QalmaPlugin } from './qalma-plugin';\n\nconst blockquoteNode: NodeSpec = {\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM: () => ['blockquote', 0],\n};\n\nexport const BlockquotePlugin = createQalmaPlugin({\n key: 'blockquote',\n nodes: {\n blockquote: blockquoteNode,\n },\n commands: (schema) => ({\n toggleBlockquote: createToggleBlockquoteCommand(\n schema.nodes['blockquote'],\n ),\n }),\n commandStates: (schema) => ({\n toggleBlockquote: (state) =>\n isBlockquoteActive(state, schema.nodes['blockquote']),\n }),\n});\n\nexport const BlockquoteKit: readonly QalmaPlugin[] = [BlockquotePlugin];\n\nfunction createToggleBlockquoteCommand(\n blockquote: NodeType,\n): QalmaCommandHandler {\n return (state, dispatch) => {\n if (isBlockquoteActive(state, blockquote)) {\n return lift(state, dispatch);\n }\n\n return wrapIn(blockquote)(state, dispatch);\n };\n}\n\nfunction isBlockquoteActive(state: EditorState, blockquote: NodeType): boolean {\n const { $from } = state.selection;\n\n for (let depth = $from.depth; depth > 0; depth -= 1) {\n if ($from.node(depth).type === blockquote) {\n return true;\n }\n }\n\n return false;\n}\n","import { Node as ProseMirrorNode, NodeType } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport { createQalmaPlugin, QalmaCommandHandler, QalmaPlugin } from './qalma-plugin';\n\nexport const ClearFormattingPlugin = createQalmaPlugin({\n key: 'clearFormatting',\n commands: (schema) => ({\n clearFormatting: createClearFormattingCommand(schema.nodes['paragraph']),\n }),\n});\n\nexport const ClearFormattingKit: readonly QalmaPlugin[] = [\n ClearFormattingPlugin,\n];\n\nfunction createClearFormattingCommand(\n paragraph: NodeType,\n): QalmaCommandHandler {\n return (state, dispatch) => {\n const markRanges = getMarkRangesToClear(state);\n const hasMarksToClear =\n Boolean(state.storedMarks?.length) ||\n markRanges.some((range) =>\n rangeHasInlineMarks(state.doc, range.from, range.to),\n );\n const hasTextblocksToClear = selectionHasTextblockFormattingToClear(\n state,\n paragraph,\n );\n\n if (!hasMarksToClear && !hasTextblocksToClear) {\n return false;\n }\n\n if (dispatch) {\n const transaction = state.tr;\n\n if (state.storedMarks?.length) {\n transaction.setStoredMarks([]);\n }\n\n if (hasMarksToClear) {\n for (const range of markRanges) {\n if (range.from < range.to) {\n transaction.removeMark(range.from, range.to, null);\n }\n }\n }\n\n if (hasTextblocksToClear) {\n for (const range of state.selection.ranges) {\n transaction.setBlockType(range.$from.pos, range.$to.pos, paragraph);\n }\n }\n\n dispatch(transaction.scrollIntoView());\n }\n\n return true;\n };\n}\n\ninterface DocumentRange {\n from: number;\n to: number;\n}\n\nfunction getMarkRangesToClear(state: EditorState): readonly DocumentRange[] {\n if (!state.selection.empty) {\n return state.selection.ranges.map((range) => ({\n from: range.$from.pos,\n to: range.$to.pos,\n }));\n }\n\n const { $from } = state.selection;\n\n if ($from.depth === 0 || !$from.parent.inlineContent) {\n return [];\n }\n\n return [\n {\n from: $from.start(),\n to: $from.end(),\n },\n ];\n}\n\nfunction rangeHasInlineMarks(\n doc: ProseMirrorNode,\n from: number,\n to: number,\n): boolean {\n if (from >= to) {\n return false;\n }\n\n let hasMarks = false;\n\n doc.nodesBetween(from, to, (node) => {\n if (hasMarks) {\n return false;\n }\n\n if (node.isInline && node.marks.length > 0) {\n hasMarks = true;\n\n return false;\n }\n\n return undefined;\n });\n\n return hasMarks;\n}\n\nfunction selectionHasTextblockFormattingToClear(\n state: EditorState,\n paragraph: NodeType,\n): boolean {\n let applicable = false;\n\n for (const range of state.selection.ranges) {\n if (applicable) {\n break;\n }\n\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {\n if (applicable) {\n return false;\n }\n\n if (!node.isTextblock || node.hasMarkup(paragraph)) {\n return undefined;\n }\n\n if (node.type === paragraph) {\n applicable = true;\n\n return false;\n }\n\n const $pos = state.doc.resolve(pos);\n const index = $pos.index();\n\n if ($pos.parent.canReplaceWith(index, index + 1, paragraph)) {\n applicable = true;\n\n return false;\n }\n\n return undefined;\n });\n }\n\n return applicable;\n}\n","import { setBlockType } from 'prosemirror-commands';\nimport { Node as ProseMirrorNode, NodeSpec, NodeType } from 'prosemirror-model';\nimport {\n EditorState,\n Plugin as ProseMirrorPlugin,\n} from 'prosemirror-state';\n\nimport {\n createConfigurableQalmaPlugin,\n createQalmaPlugin,\n QalmaCommandHandler,\n QalmaPlugin,\n} from './qalma-plugin';\n\nexport interface CodeBlockPluginOptions {\n languages: readonly string[];\n defaultLanguage: string;\n languageClassPrefix: string;\n indentText: string;\n}\n\nexport const CODE_BLOCK_PLUGIN_DEFAULT_OPTIONS: Readonly<CodeBlockPluginOptions> =\n Object.freeze({\n languages: Object.freeze(['plaintext']),\n defaultLanguage: 'plaintext',\n languageClassPrefix: 'language-',\n indentText: ' ',\n });\n\nexport const CodeBlockPlugin = createConfigurableQalmaPlugin(\n CODE_BLOCK_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n assertCodeBlockPluginOptions(options);\n\n const codeBlockNode: NodeSpec = {\n attrs: {\n language: { default: options.defaultLanguage },\n },\n content: 'text*',\n marks: '',\n group: 'block',\n code: true,\n defining: true,\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (node) => ({\n language: resolveParsedLanguage(node, options),\n }),\n },\n ],\n toDOM: (node) => [\n 'pre',\n [\n 'code',\n {\n class: `${options.languageClassPrefix}${resolveNodeLanguage(\n node.attrs['language'],\n options,\n )}`,\n },\n 0,\n ],\n ],\n };\n\n return createQalmaPlugin({\n key: 'codeBlock',\n nodes: {\n codeBlock: codeBlockNode,\n },\n commands: (schema) => ({\n toggleCodeBlock: createToggleCodeBlockCommand(\n schema.nodes['codeBlock'],\n schema.nodes['paragraph'],\n options,\n ),\n setCodeBlockLanguage: createSetCodeBlockLanguageCommand(\n schema.nodes['codeBlock'],\n options,\n ),\n }),\n commandStates: (schema) => ({\n toggleCodeBlock: (state) =>\n isCodeBlockActive(state, schema.nodes['codeBlock']),\n }),\n queries: (schema) => ({\n codeBlockLanguage: (state) =>\n getActiveCodeBlock(state, schema.nodes['codeBlock'])?.node.attrs[\n 'language'\n ] ?? null,\n }),\n shortcuts: (schema) => ({\n 'Mod-Alt-c': createToggleCodeBlockCommand(\n schema.nodes['codeBlock'],\n schema.nodes['paragraph'],\n options,\n ),\n }),\n prosemirrorPlugins: (schema) => [\n createCodeBlockKeyboardPlugin(schema.nodes['codeBlock'], options),\n ],\n });\n },\n);\n\nexport const CodeBlockKit: readonly QalmaPlugin[] = [CodeBlockPlugin];\n\nfunction createToggleCodeBlockCommand(\n codeBlock: NodeType,\n paragraph: NodeType,\n options: Readonly<CodeBlockPluginOptions>,\n): QalmaCommandHandler {\n return (state, dispatch, _view, value) => {\n if (isCodeBlockActive(state, codeBlock)) {\n return setBlockType(paragraph)(state, dispatch);\n }\n\n const language =\n value === undefined\n ? options.defaultLanguage\n : resolveCommandLanguage(value, options);\n\n if (!language) {\n return false;\n }\n\n return setBlockType(codeBlock, { language })(state, dispatch);\n };\n}\n\nfunction createSetCodeBlockLanguageCommand(\n codeBlock: NodeType,\n options: Readonly<CodeBlockPluginOptions>,\n): QalmaCommandHandler {\n return (state, dispatch, _view, value) => {\n const language = resolveCommandLanguage(value, options);\n const activeCodeBlock = getActiveCodeBlock(state, codeBlock);\n\n if (!language || !activeCodeBlock) {\n return false;\n }\n\n if (activeCodeBlock.node.attrs['language'] === language) {\n return true;\n }\n\n if (dispatch) {\n dispatch(\n state.tr\n .setNodeMarkup(activeCodeBlock.position, codeBlock, {\n ...activeCodeBlock.node.attrs,\n language,\n })\n .scrollIntoView(),\n );\n }\n\n return true;\n };\n}\n\nfunction isCodeBlockActive(state: EditorState, codeBlock: NodeType): boolean {\n return Boolean(getActiveCodeBlock(state, codeBlock));\n}\n\nfunction createCodeBlockKeyboardPlugin(\n codeBlock: NodeType,\n options: Readonly<CodeBlockPluginOptions>,\n): ProseMirrorPlugin {\n return new ProseMirrorPlugin({\n props: {\n handleKeyDown: (view, event) => {\n if (event.key !== 'Tab') {\n return false;\n }\n\n const activeCodeBlock = getActiveCodeBlock(view.state, codeBlock);\n\n if (!activeCodeBlock) {\n return false;\n }\n\n event.preventDefault();\n\n const transaction = event.shiftKey\n ? outdentCodeBlockSelection(view.state, activeCodeBlock, options)\n : indentCodeBlockSelection(view.state, activeCodeBlock, options);\n\n if (transaction) {\n view.dispatch(transaction.scrollIntoView());\n }\n\n return true;\n },\n },\n });\n}\n\nfunction indentCodeBlockSelection(\n state: EditorState,\n activeCodeBlock: ActiveCodeBlock,\n options: Readonly<CodeBlockPluginOptions>,\n) {\n const contentStart = activeCodeBlock.position + 1;\n const lineStarts = getSelectedLineStarts(state, activeCodeBlock);\n const transaction = state.tr;\n\n for (const lineStart of [...lineStarts].reverse()) {\n transaction.insertText(options.indentText, contentStart + lineStart);\n }\n\n return transaction;\n}\n\nfunction outdentCodeBlockSelection(\n state: EditorState,\n activeCodeBlock: ActiveCodeBlock,\n options: Readonly<CodeBlockPluginOptions>,\n) {\n const contentStart = activeCodeBlock.position + 1;\n const lineStarts = getSelectedLineStarts(state, activeCodeBlock);\n const text = activeCodeBlock.node.textContent;\n const transaction = state.tr;\n let changed = false;\n\n for (const lineStart of [...lineStarts].reverse()) {\n const deleteLength = getOutdentLength(text.slice(lineStart), options);\n\n if (deleteLength === 0) {\n continue;\n }\n\n transaction.delete(\n contentStart + lineStart,\n contentStart + lineStart + deleteLength,\n );\n changed = true;\n }\n\n return changed ? transaction : null;\n}\n\nfunction getSelectedLineStarts(\n state: EditorState,\n activeCodeBlock: ActiveCodeBlock,\n): readonly number[] {\n const contentStart = activeCodeBlock.position + 1;\n const text = activeCodeBlock.node.textContent;\n const selectionFrom = Math.max(0, state.selection.from - contentStart);\n const selectionTo = Math.max(0, state.selection.to - contentStart);\n const firstLineStart = getLineStart(text, selectionFrom);\n const lastSelectedOffset =\n state.selection.empty || selectionTo === 0\n ? selectionFrom\n : selectionTo - 1;\n const lastLineStart = getLineStart(text, lastSelectedOffset);\n const lineStarts = [firstLineStart];\n let nextLineBreak = text.indexOf('\\n', firstLineStart);\n\n while (nextLineBreak !== -1 && nextLineBreak + 1 <= lastLineStart) {\n lineStarts.push(nextLineBreak + 1);\n nextLineBreak = text.indexOf('\\n', nextLineBreak + 1);\n }\n\n return lineStarts;\n}\n\nfunction getLineStart(text: string, offset: number): number {\n return text.lastIndexOf('\\n', offset - 1) + 1;\n}\n\nfunction getOutdentLength(\n line: string,\n options: Readonly<CodeBlockPluginOptions>,\n): number {\n if (line.startsWith(options.indentText)) {\n return options.indentText.length;\n }\n\n if (line.startsWith('\\t')) {\n return 1;\n }\n\n const leadingSpaces = line.match(/^ +/)?.[0].length ?? 0;\n\n return Math.min(leadingSpaces, options.indentText.length);\n}\n\ninterface ActiveCodeBlock {\n node: ProseMirrorNode;\n position: number;\n}\n\nfunction getActiveCodeBlock(\n state: EditorState,\n codeBlock: NodeType,\n): ActiveCodeBlock | null {\n const { $from, $to } = state.selection;\n\n if (\n $from.parent.type !== codeBlock ||\n $to.parent.type !== codeBlock ||\n $from.depth === 0\n ) {\n return null;\n }\n\n return {\n node: $from.parent,\n position: $from.before($from.depth),\n };\n}\n\nfunction resolveParsedLanguage(\n node: Node | string,\n options: Readonly<CodeBlockPluginOptions>,\n): string {\n if (!(node instanceof HTMLElement)) {\n return options.defaultLanguage;\n }\n\n const code = node.matches('code') ? node : node.querySelector('code');\n const language =\n resolveLanguageFromElement(code, options) ??\n resolveLanguageFromElement(node, options);\n\n return language ?? options.defaultLanguage;\n}\n\nfunction resolveLanguageFromElement(\n element: Element | null,\n options: Readonly<CodeBlockPluginOptions>,\n): string | null {\n if (!element) {\n return null;\n }\n\n const classNames = Array.from(element.classList);\n const prefixes = Array.from(\n new Set([options.languageClassPrefix, 'language-', 'lang-']),\n );\n\n for (const className of classNames) {\n for (const prefix of prefixes) {\n if (className.startsWith(prefix)) {\n return resolveLanguageId(className.slice(prefix.length), options);\n }\n }\n }\n\n return null;\n}\n\nfunction resolveNodeLanguage(\n language: unknown,\n options: Readonly<CodeBlockPluginOptions>,\n): string {\n return resolveLanguageId(language, options) ?? options.defaultLanguage;\n}\n\nfunction resolveCommandLanguage(\n value: unknown,\n options: Readonly<CodeBlockPluginOptions>,\n): string | null {\n return resolveLanguageId(value, options);\n}\n\nfunction resolveLanguageId(\n value: unknown,\n options: Readonly<CodeBlockPluginOptions>,\n): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const language = value.trim().toLowerCase();\n\n return options.languages.includes(language) ? language : null;\n}\n\nfunction assertCodeBlockPluginOptions(\n options: Readonly<CodeBlockPluginOptions>,\n): void {\n if (!Array.isArray(options.languages)) {\n throw new TypeError('CodeBlockPlugin languages must be an array.');\n }\n\n if (options.languages.length === 0) {\n throw new RangeError(\n 'CodeBlockPlugin languages must include at least one language.',\n );\n }\n\n const seen = new Set<string>();\n\n for (const language of options.languages) {\n assertLanguageId(language, 'CodeBlockPlugin languages entries');\n\n if (seen.has(language)) {\n throw new Error('CodeBlockPlugin languages entries must be unique.');\n }\n\n seen.add(language);\n }\n\n assertLanguageId(\n options.defaultLanguage,\n 'CodeBlockPlugin defaultLanguage',\n );\n\n if (!seen.has(options.defaultLanguage)) {\n throw new Error(\n 'CodeBlockPlugin defaultLanguage must be included in languages.',\n );\n }\n\n if (\n typeof options.languageClassPrefix !== 'string' ||\n options.languageClassPrefix.trim() !== options.languageClassPrefix ||\n options.languageClassPrefix.length === 0 ||\n /\\s/.test(options.languageClassPrefix)\n ) {\n throw new Error(\n 'CodeBlockPlugin languageClassPrefix must be a non-empty string without whitespace.',\n );\n }\n\n if (\n typeof options.indentText !== 'string' ||\n options.indentText.length === 0 ||\n !/^[\\t ]+$/.test(options.indentText)\n ) {\n throw new Error(\n 'CodeBlockPlugin indentText must be a non-empty string containing only spaces or tabs.',\n );\n }\n}\n\nfunction assertLanguageId(value: unknown, label: string): asserts value is string {\n if (\n typeof value !== 'string' ||\n value.trim() !== value ||\n value.toLowerCase() !== value ||\n !/^[a-z][a-z0-9-]*$/.test(value)\n ) {\n throw new Error(\n `${label} must be lowercase language identifiers without whitespace.`,\n );\n }\n}\n","import { Mark, MarkSpec, MarkType } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\n\nimport {\n createQalmaPlugin,\n QalmaCommandHandler,\n QalmaPlugin,\n} from './qalma-plugin';\n\nexport type ColorCommandValue = string;\n\nexport const ColorPlugin = createQalmaPlugin({\n key: 'color',\n marks: {\n textStyle: createTextStyleMark(),\n },\n commands: (schema) => ({\n setTextColor: createSetTextStyleCommand(schema.marks['textStyle'], 'color'),\n unsetTextColor: createUnsetTextStyleCommand(\n schema.marks['textStyle'],\n 'color',\n ),\n setBackgroundColor: createSetTextStyleCommand(\n schema.marks['textStyle'],\n 'backgroundColor',\n ),\n unsetBackgroundColor: createUnsetTextStyleCommand(\n schema.marks['textStyle'],\n 'backgroundColor',\n ),\n }),\n commandStates: (schema) => ({\n unsetTextColor: (state) =>\n isTextStyleAttributeActive(state, schema.marks['textStyle'], 'color'),\n unsetBackgroundColor: (state) =>\n isTextStyleAttributeActive(\n state,\n schema.marks['textStyle'],\n 'backgroundColor',\n ),\n }),\n queries: (schema) => ({\n textColor: (state) =>\n getActiveTextStyleAttrs(state, schema.marks['textStyle'])?.color ?? null,\n backgroundColor: (state) =>\n getActiveTextStyleAttrs(state, schema.marks['textStyle'])\n ?.backgroundColor ?? null,\n }),\n});\n\nexport const ColorKit: readonly QalmaPlugin[] = [ColorPlugin];\n\ninterface TextStyleAttrs {\n color: string | null;\n backgroundColor: string | null;\n}\n\ntype TextStyleAttributeName = keyof TextStyleAttrs;\n\nfunction createTextStyleMark(): MarkSpec {\n return {\n attrs: {\n color: { default: null },\n backgroundColor: { default: null },\n },\n parseDOM: [\n {\n tag: '[style]',\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) {\n return false;\n }\n\n return getTextStyleAttrsFromElement(node) ?? false;\n },\n },\n {\n tag: 'font[color]',\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) {\n return false;\n }\n\n const color = normalizeCssColor(\n node.getAttribute('color'),\n 'color',\n );\n\n return color ? { color, backgroundColor: null } : false;\n },\n },\n ],\n toDOM: (mark) => [\n 'span',\n {\n style: createTextStyleAttribute(getTextStyleAttrs(mark)),\n },\n 0,\n ],\n };\n}\n\nfunction createSetTextStyleCommand(\n mark: MarkType,\n attribute: TextStyleAttributeName,\n): QalmaCommandHandler {\n return (state, dispatch, _view, value) => {\n const color = normalizeCommandColor(value, getCssPropertyName(attribute));\n\n if (!color || !markApplies(state, mark)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(\n updateTextStyleMarks(state, mark, (attrs) => ({\n ...attrs,\n [attribute]: color,\n })).scrollIntoView(),\n );\n }\n\n return true;\n };\n}\n\nfunction createUnsetTextStyleCommand(\n mark: MarkType,\n attribute: TextStyleAttributeName,\n): QalmaCommandHandler {\n return (state, dispatch) => {\n if (!isTextStyleAttributeActive(state, mark, attribute)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(\n updateTextStyleMarks(state, mark, (attrs) => ({\n ...attrs,\n [attribute]: null,\n })).scrollIntoView(),\n );\n }\n\n return true;\n };\n}\n\nfunction updateTextStyleMarks(\n state: EditorState,\n mark: MarkType,\n updateAttrs: (attrs: TextStyleAttrs) => TextStyleAttrs,\n): Transaction {\n if (state.selection.empty) {\n return updateStoredTextStyleMark(state, mark, updateAttrs);\n }\n\n const transaction = state.tr;\n\n for (const range of state.selection.ranges) {\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, position) => {\n if (!node.isText || position >= range.$to.pos) {\n return undefined;\n }\n\n const from = Math.max(position, range.$from.pos);\n const to = Math.min(position + node.nodeSize, range.$to.pos);\n const currentMark = mark.isInSet(node.marks);\n const nextAttrs = updateAttrs(getTextStyleAttrs(currentMark));\n\n transaction.removeMark(from, to, mark);\n\n if (hasTextStyleAttrs(nextAttrs)) {\n transaction.addMark(from, to, mark.create(nextAttrs));\n }\n\n return undefined;\n });\n }\n\n return transaction;\n}\n\nfunction updateStoredTextStyleMark(\n state: EditorState,\n mark: MarkType,\n updateAttrs: (attrs: TextStyleAttrs) => TextStyleAttrs,\n): Transaction {\n const marks = state.storedMarks ?? state.selection.$from.marks();\n const nextAttrs = updateAttrs(getTextStyleAttrs(mark.isInSet(marks)));\n const transaction = state.tr.removeStoredMark(mark);\n\n if (hasTextStyleAttrs(nextAttrs)) {\n transaction.addStoredMark(mark.create(nextAttrs));\n }\n\n return transaction;\n}\n\nfunction isTextStyleAttributeActive(\n state: EditorState,\n mark: MarkType,\n attribute: TextStyleAttributeName,\n): boolean {\n const attrs = getActiveTextStyleAttrs(state, mark);\n\n return Boolean(attrs?.[attribute]);\n}\n\nfunction getActiveTextStyleAttrs(\n state: EditorState,\n mark: MarkType,\n): TextStyleAttrs | null {\n if (state.selection.empty) {\n const activeMark = mark.isInSet(\n state.storedMarks ?? state.selection.$from.marks(),\n );\n\n return activeMark ? getTextStyleAttrs(activeMark) : null;\n }\n\n let activeMark: Mark | null = null;\n\n state.doc.nodesBetween(state.selection.from, state.selection.to, (node) => {\n if (activeMark) {\n return false;\n }\n\n if (node.isText) {\n activeMark = mark.isInSet(node.marks) ?? null;\n }\n\n return undefined;\n });\n\n return activeMark ? getTextStyleAttrs(activeMark) : null;\n}\n\nfunction getTextStyleAttrs(mark: Mark | null | undefined): TextStyleAttrs {\n return {\n color: normalizeCssColor(mark?.attrs['color'], 'color'),\n backgroundColor: normalizeCssColor(\n mark?.attrs['backgroundColor'],\n 'background-color',\n ),\n };\n}\n\nfunction getTextStyleAttrsFromElement(\n element: HTMLElement,\n): TextStyleAttrs | null {\n const attrs = {\n color: normalizeCssColor(element.style.color, 'color'),\n backgroundColor: normalizeCssColor(\n element.style.backgroundColor,\n 'background-color',\n ),\n };\n\n return hasTextStyleAttrs(attrs) ? attrs : null;\n}\n\nfunction createTextStyleAttribute(attrs: TextStyleAttrs): string {\n return [\n attrs.color ? `color: ${attrs.color};` : '',\n attrs.backgroundColor ? `background-color: ${attrs.backgroundColor};` : '',\n ]\n .filter(Boolean)\n .join(' ');\n}\n\nfunction hasTextStyleAttrs(attrs: TextStyleAttrs): boolean {\n return Boolean(attrs.color || attrs.backgroundColor);\n}\n\nfunction normalizeCommandColor(\n value: unknown,\n cssPropertyName: 'color' | 'background-color',\n): string | null {\n return typeof value === 'string'\n ? normalizeCssColor(value, cssPropertyName)\n : null;\n}\n\nfunction normalizeCssColor(\n value: unknown,\n cssPropertyName: 'color' | 'background-color',\n): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const color = value.trim();\n\n if (!color || /[;{}<>]/.test(color)) {\n return null;\n }\n\n if (typeof document === 'undefined') {\n return color;\n }\n\n const element = document.createElement('span');\n\n element.style.setProperty(cssPropertyName, color);\n\n return element.style.getPropertyValue(cssPropertyName) || null;\n}\n\nfunction getCssPropertyName(\n attribute: TextStyleAttributeName,\n): 'color' | 'background-color' {\n return attribute === 'color' ? 'color' : 'background-color';\n}\n\nfunction markApplies(state: EditorState, mark: MarkType): boolean {\n if (state.selection.empty) {\n const { $from } = state.selection;\n\n return $from.parent.inlineContent && $from.parent.type.allowsMarkType(mark);\n }\n\n for (const range of state.selection.ranges) {\n let applies = false;\n\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node) => {\n if (applies) {\n return false;\n }\n\n applies = node.inlineContent && node.type.allowsMarkType(mark);\n\n return undefined;\n });\n\n if (applies) {\n return true;\n }\n }\n\n return false;\n}\n","import { NodeSpec, NodeType } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport { createQalmaPlugin, QalmaCommandHandler, QalmaPlugin } from './qalma-plugin';\n\nconst hardBreakNode: NodeSpec = {\n inline: true,\n group: 'inline',\n selectable: false,\n linebreakReplacement: true,\n parseDOM: [{ tag: 'br' }],\n toDOM: () => ['br'],\n leafText: () => '\\n',\n};\n\nexport const HardBreakPlugin = createQalmaPlugin({\n key: 'hardBreak',\n nodes: {\n hardBreak: hardBreakNode,\n },\n commands: (schema) => ({\n insertHardBreak: createInsertHardBreakCommand(schema.nodes['hardBreak']),\n }),\n shortcuts: (schema) => ({\n 'Shift-Enter': createInsertHardBreakCommand(schema.nodes['hardBreak']),\n }),\n});\n\nexport const HardBreakKit: readonly QalmaPlugin[] = [HardBreakPlugin];\n\nfunction createInsertHardBreakCommand(\n hardBreak: NodeType,\n): QalmaCommandHandler {\n return (state, dispatch) => {\n if (!canInsertHardBreak(state, hardBreak)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(\n state.tr.replaceSelectionWith(hardBreak.create()).scrollIntoView(),\n );\n }\n\n return true;\n };\n}\n\nfunction canInsertHardBreak(state: EditorState, hardBreak: NodeType): boolean {\n const { $from, $to } = state.selection;\n\n return (\n $from.sameParent($to) &&\n $from.parent.inlineContent &&\n $from.parent.canReplaceWith($from.index(), $to.index(), hardBreak)\n );\n}\n","import { Mark, MarkSpec, MarkType } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\n\nimport {\n createConfigurableQalmaPlugin,\n createQalmaPlugin,\n QalmaCommandHandler,\n QalmaPlugin,\n} from './qalma-plugin';\n\nexport type HighlightCommandValue = string;\n\nexport interface HighlightPluginOptions {\n defaultColor: string;\n}\n\nexport const HIGHLIGHT_PLUGIN_DEFAULT_OPTIONS: Readonly<HighlightPluginOptions> =\n Object.freeze({\n defaultColor: 'rgb(254, 240, 138)',\n });\n\nexport const HighlightPlugin = createConfigurableQalmaPlugin(\n HIGHLIGHT_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n const defaultColor = normalizeCssColor(\n options.defaultColor,\n 'background-color',\n );\n\n assertDefaultHighlightColor(defaultColor);\n\n return createQalmaPlugin({\n key: 'highlight',\n marks: {\n highlight: createHighlightMark(defaultColor),\n },\n commands: (schema) => ({\n setHighlight: createSetHighlightCommand(\n schema.marks['highlight'],\n defaultColor,\n ),\n unsetHighlight: createUnsetHighlightCommand(schema.marks['highlight']),\n }),\n commandStates: (schema) => ({\n setHighlight: (state) =>\n isHighlightActive(state, schema.marks['highlight']),\n }),\n queries: (schema) => ({\n highlightColor: (state) =>\n getActiveHighlightColor(state, schema.marks['highlight']),\n }),\n });\n },\n);\n\nexport const HighlightKit: readonly QalmaPlugin[] = [HighlightPlugin];\n\nfunction createHighlightMark(defaultColor: string): MarkSpec {\n return {\n attrs: {\n color: { default: defaultColor },\n },\n parseDOM: [\n {\n tag: 'mark',\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) {\n return false;\n }\n\n return {\n color:\n normalizeCssColor(\n node.style.backgroundColor,\n 'background-color',\n ) ?? defaultColor,\n };\n },\n },\n ],\n toDOM: (mark) => {\n const color = getHighlightColor(mark, defaultColor);\n\n return color === defaultColor\n ? ['mark', 0]\n : ['mark', { style: `background-color: ${color};` }, 0];\n },\n };\n}\n\nfunction createSetHighlightCommand(\n mark: MarkType,\n defaultColor: string,\n): QalmaCommandHandler {\n return (state, dispatch, _view, value) => {\n const color =\n value === undefined\n ? defaultColor\n : normalizeCommandColor(value, 'background-color');\n\n if (!color || !markApplies(state, mark)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(\n updateHighlightMarks(state, mark, () => color).scrollIntoView(),\n );\n }\n\n return true;\n };\n}\n\nfunction createUnsetHighlightCommand(mark: MarkType): QalmaCommandHandler {\n return (state, dispatch) => {\n if (!isHighlightActive(state, mark)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(updateHighlightMarks(state, mark, () => null).scrollIntoView());\n }\n\n return true;\n };\n}\n\nfunction updateHighlightMarks(\n state: EditorState,\n mark: MarkType,\n getNextColor: () => string | null,\n): Transaction {\n if (state.selection.empty) {\n return updateStoredHighlightMark(state, mark, getNextColor);\n }\n\n const transaction = state.tr;\n\n for (const range of state.selection.ranges) {\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, position) => {\n if (!node.isText || position >= range.$to.pos) {\n return undefined;\n }\n\n const from = Math.max(position, range.$from.pos);\n const to = Math.min(position + node.nodeSize, range.$to.pos);\n const color = getNextColor();\n\n transaction.removeMark(from, to, mark);\n\n if (color) {\n transaction.addMark(from, to, mark.create({ color }));\n }\n\n return undefined;\n });\n }\n\n return transaction;\n}\n\nfunction updateStoredHighlightMark(\n state: EditorState,\n mark: MarkType,\n getNextColor: () => string | null,\n): Transaction {\n const color = getNextColor();\n const transaction = state.tr.removeStoredMark(mark);\n\n if (color) {\n transaction.addStoredMark(mark.create({ color }));\n }\n\n return transaction;\n}\n\nfunction isHighlightActive(state: EditorState, mark: MarkType): boolean {\n return Boolean(getActiveHighlightMark(state, mark));\n}\n\nfunction getActiveHighlightColor(\n state: EditorState,\n mark: MarkType,\n): string | null {\n return getActiveHighlightMark(state, mark)?.attrs['color'] ?? null;\n}\n\nfunction getActiveHighlightMark(\n state: EditorState,\n mark: MarkType,\n): Mark | null {\n if (state.selection.empty) {\n return (\n mark.isInSet(state.storedMarks ?? state.selection.$from.marks()) ?? null\n );\n }\n\n let activeMark: Mark | null = null;\n\n state.doc.nodesBetween(state.selection.from, state.selection.to, (node) => {\n if (activeMark) {\n return false;\n }\n\n if (node.isText) {\n activeMark = mark.isInSet(node.marks) ?? null;\n }\n\n return undefined;\n });\n\n return activeMark;\n}\n\nfunction getHighlightColor(mark: Mark, defaultColor: string): string {\n return (\n normalizeCssColor(mark.attrs['color'], 'background-color') ?? defaultColor\n );\n}\n\nfunction normalizeCommandColor(\n value: unknown,\n cssPropertyName: 'background-color',\n): string | null {\n return typeof value === 'string'\n ? normalizeCssColor(value, cssPropertyName)\n : null;\n}\n\nfunction normalizeCssColor(\n value: unknown,\n cssPropertyName: 'background-color',\n): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const color = value.trim();\n\n if (!color || /[;{}<>]/.test(color)) {\n return null;\n }\n\n if (typeof document === 'undefined') {\n return color;\n }\n\n const element = document.createElement('span');\n\n element.style.setProperty(cssPropertyName, color);\n\n return element.style.getPropertyValue(cssPropertyName) || null;\n}\n\nfunction markApplies(state: EditorState, mark: MarkType): boolean {\n if (state.selection.empty) {\n const { $from } = state.selection;\n\n return $from.parent.inlineContent && $from.parent.type.allowsMarkType(mark);\n }\n\n for (const range of state.selection.ranges) {\n let applies = false;\n\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node) => {\n if (applies) {\n return false;\n }\n\n applies = node.inlineContent && node.type.allowsMarkType(mark);\n\n return undefined;\n });\n\n if (applies) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction assertDefaultHighlightColor(\n defaultColor: string | null,\n): asserts defaultColor is string {\n if (!defaultColor) {\n throw new Error('HighlightPlugin defaultColor must be a valid CSS color.');\n }\n}\n","import { history, redo, undo } from 'prosemirror-history';\n\nimport { createConfigurableQalmaPlugin, createQalmaPlugin } from './qalma-plugin';\n\nexport interface HistoryPluginOptions {\n depth: number;\n newGroupDelay: number;\n}\n\nexport const HISTORY_PLUGIN_DEFAULT_OPTIONS: Readonly<HistoryPluginOptions> =\n Object.freeze({\n depth: 100,\n newGroupDelay: 500,\n });\n\nexport const HistoryPlugin = createConfigurableQalmaPlugin(\n HISTORY_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n assertHistoryPluginOptions(options);\n\n return createQalmaPlugin({\n key: 'history',\n prosemirrorPlugins: () => [history(options)],\n commands: () => ({\n undo,\n redo,\n }),\n shortcuts: () => ({\n 'Mod-z': undo,\n 'Shift-Mod-z': redo,\n 'Mod-y': redo,\n }),\n });\n },\n);\n\nfunction assertHistoryPluginOptions(\n options: Readonly<HistoryPluginOptions>,\n): void {\n if (!Number.isInteger(options.depth) || options.depth < 1) {\n throw new RangeError('HistoryPlugin depth must be a positive integer.');\n }\n\n if (!Number.isFinite(options.newGroupDelay) || options.newGroupDelay < 0) {\n throw new RangeError(\n 'HistoryPlugin newGroupDelay must be a non-negative finite number.',\n );\n }\n}\n","import { setBlockType } from 'prosemirror-commands';\nimport { NodeSpec, NodeType } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport {\n createConfigurableQalmaPlugin,\n createQalmaPlugin,\n QalmaCommandHandler,\n QalmaPlugin,\n} from './qalma-plugin';\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface HeadingsPluginOptions {\n levels: readonly HeadingLevel[];\n}\n\nexport const HEADING_LEVELS: readonly HeadingLevel[] = Object.freeze([\n 1, 2, 3, 4, 5, 6,\n]);\n\nexport const HEADINGS_PLUGIN_DEFAULT_OPTIONS: Readonly<HeadingsPluginOptions> =\n Object.freeze({\n levels: Object.freeze([1, 2, 3] satisfies HeadingLevel[]),\n });\n\nexport const HeadingsPlugin = createConfigurableQalmaPlugin(\n HEADINGS_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n assertHeadingsPluginOptions(options);\n\n const headingNode: NodeSpec = {\n attrs: {\n level: { default: options.levels[0] },\n },\n content: 'inline*',\n defining: true,\n group: 'block',\n parseDOM: options.levels.map((level) => ({\n tag: `h${level}`,\n attrs: { level },\n })),\n toDOM: (node) => [`h${node.attrs['level']}`, 0],\n };\n\n return createQalmaPlugin({\n key: 'headings',\n nodes: {\n heading: headingNode,\n },\n commands: (schema) => ({\n setParagraph: createSetParagraphCommand(schema.nodes['paragraph']),\n ...createHeadingCommands(\n schema.nodes['heading'],\n schema.nodes['paragraph'],\n options.levels,\n ),\n }),\n commandStates: (schema) => ({\n setParagraph: (state) => isParagraphActive(state),\n ...createHeadingCommandStates(schema.nodes['heading'], options.levels),\n }),\n shortcuts: (schema) => createHeadingShortcuts(schema, options.levels),\n });\n },\n);\n\nexport const HeadingsKit: readonly QalmaPlugin[] = [HeadingsPlugin];\n\nfunction createSetParagraphCommand(paragraph: NodeType): QalmaCommandHandler {\n return (state, dispatch) => {\n if (isParagraphActive(state)) {\n return true;\n }\n\n return setBlockType(paragraph)(state, dispatch);\n };\n}\n\nfunction createHeadingCommands(\n heading: NodeType,\n paragraph: NodeType,\n levels: readonly HeadingLevel[],\n): Record<string, QalmaCommandHandler> {\n return Object.fromEntries(\n levels.map((level) => [\n getHeadingCommandName(level),\n createToggleHeadingCommand(heading, paragraph, level),\n ]),\n );\n}\n\nfunction createToggleHeadingCommand(\n heading: NodeType,\n paragraph: NodeType,\n level: HeadingLevel,\n): QalmaCommandHandler {\n return (state, dispatch) => {\n if (isHeadingActive(state, heading, level)) {\n return setBlockType(paragraph)(state, dispatch);\n }\n\n return setBlockType(heading, { level })(state, dispatch);\n };\n}\n\nfunction createHeadingCommandStates(\n heading: NodeType,\n levels: readonly HeadingLevel[],\n): Record<string, (state: EditorState) => boolean> {\n return Object.fromEntries(\n levels.map((level) => [\n getHeadingCommandName(level),\n (state) => isHeadingActive(state, heading, level),\n ]),\n );\n}\n\nfunction createHeadingShortcuts(\n schema: Parameters<NonNullable<QalmaPlugin['shortcuts']>>[0],\n levels: readonly HeadingLevel[],\n) {\n return Object.fromEntries(\n levels.map((level) => [\n `Mod-Alt-${level}`,\n createToggleHeadingCommand(\n schema.nodes['heading'],\n schema.nodes['paragraph'],\n level,\n ),\n ]),\n );\n}\n\nfunction getHeadingCommandName(level: HeadingLevel): string {\n return `toggleHeading${level}`;\n}\n\nfunction isParagraphActive(state: EditorState): boolean {\n return state.selection.$from.parent.type === state.schema.nodes['paragraph'];\n}\n\nfunction isHeadingActive(\n state: EditorState,\n heading: NodeType,\n level: HeadingLevel,\n): boolean {\n const parent = state.selection.$from.parent;\n\n return parent.type === heading && parent.attrs['level'] === level;\n}\n\nfunction assertHeadingsPluginOptions(\n options: Readonly<HeadingsPluginOptions>,\n): void {\n if (!Array.isArray(options.levels)) {\n throw new TypeError('HeadingsPlugin levels must be an array.');\n }\n\n if (options.levels.length === 0) {\n throw new RangeError(\n 'HeadingsPlugin levels must include at least one heading level.',\n );\n }\n\n const seen = new Set<HeadingLevel>();\n\n for (const level of options.levels) {\n if (!HEADING_LEVELS.includes(level)) {\n throw new RangeError(\n 'HeadingsPlugin levels entries must be integers from 1 through 6.',\n );\n }\n\n if (seen.has(level)) {\n throw new Error('HeadingsPlugin levels entries must be unique.');\n }\n\n seen.add(level);\n }\n}\n","import { Node as ProseMirrorNode, NodeSpec, NodeType } from 'prosemirror-model';\nimport {\n EditorState,\n NodeSelection,\n Plugin as ProseMirrorPlugin,\n} from 'prosemirror-state';\n\nimport {\n createConfigurableQalmaPlugin,\n createQalmaPlugin,\n QalmaCommandHandler,\n QalmaPlugin,\n} from './qalma-plugin';\n\nexport interface ImageCommandValue {\n src: string;\n alt?: string | null;\n title?: string | null;\n previewSrc?: string | null;\n}\n\nexport type ImageUpdateCommandValue = Partial<ImageCommandValue>;\n\nexport interface ImageState {\n from: number;\n to: number;\n src: string;\n alt: string;\n title: string | null;\n previewSrc: string | null;\n}\n\nexport interface ImagePluginOptions {\n allowedProtocols: readonly string[];\n allowRelativeImages: boolean;\n defaultAlt: string;\n}\n\nexport const IMAGE_PLUGIN_DEFAULT_OPTIONS: Readonly<ImagePluginOptions> =\n Object.freeze({\n allowedProtocols: Object.freeze(['http', 'https']),\n allowRelativeImages: true,\n defaultAlt: '',\n });\n\nexport const ImagePlugin = createConfigurableQalmaPlugin(\n IMAGE_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n assertImagePluginOptions(options);\n\n const imageNode: NodeSpec = {\n attrs: {\n src: {},\n alt: { default: options.defaultAlt },\n title: { default: null },\n previewSrc: { default: null },\n },\n atom: true,\n draggable: true,\n inline: true,\n group: 'inline',\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) {\n return false;\n }\n\n const src = normalizeImageSrc(node.getAttribute('src'), options);\n\n if (!src) {\n return false;\n }\n\n return {\n src,\n alt: normalizeAlt(node.getAttribute('alt') ?? options.defaultAlt),\n title: normalizeTitle(node.getAttribute('title')),\n previewSrc: null,\n };\n },\n },\n ],\n selectable: true,\n toDOM: (node) => {\n const attrs: Record<string, string> = {\n src: node.attrs['src'],\n alt: normalizeAlt(node.attrs['alt']),\n };\n const title = normalizeTitle(node.attrs['title']);\n\n if (title) {\n attrs['title'] = title;\n }\n\n return ['img', attrs];\n },\n };\n\n return createQalmaPlugin({\n key: 'image',\n nodes: {\n image: imageNode,\n },\n commands: (schema) => ({\n insertImage: createInsertImageCommand(schema.nodes['image'], options),\n updateImage: createUpdateImageCommand(schema.nodes['image'], options),\n removeImage: createRemoveImageCommand(schema.nodes['image']),\n }),\n commandStates: (schema) => ({\n insertImage: (state) =>\n Boolean(getSelectedImage(state, schema.nodes['image'])),\n }),\n queries: (schema) => ({\n image: (state) => getImageState(state, schema.nodes['image']),\n }),\n prosemirrorPlugins: () => [createImagePreviewPlugin()],\n });\n },\n);\n\nexport const ImageKit: readonly QalmaPlugin[] = [ImagePlugin];\n\nfunction createInsertImageCommand(\n image: NodeType,\n options: Readonly<ImagePluginOptions>,\n): QalmaCommandHandler {\n return (state, dispatch, _view, value) => {\n const attrs = resolveImageAttrs(value, options);\n\n if (!attrs || !canReplaceSelectionWithImage(state, image)) {\n return false;\n }\n\n if (dispatch) {\n const imageNode = image.create(attrs);\n const transaction = state.tr.replaceSelectionWith(imageNode, false);\n const insertedPosition = transaction.selection.from - imageNode.nodeSize;\n\n if (transaction.doc.nodeAt(insertedPosition)?.type === image) {\n transaction.setSelection(\n NodeSelection.create(transaction.doc, insertedPosition),\n );\n }\n\n dispatch(transaction.scrollIntoView());\n }\n\n return true;\n };\n}\n\nfunction createUpdateImageCommand(\n image: NodeType,\n options: Readonly<ImagePluginOptions>,\n): QalmaCommandHandler {\n return (state, dispatch, _view, value) => {\n const selectedImage = getSelectedImage(state, image);\n const attrs = resolveImageAttrs(\n {\n ...selectedImage?.node.attrs,\n ...resolveImageUpdateValue(value),\n },\n options,\n );\n\n if (!selectedImage || !attrs) {\n return false;\n }\n\n if (dispatch) {\n dispatch(\n state.tr\n .setNodeMarkup(selectedImage.from, image, attrs)\n .scrollIntoView(),\n );\n }\n\n return true;\n };\n}\n\nfunction createRemoveImageCommand(image: NodeType): QalmaCommandHandler {\n return (state, dispatch) => {\n const selectedImage = getSelectedImage(state, image);\n\n if (!selectedImage) {\n return false;\n }\n\n if (dispatch) {\n dispatch(\n state.tr.delete(selectedImage.from, selectedImage.to).scrollIntoView(),\n );\n }\n\n return true;\n };\n}\n\ninterface SelectedImage {\n node: ProseMirrorNode;\n from: number;\n to: number;\n}\n\nfunction getSelectedImage(\n state: EditorState,\n image: NodeType,\n): SelectedImage | null {\n const { selection } = state;\n\n if (!(selection instanceof NodeSelection) || selection.node.type !== image) {\n return null;\n }\n\n return {\n node: selection.node,\n from: selection.from,\n to: selection.to,\n };\n}\n\nfunction getImageState(state: EditorState, image: NodeType): ImageState | null {\n const selectedImage = getSelectedImage(state, image);\n\n return selectedImage\n ? {\n from: selectedImage.from,\n to: selectedImage.to,\n src: selectedImage.node.attrs['src'],\n alt: normalizeAlt(selectedImage.node.attrs['alt']),\n title: normalizeTitle(selectedImage.node.attrs['title']),\n previewSrc: normalizePreviewSrc(selectedImage.node.attrs['previewSrc']),\n }\n : null;\n}\n\nfunction canReplaceSelectionWithImage(\n state: EditorState,\n image: NodeType,\n): boolean {\n const { $from } = state.selection;\n\n for (let depth = $from.depth; depth >= 0; depth--) {\n const index = $from.index(depth);\n\n if ($from.node(depth).canReplaceWith(index, index, image)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction resolveImageAttrs(\n value: unknown,\n options: Readonly<ImagePluginOptions>,\n): ImageCommandValue | null {\n const rawValue =\n typeof value === 'string'\n ? { src: value }\n : isImageCommandValue(value)\n ? value\n : null;\n\n if (!rawValue) {\n return null;\n }\n\n const src = normalizeImageSrc(rawValue.src, options);\n\n if (!src) {\n return null;\n }\n\n return {\n src,\n alt: normalizeAlt(rawValue.alt ?? options.defaultAlt),\n title: normalizeTitle(rawValue.title),\n previewSrc: normalizePreviewSrc(rawValue.previewSrc),\n };\n}\n\nfunction normalizeImageSrc(\n value: string | null | undefined,\n options: Readonly<ImagePluginOptions>,\n): string | null {\n const src = value?.trim();\n\n if (!src) {\n return null;\n }\n\n const protocol = src.match(/^([a-z][a-z0-9+.-]*):/i)?.[1].toLowerCase();\n\n if (!protocol) {\n return options.allowRelativeImages && !src.startsWith('//') ? src : null;\n }\n\n return options.allowedProtocols.includes(protocol) ? src : null;\n}\n\nfunction normalizeAlt(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction normalizeTitle(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n return value.trim() || null;\n}\n\nfunction normalizePreviewSrc(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const src = value.trim();\n\n if (!src) {\n return null;\n }\n\n return src.startsWith('blob:') || /^data:image\\//i.test(src) ? src : null;\n}\n\nfunction isImageCommandValue(value: unknown): value is ImageCommandValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'src' in value &&\n typeof value.src === 'string'\n );\n}\n\nfunction createImagePreviewPlugin(): ProseMirrorPlugin {\n return new ProseMirrorPlugin({\n props: {\n nodeViews: {\n image: (node) => {\n return new ImageNodeView(node);\n },\n },\n },\n });\n}\n\nclass ImageNodeView {\n readonly dom = document.createElement('img');\n\n constructor(private node: ProseMirrorNode) {\n this.render();\n }\n\n update(node: ProseMirrorNode): boolean {\n if (node.type !== this.node.type) {\n return false;\n }\n\n this.node = node;\n this.render();\n\n return true;\n }\n\n private render(): void {\n const src =\n normalizePreviewSrc(this.node.attrs['previewSrc']) ??\n this.node.attrs['src'];\n const title = normalizeTitle(this.node.attrs['title']);\n\n this.dom.src = src;\n this.dom.alt = normalizeAlt(this.node.attrs['alt']);\n\n if (title) {\n this.dom.title = title;\n } else {\n this.dom.removeAttribute('title');\n }\n }\n}\n\nfunction resolveImageUpdateValue(value: unknown): ImageUpdateCommandValue {\n if (typeof value === 'string') {\n return { src: value };\n }\n\n return typeof value === 'object' && value !== null ? value : {};\n}\n\nfunction assertImagePluginOptions(options: Readonly<ImagePluginOptions>): void {\n if (!Array.isArray(options.allowedProtocols)) {\n throw new TypeError('ImagePlugin allowedProtocols must be an array.');\n }\n\n if (options.allowedProtocols.length === 0) {\n throw new RangeError(\n 'ImagePlugin allowedProtocols must include at least one protocol.',\n );\n }\n\n const seen = new Set<string>();\n\n for (const protocol of options.allowedProtocols) {\n if (typeof protocol !== 'string' || !/^[a-z][a-z0-9+.-]*$/.test(protocol)) {\n throw new TypeError(\n 'ImagePlugin allowedProtocols entries must be protocol names without colons.',\n );\n }\n\n if (seen.has(protocol)) {\n throw new Error('ImagePlugin allowedProtocols entries must be unique.');\n }\n\n seen.add(protocol);\n }\n\n if (typeof options.allowRelativeImages !== 'boolean') {\n throw new TypeError('ImagePlugin allowRelativeImages must be a boolean.');\n }\n\n if (typeof options.defaultAlt !== 'string') {\n throw new TypeError('ImagePlugin defaultAlt must be a string.');\n }\n}\n","import { MarkType } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nexport function isMarkActive(state: EditorState, mark: MarkType): boolean {\n const { from, $from, to, empty } = state.selection;\n\n if (empty) {\n return Boolean(mark.isInSet(state.storedMarks ?? $from.marks()));\n }\n\n return state.doc.rangeHasMark(from, to, mark);\n}\n","import { Mark, MarkSpec, MarkType, ResolvedPos } from 'prosemirror-model';\nimport {\n EditorState,\n Plugin as ProseMirrorPlugin,\n TextSelection,\n} from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport {\n createConfigurableQalmaPlugin,\n createQalmaPlugin,\n QalmaCommandHandler,\n} from './qalma-plugin';\nimport { isMarkActive } from '../prosemirror/queries';\n\nexport interface LinkCommandValue {\n href: string;\n target?: '_blank' | null;\n rel?: string | null;\n}\n\nexport type LinkCommandInput = string | LinkCommandValue;\n\nexport interface LinkState extends LinkCommandValue {\n from: number;\n to: number;\n text: string;\n}\n\nexport interface LinkElementTarget {\n element: HTMLAnchorElement;\n}\n\nexport interface LinkRangeTarget {\n from: number;\n to: number;\n}\n\nexport type LinkSelectionTarget = LinkElementTarget | LinkRangeTarget;\n\nexport interface LinkPluginOptions {\n allowedProtocols: readonly string[];\n allowRelativeLinks: boolean;\n defaultTarget: '_blank' | null;\n defaultRel: string | null;\n}\n\nexport const LINK_PLUGIN_DEFAULT_OPTIONS: Readonly<LinkPluginOptions> =\n Object.freeze({\n allowedProtocols: Object.freeze(['http', 'https', 'mailto', 'tel']),\n allowRelativeLinks: true,\n defaultTarget: '_blank',\n defaultRel: 'noopener noreferrer',\n });\n\nexport const LinkPlugin = createConfigurableQalmaPlugin(\n LINK_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n assertLinkPluginOptions(options);\n\n const linkMark: MarkSpec = {\n attrs: {\n href: {},\n target: { default: null },\n rel: { default: null },\n },\n inclusive: false,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) {\n return false;\n }\n\n const href = normalizeHref(node.getAttribute('href'), options);\n\n if (!href) {\n return false;\n }\n\n return {\n href,\n target: normalizeTarget(\n node.getAttribute('target') ?? options.defaultTarget,\n ),\n rel: normalizeRel(node.getAttribute('rel') ?? options.defaultRel),\n };\n },\n },\n ],\n toDOM: (mark) => {\n const attrs: Record<string, string> = {\n href: mark.attrs['href'],\n };\n const target = normalizeTarget(mark.attrs['target']);\n const rel = normalizeRel(mark.attrs['rel']);\n\n if (target) {\n attrs['target'] = target;\n }\n\n if (rel) {\n attrs['rel'] = rel;\n }\n\n return ['a', attrs, 0];\n },\n };\n\n return createQalmaPlugin({\n key: 'link',\n marks: {\n link: linkMark,\n },\n commands: (schema) => ({\n setLink: createSetLinkCommand(schema.marks['link'], options),\n selectLink: createSelectLinkCommand(schema.marks['link']),\n unsetLink: createUnsetLinkCommand(schema.marks['link']),\n }),\n commandStates: (schema) => ({\n setLink: (state) => isMarkActive(state, schema.marks['link']),\n }),\n queries: (schema) => ({\n link: (state) => getLinkState(state, schema.marks['link']),\n }),\n prosemirrorPlugins: () => [createOpenLinkPlugin(options)],\n });\n },\n);\n\nfunction createSetLinkCommand(\n mark: MarkType,\n options: Readonly<LinkPluginOptions>,\n): QalmaCommandHandler {\n return (state, dispatch, _view, value) => {\n const attrs = resolveLinkAttrs(value, options);\n\n if (!attrs || !selectionAllowsMark(state, mark)) {\n return false;\n }\n\n if (dispatch) {\n const transaction = state.tr;\n\n if (state.selection.empty) {\n transaction.addStoredMark(mark.create(attrs));\n } else {\n for (const range of state.selection.ranges) {\n transaction.removeMark(range.$from.pos, range.$to.pos, mark);\n transaction.addMark(range.$from.pos, range.$to.pos, mark.create(attrs));\n }\n }\n\n dispatch(transaction.scrollIntoView());\n }\n\n return true;\n };\n}\n\nfunction createUnsetLinkCommand(mark: MarkType): QalmaCommandHandler {\n return (state, dispatch) => {\n if (!isMarkActive(state, mark)) {\n return false;\n }\n\n if (dispatch) {\n const transaction = state.tr.removeStoredMark(mark);\n\n for (const range of state.selection.ranges) {\n transaction.removeMark(range.$from.pos, range.$to.pos, mark);\n }\n\n dispatch(transaction.scrollIntoView());\n }\n\n return true;\n };\n}\n\nfunction createSelectLinkCommand(mark: MarkType): QalmaCommandHandler {\n return (state, dispatch, view, value) => {\n const range = resolveLinkSelectionRange(state, mark, view, value);\n\n if (!range) {\n return false;\n }\n\n if (dispatch) {\n dispatch(\n state.tr\n .setSelection(TextSelection.create(state.doc, range.from, range.to))\n .scrollIntoView(),\n );\n }\n\n return true;\n };\n}\n\nfunction createOpenLinkPlugin(\n options: Readonly<LinkPluginOptions>,\n): ProseMirrorPlugin {\n return new ProseMirrorPlugin({\n props: {\n handleDOMEvents: {\n click: (_view, event) => {\n const link = findClickedLink(event.target);\n\n if (!link) {\n return false;\n }\n\n const href = normalizeHref(link.getAttribute('href'), options);\n\n if (!href) {\n return false;\n }\n\n event.preventDefault();\n\n const linkTarget =\n normalizeTarget(link.getAttribute('target')) ??\n options.defaultTarget;\n\n if (linkTarget === '_blank') {\n window.open(href, '_blank', 'noopener,noreferrer');\n } else {\n window.location.href = href;\n }\n\n return true;\n },\n },\n },\n });\n}\n\nfunction findClickedLink(target: EventTarget | null): HTMLAnchorElement | null {\n if (!(target instanceof Node)) {\n return null;\n }\n\n const element =\n target instanceof Element ? target : target.parentElement;\n\n if (!element) {\n return null;\n }\n\n const link = element.closest<HTMLAnchorElement>('a[href]');\n\n return link instanceof HTMLAnchorElement ? link : null;\n}\n\nfunction resolveLinkSelectionRange(\n state: EditorState,\n mark: MarkType,\n view: EditorView | undefined,\n value: unknown,\n): LinkRangeTarget | null {\n if (isLinkRangeTarget(value)) {\n return hasLinkBetween(state, mark, value.from, value.to) ? value : null;\n }\n\n if (isLinkElementTarget(value) && view) {\n const position = getElementDocumentPosition(view, value.element);\n\n if (position === null) {\n return null;\n }\n\n const range = findLinkRange(state.doc.resolve(position), mark);\n\n return range ? { from: range.from, to: range.to } : null;\n }\n\n const stateValue = getLinkState(state, mark);\n\n return stateValue\n ? {\n from: stateValue.from,\n to: stateValue.to,\n }\n : null;\n}\n\nfunction getElementDocumentPosition(\n view: EditorView,\n element: HTMLAnchorElement,\n): number | null {\n try {\n return view.posAtDOM(element.firstChild ?? element, 0);\n } catch {\n return null;\n }\n}\n\nfunction getLinkState(state: EditorState, mark: MarkType): LinkState | null {\n if (state.selection.empty) {\n const range = findLinkRange(state.selection.$from, mark);\n\n return range ? createLinkState(state, range) : null;\n }\n\n let found: LinkRange | null = null;\n\n state.doc.nodesBetween(state.selection.from, state.selection.to, (_node, pos) => {\n if (found) {\n return false;\n }\n\n const range = findLinkRange(state.doc.resolve(pos), mark);\n\n if (range) {\n found = range;\n\n return false;\n }\n\n return undefined;\n });\n\n return found ? createLinkState(state, found) : null;\n}\n\ninterface LinkRange {\n from: number;\n to: number;\n mark: Mark;\n}\n\nfunction findLinkRange($position: ResolvedPos, mark: MarkType): LinkRange | null {\n const parent = $position.parent;\n const after = parent.childAfter($position.parentOffset);\n const before = parent.childBefore($position.parentOffset);\n const current = mark.isInSet(after.node?.marks ?? []);\n const previous = mark.isInSet(before.node?.marks ?? []);\n const link = current ?? previous;\n\n if (!link) {\n return null;\n }\n\n let startIndex = current ? after.index : before.index;\n let endIndex = startIndex + 1;\n let from = $position.start() + (current ? after.offset : before.offset);\n let to =\n from + (current ? after.node?.nodeSize ?? 0 : before.node?.nodeSize ?? 0);\n\n while (\n startIndex > 0 &&\n hasSameMark(parent.child(startIndex - 1).marks, link)\n ) {\n startIndex -= 1;\n from -= parent.child(startIndex).nodeSize;\n }\n\n while (\n endIndex < parent.childCount &&\n hasSameMark(parent.child(endIndex).marks, link)\n ) {\n to += parent.child(endIndex).nodeSize;\n endIndex += 1;\n }\n\n return {\n from,\n to,\n mark: link,\n };\n}\n\nfunction hasSameMark(marks: readonly Mark[], mark: Mark): boolean {\n return marks.some((candidate) => candidate.eq(mark));\n}\n\nfunction createLinkState(state: EditorState, range: LinkRange): LinkState {\n return {\n from: range.from,\n to: range.to,\n href: range.mark.attrs['href'],\n target: normalizeTarget(range.mark.attrs['target']),\n rel: normalizeRel(range.mark.attrs['rel']),\n text: state.doc.textBetween(range.from, range.to, ''),\n };\n}\n\nfunction resolveLinkAttrs(\n value: unknown,\n options: Readonly<LinkPluginOptions>,\n): LinkCommandValue | null {\n const rawValue =\n typeof value === 'string'\n ? { href: value }\n : isLinkCommandValue(value)\n ? value\n : null;\n\n if (!rawValue) {\n return null;\n }\n\n const href = normalizeHref(rawValue.href, options);\n\n if (!href) {\n return null;\n }\n\n return {\n href,\n target: normalizeTarget(rawValue.target ?? options.defaultTarget),\n rel: normalizeRel(rawValue.rel ?? options.defaultRel),\n };\n}\n\nfunction normalizeHref(\n value: string | null | undefined,\n options: Readonly<LinkPluginOptions>,\n): string | null {\n const href = value?.trim();\n\n if (!href) {\n return null;\n }\n\n const protocol = href.match(/^([a-z][a-z0-9+.-]*):/i)?.[1].toLowerCase();\n\n if (!protocol) {\n return options.allowRelativeLinks ? href : null;\n }\n\n return options.allowedProtocols.includes(protocol) ? href : null;\n}\n\nfunction normalizeTarget(value: unknown): '_blank' | null {\n return value === '_blank' ? value : null;\n}\n\nfunction normalizeRel(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n return value.trim() || null;\n}\n\nfunction isLinkCommandValue(value: unknown): value is LinkCommandValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'href' in value &&\n typeof value.href === 'string'\n );\n}\n\nfunction isLinkElementTarget(value: unknown): value is LinkElementTarget {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'element' in value &&\n value.element instanceof HTMLAnchorElement\n );\n}\n\nfunction isLinkRangeTarget(value: unknown): value is LinkRangeTarget {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'from' in value &&\n 'to' in value &&\n typeof value.from === 'number' &&\n typeof value.to === 'number'\n );\n}\n\nfunction hasLinkBetween(\n state: EditorState,\n mark: MarkType,\n from: number,\n to: number,\n): boolean {\n if (from < 0 || to > state.doc.content.size || from >= to) {\n return false;\n }\n\n return state.doc.rangeHasMark(from, to, mark);\n}\n\nfunction selectionAllowsMark(state: EditorState, mark: MarkType): boolean {\n if (state.selection.empty) {\n return state.selection.$from.parent.type.allowsMarkType(mark);\n }\n\n return state.selection.ranges.some((range) => {\n let allowsMark = false;\n\n state.doc.nodesBetween(\n range.$from.pos,\n range.$to.pos,\n (node, _pos, parent) => {\n if (allowsMark) {\n return false;\n }\n\n if (node.isInline && parent?.type.allowsMarkType(mark)) {\n allowsMark = true;\n\n return false;\n }\n\n return undefined;\n },\n );\n\n return allowsMark;\n });\n}\n\nfunction assertLinkPluginOptions(\n options: Readonly<LinkPluginOptions>,\n): void {\n if (!Array.isArray(options.allowedProtocols)) {\n throw new TypeError('LinkPlugin allowedProtocols must be an array.');\n }\n\n if (options.allowedProtocols.length === 0) {\n throw new RangeError(\n 'LinkPlugin allowedProtocols must include at least one protocol.',\n );\n }\n\n for (const protocol of options.allowedProtocols) {\n if (\n typeof protocol !== 'string' ||\n !/^[a-z][a-z0-9+.-]*$/.test(protocol)\n ) {\n throw new TypeError(\n 'LinkPlugin allowedProtocols entries must be protocol names without colons.',\n );\n }\n }\n\n if (typeof options.allowRelativeLinks !== 'boolean') {\n throw new TypeError('LinkPlugin allowRelativeLinks must be a boolean.');\n }\n\n if (\n options.defaultTarget !== null &&\n options.defaultTarget !== '_blank'\n ) {\n throw new TypeError('LinkPlugin defaultTarget must be \"_blank\" or null.');\n }\n\n if (\n options.defaultRel !== null &&\n (typeof options.defaultRel !== 'string' || options.defaultRel.trim() === '')\n ) {\n throw new TypeError('LinkPlugin defaultRel must be a non-empty string or null.');\n }\n}\n","import { Node as ProseMirrorNode, NodeSpec, NodeType } from 'prosemirror-model';\nimport {\n EditorState,\n Plugin as ProseMirrorPlugin,\n} from 'prosemirror-state';\nimport {\n bulletList as prosemirrorBulletList,\n liftListItem as liftProsemirrorListItem,\n listItem as prosemirrorListItem,\n orderedList as prosemirrorOrderedList,\n sinkListItem as sinkProsemirrorListItem,\n splitListItemKeepMarks,\n wrapInList,\n} from 'prosemirror-schema-list';\n\nimport { createQalmaPlugin, QalmaCommandHandler, QalmaPlugin } from './qalma-plugin';\n\nconst bulletListNode: NodeSpec = {\n ...prosemirrorBulletList,\n content: 'listItem+',\n group: 'block',\n};\n\nconst orderedListNode: NodeSpec = {\n ...prosemirrorOrderedList,\n content: 'listItem+',\n group: 'block',\n};\n\nconst listItemNode: NodeSpec = {\n ...prosemirrorListItem,\n content: 'paragraph block*',\n};\n\nexport const ListsPlugin = createQalmaPlugin({\n key: 'lists',\n nodes: {\n bulletList: bulletListNode,\n orderedList: orderedListNode,\n listItem: listItemNode,\n },\n commands: (schema) => ({\n toggleBulletList: createToggleListCommand(\n schema.nodes['bulletList'],\n schema.nodes['orderedList'],\n schema.nodes['listItem'],\n ),\n toggleOrderedList: createToggleListCommand(\n schema.nodes['orderedList'],\n schema.nodes['bulletList'],\n schema.nodes['listItem'],\n ),\n splitListItem: splitListItemKeepMarks(schema.nodes['listItem']),\n liftListItem: liftProsemirrorListItem(schema.nodes['listItem']),\n sinkListItem: sinkProsemirrorListItem(schema.nodes['listItem']),\n }),\n commandStates: (schema) => ({\n toggleBulletList: (state) =>\n isClosestListActive(state, [\n schema.nodes['bulletList'],\n schema.nodes['orderedList'],\n ]),\n toggleOrderedList: (state) =>\n isClosestListActive(state, [\n schema.nodes['orderedList'],\n schema.nodes['bulletList'],\n ]),\n }),\n shortcuts: (schema) => ({\n 'Mod-Shift-8': createToggleListCommand(\n schema.nodes['bulletList'],\n schema.nodes['orderedList'],\n schema.nodes['listItem'],\n ),\n 'Mod-Shift-7': createToggleListCommand(\n schema.nodes['orderedList'],\n schema.nodes['bulletList'],\n schema.nodes['listItem'],\n ),\n Enter: splitListItemKeepMarks(schema.nodes['listItem']),\n Tab: createListTabCommand(\n [schema.nodes['bulletList'], schema.nodes['orderedList']],\n sinkProsemirrorListItem(schema.nodes['listItem']),\n ),\n 'Shift-Tab': createListTabCommand(\n [schema.nodes['bulletList'], schema.nodes['orderedList']],\n liftProsemirrorListItem(schema.nodes['listItem']),\n ),\n }),\n prosemirrorPlugins: () => [createLeaveEditorPlugin()],\n});\n\nexport const ListsKit: readonly QalmaPlugin[] = [ListsPlugin];\n\nfunction createToggleListCommand(\n list: NodeType,\n alternateList: NodeType,\n listItem: NodeType,\n): QalmaCommandHandler {\n return (state, dispatch) => {\n if (isListActive(state, list)) {\n return liftProsemirrorListItem(listItem)(state, dispatch);\n }\n\n const activeList = findClosestList(state, [list, alternateList]);\n\n if (activeList) {\n if (!list.validContent(activeList.node.content)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(\n state.tr\n .setNodeMarkup(activeList.position, list, getListAttrs(list))\n .scrollIntoView(),\n );\n }\n\n return true;\n }\n\n return wrapInList(list, getListAttrs(list))(state, dispatch);\n };\n}\n\nfunction createListTabCommand(\n lists: readonly NodeType[],\n command: QalmaCommandHandler,\n): QalmaCommandHandler {\n return (state, dispatch, view) => {\n if (command(state, dispatch, view)) {\n return true;\n }\n\n return Boolean(findClosestList(state, lists));\n };\n}\n\nfunction createLeaveEditorPlugin(): ProseMirrorPlugin {\n return new ProseMirrorPlugin({\n props: {\n handleKeyDown: (view, event) => {\n if (event.key !== 'Escape') {\n return false;\n }\n\n const target = findAdjacentFocusable(\n view.dom,\n event.shiftKey ? 'previous' : 'next',\n );\n\n event.preventDefault();\n\n if (target) {\n target.focus();\n } else {\n view.dom.blur();\n }\n\n return true;\n },\n },\n });\n}\n\ninterface ActiveList {\n node: ProseMirrorNode;\n position: number;\n}\n\nfunction findClosestList(\n state: EditorState,\n listTypes: readonly NodeType[],\n): ActiveList | null {\n const { $from } = state.selection;\n\n for (let depth = $from.depth; depth > 0; depth -= 1) {\n const node = $from.node(depth);\n\n if (listTypes.includes(node.type)) {\n return {\n node,\n position: $from.before(depth),\n };\n }\n }\n\n return null;\n}\n\nfunction isListActive(state: EditorState, list: NodeType): boolean {\n return Boolean(findClosestList(state, [list]));\n}\n\nfunction isClosestListActive(\n state: EditorState,\n [list, alternateList]: readonly [NodeType, NodeType],\n): boolean {\n return findClosestList(state, [list, alternateList])?.node.type === list;\n}\n\nfunction getListAttrs(list: NodeType): Record<string, number> | null {\n return list.name === 'orderedList' ? { order: 1 } : null;\n}\n\ntype FocusDirection = 'next' | 'previous';\n\nconst focusableSelector = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[contenteditable=\"true\"]',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\nfunction findAdjacentFocusable(\n editor: HTMLElement,\n direction: FocusDirection,\n): HTMLElement | null {\n const root = editor.getRootNode();\n\n if (!(root instanceof Document || root instanceof ShadowRoot)) {\n return null;\n }\n\n const focusableElements = Array.from(\n root.querySelectorAll<HTMLElement>(focusableSelector),\n ).filter((element) => isFocusable(element) && !editor.contains(element));\n const orderedElements =\n direction === 'next' ? focusableElements : focusableElements.reverse();\n\n return (\n orderedElements.find((element) =>\n direction === 'next'\n ? isAfterEditor(editor, element)\n : isBeforeEditor(editor, element),\n ) ?? null\n );\n}\n\nfunction isFocusable(element: HTMLElement): boolean {\n if (element.hidden || element.closest('[inert]')) {\n return false;\n }\n\n const style = getComputedStyle(element);\n\n return style.display !== 'none' && style.visibility !== 'hidden';\n}\n\nfunction isAfterEditor(editor: HTMLElement, element: HTMLElement): boolean {\n return Boolean(\n editor.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_FOLLOWING,\n );\n}\n\nfunction isBeforeEditor(editor: HTMLElement, element: HTMLElement): boolean {\n return Boolean(\n editor.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_PRECEDING,\n );\n}\n","import { NodeSpec, NodeType } from 'prosemirror-model';\nimport {\n Plugin as ProseMirrorPlugin,\n TextSelection,\n} from 'prosemirror-state';\n\nimport {\n createConfigurableQalmaPlugin,\n createQalmaPlugin,\n QalmaCommandHandler,\n QalmaPlugin,\n} from './qalma-plugin';\n\nexport interface MentionCommandValue {\n id: string;\n label: string;\n trigger?: string;\n}\n\nexport interface MentionState {\n from: number;\n to: number;\n query: string;\n trigger: string;\n}\n\nexport interface MentionPluginOptions {\n trigger: string;\n minQueryLength: number;\n maxQueryLength: number;\n appendSpaceOnInsert: boolean;\n}\n\nexport const MENTION_PLUGIN_DEFAULT_OPTIONS: Readonly<MentionPluginOptions> =\n Object.freeze({\n trigger: '@',\n minQueryLength: 0,\n maxQueryLength: 64,\n appendSpaceOnInsert: true,\n });\n\nexport const MentionPlugin = createConfigurableQalmaPlugin(\n MENTION_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n assertMentionPluginOptions(options);\n\n const mentionNode: NodeSpec = {\n attrs: {\n id: {},\n label: {},\n trigger: { default: options.trigger },\n },\n group: 'inline',\n inline: true,\n atom: true,\n selectable: false,\n parseDOM: [\n {\n tag: 'span[data-qalma-mention]',\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) {\n return false;\n }\n\n const id = normalizeMentionText(node.dataset['mentionId']);\n const trigger = normalizeTrigger(\n node.dataset['mentionTrigger'] ?? options.trigger,\n );\n const label = normalizeMentionText(\n node.dataset['mentionLabel'] ??\n stripMentionTrigger(node.textContent ?? '', trigger),\n );\n\n return id && label\n ? {\n id,\n label,\n trigger,\n }\n : false;\n },\n },\n ],\n toDOM: (node) => {\n const trigger = normalizeTrigger(node.attrs['trigger']);\n const label = normalizeMentionText(node.attrs['label']) ?? '';\n const attrs: Record<string, string> = {\n 'data-qalma-mention': '',\n 'data-mention-id': String(node.attrs['id']),\n 'data-mention-label': label,\n 'data-mention-trigger': trigger,\n contenteditable: 'false',\n };\n\n return ['span', attrs, `${trigger}${label}`];\n },\n };\n\n return createQalmaPlugin({\n key: 'mention',\n nodes: {\n mention: mentionNode,\n },\n commands: (schema) => ({\n insertMention: createInsertMentionCommand(\n schema.nodes['mention'],\n options,\n ),\n }),\n queries: () => ({\n mention: (state) => getMentionState(state, options),\n }),\n prosemirrorPlugins: () => [createMentionInteractionPlugin(options)],\n });\n },\n);\n\nexport const MentionKit: readonly QalmaPlugin[] = [MentionPlugin];\n\nfunction createInsertMentionCommand(\n mention: NodeType,\n options: Readonly<MentionPluginOptions>,\n): QalmaCommandHandler {\n return (state, dispatch, _view, value) => {\n const attrs = resolveMentionAttrs(value, options);\n const range = getMentionState(state, options) ?? {\n from: state.selection.from,\n to: state.selection.to,\n query: '',\n trigger: attrs?.trigger ?? options.trigger,\n };\n\n if (!attrs || !selectionAllowsMention(state, mention, range.from, range.to)) {\n return false;\n }\n\n if (dispatch) {\n const mentionNode = mention.create(attrs);\n const nextCharacter = state.doc.textBetween(\n range.to,\n Math.min(range.to + 1, state.doc.content.size),\n '',\n '',\n );\n const shouldAppendSpace =\n options.appendSpaceOnInsert && !/^\\s$/.test(nextCharacter);\n let transaction = state.tr.replaceWith(range.from, range.to, mentionNode);\n const selectionPosition = range.from + mentionNode.nodeSize;\n\n if (shouldAppendSpace) {\n transaction = transaction.insertText(' ', selectionPosition);\n }\n\n dispatch(\n transaction\n .setSelection(TextSelection.create(transaction.doc, selectionPosition))\n .scrollIntoView(),\n );\n }\n\n return true;\n };\n}\n\nfunction createMentionInteractionPlugin(\n options: Readonly<MentionPluginOptions>,\n): ProseMirrorPlugin {\n return new ProseMirrorPlugin({\n props: {\n handleKeyDown: (view, event) => {\n if (\n !getMentionState(view.state, options) ||\n !isMentionNavigationKey(event.key)\n ) {\n return false;\n }\n\n const mentionEvent = new CustomEvent('qalma-mention-keydown', {\n bubbles: true,\n cancelable: true,\n detail: {\n key: event.key,\n },\n });\n\n view.dom.dispatchEvent(mentionEvent);\n\n if (!mentionEvent.defaultPrevented) {\n return false;\n }\n\n event.preventDefault();\n\n return true;\n },\n },\n view: (view) => ({\n update: () => {\n view.dom.dispatchEvent(\n new CustomEvent('qalma-mention-update', {\n bubbles: true,\n }),\n );\n },\n }),\n });\n}\n\nfunction isMentionNavigationKey(key: string): boolean {\n return (\n key === 'ArrowDown' ||\n key === 'ArrowUp' ||\n key === 'Escape' ||\n key === 'Enter' ||\n key === 'Tab' ||\n key === ' ' ||\n key === 'Spacebar'\n );\n}\n\nfunction getMentionState(\n state: Parameters<QalmaCommandHandler>[0],\n options: Readonly<MentionPluginOptions>,\n): MentionState | null {\n if (!state.selection.empty) {\n return null;\n }\n\n const $cursor = state.selection.$from;\n\n if (isCodeTextblock($cursor.parent.type)) {\n return null;\n }\n\n const textBeforeCursor = $cursor.parent.textBetween(\n 0,\n $cursor.parentOffset,\n '',\n '',\n );\n const triggerIndex = textBeforeCursor.lastIndexOf(options.trigger);\n\n if (triggerIndex < 0 || !hasMentionBoundary(textBeforeCursor, triggerIndex)) {\n return null;\n }\n\n const query = textBeforeCursor.slice(triggerIndex + options.trigger.length);\n\n if (\n /\\s/.test(query) ||\n query.length < options.minQueryLength ||\n query.length > options.maxQueryLength\n ) {\n return null;\n }\n\n return {\n from: $cursor.start() + triggerIndex,\n to: state.selection.from,\n query,\n trigger: options.trigger,\n };\n}\n\nfunction hasMentionBoundary(text: string, triggerIndex: number): boolean {\n return triggerIndex === 0 || /\\s/.test(text.charAt(triggerIndex - 1));\n}\n\nfunction resolveMentionAttrs(\n value: unknown,\n options: Readonly<MentionPluginOptions>,\n): MentionCommandValue | null {\n if (!isMentionCommandValue(value)) {\n return null;\n }\n\n const id = normalizeMentionText(value.id);\n const label = normalizeMentionText(value.label);\n const trigger = normalizeTrigger(value.trigger ?? options.trigger);\n\n return id && label\n ? {\n id,\n label,\n trigger,\n }\n : null;\n}\n\nfunction isMentionCommandValue(value: unknown): value is MentionCommandValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'label' in value &&\n typeof value.id === 'string' &&\n typeof value.label === 'string' &&\n (!('trigger' in value) ||\n value.trigger === undefined ||\n typeof value.trigger === 'string')\n );\n}\n\nfunction selectionAllowsMention(\n state: Parameters<QalmaCommandHandler>[0],\n mention: NodeType,\n from: number,\n to: number,\n): boolean {\n if (from < 0 || to > state.doc.content.size || from > to) {\n return false;\n }\n\n const $from = state.doc.resolve(from);\n const $to = state.doc.resolve(to);\n\n return (\n !isCodeTextblock($from.parent.type) &&\n $from.sameParent($to) &&\n $from.parent.canReplaceWith($from.index(), $to.index(), mention)\n );\n}\n\nfunction isCodeTextblock(type: NodeType): boolean {\n return Boolean(type.spec.code);\n}\n\nfunction normalizeMentionText(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n return value.trim() || null;\n}\n\nfunction normalizeTrigger(value: unknown): string {\n return typeof value === 'string' && value.length > 0 ? value : '@';\n}\n\nfunction stripMentionTrigger(text: string, trigger: string): string {\n return text.startsWith(trigger) ? text.slice(trigger.length) : text;\n}\n\nfunction assertMentionPluginOptions(\n options: Readonly<MentionPluginOptions>,\n): void {\n if (\n typeof options.trigger !== 'string' ||\n Array.from(options.trigger).length !== 1 ||\n /\\s/.test(options.trigger)\n ) {\n throw new TypeError(\n 'MentionPlugin trigger must be a single non-whitespace character.',\n );\n }\n\n if (\n !Number.isInteger(options.minQueryLength) ||\n options.minQueryLength < 0\n ) {\n throw new RangeError(\n 'MentionPlugin minQueryLength must be a non-negative integer.',\n );\n }\n\n if (\n !Number.isInteger(options.maxQueryLength) ||\n options.maxQueryLength < options.minQueryLength\n ) {\n throw new RangeError(\n 'MentionPlugin maxQueryLength must be greater than or equal to minQueryLength.',\n );\n }\n\n if (typeof options.appendSpaceOnInsert !== 'boolean') {\n throw new TypeError(\n 'MentionPlugin appendSpaceOnInsert must be a boolean.',\n );\n }\n}\n","import {\n DOMParser as ProseMirrorDOMParser,\n Schema,\n} from 'prosemirror-model';\nimport { Plugin as ProseMirrorPlugin } from 'prosemirror-state';\n\nimport { createConfigurableQalmaPlugin, createQalmaPlugin } from './qalma-plugin';\n\nexport interface PasteRulesPluginOptions {\n autolink: boolean;\n allowedProtocols: readonly string[];\n allowRelativeLinks: boolean;\n cleanHtml: boolean;\n defaultProtocol: 'http' | 'https';\n}\n\nexport const PASTE_RULES_PLUGIN_DEFAULT_OPTIONS: Readonly<PasteRulesPluginOptions> =\n Object.freeze({\n autolink: true,\n allowedProtocols: Object.freeze(['http', 'https', 'mailto', 'tel']),\n allowRelativeLinks: true,\n cleanHtml: true,\n defaultProtocol: 'https',\n });\n\nexport const PasteRulesPlugin = createConfigurableQalmaPlugin(\n PASTE_RULES_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n assertPasteRulesPluginOptions(options);\n\n return createQalmaPlugin({\n key: 'pasteRules',\n prosemirrorPlugins: (schema) => [\n createPasteRulesPlugin(schema, options),\n ],\n });\n },\n);\n\nfunction createPasteRulesPlugin(\n schema: Schema,\n options: Readonly<PasteRulesPluginOptions>,\n): ProseMirrorPlugin {\n return new ProseMirrorPlugin({\n props: {\n handlePaste: (view, event) => {\n const clipboardData = event.clipboardData;\n\n if (!clipboardData) {\n return false;\n }\n\n const html = createPasteHtml(clipboardData, schema, options);\n\n if (!html) {\n return false;\n }\n\n const container = document.createElement('div');\n container.innerHTML = html;\n\n event.preventDefault();\n view.dispatch(\n view.state.tr\n .replaceSelection(\n ProseMirrorDOMParser.fromSchema(view.state.schema).parseSlice(\n container,\n { preserveWhitespace: true },\n ),\n )\n .scrollIntoView(),\n );\n\n return true;\n },\n },\n });\n}\n\nfunction createPasteHtml(\n clipboardData: DataTransfer,\n schema: Schema,\n options: Readonly<PasteRulesPluginOptions>,\n): string | null {\n const html = clipboardData.getData('text/html');\n const text = clipboardData.getData('text/plain');\n\n if (html && !options.cleanHtml) {\n return null;\n }\n\n if (html) {\n const cleanedHtml = cleanPastedHtml(html, options);\n const clipboardHref = getClipboardHref(clipboardData, options);\n\n if (\n schema.marks['link'] &&\n clipboardHref &&\n !hasAnchor(cleanedHtml) &&\n hasEquivalentText(cleanedHtml, text)\n ) {\n return createLinkedTextHtml(text, clipboardHref);\n }\n\n return cleanedHtml;\n }\n\n if (!options.autolink || !schema.marks['link']) {\n return null;\n }\n\n return createAutolinkHtml(text, options);\n}\n\nfunction cleanPastedHtml(\n html: string,\n options: Readonly<PasteRulesPluginOptions>,\n): string {\n const source = document.implementation.createHTMLDocument('');\n const target = document.createElement('div');\n\n source.body.innerHTML = html;\n\n for (const child of Array.from(source.body.childNodes)) {\n appendCleanNode(target, child, options);\n }\n\n return target.innerHTML;\n}\n\nfunction appendCleanNode(\n parent: Node,\n source: Node,\n options: Readonly<PasteRulesPluginOptions>,\n): void {\n const cleanNode = createCleanNode(source, options);\n\n if (cleanNode) {\n parent.appendChild(cleanNode);\n }\n}\n\nfunction createCleanNode(\n source: Node,\n options: Readonly<PasteRulesPluginOptions>,\n): Node | null {\n if (source.nodeType === Node.TEXT_NODE) {\n return document.createTextNode(source.textContent ?? '');\n }\n\n if (!(source instanceof HTMLElement)) {\n return null;\n }\n\n const tagName = source.tagName.toLowerCase();\n\n if (tagName === 'script' || tagName === 'style') {\n return null;\n }\n\n if (tagName === 'br') {\n return document.createElement('br');\n }\n\n if (tagName === 'a') {\n return createCleanLink(source, options);\n }\n\n if (shouldUnwrapElement(tagName)) {\n return createCleanFragment(source, options);\n }\n\n if (!isAllowedElement(tagName)) {\n return createCleanFragment(source, options);\n }\n\n const element = document.createElement(tagName);\n\n for (const child of Array.from(source.childNodes)) {\n appendCleanNode(element, child, options);\n }\n\n return element;\n}\n\nfunction createCleanLink(\n source: HTMLElement,\n options: Readonly<PasteRulesPluginOptions>,\n): Node {\n const href = normalizeHref(source.getAttribute('href') ?? '', options);\n\n if (!href) {\n return createCleanFragment(source, options);\n }\n\n const link = document.createElement('a');\n link.setAttribute('href', href);\n\n for (const child of Array.from(source.childNodes)) {\n appendCleanNode(link, child, options);\n }\n\n if (!link.textContent) {\n link.textContent = href;\n }\n\n return link;\n}\n\nfunction createCleanFragment(\n source: HTMLElement,\n options: Readonly<PasteRulesPluginOptions>,\n): DocumentFragment {\n const fragment = document.createDocumentFragment();\n\n for (const child of Array.from(source.childNodes)) {\n appendCleanNode(fragment, child, options);\n }\n\n return fragment;\n}\n\nfunction shouldUnwrapElement(tagName: string): boolean {\n return (\n tagName === 'html' ||\n tagName === 'body' ||\n tagName === 'span' ||\n tagName === 'font'\n );\n}\n\nfunction isAllowedElement(tagName: string): boolean {\n return [\n 'blockquote',\n 'code',\n 'del',\n 'em',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'i',\n 'li',\n 'mark',\n 'ol',\n 'p',\n 'pre',\n 's',\n 'strike',\n 'strong',\n 'sub',\n 'sup',\n 'u',\n 'ul',\n ].includes(tagName);\n}\n\nfunction hasAnchor(html: string): boolean {\n const container = document.createElement('div');\n container.innerHTML = html;\n\n return Boolean(container.querySelector('a[href]'));\n}\n\nfunction hasEquivalentText(html: string, text: string): boolean {\n const container = document.createElement('div');\n container.innerHTML = html;\n\n return normalizeText(container.textContent) === normalizeText(text);\n}\n\nfunction normalizeText(value: string | null): string {\n return (value ?? '').replace(/\\s+/g, ' ').trim();\n}\n\nfunction getClipboardHref(\n clipboardData: DataTransfer,\n options: Readonly<PasteRulesPluginOptions>,\n): string | null {\n const uriList = clipboardData\n .getData('text/uri-list')\n .split(/\\r?\\n/)\n .find((line) => line && !line.startsWith('#'));\n const normalizedUriList = normalizeHref(uriList ?? '', options);\n\n if (normalizedUriList) {\n return normalizedUriList;\n }\n\n const text = clipboardData.getData('text/plain').trim();\n\n if (!isHrefLikeText(text)) {\n return null;\n }\n\n return normalizeHref(text, options);\n}\n\nfunction isHrefLikeText(text: string): boolean {\n return (\n /^(?:[a-z][a-z0-9+.-]*:|www\\.|\\/|#)/i.test(text) && !/\\s/.test(text)\n );\n}\n\nfunction createLinkedTextHtml(text: string, href: string): string | null {\n if (!text.trim()) {\n return null;\n }\n\n return text\n .replace(/\\r\\n?/g, '\\n')\n .split('\\n')\n .map(\n (line) =>\n `<p><a href=\"${escapeAttribute(href)}\">${escapeHtml(\n line,\n )}</a></p>`,\n )\n .join('');\n}\n\nfunction createAutolinkHtml(\n text: string,\n options: Readonly<PasteRulesPluginOptions>,\n): string | null {\n if (!text.trim()) {\n return null;\n }\n\n const lines = text.replace(/\\r\\n?/g, '\\n').split('\\n');\n const htmlLines = lines.map((line) => autolinkLine(line, options));\n\n if (!htmlLines.some((line) => line.changed)) {\n return null;\n }\n\n return htmlLines\n .map((line) => `<p>${line.html || '<br>'}</p>`)\n .join('');\n}\n\ninterface AutolinkLine {\n changed: boolean;\n html: string;\n}\n\nfunction autolinkLine(\n line: string,\n options: Readonly<PasteRulesPluginOptions>,\n): AutolinkLine {\n const pattern = /(?:https?:\\/\\/|mailto:|tel:|www\\.)[^\\s<>\"']+/gi;\n let html = '';\n let changed = false;\n let position = 0;\n\n for (const match of line.matchAll(pattern)) {\n const rawMatch = match[0];\n const index = match.index ?? 0;\n const candidate = trimTrailingPunctuation(rawMatch);\n const href = normalizeHref(candidate.text, options);\n\n if (!href) {\n continue;\n }\n\n html += escapeHtml(line.slice(position, index));\n html += `<a href=\"${escapeAttribute(href)}\">${escapeHtml(\n candidate.text,\n )}</a>`;\n html += escapeHtml(candidate.trailing);\n position = index + rawMatch.length;\n changed = true;\n }\n\n html += escapeHtml(line.slice(position));\n\n return {\n changed,\n html,\n };\n}\n\ninterface TrimmedLinkCandidate {\n text: string;\n trailing: string;\n}\n\nfunction trimTrailingPunctuation(text: string): TrimmedLinkCandidate {\n let candidate = text;\n let trailing = '';\n\n while (/[.,;:!?]$/.test(candidate)) {\n trailing = `${candidate[candidate.length - 1] ?? ''}${trailing}`;\n candidate = candidate.slice(0, -1);\n }\n\n while (/[)\\]}]$/.test(candidate) && hasUnmatchedClosingPunctuation(candidate)) {\n trailing = `${candidate[candidate.length - 1] ?? ''}${trailing}`;\n candidate = candidate.slice(0, -1);\n }\n\n return {\n text: candidate,\n trailing,\n };\n}\n\nfunction hasUnmatchedClosingPunctuation(value: string): boolean {\n const last = value[value.length - 1];\n\n if (last === ')') {\n return countCharacters(value, ')') > countCharacters(value, '(');\n }\n\n if (last === ']') {\n return countCharacters(value, ']') > countCharacters(value, '[');\n }\n\n if (last === '}') {\n return countCharacters(value, '}') > countCharacters(value, '{');\n }\n\n return false;\n}\n\nfunction countCharacters(value: string, character: string): number {\n return Array.from(value).filter((candidate) => candidate === character)\n .length;\n}\n\nfunction normalizeHref(\n text: string,\n options: Readonly<PasteRulesPluginOptions>,\n): string | null {\n if (!text) {\n return null;\n }\n\n const href = text.toLowerCase().startsWith('www.')\n ? `${options.defaultProtocol}://${text}`\n : text;\n const protocol = href.match(/^([a-z][a-z0-9+.-]*):/i)?.[1].toLowerCase();\n\n if (!protocol) {\n return options.allowRelativeLinks ? href : null;\n }\n\n if (!options.allowedProtocols.includes(protocol)) {\n return null;\n }\n\n return href;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeHtml(value).replace(/\"/g, '&quot;');\n}\n\nfunction assertPasteRulesPluginOptions(\n options: Readonly<PasteRulesPluginOptions>,\n): void {\n if (typeof options.autolink !== 'boolean') {\n throw new TypeError('PasteRulesPlugin autolink must be a boolean.');\n }\n\n if (!Array.isArray(options.allowedProtocols)) {\n throw new TypeError('PasteRulesPlugin allowedProtocols must be an array.');\n }\n\n if (options.allowedProtocols.length === 0) {\n throw new RangeError(\n 'PasteRulesPlugin allowedProtocols must include at least one protocol.',\n );\n }\n\n for (const protocol of options.allowedProtocols) {\n if (\n typeof protocol !== 'string' ||\n !/^[a-z][a-z0-9+.-]*$/.test(protocol)\n ) {\n throw new TypeError(\n 'PasteRulesPlugin allowedProtocols entries must be protocol names without colons.',\n );\n }\n }\n\n if (typeof options.allowRelativeLinks !== 'boolean') {\n throw new TypeError('PasteRulesPlugin allowRelativeLinks must be a boolean.');\n }\n\n if (typeof options.cleanHtml !== 'boolean') {\n throw new TypeError('PasteRulesPlugin cleanHtml must be a boolean.');\n }\n\n if (options.defaultProtocol !== 'http' && options.defaultProtocol !== 'https') {\n throw new TypeError(\n 'PasteRulesPlugin defaultProtocol must be \"http\" or \"https\".',\n );\n }\n\n if (!options.allowedProtocols.includes(options.defaultProtocol)) {\n throw new Error(\n 'PasteRulesPlugin defaultProtocol must be included in allowedProtocols.',\n );\n }\n}\n","import { Node as ProseMirrorNode } from 'prosemirror-model';\nimport { Plugin as ProseMirrorPlugin } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\n\nimport {\n createConfigurableQalmaPlugin,\n createQalmaPlugin,\n QalmaPlugin,\n} from './qalma-plugin';\n\nexport interface PlaceholderPluginOptions {\n placeholder: string;\n className: string;\n}\n\nexport const PLACEHOLDER_PLUGIN_DEFAULT_OPTIONS: Readonly<PlaceholderPluginOptions> =\n Object.freeze({\n placeholder: 'Write something...',\n className: 'qalma-placeholder',\n });\n\nexport const PlaceholderPlugin = createConfigurableQalmaPlugin(\n PLACEHOLDER_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n assertPlaceholderPluginOptions(options);\n\n return createQalmaPlugin({\n key: 'placeholder',\n prosemirrorPlugins: () => [createPlaceholderProseMirrorPlugin(options)],\n });\n },\n);\n\nexport const PlaceholderKit: readonly QalmaPlugin[] = [PlaceholderPlugin];\n\nfunction createPlaceholderProseMirrorPlugin(\n options: Readonly<PlaceholderPluginOptions>,\n): ProseMirrorPlugin {\n return new ProseMirrorPlugin({\n props: {\n decorations: (state) => {\n const target = getPlaceholderTarget(state.doc);\n\n if (!target) {\n return DecorationSet.empty;\n }\n\n return DecorationSet.create(state.doc, [\n Decoration.node(target.from, target.to, {\n class: options.className,\n 'data-placeholder': options.placeholder,\n }),\n ]);\n },\n },\n });\n}\n\ninterface PlaceholderTarget {\n from: number;\n to: number;\n}\n\nfunction getPlaceholderTarget(\n doc: ProseMirrorNode,\n): PlaceholderTarget | null {\n if (doc.childCount !== 1) {\n return null;\n }\n\n const node = doc.child(0);\n\n if (!node.isTextblock || node.content.size > 0) {\n return null;\n }\n\n return {\n from: 0,\n to: node.nodeSize,\n };\n}\n\nfunction assertPlaceholderPluginOptions(\n options: Readonly<PlaceholderPluginOptions>,\n): void {\n if (\n typeof options.placeholder !== 'string' ||\n options.placeholder.trim().length === 0\n ) {\n throw new Error(\n 'PlaceholderPlugin placeholder must be a non-empty string.',\n );\n }\n\n if (\n typeof options.className !== 'string' ||\n options.className.trim().length === 0 ||\n /\\s/.test(options.className)\n ) {\n throw new Error(\n 'PlaceholderPlugin className must be a non-empty CSS class name.',\n );\n }\n}\n","import { toggleMark } from 'prosemirror-commands';\nimport { MarkSpec } from 'prosemirror-model';\n\nimport { createQalmaPlugin, QalmaPlugin } from './qalma-plugin';\nimport { isMarkActive } from '../prosemirror/queries';\n\nconst subscriptMark: MarkSpec = {\n excludes: 'superscript',\n parseDOM: [\n { tag: 'sub' },\n {\n style: 'vertical-align',\n getAttrs: (value) => (String(value) === 'sub' ? null : false),\n },\n ],\n toDOM: () => ['sub', 0],\n};\n\nconst superscriptMark: MarkSpec = {\n excludes: 'subscript',\n parseDOM: [\n { tag: 'sup' },\n {\n style: 'vertical-align',\n getAttrs: (value) => (String(value) === 'super' ? null : false),\n },\n ],\n toDOM: () => ['sup', 0],\n};\n\nexport const SubscriptSuperscriptPlugin = createQalmaPlugin({\n key: 'subscriptSuperscript',\n marks: {\n subscript: subscriptMark,\n superscript: superscriptMark,\n },\n commands: (schema) => ({\n toggleSubscript: toggleMark(schema.marks['subscript']),\n toggleSuperscript: toggleMark(schema.marks['superscript']),\n }),\n commandStates: (schema) => ({\n toggleSubscript: (state) => isMarkActive(state, schema.marks['subscript']),\n toggleSuperscript: (state) =>\n isMarkActive(state, schema.marks['superscript']),\n }),\n});\n\nexport const SubscriptSuperscriptKit: readonly QalmaPlugin[] = [\n SubscriptSuperscriptPlugin,\n];\n","import {\n Attrs,\n DOMOutputSpec,\n Node as ProseMirrorNode,\n NodeSpec,\n NodeType,\n Schema,\n TagParseRule,\n} from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport {\n createConfigurableQalmaPlugin,\n createQalmaPlugin,\n QalmaCommandHandler,\n QalmaPlugin,\n} from './qalma-plugin';\n\nexport type TextAlignment = 'left' | 'center' | 'right' | 'justify';\nexport type TextAlignNode = 'paragraph' | 'heading' | 'listItem' | 'blockquote';\n\nexport interface TextAlignPluginOptions {\n alignments: readonly TextAlignment[];\n nodes: readonly TextAlignNode[];\n}\n\nexport const TEXT_ALIGNMENTS: readonly TextAlignment[] = Object.freeze([\n 'left',\n 'center',\n 'right',\n 'justify',\n]);\n\nexport const TEXT_ALIGN_NODES: readonly TextAlignNode[] = Object.freeze([\n 'paragraph',\n 'heading',\n 'listItem',\n 'blockquote',\n]);\n\nexport const TEXT_ALIGN_PLUGIN_DEFAULT_OPTIONS: Readonly<TextAlignPluginOptions> =\n Object.freeze({\n alignments: TEXT_ALIGNMENTS,\n nodes: TEXT_ALIGN_NODES,\n });\n\nexport const TextAlignPlugin = createConfigurableQalmaPlugin(\n TEXT_ALIGN_PLUGIN_DEFAULT_OPTIONS,\n (options) => {\n assertTextAlignPluginOptions(options);\n\n return createQalmaPlugin({\n key: 'textAlign',\n extendNodes: (nodes) => createTextAlignNodeExtensions(nodes, options),\n commands: (schema) =>\n createTextAlignCommands(schema, options.alignments, options.nodes),\n commandStates: (schema) =>\n createTextAlignCommandStates(schema, options.alignments, options.nodes),\n queries: (schema) => ({\n textAlign: (state) =>\n getActiveTextAlign(state, getNodeTypes(schema, options.nodes)),\n }),\n });\n },\n);\n\nexport const TextAlignKit: readonly QalmaPlugin[] = [TextAlignPlugin];\n\nfunction createTextAlignNodeExtensions(\n nodes: Readonly<Record<string, NodeSpec>>,\n options: Readonly<TextAlignPluginOptions>,\n): Record<string, NodeSpec> {\n return Object.fromEntries(\n options.nodes\n .filter((nodeName) => nodes[nodeName])\n .map((nodeName) => [\n nodeName,\n extendNodeSpecWithTextAlign(nodes[nodeName]),\n ]),\n );\n}\n\nfunction extendNodeSpecWithTextAlign(nodeSpec: NodeSpec): NodeSpec {\n return {\n ...nodeSpec,\n attrs: {\n ...nodeSpec.attrs,\n textAlign: { default: null },\n },\n parseDOM: nodeSpec.parseDOM?.map((rule) =>\n extendParseRuleWithTextAlign(rule),\n ),\n toDOM: (node) =>\n addTextAlignToDomSpec(\n nodeSpec.toDOM?.(node) ?? ['div', 0],\n parseTextAlignment(node.attrs['textAlign']),\n ),\n };\n}\n\nfunction extendParseRuleWithTextAlign(rule: TagParseRule): TagParseRule {\n return {\n ...rule,\n getAttrs: (dom) => {\n const attrs = getParseRuleAttrs(rule, dom);\n\n if (attrs === false) {\n return false;\n }\n\n return {\n ...(attrs ?? {}),\n textAlign: getTextAlignFromDom(dom),\n };\n },\n };\n}\n\nfunction getParseRuleAttrs(\n rule: TagParseRule,\n dom: HTMLElement,\n): Attrs | false | null {\n const attrs = rule.getAttrs ? rule.getAttrs(dom) : (rule.attrs ?? null);\n\n return attrs === false || attrs === null ? attrs : { ...attrs };\n}\n\nfunction getTextAlignFromDom(dom: HTMLElement): TextAlignment | null {\n return parseTextAlignment(dom.style.textAlign || dom.getAttribute('align'));\n}\n\nfunction addTextAlignToDomSpec(\n domSpec: DOMOutputSpec,\n alignment: TextAlignment | null,\n): DOMOutputSpec {\n if (!alignment || alignment === 'left' || !Array.isArray(domSpec)) {\n return domSpec;\n }\n\n const [tagName, maybeAttrs, ...children] = domSpec;\n const textAlignStyle = `text-align: ${alignment};`;\n\n if (isDomAttrs(maybeAttrs)) {\n return [\n tagName,\n {\n ...maybeAttrs,\n style: joinStyles(maybeAttrs['style'], textAlignStyle),\n },\n ...children,\n ];\n }\n\n return [tagName, { style: textAlignStyle }, maybeAttrs, ...children];\n}\n\nfunction isDomAttrs(value: unknown): value is Record<string, string> {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !('nodeType' in value)\n );\n}\n\nfunction joinStyles(\n existingStyle: string | undefined,\n textAlignStyle: string,\n): string {\n return existingStyle\n ? `${existingStyle.replace(/;?\\s*$/, ';')} ${textAlignStyle}`\n : textAlignStyle;\n}\n\nfunction createTextAlignCommands(\n schema: Schema,\n alignments: readonly TextAlignment[],\n nodes: readonly TextAlignNode[],\n): Record<string, QalmaCommandHandler> {\n const nodeTypes = getNodeTypes(schema, nodes);\n\n return Object.fromEntries(\n alignments.map((alignment) => [\n getTextAlignCommandName(alignment),\n createSetTextAlignCommand(nodeTypes, alignment),\n ]),\n );\n}\n\nfunction createTextAlignCommandStates(\n schema: Schema,\n alignments: readonly TextAlignment[],\n nodes: readonly TextAlignNode[],\n): Record<string, (state: EditorState) => boolean> {\n const nodeTypes = getNodeTypes(schema, nodes);\n\n return Object.fromEntries(\n alignments.map((alignment) => [\n getTextAlignCommandName(alignment),\n (state) => getActiveTextAlign(state, nodeTypes) === alignment,\n ]),\n );\n}\n\nfunction createSetTextAlignCommand(\n nodeTypes: readonly NodeType[],\n alignment: TextAlignment,\n): QalmaCommandHandler {\n return (state, dispatch) => {\n const targets = getSelectedAlignmentTargets(state, nodeTypes);\n\n if (targets.length === 0) {\n return false;\n }\n\n if (dispatch) {\n const transaction = state.tr;\n const textAlign = alignment === 'left' ? null : alignment;\n\n for (const target of targets) {\n transaction.setNodeMarkup(target.position, undefined, {\n ...target.node.attrs,\n textAlign,\n });\n }\n\n dispatch(transaction.scrollIntoView());\n }\n\n return true;\n };\n}\n\ninterface SelectedAlignmentTarget {\n node: ProseMirrorNode;\n position: number;\n}\n\nfunction getSelectedAlignmentTargets(\n state: EditorState,\n nodeTypes: readonly NodeType[],\n): readonly SelectedAlignmentTarget[] {\n if (nodeTypes.length === 0) {\n return [];\n }\n\n if (state.selection.empty) {\n const target = findAlignmentTarget(state.selection.$from, nodeTypes);\n\n return target ? [target] : [];\n }\n\n const targets = new Map<number, SelectedAlignmentTarget>();\n\n for (const range of state.selection.ranges) {\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, position) => {\n if (!node.isTextblock && !nodeTypes.includes(node.type)) {\n return undefined;\n }\n\n const target = findAlignmentTarget(\n state.doc.resolve(position + 1),\n nodeTypes,\n );\n\n if (target) {\n targets.set(target.position, target);\n }\n\n if (nodeTypes.includes(node.type)) {\n return false;\n }\n\n return undefined;\n });\n }\n\n return Array.from(targets.values());\n}\n\nfunction findAlignmentTarget(\n $pos: EditorState['selection']['$from'],\n nodeTypes: readonly NodeType[],\n): SelectedAlignmentTarget | null {\n let textblockTarget: SelectedAlignmentTarget | null = null;\n\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n\n if (!nodeTypes.includes(node.type)) {\n continue;\n }\n\n const target = { node, position: $pos.before(depth) };\n\n if (!node.isTextblock) {\n return target;\n }\n\n textblockTarget = target;\n }\n\n return textblockTarget;\n}\n\nfunction getActiveTextAlign(\n state: EditorState,\n nodeTypes: readonly NodeType[],\n): TextAlignment | null {\n const target = getSelectedAlignmentTargets(state, nodeTypes)[0];\n\n return target ? getNodeTextAlign(target.node) : null;\n}\n\nfunction getNodeTextAlign(node: ProseMirrorNode): TextAlignment {\n return parseTextAlignment(node.attrs['textAlign']) ?? 'left';\n}\n\nfunction getNodeTypes(\n schema: Schema,\n nodeNames: readonly TextAlignNode[],\n): readonly NodeType[] {\n return nodeNames\n .map((nodeName) => schema.nodes[nodeName])\n .filter((node): node is NodeType => Boolean(node));\n}\n\nfunction getTextAlignCommandName(alignment: TextAlignment): string {\n return `setTextAlign${alignment[0].toUpperCase()}${alignment.slice(1)}`;\n}\n\nfunction parseTextAlignment(value: unknown): TextAlignment | null {\n return TEXT_ALIGNMENTS.includes(value as TextAlignment)\n ? (value as TextAlignment)\n : null;\n}\n\nfunction assertTextAlignPluginOptions(\n options: Readonly<TextAlignPluginOptions>,\n): void {\n assertUniqueOptionEntries(\n options.alignments,\n TEXT_ALIGNMENTS,\n 'TextAlignPlugin alignments',\n );\n assertUniqueOptionEntries(\n options.nodes,\n TEXT_ALIGN_NODES,\n 'TextAlignPlugin nodes',\n );\n}\n\nfunction assertUniqueOptionEntries<TValue extends string>(\n values: readonly TValue[],\n allowedValues: readonly TValue[],\n optionName: string,\n): void {\n if (!Array.isArray(values)) {\n throw new TypeError(`${optionName} must be an array.`);\n }\n\n if (values.length === 0) {\n throw new RangeError(`${optionName} must include at least one value.`);\n }\n\n const seen = new Set<TValue>();\n\n for (const value of values) {\n if (!allowedValues.includes(value)) {\n throw new RangeError(\n `${optionName} entries include an unsupported value.`,\n );\n }\n\n if (seen.has(value)) {\n throw new Error(`${optionName} entries must be unique.`);\n }\n\n seen.add(value);\n }\n}\n","import { toggleMark } from 'prosemirror-commands';\nimport { MarkSpec } from 'prosemirror-model';\n\nimport { createQalmaPlugin, QalmaPlugin } from './qalma-plugin';\nimport { isMarkActive } from '../prosemirror/queries';\n\nconst strongMark: MarkSpec = {\n parseDOM: [\n { tag: 'strong' },\n { tag: 'b' },\n {\n style: 'font-weight',\n getAttrs: (value) => {\n const weight = String(value);\n\n return weight === 'bold' || weight === 'bolder' || Number(weight) >= 500\n ? null\n : false;\n },\n },\n ],\n toDOM: () => ['strong', 0],\n};\n\nconst emMark: MarkSpec = {\n parseDOM: [{ tag: 'em' }, { tag: 'i' }, { style: 'font-style=italic' }],\n toDOM: () => ['em', 0],\n};\n\nconst underlineMark: MarkSpec = {\n parseDOM: [\n { tag: 'u' },\n {\n style: 'text-decoration',\n getAttrs: (value) => (String(value).includes('underline') ? null : false),\n },\n ],\n toDOM: () => ['u', 0],\n};\n\nconst strikeMark: MarkSpec = {\n parseDOM: [\n { tag: 's' },\n { tag: 'strike' },\n { tag: 'del' },\n {\n style: 'text-decoration',\n getAttrs: (value) =>\n String(value).includes('line-through') ? null : false,\n },\n ],\n toDOM: () => ['s', 0],\n};\n\nexport const BoldPlugin = createQalmaPlugin({\n key: 'bold',\n marks: {\n strong: strongMark,\n },\n commands: (schema) => ({\n toggleBold: toggleMark(schema.marks['strong']),\n }),\n commandStates: (schema) => ({\n toggleBold: (state) => isMarkActive(state, schema.marks['strong']),\n }),\n shortcuts: (schema) => ({\n 'Mod-b': toggleMark(schema.marks['strong']),\n }),\n});\n\nexport const ItalicPlugin = createQalmaPlugin({\n key: 'italic',\n marks: {\n em: emMark,\n },\n commands: (schema) => ({\n toggleItalic: toggleMark(schema.marks['em']),\n }),\n commandStates: (schema) => ({\n toggleItalic: (state) => isMarkActive(state, schema.marks['em']),\n }),\n shortcuts: (schema) => ({\n 'Mod-i': toggleMark(schema.marks['em']),\n }),\n});\n\nexport const UnderlinePlugin = createQalmaPlugin({\n key: 'underline',\n marks: {\n underline: underlineMark,\n },\n commands: (schema) => ({\n toggleUnderline: toggleMark(schema.marks['underline']),\n }),\n commandStates: (schema) => ({\n toggleUnderline: (state) => isMarkActive(state, schema.marks['underline']),\n }),\n shortcuts: (schema) => ({\n 'Mod-u': toggleMark(schema.marks['underline']),\n }),\n});\n\nexport const StrikePlugin = createQalmaPlugin({\n key: 'strike',\n marks: {\n strike: strikeMark,\n },\n commands: (schema) => ({\n toggleStrike: toggleMark(schema.marks['strike']),\n }),\n commandStates: (schema) => ({\n toggleStrike: (state) => isMarkActive(state, schema.marks['strike']),\n }),\n});\n\nexport const TextFormattingKit: readonly QalmaPlugin[] = [\n BoldPlugin,\n ItalicPlugin,\n UnderlinePlugin,\n StrikePlugin,\n];\n","import { NodeType } from 'prosemirror-model';\nimport {\n EditorState,\n Plugin as ProseMirrorPlugin,\n Transaction,\n} from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { createQalmaPlugin, QalmaPlugin } from './qalma-plugin';\n\nexport const TrailingParagraphPlugin = createQalmaPlugin({\n key: 'trailingParagraph',\n prosemirrorPlugins: (schema) => [\n createTrailingParagraphProseMirrorPlugin(schema.nodes['paragraph']),\n ],\n});\n\nexport const TrailingParagraphKit: readonly QalmaPlugin[] = [\n TrailingParagraphPlugin,\n];\n\nfunction createTrailingParagraphProseMirrorPlugin(\n paragraph: NodeType,\n): ProseMirrorPlugin {\n return new ProseMirrorPlugin({\n appendTransaction: (_transactions, _oldState, newState) =>\n createTrailingParagraphTransaction(newState, paragraph),\n view: (view) => {\n queueTrailingParagraphUpdate(view, paragraph);\n\n return {\n update: (updatedView) =>\n queueTrailingParagraphUpdate(updatedView, paragraph),\n };\n },\n });\n}\n\nfunction queueTrailingParagraphUpdate(\n view: EditorView,\n paragraph: NodeType,\n): void {\n queueMicrotask(() => {\n if (view.isDestroyed) {\n return;\n }\n\n const transaction = createTrailingParagraphTransaction(\n view.state,\n paragraph,\n );\n\n if (transaction) {\n view.dispatch(transaction);\n }\n });\n}\n\nfunction createTrailingParagraphTransaction(\n state: EditorState,\n paragraph: NodeType,\n): Transaction | null {\n const lastChild = state.doc.lastChild;\n\n if (\n lastChild?.type === paragraph &&\n lastChild.isTextblock &&\n lastChild.content.size === 0\n ) {\n return null;\n }\n\n const paragraphNode = paragraph.createAndFill();\n\n if (\n !paragraphNode ||\n !state.doc.canReplaceWith(\n state.doc.childCount,\n state.doc.childCount,\n paragraph,\n )\n ) {\n return null;\n }\n\n return state.tr\n .insert(state.doc.content.size, paragraphNode)\n .setMeta('addToHistory', false);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ProseMirrorPlugin","normalizeCssColor","normalizeCommandColor","markApplies","normalizeHref","prosemirrorBulletList","prosemirrorOrderedList","prosemirrorListItem","liftProsemirrorListItem","sinkProsemirrorListItem","ProseMirrorDOMParser"],"mappings":"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"}