rme 0.3.0 → 0.3.1-beta.2
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.
- package/dist/index.d.ts +10 -0
- package/dist/index.mjs +339 -13576
- package/package.json +7 -7
- package/dist/index.mjs.map +0 -7
package/dist/index.mjs.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/editor/codemirror/theme.ts", "../src/editor/codemirror/codemirror.ts", "../src/editor/extensions/CodeMirror/keymap.ts", "../src/editor/utils/clipboard-read.ts", "../src/editor/extensions/CodeMirror/commands/markdown.ts", "../src/editor/theme/codemirror/dark.ts", "../src/editor/theme/codemirror/light.ts", "../src/editor/theme/dark.ts", "../src/editor/theme/light.ts", "../src/editor/theme/WysiwygThemeWrapper.tsx", "../src/editor/theme/FlatListStyles.tsx", "../src/editor/theme/SourceCodeThemeWrapper.tsx", "../src/editor/theme/index.ts", "../src/editor/components/Editor.tsx", "../src/editor/components/SourceEditor/index.tsx", "../src/editor/hooks/create-context-state.tsx", "../src/editor/hooks/create-context-hook.tsx", "../src/editor/components/ErrorBoundary.tsx", "../src/editor/components/SourceEditor/Text.tsx", "../src/editor/components/SourceEditor/delegate.ts", "../src/editor/extensions/CodeMirror/codemirror-extension.ts", "../src/editor/transform/parser.ts", "../src/editor/transform/markdown-it-list-checkbox.ts", "../src/editor/transform/markdown-it-reference-image.ts", "../src/editor/transform/markdown-it-front-matter.ts", "../src/editor/transform/markdown-it-html-inline.ts", "../src/editor/utils/html.ts", "../src/editor/transform/markdown-it-image.ts", "../src/editor/transform/markdown-it-math.ts", "../src/editor/transform/markdown-it-mermaid.ts", "../src/editor/transform/markdown-it-reference-def.ts", "../src/editor/extensions/index.ts", "../src/editor/extensions/Table/table-extension.ts", "../src/editor/utils/build-block-enter-keymap.ts", "../src/editor/extensions/Table/table-helpers.ts", "../src/editor/extensions/Table/table-selector-extension.ts", "../src/editor/extensions/Table/table-selector.ts", "../src/editor/utils/dom.ts", "../src/editor/extensions/Table/table-utils.ts", "../src/editor/extensions/Ai/ai-extension.tsx", "../src/editor/extensions/Ai/ai-nodeview.tsx", "../src/editor/extensions/Transformer/utils.ts", "../src/editor/extensions/BlockQuote/blockquote-extension.ts", "../src/editor/extensions/Clipboard/clipboard-extension.ts", "../src/editor/extensions/CodeMirror/setup.ts", "../src/editor/extensions/CommonKeymap/common-keymap-extension.ts", "../src/editor/extensions/CodeMirror/codemirror-utils.ts", "../src/editor/extensions/Copilot/copilot-extension.ts", "../src/editor/extensions/Find/find-extension.ts", "../src/editor/extensions/Find/find-utils.ts", "../src/editor/extensions/HandleInput/handle-input-extension.ts", "../src/editor/inline-input-regex/index.ts", "../src/editor/extensions/HardBreak/hard-break-extension.ts", "../src/editor/extensions/Heading/heading-extension.ts", "../src/editor/extensions/HorizontalRule/horizontal-rule-extension.ts", "../src/editor/extensions/HtmlBr/br-extension.ts", "../src/editor/extensions/HtmlNode/html-block-extension.ts", "../src/editor/utils/common.ts", "../src/editor/extensions/HtmlNode/html-block-view.ts", "../src/editor/extensions/HtmlNode/html-inline-node.tsx", "../src/editor/extensions/HtmlNode/html-inline-view.ts", "../src/editor/extensions/Iframe/iframe-extension.tsx", "../src/editor/extensions/Iframe/Iframe-nodeview.tsx", "../src/editor/components/Resizable/Resizable.tsx", "../src/editor/components/Resizable/ResizableHandle.tsx", "../src/editor/extensions/Image/image-extension.tsx", "../src/editor/extensions/Image/image-nodeview.tsx", "../src/editor/extensions/Image/image-tool-tips.tsx", "../src/editor/toolbar/SlashMenu/SlashMenuRoot.tsx", "../src/editor/const/index.ts", "../src/editor/extensions/SlashMenu/utils.ts", "../src/editor/utils/getOS.tsx", "../src/editor/toolbar/SlashMenu/TablePanel.tsx", "../src/editor/extensions/Image/md-image-extension.tsx", "../src/editor/extensions/Inline/inline-deco-extension.ts", "../src/editor/extensions/Inline/inline-mark-extensions.ts", "../src/editor/extensions/Inline/format-href.ts", "../src/editor/extensions/Inline/inline-mark-commands.ts", "../src/editor/extensions/Inline/inline-mark-helpers.ts", "../src/editor/steps/batch-mark-step.ts", "../src/editor/steps/replace-doc-step.ts", "../src/editor/utils/iter-node.ts", "../src/editor/extensions/Inline/from-inline-markdown.ts", "../src/editor/extensions/Inline/inline-mark-plugin.ts", "../src/editor/extensions/List/list-extensions.ts", "../src/editor/extensions/List/input-rule/index.ts", "../src/editor/extensions/List/input-rule/utils/parse-integer.ts", "../src/editor/extensions/List/input-rule/schema/to-dom.ts", "../src/editor/extensions/List/input-rule/schema/node-spec.ts", "../src/editor/extensions/List/input-rule/utils/get-list-type-name.ts", "../src/editor/extensions/List/input-rule/utils/get-list-type.ts", "../src/editor/extensions/List/input-rule/utils/is-list-type.ts", "../src/editor/extensions/List/input-rule/utils/is-list-node.ts", "../src/editor/extensions/Math/math-inline-extension.tsx", "../src/editor/extensions/Math/math-inline-nodeview.tsx", "../src/editor/extensions/Math/math-block-extension.tsx", "../src/editor/extensions/Math/math-block-nodeview.tsx", "../src/editor/extensions/Mermaid/mermaid-extension.ts", "../src/editor/extensions/Mermaid/mermaid-view.ts", "../src/editor/utils/eventbus.ts", "../src/editor/extensions/NodeIndicator/node-indicator-extension.tsx", "../src/editor/extensions/NodeIndicator/drop-target.ts", "../src/editor/extensions/NodeIndicator/node-target.ts", "../src/editor/utils/get-client-rect.ts", "../src/editor/extensions/Paragraph/paragraph-extension.ts", "../src/editor/extensions/Placeholder/index.ts", "../src/editor/extensions/Reference/reference-def-extension.tsx", "../src/editor/extensions/Reference/reference-inline-nodes.ts", "../src/editor/extensions/Reference/reference-nodeview.ts", "../src/editor/extensions/SlashMenu/slashmenu-extension.ts", "../src/editor/extensions/SlashMenu/case.ts", "../src/editor/extensions/Text/text-extension.ts", "../src/editor/extensions/Transformer/transformer-extension.ts", "../src/editor/transform/serializer.ts", "../src/editor/extensions/CodeMirror/codemirror-lang-menu.tsx", "../src/editor/extensions/CodeMirror/codemirror-node-view.ts", "../src/editor/components/useContextMounted.tsx", "../src/editor/components/WysiwygEditor/index.tsx", "../src/editor/toolbar/BlockHandler/index.tsx", "../src/editor/extensions/NodeIndicator/drag-preview.ts", "../src/editor/utils/get-box-element.ts", "../src/editor/extensions/NodeIndicator/set-drag-preview.ts", "../src/editor/toolbar/SlashMenu/index.tsx", "../src/editor/toolbar/TableToolbar/index.tsx", "../src/editor/toolbar/TableToolbar/ActiveCellMenu.tsx", "../src/editor/toolbar/TableToolbar/TableBar.tsx", "../src/editor/toolbar/TableToolbar/positioner.ts", "../src/editor/toolbar/toolbar/command-btns/command-button.tsx", "../src/editor/toolbar/toolbar/use-command-option-values.ts", "../src/editor/toolbar/toolbar/react-component-utils.ts", "../src/editor/toolbar/toolbar/command-btns/command-button-icon.tsx", "../src/editor/toolbar/toolbar/wysiwyg-toolbar.tsx", "../src/editor/toolbar/toolbar/command-btns/insert-separator-button.tsx", "../src/editor/toolbar/toolbar/command-btns/redo-button.tsx", "../src/editor/toolbar/toolbar/command-btns/toggle-blockquote-button.tsx", "../src/editor/toolbar/toolbar/command-btns/toggle-bold-button.tsx", "../src/editor/toolbar/toolbar/command-btns/toggle-bullet-list-button.tsx", "../src/editor/toolbar/toolbar/command-btns/toggle-code-block-button.tsx", "../src/editor/toolbar/toolbar/command-btns/toggle-code-button.tsx", "../src/editor/toolbar/toolbar/command-btns/toggle-heading-button.tsx", "../src/editor/toolbar/toolbar/command-btns/toggle-italic-button.tsx", "../src/editor/toolbar/toolbar/command-btns/toggle-ordered-list-button.tsx", "../src/editor/toolbar/toolbar/command-btns/toggle-task-list-button.tsx", "../src/editor/toolbar/toolbar/command-btns/undo-button.tsx", "../src/editor/components/WysiwygEditor/Text.tsx", "../src/editor/components/WysiwygEditor/delegate.ts", "../src/editor/components/ThemeProvider.tsx", "../src/editor/i18n/index.ts", "../src/editor/i18n/en.json", "../src/editor/components/Preview/preview.tsx", "../src/editor/utils/prosemirrorNodeToHtml.ts", "../src/editor/hooks/index.ts", "../src/editor/types/index.ts"],
|
|
4
|
-
"sourcesContent": ["import type { CreateThemeOptions } from '@drl990114/codemirror-themes'\nimport { createTheme } from '@drl990114/codemirror-themes'\n\nexport { createTheme }\nexport type { CreateThemeOptions }\n", "import { indentWithTab } from '@codemirror/commands'\nimport {\n ensureSyntaxTree,\n type LanguageDescription,\n type LanguageSupport,\n} from '@codemirror/language'\nimport { languages } from '@codemirror/language-data'\nimport { SearchQuery } from '@codemirror/search'\nimport type {\n Extension as CodeMirrorExtension,\n Transaction as CodeMirrorTransaction,\n} from '@codemirror/state'\nimport {\n EditorState as CodeMirrorEditorState,\n Compartment,\n RangeSetBuilder,\n StateEffect,\n StateField,\n} from '@codemirror/state'\nimport type {\n Command as CodeMirrorCommand,\n EditorViewConfig as CodeMirrorEditorViewConfig,\n KeyBinding as CodeMirrorKeyBinding,\n ViewUpdate,\n} from '@codemirror/view'\nimport { Decoration, EditorView as CodeMirrorEditorView, keymap, ViewPlugin } from '@codemirror/view'\nimport { SyntaxNodeRef, Tree } from '@lezer/common'\nimport { assertGet, isPromise, replaceNodeAtPosition } from '@rme-sdk/core'\nimport type { EditorSchema, EditorView, ProsemirrorNode } from '@rme-sdk/pm'\nimport { exitCode } from '@rme-sdk/pm/commands'\nimport { redo, undo } from '@rme-sdk/pm/history'\nimport { Selection, TextSelection } from '@rme-sdk/pm/state'\nimport { nanoid } from 'nanoid'\nimport type { LoadLanguage } from '../extensions/CodeMirror/codemirror-node-view'\nimport { CustomCopyFunction } from '../extensions/CodeMirror/codemirror-types'\nimport { createCommandKeymap, type CommandKeymapOptions } from '../extensions/CodeMirror/keymap'\nimport { lightTheme } from '../theme'\nimport type { CreateThemeOptions } from './theme'\nimport { createTheme } from './theme'\n\nconst cmInstanceMap = new Map<string, MfCodemirrorView>()\nconst themeRef = { current: createTheme(lightTheme.codemirrorTheme as CreateThemeOptions) }\n\ntype SearchHighlightState = {\n query: SearchQuery\n active: { from: number; to: number } | null\n}\n\nconst setSearchHighlight = StateEffect.define<SearchHighlightState>()\n\nconst searchHighlightField = StateField.define<SearchHighlightState>({\n create() {\n return { query: new SearchQuery({ search: '' }), active: null }\n },\n update(value, tr) {\n for (const effect of tr.effects) {\n if (effect.is(setSearchHighlight)) {\n return effect.value\n }\n }\n return value\n },\n})\n\nconst matchDecoration = Decoration.mark({ class: 'cm-search-match' })\nconst activeDecoration = Decoration.mark({ class: 'cm-search-active' })\n\nconst normalizeExtensions = (\n extensions: CodeMirrorExtension[] | null | undefined,\n): CodeMirrorExtension[] => {\n const result: CodeMirrorExtension[] = []\n const stack = [...(extensions ?? [])] as unknown[]\n\n while (stack.length > 0) {\n const ext = stack.shift()\n if (!ext) {\n continue\n }\n if (Array.isArray(ext)) {\n stack.unshift(...ext)\n continue\n }\n result.push(ext as CodeMirrorExtension)\n }\n\n return result\n}\n\nconst searchHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations\n\n constructor(view: CodeMirrorEditorView) {\n this.decorations = this.buildDecorations(view)\n }\n\n update(update: ViewUpdate) {\n if (\n update.docChanged ||\n update.viewportChanged ||\n update.startState.field(searchHighlightField) !==\n update.state.field(searchHighlightField)\n ) {\n this.decorations = this.buildDecorations(update.view)\n }\n }\n\n buildDecorations(view: CodeMirrorEditorView) {\n const { query, active } = view.state.field(searchHighlightField)\n if (!query.valid || !query.search) {\n return Decoration.none\n }\n\n const builder = new RangeSetBuilder<Decoration>()\n for (const { from, to } of view.visibleRanges) {\n const cursor = query.getCursor(view.state, from, to)\n while (true) {\n const next = cursor.next()\n if (next.done) {\n break\n }\n const range = next.value\n const deco =\n active && active.from === range.from && active.to === range.to\n ? activeDecoration\n : matchDecoration\n builder.add(range.from, range.to, deco)\n }\n }\n return builder.finish()\n }\n },\n {\n decorations: (value) => value.decorations,\n },\n)\n\nexport const changeTheme = (theme: CreateThemeOptions): void => {\n themeRef.current = createTheme(theme)\n cmInstanceMap.forEach((mfCmView) => {\n mfCmView.cm.dispatch({\n effects: mfCmView.editorTheme.reconfigure(themeRef.current),\n })\n })\n}\n\nexport const updateCodemirrorSearchQuery = (query: string, caseSensitive = false): void => {\n updateCodemirrorSearchState(query, caseSensitive, null)\n}\n\nexport const updateCodemirrorSearchState = (\n query: string,\n caseSensitive = false,\n activeMatch?: { from: number; to: number } | null,\n): void => {\n const searchQuery = new SearchQuery({\n search: query,\n caseSensitive,\n })\n cmInstanceMap.forEach((mfCmView) => {\n const range = mfCmView.getProsemirrorContentRange()\n const active =\n activeMatch &&\n activeMatch.from >= range.from &&\n activeMatch.to <= range.to\n ? { from: activeMatch.from - range.from, to: activeMatch.to - range.from }\n : null\n mfCmView.setSearchState(searchQuery, active)\n })\n}\n\nexport const scrollCodemirrorToMatch = (\n activeMatch?: { from: number; to: number } | null,\n): boolean => {\n if (!activeMatch) {\n return false\n }\n let scrolled = false\n cmInstanceMap.forEach((mfCmView) => {\n const range = mfCmView.getProsemirrorContentRange()\n if (activeMatch.from >= range.from && activeMatch.to <= range.to) {\n mfCmView.scrollToPosition(activeMatch.from - range.from)\n scrolled = true\n }\n })\n return scrolled\n}\n\nexport const extractMatches = (view: CodeMirrorEditorView) => {\n const tree: Tree | null = ensureSyntaxTree(view.state, view.state.doc.length)\n const matches: any[] = []\n tree?.iterate({\n from: 0,\n to: view.state.doc.length,\n enter: ({ type, from, to }: SyntaxNodeRef) => {\n if (type.name.startsWith('ATXHeading')) {\n matches.push({ from, to, value: view.state.doc.sliceString(from, to), type: type.name })\n }\n },\n })\n\n return matches\n}\n\nexport type CreateCodemirrorOptions = {\n /**\n * when it is true, undo and redo will use prosemirror view.\n */\n useProsemirrorHistoryKey?: boolean\n\n codemirrorEditorViewConfig?: CodeMirrorEditorViewConfig\n\n onValueChange?: (value: string) => void\n\n /**\n * Copy button configuration options\n */\n copyButton?: {\n /**\n * Whether to show the copy button\n * @default true\n */\n enabled?: boolean\n\n /**\n * Custom copy function to override default behavior\n */\n customCopyFunction?: CustomCopyFunction\n }\n\n /**\n * Command keymap options for customizing keyboard shortcuts\n */\n commandKeymapOptions?: CommandKeymapOptions\n}\n\nexport class MfCodemirrorView {\n private readonly view: EditorView\n\n private readonly getPos: () => number\n\n private readonly languageConf: Compartment\n\n private readonly toggleName = 'paragraph'\n\n private readonly schema: EditorSchema\n\n private readonly searchQueryConf: Compartment\n\n private languageName: string\n\n id = nanoid()\n\n cm: CodeMirrorEditorView\n\n content = ''\n\n node: ProsemirrorNode\n\n editorTheme: Compartment\n\n updating = false\n\n loadLanguage: LoadLanguage\n\n options?: CreateCodemirrorOptions\n\n private copyButton: HTMLDivElement | null = null\n private copyButtonContainer: HTMLElement | null = null\n\n constructor({\n view,\n getPos,\n node,\n extensions = [],\n languageName,\n options = {},\n }: {\n node: ProsemirrorNode\n view: EditorView\n getPos: () => number\n extensions?: CodeMirrorExtension[] | null\n languageName: string\n options?: CreateCodemirrorOptions\n }) {\n this.view = view\n this.getPos = getPos\n this.node = node\n this.languageConf = new Compartment()\n this.editorTheme = new Compartment()\n this.searchQueryConf = new Compartment()\n this.schema = node.type.schema\n this.languageName = languageName\n this.loadLanguage = loadLanguage\n this.options = options\n this.content = this.node.textContent\n const changeFilter = CodeMirrorEditorState.changeFilter.of((tr: CodeMirrorTransaction) => {\n if (!tr.docChanged) {\n this.forwardSelection()\n }\n\n return true\n })\n\n const startState = CodeMirrorEditorState.create({\n doc: this.node.textContent as string,\n extensions: [\n keymap.of(this.codeMirrorKeymap()),\n changeFilter,\n this.searchQueryConf.of([searchHighlightField, searchHighlightPlugin]),\n this.languageConf.of([]),\n this.editorTheme.of(themeRef.current),\n ...normalizeExtensions(extensions),\n ],\n })\n\n // Create a CodeMirror instance\n this.cm = new CodeMirrorEditorView({\n state: startState,\n dispatch: this.valueChanged.bind(this),\n ...(this.options.codemirrorEditorViewConfig || {}),\n })\n\n cmInstanceMap.set(this.id, this)\n\n this.updateLanguage()\n\n // Create copy button if enabled\n if (this.options.copyButton?.enabled !== false) {\n this.createCopyButton()\n }\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.content = node.textContent\n this.updateLanguage()\n const change = computeChange(this.cm.state.doc.toString(), node.textContent)\n\n if (change) {\n this.updating = true\n this.cm.dispatch({\n changes: { from: change.from, to: change.to, insert: change.text },\n })\n this.updating = false\n }\n\n return true\n }\n\n setSelection(anchor: number, head: number): void {\n this.cm.focus()\n this.updating = true\n this.cm.dispatch({ selection: { anchor, head } })\n this.updating = false\n }\n\n updateLanguage() {\n const languageName = this.node.attrs.language\n if (languageName === this.languageName) {\n return\n }\n\n const language = this.loadLanguage(languageName)\n\n if (!language) {\n return\n }\n\n if (isPromise(language)) {\n language.then((lang) => {\n this.setLanguage(lang)\n this.languageName = languageName\n })\n return\n }\n\n this.setLanguage(language)\n this.languageName = languageName\n }\n\n destroy() {\n this.cm.destroy()\n cmInstanceMap.delete(this.id)\n }\n\n setSearchState(query: SearchQuery, active: { from: number; to: number } | null): void {\n this.cm.dispatch({ effects: setSearchHighlight.of({ query, active }) })\n }\n\n scrollToPosition(pos: number): void {\n const safePos = Math.max(0, Math.min(pos, this.cm.state.doc.length))\n this.cm.dispatch({ effects: CodeMirrorEditorView.scrollIntoView(safePos, { y: 'center' }) })\n }\n\n getProsemirrorContentRange(): { from: number; to: number } {\n const start = this.getPos() + 1\n return { from: start, to: start + this.node.content.size }\n }\n\n forwardSelection() {\n if (!this.cm.hasFocus) {\n return\n }\n\n const { state } = this.view\n const selection = this.asProseMirrorSelection(state.doc)\n\n if (!selection.eq(state.selection)) {\n this.view.dispatch(state.tr.setSelection(selection))\n }\n }\n\n private setLanguage(language: LanguageSupport) {\n this.cm.dispatch({\n effects: this.languageConf.reconfigure(language),\n })\n }\n\n private valueChanged(tr: CodeMirrorTransaction): void {\n if (!this.cm || !this.view) return\n\n this.cm.update([tr])\n\n if (!tr.docChanged || this.updating) {\n return\n }\n\n const change = computeChange(this.node.textContent, tr.state.doc.toString())\n\n if (change) {\n const start = this.getPos() + 1\n const transaction = this.view.state.tr.replaceWith(\n start + change.from,\n start + change.to,\n change.text ? this.schema.text(change.text) : [],\n )\n this.view.dispatch(transaction)\n\n this.options?.onValueChange?.(tr.state.doc.toString())\n }\n }\n\n private asProseMirrorSelection(doc: ProsemirrorNode) {\n const start = this.getPos() + 1\n const { anchor, head } = this.cm.state.selection.main\n return TextSelection.between(doc.resolve(anchor + start), doc.resolve(head + start))\n }\n\n private codeMirrorKeymap(): CodeMirrorKeyBinding[] {\n const keymaps: CodeMirrorKeyBinding[] = [\n indentWithTab,\n {\n key: 'ArrowUp',\n run: this.maybeEscape('line', -1),\n },\n {\n key: 'ArrowLeft',\n run: this.maybeEscape('char', -1),\n },\n {\n key: 'ArrowDown',\n run: this.maybeEscape('line', 1),\n },\n {\n key: 'ArrowRight',\n run: this.maybeEscape('char', 1),\n },\n {\n key: 'Ctrl-Enter',\n run: () => {\n if (exitCode(this.view.state, this.view.dispatch)) {\n this.view.focus()\n return true\n }\n\n return false\n },\n },\n {\n key: 'Backspace',\n run: () => {\n const { ranges } = this.cm.state.selection\n\n if (!this.cm || !ranges || ranges.length > 1) {\n return false\n }\n\n const selection = ranges[0]\n\n if (selection && (!selection.empty || selection.anchor > 0)) {\n return false\n }\n\n // We don't want to convert a multi-line code block into a paragraph\n // because newline characters are invalid in a paragraph node.\n if (this.cm.state.doc.lines >= 2) {\n return false\n }\n\n const { state } = this.view\n const toggleNode = assertGet(state.schema.nodes, this.toggleName)\n const pos = this.getPos()\n\n const tr = replaceNodeAtPosition({\n pos,\n tr: state.tr,\n content: toggleNode.createChecked({}, this.node.content),\n })\n\n tr.setSelection(TextSelection.near(tr.doc.resolve(pos)))\n\n this.view.dispatch(tr)\n this.view.focus()\n return true\n },\n },\n ...createCommandKeymap(this.options?.commandKeymapOptions)\n ]\n\n if (this.options?.useProsemirrorHistoryKey) {\n keymaps.push(\n {\n key: 'Mod-z',\n run: () => {\n undo(this.view.state, this.view.dispatch)\n this.view.focus()\n return false\n },\n },\n {\n key: 'Mod-y',\n mac: 'Mod-Shift-z',\n run: () => {\n redo(this.view.state, this.view.dispatch)\n this.view.focus()\n return false\n },\n preventDefault: true,\n },\n {\n linux: 'Ctrl-Shift-z',\n run: () => {\n redo(this.view.state, this.view.dispatch)\n this.view.focus()\n return false\n },\n preventDefault: true,\n },\n )\n }\n\n return keymaps\n }\n\n private maybeEscape(unit: 'line' | 'char', dir: 1 | -1): CodeMirrorCommand {\n return (view: CodeMirrorEditorView) => {\n const { state } = view\n\n // Exit if the selection is not empty\n if (state.selection.ranges.some((range) => !range.empty)) {\n return false\n }\n\n const { anchor } = state.selection.main\n\n const line = state.doc.lineAt(anchor)\n const lineOffset = anchor - line.from\n\n if (\n line.number !== (dir < 0 ? 1 : state.doc.lines) ||\n (unit === 'char' && lineOffset !== (dir < 0 ? 0 : line.length))\n ) {\n return false\n }\n\n if (unit === 'line' && dir < 0 && this.focusLanguageInput()) {\n return true\n }\n\n const targetPos = this.getPos() + (dir < 0 ? 0 : this.node.nodeSize)\n const selection = Selection.near(this.view.state.doc.resolve(targetPos), dir)\n\n if (dir === 1 && exitCode(this.view.state, this.view.dispatch)) {\n this.view.focus()\n return true\n }\n\n this.view.dispatch(this.view.state.tr.setSelection(selection).scrollIntoView())\n this.view.focus()\n return true\n }\n }\n\n private focusLanguageInput(): boolean {\n const nodeDom = this.view.nodeDOM(this.getPos()) as HTMLElement | null\n const parent = nodeDom?.parentElement\n if (!parent) {\n return false\n }\n let sibling: ChildNode | null = nodeDom.previousSibling\n while (sibling) {\n if (\n sibling instanceof HTMLElement &&\n sibling.classList.contains('code-block__menu')\n ) {\n const input = sibling.querySelector(\n '.code-block__languages__input',\n ) as HTMLInputElement | null\n if (input) {\n input.focus()\n return true\n }\n return false\n }\n sibling = sibling.previousSibling\n }\n return false\n }\n\n /**\n * Creates the copy button and adds it to the CodeMirror editor\n */\n private createCopyButton(): void {\n if (!this.cm.dom || !this.options) return\n\n // Create copy button\n this.copyButton = document.createElement('div')\n this.copyButton.className = 'cm-copy-btn'\n\n this.copyButton.innerHTML = `<i class=\"ri-file-copy-line\"></i>`\n\n // Use custom tooltip or default\n const tooltip = 'Copy code'\n this.copyButton.title = tooltip\n\n // Add event listeners\n this.setupCopyButtonEvents()\n\n // Add container to CodeMirror editor\n this.cm.dom.appendChild(this.copyButton)\n\n // Enable pointer events on button\n this.copyButton.style.pointerEvents = 'auto'\n }\n\n /**\n * Sets up event listeners for the copy button\n */\n private setupCopyButtonEvents(): void {\n if (!this.copyButton) return\n\n // Hover effects\n this.copyButton.addEventListener('mouseenter', () => {\n if (!this.copyButton) return\n\n this.copyButton.style.transform = 'translateY(-1px)'\n })\n\n this.copyButton.addEventListener('mousedown', (e) => {\n e.preventDefault()\n e.stopPropagation()\n })\n\n this.copyButton.addEventListener('mouseleave', () => {\n if (!this.copyButton) return\n\n this.copyButton.style.transform = 'translateY(0)'\n })\n\n // Click handler for copying\n this.copyButton.addEventListener('click', this.handleCopy.bind(this), {\n capture: true,\n })\n }\n\n /**\n * Handles the copy button click event\n */\n private async handleCopy(e: MouseEvent): Promise<void> {\n e.stopPropagation()\n e.preventDefault()\n\n if (!this.options) return\n\n const code = this.node.textContent\n\n // Use custom copy function if provided\n if (this.options.copyButton?.customCopyFunction) {\n try {\n const result = this.options.copyButton.customCopyFunction(code)\n if (result instanceof Promise) {\n const success = await result\n if (success) {\n this.showCopySuccess()\n }\n } else {\n if (result) {\n this.showCopySuccess()\n }\n }\n return\n } catch (error) {\n console.error('Custom copy function failed:', error)\n // Fall back to default copy behavior\n }\n }\n\n // Default copy behavior\n if (navigator.clipboard && window.isSecureContext) {\n // Use modern clipboard API\n try {\n await navigator.clipboard.writeText(code)\n this.showCopySuccess()\n } catch (error) {\n console.error('Clipboard API failed:', error)\n }\n } else {\n }\n }\n\n /**\n * Shows copy success feedback\n */\n private showCopySuccess(): void {\n if (!this.copyButton || !this.options) return\n\n const originalTitle = this.copyButton.title\n\n const successTooltip = 'Copied!'\n\n this.copyButton.innerHTML = `<i class=\"ri-check-line\"></i>`\n this.copyButton.title = successTooltip\n this.copyButton.style.color = 'green'\n\n setTimeout(() => {\n if (this.copyButton) {\n this.copyButton.innerHTML = `<i class=\"ri-file-copy-line\"></i>`\n this.copyButton.title = originalTitle\n this.copyButton.style.color = 'inherit'\n }\n }, 1500)\n }\n}\n\nexport const getLanguageMap = (): Record<string, LanguageDescription> => {\n const languageMap: Record<string, LanguageDescription> = {}\n\n for (const language of languages ?? []) {\n for (const alias of language.alias) {\n languageMap[alias] = language\n }\n }\n\n return languageMap\n}\n\nexport const loadLanguage = (\n languageName: string,\n): Promise<LanguageSupport> | LanguageSupport | undefined => {\n if (typeof languageName !== 'string') {\n return undefined\n }\n\n const languageMap = getLanguageMap()\n const language = languageMap[languageName.toLowerCase()]\n\n if (!language) {\n return undefined\n }\n\n return language.support || language.load()\n}\n\nexport function computeChange(\n oldVal: string,\n newVal: string,\n): { from: number; to: number; text: string } | null {\n if (oldVal === newVal) {\n return null\n }\n\n let start = 0\n let oldEnd = oldVal.length\n let newEnd = newVal.length\n\n while (start < oldEnd && oldVal.charCodeAt(start) === newVal.charCodeAt(start)) {\n ++start\n }\n\n while (\n oldEnd > start &&\n newEnd > start &&\n oldVal.charCodeAt(oldEnd - 1) === newVal.charCodeAt(newEnd - 1)\n ) {\n oldEnd--\n newEnd--\n }\n\n return { from: start, to: oldEnd, text: newVal.slice(start, newEnd) }\n}\n", "import { redo, undo } from '@codemirror/commands'\nimport { KeyBinding } from '@codemirror/view'\nimport { clipboardRead } from '../../utils/clipboard-read'\nimport { ClipboardReadFunction } from './../../utils/clipboard-read'\nimport {\n applyBold,\n applyCode,\n applyH1,\n applyH2,\n applyH3,\n applyH4,\n applyH5,\n applyH6,\n applyItalic,\n applyStrikethrough,\n getInsertLinkOrImageCommand,\n} from './commands/markdown'\n\nexport interface CommandKeymapOptions {\n /**\n * Override default keyboard shortcuts\n * @example\n * { toggleStrong: 'mod-shift-b', toggleEmphasis: 'ctrl-i' }\n */\n overrideShortcutMap?: Partial<Record<CommandName, string>>\n\n /**\n * Disable all built-in shortcuts\n * @default false\n */\n disableAllBuildInShortcuts?: boolean\n\n clipboardReadFunction?: ClipboardReadFunction\n}\n\nexport type CommandName = keyof typeof defaultCommandShortcutMap\n\nconst defaultCommandShortcutMap = {\n copy: 'mod-c',\n paste: 'mod-v',\n undo: 'mod-z',\n redo: 'mod-shift-z',\n cut: 'mod-x',\n toggleH1: 'mod-1',\n toggleH2: 'mod-2',\n toggleH3: 'mod-3',\n toggleH4: 'mod-4',\n toggleH5: 'mod-5',\n toggleH6: 'mod-6',\n toggleStrong: 'mod-b',\n toggleEmphasis: 'mod-i',\n toggleCodeText: 'mod-e',\n toggleDelete: 'mod-shift-s',\n insertLink: 'mod-k',\n insertImage: 'mod-alt-i',\n} as const\n\n/**\n * Create command keymap with configurable shortcuts\n */\nexport function createCommandKeymap(options: CommandKeymapOptions = {}): KeyBinding[] {\n const { overrideShortcutMap = {}, disableAllBuildInShortcuts = false } = options\n\n // Start with empty keymap if all built-ins are disabled\n let shortcutMap: Partial<Record<CommandName, string>> = disableAllBuildInShortcuts\n ? {}\n : { ...defaultCommandShortcutMap }\n\n // Apply user overrides\n Object.assign(shortcutMap, overrideShortcutMap)\n\n // if (shortcutMap?.paste?.toLowerCase() === 'mod-v') {\n delete shortcutMap.paste\n // }\n\n const keymap: KeyBinding[] = []\n\n // Add undo/redo commands\n if (shortcutMap.undo) {\n keymap.push({ key: shortcutMap.undo, run: undo, preventDefault: true })\n }\n if (shortcutMap.redo) {\n keymap.push({ key: shortcutMap.redo, run: redo, preventDefault: true })\n }\n\n // Add markdown formatting commands\n if (shortcutMap.toggleStrong) {\n keymap.push({ key: shortcutMap.toggleStrong, run: applyBold })\n }\n if (shortcutMap.toggleEmphasis) {\n keymap.push({ key: shortcutMap.toggleEmphasis, run: applyItalic })\n }\n if (shortcutMap.toggleCodeText) {\n keymap.push({ key: shortcutMap.toggleCodeText, run: applyCode })\n }\n if (shortcutMap.toggleDelete) {\n keymap.push({ key: shortcutMap.toggleDelete, run: applyStrikethrough })\n }\n\n if (shortcutMap.insertLink) {\n keymap.push({\n key: shortcutMap.insertLink,\n run: getInsertLinkOrImageCommand({ type: 'link', options }),\n })\n }\n if (shortcutMap.insertImage) {\n keymap.push({\n key: shortcutMap.insertImage,\n run: getInsertLinkOrImageCommand({ type: 'image', options }),\n })\n }\n\n // Add heading commands\n if (shortcutMap.toggleH1) {\n keymap.push({ key: shortcutMap.toggleH1, run: applyH1 })\n }\n if (shortcutMap.toggleH2) {\n keymap.push({ key: shortcutMap.toggleH2, run: applyH2 })\n }\n if (shortcutMap.toggleH3) {\n keymap.push({ key: shortcutMap.toggleH3, run: applyH3 })\n }\n if (shortcutMap.toggleH4) {\n keymap.push({ key: shortcutMap.toggleH4, run: applyH4 })\n }\n if (shortcutMap.toggleH5) {\n keymap.push({ key: shortcutMap.toggleH5, run: applyH5 })\n }\n if (shortcutMap.toggleH6) {\n keymap.push({ key: shortcutMap.toggleH6, run: applyH6 })\n }\n\n // Add other commands\n if (shortcutMap.copy) {\n keymap.push({\n key: shortcutMap.copy,\n run: (view) => {\n // \u5904\u7406\u590D\u5236\u64CD\u4F5C\n document.execCommand('copy')\n return true\n },\n preventDefault: true,\n })\n }\n if (shortcutMap.paste) {\n keymap.push({\n key: shortcutMap.paste,\n run: (view) => {\n const clipboardReadFn = options.clipboardReadFunction || clipboardRead\n\n clipboardReadFn()\n .then(({ text }) => {\n if (text && view) {\n const textToInsert = typeof text === 'string' ? text : ''\n const insertPosition = view.state.selection.main.from\n const newCursorPosition = insertPosition + textToInsert.length\n\n view.dispatch({\n changes: {\n from: view.state.selection.main.from,\n to: view.state.selection.main.to,\n insert: textToInsert,\n },\n selection: { anchor: newCursorPosition, head: newCursorPosition },\n })\n }\n })\n .catch((error) => {\n console.error('Failed to read clipboard:', error)\n })\n\n return true // \u8FD4\u56DEtrue\u8868\u793A\u547D\u4EE4\u5DF2\u5904\u7406\n },\n preventDefault: true,\n })\n }\n if (shortcutMap.cut) {\n keymap.push({\n key: shortcutMap.cut,\n run: (view) => {\n document.execCommand('cut')\n return true\n },\n preventDefault: true,\n })\n }\n\n return keymap\n}\n", "export type ClipboardReadFunction = typeof clipboardRead\n\nexport function clipboardRead(): Promise<{ html: string; text: string; }> {\n return navigator.clipboard.read().then(async (data) => {\n let html = ''\n let text = ''\n\n const htmlData = data.find((item) => item.types.includes('text/html'))\n const textData = data.find((item) => item.types.includes('text/plain'))\n\n const getHtml = async () => {\n if (htmlData) {\n const blob = await htmlData.getType('text/html')\n html = await blob.text()\n }\n }\n const getText = async () => {\n if (textData) {\n const blob = await textData.getType('text/plain')\n text = await blob.text()\n }\n }\n\n await Promise.all([getHtml(), getText()])\n\n return {\n html,\n text,\n }\n })\n}\n", "import { type ChangeSpec, EditorSelection } from '@codemirror/state'\nimport { type EditorView } from '@codemirror/view'\nimport { CommandKeymapOptions } from '../keymap'\n\nconst urlRE =\n /^\\[([^\\]]+)\\]\\((.+?)\\)|(((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()[\\]{};:'\".,<>?\u00AB\u00BB\u201C\u201D\u2018\u2019])))|([a-z0-9.\\-_+]+?@[a-z0-9.\\-_+]+\\.[a-z]{2,7})$/i\n\ntype InsertLinkOrImageOptions = CommandKeymapOptions & { type: string }\nfunction insertLinkOrImage(target: EditorView, options: InsertLinkOrImageOptions) {\n const pre = options.type === 'image' ? '!' : ''\n\n options\n .clipboardReadFunction?.()\n .then(({ text }) => {\n const url = urlRE.test(text) ? text : ''\n\n const transaction = target.state.changeByRange(({ from, to }) => {\n const title = target.state.sliceDoc(from, to)\n // Where do we need to put the cursor?\n let offset = 1\n if (title.length > 0 && url.length > 0) {\n offset = 4 + title.length + url.length\n } else if (title.length > 0 && url.length === 0) {\n offset = 3 + title.length\n }\n\n if (options.type === 'image') {\n offset++\n }\n\n return {\n changes: { from, to, insert: `${pre}[${title}](${url})` },\n range: EditorSelection.cursor(from + offset),\n }\n })\n\n target.dispatch(transaction)\n })\n .catch((err) => console.error(err))\n\n return true\n}\n\nfunction removeBlockMarkup(line: string): string {\n let match\n if ((match = /^#{1,6}\\s+/.exec(line)) !== null) {\n return line.substring(match[0].length)\n } else if ((match = /^(\\s{,3})>\\s/.exec(line)) !== null) {\n return match[1] + line.substring(match[0].length)\n }\n return line\n}\n\nfunction applyBlockMarkup(target: EditorView, formatting: string): void {\n const transaction = target.state.changeByRange((range) => {\n const startLine = target.state.doc.lineAt(range.from).number\n const endLine = target.state.doc.lineAt(range.to).number\n\n const changes: ChangeSpec[] = []\n\n let offsetCharacters = 0\n\n for (let i = startLine; i <= endLine; i++) {\n // TODO: Test if this does what it should do\n const line = target.state.doc.line(i)\n const withoutBlocks = removeBlockMarkup(line.text)\n offsetCharacters += line.text.length - withoutBlocks.length + formatting.length + 1\n changes.push({ from: line.from, to: line.to, insert: formatting + ' ' + withoutBlocks })\n }\n\n return { changes, range: EditorSelection.range(range.to, range.to) }\n })\n\n target.dispatch(transaction)\n}\n\nfunction applyInlineMarkup(target: EditorView, start: string, end: string): void {\n const transaction = target.state.changeByRange((range) => {\n const contents = target.state.sliceDoc(range.from, range.to)\n const before = target.state.sliceDoc(range.from - start.length, range.from)\n const after = target.state.sliceDoc(range.to, range.to + end.length)\n\n if (before === start && after === end) {\n // The user is inside inline markup which is outside the selection\n return {\n changes: {\n from: range.from - start.length,\n to: range.to + end.length,\n insert: contents,\n },\n range: EditorSelection.range(\n range.from - start.length,\n range.from - start.length + contents.length,\n ),\n }\n } else if (contents.startsWith(start) && contents.endsWith(end)) {\n // The user is inside inline markup which is inside the selection\n return {\n changes: {\n from: range.from,\n to: range.to,\n insert: contents.substring(start.length, contents.length - end.length),\n },\n range: EditorSelection.range(\n range.from,\n range.from + contents.length - start.length - end.length,\n ),\n }\n } else if (after === end && range.empty) {\n // The cursor is just at the end of the inline formatting, so make it\n // \"jump over\" the characters\n return { range: EditorSelection.cursor(range.to + end.length) }\n } else {\n // There is not the given type of markup in this selection yet, so surround\n // the selection with it\n return {\n changes: { from: range.from, to: range.to, insert: start + contents + end },\n range: EditorSelection.range(\n range.from + start.length,\n range.from + start.length + contents.length,\n ),\n }\n }\n })\n\n target.dispatch(transaction)\n}\n\nfunction applyList(target: EditorView, type: 'ul' | 'ol' | 'task'): void {\n const transaction = target.state.changeByRange((range) => {\n const startLine = target.state.doc.lineAt(range.from).number\n const endLine = target.state.doc.lineAt(range.to).number\n\n const changes: ChangeSpec[] = []\n\n let offsetCharacters = 0\n\n for (let i = startLine; i <= endLine; i++) {\n const line = target.state.doc.line(i)\n const withoutBlocks = removeBlockMarkup(line.text)\n const formatting = type === 'ol' ? `${i - startLine + 1}.` : type === 'ul' ? '*' : '- [ ]'\n offsetCharacters += line.text.length - withoutBlocks.length + formatting.length + 1\n changes.push({ from: line.from, to: line.to, insert: formatting + ' ' + withoutBlocks })\n }\n\n return { changes, range: EditorSelection.cursor(range.to + offsetCharacters) }\n })\n\n target.dispatch(transaction)\n}\n\nexport function getInsertLinkOrImageCommand({\n type,\n options,\n}: {\n type: string\n options: CommandKeymapOptions\n}) {\n if (type === 'link') {\n return (target: EditorView) => insertLinkOrImage(target, { ...options, type })\n } else {\n return (target: EditorView) => insertLinkOrImage(target, { ...options, type })\n }\n}\n\nexport function applyBold(target: EditorView): boolean {\n const markup = '**'\n applyInlineMarkup(target, markup, markup)\n return true\n}\n\nexport function applyItalic(target: EditorView): boolean {\n const markup = '*'\n applyInlineMarkup(target, markup, markup)\n return true\n}\n\nexport function applyCode(target: EditorView): boolean {\n applyInlineMarkup(target, '`', '`')\n return true\n}\n\nexport function applyComment(target: EditorView): boolean {\n applyInlineMarkup(target, '<!-- ', ' -->')\n return true\n}\n\nexport function applyRule(target: EditorView): boolean {\n target.dispatch({\n changes: { from: target.state.selection.main.from, insert: '\\n***\\n' },\n })\n return true\n}\n\nexport function applyH1(target: EditorView): boolean {\n applyBlockMarkup(target, '#')\n return true\n}\nexport function applyH2(target: EditorView): boolean {\n applyBlockMarkup(target, '##')\n return true\n}\nexport function applyH3(target: EditorView): boolean {\n applyBlockMarkup(target, '###')\n return true\n}\nexport function applyH4(target: EditorView): boolean {\n applyBlockMarkup(target, '####')\n return true\n}\nexport function applyH5(target: EditorView): boolean {\n applyBlockMarkup(target, '#####')\n return true\n}\nexport function applyH6(target: EditorView): boolean {\n applyBlockMarkup(target, '######')\n return true\n}\n\nexport function applyStrikethrough(target: EditorView): boolean {\n applyInlineMarkup(target, '~~', '~~')\n return true\n}\n\nexport function applyBlockquote(target: EditorView): boolean {\n applyBlockMarkup(target, '>')\n return true\n}\n\nexport function applyBulletList(target: EditorView): boolean {\n applyList(target, 'ul')\n return true\n}\n\nexport function applyOrderedList(target: EditorView): boolean {\n applyList(target, 'ol')\n return true\n}\n\nexport function applyTaskList(target: EditorView): boolean {\n applyList(target, 'task')\n return true\n}\n", "import { tags as t } from '@lezer/highlight'\nimport type { CreateThemeOptions} from '@drl990114/codemirror-themes'\n\nexport const codemirrorDark: CreateThemeOptions = {\n theme: 'dark',\n settings: {\n background: '#11191f',\n foreground: '#c9d1d9',\n caret: '#c9d1d9',\n selection: '#1c78aa',\n selectionMatch: '#1c78aa',\n lineHighlight: '#36334280',\n },\n styles: [\n { tag: [t.standard(t.tagName), t.tagName], color: '#7ee787' },\n { tag: [t.comment, t.bracket], color: '#8b949e' },\n { tag: [t.className, t.propertyName], color: '#d2a8ff' },\n { tag: [t.variableName, t.attributeName, t.number, t.operator], color: '#D19A66' },\n { tag: [t.keyword, t.typeName, t.typeOperator, t.typeName], color: '#ff7b72' },\n { tag: [t.string, t.meta, t.regexp], color: '#98C379' },\n { tag: [t.name, t.quote], color: '#7ee787' },\n { tag: [t.heading], color: '#E06C75', fontWeight: 'bold' },\n { tag: [t.emphasis], color: '#d2a8ff', fontStyle: 'italic' },\n { tag: [t.deleted], color: '#ffdcd7', backgroundColor: 'ffeef0' },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: '#ffab70' },\n { tag: [t.url, t.escape, t.link], color: '#D19A66' },\n { tag: t.link, textDecoration: 'underline' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: t.invalid, color: '#f97583' },\n { tag: t.strong, color: '#98C379', fontWeight: 'bold' },\n ],\n}\n", "import { tags as t } from '@lezer/highlight'\nimport type { CreateThemeOptions} from '@drl990114/codemirror-themes'\n\nexport const codemirrorLight: CreateThemeOptions= {\n theme: 'light',\n settings: {\n background: '#fdfdfd',\n foreground: '#24292e',\n selection: '#0369a1',\n selectionMatch: '#0369a1',\n gutterBackground: '#fdfdfd',\n gutterForeground: '#fdfdfd',\n },\n styles: [\n { tag: [t.standard(t.tagName), t.tagName], color: '#116329' },\n { tag: [t.comment, t.bracket], color: '#6a737d' },\n { tag: [t.className, t.propertyName], color: '#6f42c1' },\n { tag: [t.variableName, t.attributeName, t.number, t.operator], color: '#0000CC' },\n { tag: [t.keyword, t.typeName, t.typeOperator], color: '#d73a49' },\n { tag: [t.string, t.meta, t.regexp], color: '#0055AA' },\n { tag: [t.name, t.quote], color: '#22863a' },\n { tag: [t.heading], color: '#0000FF', fontWeight: 'bold' },\n { tag: [t.emphasis], color: '#24292e', fontStyle: 'italic' },\n { tag: [t.deleted], color: '#b31d28', backgroundColor: 'ffeef0' },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: '#e36209' },\n { tag: [t.url, t.escape, t.link], color: '#E06C75' },\n { tag: t.link, textDecoration: 'underline' },\n { tag: t.strikethrough, textDecoration: 'line-through', color: 'red' },\n { tag: t.invalid, color: '#cb2431' },\n { tag: t.strong, color: '#0055AA', fontWeight: 'bold' },\n ],\n}\n", "export const styledDarkTheme = {\n primaryFontColor: '#c8d1d9',\n labelFontColor: 'rgba(255, 255, 255, 0.5)',\n accentColor: '#016ab3',\n borderColor: '#363b41',\n bgColor: '#05010d',\n hoverColor: '#1f2225',\n warnColor: '#e2b340',\n dangerColor: '#dc2626',\n tipsBgColor: '#0e1419',\n successColor: '#00c853',\n boxShadowColor: 'rgba(255, 255, 255, 0.04)',\n\n\n nodeSelectedColor: '#193048',\n\n // node & mark\n markBgColor: '#fff8c5',\n markFontColor: '#000',\n\n imgBgColor: '#0f0f0f',\n\n hrBgColor: '#30363d',\n hrBorderColor: '#21262d',\n\n placeholderFontColor: '#6e7681',\n\n kbdBgColor: '#161b22',\n kbdBorderColor: 'rgba(110, 118, 129, 0.4)',\n kbdFontColor: '#c9d1d9',\n\n blockquoteBorderColor: '#30363d',\n blockquoteFontColor: '#8b949e',\n\n tableTdBorderColor: '#30363d',\n tableTrBgColor: '#0f0f0f',\n tableTrDeepBgColor: '#161b22',\n tableTrBorderColor: '#21262d',\n tableSelectorBgColor: '#333333',\n tableSelectorBgHoverColor: '#555555',\n tableSelectorBorderColor: '#555555',\n tableSelectorHightColor: '#003366',\n tableSelectorHightHoverColor: '#224466',\n tableSelectorHightBorderColor: '#003366',\n tableSelectorCellBgColor: '#224466',\n tableSelectorCellBorderColor: '#003366',\n\n codeBgColor: '#6e768166',\n\n preBgColor: '#252525',\n\n // components\n contextMenuBgColor: '#1E1F20',\n contextMenuBgColorActive: '#1A1A1A',\n contextMenuBgColorHover: '#2D3134',\n\n slashMenuBorderColor: 'rgb(38 38 38 / 1)',\n\n editorToolbarBgColor: '#1b1b1b',\n selectionMatchBgColor: '#7f7a5b',\n}\n", "export const styledLightTheme = {\n primaryFontColor: '#000000',\n labelFontColor: '#9ca3af',\n accentColor: '#007acc',\n borderColor: '#d7d7dc',\n bgColor: '#fdfdfd',\n hoverColor: '#d7d7dc',\n warnColor: '#e2b340',\n dangerColor: '#dc2626',\n tipsBgColor: '#f6f7f9',\n successColor: '#00c853',\n boxShadowColor: 'rgba(0, 0, 0, 0.08)',\n\n\n nodeSelectedColor: '#3988ff33',\n\n // node & mark\n markBgColor: '#fff8c5',\n markFontColor: '#24292f',\n\n imgBgColor: '#ffffff',\n\n hrBgColor: '#d0d7de',\n hrBorderColor: '#d8dee4',\n\n placeholderFontColor: '#6e7681',\n\n kbdBgColor: '#e5e5e5',\n kbdBorderColor: '#afb8c133',\n kbdFontColor: '#24292f',\n\n blockquoteBorderColor: '#d0d7de',\n blockquoteFontColor: '#57606a',\n\n tableTdBorderColor: '#d0d7de',\n tableTrBgColor: '#ffffff',\n tableTrDeepBgColor: '#f6f6f6',\n tableTrBorderColor: '#d8dee4',\n tableSelectorBgColor: '#e5e5e5',\n tableSelectorBgHoverColor: '#c6c6c6',\n tableSelectorBorderColor: '#c6c6c6',\n tableSelectorHightColor: '#5ea5f6',\n tableSelectorHightHoverColor: '#91bbe5',\n tableSelectorHightBorderColor: '#1c7ed6',\n tableSelectorCellBgColor: '#d7ecf9',\n tableSelectorCellBorderColor: '#1c7ed6',\n\n codeBgColor: '#afb8c133',\n\n preBgColor: '#e7e7e7',\n\n // components\n contextMenuBgColor: '#f6f7f9',\n contextMenuBgColorActive: '#F2F2F2',\n contextMenuBgColorHover: '#E8E8EC',\n\n slashMenuBorderColor: 'rgb(229 229 229 / 1)',\n\n editorToolbarBgColor: '#EBEBEC',\n selectionMatchBgColor: '#fff8c5',\n}\n", "import styled, { css } from 'styled-components'\nimport { FlatListStyles } from './FlatListStyles'\n\ninterface WrapperProps {\n codeEditor?: boolean\n dark?: boolean\n /**\n * @default 15px\n */\n rootFontSize?: string\n /**\n * @default 1.6\n */\n rootLineHeight?: string\n}\n\nexport const WysiwygThemeWrapper = styled.div.attrs<WrapperProps>((p) => ({\n rootFontSize: '15px',\n rootLineHeight: '1.6',\n ...p,\n}))`\n width: 100%;\n position: relative;\n /* white-space: pre-wrap; */\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n margin: 0;\n font-family: ${(props) => props.theme.fontFamily};\n font-size: ${(props) => props.rootFontSize};\n line-height: ${(props) => props.rootLineHeight};\n background-color: ${(props) => props.theme.bgColor};\n color: ${(props) => props.theme.primaryFontColor};\n word-wrap: break-word;\n white-space: pre-wrap;\n padding-bottom: 1em;\n box-sizing: border-box;\n outline: none;\n\n & summary {\n display: list-item;\n }\n\n & a {\n background-color: transparent;\n color: ${(props) => props.theme.accentColor};\n text-decoration: none;\n }\n\n & b,\n & strong {\n font-weight: 600;\n }\n\n & dfn {\n font-style: italic;\n }\n\n & mark {\n background-color: ${(props) => props.theme.markBgColor};\n color: ${(props) => props.theme.markFontColor};\n }\n\n & small {\n font-size: 0.9em;\n }\n\n & sub,\n & sup {\n font-size: 0.75em;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n & sub {\n bottom: -0.25em;\n }\n\n & sup {\n top: -0.5em;\n }\n\n & img {\n border-style: none;\n max-width: 100%;\n box-sizing: content-box;\n background-color: ${(props) => props.theme.imgBgColor};\n vertical-align: bottom;\n }\n\n & hr {\n box-sizing: content-box;\n height: 4px;\n margin: 1.5em 0;\n border: 0;\n background: ${(props) => props.theme.hrBgColor};\n }\n\n & kbd {\n display: inline-block;\n padding: 3px 5px;\n font:\n 11px ui-monospace,\n SFMono-Regular,\n SF Mono,\n Menlo,\n Consolas,\n Liberation Mono,\n monospace;\n color: ${(props) => props.theme.kbdFontColor};\n vertical-align: middle;\n background-color: ${(props) => props.theme.kbdBgColor};\n border: solid 1px ${(props) => props.theme.kbdBorderColor};\n border-radius: 6px;\n }\n\n & blockquote {\n color: ${(props) => props.theme.blockquoteFontColor};\n border-left: 0.25em solid ${(props) => props.theme.blockquoteBorderColor};\n }\n\n & table th,\n & table td {\n position: relative;\n border: 1px solid ${(props) => props.theme.tableTdBorderColor};\n }\n\n & table tr {\n background-color: ${(props) => props.theme.tableTrBgColor};\n border-top: 1px solid ${(props) => props.theme.tableTrBorderColor};\n }\n\n & table tr:nth-child(2n) {\n background-color: ${(props) => props.theme.tableTrDeepBgColor};\n }\n\n & code,\n & tt {\n padding: 0.2em 0.4em;\n margin: 0;\n font-size: 0.85em;\n white-space: break-spaces;\n background-color: ${(props) => props.theme.codeBgColor};\n border-radius: 6px;\n }\n\n & tt,\n & code,\n & kbd,\n & pre,\n & samp {\n font-size: 0.85em;\n font-family: ${(props) => props.theme.codemirrorFontFamily};\n }\n\n & figure {\n margin: 1em 40px;\n }\n\n & input {\n font: inherit;\n margin: 0;\n overflow: visible;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n }\n\n & a:hover {\n text-decoration: underline;\n }\n\n & hr::before {\n display: table;\n content: '';\n }\n\n & hr::after {\n display: table;\n clear: both;\n content: '';\n }\n\n & table {\n position: relative;\n border-spacing: 0;\n border-collapse: collapse;\n display: block;\n width: max-content;\n max-width: 100%;\n overflow: auto;\n margin: 2em 0;\n }\n\n & td,\n & th {\n padding: 0;\n }\n\n & input[type='checkbox'] {\n /* Add if not using autoprefixer */\n -webkit-appearance: none;\n /* Remove most all native input styles */\n appearance: none;\n /* Not removed via appearance */\n margin: 0;\n\n font: inherit;\n color: currentColor;\n width: 1.15em;\n height: 1.15em;\n border: 1px solid currentColor;\n border-radius: 4px;\n transform: translateY(0.25em);\n\n display: grid;\n place-content: center;\n }\n\n & input[type='checkbox']:checked {\n background-color: ${(props) => props.theme.accentColor};\n }\n\n & input[type='checkbox']:checked::before {\n transform: scale(1);\n }\n\n & input[type='checkbox']::before {\n content: '';\n width: 0.75em;\n height: 0.75em;\n clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);\n transform: scale(0);\n transform-origin: bottom left;\n transition: 120ms transform ease-in-out;\n background-color: ${(props) => props.theme.bgColor};\n }\n\n & input[type='checkbox']:focus {\n outline: max(2px, 0.15em) solid currentColor;\n outline-offset: max(2px, 0.15em);\n }\n\n & input[type='checkbox']:disabled {\n --form-control-color: #eee;\n\n color: #eee;\n cursor: not-allowed;\n }\n\n & a:focus,\n & [role='button']:focus,\n & input[type='radio']:focus,\n & input[type='checkbox']:focus {\n outline: 2px solid ${(props) => props.theme.accentColor};\n outline-offset: -2px;\n box-shadow: none;\n }\n\n & a:focus:not(:focus-visible),\n & [role='button']:focus:not(:focus-visible),\n & input[type='radio']:focus:not(:focus-visible),\n & input[type='checkbox']:focus:not(:focus-visible) {\n outline: solid 1px transparent;\n }\n\n & a:focus-visible,\n & [role='button']:focus-visible,\n & input[type='radio']:focus-visible,\n & input[type='checkbox']:focus-visible {\n outline: 2px solid #58a6ff;\n outline-offset: -2px;\n box-shadow: none;\n }\n\n & a:not([class]):focus,\n & a:not([class]):focus-visible,\n & input[type='radio']:focus,\n & input[type='radio']:focus-visible,\n & input[type='checkbox']:focus,\n & input[type='checkbox']:focus-visible {\n outline-offset: 0;\n }\n\n & h1,\n & h2,\n & h3,\n & h4,\n & h5,\n & h6 {\n position: relative;\n margin: 0;\n line-height: 1.25;\n }\n\n & h1 {\n font-weight: 600;\n margin: 0.6em 0 1.2em 0;\n font-size: 1.875em;\n }\n\n & h2 {\n font-weight: 600;\n margin: 0.55em 0 1.1em 0;\n font-size: 1.75em;\n }\n\n & h3 {\n font-weight: 600;\n margin: 0.5em 0 1em 0;\n font-size: 1.6em;\n }\n\n & h4 {\n font-weight: 600;\n margin: 0.45em 0 0.9em 0;\n font-size: 1.46em;\n }\n\n & h5 {\n font-weight: 600;\n margin: 0.4em 0 0.8em 0;\n font-size: 1.3em;\n }\n\n & h6 {\n font-weight: 600;\n margin: 0.4em 0 0.8em 0;\n font-size: 1.2em;\n }\n\n & p {\n margin-top: 0;\n margin-bottom: 0.5em;\n }\n\n & blockquote {\n margin: 0;\n padding: 0 1em;\n color: #8b949e;\n border-left: 0.25em solid #30363d;\n }\n\n & ul,\n & ol {\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 1.5em;\n }\n\n & ol ol,\n & ul ol {\n list-style-type: lower-roman;\n }\n\n & ul ul ol,\n & ul ol ol,\n & ol ul ol,\n & ol ol ol {\n list-style-type: lower-alpha;\n }\n\n & dd {\n margin-left: 0;\n }\n\n & pre {\n margin-top: 0;\n margin-bottom: 0;\n font-family: ${(props) => props.theme.codemirrorFontFamily};\n font-size: 0.8em;\n word-wrap: normal;\n }\n\n .markdown-body::before {\n display: table;\n content: '';\n }\n\n .markdown-body::after {\n display: table;\n clear: both;\n content: '';\n }\n\n & > *:first-child {\n margin-top: 0 !important;\n }\n\n & > *:last-child {\n margin-bottom: 0 !important;\n }\n\n & a:not([href]) {\n color: inherit;\n text-decoration: none;\n }\n\n & p,\n & blockquote,\n & ul,\n & ol,\n & dl,\n & pre,\n & details {\n margin-top: 0;\n margin-bottom: 16px;\n }\n\n & blockquote > :first-child {\n margin-top: 0;\n }\n\n & blockquote > :last-child {\n margin-bottom: 0;\n }\n\n & h1 tt,\n & h1 code,\n & h2 tt,\n & h2 code,\n & h3 tt,\n & h3 code,\n & h4 tt,\n & h4 code,\n & h5 tt,\n & h5 code,\n & h6 tt,\n & h6 code {\n padding: 0 0.2em;\n font-size: inherit;\n }\n\n & ul ul,\n & ul ol,\n & ol ol,\n & ol ul {\n margin-top: 0;\n margin-bottom: 0;\n }\n\n & li > p {\n margin-top: 16px;\n }\n\n & li + li {\n margin-top: 0.25em;\n }\n\n & dl {\n padding: 0;\n }\n\n & dl dt {\n padding: 0;\n margin-top: 16px;\n font-size: 1em;\n font-style: italic;\n font-weight: 600;\n }\n\n & dl dd {\n padding: 0 16px;\n margin-bottom: 16px;\n }\n\n & table th {\n font-weight: 600;\n }\n\n & table th,\n & table td {\n min-width: 60px;\n padding: 6px 20px;\n }\n\n & table img {\n background-color: transparent;\n }\n\n & img[align='right'] {\n padding-left: 20px;\n }\n\n & img[align='left'] {\n padding-right: 20px;\n }\n\n & code br,\n & tt br {\n display: none;\n }\n\n & del code {\n text-decoration: inherit;\n }\n\n & samp {\n font-size: 0.85em;\n }\n\n & pre code {\n font-size: 1em;\n }\n\n & pre > code {\n padding: 0;\n margin: 0;\n word-break: normal;\n white-space: pre;\n background: transparent;\n border: 0;\n }\n\n & pre {\n padding: 16px;\n overflow: auto;\n font-size: 0.85em;\n line-height: 1.45;\n background-color: ${(props) => props.theme.preBgColor};\n border-radius: 6px;\n }\n\n & pre code,\n & pre tt {\n display: inline;\n max-width: auto;\n padding: 0;\n margin: 0;\n overflow: visible;\n line-height: inherit;\n word-wrap: normal;\n background-color: transparent;\n border: 0;\n }\n\n & ul[data-task-list] {\n padding: 0;\n list-style-type: none;\n }\n\n .remirror-list-item-with-custom-mark {\n display: flex;\n }\n\n .remirror-list-item-marker-container {\n margin-right: 0.5em;\n }\n\n & h1 .show {\n font-size: 2rem;\n }\n\n & h2 .show {\n font-size: 1.5rem;\n }\n & h3 .show {\n font-size: 1.25rem;\n }\n\n & h4 .show {\n font-size: 1rem;\n }\n\n & h5 .show {\n font-size: 0.875rem;\n }\n\n & h6 .show {\n font-size: 0.85rem;\n }\n\n & .md-img-uri,\n & .md-img-text,\n & .md-link {\n font-size: 0;\n letter-spacing: 0;\n }\n\n & .md-html-inline {\n letter-spacing: 0;\n font-size: 0;\n background-color: ${(props) => props.theme.tipsBgColor};\n color: ${(props) => props.theme.labelFontColor};\n }\n\n .md-mark {\n color: ${(props) => props.theme.accentColor};\n font-size: 0;\n }\n\n & .inline-loading {\n width: min-content;\n height: min-content;\n display: inline-block;\n font-size: 16px;\n line-height: ${(props) => props.rootLineHeight};\n animation: loading-icon-spin 1s linear infinite;\n }\n\n .rme-copilot-suggestion {\n color: ${(props) => props.theme.labelFontColor};\n opacity: 0.6;\n white-space: pre-wrap;\n pointer-events: none;\n }\n\n @keyframes loading-icon-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n\n .html_tag {\n padding: 0.2em 0.4em;\n margin: 0;\n font-size: 0.85em;\n white-space: break-spaces;\n background-color: ${(props) => props.theme.codeBgColor};\n border-radius: 6px;\n }\n\n .show {\n font-size: ${(props) => props.rootFontSize};\n }\n\n .cm-editor.cm-focused {\n outline: none; // override the default outline\n }\n\n & .code-block__menu {\n position: relative;\n z-index: 1;\n }\n & .code-block__reference {\n position: absolute;\n top: 100%;\n width: 100%;\n font-size: 0.8em;\n background-color: transparent;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n\n &--active {\n border-bottom: none;\n }\n }\n\n & .code-block__languages {\n position: absolute;\n font-size: 1em;\n max-height: 180px;\n list-style: none;\n padding: 4px 0;\n margin: 6px 0 0;\n width: 200px;\n background-color: ${(props) => props.theme.bgColor};\n border: 1px solid ${(props) => props.theme.borderColor};\n overflow: auto;\n box-sizing: border-box;\n z-index: 100;\n border-radius: 8px;\n box-shadow:\n 0 1px 4px -2px ${(props) => props.theme.boxShadowColor},\n 0 2px 8px 0 ${(props) => props.theme.boxShadowColor},\n 0 8px 16px 4px ${(props) => props.theme.boxShadowColor};\n\n &__input {\n height: 100%;\n width: 200px;\n padding: 0 10px;\n outline: none;\n font-weight: 600;\n box-sizing: border-box;\n background-color: ${(props) => props.theme.bgColor};\n border: 1px solid ${(props) => props.theme.borderColor};\n }\n }\n\n & .code-block__language {\n padding: 0.4em 0.75em;\n font-size: 1em;\n cursor: pointer;\n transition: all 0.3s;\n border-radius: 6px;\n margin: 0 4px;\n display: flex;\n align-items: center;\n\n &--active {\n background-color: ${(props) => props.theme.borderColor};\n }\n\n &:hover {\n background-color: ${(props) => props.theme.tipsBgColor};\n }\n\n &--highlight {\n background-color: ${(props) => props.theme.tipsBgColor};\n }\n\n &--empty {\n color: ${(props) => props.theme.labelFontColor};\n cursor: default;\n }\n }\n\n .remirror-is-empty {\n color: ${(props) => props.theme.labelFontColor};\n }\n\n .node-hide {\n display: none !important;\n }\n\n .node-show {\n display: block;\n margin-bottom: 0;\n transition: all 0.3s;\n }\n\n .inline-node-show {\n display: inline-block;\n }\n\n .inline-input {\n position: relative;\n }\n\n .inline-input-src {\n display: inline;\n padding: 0.2em 0.4em;\n margin: 0;\n background-color: ${(props) => props.theme.codeBgColor};\n border-radius: 6px;\n br {\n display: none;\n }\n }\n\n .inline-input-preview {\n position: absolute;\n top: calc(100% + 0.5em);\n left: 50%;\n transform: translateX(-50%);\n width: max-content;\n padding: 0.5em 1em;\n max-width: 400px;\n border-radius: 0.2em;\n background-color: ${(props) => props.theme.bgColor};\n line-height: normal;\n z-index: 1;\n }\n\n .inline-input-render {\n line-height: normal;\n }\n\n .reference-def {\n .reference-definition-node {\n &__label {\n display: inline-block;\n outline: none;\n &::before {\n content: '[ ';\n margin: 0 0.2em;\n color: ${(props) => props.theme.labelFontColor};\n }\n &::after {\n content: ' ] : ';\n margin: 0 0.2em;\n color: ${(props) => props.theme.labelFontColor};\n }\n }\n\n &__href {\n display: inline-block;\n margin-right: 4px;\n outline: none;\n\n &:empty:before {\n content: 'href empty';\n font-style: italic;\n }\n }\n\n &__title {\n display: inline-block;\n outline: none;\n &:not(:empty):before {\n content: '\"';\n margin: 0 0.2em;\n color: ${(p) => p.theme.labelFontColor};\n }\n &:not(:empty):after {\n content: '\"';\n margin: 0 0.2em;\n color: ${(p) => p.theme.labelFontColor};\n }\n }\n }\n\n &.rme-block-focus {\n .reference-definition-node__title:empty::before {\n content: '\" title (optional) \"';\n color: ${(p) => p.theme.labelFontColor};\n }\n .reference-definition-node__title:empty::after {\n content: '';\n display: none;\n }\n }\n }\n\n .math-block-nodeview {\n position: relative;\n margin: 0;\n min-height: 40px;\n transition: all 0.3s;\n }\n\n .math-block-render {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 1em 0;\n border-radius: 0.2em;\n border: 1px solid transparent;\n\n &:hover {\n border-color: ${(props) => props.theme.borderColor};\n }\n }\n\n .math-block-preview {\n position: absolute;\n top: calc(100% + 0.5em);\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 1em 0;\n width: 100%;\n border: 1px solid ${(props) => props.theme.borderColor};\n border-radius: 0.2em;\n background-color: ${(props) => props.theme.bgColor};\n z-index: 1;\n }\n\n .html-node {\n position: relative;\n min-height: 40px;\n padding: 0;\n margin: 0;\n border: 1px solid transparent;\n\n &:hover {\n border-color: ${(props) => props.theme.borderColor};\n }\n }\n\n .html-src {\n outline: none;\n\n .cm-editor {\n margin: 0;\n }\n }\n\n .mermaid-node {\n position: relative;\n padding: 0;\n margin: 0;\n min-height: 40px;\n transition: all 0.3s;\n border: 1px solid transparent;\n\n &:hover {\n border-color: ${(props) => props.theme.borderColor};\n }\n }\n\n .mermaid-src {\n outline: none;\n\n .cm-editor {\n margin: 0;\n }\n }\n\n & .ProseMirror-focused {\n outline: none;\n }\n\n .img-input__container {\n display: flex;\n }\n\n .cm-render-node {\n position: relative;\n\n &:hover {\n .cm-render-node-label {\n opacity: 1;\n }\n }\n }\n\n .cm-render-node-label {\n position: absolute;\n top: 6px;\n right: 6px;\n padding: 4px 8px;\n display: flex;\n align-items: center;\n gap: 4px;\n opacity: 0;\n transition: all 0.3s;\n font-size: 12px;\n cursor: pointer;\n color: ${(props) => props.theme.labelFontColor};\n\n &-icon {\n font-size: 16px;\n }\n\n &:hover {\n background-color: ${(props) => props.theme.hoverColor};\n }\n }\n\n .node-enter {\n & .cm-render-node-label {\n opacity: 1;\n }\n }\n\n .cm-selectionMatch {\n background-color: ${(props) => props.theme.selectionMatchBgColor};\n }\n\n .cm-copy-btn {\n position: absolute;\n top: 6px;\n right: 6px;\n padding: 4px 8px;\n transition: all 0.3s;\n font-size: small;\n border-radius: ${(props) => props.theme.smallBorderRadius};\n cursor: pointer;\n z-index: 10;\n color: ${(props) => props.theme.labelFontColor};\n background: ${(props) => props.theme.hoverColor};\n }\n\n .cm-editor {\n height: auto;\n padding: 12px 0;\n margin-bottom: 1em;\n line-height: ${(props) => props.rootLineHeight};\n font-size: ${(props) => props.rootFontSize};\n font-family: ${(props) => props.theme.codemirrorFontFamily} !important;\n border-radius: ${(props) => props.theme.smallBorderRadius};\n background-color: ${(props) => props.theme.preBgColor};\n overflow: auto;\n\n &[data-front-matter='true'] {\n .cm-lineNumbers {\n display: none !important;\n }\n }\n .cm-line {\n padding: 2px 2px 2px 6px;\n font-size: 0.85em;\n font-family: ${(props) => props.theme.codemirrorFontFamily};\n\n span {\n line-height: ${(props) => props.rootLineHeight};\n }\n }\n\n .cm-content {\n background-color: ${(props) => props.theme.preBgColor};\n }\n .cm-scroller .cm-gutters {\n font-family: inherit;\n background-color: ${(props) => props.theme.preBgColor};\n }\n .cm-lineNumbers .cm-gutterElement {\n margin: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ${(props) => props.theme.preBgColor};\n }\n\n .cm-gutters {\n border: none;\n }\n\n .cm-gutter.cm-lineNumbers {\n color: ${(props) => props.theme.labelFontColor};\n }\n }\n\n p[data-placeholder] {\n &::before {\n position: absolute;\n pointer-events: none;\n color: #aaa;\n height: 0;\n font-style: italic;\n content: attr(data-placeholder);\n }\n }\n\n .remirror-editor {\n /* height: 100%; */\n outline: none;\n }\n\n .cm-editor {\n height: 100%;\n }\n\n .remirror-floating-popover {\n /* padding: var(--rmr-space-2); */\n padding: 0;\n border: none;\n max-height: calc(100vh - 56px);\n }\n\n .remirror-positioner {\n position: absolute;\n min-width: 1px;\n min-height: 1px;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: none;\n z-index: -1;\n }\n\n .remirror-positioner-widget {\n width: 0;\n height: 0;\n position: absolute;\n }\n\n .remirror-emoji-wrapper img {\n width: 1em;\n vertical-align: middle;\n background-color: transparent;\n }\n\n .rme-find-decoration,\n .ProseMirror-search-match,\n .cm-search-match {\n background-color: yellow;\n color: #222;\n }\n\n .rme-find-active-decoration,\n .ProseMirror-active-search-match,\n .cm-search-active {\n background-color: orange;\n color: #222;\n }\n\n & .html-image-node-view-wrapper,\n & .md-image-node-view-wrapper {\n display: inline-flex;\n padding: 0 2px;\n vertical-align: bottom;\n z-index: 1;\n }\n\n & .ai-block-node-view-wrapper {\n border-radius: ${(props) => props.theme.smallBorderRadius};\n }\n\n & .ProseMirror-selectednode {\n outline: 1px solid ${(props) => props.theme.nodeSelectedColor};\n border-radius: 6px;\n background-color: ${(props) => props.theme.nodeSelectedColor};\n }\n\n .rme-dragging {\n & .ProseMirror-selectednode {\n outline-color: transparent !important;\n background-color: transparent !important;\n }\n }\n\n .rme-drop-cursor {\n background-color: ${(props) => props.theme.accentColor} !important;\n }\n\n & .ProseMirror th.selectedCell,\n & .ProseMirror td.selectedCell {\n border-style: double;\n border-color: ${(props) => props.theme.tableSelectorCellBorderColor};\n background-color: ${(props) => props.theme.tableSelectorCellBgColor};\n }\n\n & .ProseMirror .tableWrapper {\n overflow: visible;\n }\n\n & .ProseMirror table {\n overflow: visible;\n\n .rme-table-selector {\n cursor: pointer;\n background-color: ${(props) => props.theme.tableSelectorBgColor};\n transition: background-color 0.2s ease-in-out;\n border-radius: 4px;\n\n &:hover {\n background-color: ${(props) => props.theme.tableSelectorBgColor};\n }\n }\n\n .rme-table-selector-highlight {\n outline-color: ${(props) => props.theme.tableSelectorHightBorderColor};\n background-color: ${(props) => props.theme.tableSelectorHightColor};\n\n &:hover {\n background-color: ${(props) => props.theme.tableSelectorHightHoverColor};\n }\n }\n\n .rme-table-body-selector {\n position: absolute;\n width: 18px;\n height: 18px;\n top: -22px;\n left: -22px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .rme-table-row-selector {\n position: absolute;\n width: 12px;\n top: 0;\n bottom: 0;\n left: -16px;\n border-radius: 2px;\n }\n\n .rme-table-column-selector {\n position: absolute;\n height: 12px;\n left: 0;\n right: 0;\n top: -16px;\n border-radius: 2px;\n }\n }\n\n /* Import flat list styles */\n ${FlatListStyles}\n\n ${(props) =>\n props.dark &&\n css`\n color-scheme: dark;\n `}\n`\n", "import { css } from 'styled-components'\n\n// Flat List Styles based on prosemirror-flat-list\nexport const FlatListStyles = css`\n --prosekit-list-bullet-icon: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='2.5' fill='currentColor'/%3E%3C/svg%3E\");\n --prosekit-list-toggle-open-icon: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpolygon points='8,10 12,14 16,10' fill='currentColor'/%3E%3C/svg%3E\");\n --prosekit-list-toggle-closed-icon: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpolygon points='10,8 14,12 10,16' fill='currentColor'/%3E%3C/svg%3E\");\n\n .prosemirror-flat-list {\n & {\n position: relative;\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n & > .list-marker {\n position: absolute;\n left: 0;\n width: 1.5em;\n width: 1lh;\n height: 1.5em;\n height: 1lh;\n text-align: center;\n }\n\n & > .list-content {\n margin-left: 1.5em;\n margin-left: 1lh;\n }\n\n &[data-list-kind='bullet'] > .list-marker,\n &[data-list-kind='toggle'] > .list-marker {\n background-color: currentColor;\n mask-position: center;\n mask-repeat: no-repeat;\n mask-size: contain;\n }\n\n &[data-list-kind='bullet'] {\n & > .list-marker {\n mask-image: var(--prosekit-list-bullet-icon);\n }\n }\n\n &[data-list-kind='toggle'] {\n & > .list-marker {\n mask-image: var(--prosekit-list-toggle-open-icon);\n }\n\n &[data-list-collapsable][data-list-collapsed] > .list-marker {\n mask-image: var(--prosekit-list-toggle-closed-icon);\n }\n }\n\n &[data-list-kind='ordered'] {\n /*\n Ensure that the counters in children don't escape, so that the sub lists\n won't affect the counter of the parent list.\n\n See also https://github.com/ocavue/prosemirror-flat-list/issues/23\n */\n & > * {\n contain: style;\n }\n\n &::before {\n position: absolute;\n right: calc(100% - 1.5em);\n right: calc(100% - 1lh);\n content: counter(prosemirror-flat-list-counter, decimal) '. ';\n font-variant-numeric: tabular-nums;\n }\n\n /*\n If the node has a custom order number, set the counter to that value.\n Otherwise, increment the counter normally.\n */\n &[data-list-order] {\n @supports (counter-set: prosemirror-flat-list-counter 1) {\n counter-set: prosemirror-flat-list-counter var(--prosemirror-flat-list-order);\n }\n\n @supports not (counter-set: prosemirror-flat-list-counter 1) {\n counter-reset: prosemirror-flat-list-counter var(--prosemirror-flat-list-order);\n }\n }\n\n &:not([data-list-order]) {\n counter-increment: prosemirror-flat-list-counter;\n }\n\n /*\n Reset the counter for the first list node in the sequence or when\n the previous sibling is not a list (paragraph break).\n */\n &:first-child {\n counter-reset: prosemirror-flat-list-counter;\n }\n }\n\n &[data-list-kind='task'] {\n & > .list-marker {\n width: 1.5em;\n height: auto;\n &,\n & * {\n /* Make sure that the checkbox is at the center */\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0;\n padding: 0;\n cursor: pointer;\n }\n }\n }\n\n &[data-list-kind='toggle'] {\n &[data-list-collapsable] > .list-marker {\n cursor: pointer;\n }\n &:not([data-list-collapsable]) > .list-marker {\n opacity: 40%;\n pointer-events: none;\n }\n\n /* If collapsed, hide the second and futher children */\n &[data-list-collapsable][data-list-collapsed] > .list-content > *:nth-child(n + 2) {\n display: none;\n }\n }\n }\n\n /*\n Reset counter when an ordered list follows a non-list element.\n This handles the case where there's a paragraph break (e.g., h3) between lists.\n */\n :not(.prosemirror-flat-list[data-list-kind='ordered']) + .prosemirror-flat-list[data-list-kind='ordered'] {\n counter-reset: prosemirror-flat-list-counter;\n\n &[data-list-order] {\n @supports (counter-set: prosemirror-flat-list-counter 1) {\n counter-set: prosemirror-flat-list-counter var(--prosemirror-flat-list-order);\n }\n\n @supports not (counter-set: prosemirror-flat-list-counter 1) {\n counter-increment: prosemirror-flat-list-counter var(--prosemirror-flat-list-order);\n }\n }\n }\n`\n", "import styled, { css } from 'styled-components'\n\ninterface WarpperProps {\n codeEditor?: boolean\n dark?: boolean\n /**\n * @default 15px\n */\n rootFontSize?: string\n /**\n * @default 1.6\n */\n rootLineHeight?: string\n}\n\nexport const SourceCodeThemeWrapper = styled.div.attrs<WarpperProps>((p) => ({\n rootFontSize: '15px',\n rootLineHeight: '1.6',\n ...p,\n}))`\n width: 100%;\n position: relative;\n white-space: pre-wrap;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n margin: 0;\n font-family: ${(props) => props.theme.fontFamily};\n font-size: ${(props) => props.rootFontSize};\n line-height: ${(props) => props.rootLineHeight};\n background-color: ${(props) => props.theme.bgColor};\n color: ${(props) => props.theme.primaryFontColor};\n word-wrap: break-word;\n padding-bottom: 1em;\n box-sizing: border-box;\n outline: none;\n\n .cm-selectionMatch {\n background-color: ${(props) => props.theme.selectionMatchBgColor};\n }\n\n .cm-editor {\n margin-bottom: 1em;\n line-height: ${(props) => props.rootLineHeight};\n font-size: ${(props) => props.rootFontSize};\n font-family: ${(props) => props.theme.codemirrorFontFamily} !important;\n\n &.cm-focused {\n outline: none;\n }\n\n .cm-line {\n padding: 2px 2px 2px 6px;\n\n span {\n line-height: ${(props) => props.rootLineHeight};\n }\n }\n\n .cm-content {\n background-color: ${(props) => props.theme.bgColor};\n }\n .cm-scroller .cm-gutters {\n background-color: ${(props) => props.theme.bgColor};\n }\n .cm-lineNumbers .cm-gutterElement {\n margin: 0;\n background-color: ${(props) => props.theme.bgColor};\n }\n\n .cm-scroller {\n font-family: inherit;\n }\n .cm-gutters {\n border: none;\n }\n\n .cm-gutter.cm-lineNumbers {\n color: ${(props) => props.theme.labelFontColor};\n }\n }\n\n .cm-search-match {\n background-color: yellow;\n color: #222;\n }\n\n .cm-search-active {\n background-color: orange;\n color: #222;\n }\n\n ${(props) =>\n props.dark &&\n css`\n color-scheme: dark;\n `}\n`\n", "import { codemirrorLight, codemirrorDark } from './codemirror'\nimport { styledDarkTheme } from './dark'\nimport { styledLightTheme } from './light'\n\nexport * from './WysiwygThemeWrapper'\nexport * from './SourceCodeThemeWrapper'\n\nexport const tableSelectorSize = 15\n\nexport const common = {\n lineHeightBase: '1.6',\n\n titleBarHeight: '30px',\n titleBarControlBtnWidth: '50px',\n\n fontBase: '15px',\n fontSm: '14px',\n fontXs: '12px',\n\n spaceXs: '4px',\n spaceSm: '8px',\n spaceBase: '10px',\n spaceL: '12px',\n spaceXl: '16px',\n\n smallBorderRadius: '4px',\n midBorderRadius: '8px',\n bigBorderRadius: '12px',\n\n black: '#74757D',\n white: '#E0E0E0',\n gray: '#C0C0C0',\n blue: '#0359D0',\n\n fontFamily: `'Open Sans', 'Clear Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif`,\n codemirrorFontFamily: `'DejaVu Sans Mono', 'Source Code Pro', 'Droid Sans Mono', Consolas, monospace`,\n}\n\nexport const darkTheme = {\n codemirrorTheme: codemirrorDark,\n styledConstants: { ...common, ...styledDarkTheme },\n}\n\nexport const lightTheme = {\n codemirrorTheme: codemirrorLight,\n styledConstants: { ...common, ...styledLightTheme },\n}\n", "/* eslint-disable react-hooks/rules-of-hooks */\nimport { prosemirrorNodeToHtml, type Extension, type RemirrorEventListenerProps } from '@rme-sdk/main'\nimport { Slice } from '@rme-sdk/pm'\nimport { type Node } from '@rme-sdk/pm/model'\nimport { forwardRef, memo, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react'\nimport {\n EditorViewType,\n HTMLAstNode,\n Preview,\n WysiwygToolbarProps,\n type CreateWysiwygDelegateOptions,\n type EditorContext,\n type EditorDelegate,\n} from '../..'\nimport SourceEditor, { createSourceCodeDelegate } from './SourceEditor'\nimport { useContextMounted } from './useContextMounted'\nimport WysiwygEditor, { createWysiwygDelegate } from './WysiwygEditor'\n// @ts-ignore\nimport HTML from 'html-parse-stringify'\nimport { nanoid } from 'nanoid'\nimport { ErrorBoundaryProps } from './ErrorBoundary'\nimport { ITextProps } from './WysiwygEditor/Text'\n\nexport const Editor = memo(\n forwardRef<EditorRef, EditorProps>((props, ref) => {\n const {\n initialType = EditorViewType.WYSIWYG,\n hooks = [],\n onContextMounted,\n ...otherProps\n } = props\n const [type, setType] = useState<EditorViewType>(initialType)\n const editorContextRef = useRef<EditorContext | null>(null)\n\n const resolveDelegate = useCallback(() => {\n if (otherProps.delegate) {\n return otherProps.delegate\n }\n if (type === EditorViewType.SOURCECODE) {\n return createSourceCodeDelegate()\n }\n return createWysiwygDelegate(otherProps.delegateOptions)\n }, [otherProps.delegate, otherProps.delegateOptions, type])\n\n const applyContentToView = useCallback(\n (nextContent: string) => {\n const view = editorContextRef.current?.view\n if (!view) {\n return\n }\n const delegate = resolveDelegate()\n const nextDoc = delegate.stringToDoc(nextContent)\n const tr = view.state.tr.replace(\n 0,\n view.state.doc.content.size,\n new Slice(nextDoc.content, 0, 0),\n )\n view.dispatch(tr)\n },\n [resolveDelegate],\n )\n\n const handleContextMounted = useCallback(\n (context: EditorContext) => {\n editorContextRef.current = context\n onContextMounted?.(context)\n },\n [onContextMounted],\n )\n\n useImperativeHandle(ref, () => ({\n getType: () => type,\n toggleType: (targetType: EditorViewType) => {\n setType(targetType)\n },\n setContent: (nextContent: string) => {\n if (nextContent === otherProps.content) {\n return\n }\n applyContentToView(nextContent)\n },\n exportHtml: async () => {\n return new Promise<string>((resolve) => {\n let targetDoc: Node | string = otherProps.content\n\n if (typeof targetDoc === 'string') {\n targetDoc = createWysiwygDelegate(otherProps.delegateOptions).stringToDoc(targetDoc)\n }\n\n const html = prosemirrorNodeToHtml(targetDoc)\n\n const fullAst = HTML.parse(html)\n\n const imageLoadTasks: Promise<void>[] = []\n const handleHtmlText = async (ast: HTMLAstNode[]) => {\n const handleNode = (node: HTMLAstNode) => {\n if (!node) {\n return\n }\n\n if (\n node.name === 'img' &&\n node.attrs?.src &&\n otherProps.delegateOptions?.handleViewImgSrcUrl\n ) {\n imageLoadTasks.push(\n (async () => {\n node.attrs.src = await otherProps.delegateOptions?.handleViewImgSrcUrl?.(\n node.attrs.src,\n )\n node.attrs.key = nanoid()\n })(),\n )\n }\n\n if (node.children) {\n handleHtmlText(node.children)\n }\n }\n\n for (let i = 0; i < ast.length; i++) {\n handleNode(ast[i])\n }\n }\n\n handleHtmlText(fullAst)\n Promise.all(imageLoadTasks)\n .then((res) => {\n resolve(HTML.stringify(fullAst))\n })\n .catch(() => {\n resolve(html)\n })\n })\n },\n }))\n\n const editorHooks = useMemo(() => {\n return [() => useContextMounted(handleContextMounted), ...hooks]\n }, [handleContextMounted, hooks])\n\n if (type === 'preview') {\n return <Preview doc={otherProps.content} delegateOptions={otherProps.delegateOptions} />\n }\n\n return type === 'sourceCode' ? (\n <SourceEditor {...otherProps} hooks={editorHooks} />\n ) : (\n <WysiwygEditor {...otherProps} hooks={editorHooks} />\n )\n }),\n)\n\nexport type EditorChangeEventParams = RemirrorEventListenerProps<Extension>\nexport type EditorChangeHandler = (params: EditorChangeEventParams) => void\n\nexport type EditorRef = {\n toggleType: (targetType: EditorViewType) => void\n getType: () => EditorViewType\n exportHtml: () => Promise<string>\n setContent: (nextContent: string) => void\n}\n\nexport const defaultStyleToken = {\n rootFontSize: '15px',\n rootLineHeight: '1.6',\n}\n\nexport interface EditorProps {\n initialType?: EditorViewType\n delegate?: EditorDelegate\n styleToken?: {\n /**\n * @default 15px\n */\n rootFontSize?: string\n /**\n * @default 1.6\n */\n rootLineHeight?: string\n }\n content: string\n wysiwygTextContainerProps?: ITextProps\n sourceCodeTextContainerProps?: ITextProps\n isTesting?: boolean\n editable?: boolean\n delegateOptions?: CreateWysiwygDelegateOptions\n onChange?: EditorChangeHandler\n hooks?: (() => void)[]\n markdownToolBar?: React.ReactNode[]\n wysiwygToolBar?: React.ReactNode[]\n wysiwygToolBarOptions?: {\n enable?: boolean\n compProps?: WysiwygToolbarProps\n }\n onContextMounted?: (context: EditorContext) => void\n errorHandler?: Pick<ErrorBoundaryProps, 'onError' | 'fallback'>\n}\n", "import { ProsemirrorDevTools } from '@rme-sdk/dev'\nimport type { Extension, RemirrorEventListener } from '@rme-sdk/main'\nimport { Remirror } from '@rme-sdk/react'\nimport React, { memo, useCallback, useMemo } from 'react'\nimport { createContextState } from '../../hooks/create-context-state'\nimport { SourceCodeThemeWrapper } from '../../theme'\nimport type { EditorDelegate } from '../../types'\nimport { defaultStyleToken, type EditorProps } from '../Editor'\nimport ErrorBoundary from '../ErrorBoundary'\nimport Text from './Text'\nimport { createSourceCodeDelegate } from './delegate'\n\ntype Context = Props\n\ntype Props = {\n markText: EditorDelegate\n} & Partial<EditorProps>\n\nconst [SourceEditorProvider, useSourceCodeEditor] = createContextState<Context, Props>(\n ({ props }) => {\n return {\n ...props,\n }\n },\n)\n\nconst SourceCodeEditorCore = memo(\n (props: {\n styleToken?: EditorProps['styleToken']\n textContainerProps?: EditorProps['sourceCodeTextContainerProps']\n markdownToolBar?: React.ReactNode[]\n onChange: RemirrorEventListener<Extension>\n errorHandler?: EditorProps['errorHandler']\n }) => {\n const { markdownToolBar, styleToken, textContainerProps = {} } = props\n const { content, markText, hooks, isTesting, editable } = useSourceCodeEditor()\n\n let initialCntent\n\n try {\n initialCntent = markText.stringToDoc(content!)\n } catch (error) {\n return <ErrorBoundary hasError error={error} {...(props.errorHandler || {})} />\n }\n\n return (\n <ErrorBoundary {...(props.errorHandler || {})}>\n <SourceCodeThemeWrapper {...styleToken}>\n <Remirror\n manager={markText.manager}\n initialContent={initialCntent}\n hooks={hooks}\n editable={editable}\n onChange={props.onChange}\n autoRender={false}\n >\n <Text {...textContainerProps} />\n {markdownToolBar || null}\n {isTesting ? <ProsemirrorDevTools /> : null}\n </Remirror>\n </SourceCodeThemeWrapper>\n </ErrorBoundary>\n )\n },\n)\n\n/**\n * The editor which is used to create the annotation. Supports formatting.\n */\nconst SourceEditor: React.FC<EditorProps> = (props) => {\n const {\n content,\n delegate,\n isTesting,\n hooks,\n markdownToolBar,\n styleToken = defaultStyleToken,\n sourceCodeTextContainerProps = {}\n } = props\n\n const editorDelegate = useMemo(() => delegate ?? createSourceCodeDelegate(), [delegate])\n\n const handleChange: RemirrorEventListener<Extension> = useCallback(\n (params) => {\n try {\n // const textContent = editorDelegate.docToString(params.state.doc)\n props.onChange?.(params)\n } catch (error) {\n console.error(error)\n }\n },\n [editorDelegate, props],\n )\n\n return (\n <SourceEditorProvider\n content={content}\n isTesting={isTesting}\n markText={editorDelegate}\n hooks={hooks}\n >\n <SourceCodeEditorCore\n styleToken={styleToken}\n textContainerProps={sourceCodeTextContainerProps}\n markdownToolBar={markdownToolBar}\n onChange={handleChange}\n errorHandler={props.errorHandler}\n />\n </SourceEditorProvider>\n )\n}\n\nexport default memo(SourceEditor)\n\nexport * from './delegate'\n", "/* eslint-disable @typescript-eslint/ban-types */\nimport { Dispatch, MutableRefObject, useEffect, useRef, useState } from 'react';\n\nimport { ContextSelector, createContextHook, CreateContextReturn } from './create-context-hook';\n\n/**\n * Create a context and provider with built in setters and getters.\n *\n * ```tsx\n * import { createContextState } from 'create-context-state';\n *\n * interface Context {\n * count: number;\n * increment: () => void;\n * decrement: () => void;\n * reset: () => void;\n * }\n *\n * interface Props {\n * defaultCount: number;\n * }\n *\n * const [CountProvider, useCount] = createContextState<Context, Props>(({ set, props }) => ({\n * count: previousContext?.count ?? props.defaultCount,\n * increment: () => set((state) => ({ count: state.count + 1 })),\n * decrement: () => set((state) => ({ count: state.count - 1 })),\n * reset: () => set({ count: props.defaultCount }),\n * }));\n *\n * const App = () => {\n * return (\n * <CountProvider>\n * <Counter />\n * </CountProvider>\n * );\n * };\n *\n * const Counter = () => {\n * const { count, increment, decrement, reset } = useCount();\n *\n * return (\n * <>\n * <h1>{count}</h1>\n * <button onClick={() => increment()}>+</button>\n * <button onClick={() => decrement()}>-</button>\n * <button onClick={() => reset()}>reset</button>\n * </>\n * );\n * };\n * ```\n *\n * @typeParam Context - The type of the context that is returned from the\n * `useContext` hook.\n * @typeParam Props - The optional props that are passed through to the\n * `Provider`.\n * @typeParam State - Additional state which can be captured via hooks.\n *\n * @param creator - A function used to create the desired context.\n * @param hook - An optional hook which can be used to provide additional state\n * to use in the creator function. Using hooks which rely on context will\n * constrain the returned `Provider` function to only be used in scenarios where\n * the the context is available. Make sure to memoize any exotic values (objects\n * and arrays) returned from the hook or your code will infinitely render.\n */\nexport function createContextState<Context extends object, Props extends object = object>(\n creator: ContextCreator<Context, Props, undefined>,\n): CreateContextReturn<Context, Props>;\nexport function createContextState<Context extends object, Props extends object, State>(\n creator: ContextCreator<Context, Props, State>,\n hook: NamedHook<Props, State>,\n): CreateContextReturn<Context, Props>;\nexport function createContextState<\n Context extends object,\n Props extends object = object,\n State = undefined,\n>(\n creator: ContextCreator<Context, Props, State>,\n hook?: NamedHook<Props, State>,\n): CreateContextReturn<Context, Props> {\n return createContextHook<Context, Props>((props) => {\n // Keep a ref to the context so that the `get` function can always be called\n // with the latest value.\n const contextRef = useRef<Context | null>(null);\n const setContextRef = useRef<Dispatch<React.SetStateAction<Context>>>(undefined);\n const state = hook?.(props) as State;\n\n const [context, setContext] = useState(() =>\n creator({\n get: createGet(contextRef),\n set: createSet(setContextRef),\n previousContext: undefined,\n props,\n state,\n }),\n );\n\n const dependencies = [...Object.values(props), state];\n\n // Update the context whenever the props are updated. This is only ever\n // called when props are updated.\n useEffect(() => {\n // Don't update if no props or hooks are defined for this hook creator.\n if (dependencies.length === 0) {\n return;\n }\n\n setContext((previousContext) =>\n creator({\n get: createGet(contextRef),\n set: createSet(setContextRef),\n previousContext,\n props,\n state,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n\n // Keep the refs updated on each render.\n contextRef.current = context;\n setContextRef.current = setContext;\n\n return context;\n });\n}\n\n/**\n * Create a get function which is used to get the current state within the\n * `context` creator.\n */\nfunction createGet<Context extends object>(\n ref: MutableRefObject<Context | null>,\n): GetContext<Context> {\n return (pathOrSelector?: unknown) => {\n if (!ref.current) {\n throw new Error(\n '`get` called outside of function scope. `get` can only be called within a function.',\n );\n }\n\n if (!pathOrSelector) {\n return ref.current;\n }\n\n if (typeof pathOrSelector !== 'function') {\n throw new TypeError(\n 'Invalid arguments passed to `useContextHook`. The hook must be called with zero arguments, a getter function or a path string.',\n );\n }\n\n return pathOrSelector(ref.current);\n };\n}\n\n/**\n * Create a `set` function which is used to set the context.\n */\nfunction createSet<Context extends object>(\n ref: MutableRefObject<Dispatch<React.SetStateAction<Context>> | undefined>,\n): SetContext<Context> {\n return (partial) => {\n if (!ref.current) {\n throw new Error(\n '`set` called outside of function scope. `set` can only be called within a function.',\n );\n }\n\n ref.current((context) => ({\n ...context,\n ...(typeof partial === 'function' ? partial(context) : partial),\n }));\n };\n}\n\nexport interface GetContext<Context extends object> {\n (): Context;\n <SelectedValue>(selector: ContextSelector<Context, SelectedValue>): SelectedValue;\n}\nexport type PartialContext<Context extends object> =\n | Partial<Context>\n | ((context: Context) => Partial<Context>);\nexport type SetContext<Context extends object> = (partial: PartialContext<Context>) => void;\n/**\n * Get the signature for the named hooks.\n */\nexport type NamedHook<Props extends object, State> = (props: Props) => State;\n\nexport interface ContextCreatorHelpers<\n Context extends object,\n Props extends object,\n State = undefined,\n> {\n /**\n * Get the context with a partial update.\n */\n get: GetContext<Context>;\n\n /**\n * Set the context with a partial update.\n */\n set: SetContext<Context>;\n\n /**\n * The latest value for the provided props.\n */\n props: Props;\n\n /**\n * The previous value for the generated context. This is `undefined` when\n * first rendered.\n */\n previousContext: Context | undefined;\n\n /**\n * The state provided by the custom hook.\n */\n state: State;\n}\n\nexport type ContextCreator<Context extends object, Props extends object, State> = (\n helpers: ContextCreatorHelpers<Context, Props, State>,\n) => Context;\n", "import React, {\n ComponentType,\n Context,\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react';\n\n/**\n * Create a `Provider` and `useContext` retriever with a custom hook.\n *\n * This can be used to create\n *\n * ```tsx\n * import { useState, useEffect } from 'react';\n * import { createContextHook } from 'create-context-state'\n *\n * interface Props {\n * defaultCount: number;\n * }\n *\n * interface Context {\n * count: number;\n * increment: () => void;\n * decrement: () => void;\n * reset: () => void;\n * }\n *\n * const [CountProvider, useCountStore] = createContextHook<Context, Props>((props) => {\n * const { defaultCount } = props;\n *\n * const [context, setContext] = useState(() => {\n * return {\n * count: defaultCount,\n * increment: () => setContext(value => ({...previous, count: previous.count + 1 })),\n * decrement: () => setContext(previous => ({...previous, count: previous.count - 1 })),\n * reset: () => setContext(previous => ({...previous, count: defaultCount })),\n * }\n * });\n *\n * useEffect(() => {\n * setContext((previousContext) => ({\n * ...previousContext,\n * count: defaultCount,\n * reset: () => setContext(previous => ({...previous, count: defaultCount })),\n * }));\n * }, [defaultCount])\n *\n * return context;\n * })\n *\n * const App = () => {\n * return (\n * <CountProvider defaultCount={100}>\n * <InnerApp />\n * </FooProvider>\n * )\n * }\n *\n * const InnerApp = () => {\n * const { count, increment, decrement, reset } = useCountStore()\n *\n * return (\n * <div>\n * <h1>{count}</h1>\n * <button onClick={increment}>+</button>\n * <button onClick={decrement}>-</button>\n * <button onClick={reset}>reset</button>\n * </div>\n * )\n * }\n * ```\n *\n * @typeParam Context - The type of the context that is returned from the\n * `useContext` hook.\n * @typeParam Props - The optional props that are passed through to the `Provider`.\n */\nexport function createContextHook<\n Ctx extends object,\n Props extends PropsWithChildren<object> = PropsWithChildren<object>,\n>(useHook: UseHook<Ctx, Props>): CreateContextReturn<Ctx, Props> {\n const DefaultContext = createContext<Ctx | null>(null);\n const useHookContext = contextHookFactory(DefaultContext);\n\n const Provider: FC<Props> = (props) => {\n const context = useHook(props);\n\n return <DefaultContext.Provider value={context}>{props.children}</DefaultContext.Provider>;\n };\n\n return [Provider, useHookContext, DefaultContext];\n}\n\nexport type CreateContextReturn<Ctx extends object, Props extends object = object> = [\n Provider: ComponentType<PropsWithChildren<Props>>,\n hook: ContextHook<Ctx>,\n DefaultContext: Context<Ctx | null>,\n];\n\ntype UseHook<Context extends object, Props extends object = object> = (props: Props) => Context;\n\nexport function contextHookFactory<Ctx extends object>(\n DefaultContext: Context<Ctx | null>,\n): ContextHook<Ctx> {\n return (selector?: unknown, equalityCheck?: EqualityChecker<Ctx>) => {\n const context = useContext(DefaultContext);\n const previousContext = usePrevious(context);\n\n if (!context) {\n throw new Error(\n '`useContextHook` must be placed inside the `Provider` returned by the `createContextState` method',\n );\n }\n\n if (!selector) {\n return context;\n }\n\n if (typeof selector !== 'function') {\n throw new TypeError(\n 'invalid arguments passed to `useContextHook`. This hook must be called with zero arguments, a getter function or a path string.',\n );\n }\n\n const value = selector(context);\n\n if (!previousContext || !equalityCheck) {\n return value;\n }\n\n const previousValue = selector(previousContext);\n\n return equalityCheck(previousValue, value) ? previousValue : value;\n };\n}\n\nexport type ContextSelector<Ctx extends object, SelectedValue> = (state: Ctx) => SelectedValue;\nexport type EqualityChecker<SelectedValue> = (\n selectedValue: SelectedValue,\n newSelectedValue: unknown,\n) => boolean;\n\nexport interface ContextHook<Ctx extends object> {\n (): Ctx;\n <SelectedValue>(\n selector: ContextSelector<Ctx, SelectedValue>,\n equalityFn?: EqualityChecker<SelectedValue>,\n ): SelectedValue;\n}\n\n/**\n * Split but don't allow empty string.\n */\nexport type Split<\n Input extends string,\n Splitter extends string,\n> = Input extends `${infer T}${Splitter}${infer Rest}`\n ? '' extends T\n ? [...Split<Rest, Splitter>]\n : [T, ...Split<Rest, Splitter>]\n : [Input];\n\nexport type SplitEmpty<\n Input extends string,\n Splitter extends string,\n> = Input extends `${infer T}${Splitter}${infer Rest}` ? [T, ...Split<Rest, Splitter>] : [Input];\n\nfunction usePrevious<T>(value: T) {\n const ref = useRef<T>(null);\n useIsomorphicLayoutEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n\nexport const useIsomorphicLayoutEffect =\n typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n", "import type { ErrorInfo, PropsWithChildren } from 'react'\nimport React from 'react'\nimport styled from 'styled-components'\n\nconst Title = styled.h1`\n color: ${({ theme }) => theme.dangerColor};\n`\n\nconst ErrorBlock = styled.div`\n display: grid;\n gap: 12px;\n`\n\nconst DetailBlock = styled.div`\n display: grid;\n gap: 8px;\n`\n\nconst Label = styled.div`\n font-weight: 600;\n`\n\nconst CodeBlock = styled.pre`\n background: ${({ theme }) => theme.preBgColor};\n border-radius: 6px;\n padding: 12px;\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n`\n\nexport interface ErrorBoundaryProps {\n hasError?: boolean\n error?: unknown\n fallback?: React.ComponentType<{ error: Error; errorInfo?: ErrorInfo }>\n onError?: (params: { error: Error; errorInfo?: ErrorInfo }) => void\n}\n\nconst DefaultFallback = (props: { error: Error; errorInfo?: ErrorInfo }) => {\n const errorName = props.error?.name || 'Error'\n const errorMessage = props.error?.message || String(props.error)\n const errorStack = props.error?.stack\n const componentStack = props.errorInfo?.componentStack\n\n return (\n <ErrorBlock>\n <Title>Sorry, something went wrong!</Title>\n <DetailBlock>\n <Label>Message</Label>\n <CodeBlock>{`${errorName}: ${errorMessage}`}</CodeBlock>\n </DetailBlock>\n {errorStack ? (\n <DetailBlock>\n <Label>Stack</Label>\n <CodeBlock>{errorStack}</CodeBlock>\n </DetailBlock>\n ) : null}\n {componentStack ? (\n <DetailBlock>\n <Label>Component Stack</Label>\n <CodeBlock>{componentStack.trim()}</CodeBlock>\n </DetailBlock>\n ) : null}\n </ErrorBlock>\n )\n}\n\nclass ErrorBoundary extends React.Component<\n PropsWithChildren<ErrorBoundaryProps>,\n { hasError: boolean; error?: Error; errorInfo?: ErrorInfo }\n> {\n constructor(props: PropsWithChildren<ErrorBoundaryProps>) {\n super(props)\n this.state = { hasError: this.props.hasError ?? false }\n }\n\n static getDerivedStateFromError(error: Error) {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error('[ErrorBoundary]', error, errorInfo)\n this.setState({ errorInfo })\n }\n\n render() {\n const Fallback = this.props.fallback ?? DefaultFallback\n\n if (this.state.hasError) {\n const error = (this.props.error as Error) ?? this.state.error ?? new Error('Unknown error')\n console.error(error)\n this.props.onError?.({ error, errorInfo: this.state.errorInfo })\n\n return <Fallback error={error} errorInfo={this.state.errorInfo} />\n }\n\n return this.props.children\n }\n}\n\nexport default ErrorBoundary\n", "import { useRemirrorContext } from '@rme-sdk/react'\nimport type { CSSProperties, FC } from 'react'\nimport React, { memo } from 'react'\n\nexport interface ITextProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode\n className?: string\n style?: CSSProperties\n}\n\nconst Text: FC<ITextProps> = memo(({ children, ...props }) => {\n const { getRootProps } = useRemirrorContext()\n\n const { key, ...rootProps } = getRootProps()\n\n const style = Object.assign(\n {\n position: 'relative',\n },\n props.style,\n )\n\n return (\n <div {...rootProps} spellCheck={false} {...props} style={style}>\n {children}\n </div>\n )\n})\n\nexport default Text\n", "import { markdown } from '@codemirror/lang-markdown'\nimport { CountExtension } from '@rme-sdk/extension-count'\nimport type { RemirrorManager } from '@rme-sdk/main'\nimport { DocExtension } from '@rme-sdk/main/extensions'\nimport { createReactManager } from '@rme-sdk/react'\nimport { MfCodemirrorView } from '../../codemirror/codemirror'\nimport { LineCodeMirrorExtension } from '../../extensions/CodeMirror/codemirror-extension'\nimport { CommandName } from '../../extensions/CodeMirror/keymap'\nimport { basicSetup } from '../../extensions/CodeMirror/setup'\nimport type { DocToString, EditorDelegate, StringToDoc } from '../../types'\nimport { ClipboardReadFunction } from '../../utils/clipboard-read'\nimport { FindExtension } from '@/editor/extensions/Find/find-extension'\n\ntype CreateSourceCodeManagerOptions = {\n language?: string\n onCodemirrorViewLoad: (cm: MfCodemirrorView) => void\n /**\n * Override default keyboard shortcuts\n * @example\n * { toggleStrong: 'mod-shift-b', toggleEmphasis: 'ctrl-i' }\n */\n overrideShortcutMap?: Partial<Record<CommandName, string>>\n\n /**\n * Disable all built-in shortcuts\n * @default false\n */\n disableAllBuildInShortcuts?: boolean\n\n clipboardReadFunction?: ClipboardReadFunction\n}\nexport function createSourceCodeManager(\n options?: CreateSourceCodeManagerOptions,\n): RemirrorManager<any> {\n return createReactManager(() => [\n new CountExtension({}),\n new DocExtension({ content: 'codeMirror' }),\n new FindExtension({}),\n new LineCodeMirrorExtension({\n hideDecoration: true,\n showCopyButton: false,\n extensions: [basicSetup, markdown()],\n onCodemirrorViewLoad: options?.onCodemirrorViewLoad,\n commandKeymapOptions: {\n overrideShortcutMap: options?.overrideShortcutMap,\n disableAllBuildInShortcuts: options?.disableAllBuildInShortcuts,\n clipboardReadFunction: options?.clipboardReadFunction,\n }\n }),\n ])\n}\n\nexport const createSourceCodeDelegate = (\n options?: CreateSourceCodeManagerOptions,\n): EditorDelegate<any> => {\n const manager = createSourceCodeManager(options)\n\n const stringToDoc: StringToDoc = (content: string) => {\n const schema = manager.schema\n const attrs = { language: options?.language || 'markdown' }\n const child = content ? schema.text(content) : undefined\n return schema.nodes.doc.create({}, schema.nodes.codeMirror.create(attrs, child))\n }\n\n const docToString: DocToString = (doc) => {\n return doc.textContent\n }\n\n return { manager, stringToDoc, docToString, view: 'SourceCode' }\n}\n", "import type Token from 'markdown-it/lib/token.mjs'\n\nimport { languages } from '@codemirror/language-data'\nimport { placeholder } from '@codemirror/view'\nimport type {\n ApplySchemaAttributes,\n CommandFunction,\n EditorView,\n GetAttributes,\n InputRule,\n KeyBindingProps,\n NodeExtensionSpec,\n NodeSpecOverride,\n NodeViewMethod,\n ProsemirrorNode\n} from '@rme-sdk/core'\nimport {\n extension,\n findParentNodeOfType,\n isElementDomNode,\n isEqual,\n isTextSelection,\n NodeExtension,\n nodeInputRule,\n setBlockType,\n} from '@rme-sdk/core'\nimport type { EditorState } from '@rme-sdk/main'\nimport { TextSelection } from '@rme-sdk/pm/state'\nimport { Decoration, DecorationSet } from '@rme-sdk/pm/view'\nimport { t } from 'i18next'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport createCodeMirrorMenuDecorations from './codemirror-lang-menu'\nimport { CodeMirror6NodeView } from './codemirror-node-view'\nimport type { CodeMirrorExtensionAttributes, CodeMirrorExtensionOptions } from './codemirror-types'\n\nexport const fakeIndentedLanguage = 'indent-code'\n\n@extension<CodeMirrorExtensionOptions>({\n defaultOptions: {\n hideDecoration: false,\n extensions: null,\n toggleName: 'paragraph',\n useProsemirrorHistoryKey: false,\n onCodemirrorViewLoad: () => {},\n showCopyButton: true,\n },\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class LineCodeMirrorExtension extends NodeExtension<CodeMirrorExtensionOptions> {\n private nodeview: CodeMirror6NodeView | undefined\n\n get name() {\n return 'codeMirror' as const\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n group: 'block',\n content: 'text*',\n marks: '',\n defining: true,\n ...override,\n code: true,\n selectable: true,\n attrs: {\n ...extra.defaults(),\n 'front-matter': { default: false },\n language: { default: '' },\n },\n parseDOM: [\n {\n tag: 'pre',\n getAttrs: (node) => (isElementDomNode(node) ? extra.parse(node) : false),\n },\n ...(override.parseDOM ?? []),\n ],\n toDOM() {\n return ['pre', ['code', 0]]\n },\n isolating: true,\n }\n }\n\n createNodeViews(): NodeViewMethod {\n return (node: ProsemirrorNode, view: EditorView, getPos: () => number | undefined) => {\n const baseExtensions = this.options.extensions ?? []\n if (node.attrs['front-matter'] === true) {\n baseExtensions.push(placeholder(t('codemirror.frontMatterPlaceholder')))\n }\n this.nodeview = new CodeMirror6NodeView({\n node,\n view,\n getPos: getPos as () => number,\n extensions: baseExtensions,\n toggleName: this.options.toggleName,\n options: {\n useProsemirrorHistoryKey: this.options.useProsemirrorHistoryKey,\n copyButton: {\n enabled: this.options.showCopyButton,\n customCopyFunction: this.options.customCopyFunction,\n },\n commandKeymapOptions: this.options.commandKeymapOptions,\n },\n onCodemirrorViewLoad: this.options.onCodemirrorViewLoad,\n })\n\n if (node.attrs['front-matter'] === true) {\n this.nodeview?.dom?.setAttribute('data-front-matter', 'true')\n }\n\n return this.nodeview\n }\n }\n\n /**\n * Create an input rule that listens converts the code fence into a code block\n * when typing triple back tick followed by a space.\n */\n createInputRules(): InputRule[] {\n const frontMatterRegexp = /^---$/\n const regexp = /^```(?!mermaid)(\\S*) $/\n const getFrontMatterAttributes: GetAttributes = () => {\n return { 'front-matter': true, language: 'yaml' }\n }\n\n const getAttributes: GetAttributes = (match) => {\n const language = match[1] ?? ''\n return { language }\n }\n\n return [\n nodeInputRule({\n regexp: frontMatterRegexp,\n type: this.type,\n beforeDispatch: ({ tr, start }) => {\n const $pos = tr.doc.resolve(start)\n tr.setSelection(TextSelection.near($pos))\n },\n getAttributes: getFrontMatterAttributes,\n shouldSkip: ({ state, start }) => {\n const $pos = state.doc.resolve(start)\n return $pos.index(0) !== 0\n },\n }),\n nodeInputRule({\n regexp,\n type: this.type,\n beforeDispatch: ({ tr, start }) => {\n const $pos = tr.doc.resolve(start)\n tr.setSelection(TextSelection.near($pos))\n },\n getAttributes: getAttributes,\n }),\n ]\n }\n\n enterKey = ({ dispatch, tr }: KeyBindingProps): boolean => {\n if (!(isTextSelection(tr.selection) && tr.selection.empty)) {\n return false\n }\n\n const { nodeBefore, parent } = tr.selection.$anchor\n\n if (!nodeBefore?.isText || !parent.type.isTextblock) {\n return false\n }\n\n const regex = /^```(\\S*)?$/\n const { text, nodeSize } = nodeBefore\n const { textContent } = parent\n\n if (!text) {\n return false\n }\n\n const matchesNodeBefore = text.match(regex)\n const matchesParent = textContent.match(regex)\n\n if (!matchesNodeBefore || !matchesParent) {\n return false\n }\n\n const language = matchesNodeBefore[1] ?? ''\n\n const pos = tr.selection.$from.before()\n const end = pos + nodeSize + 1 // +1 to account for the extra pos a node takes up\n tr.replaceWith(pos, end, this.type.create({ language }))\n\n // Set the selection to within the codeBlock\n tr.setSelection(TextSelection.near(tr.doc.resolve(pos + 1)))\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n }\n /**\n * Creates a CodeMirror block at the current position.\n *\n * ```ts\n * commands.createCodeMirror({ language: 'js' });\n * ```\n */\n createCodeMirror = (attributes: CodeMirrorExtensionAttributes): CommandFunction => {\n return setBlockType(this.type, attributes)\n }\n\n /**\n * Update the code block at the current position. Primarily this is used\n * to change the language.\n *\n * ```ts\n * if (commands.updateCodeMirror.isEnabled()) {\n * commands.updateCodeMirror({ language: 'markdown' });\n * }\n * ```\n */\n updateCodeMirror = (attributes: CodeMirrorExtensionAttributes): CommandFunction => {\n const type = this.type\n return ({ state, dispatch, tr }) => {\n const parent = findParentNodeOfType({ types: type, selection: state.selection })\n\n if (!parent || isEqual(attributes, parent.node.attrs)) {\n // Do nothing since the attrs are the same\n return false\n }\n\n tr.setNodeMarkup(parent.pos, type, { ...parent.node.attrs, ...attributes })\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n }\n }\n\n createCommands() {\n return {\n createCodeMirror: this.createCodeMirror,\n updateCodeMirror: this.updateCodeMirror,\n }\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'fence',\n node: this.name,\n hasOpenClose: false,\n getAttrs: (tok: Token) => {\n const language = tok.info\n return {\n language,\n 'front-matter': tok.attrGet('front-matter'),\n }\n },\n },\n {\n type: ParserRuleType.block,\n token: 'code_block',\n node: this.name,\n hasOpenClose: false,\n getAttrs: () => {\n return {\n language: fakeIndentedLanguage,\n }\n },\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n if (node.attrs['front-matter'] === true) {\n state.write('---\\n')\n state.write(node.textContent)\n if (!node.textContent.endsWith('\\n')) {\n state.write('\\n')\n }\n state.write('---\\n')\n return\n } else if (node.attrs.language !== fakeIndentedLanguage) {\n state.write('```' + ((node.attrs.language as string) || '') + '\\n')\n state.text(node.textContent, false)\n state.text('\\n')\n state.write('```')\n state.closeBlock(node)\n } else {\n state.wrapBlock(' ', ' ', node, () => state.renderContent(node))\n state.closeBlock(node)\n }\n state.ensureNewLine()\n }\n\n createDecorations(state: EditorState): DecorationSet {\n if (this.options.hideDecoration) {\n return DecorationSet.empty\n }\n\n const found = findParentNodeOfType({ types: this.type, selection: state.selection })\n if (!found || found.node.attrs['front-matter'] === true) {\n return DecorationSet.empty\n }\n\n if (!languages || languages.length <= 1) {\n return DecorationSet.empty\n }\n\n const { create, destroy } = createCodeMirrorMenuDecorations(found)\n\n const deco = Decoration.widget(found.pos, create, {\n ignoreSelection: true,\n stopEvent: () => true,\n key: 'language-menu',\n destroy,\n })\n\n return DecorationSet.create(state.doc, [deco])\n }\n}\n", "import type { Node, NodeType, Schema } from '@rme-sdk/pm/model'\nimport { Mark } from '@rme-sdk/pm/model'\nimport MarkdownIt from 'markdown-it'\n\nimport MarkdownItListCheckbox from './markdown-it-list-checkbox'\nimport MarkdownItReferenceImage from './markdown-it-reference-image'\n\nimport { Token } from 'markdown-it/index.js'\nimport { front_matter_plugin } from './markdown-it-front-matter'\nimport MarkdownItHtmlInline from './markdown-it-html-inline'\nimport MarkdownItImage from './markdown-it-image'\nimport MarkdownItMath from './markdown-it-math'\nimport MarkdownItMermaid from './markdown-it-mermaid'\nimport MarkdownItReferenceDef from './markdown-it-reference-def'\nimport type {\n BlockParserRule,\n ContextParserRule,\n InlineParserRule,\n ParserRule,\n ParserRuleContext,\n TextParserRule,\n} from './parser-type'\nimport { ParserRuleType } from './parser-type'\n\ninterface StackItem {\n type: NodeType\n attrs?: Record<string, any>\n content: Node[]\n}\n\nexport type TokenHandler = (state: MarkdownParseState, tok: Token) => void\nexport type TokenHandlers = Record<string, TokenHandler>\n\nexport class UnknowMarkdownItTokenError extends Error {\n constructor(\n public tokenType: string,\n public supportedTokenTypes: string[],\n ) {\n super(`MarkdownIt token type '${tokenType}' not supported. `)\n this.tokenType = tokenType\n }\n}\n\nexport class MarkdownParseState {\n private schema: Schema\n private marks: readonly Mark[]\n private tokenHandlers: TokenHandlers\n private contextStack: ParserRuleContext[]\n private contextTokenStack: Token[]\n\n public stack: StackItem[]\n\n public constructor(schema: Schema, tokenHandlers: TokenHandlers) {\n this.schema = schema\n this.stack = [{ type: schema.topNodeType, content: [] }]\n this.contextStack = []\n this.contextTokenStack = []\n this.marks = Mark.none\n this.tokenHandlers = tokenHandlers\n }\n\n public top(): StackItem {\n return this.stack[this.stack.length - 1]\n }\n\n public push(node: Node): void {\n if (this.stack.length) this.top().content.push(node)\n }\n\n // Adds the given text to the current position in the document,\n // using the current marks as styling.\n public addText(text: string): void {\n if (!text) return\n\n const top = this.top()\n const nodes = top.content\n const last: Node | undefined = nodes[nodes.length - 1]\n const node = this.schema.text(text, this.marks)\n let merged: Node | undefined\n if (last && (merged = this.mergeTextNode(last, node))) nodes[nodes.length - 1] = merged\n else nodes.push(node)\n }\n\n private mergeTextNode(a: Node, b: Node): Node | undefined {\n if (a.isText && b.isText && Mark.sameSet(a.marks, b.marks)) {\n const text: string = (a.text || '') + (b.text || '')\n return a.type.schema.text(text, a.marks)\n }\n }\n\n // Adds the given mark to the set of active marks.\n public openMark(mark: Mark): void {\n this.marks = mark.addToSet(this.marks)\n }\n\n // Removes the given mark from the set of active marks.\n public closeMark(mark: Mark): void {\n this.marks = mark.removeFromSet(this.marks)\n }\n\n public parseTokens(toks: Token[]): void {\n for (const tok of toks) {\n const handler = this.tokenHandlers[tok.type]\n if (!handler) return\n if (!handler) throw new UnknowMarkdownItTokenError(tok.type, Object.keys(this.tokenHandlers))\n\n // \u9012\u5F52\u5904\u7406inline token\u7684children\n if (tok.type === 'inline' && tok.children && tok.children.length > 0) {\n this.parseTokens(tok.children)\n } else {\n handler(this, tok)\n }\n }\n }\n\n // Add a node at the current position.\n public addNode(type: NodeType, attrs?: Record<string, any>, content?: Node[]): Node {\n const node = type.createAndFill(attrs, content, this.marks)\n if (!node) {\n throw new Error(`unexpected error: node is empty while creating ${type.name} node`)\n }\n this.push(node)\n return node\n }\n\n // Wrap subsequent content in a node of the given type.\n public openNode(type: NodeType, attrs?: Record<string, any>): void {\n this.stack.push({ type: type, attrs: attrs, content: [] })\n }\n\n // Close and return the node that is currently on top of the stack.\n public closeNode(): Node {\n if (this.marks.length) this.marks = Mark.none\n const info = this.stack.pop()\n if (!info) {\n throw new Error('unexpected error: info is empty')\n }\n return this.addNode(info.type, info.attrs, info.content)\n }\n\n public openContext(context: ParserRuleContext, token: Token): void {\n this.contextStack.push(context)\n this.contextTokenStack.push(token)\n }\n\n public closeContext() {\n this.contextStack.pop()\n this.contextTokenStack.pop()\n }\n\n public closeContextToken(): Token | undefined {\n return this.contextTokenStack.pop()\n }\n\n public topContext(): ParserRuleContext | undefined {\n return this.contextStack[this.contextStack.length - 1]\n }\n\n public topContextToken(): Token | undefined {\n return this.contextTokenStack[this.contextTokenStack.length - 1]\n }\n}\n\nfunction withoutTrailingNewline(str: string): string {\n return str.endsWith('\\n') ? str.slice(0, str.length - 1) : str\n}\n\nfunction buildBlockTokenHandler(\n parserRule: BlockParserRule,\n handlers: TokenHandlers,\n schema: Schema,\n): void {\n const nodeType: NodeType = schema.nodes[parserRule.node]\n if (nodeType === undefined) {\n throw new RangeError(`Can't find block type '${parserRule.node}'`)\n }\n if (parserRule.hasOpenClose) {\n handlers[parserRule.token + '_open'] = (state: MarkdownParseState, tok: Token) => {\n const attrs = parserRule.getAttrs ? parserRule.getAttrs(tok) : undefined\n state.openNode(nodeType, attrs)\n }\n handlers[parserRule.token + '_close'] = (state: MarkdownParseState) => {\n state.closeNode()\n }\n } else {\n handlers[parserRule.token] = (state: MarkdownParseState, tok: Token) => {\n const attrs = parserRule.getAttrs ? parserRule.getAttrs(tok) : undefined\n state.openNode(nodeType, attrs)\n state.addText(withoutTrailingNewline(tok.content))\n state.closeNode()\n }\n }\n}\n\nfunction buildContextTokenHandler(parserRule: ContextParserRule, handlers: TokenHandlers): void {\n handlers[parserRule.token + '_open'] = (state: MarkdownParseState, tok: Token) => {\n state.openContext(parserRule.context, tok)\n }\n handlers[parserRule.token + '_close'] = (state: MarkdownParseState) => {\n state.closeContext()\n }\n}\n\nfunction buildInlineNodeHandler(\n parserRule: InlineParserRule,\n handlers: TokenHandlers,\n schema: Schema,\n) {\n const nodeType: NodeType = schema.nodes[parserRule.token]\n if (nodeType === undefined) {\n throw new RangeError(`Can't find inline type '${parserRule.token}'`)\n }\n handlers[parserRule.token] = (state: MarkdownParseState, tok: Token) => {\n const attrs = (tok.attrs as Record<string, any>) || null\n\n let content = undefined\n if (tok.content) {\n content = schema.text(tok.content)\n }\n const inlinNode = schema.nodes[tok.type]?.createAndFill(attrs, content)\n if (inlinNode) {\n state.push(inlinNode)\n }\n }\n}\n\nfunction buildTextTokenHandler(parserRule: TextParserRule, handlers: TokenHandlers): void {\n handlers[parserRule.token] = (state: MarkdownParseState, tok: Token) => {\n state.addText(parserRule.getText(tok))\n }\n}\n\nfunction buildTokenHandlers(schema: Schema, parserRules: ParserRule[]): TokenHandlers {\n const handlers: TokenHandlers = {}\n for (const parserRule of parserRules) {\n switch (parserRule.type) {\n case ParserRuleType.text:\n buildTextTokenHandler(parserRule, handlers)\n break\n case ParserRuleType.block:\n buildBlockTokenHandler(parserRule, handlers, schema)\n break\n case ParserRuleType.context:\n buildContextTokenHandler(parserRule, handlers)\n break\n case ParserRuleType.ignore:\n handlers[parserRule.token] = () => {}\n break\n case ParserRuleType.inline:\n buildInlineNodeHandler(parserRule, handlers, schema)\n break\n case ParserRuleType.free:\n handlers[parserRule.token] = parserRule.handler\n break\n default:\n throw new Error(`unknown parser rule type`)\n }\n }\n\n return handlers\n}\n\nexport class MarkdownParser {\n private schema: Schema\n private tokenizer: MarkdownIt\n private tokenHandlers: TokenHandlers\n\n public constructor(schema: Schema, parserRules: ParserRule[]) {\n this.schema = schema\n this.tokenizer = MarkdownIt('commonmark', { html: true })\n .disable(['emphasis', 'autolink', 'backticks', 'entity', 'reference', 'link'])\n .enable(['table'])\n .use(front_matter_plugin, function (res) {\n console.log('Front matter content:', res)\n })\n .use(MarkdownItHtmlInline)\n .use(MarkdownItListCheckbox)\n .use(MarkdownItMermaid)\n .use(MarkdownItMath)\n .use(MarkdownItImage)\n .use(MarkdownItReferenceImage)\n .use(MarkdownItReferenceDef)\n\n // Custom validateLink function to allow data:application/octet-stream URIs\n this.tokenizer.validateLink = (url: string) => {\n // Allow all data: URIs (including application/octet-stream)\n if (url.startsWith('data:')) {\n return true\n }\n // Use default validation for other URLs\n return MarkdownIt().validateLink(url)\n }\n\n this.tokenizer.normalizeLink = (url: string) => {\n // Prevent normalization that could alter data:application/octet-stream URIs\n return url\n }\n\n this.tokenHandlers = buildTokenHandlers(schema, parserRules)\n }\n\n public parse(text: string): Node {\n const state = new MarkdownParseState(this.schema, this.tokenHandlers)\n let doc: Node\n const mdTokens: Token[] = this.tokenizer.parse(text, {})\n state.parseTokens(mdTokens)\n do {\n doc = state.closeNode()\n } while (state.stack.length)\n return doc\n }\n}\n", "import type MarkdownIt from 'markdown-it'\nimport { Core, StateCore } from 'markdown-it/index.js'\nimport Token from 'markdown-it/lib/token.mjs'\n\nfunction isBulletListItemToken(t: Token) {\n return t.type === 'list_item_open' && ['*', '-'].includes(t.markup)\n}\nfunction isParagraphOpenToken(t: Token) {\n return t.type === 'paragraph_open'\n}\nfunction isInlineToken(t: Token) {\n return t.type === 'inline'\n}\n\nconst rule: Core.RuleCore = (state: StateCore) => {\n let edited = false\n const tokens = state.tokens\n const tokensLength = tokens.length\n for (let i = tokensLength - 3; i >= 0; i--) {\n const curToken = tokens[i]\n if (curToken.type === 'ordered_list_open') {\n curToken.attrs?.some(([name, value]) => {\n if (name === 'start') {\n const startNum = parseInt(value, 10)\n if (!isNaN(startNum) && startNum >= 1) {\n // \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u7684 order \u5C5E\u6027\u4EE5\u4F9B\u540E\u7EED\u5904\u7406\n curToken.attrPush(['order', value])\n }\n return true\n }\n return false\n })\n }\n if (\n isBulletListItemToken(curToken) &&\n isParagraphOpenToken(tokens[i + 1]) &&\n isInlineToken(tokens[i + 2])\n ) {\n const inlineToken = tokens[i + 2]\n const match = /^\\[([ |x])\\]\\s?/.exec(inlineToken.content)\n\n if (match) {\n const checked = match[1] === 'x'\n const checkboxPrefix = match[0]\n\n // \u66F4\u65B0 inlineToken.content\uFF0C\u79FB\u9664checkbox\u6807\u8BB0\n inlineToken.content = inlineToken.content.slice(checkboxPrefix.length)\n\n // \u66F4\u65B0\u7B2C\u4E00\u4E2Atext\u5B50\u8282\u70B9\u7684\u5185\u5BB9\uFF0C\u907F\u514D\u91CD\u590D\n if (inlineToken.children && inlineToken.children.length > 0) {\n const firstTextChild = inlineToken.children.find(child => child.type === 'text')\n if (firstTextChild) {\n // \u786E\u4FDD\u53EA\u4FEE\u6539\u4E00\u6B21\uFF0C\u907F\u514D\u91CD\u590D\u8D4B\u503C\n const originalContent = firstTextChild.content\n if (originalContent.startsWith(checkboxPrefix)) {\n firstTextChild.content = originalContent.slice(checkboxPrefix.length)\n }\n }\n }\n\n const checkboxToken = new Token('list_checkbox', 'input', 0)\n checkboxToken.attrPush(['type', 'checkbox'])\n if (checked) {\n checkboxToken.attrPush(['checked', ''])\n }\n tokens.splice(i + 1, 0, checkboxToken)\n edited = true\n }\n }\n }\n return edited\n}\n\n// A markdown-it plugin for selectable list checkbox\nfunction MarkdownItListCheckbox(md: MarkdownIt) {\n md.core.ruler.push('markdown-it-list-checkbox', rule)\n}\n\nexport default MarkdownItListCheckbox\n", "import type MarkdownIt from 'markdown-it';\nimport { normalizeReference } from 'markdown-it/lib/common/utils.mjs';\n\nconst imageRefRegex = /^!\\[([^\\]]*)\\]\\[([^\\]]+)\\]/g;\n\nfunction inlineReference(state: any, silent: boolean) {\n const pos = state.pos;\n const srcFromPos = state.src.slice(pos);\n\n const match = imageRefRegex.exec(srcFromPos);\n if (!match) {\n return false;\n }\n\n const alt = match[1] || '';\n const label = (match[2] || '').trim();\n\n const defs = state.env && state.env.rmeReferences;\n\n const normalizeLabel = normalizeReference(label);\n const def = defs && defs[normalizeLabel];\n if (!def) {\n return false;\n }\n\n if (!silent) {\n const token = state.push('md_image', '', 0);\n\n token.attrs = {\n src: '',\n alt: alt,\n 'data-refer-label': label\n };\n\n token.tag = 'img'\n }\n\n state.pos = pos + match[0].length;\n return true;\n}\n\nexport default function MarkdownItReferenceImage(md: MarkdownIt) {\n md.inline.ruler.push('reference_image', inlineReference);\n}\n", "// Process front matter and pass to cb\n'use strict'\n\nexport function front_matter_plugin(md, cb) {\n var min_markers = 3,\n marker_str = '-',\n marker_char = marker_str.charCodeAt(0),\n marker_len = marker_str.length\n\n function frontMatter(state, startLine, endLine, silent) {\n var pos,\n nextLine,\n marker_count,\n token,\n old_parent,\n old_line_max,\n start_content,\n auto_closed = false,\n start = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine]\n\n // Check out the first character of the first line quickly,\n // this should filter out non-front matter\n if (startLine !== 0 || marker_char !== state.src.charCodeAt(0)) {\n return false\n }\n\n // Check out the rest of the marker string\n // while pos <= 3\n for (pos = start + 1; pos <= max; pos++) {\n if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n start_content = pos + 1\n break\n }\n }\n\n marker_count = Math.floor((pos - start) / marker_len)\n\n if (marker_count < min_markers) {\n return false\n }\n pos -= (pos - start) % marker_len\n\n // Since start is found, we can report success here in validation mode\n if (silent) {\n return true\n }\n\n // Search for the end of the block\n nextLine = startLine\n\n for (;;) {\n nextLine++\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break\n }\n\n if (state.src.slice(start, max) === '...') {\n break\n }\n\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (start < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break\n }\n\n if (marker_char !== state.src.charCodeAt(start)) {\n continue\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue\n }\n\n for (pos = start + 1; pos <= max; pos++) {\n if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n break\n }\n }\n\n // closing code fence must be at least as long as the opening one\n if (Math.floor((pos - start) / marker_len) < marker_count) {\n continue\n }\n\n // make sure tail has spaces only\n pos -= (pos - start) % marker_len\n pos = state.skipSpaces(pos)\n\n if (pos < max) {\n continue\n }\n\n // found!\n auto_closed = true\n break\n }\n\n old_parent = state.parentType\n old_line_max = state.lineMax\n state.parentType = 'container'\n\n // this will prevent lazy continuations from ever going past our end marker\n state.lineMax = nextLine\n\n token = state.push('fence', null, 0)\n token.tag = 'code'\n token.hidden = true\n token.markup = state.src.slice(startLine, pos)\n token.block = true\n token.map = [startLine, nextLine + (auto_closed ? 1 : 0)]\n token.meta = state.src.slice(start_content, start - 1)\n token.info = 'yaml'\n token.attrSet('front-matter', true)\n\n token.content = token.meta\n\n state.parentType = old_parent\n state.lineMax = old_line_max\n state.line = nextLine + (auto_closed ? 1 : 0)\n\n cb(token.meta)\n\n return true\n }\n\n md.block.ruler.before('table', 'front_matter', frontMatter, {\n alt: ['paragraph', 'reference', 'blockquote', 'list'],\n })\n}\n", "import type MarkdownIt from 'markdown-it'\nimport Token from 'markdown-it/lib/token.mjs'\nimport voidElements from 'void-elements'\nimport { HTMLNode } from '../extensions/Inline/from-inline-markdown'\nimport {\n getAttrsBySignalHtmlContent,\n getTagName,\n isClosingTag,\n isSingleNode,\n} from '../utils/html'\n\nexport const needSplitInlineHtmlTokenTags = ['img', 'iframe', 'br']\n\nexport const excludeHtmlInlineNodes = ['html_inline_node', 'html_image', 'iframe_inline', 'html_br', 'math_inline', 'md_image']\n\nconst typeMap: Record<string, string> = {\n img: 'html_image',\n iframe: 'iframe_inline',\n br: 'html_br',\n}\n\n// function splitHtmlInlineTokens(t: Token) {\n// if (!t.children) return []\n\n// return t.children.map((child) => {\n// if (\n// isHtmlInlineToken(child) &&\n// needSplitInlineHtmlTokenTags.includes(child.tag) &&\n// !isClosingTag(child.content)\n// ) {\n// const newToken = new Token(typeMap[child.tag], '', 0)\n// newToken.content = child.content\n// newToken.attrs = getAttrsBySignalHtmlContent(child.content)\n// newToken.attrs!.htmlText = newToken.content\n// return newToken\n// } else {\n// const token = new Token('text', '', 0)\n// token.content = child.content\n// return token\n// }\n// })\n// }\n\nfunction getMergeArr(phrasingContents: Token[]) {\n const unCloseedHtmlStack: HTMLNode[] = []\n const mergeArr: HTMLNode[][] = []\n for (let i = 0; i < phrasingContents.length; i++) {\n const phrasingContent = phrasingContents[i]\n if (isHtmlInlineToken(phrasingContent)) {\n const tagName = getTagName(phrasingContent.content)\n const htmlNode = {\n tag: tagName,\n voidElement: !!voidElements[tagName],\n isClosingTag: isClosingTag(phrasingContent.content),\n index: i,\n }\n\n if (!htmlNode.voidElement) {\n if (!htmlNode.isClosingTag) {\n unCloseedHtmlStack.push(htmlNode)\n } else if (unCloseedHtmlStack[unCloseedHtmlStack.length - 1]?.tag === htmlNode.tag) {\n if (unCloseedHtmlStack.length >= 1) {\n mergeArr.push([unCloseedHtmlStack.pop()!, htmlNode])\n ;(phrasingContent as any).complete = true\n }\n }\n } else {\n ;(phrasingContent as any).complete = true\n }\n }\n }\n\n for (let i = 0; i < mergeArr.length; i++) {\n const merge = mergeArr[i]\n const startIndex = merge[0].index\n const endIndex = merge[1].index\n const parentNode = mergeArr.findIndex(\n (item) => item[0].index < startIndex && item[1].index > endIndex,\n )\n if (parentNode >= 0) {\n mergeArr.splice(i, 1)\n i--\n }\n }\n\n return mergeArr\n}\nfunction mergePhrasingContents(\n phrasingContents: Token[],\n startIndex: number,\n endIndex: number,\n): Token[] {\n const merged = new Token('html_inline_node', '', 0)\n\n for (let i = startIndex; i <= endIndex; i++) {\n merged.content += phrasingContents[i].content || ''\n ;(merged as any).complete = true\n }\n\n (merged as any).attrs = {\n htmlText: merged.content,\n }\n phrasingContents.splice(startIndex, endIndex - startIndex + 1, merged)\n return phrasingContents as Token[]\n}\n\nfunction mergeHtmlPhrasingContents(phrasingContents: Token[]) {\n const mergeArr = getMergeArr(phrasingContents)\n\n let offset = 0\n mergeArr.forEach((merge) => {\n const startIndex = merge[0].index + offset\n const endIndex = merge[1].index + offset\n mergePhrasingContents(phrasingContents, startIndex, endIndex)\n offset += startIndex - endIndex\n })\n\n phrasingContents.forEach((phrasingContent, index) => {\n if (isHtmlInlineToken(phrasingContent)) {\n const tagName = getTagName(phrasingContent.content)\n if (typeMap[tagName]) {\n const newToken = new Token(typeMap[tagName], '', 0)\n newToken.content = phrasingContent.content\n\n newToken.attrs = getAttrsBySignalHtmlContent(phrasingContent.content)\n ;(newToken.attrs as any).htmlText = newToken.content\n\n phrasingContents.splice(index, 1, newToken)\n } else {\n const newToken = new Token('html_inline_node', '', 0)\n newToken.content = phrasingContent.content\n\n ;(newToken as any).attrs = {\n htmlText: newToken.content,\n }\n phrasingContents.splice(index, 1, newToken)\n }\n }\n })\n}\n\nfunction isInlineToken(t: Token) {\n return t.type === 'inline'\n}\n\nfunction isHtmlInlineToken(t: Token) {\n return t.type === 'html_inline'\n}\n\nfunction isHtmlBlockToken(t: Token) {\n return t.type === 'html_block'\n}\n// function hasSplitInlineHtmlToken(t: Token) {\n// let res = false\n\n// t.children?.forEach((child) => {\n// if (isHtmlInlineToken(child)) {\n// const tag = getTagName(child.content)\n// child.tag = tag\n// if (needSplitInlineHtmlTokenTags.includes(child.tag)) {\n// res = true\n// }\n// }\n// })\n\n// return res\n// }\n\nconst rule = (state: any) => {\n const edited = false\n const tokens = state.tokens\n let tokensLength = tokens.length\n\n for (let i = 0; i <= tokensLength - 1; i++) {\n const curToken = tokens[i]\n if (isInlineToken(curToken)) {\n const newChildren = curToken.children\n if (newChildren) {\n mergeHtmlPhrasingContents(newChildren)\n }\n\n const newTokens = []\n let childs: Token[] = []\n\n newChildren?.forEach((child: Token, index: number) => {\n if (excludeHtmlInlineNodes.includes(child.type)) {\n if (childs.length > 0) {\n const newToken = new Token('inline', '', 0)\n newToken.children = [...childs]\n newToken.content = childs.map((child) => {\n if (child.type === 'softbreak') {\n return '\\n'\n }\n return child.content\n }).join('')\n newTokens.push(newToken)\n childs = []\n }\n\n newTokens.push(child)\n } else {\n childs.push(child)\n }\n })\n\n if (childs.length > 0) {\n const newToken = new Token('inline', '', 0)\n newToken.children = childs\n newToken.content = childs.map((child) => child.content).join('')\n newTokens.push(newToken)\n childs = []\n }\n\n if (curToken.children && newTokens.length > 0) {\n tokens.splice(i, 1, ...newTokens)\n\n tokensLength += newTokens.length - 1\n }\n } else if (isHtmlBlockToken(curToken)) {\n const tag = getTagName(curToken.content)\n\n if (isSingleNode(curToken.content) && needSplitInlineHtmlTokenTags.includes(tag)) {\n const newToken = new Token(typeMap[tag], '', 0)\n newToken.content = curToken.content\n newToken.attrs = getAttrsBySignalHtmlContent(curToken.content)\n tokens.splice(\n i,\n 1,\n ...[new Token('paragraph_open', '', 0), newToken, new Token('paragraph_close', '', 0)],\n )\n }\n }\n }\n\n return edited\n}\n\nfunction MarkdownItHtmlInline(md: MarkdownIt) {\n md.core.ruler.push('markdown-it-html-inline', rule)\n}\n\nexport default MarkdownItHtmlInline\n", "// @ts-nocheck\nimport HTML from 'html-parse-stringify'\n\nexport function isClosingTag(str: string) {\n const regex = /^<\\/[a-zA-Z0-9]+\\s*>$/\n return regex.test(str)\n}\n\nexport function isSingleNode (html: string) {\n const ast = HTML.parse(html)\n return ast && ast.length === 1\n}\n\nexport const getAttrsBySignalHtmlContent = (html: string) => {\n const ast = HTML.parse(html)\n return ast[0]?.attrs || {}\n}\n\nexport function getTagName(str: string) {\n const regex = /<\\/?([a-zA-Z0-9]+)\\b[^>]*>/\n\n const matches = regex.exec(str)\n\n if (matches && matches.length > 1) {\n return matches[1].toLowerCase()\n }\n\n return ''\n}\n\nexport function isImageElement(el: any): el is HTMLImageElement {\n return el && (el.tagName as string)?.toLocaleUpperCase() === 'IMG'\n}\n\ninterface HTMLAst {\n tag: string\n attrs: Record<string, string> | undefined\n voidElement: boolean\n}\n\nexport function buildMarkdownTextFromNode(node: { attrs: { [key: string]: any } }) {\n const { attrs } = node\n\n // \u5982\u679C\u662F\u5F15\u7528\u56FE\u7247\uFF0C\u751F\u6210\u5F15\u7528\u8BED\u6CD5\n if (attrs['data-refer-label']) {\n const alt = attrs.alt || ''\n return `![${alt}][${attrs['data-refer-label']}]`\n }\n\n // \u5426\u5219\u751F\u6210\u6807\u51C6\u7684 Markdown \u56FE\u7247\u8BED\u6CD5\n const alt = attrs.alt || ''\n const src = attrs.src || ''\n const title = attrs.title ? ` \"${attrs.title}\"` : ''\n return ``\n}\n\nexport function buildHtmlStringFromAst(ast: HTMLAst) {\n let attrs = ''\n\n if (ast.attrs) {\n const filteredAttrs = Object.entries(ast.attrs).filter(([, value]) => value)\n\n if (filteredAttrs.length) {\n attrs = `${filteredAttrs.map(([key, value]) => `${key}=\"${value}\"`).join(' ')}`\n }\n }\n\n if (ast.voidElement) {\n return `<${ast.tag} ${attrs} />`\n }\n\n return `<${ast.tag} ${attrs}></${ast.tag}>`\n}\n", "import type MarkdownIt from 'markdown-it'\nimport Token from 'markdown-it/lib/token.mjs'\n\nconst rule = (state: any) => {\n let edited = false\n const tokens = state.tokens\n let tokensLength = tokens.length\n\n for (let i = 0; i <= tokensLength - 1; i++) {\n const curToken = tokens[i] as Token\n let newTokens: Token[] = []\n\n if (\n curToken.type === 'inline' &&\n curToken.children &&\n curToken.children.some((t) => t.type === 'image')\n ) {\n // If the inline token contains image children, we need to process them\n const inlineTokens = curToken.children\n inlineTokens.forEach((t) => {\n if (t.type === 'image') {\n const src = (t.attrs)?.[0]?.[1] || ''\n const alt = (t.attrs)?.[1]?.[1] || t.content || ''\n const imageToken = new Token('md_image', 'img', 0)\n ;(imageToken as any).attrs = { src, alt }\n newTokens.push(imageToken)\n edited = true\n } else {\n newTokens.push(t)\n }\n })\n\n // Replace the current inline token with the new tokens\n tokens.splice(i, 1, ...newTokens)\n tokensLength += newTokens.length - 1\n continue\n }\n }\n\n return edited\n}\n\nexport default function MarkdownItImage(md: MarkdownIt) {\n md.core.ruler.push('markdown-it-image', rule)\n}\n", "import type MarkdownIt from 'markdown-it'\nimport Token from 'markdown-it/lib/token.mjs'\n\nconst rule = (state: any) => {\n let edited = false\n const tokens = state.tokens\n let tokensLength = tokens.length\n\n for (let i = 0; i <= tokensLength - 1; i++) {\n const curToken = tokens[i] as Token\n\n if (curToken.type === 'math_block') {\n const originalContent = curToken.content || ''\n const mathToken = new Token('math_block', '', 0)\n ;(mathToken as any).attrs = { tex: curToken.attrs?.[0]?.[1] || '' }\n\n mathToken.content = originalContent\n mathToken.block = true\n mathToken.map = curToken.map\n\n tokens[i] = mathToken\n edited = true\n }\n\n let newTokens: Token[] = []\n if (curToken.type === 'inline' && curToken.children && curToken.children.some(t => t.type === 'math_inline')) {\n // If the inline token contains math_inline children, we need to process them\n const inlineTokens = curToken.children\n inlineTokens.forEach(t => {\n if (t.type === 'math_inline') {\n const tex = (t.attrs as any)?.tex || ''\n const originalContent = t.content || ''\n const mathToken = new Token('math_inline', '', 0)\n ;(mathToken as any).attrs = { tex }\n mathToken.content = originalContent\n newTokens.push(mathToken)\n edited = true\n } else {\n newTokens.push(t)\n }\n })\n\n // Replace the current inline token with the new tokens\n tokens.splice(i, 1, ...newTokens)\n tokensLength += newTokens.length - 1\n continue\n }\n\n }\n\n return edited\n}\n\n// Minimal $...$ and $$...$$ tokenizer producing tokens: math_inline and math_block\nexport default function MarkdownItMath(md: MarkdownIt) {\n // Inline math: $...$\n md.inline.ruler.after('escape', 'math_inline', (state, silent) => {\n const pos = state.pos\n const ch = state.src.charCodeAt(pos)\n if (ch !== 0x24 /* $ */) return false\n // avoid $$ here, handled by block rule\n if (state.src.charCodeAt(pos + 1) === 0x24) return false\n\n let start = pos + 1\n let end = start\n while ((end = state.src.indexOf('$', end)) !== -1) {\n // ensure not escaped\n let backslashes = 0\n let i = end - 1\n while (i >= 0 && state.src[i] === '\\\\') {\n backslashes++\n i--\n }\n if (backslashes % 2 === 0) break\n end++\n }\n if (end === -1) return false\n if (!silent) {\n const token = state.push('math_inline', '', 0)\n const tex = state.src.slice(start, end)\n const originalContent = state.src.slice(pos, end + 1) // \u5305\u542B$\u6807\u7B7E\u7684\u539F\u59CB\u5185\u5BB9\n token.attrs = { tex } as any\n // token.content = tex\n }\n state.pos = end + 1\n return true\n })\n\n // Block math: $$...$$\n md.block.ruler.after('fence', 'math_block', (state, startLine, endLine, silent) => {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n const max = state.eMarks[startLine]\n if (pos + 2 > max) return false\n if (state.src.charCodeAt(pos) !== 0x24 || state.src.charCodeAt(pos + 1) !== 0x24) return false\n pos += 2\n if (silent) return true\n\n // search for closing $$\n let nextLine = startLine\n let found = false\n let content = ''\n for (;;) {\n nextLine++\n if (nextLine >= endLine) break\n let lineStart = state.bMarks[nextLine] + state.tShift[nextLine]\n const lineEnd = state.eMarks[nextLine]\n if (\n state.src.charCodeAt(lineStart) === 0x24 &&\n state.src.charCodeAt(lineStart + 1) === 0x24\n ) {\n found = true\n pos = lineStart + 2\n break\n }\n }\n if (!found) return false\n\n // Aggregate content between lines\n content = state.getLines(startLine + 1, nextLine, state.tShift[startLine + 1], true)\n\n // \u6784\u5EFA\u5305\u542B$$\u6807\u7B7E\u7684\u539F\u59CB\u5185\u5BB9\n const originalContent = state.getLines(startLine, nextLine + 1, state.tShift[startLine], true)\n\n const token = state.push('math_block', 'div', 0)\n token.block = true\n token.content = content\n token.attrs = [['tex', content]]\n token.map = [startLine, nextLine + 1]\n state.line = nextLine + 1\n return true\n }, { alt: ['paragraph', 'reference', 'blockquote', 'list'] })\n\n // Add core rule to process math tokens\n md.core.ruler.push('markdown-it-math', rule)\n}\n\n\n", "import type MarkdownIt from 'markdown-it'\nimport { Core, StateCore } from 'markdown-it/index.js'\nimport Token from 'markdown-it/lib/token.mjs'\n\nconst rule: Core.RuleCore = (state: StateCore) => {\n let edited = false\n const tokens = state.tokens\n const tokensLength = tokens.length\n for (let i = 0; i <= tokensLength - 1; i++) {\n const curToken = tokens[i]\n\n if (curToken.type === 'fence' && curToken.info === 'mermaid') {\n const code = curToken.content\n const mermaidToken = new Token('mermaid_node', '', 0)\n mermaidToken.content = code\n\n tokens[i] = mermaidToken\n }\n }\n\n return edited\n}\n\nfunction MarkdownItMermaid(md: MarkdownIt) {\n md.core.ruler.push('markdown-it-mermaid', rule)\n}\n\nexport default MarkdownItMermaid\n", "import MarkdownIt from 'markdown-it'\nimport { Core, StateCore } from 'markdown-it/index.js'\nimport { isSpace, normalizeReference } from 'markdown-it/lib/common/utils.mjs'\nimport Token from 'markdown-it/lib/token.mjs'\n\nexport function reference(state, startLine, _endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n let nextLine = startLine + 1\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false\n }\n\n if (state.src.charCodeAt(pos) !== 0x5b /* [ */) {\n return false\n }\n\n function getNextLine(nextLine) {\n const endLine = state.lineMax\n\n if (nextLine >= endLine || state.isEmpty(nextLine)) {\n // empty line or end of input\n return null\n }\n\n let isContinuation = false\n\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) {\n isContinuation = true\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) {\n isContinuation = true\n }\n\n if (!isContinuation) {\n const terminatorRules = state.md.block.ruler.getRules('reference_def')\n const oldParentType = state.parentType\n state.parentType = 'reference_def'\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n state.parentType = oldParentType\n if (terminate) {\n // terminated by another block\n return null\n }\n }\n\n const pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n // max + 1 explicitly includes the newline\n return state.src.slice(pos, max + 1)\n }\n\n let str = state.src.slice(pos, max + 1)\n\n max = str.length\n let labelEnd = -1\n\n for (pos = 1; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x5b /* [ */) {\n return false\n } else if (ch === 0x5d /* ] */) {\n labelEnd = pos\n break\n } else if (ch === 0x0a /* \\n */) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (ch === 0x5c /* \\ */) {\n pos++\n if (pos < max && str.charCodeAt(pos) === 0x0a) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3a /* : */) {\n return false\n }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0a) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n const destRes = state.md.helpers.parseLinkDestination(str, pos, max)\n if (!destRes.ok) {\n return false\n }\n\n const href = state.md.normalizeLink(destRes.str)\n if (!state.md.validateLink(href)) {\n return false\n }\n\n pos = destRes.pos\n\n // save cursor state, we could require to rollback later\n const destEndPos = pos\n const destEndLineNo = nextLine\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n const start = pos\n for (; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0a) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n let titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n while (titleRes.can_continue) {\n const lineContent = getNextLine(nextLine)\n if (lineContent === null) break\n str += lineContent\n pos = max\n max = str.length\n nextLine++\n titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes)\n }\n let title\n\n if (pos < max && start !== pos && titleRes.ok) {\n title = titleRes.str\n pos = titleRes.pos\n } else {\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) {\n break\n }\n pos++\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0a) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) {\n break\n }\n pos++\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0a) {\n // garbage at the end of the line\n return false\n }\n\n const label = str.slice(1, labelEnd)\n const normalizeLabel = normalizeReference(label)\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /* istanbul ignore if */\n if (silent) {\n return true\n }\n\n const token = state.push('reference_def', '', 0)\n token.info = label\n token.attrs = [\n ['label', label],\n ['href', href],\n ]\n if (title) {\n token.attrs.push(['title', title])\n }\n token.map = [startLine, startLine + 1]\n token.content = str\n\n if (typeof state.env.rmeReferences === 'undefined') {\n state.env.rmeReferences = {}\n }\n if (typeof state.env.rmeReferences[label] === 'undefined') {\n state.env.rmeReferences[normalizeLabel] = { title, href, label }\n }\n\n state.line = nextLine\n return true\n}\n\nconst rule: Core.RuleCore = (state: StateCore) => {\n let edited = false\n const tokens = state.tokens\n let tokensLength = tokens.length\n for (let i = 0; i <= tokensLength - 1; i++) {\n const curToken = tokens[i]\n\n if (curToken.type === 'reference_def') {\n console.log('reference_def', curToken)\n const label = curToken.attrs?.find((attr) => attr[0] === 'label')?.[1] || ''\n const href = curToken.attrs?.find((attr) => attr[0] === 'href')?.[1] || ''\n const title = curToken.attrs?.find((attr) => attr[0] === 'title')?.[1] || ''\n const labelToken = new Token('reference_label', 'span', 0)\n const hrefToken = new Token('reference_href', 'span', 0)\n const titleToken = new Token('reference_title', 'span', 0)\n labelToken.content = label\n hrefToken.content = href\n titleToken.content = title\n\n const openToken = new Token('reference_def_open', 'span', 0)\n const closeToken = new Token('reference_def_close', 'span', 0)\n openToken.attrs = [\n ['label', label],\n ['href', href],\n ['title', title],\n ]\n\n tokens.splice(i, 1, openToken, labelToken, hrefToken, titleToken, closeToken)\n i += 4\n tokensLength += 4\n edited = true\n }\n }\n\n return edited\n}\n\nexport default function MarkdownItReference(md: MarkdownIt) {\n md.core.ruler.push('markdown-it-reference-def', rule)\n\n md.block.ruler.before('paragraph', 'reference_def', reference, {\n alt: ['paragraph', 'reference'],\n })\n}\n", "import {\n // BoldExtension,\n // BulletListExtension,\n // CodeBlockExtension,\n DropCursorExtension,\n} from '@rme-sdk/main/extensions'\nimport { LineTableCellExtension, LineTableHeaderCellExtension } from './Table/table-extension'\n// import data from 'svgmoji/emoji.json'\nimport { CountExtension } from '@rme-sdk/extension-count'\nimport { corePreset } from '@rme-sdk/preset-core'\nimport { ReactComponentExtension } from '@rme-sdk/react'\nimport { ClipboardReadFunction, clipboardRead } from '../utils/clipboard-read'\nimport { AIExtension } from './Ai'\nimport { AIOptions } from './Ai/ai-types'\nimport { LineBlockquoteExtension } from './BlockQuote'\nimport { ClipboardExtension } from './Clipboard'\nimport { LineCodeMirrorExtension } from './CodeMirror/codemirror-extension'\nimport { CustomCopyFunction } from './CodeMirror/codemirror-types'\nimport { CodemirrorOptions, getSetupByCodemirrorOptions } from './CodeMirror/setup'\nimport { CommonKeymapExtension } from './CommonKeymap'\nimport { CopilotExtension } from './Copilot/copilot-extension'\nimport { FindExtension } from './Find/find-extension'\nimport { HandleInputExtension } from './HandleInput/handle-input-extension'\nimport { LineHardBreakExtension } from './HardBreak'\nimport { LineHeadingExtension } from './Heading'\nimport { LineHorizontalRuleExtension } from './HorizontalRule'\nimport { HtmlBrExtension } from './HtmlBr/br-extension'\nimport { LineHtmlBlockExtension } from './HtmlNode/html-block-extension'\nimport { HtmlInlineNodeExtension } from './HtmlNode/html-inline-node'\nimport { IframeExtension } from './Iframe'\nimport { HtmlImageExtension } from './Image'\nimport { DelayedImage, FileWithProgress, MdImgUriExtension } from './Image/md-image-extension'\nimport { LineInlineDecorationExtension, LineInlineMarkExtension, markExtensions } from './Inline'\nimport { LineListExtension } from './List'\nimport { MathBlockExtension, MathInlineExtension } from './Math'\nimport { MermaidBlockExtension } from './Mermaid'\nimport { NodeIndicatorExtension } from './NodeIndicator'\nimport { LineParagraphExtension } from './Paragraph'\nimport { PlaceholderExtension } from './Placeholder'\nimport {\n ReferenceDefinitionExtension,\n ReferenceHrefExtension,\n ReferenceLabelExtension,\n ReferenceTitleExtension,\n} from './Reference'\nimport { SlashMenuExtension } from './SlashMenu'\nimport { LineTableExtension, LineTableRowExtension } from './Table'\nimport { LineTextExtension } from './Text'\nimport { TransformerExtension } from './Transformer/transformer-extension'\n\nexport * from './Image'\nexport * from './List'\n\nexport type ExtensionsOptions = {\n disableAllBuildInShortcuts?: boolean\n\n handleViewImgSrcUrl?: (src: string) => Promise<string>\n\n imageHostingHandler?: (src: string) => Promise<string>\n\n imagePasteHandler?: (src: string) => Promise<string>\n\n ai?: AIOptions\n\n customCopyFunction?: CustomCopyFunction\n\n overrideShortcutMap?: Record<string, string>\n\n clipboardReadFunction?: ClipboardReadFunction\n\n codemirrorOptions?: CodemirrorOptions\n\n uploadImageHandler?: (files: FileWithProgress[]) => DelayedImage[]\n}\n\nfunction extensions(options: ExtensionsOptions): any[] {\n const defaultCopyFunction = (code: string) => {\n navigator.clipboard.writeText(code)\n return true\n }\n const {\n handleViewImgSrcUrl,\n imageHostingHandler,\n imagePasteHandler,\n customCopyFunction = defaultCopyFunction,\n clipboardReadFunction = clipboardRead,\n codemirrorOptions = {},\n } = options\n\n const codemirrorNodeCommonOptions = {\n customCopyFunction,\n codemirrorExtensions: getSetupByCodemirrorOptions({\n ...codemirrorOptions,\n lineNumbers: true,\n }),\n }\n\n const res: any[] = [\n ...corePreset({ excludeExtensions: ['paragraph', 'text'] }),\n ...markExtensions({\n handleViewImgSrcUrl,\n }),\n new CommonKeymapExtension(),\n new CountExtension({}),\n new HtmlImageExtension({\n handleViewImgSrcUrl,\n imageHostingHandler,\n imagePasteHandler,\n }),\n new MdImgUriExtension({\n handleViewImgSrcUrl,\n imageHostingHandler,\n imagePasteHandler,\n uploadHandler: options.uploadImageHandler,\n }),\n new HandleInputExtension(),\n new HtmlBrExtension(),\n new IframeExtension({\n enableResizing: true,\n }),\n // new LineHtmlInlineExtension({\n // handleViewImgSrcUrl,\n // }),\n\n new PlaceholderExtension({ placeholder: \"Type '/' for commands\" }),\n new LineParagraphExtension(),\n new LineTextExtension(),\n new LineHardBreakExtension(),\n new LineBlockquoteExtension(),\n new LineHeadingExtension({}),\n new LineListExtension(),\n new LineCodeMirrorExtension({\n extensions: getSetupByCodemirrorOptions({ ...codemirrorOptions, lineNumbers: true }),\n useProsemirrorHistoryKey: true,\n customCopyFunction,\n }),\n new LineHorizontalRuleExtension({}),\n new LineTableExtension({ resizable: false }),\n new LineTableHeaderCellExtension(),\n new LineTableRowExtension(),\n new LineTableCellExtension(),\n new FindExtension({\n decoration: { style: 'background-color: yellow; color: black' },\n activeDecoration: { style: 'background-color: orange; color: black' },\n }),\n new HtmlInlineNodeExtension({\n handleViewImgSrcUrl,\n }),\n new ClipboardExtension({\n imagePasteHandler,\n clipboardReadFunction,\n }),\n\n new ReactComponentExtension({}),\n new DropCursorExtension({\n className: 'rme-drop-cursor',\n }),\n\n new SlashMenuExtension(),\n new LineInlineMarkExtension(),\n new LineInlineDecorationExtension(),\n\n new MathBlockExtension(codemirrorNodeCommonOptions),\n new LineHtmlBlockExtension({ ...codemirrorNodeCommonOptions, handleViewImgSrcUrl }),\n new MermaidBlockExtension(codemirrorNodeCommonOptions),\n new MathInlineExtension({}),\n\n new ReferenceDefinitionExtension({}),\n new ReferenceLabelExtension({}),\n new ReferenceHrefExtension({}),\n new ReferenceTitleExtension({}),\n\n new TransformerExtension({}),\n new NodeIndicatorExtension(),\n ]\n\n if (options.ai) {\n res.unshift(new AIExtension(options.ai))\n if (options.ai.copilot) {\n res.unshift(new CopilotExtension(options.ai.copilot))\n }\n }\n\n return res\n}\n\nexport default extensions\n", "import type {\n ApplySchemaAttributes,\n CommandFunction,\n Fragment,\n KeyBindings,\n NodeSpecOverride,\n} from '@rme-sdk/core'\nimport { findParentNodeOfType } from '@rme-sdk/core'\nimport type { TableSchemaSpec } from '@rme-sdk/extension-tables'\nimport {\n TableCellExtension,\n TableExtension,\n TableHeaderCellExtension,\n TableRowExtension,\n} from '@rme-sdk/extension-tables'\nimport { TextSelection } from '@rme-sdk/pm/state'\n\nimport { TableMap } from '@rme-sdk/pm/tables'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport { buildBlockEnterKeymap } from '../../utils/build-block-enter-keymap'\nimport { selectCell } from './table-helpers'\nimport { TableSelectorExtension } from './table-selector-extension'\nimport { findTable } from './table-utils'\n\nenum TABLE_ALIGEN {\n DEFAULT = 1,\n CENTER = 2,\n RIGHT = 3,\n LEFT = 4,\n}\n\nexport class LineTableExtension extends TableExtension {\n get name() {\n return 'table' as const\n }\n\n createKeymap = (): KeyBindings => {\n const schema = this.store.schema\n\n return {\n ...buildBlockEnterKeymap(\n /^\\|((?:[^\\|]+\\|){2,})\\s*$/,\n ({ match }) => {\n const texts = match[1]\n .split('|')\n .slice(0, -1) // Remove the empty string at the end\n .map((text) => {\n text = text.trim()\n if (!text) text = ' ' // Prosemirror text doesn't allow empty text\n return schema.text(text)\n })\n\n const cells1 = texts.map((text) => schema.nodes.tableCell.create(null, text)) // first row\n const cells2 = texts.map(() => schema.nodes.tableCell.create(null)) // second row\n const row1 = schema.nodes.tableRow.create(null, cells1)\n const row2 = schema.nodes.tableRow.create(null, cells2)\n const table = schema.nodes.table.create(null, [row1, row2])\n return table\n },\n ({ tr }) => {\n const $cursor = (tr.selection as TextSelection)?.$cursor\n if (!$cursor) {\n return tr\n } else {\n const depth = $cursor.depth - 1\n const pos = $cursor.posAtIndex($cursor.index(depth) - 1, depth)\n const $pos = tr.doc.resolve(pos)\n return tr.setSelection(TextSelection.near($pos))\n }\n },\n ),\n ArrowUp: ({ state, dispatch }) => {\n const { selection } = state\n const { $head } = selection\n // \u68C0\u67E5\u662F\u5426\u5728\u8868\u683C\u5355\u5143\u683C\u5185\n const cell = findParentNodeOfType({ selection: $head, types: 'tableCell' })\n if (!cell) return false\n\n // \u68C0\u67E5\u5149\u6807\u662F\u5426\u5728\u5355\u5143\u683C\u5185\u5BB9\u7684\u7B2C\u4E00\u884C\n // \u83B7\u53D6\u5149\u6807\u5728\u5F53\u524D\u8282\u70B9\u4E2D\u7684\u76F8\u5BF9\u4F4D\u7F6E\n const cellNode = cell.node\n const cellContent = cellNode.content\n const posInCell = $head.pos - cell.pos - 1 // -1 \u662F\u56E0\u4E3A\u9700\u8981\u8003\u8651\u8282\u70B9\u7684\u5F00\u59CB\u6807\u8BB0\n\n const nodePositions = getNodePositionByCellContent(cellContent)\n\n // \u68C0\u67E5\u5149\u6807\u662F\u5426\u5728\u7B2C\u4E00\u884C\n let isAtFirstLine = posInCell <= nodePositions[0].end\n // \u5982\u679C\u4E0D\u662F\u5728\u7B2C\u4E00\u884C \uFF0C\u8BA9\u9ED8\u8BA4\u884C\u4E3A\u5904\u7406\uFF08\u5728\u5355\u5143\u683C\u5185\u4E0A\u79FB\uFF09\n if (!isAtFirstLine) return false\n\n // \u83B7\u53D6\u8868\u683C\u4FE1\u606F\n const table = findTable(selection)\n if (!table) return false\n\n const map = TableMap.get(table.node)\n const cellPos = cell.pos\n const cellIndex = cellPos - table.start\n\n // \u8BA1\u7B97\u5F53\u524D\u5355\u5143\u683C\u5728\u8868\u683C\u4E2D\u7684\u4F4D\u7F6E\n // \u5728 TableMap \u4E2D\uFF0C\u5355\u5143\u683C\u6309\u884C\u4F18\u5148\u987A\u5E8F\u5B58\u50A8\u5728 map \u6570\u7EC4\u4E2D\n // \u6211\u4EEC\u9700\u8981\u627E\u51FA\u5F53\u524D\u5355\u5143\u683C\u5728\u54EA\u4E00\u884C\u54EA\u4E00\u5217\n let cellRow = -1\n let cellCol = -1\n for (let row = 0; row < map.height; row++) {\n for (let col = 0; col < map.width; col++) {\n const index = row * map.width + col\n if (map.map[index] === cellIndex) {\n cellRow = row\n cellCol = col\n break\n }\n }\n if (cellRow !== -1) break\n }\n\n // \u5982\u679C\u627E\u4E0D\u5230\u5355\u5143\u683C\u4F4D\u7F6E\u6216\u5DF2\u7ECF\u5728\u7B2C\u4E00\u884C\uFF0C\u5219\u4E0D\u5904\u7406\n if (cellRow === -1 || cellRow === 0) return false\n\n // \u83B7\u53D6\u4E0A\u4E00\u884C\u76F8\u540C\u5217\u7684\u5355\u5143\u683C\n const targetCellIndex = map.map[(cellRow - 1) * map.width + cellCol]\n if (targetCellIndex === undefined) return false\n\n const targetPos = table.start + targetCellIndex\n const tr = state.tr.setSelection(TextSelection.near(state.doc.resolve(targetPos + 1)))\n if (dispatch) dispatch(tr)\n return true\n },\n ArrowDown: ({ state, dispatch }) => {\n const { selection } = state\n const { $head } = selection\n // \u68C0\u67E5\u662F\u5426\u5728\u8868\u683C\u5355\u5143\u683C\u5185\n const cell = findParentNodeOfType({ selection: $head, types: 'tableCell' })\n if (!cell) return false\n\n // \u68C0\u67E5\u5149\u6807\u662F\u5426\u5728\u5355\u5143\u683C\u5185\u5BB9\u7684\u6700\u540E\u4E00\u884C\n // \u83B7\u53D6\u5149\u6807\u5728\u5F53\u524D\u8282\u70B9\u4E2D\u7684\u76F8\u5BF9\u4F4D\u7F6E\n const cellNode = cell.node\n const cellContent = cellNode.content\n const posInCell = $head.pos - cell.pos - 1 // -1 \u662F\u56E0\u4E3A\u9700\u8981\u8003\u8651\u8282\u70B9\u7684\u5F00\u59CB\u6807\u8BB0\n const nodePositions = getNodePositionByCellContent(cellContent)\n\n // \u68C0\u67E5\u5149\u6807\u662F\u5426\u5728\u7B2C\u4E00\u884C\n let isAtLastLine = posInCell >= nodePositions[nodePositions.length - 1].start\n // \u5982\u679C\u4E0D\u662F\u6700\u540E\u4E00\u884C\uFF0C\u8BA9\u9ED8\u8BA4\u884C\u4E3A\u5904\u7406\uFF08\u5728\u5355\u5143\u683C\u5185\u4E0B\u79FB\uFF09\n if (!isAtLastLine) return false\n\n // \u83B7\u53D6\u8868\u683C\u4FE1\u606F\n const table = findTable(selection)\n if (!table) return false\n\n const map = TableMap.get(table.node)\n const cellPos = cell.pos\n const cellIndex = cellPos - table.start\n\n // \u8BA1\u7B97\u5F53\u524D\u5355\u5143\u683C\u5728\u8868\u683C\u4E2D\u7684\u4F4D\u7F6E\n // \u5728 TableMap \u4E2D\uFF0C\u5355\u5143\u683C\u6309\u884C\u4F18\u5148\u987A\u5E8F\u5B58\u50A8\u5728 map \u6570\u7EC4\u4E2D\n // \u6211\u4EEC\u9700\u8981\u627E\u51FA\u5F53\u524D\u5355\u5143\u683C\u5728\u54EA\u4E00\u884C\u54EA\u4E00\u5217\n let cellRow = -1\n let cellCol = -1\n for (let row = 0; row < map.height; row++) {\n for (let col = 0; col < map.width; col++) {\n const index = row * map.width + col\n if (map.map[index] === cellIndex) {\n cellRow = row\n cellCol = col\n break\n }\n }\n if (cellRow !== -1) break\n }\n\n // \u5982\u679C\u627E\u4E0D\u5230\u5355\u5143\u683C\u4F4D\u7F6E\u6216\u5DF2\u7ECF\u5728\u6700\u540E\u4E00\u884C\uFF0C\u5219\u4E0D\u5904\u7406\n if (cellRow === -1 || cellRow === map.height - 1) return false\n\n // \u83B7\u53D6\u4E0B\u4E00\u884C\u76F8\u540C\u5217\u7684\u5355\u5143\u683C\n const targetCellIndex = map.map[(cellRow + 1) * map.width + cellCol]\n if (targetCellIndex === undefined) return false\n\n const targetPos = table.start + targetCellIndex\n const tr = state.tr.setSelection(TextSelection.near(state.doc.resolve(targetPos + 1)))\n if (dispatch) dispatch(tr)\n return true\n },\n }\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'table',\n node: this.name,\n hasOpenClose: true,\n },\n { type: ParserRuleType.ignore, token: 'thead_open' },\n { type: ParserRuleType.ignore, token: 'thead_close' },\n { type: ParserRuleType.ignore, token: 'tbody_open' },\n { type: ParserRuleType.ignore, token: 'tbody_close' },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n const table: string[][] = []\n const colAligns: TABLE_ALIGEN[] = []\n node.forEach((rowNode, _, rowIndex) => {\n const row: string[] = []\n rowNode.forEach((cellNode, __, colIndex) => {\n let cellText = ''\n for (let i = 0; i < cellNode.childCount; i++) {\n let child = cellNode.child(i)\n if (child.textContent) {\n cellText += child.textContent\n } else if (child.type.name === 'html_br') {\n cellText += '<br/>'\n }\n }\n row.push(replaceNewLines(cellText.trim()))\n if (rowIndex === 0) {\n colAligns[colIndex] = TABLE_ALIGEN.DEFAULT\n }\n })\n table.push(row)\n })\n const colNumber = colAligns.length\n\n const colWidths = new Array<number>(colNumber)\n table.forEach((row) => {\n row.forEach((cell, colIndex) => {\n if (!colWidths[colIndex]) colWidths[colIndex] = 3\n colWidths[colIndex] = Math.max(cell.length, colWidths[colIndex])\n })\n })\n\n const spliter: string[] = new Array(colNumber)\n colWidths.forEach((width, colIndex) => {\n switch (colAligns[colIndex]) {\n case TABLE_ALIGEN.LEFT:\n spliter[colIndex] = ':' + '-'.repeat(width - 1)\n break\n case TABLE_ALIGEN.RIGHT:\n spliter[colIndex] = '-'.repeat(width - 1) + ':'\n break\n case TABLE_ALIGEN.CENTER:\n spliter[colIndex] = ':' + '-'.repeat(width - 2) + ':'\n break\n default:\n spliter[colIndex] = '-'.repeat(width)\n break\n }\n })\n table.splice(1, 0, spliter)\n\n let text = ''\n table.forEach((row) => {\n row.forEach((cell, col) => {\n text += '| '\n const width = colWidths[col]\n if (colAligns[col] === TABLE_ALIGEN.CENTER) {\n const pad = ' '.repeat(Math.round((width - cell.length) / 2))\n text += (pad + cell + pad).padEnd(width)\n } else if (colAligns[col] === TABLE_ALIGEN.RIGHT) {\n text += cell.padStart(width)\n } else {\n text += cell.padEnd(width)\n }\n text += ' '\n })\n text += '|\\n'\n })\n text += '\\n'\n\n state.text(text, false)\n }\n\n public createExtensions() {\n return []\n }\n}\n\nexport class LineTableRowExtension extends TableRowExtension {\n get name() {\n return 'tableRow' as const\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): TableSchemaSpec {\n return { ...super.createNodeSpec(extra, override), allowGapCursor: false }\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'tr',\n node: this.name,\n hasOpenClose: true,\n },\n ] as const\n }\n\n public toMarkdown() {}\n\n public createExtensions() {\n return []\n }\n}\n\nexport class LineTableHeaderCellExtension extends TableHeaderCellExtension {\n get name() {\n return 'tableHeaderCell' as const\n }\n\n public fromMarkdown() {\n return [] as const\n }\n\n public toMarkdown() {}\n\n public createExtensions() {\n return []\n }\n}\n\nexport class LineTableCellExtension extends TableCellExtension {\n get name() {\n return 'tableCell' as const\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): TableSchemaSpec {\n return {\n ...super.createNodeSpec(extra, override),\n content: 'inline*',\n }\n }\n\n createExtensions() {\n return [new TableSelectorExtension()]\n }\n\n createCommands() {\n return {\n selectTableCell: ({ pos }: { pos: number }): CommandFunction => {\n return ({ tr, dispatch }): boolean => {\n if (selectCell(tr, pos)) {\n dispatch?.(tr)\n return true\n }\n return false\n }\n },\n }\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'th',\n node: this.name,\n hasOpenClose: true,\n },\n {\n type: ParserRuleType.block,\n token: 'td',\n node: this.name,\n hasOpenClose: true,\n },\n ] as const\n }\n\n public toMarkdown() {}\n}\n\nexport function replaceNewLines(str: string) {\n const replacedStr = str.replace(/\\n/g, '')\n return replacedStr\n}\n\n/**\n * \u5BF9\u4E8E\u7ED9\u5B9A\u7684\u5B50\u8282\u70B9\u6570\u7EC4\u5408\u5E76 text \u7C7B\u578B\uFF0C\u518D\u8FD4\u56DE\u5B83\u4EEC\u5728\u7236\u8282\u70B9\u4E2D\u7684\u4F4D\u7F6E\u3002\n * @param childs\n */\nexport function getNodePositionByCellContent(cellContent: Fragment) {\n const nodePositions = [\n {\n start: 0,\n end: cellContent.firstChild?.nodeSize || 0,\n isText: cellContent.firstChild?.isText || false,\n },\n ]\n let prev = nodePositions[0]\n\n // \u9996\u5148\u6536\u96C6\u6240\u6709\u6587\u672C\u8282\u70B9\u53CA\u5176\u4F4D\u7F6E\u4FE1\u606F\n for (let i = 1; i < cellContent.childCount; i++) {\n const child = cellContent.child(i)\n if (child.isText && prev?.isText) {\n prev.end += child.nodeSize\n } else {\n const start = prev.end\n nodePositions.push({\n start,\n end: start + child.nodeSize,\n isText: child.isText,\n })\n prev = nodePositions[nodePositions.length - 1]\n }\n }\n\n return nodePositions\n}\n", "import type { DispatchFunction, KeyBindings, ProsemirrorNode } from \"@rme-sdk/core\";\nimport { convertCommand, isTextSelection } from \"@rme-sdk/core\";\nimport { Fragment } from \"@rme-sdk/pm/model\";\nimport type { EditorState, Transaction } from \"@rme-sdk/pm/state\";\n\nexport function buildBlockEnterKeymap<Node extends ProsemirrorNode>(\n regex: RegExp,\n getNode: (args: { match: string[]; start: number; end: number }) => Node,\n transact?: (args: { tr: Transaction }) => Transaction,\n): KeyBindings {\n // https://github.com/ProseMirror/prosemirror/issues/374#issuecomment-224514332\n // https://discuss.prosemirror.net/t/trigger-inputrule-on-enter/1118/4\n // Some code is copy from prosemirror-inputrules/src/inputrules.js\n return {\n Enter: convertCommand((state: EditorState, dispatch?: DispatchFunction) => {\n // Ensure that the selection is a TextSelection\n if (!isTextSelection(state.selection)) return false\n\n // Ensure that the selection is cursor (empty selection)\n const $cursor = state.selection.$cursor\n if (!$cursor) return false\n\n // Get the text before the selection\n const { nodeBefore } = state.selection.$from\n const textBefore = nodeBefore && nodeBefore.isText && nodeBefore.text\n if (!textBefore) return false\n\n // Execute the regular expression\n const match = regex.exec(textBefore)\n if (!match) return false\n\n // The range of text which will be replaced\n const [start, end] = [$cursor.pos - match[0].length, $cursor.pos]\n const $start = state.doc.resolve(start)\n\n const node = getNode({ match, start, end })\n\n // Ensure that the replacement is available\n const parent = $start.node(-1)\n const replaceFromIndex = $start.index(-1)\n const replaceToIndex = $start.indexAfter(-1)\n if (!parent.canReplace(replaceFromIndex, replaceToIndex, Fragment.from(node))) {\n return false\n }\n\n let tr: Transaction = state.tr\n\n // Insert the Prosemirror node\n tr = tr.replaceRangeWith(start, end, node)\n\n // Run transact\n if (transact) {\n tr = transact({ tr })\n }\n\n if (dispatch) {\n // To be able to query whether a command is applicable for a given state, without\n // actually executing it, the `dispatch` argument is optional\u2014commands should\n // simply return true without doing anything when they are applicable but no\n // `dispatch` argument is given\n // https://prosemirror.net/docs/guide/#commands\n dispatch(tr)\n }\n return true\n }),\n }\n}\n", "import { findParentNodeOfType } from '@rme-sdk/core'\nimport { Transaction } from '@rme-sdk/pm/state'\nimport { CellSelection, TableMap } from '@rme-sdk/pm/tables'\n\nexport function selectRow(tr: Transaction, pos: number): boolean {\n const cell = findParentNodeOfType({ selection: tr.doc.resolve(pos), types: 'tableCell' })\n\n if (!cell) {\n return false\n }\n\n tr.setSelection(CellSelection.rowSelection(tr.doc.resolve(cell.pos)))\n return true\n}\n\nexport function selectColumn(tr: Transaction, pos: number): boolean {\n const cell = findParentNodeOfType({ selection: tr.doc.resolve(pos), types: 'tableCell' })\n\n if (!cell) {\n return false\n }\n\n tr.setSelection(CellSelection.colSelection(tr.doc.resolve(cell.pos)))\n return true\n}\n\nexport function selectTable(tr: Transaction, pos: number): boolean {\n const table = findParentNodeOfType({ selection: tr.doc.resolve(pos), types: 'table' })\n\n if (!table) {\n return false\n }\n\n const map = TableMap.get(table.node)\n\n if (!map.map.length) {\n return false\n }\n\n const firstCellPos = map.map[0]\n const lastCellPos = map.map[map.map.length - 1]\n\n tr.setSelection(\n CellSelection.create(tr.doc, table.start + firstCellPos, table.start + lastCellPos),\n )\n return true\n}\n\nexport function selectCell(tr: Transaction, pos: number): boolean {\n tr.setSelection(CellSelection.create(tr.doc, pos))\n return true\n}\n", "import { PlainExtension } from \"@rme-sdk/core\"\nimport { EditorState } from \"@rme-sdk/pm/state\"\nimport { DecorationSet } from \"@rme-sdk/pm/view\"\n\nimport { createSelectorDecorations } from \"./table-selector\"\n\nexport class TableSelectorExtension extends PlainExtension {\n get name() {\n return \"tableSelector\"\n }\n\n createDecorations(state: EditorState): DecorationSet {\n return createSelectorDecorations(state)\n }\n}\n", "import { cx } from '@rme-sdk/core'\nimport { EditorState } from '@rme-sdk/pm'\nimport { isCellSelection, TableMap } from '@rme-sdk/pm/tables'\nimport { Decoration, DecorationSet, EditorView } from '@rme-sdk/pm/view'\nimport { createElement as h } from '../../utils/dom'\nimport { selectColumn, selectRow, selectTable } from './table-helpers'\nimport {\n findTable,\n getCellSelectionRect,\n getCellSelectionType,\n getCellsInColumn,\n getCellsInRect,\n getCellsInRow,\n} from './table-utils'\n\nexport const DATA_TABLE_SELECTOR_TYPE = 'data-table-selector-type'\n\nconst preventDefaultMouseEventHandler = (event: MouseEvent) => {\n event.preventDefault()\n}\n\nfunction createBodySelector(\n view: EditorView,\n getPos: () => number | undefined,\n highlight: boolean,\n): HTMLElement {\n const dom = h('div', {\n class: cx(\n 'rme-table-body-selector rme-table-selector',\n highlight && 'rme-table-selector-highlight',\n ),\n contenteditable: 'false',\n [DATA_TABLE_SELECTOR_TYPE]: 'body',\n onmousedown: preventDefaultMouseEventHandler,\n onmouseup: preventDefaultMouseEventHandler,\n onclick: (event) => {\n event.preventDefault()\n const pos = getPos()\n if (!pos) return\n const tr = view.state.tr\n if (selectTable(tr, pos)) {\n view.dispatch(tr)\n }\n },\n })\n\n // Add a grip icon (6 dots)\n dom.innerHTML = `<svg viewBox=\"0 0 24 24\" width=\"100%\" height=\"100%\" fill=\"currentColor\" style=\"display: block;\"><path d=\"M10 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm-4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z\"></path></svg>`\n\n return dom\n}\n\nfunction createRowSelector(\n view: EditorView,\n getPos: () => number | undefined,\n highlight: boolean,\n): HTMLElement {\n return h('div', {\n class: cx(\n 'rme-table-row-selector rme-table-selector',\n highlight && 'rme-table-selector-highlight',\n ),\n contenteditable: 'false',\n [DATA_TABLE_SELECTOR_TYPE]: 'row',\n onmousedown: preventDefaultMouseEventHandler,\n onmouseup: preventDefaultMouseEventHandler,\n onclick: (event) => {\n event.preventDefault()\n const pos = getPos()\n if (!pos) return\n const tr = view.state.tr\n if (selectRow(tr, pos)) {\n view.dispatch(tr)\n }\n },\n })\n}\n\nfunction createColumnSelector(\n view: EditorView,\n getPos: () => number | undefined,\n highlight: boolean,\n): HTMLElement {\n return h('div', {\n class: cx(\n 'rme-table-column-selector rme-table-selector',\n highlight && 'rme-table-selector-highlight',\n ),\n contenteditable: 'false',\n [DATA_TABLE_SELECTOR_TYPE]: 'column',\n onmousedown: preventDefaultMouseEventHandler,\n onmouseup: preventDefaultMouseEventHandler,\n onclick: (event) => {\n event.preventDefault()\n const pos = getPos()\n if (!pos) return\n const tr = view.state.tr\n if (selectColumn(tr, pos)) {\n view.dispatch(tr)\n }\n },\n })\n}\n\nexport function createSelectorDecorations(state: EditorState): DecorationSet {\n const { doc, selection } = state\n\n const table = findTable(selection)\n\n if (!table) {\n return DecorationSet.empty\n }\n\n const map = TableMap.get(table.node)\n\n if (!map.map.length) {\n return DecorationSet.empty\n }\n\n const decos: Decoration[] = []\n\n const selectionType = isCellSelection(selection) ? getCellSelectionType(selection) : null\n\n let minHighlightRow = -1\n let maxHighlightRow = -1\n let minHighlightCol = -1\n let maxHighlightCol = -1\n\n if (isCellSelection(selection)) {\n if (selectionType === 'table') {\n minHighlightRow = 0\n maxHighlightRow = map.height - 1\n minHighlightCol = 0\n maxHighlightCol = map.width - 1\n } else if (selectionType === 'row') {\n const rect = getCellSelectionRect(selection)\n minHighlightRow = rect.top\n maxHighlightRow = rect.bottom - 1\n } else if (selectionType === 'column') {\n const rect = getCellSelectionRect(selection)\n minHighlightCol = rect.left\n maxHighlightCol = rect.right - 1\n }\n }\n\n const spec = {\n side: -1,\n ignoreSelection: true,\n } as const\n\n const cornerCell = getCellsInRect(selection, { top: 0, bottom: 1, left: 0, right: 1 })[0]\n\n decos.push(\n Decoration.widget(\n cornerCell.pos + 1,\n (view, getPos) => createBodySelector(view, getPos, selectionType === 'table'),\n { ...spec, key: `table-body-selector-${selectionType === 'table'}` },\n ),\n )\n\n getCellsInColumn(selection, 0).forEach((cell, rowIndex) => {\n const highlight = rowIndex >= minHighlightRow && rowIndex <= maxHighlightRow\n decos.push(\n Decoration.widget(\n cell.pos + 1,\n (view, getPos) => createRowSelector(view, getPos, highlight),\n { ...spec, key: `table-row-selector-${rowIndex}-${highlight}` },\n ),\n )\n })\n\n getCellsInRow(selection, 0).forEach((cell, colIndex) => {\n const highlight = colIndex >= minHighlightCol && colIndex <= maxHighlightCol\n decos.push(\n Decoration.widget(\n cell.pos + 1,\n (view, getPos) => createColumnSelector(view, getPos, highlight),\n { ...spec, key: `table-column-selector-${colIndex}-${highlight}` },\n ),\n )\n })\n\n return DecorationSet.create(doc, decos)\n}\n", "import { getDocument, getId } from '@ocavue/utils'\n\ntype ElementEventHandlers = Partial<\n Omit<\n GlobalEventHandlers,\n 'addEventListener' | 'addEventListener' | 'removeEventListener' | 'removeEventListener'\n >\n>\n\ntype ElementAttributes = ElementEventHandlers | Record<string, string>\n\nexport function createElement<TagName extends keyof HTMLElementTagNameMap>(\n tagName: TagName,\n attributes?: ElementAttributes | null,\n ...children: Array<HTMLElement | string>\n) {\n const element = document.createElement(tagName)\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n if (typeof value === 'string') {\n element.setAttribute(key, value)\n } else {\n element[key as keyof ElementEventHandlers] = value\n }\n })\n }\n if (children.length) {\n element.append(...children)\n }\n return element\n}\n\nexport function isTableCellElement(el: Element | null | undefined): el is HTMLTableCellElement {\n if (!el) {\n return false\n }\n return el.nodeName === 'TD' || el.nodeName === 'TH'\n}\n\n/**\n * Creates a deep clone of an Element, including all computed styles so that\n * it looks almost exactly the same as the original element.\n */\nexport function deepCloneElement<T extends Element>(element: T, important = false): [T, string] {\n const clonedElement = element.cloneNode(true) as T\n const style = deepCopyStyles(element, clonedElement, important)\n return [clonedElement, style]\n}\nfunction deepCopyStyles(source: Element, target: Element, important: boolean): string {\n const sources = [source]\n const targets = [target]\n const styles: string[] = []\n\n while (sources.length > 0 && sources.length === targets.length) {\n const source = sources.shift()\n const target = targets.shift()\n\n if (!source || !target) {\n break\n }\n\n const style = copyStyles(source, target, important)\n if (style) {\n styles.push(style)\n }\n\n // \u4F7F\u7528 concat \u786E\u4FDD\u5B50\u5143\u7D20\u6309\u7167\u6B63\u786E\u7684\u987A\u5E8F\u6DFB\u52A0\n sources.push(...Array.from(source.children))\n targets.push(...Array.from(target.children))\n }\n\n return styles.join('\\n')\n}\n\nfunction copyStyles(source: Element, target: Element, important: boolean): string {\n if (!source || !target) {\n return ''\n }\n\n const view = source.ownerDocument?.defaultView\n if (!view) {\n return ''\n }\n\n // Known issue: pseudo styles are not copied.\n const sourceStyle = view.getComputedStyle(source)\n const targetStyle = (target as HTMLElement | SVGElement | MathMLElement).style\n\n if (!sourceStyle || !targetStyle) {\n return ''\n }\n\n for (const key of sourceStyle) {\n targetStyle.setProperty(\n key,\n sourceStyle.getPropertyValue(key),\n // Enforce important to avoid the style being overridden when the element\n // is connected to the page.\n // See https://github.com/prosekit/prosekit/issues/1185 for more details.\n important ? 'important' : sourceStyle.getPropertyPriority(key) || '',\n )\n }\n\n const styles: string[] = []\n for (const pseudoSelector of [':before', ':after']) {\n const sourcePseudoStyle = view.getComputedStyle(source, pseudoSelector)\n const targetPseudoStyle = view.getComputedStyle(target, pseudoSelector)\n\n if (!sourcePseudoStyle) {\n continue\n }\n\n const content = sourcePseudoStyle.getPropertyValue('content')\n const hasPseudoElement = content && content !== 'none' && content !== 'normal'\n\n if (!hasPseudoElement) {\n continue\n }\n\n const cssProps: string[] = []\n for (const property of sourcePseudoStyle) {\n const sourceValue = sourcePseudoStyle.getPropertyValue(property)\n const sourcePriority = sourcePseudoStyle.getPropertyPriority(property)\n const targetValue = targetPseudoStyle.getPropertyValue(property)\n const targetPriority = targetPseudoStyle.getPropertyPriority(property)\n if (sourceValue !== targetValue || sourcePriority !== targetPriority) {\n cssProps.push(`${property}: ${sourceValue}${sourcePriority ? ' !important' : ''};`)\n }\n }\n\n const uniqueClassName = `clone-pseudo-element-${getId()}`\n target.classList.add(uniqueClassName)\n styles.push(`.${uniqueClassName}${pseudoSelector} { ${cssProps.join(' ')} }`)\n }\n\n return styles.join('\\n')\n}\n\nexport function injectStyle(container: HTMLElement, styleText: string): void {\n if (!styleText) {\n return\n }\n const document = getDocument(container)\n const style = document.createElement('style')\n style.textContent = styleText\n container.appendChild(style)\n}\n\nexport function addLabelToDom(\n dom: HTMLElement,\n params: {\n iconName?: string\n labelName: string\n },\n) {\n const { iconName = 'ri-expand-left-right-line', labelName = '' } = params\n const iconCls = ['cm-render-node-label-icon', iconName].join(' ')\n\n const label = document.createElement('span')\n label.innerHTML = `<i class=\"${iconCls}\"></i>${labelName}`\n label.classList.add('cm-render-node-label')\n\n dom.appendChild(label)\n dom.classList.add('cm-render-node')\n\n return label\n}\n", "import { findParentNodeOfType, FindProsemirrorNodeResult, NodeWithPosition } from '@rme-sdk/core'\nimport { TableSchemaSpec } from '@rme-sdk/extension-tables'\nimport { EditorState, NodeType, ResolvedPos, Selection } from '@rme-sdk/pm'\nimport { CellSelection, Rect, TableMap } from '@rme-sdk/pm/tables'\n\nexport function findTable(selection: EditorState | Selection | ResolvedPos) {\n return findParentNodeOfType({ selection, types: 'table' })\n}\n\nfunction findCellsInReat(\n table: FindProsemirrorNodeResult,\n map: TableMap,\n rect: { top: number; bottom: number; left: number; right: number },\n): NodeWithPosition[] {\n return map.cellsInRect(rect).map((cellPos) => {\n const node = table.node.nodeAt(cellPos)\n const pos = cellPos + table.start\n if (!node) throw new RangeError(`unable to find a table cell node at position ${pos}`)\n return { node, pos }\n })\n}\n\nexport function getCellsInColumn(\n selection: EditorState | Selection | ResolvedPos,\n columnIndex: number,\n): NodeWithPosition[] {\n const table = findTable(selection)\n if (!table) return []\n const map = TableMap.get(table.node)\n if (columnIndex < 0 || columnIndex >= map.width) return []\n return findCellsInReat(table, map, {\n top: 0,\n bottom: map.height,\n left: columnIndex,\n right: columnIndex + 1,\n })\n}\n\nexport function getCellsInRow(\n selection: EditorState | Selection | ResolvedPos,\n rowIndex: number,\n): NodeWithPosition[] {\n const table = findTable(selection)\n if (!table) return []\n const map = TableMap.get(table.node)\n if (rowIndex < 0 || rowIndex >= map.height) return []\n return findCellsInReat(table, map, {\n top: rowIndex,\n bottom: rowIndex + 1,\n left: 0,\n right: map.width,\n })\n}\n\nexport function getCellsInRect(\n selection: Selection,\n rect: { top: number; bottom: number; left: number; right: number },\n): NodeWithPosition[] {\n const table = findTable(selection)\n if (!table) return []\n const map = TableMap.get(table.node)\n return findCellsInReat(table, map, rect)\n}\n\n/**\n * All available cell selection type.\n *\n * @remarks\n *\n * - \"table\": This selection includes all cells in the table.\n * - \"row\": This selection goes all the way from the left to the right of the table.\n * - \"column\": This selection goes all the way from the top to the bottom of the table.\n * - \"cell\": This selection is neither any of the above. *\n */\nexport type CellSelectionType = 'table' | 'row' | 'column' | 'cell'\n\nconst cellSelectionTypeCache = new WeakMap<CellSelection, CellSelectionType>()\n\n/**\n * Returns the type of the cell selection if it is a cell selection.\n */\nexport function getCellSelectionType(selection: CellSelection): CellSelectionType {\n let type = cellSelectionTypeCache.get(selection)\n if (!type) {\n type = calcCellSelectionType(selection)\n cellSelectionTypeCache.set(selection, type)\n }\n return type\n}\n\nfunction calcCellSelectionType(selection: CellSelection): CellSelectionType {\n const isColSelection = selection.isColSelection()\n const isRowSelection = selection.isRowSelection()\n\n if (isColSelection && isRowSelection) {\n return 'table'\n } else if (isColSelection) {\n return 'column'\n } else if (isRowSelection) {\n return 'row'\n } else {\n return 'cell'\n }\n}\n\nexport function getCellSelectionRect(selection: CellSelection): Rect {\n const table = selection.$anchorCell.node(-1)\n const map = TableMap.get(table)\n const start = selection.$anchorCell.start(-1)\n return map.rectBetween(selection.$anchorCell.pos - start, selection.$headCell.pos - start)\n}\n\n/**\n * Count the number of cells in the given cell selection. Noting that this\n * may be inaccurate if the selection contains merged cells.\n */\nexport function countCellSelection(selection: CellSelection): number {\n const rect = getCellSelectionRect(selection)\n return (rect.right - rect.left) * (rect.bottom - rect.top)\n}\n\nexport function isTableType(type: NodeType): boolean {\n return (type.spec as TableSchemaSpec).tableRole === 'table'\n}\n\nexport function isRowType(type: NodeType): boolean {\n return (type.spec as TableSchemaSpec).tableRole === 'row'\n}\n\nexport function isCellType(type: NodeType): boolean {\n return (type.spec as TableSchemaSpec).tableRole === 'cell'\n}\n", "import type {\n ApplySchemaAttributes,\n ExtensionCommandReturn,\n NodeExtensionSpec,\n NodeSpecOverride\n} from '@rme-sdk/core'\nimport { extension, ExtensionTag, NodeExtension } from '@rme-sdk/core'\nimport { TextSelection } from '@rme-sdk/pm/state'\nimport type { NodeViewComponentProps } from '@rme-sdk/react'\nimport type { ComponentType } from 'react'\nimport { AINodeView } from './ai-nodeview'\nimport type { AIOptions } from './ai-types'\n\n@extension<AIOptions>({\n defaultOptions: {\n supportProviderInfosMap: {\n openai: {\n models: ['gpt-3.5-turbo', 'gpt-4']\n },\n },\n },\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class AIExtension extends NodeExtension<AIOptions> {\n get name() {\n return 'ai_block' as const\n }\n\n createTags() {\n return [ExtensionTag.Block, ExtensionTag.Media]\n }\n\n ReactComponent: ComponentType<NodeViewComponentProps> | undefined = (props) => {\n return (\n <AINodeView\n {...props}\n {...this.options}\n />\n )\n }\n\n createCommands(): ExtensionCommandReturn {\n return {\n createAiBlock: () => (props) => {\n const { tr, dispatch, state } = props\n if (!tr.selection.empty) {\n return false\n }\n\n const offset = tr.selection.anchor\n\n const node = this.type.create({})\n\n dispatch?.(\n tr\n .replaceSelectionWith(node)\n .scrollIntoView()\n .setSelection(TextSelection.near(tr.doc.resolve(offset))),\n )\n return true\n }\n }\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n inline: false,\n selectable: true,\n ...override,\n attrs: {\n ...extra.defaults(),\n },\n }\n }\n}\n", "import type { NodeViewComponentProps } from '@rme-sdk/react'\nimport { t } from 'i18next'\nimport { useEffect, useRef, useState } from 'react'\nimport styled from 'styled-components'\nimport { Button, Menu } from 'zens'\nimport { getTransformerByView } from '../Transformer/utils'\nimport { AIOptions } from './ai-types'\n\nenum AINodeViewStatus {\n WAITASK,\n LOADING,\n SUCCESS,\n ERROR,\n}\n\ninterface AINodeViewProps extends NodeViewComponentProps, AIOptions {}\n\nexport function AINodeView(props: AINodeViewProps) {\n const { supportProviderInfosMap, generateText, getPosition, defaultSelectProvider } = props\n const pos = getPosition()\n\n const [status, setStatus] = useState(AINodeViewStatus.WAITASK)\n\n const providers = Object.keys(supportProviderInfosMap)\n const [selectedProvider, setSelectedProvider] = useState(defaultSelectProvider || providers[0])\n\n const providerInfo = supportProviderInfosMap[selectedProvider]\n const [selectedModel, setSelectedModel] = useState(providerInfo.models[0])\n\n const [generatedText, setGeneratedText] = useState('')\n const [prompt, setPrompt] = useState('')\n const inputRef = useRef<HTMLTextAreaElement>(null)\n const controllerRef = useRef<AbortController | null>(null)\n\n useEffect(() => {\n inputRef.current?.focus()\n }, [])\n\n const transformer = getTransformerByView(props.view)\n\n const generateTextHandler = async () => {\n setStatus(AINodeViewStatus.LOADING)\n try {\n if (controllerRef.current) {\n controllerRef.current.abort()\n }\n controllerRef.current = new AbortController()\n\n const text = await generateText({\n provider: selectedProvider,\n model: selectedModel,\n prompt: prompt,\n })\n\n if (controllerRef.current?.signal.aborted) {\n return\n }\n\n if (text) {\n setGeneratedText(text)\n setStatus(AINodeViewStatus.SUCCESS)\n } else {\n setStatus(AINodeViewStatus.ERROR)\n }\n } catch (error) {\n setStatus(AINodeViewStatus.ERROR)\n }\n }\n const renderActionButton = () => {\n switch (status) {\n case AINodeViewStatus.WAITASK:\n return (\n <Button size=\"small\" btnType=\"primary\" onClick={generateTextHandler}>\n <i className=\"ri-bard-line\"></i>\n {t('ai.generate')}\n </Button>\n )\n case AINodeViewStatus.LOADING:\n return [\n <Button size=\"small\" disabled key=\"loading\">\n {t('common.loading')}...\n </Button>,\n <Button\n size=\"small\"\n key=\"stop\"\n onClick={() => {\n controllerRef.current?.abort()\n setStatus(AINodeViewStatus.WAITASK)\n }}\n >\n <i className=\"ri-stop-line\"></i>\n {t('ai.stop')}\n </Button>,\n ]\n case AINodeViewStatus.SUCCESS:\n return [\n <Button\n size=\"small\"\n btnType=\"primary\"\n key=\"accept\"\n onClick={() => {\n if (generatedText) {\n try {\n const doc = transformer.stringToDoc?.(generatedText)\n if (doc && pos !== undefined) {\n const transaction = props.view.state.tr.replaceWith(pos, pos + 1, doc)\n props.view.dispatch(transaction)\n }\n } catch (error) {\n console.log('ai-node error', error)\n }\n }\n }}\n >\n {t('common.accept')}\n </Button>,\n <Button size=\"small\" key=\"regenerate\" onClick={generateTextHandler}>\n {t('ai.regenerate')}\n </Button>,\n ]\n case AINodeViewStatus.ERROR:\n return (\n <Button size=\"small\" btnType=\"primary\" onClick={generateTextHandler}>\n {t('ai.retry')}\n </Button>\n )\n }\n }\n\n const renderPreview = () => {\n if (status === AINodeViewStatus.WAITASK) {\n return null\n } else if (status === AINodeViewStatus.LOADING) {\n return <StatusTitle key={AINodeViewStatus.LOADING}>{t('common.loading')}...</StatusTitle>\n } else if (status === AINodeViewStatus.SUCCESS) {\n return (\n <div>\n <StatusTitle key={AINodeViewStatus.SUCCESS}>{t('ai.preview')}</StatusTitle>\n <blockquote>{generatedText}</blockquote>\n </div>\n )\n } else if (status === AINodeViewStatus.ERROR) {\n return <ErrorStatueTitle>{t('ai.error')}</ErrorStatueTitle>\n }\n }\n\n return (\n <Container>\n <div>\n {renderPreview()}\n <StatusTitle>{t('ai.prompt')}</StatusTitle>\n <InputAskTextarea\n ref={inputRef}\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n />\n </div>\n <div className=\"divider\"></div>\n <BottomBar>\n <AIInfo>\n <Menu\n menuButtonProps={{\n size: 'small',\n style: {\n marginRight: '8px',\n },\n }}\n items={providers.map((provider) => ({\n label: provider,\n value: provider,\n handler: () => {\n setSelectedProvider(provider)\n setSelectedModel(supportProviderInfosMap[provider]?.models[0])\n },\n }))}\n >\n {selectedProvider || 'Select Provider'}\n </Menu>\n <Menu\n menuButtonProps={{\n size: 'small',\n }}\n items={providerInfo.models.map((model) => ({\n label: model,\n value: model,\n handler: () => {\n setSelectedModel(model)\n },\n }))}\n >\n {selectedModel || 'Select Model'}\n </Menu>\n </AIInfo>\n <ActionButtonGroup>{renderActionButton()}</ActionButtonGroup>\n </BottomBar>\n </Container>\n )\n}\n\nconst Container = styled.div`\n padding: 16px;\n border: 1px solid ${(props) => props.theme.borderColor};\n user-select: none;\n -webkit-user-select: none;\n border-radius: ${(props) => props.theme.smallBorderRadius};\n\n & .divider {\n margin: 8px 0;\n border-bottom: 1px solid ${(props) => props.theme.borderColor};\n }\n`\n\nconst AIInfo = styled.div`\n display: flex;\n margin-bottom: 8px;\n font-size: 12px;\n margin-right: 8px;\n user-select: none;\n -webkit-user-select: none;\n`\n\nconst InputAskTextarea = styled.textarea`\n width: -webkit-fill-available;\n min-height: 80px;\n max-height: 200px;\n padding: 8px;\n border-radius: 4px;\n resize: none;\n border: 1px solid ${(props) => props.theme.borderColor};\n background-color: ${(props) => props.theme.borderColor};\n color: inherit;\n\n &:focus {\n background-color: transparent;\n }\n`\n\nconst StatusTitle = styled.div`\n margin-right: 8px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: bold;\n user-select: none;\n -webkit-user-select: none;\n`\n\nconst ErrorStatueTitle = styled.div`\n margin-right: 8px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: bold;\n color: ${(props) => props.theme.warnColor};\n user-select: none;\n -webkit-user-select: none;\n`\n\nconst BottomBar = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n\nconst ActionButtonGroup = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`\n", "import { EditorView } from '@rme-sdk/main'\nimport { TransformerMenuState } from './transformer-extension'\n\nexport const getTransformerByView = (view: EditorView): Partial<TransformerMenuState> => {\n const ext = view.state.plugins.find((plugin) => {\n return plugin.spec.initialState?.isTransformerFlag === true\n })\n\n return ext?.getState(view.state) || {}\n}\n", "import { BlockquoteExtension } from '@rme-sdk/main/extensions'\n\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\n\nexport class LineBlockquoteExtension extends BlockquoteExtension {\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'blockquote',\n node: this.name,\n hasOpenClose: true,\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n state.wrapBlock('> ', null, node, () => state.renderContent(node))\n }\n}\n", "import { ClipboardReadFunction } from '@/editor/utils/clipboard-read'\nimport type { CommandFunction, CreateExtensionPlugin, EditorView } from '@rme-sdk/core'\nimport { extension, PlainExtension } from '@rme-sdk/core'\nimport { DOMParser, Fragment, Node, Slice } from '@rme-sdk/pm/model'\nimport { getTransformerByView } from '../Transformer/utils'\n\ntype UnknownRecord = Record<string, unknown>\nfunction isPureText(content: UnknownRecord | UnknownRecord[] | undefined | null): boolean {\n if (!content) return false\n if (Array.isArray(content)) {\n if (content.length > 1) return false\n return isPureText(content[0])\n }\n\n const child = content.content\n if (child) return isPureText(child as UnknownRecord[])\n\n return content.type === 'text'\n}\n\nfunction isTextOnlySlice(slice: Slice): Node | false {\n if (slice.content.childCount === 1) {\n const node = slice.content.firstChild\n if (node?.type.name === 'text' && node.marks.length === 0) return node\n\n if (node?.type.name === 'paragraph' && node.childCount === 1) {\n const _node = node.firstChild\n if (_node?.type.name === 'text' && _node.marks.length === 0) return _node\n }\n }\n\n return false\n}\n\ntype ClipboardExtensionOptions = {\n imagePasteHandler?: (src: string) => Promise<string>\n clipboardReadFunction?: ClipboardReadFunction\n ignoredNodeTypes?: string[]\n}\n\n@extension<ClipboardExtensionOptions>({\n defaultOptions: { ignoredNodeTypes: [] },\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class ClipboardExtension extends PlainExtension<ClipboardExtensionOptions> {\n get name() {\n return 'clipboard' as const\n }\n\n createPlugin(): CreateExtensionPlugin {\n return {\n props: {\n handlePaste: (view, event) => {\n const { clipboardData } = event\n if (!clipboardData) return false\n\n const currentNode = view.state.selection.$from.node()\n if (currentNode.type.spec.code) return false\n\n const text = clipboardData.getData('text/plain')\n const html = clipboardData.getData('text/html')\n\n this.handleClipboardData({ text, html, view })\n\n return true\n },\n clipboardTextSerializer: (slice, view) => {\n const schema = view.state.schema\n const transformer = getTransformerByView(view)\n const serializer = transformer.docToString\n const isText = isPureText(slice.content.toJSON())\n if (isText)\n return (slice.content as unknown as Node).textBetween(0, slice.content.size, '\\n\\n')\n\n const doc = schema.topNodeType.createAndFill(undefined, slice.content)\n if (!doc) return ''\n const value = serializer?.(doc) || ''\n\n return value\n },\n transformCopied: (slice) => {\n // \u9012\u5F52\u8FC7\u6EE4\u8282\u70B9\u51FD\u6570\n const filterNode = (node: Node): Node[] => {\n // \u68C0\u67E5\u8282\u70B9\u7684marks\u662F\u5426\u6709ignoreWhenCopy=true\u5C5E\u6027\n const hasIgnoreMark = node.marks.some(\n (mark) => mark.attrs?.ignoreWhenCopy === true && node.type.name === 'text',\n )\n\n if (hasIgnoreMark) {\n // \u5982\u679C\u8282\u70B9\u6709ignoreWhenCopy=true\u7684mark\uFF0C\u8FD4\u56DE\u5176\u5B50\u8282\u70B9\n const result: Node[] = []\n if (node.content && node.content.size > 0) {\n node.content.forEach((child) => {\n result.push(...filterNode(child))\n })\n }\n return result\n } else {\n // \u5982\u679C\u8282\u70B9\u6CA1\u6709ignoreWhenCopy=true\u7684mark\uFF0C\u68C0\u67E5\u662F\u5426\u9700\u8981\u8FC7\u6EE4\u5176\u5B50\u8282\u70B9\n if (node.content && node.content.size > 0) {\n const filteredChildren: Node[] = []\n node.content.forEach((child) => {\n filteredChildren.push(...filterNode(child))\n })\n // \u5982\u679C\u5B50\u8282\u70B9\u88AB\u8FC7\u6EE4\u4E86\uFF0C\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u8282\u70B9\n if (filteredChildren.length !== node.content.childCount) {\n return [node.copy(Fragment.from(filteredChildren))]\n }\n }\n // \u5426\u5219\u8FD4\u56DE\u8282\u70B9\u672C\u8EAB\n return [node]\n }\n }\n\n const filteredContent: Node[] = []\n // \u8FC7\u6EE4\u6389\u6709ignoreWhenCopy=true\u5C5E\u6027\u7684\u8282\u70B9\n slice.content.forEach((node) => {\n filteredContent.push(...filterNode(node))\n })\n\n // \u521B\u5EFA\u65B0\u7684fragment\u548Cslice\n const newFragment = Fragment.from(filteredContent)\n return new Slice(newFragment, slice.openStart, slice.openEnd)\n },\n },\n }\n }\n\n createCommands() {\n return {\n copy: (): CommandFunction => {\n return (props) => {\n if (props.tr.selection.empty) {\n return false\n }\n\n if (props.dispatch) {\n document.execCommand('copy')\n }\n\n return true\n }\n },\n paste: (): CommandFunction => {\n return (params) => {\n const { view } = params\n if (!view) return false\n\n if (!this.options.clipboardReadFunction) {\n return false\n }\n\n this.options.clipboardReadFunction().then(async (data) => {\n let { html, text } = data\n if (!html && !text) return false\n\n return await this.handleClipboardData({ html, text, view })\n })\n\n return true\n }\n },\n cut: (): CommandFunction => {\n return (props) => {\n if (props.tr.selection.empty) {\n return false\n }\n\n if (props.dispatch) {\n document.execCommand('cut')\n }\n\n return true\n }\n },\n }\n }\n\n handleClipboardData = async ({\n html = '',\n text = '',\n view,\n }: {\n html: string\n text: string\n view: EditorView\n }) => {\n console.log('clipboard html', html)\n console.log('clipboard text', text)\n const editable = view.props.editable?.(view.state)\n if (!editable) return false\n\n const currentNode = view.state.selection.$from.node()\n if (currentNode.type.spec.code) return false\n\n if (html.length === 0 && text.length === 0) return false\n\n const transformer = getTransformerByView(view)\n\n const parser = transformer.stringToDoc\n const schema = view.state.schema\n const domParser = DOMParser.fromSchema(schema)\n let dom\n if (html.length === 0) {\n const slice = parser?.(text)\n\n if (!slice || typeof slice === 'string') return false\n\n const nodes: Node[] = []\n slice.content.forEach((node, index) => {\n if (node.type.name === 'paragraph' && index === 0) {\n node.content.forEach((child) => {\n nodes.push(child)\n })\n } else {\n nodes.push(node)\n }\n })\n\n this.processImagesInNodesSync(nodes, view)\n\n if (nodes.length === 1) {\n view.dispatch(view.state.tr.replaceSelectionWith(nodes[0], false))\n } else {\n const fragment = Fragment.from(nodes)\n view.dispatch(view.state.tr.replaceSelection(new Slice(fragment, 0, 0)))\n }\n\n return true\n } else {\n const template = document.createElement('template')\n template.innerHTML = html\n dom = template.content.cloneNode(true) as DocumentFragment\n\n try {\n const links = dom.querySelectorAll('a')\n links.forEach((link: HTMLAnchorElement) => {\n const href = link.getAttribute('href')\n const text = link.textContent || ''\n if (href) {\n link.textContent = `[${text}](${href})`\n }\n })\n } catch (error) {}\n template.remove()\n }\n\n const slice = domParser.parseSlice(dom)\n const node = isTextOnlySlice(slice)\n if (node) {\n // @ts-ignore\n node.attrs['data-rme-from-paste'] = 'true'\n view.dispatch(view.state.tr.replaceSelectionWith(node, true))\n\n return true\n }\n\n this.processImagesInSliceAsync(slice, view)\n view.dispatch(view.state.tr.replaceSelection(slice))\n return true\n }\n\n /**\n * Process a single image node asynchronously and update its src attribute using imagePasteHandler\n */\n private processImageNode(node: Node, view: EditorView) {\n // @ts-ignore\n node.attrs['data-rme-from-paste'] = 'true'\n }\n\n /**\n * Process images in a slice asynchronously and update their src attributes using imagePasteHandler\n */\n private processImagesInSliceAsync(slice: Slice, view: any) {\n const imageNodes: { node: Node; pos: number }[] = []\n let currentPos = 0\n\n const findImageNodes = (node: Node, pos: number) => {\n if ((node.type.name === 'html_image' || node.type.name === 'md_image') && node.attrs.src) {\n imageNodes.push({ node, pos })\n }\n\n if (node.content && node.content.size > 0) {\n node.content.forEach((child, offset) => {\n findImageNodes(child, pos + offset + 1)\n })\n }\n }\n\n slice.content.forEach((node, offset) => {\n findImageNodes(node, currentPos + offset)\n })\n\n imageNodes.map(({ node, pos }) => {\n if (node.attrs.src) {\n return this.processImageNode(node, view)\n }\n })\n }\n\n /**\n * Process images in an array of nodes asynchronously and update their src attributes using imagePasteHandler\n */\n private processImagesInNodesSync(nodes: Node[], view: any): void {\n const processNode = (node: Node) => {\n // Check if node is an image node (both image and md_image)\n if ((node.type.name === 'html_image' || node.type.name === 'md_image') && node.attrs.src) {\n this.processImageNode(node, view)\n }\n\n // Process child nodes recursively\n if (node.content && node.content.size > 0) {\n node.content.forEach((child) => {\n processNode(child)\n })\n }\n }\n\n nodes.forEach(processNode)\n }\n}\n", "// Copied from https://github.com/codemirror/basic-setup/blob/main/src/basic-setup.ts\n\nimport {\n autocompletion,\n closeBrackets,\n closeBracketsKeymap,\n completionKeymap,\n} from '@codemirror/autocomplete'\nimport { defaultKeymap, history, historyKeymap } from '@codemirror/commands'\nimport {\n bracketMatching,\n defaultHighlightStyle,\n foldGutter,\n foldKeymap,\n indentOnInput,\n syntaxHighlighting,\n} from '@codemirror/language'\nimport { lintKeymap } from '@codemirror/lint'\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search'\nimport type { Extension } from '@codemirror/state'\nimport { EditorState } from '@codemirror/state'\nimport {\n crosshairCursor,\n dropCursor,\n EditorView,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n} from '@codemirror/view'\n\n// (The superfluous function calls around the list of extensions work\n// around current limitations in tree-shaking software.)\n\n/// This is an extension value that just pulls together a number of\n/// extensions that you might want in a basic editor. It is meant as a\n/// convenient helper to quickly set up CodeMirror without installing\n/// and importing a lot of separate packages.\n///\n/// Specifically, it includes...\n///\n/// - [the default command bindings](#commands.defaultKeymap)\n/// - [line numbers](#view.lineNumbers)\n/// - [special character highlighting](#view.highlightSpecialChars)\n/// - [the undo history](#commands.history)\n/// - [a fold gutter](#language.foldGutter)\n/// - [custom selection drawing](#view.drawSelection)\n/// - [drop cursor](#view.dropCursor)\n/// - [multiple selections](#state.EditorState^allowMultipleSelections)\n/// - [reindentation on input](#language.indentOnInput)\n/// - [the default highlight style](#language.defaultHighlightStyle) (as fallback)\n/// - [bracket matching](#language.bracketMatching)\n/// - [bracket closing](#autocomplete.closeBrackets)\n/// - [autocompletion](#autocomplete.autocompletion)\n/// - [rectangular selection](#view.rectangularSelection) and [crosshair cursor](#view.crosshairCursor)\n/// - [active line highlighting](#view.highlightActiveLine)\n/// - [active line gutter highlighting](#view.highlightActiveLineGutter)\n/// - [selection match highlighting](#search.highlightSelectionMatches)\n/// - [search](#search.searchKeymap)\n/// - [linting](#lint.lintKeymap)\n///\n/// (You'll probably want to add some language package to your setup\n/// too.)\n///\n/// This extension does not allow customization. The idea is that,\n/// once you decide you want to configure your editor more precisely,\n/// you take this package's source (which is just a bunch of imports\n/// and an array literal), copy it into your own code, and adjust it\n/// as desired.\nexport const basicSetup: Extension = (() => [\n EditorView.lineWrapping,\n\n lineNumbers({\n formatNumber: (line: number) => {\n return line % 10 === 0 || line === 1 ? `${line}` : ''\n },\n }),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap,\n ]),\n])()\n\n/// A minimal set of extensions to create a functional editor. Only\n/// includes [the default keymap](#commands.defaultKeymap), [undo\n/// history](#commands.history), [special character\n/// highlighting](#view.highlightSpecialChars), [custom selection\n/// drawing](#view.drawSelection), and [default highlight\n/// style](#language.defaultHighlightStyle).\nexport const minimalSetup: Extension = (() => [\n dropCursor(),\n\n highlightSpecialChars(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n crosshairCursor(),\n highlightSelectionMatches(),\n keymap.of([...defaultKeymap]),\n])()\n\nexport type CodemirrorOptions = {\n lineWrapping?: boolean\n lineNumbers?: boolean\n}\n\nexport const getSetupByCodemirrorOptions = (options: CodemirrorOptions): Extension[] => {\n const res: Extension[] = [minimalSetup]\n\n if (options?.lineWrapping) {\n res.push(EditorView.lineWrapping)\n }\n\n if (options?.lineNumbers) {\n res.push(lineNumbers())\n }\n return res\n}\n\nexport { EditorView } from '@codemirror/view'\n", "import { extension, PlainExtension, PrioritizedKeyBindings } from '@rme-sdk/core'\nimport { arrowHandler } from '../CodeMirror/codemirror-utils'\n\ntype ClipboardExtensionOptions = {}\n\n@extension<ClipboardExtensionOptions>({\n defaultOptions: {},\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class CommonKeymapExtension extends PlainExtension<ClipboardExtensionOptions> {\n get name() {\n return 'commonKeymap' as const\n }\n\n createKeymap(): PrioritizedKeyBindings {\n return {\n ArrowLeft: arrowHandler('left'),\n ArrowRight: arrowHandler('right'),\n ArrowUp: arrowHandler('up'),\n ArrowDown: arrowHandler('down'),\n }\n }\n}\n", "import type { CommandFunction } from '@rme-sdk/core'\nimport { Selection } from '@rme-sdk/pm/state'\n\n/**\n * Handling cursor motion from the outer to the inner editor must be done with a\n * keymap on the outer editor. The `arrowHandler` function uses the\n * `endOfTextblock` method to determine, in a bidi-text-aware way, whether the\n * cursor is at the end of a given textblock. If it is, and the next block is a\n * code block, the selection is moved into it.\n *\n * Adapted from https://prosemirror.net/examples/codemirror/\n */\nexport function arrowHandler(dir: 'left' | 'right' | 'up' | 'down'): CommandFunction {\n return ({ dispatch, view, tr }) => {\n if (!view) {\n return false\n }\n\n if (!(tr.selection.empty && view.endOfTextblock(dir))) {\n return false\n }\n\n const side = dir === 'left' || dir === 'up' ? -1 : 1\n const $head = tr.selection.$head\n const nextPos = Selection.near(tr.doc.resolve(side > 0 ? $head.after() : $head.before()), side)\n\n if (\n nextPos.$head &&\n (nextPos.$head.parent.type.name === 'codeMirror' ||\n nextPos.$head.parent.type.name === 'html_block' ||\n nextPos.$head.parent.type.name === 'mermaid_node' ||\n nextPos.$head.parent.type.name === 'math_block')\n ) {\n dispatch?.(tr.setSelection(nextPos))\n if (dir === 'down' && nextPos.$head.parent.type.name === 'codeMirror') {\n const pos = nextPos.$head.before()\n requestAnimationFrame(() => {\n const menu = view.dom.querySelector(\n `.code-block__menu[data-pos=\"${pos}\"]`,\n ) as HTMLElement | null\n const input = menu?.querySelector(\n '.code-block__languages__input',\n ) as HTMLInputElement | null\n input?.focus()\n })\n }\n return true\n }\n\n return false\n }\n}\n", "import type { CreateExtensionPlugin } from '@rme-sdk/core'\nimport { extension, isTextSelection, PlainExtension } from '@rme-sdk/core'\nimport type { EditorView } from '@rme-sdk/pm/view'\nimport { Decoration, DecorationSet } from '@rme-sdk/pm/view'\nimport { type CopilotContext, type CopilotOptions } from '../Ai/ai-types'\n\nexport type CopilotState = {\n status: 'idle' | 'loading' | 'ready'\n suggestion: string\n pos: number | null\n requestId: number\n}\n\ntype CopilotMeta =\n | { type: 'loading'; pos: number; requestId: number }\n | { type: 'ready'; pos: number; suggestion: string; requestId: number }\n | { type: 'clear'; requestId: number }\n\nconsole.log('123')\n\n@extension<CopilotOptions>({\n defaultOptions: {},\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class CopilotExtension extends PlainExtension<CopilotOptions> {\n get name() {\n return 'copilot' as const\n }\n\n createPlugin(): CreateExtensionPlugin<CopilotState> {\n const initialState: CopilotState = {\n status: 'idle',\n suggestion: '',\n pos: null,\n requestId: 0,\n }\n\n const getSiblingParagraphText = (\n parentNode: EditorView['state']['doc'],\n startIndex: number,\n direction: -1 | 1,\n ) => {\n let index = startIndex + direction\n while (index >= 0 && index < parentNode.childCount) {\n const node = parentNode.child(index)\n if (node.type.name === 'paragraph') {\n const text = node.textBetween(0, node.content.size, '\\n', '\\n')\n return text || ''\n }\n index += direction\n }\n return null\n }\n\n const getContext = (viewState: EditorView['state']) => {\n if (!isTextSelection(viewState.selection) || !viewState.selection.empty) {\n return null\n }\n const $from = viewState.selection.$from\n const parent = $from.parent\n if (!parent.isTextblock) {\n return null\n }\n const textBefore = parent.textBetween(0, $from.parentOffset, '\\n', '\\n')\n const textAfter = parent.textBetween($from.parentOffset, parent.content.size, '\\n', '\\n')\n const maxContextChars = this.options.maxContextChars ?? 500\n const textBeforeContext =\n maxContextChars > 0 && textBefore.length > maxContextChars\n ? textBefore.slice(textBefore.length - maxContextChars)\n : textBefore\n const parentDepth = $from.depth - 1\n const rootParent = parentDepth >= 0 ? $from.node(parentDepth) : null\n const parentIndex = parentDepth >= 0 ? $from.index(parentDepth) : -1\n const prevParagraph =\n rootParent && parentIndex >= 0\n ? getSiblingParagraphText(rootParent, parentIndex, -1)\n : null\n const nextParagraph =\n rootParent && parentIndex >= 0\n ? getSiblingParagraphText(rootParent, parentIndex, 1)\n : null\n const hasContext = Boolean(\n textBeforeContext.trim() ||\n textAfter.trim() ||\n prevParagraph?.trim() ||\n nextParagraph?.trim(),\n )\n if (!hasContext) {\n return null\n }\n const context: CopilotContext = {\n nodeType: parent.type.name,\n textBefore: textBeforeContext,\n textAfter,\n prevParagraph,\n nextParagraph,\n }\n return {\n context,\n pos: viewState.selection.from,\n }\n }\n\n const normalizeSuggestion = (text: string, context: string) => {\n let suggestion = text.replace(/\\r\\n/g, '\\n')\n if (suggestion.startsWith(context)) {\n suggestion = suggestion.slice(context.length)\n }\n suggestion = suggestion.replace(/^\\s+/, '')\n const maxSuggestionChars = this.options.maxSuggestionChars ?? 500\n if (maxSuggestionChars > 0 && suggestion.length > maxSuggestionChars) {\n suggestion = suggestion.slice(0, maxSuggestionChars)\n }\n return suggestion\n }\n\n const acceptSuggestion = (view: EditorView, event?: KeyboardEvent) => {\n const state = this.pluginKey.getState(view.state)\n\n if (!state || state.status !== 'ready' || !state.suggestion) {\n return false\n }\n event?.preventDefault()\n const nextRequestId = state.requestId + 1\n view.dispatch(\n view.state.tr\n .insertText(state.suggestion)\n .setMeta(this.pluginKey, { type: 'clear', requestId: nextRequestId }),\n )\n return true\n }\n\n return {\n key: this.pluginKey,\n initialState,\n state: {\n init: () => initialState,\n apply: (tr, value) => {\n const meta = tr.getMeta(this.pluginKey) as CopilotMeta | undefined\n if (meta) {\n if (meta.type === 'loading') {\n return {\n ...value,\n status: 'loading',\n suggestion: '',\n pos: meta.pos,\n requestId: meta.requestId,\n }\n }\n if (meta.type === 'ready') {\n return {\n ...value,\n status: 'ready',\n suggestion: meta.suggestion,\n pos: meta.pos,\n requestId: meta.requestId,\n }\n }\n if (meta.type === 'clear') {\n return {\n ...value,\n status: 'idle',\n suggestion: '',\n pos: null,\n requestId: meta.requestId,\n }\n }\n }\n if (tr.docChanged || tr.selectionSet) {\n return { ...value, status: 'idle', suggestion: '', pos: null }\n }\n return value\n },\n },\n props: {\n decorations: (state) => {\n const pluginState = this.pluginKey.getState(state)\n if (!pluginState || pluginState.status !== 'ready' || !pluginState.pos) {\n return null\n }\n if (!isTextSelection(state.selection) || !state.selection.empty) {\n return null\n }\n if (state.selection.from !== pluginState.pos) {\n return null\n }\n if (!pluginState.suggestion.trim()) {\n return null\n }\n const deco = Decoration.widget(pluginState.pos, () => {\n const span = document.createElement('span')\n span.className = 'rme-copilot-suggestion'\n span.textContent = pluginState.suggestion\n return span\n })\n return DecorationSet.create(state.doc, [deco])\n },\n handleKeyDown: (view, event) => {\n if (event.key !== 'Tab') {\n return false\n }\n return acceptSuggestion(view, event)\n },\n },\n view: (view) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n let requestId = 0\n const cancel = () => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n timeoutId = null\n }\n requestId += 1\n view.dispatch(\n view.state.tr.setMeta(this.pluginKey, { type: 'clear', requestId }),\n )\n }\n\n const schedule = () => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n timeoutId = setTimeout(async () => {\n const contextInfo = getContext(view.state)\n if (!contextInfo) {\n return\n }\n if (!this.options.generateText) {\n return\n }\n requestId += 1\n const currentRequestId = requestId\n view.dispatch(\n view.state.tr.setMeta(this.pluginKey, {\n type: 'loading',\n pos: contextInfo.pos,\n requestId: currentRequestId,\n }),\n )\n try {\n const text = await this.options.generateText({\n context: contextInfo.context,\n })\n\n console.log('currentRequestId', currentRequestId, requestId)\n\n if (currentRequestId !== requestId) {\n return\n }\n const suggestion = text\n ? normalizeSuggestion(text, contextInfo.context.textBefore)\n : ''\n if (!suggestion.trim()) {\n view.dispatch(\n view.state.tr.setMeta(this.pluginKey, {\n type: 'clear',\n requestId: currentRequestId,\n }),\n )\n return\n }\n view.dispatch(\n view.state.tr.setMeta(this.pluginKey, {\n type: 'ready',\n pos: contextInfo.pos,\n suggestion,\n requestId: currentRequestId,\n }),\n )\n } catch {\n if (currentRequestId === requestId) {\n view.dispatch(\n view.state.tr.setMeta(this.pluginKey, {\n type: 'clear',\n requestId: currentRequestId,\n }),\n )\n }\n }\n }, this.options.debounceMs ?? 500)\n }\n\n return {\n update: (nextView, prevState) => {\n if (nextView !== view) {\n return\n }\n const docChanged = !nextView.state.doc.eq(prevState.doc)\n const selectionChanged = !nextView.state.selection.eq(prevState.selection)\n if (!docChanged && !selectionChanged) {\n return\n }\n cancel()\n if (docChanged) {\n schedule()\n }\n },\n destroy: () => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n },\n }\n },\n }\n }\n}\n", "import type { CommandFunction, FromToProps, Helper, ProsemirrorPlugin } from '@rme-sdk/core'\nimport { extension, PlainExtension } from '@rme-sdk/core'\nimport type { EditorState } from '@rme-sdk/pm/state'\nimport { TextSelection } from '@rme-sdk/pm/state'\nimport type { DecorationAttrs } from '@rme-sdk/pm/view'\nimport type { SearchResult } from 'prosemirror-search'\nimport {\n getMatchHighlights,\n search,\n SearchQuery,\n setSearchState,\n} from 'prosemirror-search'\nimport { scrollCodemirrorToMatch, updateCodemirrorSearchState } from '../../codemirror/codemirror'\nimport type { FindAndReplaceAllProps, FindAndReplaceProps, FindProps, FindResult } from './find-types'\nimport { rotateIndex } from './find-utils'\n\nexport interface FindOptions {\n decoration?: DecorationAttrs\n activeDecoration?: DecorationAttrs\n alwaysFind?: boolean\n}\n\n@extension<FindOptions>({\n defaultOptions: {\n alwaysFind: false,\n },\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class FindExtension extends PlainExtension<FindOptions> {\n get name() {\n return 'find' as const\n }\n\n find = ({ query, activeIndex, caseSensitive }: FindProps): CommandFunction => {\n if (!query) {\n return this.stopFind()\n }\n\n return ({ state, tr, dispatch }) => {\n const searchQuery = new SearchQuery({\n search: query,\n caseSensitive: caseSensitive ?? false,\n })\n\n if (!searchQuery.valid) {\n return false\n }\n\n if (!dispatch) {\n return true\n }\n\n setSearchState(tr, searchQuery)\n\n let activeMatch: { from: number; to: number } | null = null\n if (activeIndex != null) {\n const results = this.collectQueryMatches(state, searchQuery)\n const normalizedIndex = rotateIndex(activeIndex, results.length)\n const target = results[normalizedIndex]\n if (target) {\n tr.setSelection(TextSelection.create(tr.doc, target.from, target.to)).scrollIntoView()\n activeMatch = { from: target.from, to: target.to }\n }\n }\n\n dispatch(tr)\n updateCodemirrorSearchState(query, caseSensitive ?? false, activeMatch)\n this.scrollToActiveResult(activeMatch)\n return true\n }\n }\n\n stopFind = (): CommandFunction => {\n return ({ tr, dispatch }) => {\n if (!dispatch) {\n return true\n }\n\n setSearchState(tr, new SearchQuery({ search: '' }))\n dispatch(tr)\n updateCodemirrorSearchState('', false, null)\n return true\n }\n }\n\n findAndReplace = ({\n query,\n caseSensitive,\n replacement,\n index,\n }: FindAndReplaceProps): CommandFunction => {\n return ({ state, tr, dispatch }) => {\n const searchQuery = new SearchQuery({\n search: query,\n replace: replacement,\n caseSensitive: caseSensitive ?? false,\n })\n\n if (!searchQuery.valid) {\n return false\n }\n\n if (!dispatch) {\n return true\n }\n\n const results = this.collectQueryMatches(state, searchQuery)\n if (!results.length) {\n setSearchState(tr, searchQuery)\n dispatch(tr)\n updateCodemirrorSearchState(query, caseSensitive ?? false, null)\n return false\n }\n\n const { activeIndex } = this.getHighlightRanges(state)\n const normalizedIndex = rotateIndex(\n index ?? activeIndex ?? 0,\n results.length,\n )\n const target = results[normalizedIndex]\n\n if (!target) {\n return false\n }\n\n setSearchState(tr, searchQuery)\n const replacements = searchQuery.getReplacements(state, target)\n\n for (let i = replacements.length - 1; i >= 0; i--) {\n const { from, to, insert } = replacements[i]\n tr.replaceRange(from, to, insert)\n }\n\n const mappedFrom = tr.mapping.map(target.from)\n const mappedTo = tr.mapping.map(target.to)\n tr.setSelection(TextSelection.create(tr.doc, mappedFrom, mappedTo)).scrollIntoView()\n\n dispatch(tr)\n updateCodemirrorSearchState(query, caseSensitive ?? false, { from: mappedFrom, to: mappedTo })\n this.scrollToActiveResult({ from: mappedFrom, to: mappedTo })\n return true\n }\n }\n\n findAndReplaceAll = ({\n query,\n caseSensitive,\n replacement,\n }: FindAndReplaceAllProps): CommandFunction => {\n return ({ state, tr, dispatch }) => {\n const searchQuery = new SearchQuery({\n search: query,\n replace: replacement,\n caseSensitive: caseSensitive ?? false,\n })\n\n if (!searchQuery.valid) {\n return false\n }\n\n if (!dispatch) {\n return true\n }\n\n const results = this.collectQueryMatches(state, searchQuery)\n\n setSearchState(tr, searchQuery)\n\n for (let i = results.length - 1; i >= 0; i--) {\n const replacements = searchQuery.getReplacements(state, results[i])\n for (let j = replacements.length - 1; j >= 0; j--) {\n const { from, to, insert } = replacements[j]\n tr.replaceRange(from, to, insert)\n }\n }\n\n dispatch(tr)\n updateCodemirrorSearchState(query, caseSensitive ?? false, null)\n return true\n }\n }\n\n findRanges = (options: FindProps): Helper<FindResult> => {\n this.store.commands.find(options)\n const { ranges, activeIndex } = this.getHighlightRanges(this.store.view.state)\n return {\n activeIndex,\n ranges,\n }\n }\n\n createCommands() {\n return {\n find: this.find,\n stopFind: this.stopFind,\n findAndReplace: this.findAndReplace,\n findAndReplaceAll: this.findAndReplaceAll,\n }\n }\n\n createHelpers() {\n return { findRanges: this.findRanges }\n }\n\n createExternalPlugins(): ProsemirrorPlugin[] {\n return [search({})]\n }\n\n private collectQueryMatches(\n state: EditorState,\n searchQuery: SearchQuery,\n range?: { from: number; to: number },\n ): SearchResult[] {\n if (!searchQuery.valid) {\n return []\n }\n\n const results: SearchResult[] = []\n const from = range?.from ?? 0\n const to = range?.to ?? state.doc.content.size\n let pos = from\n\n while (pos <= to) {\n const result = searchQuery.findNext(state, pos, to)\n if (!result) {\n break\n }\n results.push(result)\n const nextPos = result.to > pos ? result.to : pos + 1\n if (nextPos > to) {\n break\n }\n pos = nextPos\n }\n\n return results\n }\n\n private scrollToActiveResult(activeMatch?: { from: number; to: number } | null): void {\n if (!activeMatch) {\n return\n }\n\n if (scrollCodemirrorToMatch(activeMatch)) {\n return\n }\n\n const view = this.store.view\n const maxSize = view.state.doc.content.size\n const pos = activeMatch.from\n if (pos > maxSize) {\n return\n }\n\n const dom = view.domAtPos(pos).node as HTMLElement\n dom?.scrollIntoView?.({ block: 'nearest', behavior: 'smooth' })\n }\n\n private getHighlightRanges(state: EditorState): FindResult {\n const decorationSet = getMatchHighlights(state)\n if (!decorationSet) {\n return { ranges: [], activeIndex: undefined }\n }\n\n const decorations = decorationSet.find()\n const sorted = decorations\n .map((deco) => ({\n from: deco.from,\n to: deco.to,\n }))\n .sort((a, b) => (a.from === b.from ? a.to - b.to : a.from - b.from))\n\n const ranges: FromToProps[] = sorted.map(({ from, to }) => ({ from, to }))\n const { from: selectionFrom, to: selectionTo } = state.selection\n const activeIndex = sorted.findIndex(\n (deco) => deco.from === selectionFrom && deco.to === selectionTo,\n )\n\n return {\n ranges,\n activeIndex: activeIndex >= 0 ? activeIndex : undefined,\n }\n }\n\n}\n\ndeclare global {\n namespace Remirror {\n interface AllExtensions {\n find: FindExtension\n }\n }\n}\n", "/**\n * Returns a number between 0 and length-1 (inclusive)\n *\n * @internal\n */\nexport function rotateIndex(index: number, length: number): number {\n if (length <= 0) {\n return 0;\n }\n\n return ((index % length) + length) % length;\n}\n", "import type { CreateExtensionPlugin } from '@rme-sdk/core'\nimport { PlainExtension } from '@rme-sdk/core'\nimport type { Node as ProsemirrorNode } from '@rme-sdk/pm/model'\nimport type { Transaction } from '@rme-sdk/pm/state'\nimport {\n getHtmlImageInputRule,\n getInlineMathInputRule,\n getMdImageInputRule,\n} from '../../inline-input-regex'\n\n/**\n * \u8F93\u5165\u5904\u7406\u89C4\u5219\u63A5\u53E3\n */\nexport interface InputRule {\n // \u5339\u914D\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\n regexp: RegExp\n // \u8981\u521B\u5EFA\u7684\u8282\u70B9\u7C7B\u578B\n type: string\n // \u83B7\u53D6\u8282\u70B9\u5C5E\u6027\u7684\u51FD\u6570\n getAttributes?: (match: RegExpMatchArray) => Record<string, any> | null\n // \u83B7\u53D6\u8282\u70B9\u5185\u5BB9\u7684\u51FD\u6570\uFF08\u53EF\u9009\uFF09\n getContent?: (match: RegExpMatchArray, schema: any) => ProsemirrorNode | ProsemirrorNode[] | null\n}\n\nexport const excludeNodeName = ['math_block', 'codeMirror', 'reference_def']\nexport class HandleInputExtension extends PlainExtension {\n private inputRules: InputRule[] = [\n ...getMdImageInputRule<string>('md_image'),\n ...getInlineMathInputRule<string>('math_inline'),\n ...getHtmlImageInputRule<string>('html_image'),\n ]\n\n constructor(options?: { rules?: InputRule[] }) {\n super()\n if (options?.rules) {\n this.inputRules = [...this.inputRules, ...options.rules]\n }\n }\n\n get name() {\n return 'handle_input' as const\n }\n\n addRule(rule: InputRule): void {\n this.inputRules.push(rule)\n }\n\n createPlugin(): CreateExtensionPlugin {\n return {\n appendTransaction: (transactions, oldState, newState) => {\n if (!transactions.some((tr) => tr.docChanged)) {\n return null\n }\n\n // \u83B7\u53D6\u6700\u540E\u4E00\u4E2A\u4E8B\u52A1\u7684\u53D8\u66F4\u4FE1\u606F\n const lastTr = transactions[transactions.length - 1]\n if (!lastTr.docChanged) {\n return null\n }\n\n // \u6392\u9664\u6765\u81EA CodeMirror \u8282\u70B9\u7684\u4E8B\u52A1\n // \u68C0\u67E5\u4E8B\u52A1\u662F\u5426\u6D89\u53CA codeMirror \u8282\u70B9\u7684\u53D8\u66F4\n let involvesCodeMirror = false\n lastTr.mapping.maps.forEach((stepMap) => {\n stepMap.forEach((oldStart, oldEnd, newStart, newEnd) => {\n // \u68C0\u67E5\u53D8\u66F4\u8303\u56F4\u5185\u662F\u5426\u5305\u542B codeMirror \u8282\u70B9\n newState.doc.nodesBetween(newStart, newEnd, (node, pos) => {\n if (excludeNodeName.includes(node.type.name)) {\n involvesCodeMirror = true\n return false // \u505C\u6B62\u904D\u5386\n }\n return true\n })\n })\n })\n\n // \u5982\u679C\u4E8B\u52A1\u6D89\u53CA CodeMirror \u8282\u70B9\uFF0C\u5219\u4E0D\u5904\u7406\n if (involvesCodeMirror) {\n return null\n }\n\n let tr: Transaction | null = null\n const schema = newState.schema\n\n // \u6536\u96C6\u6240\u6709\u5339\u914D\u7684\u4F4D\u7F6E\u548C\u66FF\u6362\u4FE1\u606F\uFF0C\u6309\u7167\u4F4D\u7F6E\u5012\u5E8F\u6392\u5217\n const replacements: Array<{\n from: number\n to: number\n node: ProsemirrorNode\n }> = []\n\n // \u68C0\u67E5\u53D8\u66F4\u533A\u57DF\u7684\u6587\u672C\u8282\u70B9\n lastTr.mapping.maps.forEach((stepMap) => {\n stepMap.forEach((oldStart, oldEnd, newStart, newEnd) => {\n // \u6269\u5C55\u641C\u7D22\u8303\u56F4\u4EE5\u5305\u542B\u53EF\u80FD\u7684\u5339\u914D\n const searchFrom = Math.max(0, newStart - 100)\n const searchTo = Math.min(newState.doc.content.size, newEnd + 100)\n\n newState.doc.nodesBetween(searchFrom, searchTo, (node, pos) => {\n // \u8DF3\u8FC7 CodeMirror \u8282\u70B9\u5185\u90E8\u7684\u5185\u5BB9\n if (excludeNodeName.includes(node.type.name)) {\n return false // \u4E0D\u5904\u7406 CodeMirror \u8282\u70B9\u5185\u90E8\n }\n\n // \u53EA\u5904\u7406\u6587\u672C\u8282\u70B9\n if (!node.isText || !node.text) {\n return true\n }\n\n // \u68C0\u67E5\u7236\u8282\u70B9\n const $pos = newState.doc.resolve(pos)\n const parent = $pos.parent\n const excludeParentNodes = ['math_block', 'codeMirror', 'reference_def', 'html_block', 'mermaid_node']\n if (excludeParentNodes.includes(parent.type.name)) {\n return true\n }\n\n const text = node.text\n // \u904D\u5386\u6240\u6709\u8F93\u5165\u89C4\u5219\n for (const rule of this.inputRules) {\n let match: RegExpMatchArray | null\n // \u91CD\u7F6E\u6B63\u5219\u8868\u8FBE\u5F0F\u7684 lastIndex\uFF0C\u907F\u514D\u5168\u5C40\u5339\u914D\u72B6\u6001\u95EE\u9898\n rule.regexp.lastIndex = 0\n\n while ((match = rule.regexp.exec(text)) !== null) {\n // \u8BA1\u7B97\u5339\u914D\u5728\u6587\u6863\u4E2D\u7684\u786E\u5207\u8D77\u6B62\u4F4D\u7F6E\n const matchIndex = match.index ?? 0\n const start = pos + matchIndex\n const end = start + match[0].length\n\n // \u68C0\u67E5\u4F4D\u7F6E\u662F\u5426\u6709\u6548\n if (start >= 0 && end <= newState.doc.content.size) {\n // \u521B\u5EFA\u65B0\u8282\u70B9\n console.log('nodenode', node)\n const attrs = rule.getAttributes ? rule.getAttributes(match) : null\n\n if (node.attrs['data-rme-from-paste'] === 'true' && attrs) {\n attrs['data-rme-from-paste'] = 'true'\n }\n\n // \u68C0\u67E5\u8282\u70B9\u7C7B\u578B\u662F\u5426\u5B58\u5728\n const nodeType = schema.nodes[rule.type]\n if (!nodeType) {\n console.warn(`Node type '${rule.type}' not found in schema`)\n continue\n }\n\n // \u5BF9\u4E8E atom \u8282\u70B9\uFF0C\u4E0D\u5E94\u8BE5\u6709\u5185\u5BB9\n let newNode: ProsemirrorNode\n if (nodeType.spec.atom) {\n newNode = nodeType.create(attrs)\n } else {\n // \u5BF9\u4E8E\u975E\u539F\u5B50\u8282\u70B9\uFF0C\u6DFB\u52A0\u5185\u5BB9\n let content = null\n if (rule.getContent) {\n content = rule.getContent(match, schema)\n } else {\n content = schema.text(match[0])\n }\n newNode = nodeType.create(attrs, content)\n }\n\n // \u6DFB\u52A0\u5230\u66FF\u6362\u5217\u8868\n replacements.push({ from: start, to: end, node: newNode })\n }\n\n // \u5982\u679C\u4E0D\u662F\u5168\u5C40\u5339\u914D\uFF0C\u9000\u51FA\u5FAA\u73AF\n if (!rule.regexp.global) {\n break\n }\n }\n }\n return true\n })\n })\n })\n\n // \u5982\u679C\u6709\u66FF\u6362\uFF0C\u6309\u4F4D\u7F6E\u5012\u5E8F\u6392\u5217\u5E76\u6267\u884C\n if (replacements.length > 0) {\n // \u6309\u4F4D\u7F6E\u5012\u5E8F\u6392\u5217\uFF0C\u4ECE\u540E\u5F80\u524D\u66FF\u6362\uFF0C\u907F\u514D\u4F4D\u7F6E\u504F\u79FB\u95EE\u9898\n replacements.sort((a, b) => b.from - a.from)\n\n tr = newState.tr\n\n for (const replacement of replacements) {\n // \u9A8C\u8BC1\u4F4D\u7F6E\u4ECD\u7136\u6709\u6548\n if (replacement.from >= 0 && replacement.to <= tr.doc.content.size) {\n tr = tr.replaceWith(replacement.from, replacement.to, replacement.node)\n }\n }\n }\n\n // \u5982\u679C\u4E8B\u52A1\u6709\u53D8\u5316\uFF0C\u8FD4\u56DE\u4E8B\u52A1\uFF0C\u5426\u5219\u8FD4\u56DEnull\n return tr && tr.docChanged ? tr : null\n },\n }\n }\n}\n", "import { NodeType } from '@rme-sdk/pm'\nimport { getAttrsBySignalHtmlContent } from '../utils/html'\n\nexport const getMdImageInputRule = <T extends NodeType | string>(nodeType: T) => [\n {\n regexp: /!\\[([^\\]]*)\\]\\(([^\\s\"]+(?:\\s+[^\\s\"]+)*)?(?:\\s+\"(.*?)\")?\\)/,\n type: nodeType,\n getAttributes: (match: string[]) => {\n const [, alt, src, title] = match\n return { alt, src, title }\n },\n },\n]\n\nexport const getHtmlImageInputRule = <T extends NodeType | string>(nodeType: T) => [\n {\n regexp: new RegExp('<img[^>]*>'),\n type: nodeType,\n getAttributes: (match: string[]) => {\n return getAttrsBySignalHtmlContent(match[0])\n },\n },\n]\n\nexport const getInlineMathInputRule = <T extends NodeType | string>(nodeType: T) => [\n // Typed inline math trigger: $$ -> insert empty inline math and focus inside\n {\n regexp: /\\$\\$(?!\\$)/,\n type: nodeType,\n getAttributes: () => ({ tex: '', fromInput: true }),\n },\n {\n regexp: /<span[^>]*data-type=[\"']math-inline[\"'][^>]*><\\/span>/,\n type: nodeType,\n getAttributes: () => ({ fromInput: false }),\n },\n {\n regexp: /\\$([^$\\n]+?)\\$/,\n type: nodeType,\n getAttributes: (match: string[]) => {\n return { tex: match[1] ?? '', fromInput: true }\n },\n },\n]\n", "import { convertCommand } from '@rme-sdk/core'\nimport { HardBreakExtension } from '@rme-sdk/main/extensions'\nimport { baseKeymap, exitCode } from '@rme-sdk/pm/commands'\n\nimport { chainCommands } from '@rme-sdk/pm'\nimport type { NodeSerializerOptions } from '../../transform'\n\nconst needUseBrNodeNames = ['tableCell']\n\nexport class LineHardBreakExtension extends HardBreakExtension {\n fromMarkdown() {\n return []\n }\n\n toMarkdown({ state, node, parent, index }: NodeSerializerOptions) {\n for (let i = index + 1; i < parent.childCount; i++)\n if (parent.child(i).type != node.type) {\n state.write('\\n')\n return\n }\n }\n\n createKeymap() {\n const disallowBreakNodes = new Set(['heading'])\n\n const enterCommand = convertCommand(baseKeymap.Enter)\n\n const command = chainCommands(convertCommand(exitCode), (params) => {\n const { state, tr, dispatch } = params\n const { $from, $to, from, to } = state.selection\n const canReplace =\n !disallowBreakNodes.has($from.parent.type.name) &&\n !disallowBreakNodes.has($to.parent.type.name)\n const nodeName = $from.parent.type.name\n if (canReplace) {\n const schema = state.schema\n\n if (needUseBrNodeNames.includes(nodeName)) {\n dispatch?.(tr.replaceRangeWith(from, to, schema.nodes['html_br'].create()))\n } else {\n dispatch?.(tr.replaceRangeWith(from, to, schema.text('\\n')))\n }\n return true\n } else {\n // If the parent doesn't allow HardBreak type (Heading for example), then fall back to `Enter` command\n return enterCommand(params)\n }\n })\n\n return {\n 'Mod-Enter': command,\n 'Shift-Enter': command,\n }\n }\n}\n", "import type {\n ApplySchemaAttributes,\n ExtensionCommandReturn,\n KeyBindings,\n NodeExtensionSpec,\n NodeSpecOverride\n} from '@rme-sdk/core'\nimport { convertCommand, findParentNodeOfType } from '@rme-sdk/core'\nimport { HeadingExtension } from '@rme-sdk/main/extensions'\nimport { setBlockType } from '@rme-sdk/pm/commands'\nimport type { Schema } from '@rme-sdk/pm/model'\nimport type Token from 'markdown-it/lib/token.mjs'\n\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\n\nexport class LineHeadingExtension extends HeadingExtension {\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n ...super.createNodeSpec(extra, override),\n }\n }\n\n createKeymap() {\n const keys: KeyBindings = {\n Backspace: ({ state, dispatch }) => {\n const { selection } = state\n const { $from } = selection\n // If the selection is not empty, return false and let other extension (ie: BaseKeymapExtension) to do\n // the deleting operation.\n if (!selection.empty) {\n return false\n }\n\n if ($from.parent.type.name !== this.name) {\n return false\n }\n\n const parent = findParentNodeOfType({ types: this.type, selection })\n if (parent?.start !== selection.from) {\n return false\n }\n\n const tr = state.tr.setBlockType(\n parent.start,\n parent.start,\n (state.schema as Schema).nodes.paragraph,\n )\n if (dispatch) {\n dispatch(tr)\n }\n return true\n },\n }\n\n return keys\n }\n\n createCommands() {\n const keys: ExtensionCommandReturn = {}\n this.options.levels.forEach((level) => {\n keys[`toggleH${level}`] = () => convertCommand(setBlockType(this.type, { level }))\n })\n return keys\n }\n\n fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'heading',\n node: this.name,\n hasOpenClose: true,\n getAttrs: (tok: Token) => ({ level: +tok.tag.slice(1) }),\n },\n ] as const\n }\n\n toMarkdown({ state, node }: NodeSerializerOptions) {\n state.write(state.repeat('#', node.attrs.level) + ' ')\n state.renderInline(node)\n state.closeBlock(node)\n }\n}\n", "import {\n ApplySchemaAttributes,\n CommandFunction,\n ErrorConstant,\n ExtensionTag,\n InputRule,\n invariant,\n isEmptyBlockNode,\n isNodeSelection,\n NodeExtension,\n NodeExtensionSpec,\n nodeInputRule,\n NodeSpecOverride,\n Transaction,\n} from '@rme-sdk/core'\nimport { ExtensionCommandReturn } from '@rme-sdk/main'\nimport { TextSelection } from '@rme-sdk/pm/state'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\n\nexport interface HorizontalRuleOptions {\n /**\n * The name of the node to insert after inserting a horizontalRule.\n *\n * Set to false to prevent adding a node afterwards.\n *\n * @defaultValue 'paragraph'\n */\n insertionNode?: string | false\n}\n\nexport class LineHorizontalRuleExtension extends NodeExtension<HorizontalRuleOptions> {\n get name() {\n return 'horizontalRule' as const\n }\n\n createTags() {\n return [ExtensionTag.Block]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n ...override,\n attrs: extra.defaults(),\n parseDOM: [{ tag: 'hr', getAttrs: extra.parse }, ...(override.parseDOM ?? [])],\n toDOM: (node) => ['hr', extra.dom(node)],\n }\n }\n\n /**\n * Inserts a horizontal line into the editor.\n */\n insertHorizontalRule = (): CommandFunction => {\n return (props) => {\n const { tr, dispatch } = props\n const $pos = tr.selection.$anchor\n const initialParent = $pos.parent\n\n if (initialParent.type.name === 'doc' || initialParent.isAtom || initialParent.isLeaf) {\n return false\n }\n\n if (!dispatch) {\n return true\n }\n\n // A boolean value that is true when the current node is empty and\n // should be duplicated before the replacement of the current node by\n // the `hr`.\n const shouldDuplicateEmptyNode = tr.selection.empty && isEmptyBlockNode(initialParent)\n\n // When the node should eb duplicated add it to the position after\n // before the replacement.\n if (shouldDuplicateEmptyNode) {\n tr.insert($pos.pos + 1, initialParent)\n }\n\n // Create the horizontal rule by replacing the selection\n tr.replaceSelectionWith(this.type.create())\n\n // Update the selection if currently pointed at the node.\n this.updateFromNodeSelection(tr)\n\n dispatch(tr.scrollIntoView())\n\n return true\n }\n }\n\n createInputRules(): InputRule[] {\n return [\n nodeInputRule({\n // Allow dash + hyphen to cater for ShortcutsExtension, which replaces first\n // two hyphens with a dash, i.e. \"---\" becomes \"<dash>-\"\n regexp: /^(?:---|\u2014-|___\\s|\\*\\*\\*\\s)$/,\n type: this.type,\n beforeDispatch: ({ tr }) => {\n this.updateFromNodeSelection(tr)\n },\n }),\n ]\n }\n\n /**\n * Updates the transaction after a `horizontalRule` has been inserted to make\n * sure the currently selected node isn't a Horizontal Rule.\n *\n * This should only be called for empty selections.\n */\n private updateFromNodeSelection(tr: Transaction): void {\n // Make sure the `horizontalRule` that is selected. Otherwise do nothing.\n if (!isNodeSelection(tr.selection) || tr.selection.node.type.name !== this.name) {\n return\n }\n\n // Get the position right after the current selection for inserting the\n // node.\n const pos = tr.selection.$from.pos + 1\n const { insertionNode } = this.options\n\n // If `insertionNode` was set to false, then don't insert anything.\n if (!insertionNode) {\n return\n }\n\n const type = this.store.schema.nodes[insertionNode]\n\n invariant(type, {\n code: ErrorConstant.EXTENSION,\n message: `'${insertionNode}' node provided as the insertionNode to the '${this.constructorName}' does not exist.`,\n })\n\n // Insert the new node\n const node = type.create()\n tr.insert(pos, node)\n\n // Set the new selection to be inside the inserted node.\n tr.setSelection(TextSelection.near(tr.doc.resolve(pos + 1)))\n }\n\n createCommands(): ExtensionCommandReturn {\n return {\n insertHorizontalRule: () => this.insertHorizontalRule(),\n }\n }\n\n fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'hr',\n node: this.name,\n hasOpenClose: false,\n },\n ] as const\n }\n toMarkdown({ state, node }: NodeSerializerOptions) {\n state.write('---')\n state.closeBlock(node)\n }\n}\n", "import type {\n ApplySchemaAttributes,\n InputRule,\n NodeExtensionSpec,\n NodeSpecOverride,\n} from '@rme-sdk/core'\nimport { extension, ExtensionTag, NodeExtension, nodeInputRule } from '@rme-sdk/core'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\n\nexport interface HtmlBrOptions {}\n\n@extension<HtmlBrOptions>({\n defaultOptions: {},\n})\nexport class HtmlBrExtension extends NodeExtension<HtmlBrOptions> {\n static disableExtraAttributes = true\n\n get name() {\n return 'html_br' as const\n }\n\n createTags() {\n return [ExtensionTag.InlineNode]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n inline: true,\n selectable: true,\n atom: true,\n ...override,\n attrs: {},\n parseDOM: [\n {\n tag: 'br',\n },\n ],\n toDOM: () => {\n return ['br']\n },\n }\n }\n\n createInputRules(): InputRule[] {\n const rules: InputRule[] = [\n nodeInputRule({\n regexp: new RegExp('<br/>'),\n type: this.type,\n }),\n ]\n\n return rules\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.inline,\n token: 'html_br',\n node: this.name,\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n state.text('<br/>', false)\n }\n}\n", "import type {\n ApplySchemaAttributes,\n CommandFunction,\n NodeExtensionSpec,\n NodeSpecOverride,\n NodeViewMethod\n} from '@rme-sdk/core'\nimport { convertCommand, extension, isElementDomNode, NodeExtension, nodeInputRule } from '@rme-sdk/core'\nimport { setBlockType } from '@rme-sdk/pm/commands'\nimport type { InputRule } from '@rme-sdk/pm/inputrules'\nimport { TextSelection } from '@rme-sdk/pm/state'\nimport block_names from 'markdown-it/lib/common/html_blocks.mjs'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport { needSplitInlineHtmlTokenTags } from '../../transform/markdown-it-html-inline'\nimport { arrayExclude } from '../../utils/common'\nimport type { LineHtmlBlockExtensionOptions } from './html-block-types'\nimport { HtmlNodeView } from './html-block-view'\n\n@extension<LineHtmlBlockExtensionOptions>({\n defaultOptions: {},\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class LineHtmlBlockExtension extends NodeExtension<LineHtmlBlockExtensionOptions> {\n get name() {\n return 'html_block' as const\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n group: 'block',\n content: 'text*',\n defining: true,\n ...override,\n code: true,\n marks: '',\n attrs: {\n language: { default: 'html' },\n ...extra.defaults(),\n },\n parseDOM: [\n {\n tag: 'pre',\n getAttrs: (node) => (isElementDomNode(node) ? extra.parse(node) : false),\n },\n ...(override.parseDOM ?? []),\n ],\n toDOM() {\n return ['pre', ['code', 0]]\n },\n isolating: true,\n }\n }\n\n createNodeViews(): NodeViewMethod {\n return (node, view, getPos) => {\n return new HtmlNodeView(node, view, getPos as () => number, this.options)\n }\n }\n\n createHtmlBlock = (): CommandFunction => convertCommand(setBlockType(this.type))\n\n createInputRules(): InputRule[] {\n const rules: InputRule[] = [\n nodeInputRule({\n regexp: new RegExp(\n '^</?(' +\n arrayExclude(block_names, needSplitInlineHtmlTokenTags).join('|') +\n ')(?=(\\\\s|/?>|$))',\n 'i',\n ),\n type: this.type,\n beforeDispatch: ({ tr, start, match }) => {\n const $pos = tr.doc.resolve(start)\n tr.setSelection(TextSelection.near($pos))\n tr.insertText(match[0])\n },\n }),\n ]\n\n return rules\n }\n\n createCommands() {\n return {\n createHtmlBlock: this.createHtmlBlock,\n }\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'html_block',\n node: this.name,\n hasOpenClose: false,\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n state.write('\\n')\n state.text(node.textContent, false)\n state.text('\\n')\n state.closeBlock(node)\n state.ensureNewLine()\n }\n}\n", "/**\n * exclude array member from array\n * @param arr\n * @param excludeArr\n * @returns\n */\nexport const arrayExclude = (arr: any[], excludeArr: any[]) => {\n return arr.filter((item) => !excludeArr.includes(item))\n}\n\n/**\n * Supports cyclically dependent objects to json\n * @param o\n * @returns\n */\nexport const jsonStringify = (o: any) => {\n let cache: any[] = []\n let str = JSON.stringify(o, function (key, value) {\n if (typeof value === 'object' && value !== null) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n cache = []\n return str\n}\n\n/**\n * Remove any common leading whitespace from every line in `text`.\n * Inspired by Python's `textwrap.dedent`.\n *\n * @public\n */\nexport function dedent(text: string) {\n let minWhitespace = -1\n const lines = text.split(\"\\n\")\n for (const line of lines) {\n if (line.length > 0) {\n const match = /^(\\s*).*$/.exec(line)\n if (match) {\n minWhitespace = minWhitespace === -1 ? match[1].length : Math.min(minWhitespace, match[1].length)\n } else {\n return text\n }\n }\n }\n return lines.map((line) => (line.length > 0 ? line.slice(minWhitespace) : line)).join(\"\\n\")\n}\n", "import { html } from '@codemirror/lang-html'\nimport { Compartment, Extension } from '@codemirror/state'\nimport type { EditorView as CodeMirrorEditorView } from '@codemirror/view'\nimport type { ProsemirrorNode } from '@rme-sdk/main'\nimport { type EditorSchema } from '@rme-sdk/main'\nimport type { EditorView } from '@rme-sdk/pm/view'\nimport type { Node as ProseNode } from 'prosemirror-model'\nimport type { NodeView } from 'prosemirror-view'\nimport { MfCodemirrorView } from '../../codemirror/codemirror'\nimport { addLabelToDom } from '../../utils/dom'\nimport { isImageElement } from '../../utils/html'\nimport { LineHtmlBlockExtensionOptions } from './html-block-types'\n\nexport function removeNewlines(str: string) {\n return str.replace(/\\n+|\\t/g, '')\n}\n\nexport class HtmlNodeView implements NodeView {\n // nodeview params\n private _node: ProseNode\n private _outerView: EditorView\n private _getPos: () => number\n\n // nodeview dom\n dom: HTMLElement\n private _htmlRenderElt: HTMLElement | undefined\n private _htmlSrcElt: HTMLElement | null = null\n private _innerView: CodeMirrorEditorView | undefined\n private readonly schema: EditorSchema\n private readonly languageConf: Compartment\n mfCodemirrorView?: MfCodemirrorView\n destroying = false\n options: LineHtmlBlockExtensionOptions = {}\n\n constructor(\n node: ProseNode,\n view: EditorView,\n getPos: () => number,\n options?: LineHtmlBlockExtensionOptions,\n ) {\n // store arguments\n this._node = node\n this._outerView = view\n this._getPos = getPos\n this.schema = node.type.schema\n if (options) {\n this.options = { ...this.options, ...options }\n }\n\n // create dom representation of nodeview\n this.dom = document.createElement('div')\n this.dom.classList.add('html-node')\n\n this._htmlRenderElt = document.createElement('p')\n this._htmlRenderElt.textContent = ''\n this._htmlRenderElt.classList.add('html-node-render')\n\n const labelDom = addLabelToDom(this.dom, {\n labelName: 'HTML',\n })\n labelDom.addEventListener('click', () => this.ensureFocus())\n\n this.dom.appendChild(this._htmlRenderElt)\n\n this._htmlSrcElt = document.createElement('span')\n this._htmlSrcElt.classList.add('html-src', 'node-hide')\n\n this.languageConf = new Compartment()\n\n this.dom.appendChild(this._htmlSrcElt)\n\n this.renderHtml()\n }\n\n /**\n * Ensure focus on the inner editor whenever this node has focus.\n * This helps to prevent accidental deletions of html blocks.\n */\n ensureFocus() {\n if (this._outerView.hasFocus()) {\n if (this._innerView) {\n this._innerView.focus()\n } else {\n this.openEditor()\n }\n }\n }\n\n ignoreMutation = () => true\n\n update(node: ProsemirrorNode): boolean {\n this._node = node\n return !!this.mfCodemirrorView?.update(node)\n }\n\n // == Events ===================================== //\n stopEvent(): boolean {\n return true\n }\n\n // == Rendering ===================================== //\n\n renderHtml() {\n if (!this._htmlRenderElt) {\n return\n }\n\n // get tex string to render\n const content = removeNewlines(this.mfCodemirrorView?.content || this._node.textContent)\n const texString = content.trim()\n\n if (texString.length < 1) {\n while (this._htmlRenderElt.firstChild) {\n this._htmlRenderElt.firstChild.remove()\n }\n return\n } else {\n // ignore\n }\n\n try {\n while (this._htmlRenderElt.firstChild) {\n this._htmlRenderElt.firstChild.remove()\n }\n\n this._htmlRenderElt.classList.remove('node-hide')\n this._htmlRenderElt.classList.add('node-show')\n\n const domParser = new DOMParser()\n const doc = domParser.parseFromString(texString, 'text/html')\n\n const processNodes = (nodes: NodeList | HTMLCollection) => {\n const nodeArray = Array.from(nodes)\n nodeArray.forEach((child) => {\n if (isImageElement(child) && child.src && this.options.handleViewImgSrcUrl) {\n let targetUrl = child.src\n if (child.src.includes(location.origin)) {\n targetUrl = child.src.split(location.origin)[1]\n }\n void this.options.handleViewImgSrcUrl(targetUrl).then((newHref) => {\n child.src = newHref\n })\n }\n if (child.nodeType === Node.ELEMENT_NODE) {\n const element = child as Element\n if (element.children.length > 0) {\n processNodes(element.children)\n }\n }\n this._htmlRenderElt?.appendChild(child)\n })\n }\n\n processNodes(doc.body.childNodes)\n } catch (err) {}\n }\n\n setSelection(anchor: number, head: number): void {\n if (!this._innerView) {\n this.openEditor()\n this.mfCodemirrorView!.setSelection(anchor, head)\n } else {\n this.mfCodemirrorView?.setSelection(anchor, head)\n }\n }\n\n openEditor() {\n if (this._innerView) {\n throw Error('inner view should not exist!')\n }\n\n const codemirrorExtensions: Extension[] = [html()]\n if (this.options?.codemirrorExtensions) {\n codemirrorExtensions.push(...this.options.codemirrorExtensions)\n }\n this.mfCodemirrorView = new MfCodemirrorView({\n view: this._outerView,\n node: this._node,\n getPos: this._getPos,\n languageName: 'html',\n extensions: codemirrorExtensions,\n options: {\n useProsemirrorHistoryKey: true,\n codemirrorEditorViewConfig: {\n parent: this._htmlSrcElt!,\n },\n copyButton: {\n enabled: true,\n customCopyFunction: this.options?.customCopyFunction,\n },\n },\n })\n\n this._htmlSrcElt!.classList.remove('node-hide')\n this._innerView = this.mfCodemirrorView.cm\n this._htmlRenderElt?.classList.add('node-hide')\n\n const prevCursorPos: number = this._node.textContent.length || 0\n\n this.setSelection(prevCursorPos, prevCursorPos)\n\n this._innerView.focus()\n\n this._innerView.contentDOM.addEventListener('blur', () => {\n if (this.destroying) return\n this.closeEditor(true)\n })\n\n this.mfCodemirrorView.forwardSelection()\n }\n\n destroy() {\n this.destroying = true\n // close the inner editor without rendering\n this.closeEditor(false)\n // clean up dom elements\n if (this._htmlRenderElt) {\n this._htmlRenderElt.remove()\n delete this._htmlRenderElt\n }\n if (this._htmlSrcElt) {\n this._htmlSrcElt.remove()\n this._htmlSrcElt = null // fix for the error\n }\n\n this.dom.remove()\n }\n\n /**\n * Called when the inner ProseMirror editor should close.\n *\n * @param render Optionally update the rendered html after closing. (which\n * is generally what we want to do, since the user is done editing!)\n */\n closeEditor(render: boolean = true) {\n if (this._innerView) {\n this._innerView.destroy()\n this._innerView = undefined\n }\n if (this.mfCodemirrorView) {\n this.mfCodemirrorView.destroy()\n this.mfCodemirrorView = undefined\n }\n\n if (render) {\n this.renderHtml()\n }\n }\n}\n", "import type {\n InputRule,\n NodeExtensionSpec,\n NodeViewMethod\n} from '@rme-sdk/main'\nimport {\n ExtensionTag,\n NodeExtension,\n extension,\n nodeInputRule\n} from '@rme-sdk/main'\nimport block_names from 'markdown-it/lib/common/html_blocks.mjs'\nimport { NodeSerializerOptions, ParserRuleType } from '../../transform'\nimport {\n needSplitInlineHtmlTokenTags\n} from '../../transform/markdown-it-html-inline'\nimport { getTagName } from '../../utils/html'\nimport { HTMLInlineView } from './html-inline-view'\n\nconst attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'\n\nconst unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+'\nconst single_quoted = \"'[^']*'\"\nconst double_quoted = '\"[^\"]*\"'\n\nconst attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'\n\nconst attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)'\n\nconst open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>'\n\nconst close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>'\n\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp('(?:' + open_tag + '|' + close_tag + ')', 'g')\n\ntype LineHtmlInlineExtensionOptions = {\n handleViewImgSrcUrl?: (src: string) => Promise<string>\n}\n@extension<LineHtmlInlineExtensionOptions>({\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n defaultOptions: {\n handleViewImgSrcUrl: async (src: string) => src,\n },\n})\nexport class HtmlInlineNodeExtension extends NodeExtension<LineHtmlInlineExtensionOptions> {\n static disableExtraAttributes = true\n\n get name() {\n return 'html_inline_node' as const\n }\n\n createTags() {\n return [ExtensionTag.InlineNode]\n }\n\n createNodeSpec(): NodeExtensionSpec {\n return {\n inline: true,\n selectable: true,\n atom: true,\n marks: '',\n attrs: {\n key: {\n default: '',\n },\n htmlText: {\n default: '',\n },\n fromInput: {\n default: false,\n },\n },\n toDOM: (node) => {\n const dom = document.createElement('span')\n\n dom.classList.add('inline-input-render')\n dom.innerHTML = node.attrs.htmlText\n\n return dom\n },\n }\n }\n\n createNodeViews(): NodeViewMethod | Record<string, NodeViewMethod> {\n return (node, view, getPos) => new HTMLInlineView(node, view, getPos)\n }\n\n createInputRules(): InputRule[] {\n const rules: InputRule[] = [\n nodeInputRule({\n regexp: HTML_OPEN_CLOSE_TAG_RE,\n type: this.type,\n getAttributes: (match) => {\n return {\n htmlText: match[0],\n fromInput: true,\n }\n },\n beforeDispatch: ({ tr, start, match }) => {\n const $pos = tr.doc.resolve(start)\n const node = $pos.node(1)\n console.log('last', node.lastChild)\n\n // if (node.lastChild?.type.name === 'html_inline_node') {\n // tr.setNodeAttribute(start, 'fromInput', true )\n // }\n console.log('node', node)\n // tr.setSelection(TextSelection.near($pos))\n },\n shouldSkip: (props) => {\n const tagName = getTagName(props.fullMatch)\n\n if (needSplitInlineHtmlTokenTags.includes(tagName) || block_names.includes(tagName)) {\n return true\n }\n\n props.state.tr.replaceRangeWith(\n props.start,\n props.end,\n this.type.create({ htmlText: props.fullMatch, fromInput: true }),\n )\n\n return false\n },\n }),\n ]\n\n return rules\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.inline,\n token: 'html_inline_node',\n node: this.name,\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n state.text(node.attrs.htmlText || '')\n }\n}\n", "// prosemirror imports\nimport { history, redo, undo } from '@rme-sdk/pm/history'\nimport { keymap } from '@rme-sdk/pm/keymap'\nimport { Node as ProseNode } from '@rme-sdk/pm/model'\nimport {\n Command,\n EditorState,\n Plugin,\n TextSelection,\n Transaction\n} from '@rme-sdk/pm/state'\nimport { Decoration, EditorView, NodeView } from '@rme-sdk/pm/view'\nimport { ExtensionsOptions } from '..'\nimport { isImageElement } from '../../utils/html'\n\n/**\n * A ProseMirror command for determining whether to exit a math block, based on\n * specific conditions. Normally called when the user has\n *\n * @param outerView The main ProseMirror EditorView containing this math node.\n * @param dir Used to indicate desired cursor position upon closing a math node.\n * When set to -1, cursor will be placed BEFORE the math node.\n * When set to +1, cursor will be placed AFTER the math node.\n * @param borderMode An exit condition based on cursor position and direction.\n * @param requireEmptySelection When TRUE, only exit the math node when the\n * (inner) selection is empty.\n * @returns A new ProseMirror command based on the input configuration.\n */\nexport function collapseCmd(\n outerView: EditorView,\n dir: 1 | -1,\n requireOnBorder: boolean,\n requireEmptySelection: boolean = true,\n): Command {\n // create a new ProseMirror command based on the input conditions\n return (innerState: EditorState, dispatch: ((tr: Transaction) => void) | undefined) => {\n // get selection info\n let outerState: EditorState = outerView.state\n let { to: outerTo, from: outerFrom } = outerState.selection\n let { to: innerTo, from: innerFrom } = innerState.selection\n\n if (requireEmptySelection && innerTo !== innerFrom) {\n return false\n }\n let currentPos: number = dir > 0 ? innerTo : innerFrom\n\n if (requireOnBorder) {\n // (subtract two from nodeSize to account for start and end tokens)\n let nodeSize = innerState.doc.nodeSize - 2\n\n // early return if exit conditions not met\n if (dir > 0 && currentPos < nodeSize) {\n return false\n }\n if (dir < 0 && currentPos > 0) {\n return false\n }\n }\n\n if (dispatch) {\n // set outer selection to be outside of the nodeview\n let targetPos: number = dir > 0 ? outerTo : outerFrom\n\n outerView.dispatch(\n outerState.tr.setSelection(TextSelection.create(outerState.doc, targetPos)),\n )\n\n // must return focus to the outer view, otherwise no cursor will appear\n outerView.focus()\n }\n\n return true\n }\n}\n\n\ninterface IHtmlInlineViewOptions {\n handleViewImgSrcUrl?: ExtensionsOptions['handleViewImgSrcUrl']\n}\n\nexport class HTMLInlineView implements NodeView {\n // nodeview params\n private _node: ProseNode\n private _outerView: EditorView\n private _getPos: () => number | undefined\n\n // nodeview dom\n dom: HTMLElement\n private _htmlRenderElt: HTMLElement | undefined\n private _htmlSrcElt: HTMLElement | undefined\n private _innerView: EditorView | undefined\n\n private _tagName: string\n private _isEditing: boolean\n\n options: IHtmlInlineViewOptions = {}\n\n constructor(node: ProseNode, view: EditorView, getPos: () => number | undefined) {\n // store arguments\n this._node = node\n this._outerView = view\n this._getPos = getPos\n\n // editing state\n this._isEditing = false\n\n // options\n this._tagName = 'span'\n\n // create dom representation of nodeview\n this.dom = document.createElement(this._tagName)\n this.dom.classList.add('inline-input')\n\n this._htmlRenderElt = document.createElement('span')\n this._htmlRenderElt.textContent = ''\n this._htmlRenderElt.classList.add('inline-input-render')\n this.dom.appendChild(this._htmlRenderElt)\n\n this._htmlSrcElt = document.createElement('span')\n this._htmlSrcElt.spellcheck = false\n this.dom.appendChild(this._htmlSrcElt)\n\n // ensure\n this.dom.addEventListener('click', () => this.ensureFocus())\n\n // render initial content\n\n if (node.attrs.fromInput) {\n setTimeout(() => {\n this.openEditor()\n })\n } else {\n this.renderHtml()\n }\n }\n\n destroy() {\n // close the inner editor without rendering\n this.closeEditor(false)\n\n // clean up dom elements\n if (this._htmlRenderElt) {\n this._htmlRenderElt.remove()\n delete this._htmlRenderElt\n }\n if (this._htmlSrcElt) {\n this._htmlSrcElt.remove()\n delete this._htmlSrcElt\n }\n\n this.dom.remove()\n }\n\n ensureFocus() {\n if (this._innerView && this._outerView.hasFocus()) {\n this._innerView.focus()\n }\n }\n\n // == Updates ======================================= //\n\n update(node: ProseNode, decorations: readonly Decoration[]) {\n if (!node.sameMarkup(this._node)) return false\n this._node = node\n console.log('update', node)\n\n if (!this._isEditing) {\n this.renderHtml()\n }\n\n return true\n }\n\n // == Events ===================================== //\n\n selectNode() {\n if (!this._outerView.editable) {\n return\n }\n\n if (!this._isEditing) {\n this.openEditor()\n }\n }\n\n deselectNode() {\n if (this._isEditing) {\n this.closeEditor()\n }\n }\n\n stopEvent(event: Event): boolean {\n return (\n this._innerView !== undefined &&\n event.target !== undefined &&\n this._innerView.dom.contains(event.target as Node)\n )\n }\n\n ignoreMutation() {\n return true\n }\n\n // == Rendering ===================================== //\n\n renderHtml(preview = false) {\n if (!this._htmlRenderElt) {\n return\n }\n\n // get tex string to render\n let content = this._innerView?.state.doc.textContent || this._node.attrs?.htmlText || ''\n let texString = content.trim()\n\n try {\n while (this._htmlRenderElt.firstChild) {\n this._htmlRenderElt.firstChild.remove()\n }\n const renderEl = document.createElement('span')\n\n const domParser = new DOMParser()\n const doc = domParser.parseFromString(texString, 'text/html')\n doc.body.childNodes.forEach((child) => {\n if (isImageElement(child) && child.src && this.options.handleViewImgSrcUrl) {\n let targetUrl = child.src\n\n if (child.src.includes(location.origin)) {\n targetUrl = child.src.split(location.origin)[1]\n }\n\n this.options.handleViewImgSrcUrl(targetUrl).then((newHref) => {\n child.src = newHref\n })\n }\n renderEl.appendChild(child)\n })\n\n if (renderEl.childNodes.length === 1) {\n this._htmlRenderElt.remove()\n this._htmlRenderElt = renderEl.firstElementChild as any\n }\n\n if (this._htmlRenderElt) {\n this.dom.append(this._htmlRenderElt)\n\n if (preview) {\n this._htmlRenderElt.classList.add('inline-input-preview')\n }\n\n }\n } catch (err) {\n console.error(err)\n this._htmlRenderElt?.classList.add('parse-error')\n this.dom.setAttribute('title', (err as any).toString())\n }\n }\n\n // == Inner Editor ================================== //\n\n dispatchInner(tr: Transaction) {\n if (!this._innerView) {\n return\n }\n\n let { state } = this._innerView.state.applyTransaction(tr)\n this._innerView.updateState(state)\n\n this.renderHtml(true)\n }\n\n openEditor() {\n if (this._innerView) {\n console.warn('[HTMLInlineView] editor already open when openEditor was called')\n return\n }\n\n // create a nested ProseMirror view\n this._innerView = new EditorView(this._htmlSrcElt!, {\n state: EditorState.create({\n doc: this._outerView.state.schema.node('paragraph', null, [\n this._outerView.state.schema.text(this._node.attrs?.htmlText),\n ]),\n plugins: [\n history(),\n keymap({\n Tab: (state, dispatch) => {\n if (dispatch) {\n dispatch(state.tr.insertText('\\t'))\n }\n return true\n },\n ArrowLeft: collapseCmd(this._outerView, -1, true),\n ArrowRight: collapseCmd(this._outerView, +1, true),\n ArrowUp: collapseCmd(this._outerView, -1, true),\n ArrowDown: collapseCmd(this._outerView, +1, true),\n 'Mod-z': (state, dispatch, view) => {\n return undo(state, dispatch, view)\n },\n 'Shift-Mod-z': (state, dispatch, view) => {\n return redo(state, dispatch, view)\n },\n }),\n\n new Plugin({\n props: {\n handleDOMEvents: {\n blur: (view) => {\n const pos = this._getPos()\n if (pos !== undefined) {\n const text = this._innerView?.state.doc.textContent || ''\n const tr = this._outerView.state.tr\n tr.setNodeAttribute(pos, 'fromInput', false)\n tr.setNodeAttribute(pos, 'htmlText', text)\n this._outerView.dispatch(tr)\n }\n this.closeEditor()\n },\n },\n },\n }),\n ],\n }),\n dispatchTransaction: this.dispatchInner.bind(this),\n })\n\n this._innerView.dom.classList.add('inline-input-src')\n this._innerView.dom.classList.remove('ProseMirror')\n\n // focus element\n let innerState = this._innerView.state\n this._innerView.focus()\n\n let innerPos = innerState.doc.textContent.length || 0\n\n this._innerView.dispatch(\n innerState.tr.setSelection(TextSelection.create(innerState.doc, innerPos)),\n )\n\n this._htmlRenderElt?.classList.add('inline-input-preview')\n\n this._isEditing = true\n }\n\n /**\n * Called when the inner ProseMirror editor should close.\n *\n * @param render Optionally update the rendered html after closing. (which\n * is generally what we want to do, since the user is done editing!)\n */\n closeEditor(render: boolean = true) {\n if (this._innerView) {\n const pos = this._getPos()\n if (pos !== undefined) {\n const text = this._innerView.state.doc.textContent || ''\n // const tr = this._outerView.state.tr\n // console.log('text', text)\n // console.log('pos', pos)\n // tr.setNodeAttribute(pos - 1, 'htmlText', text)\n // this._outerView.dispatch(tr)\n }\n this._innerView?.destroy()\n this._innerView = undefined\n }\n\n if (render) {\n this.renderHtml()\n this._htmlRenderElt?.classList.add('inline-input-render')\n this._htmlRenderElt?.classList.remove('inline-input-preview')\n }\n\n this._isEditing = false\n }\n}\n", "import type {\n ApplySchemaAttributes,\n CommandFunction,\n InputRule,\n LiteralUnion,\n NodeExtensionSpec,\n NodeSpecOverride,\n ProsemirrorAttributes,\n} from '@rme-sdk/core'\nimport {\n cx,\n extension,\n ExtensionTag,\n NodeExtension,\n nodeInputRule,\n omitExtraAttributes,\n} from '@rme-sdk/core'\nimport type { NodeViewComponentProps } from '@rme-sdk/react'\nimport type { ComponentType } from 'react'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport { buildHtmlStringFromAst, getAttrsBySignalHtmlContent } from '../../utils/html'\nimport { IframeNodeView } from './Iframe-nodeview'\nimport type { IframeOptions } from './iframe-types'\n\nexport type IframeAttributes = ProsemirrorAttributes<{\n src: string\n frameBorder?: number | string\n allowFullScreen?: 'true' | boolean\n width?: number\n height?: number\n type?: LiteralUnion<'youtube', string>\n}>\n\n/**\n * An extension for the remirror editor.\n */\n@extension<IframeOptions>({\n defaultOptions: {\n defaultSource: '',\n class: 'remirror-iframe',\n enableResizing: false,\n },\n staticKeys: ['defaultSource', 'class'],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class IframeExtension extends NodeExtension<IframeOptions> {\n get name() {\n return 'iframe_inline' as const\n }\n\n createTags() {\n return [ExtensionTag.InlineNode, ExtensionTag.Media]\n }\n\n ReactComponent: ComponentType<NodeViewComponentProps> | undefined = (props) => {\n return <IframeNodeView {...props} />\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n const { defaultSource } = this.options\n\n return {\n inline: true,\n selectable: true,\n atom: true,\n ...override,\n attrs: {\n ...extra.defaults(),\n src: defaultSource ? { default: defaultSource } : {},\n allowFullScreen: { default: true },\n frameBorder: { default: 0 },\n type: { default: 'custom' },\n width: { default: null },\n height: { default: null },\n },\n parseDOM: [\n {\n tag: 'iframe',\n getAttrs: (dom): IframeAttributes => {\n const frameBorder = (dom as HTMLElement).getAttribute('frameborder')\n const width = (dom as HTMLElement).getAttribute('width')\n const height = (dom as HTMLElement).getAttribute('height')\n return {\n ...extra.parse(dom),\n type: (dom as HTMLElement).getAttribute('data-embed-type') ?? undefined,\n height: (height && Number.parseInt(height, 10)) || undefined,\n width: (width && Number.parseInt(width, 10)) || undefined,\n allowFullScreen:\n (dom as HTMLElement).getAttribute('allowfullscreen') === 'false' ? false : true,\n frameBorder: frameBorder ? Number.parseInt(frameBorder, 10) : 0,\n src: (dom as HTMLElement).getAttribute('src') ?? '',\n }\n },\n },\n ...(override.parseDOM ?? []),\n ],\n toDOM: (node) => {\n const { frameBorder, allowFullScreen, src, type, ...rest } = omitExtraAttributes(\n node.attrs,\n extra,\n )\n const { class: className } = this.options\n\n return [\n 'iframe',\n {\n ...extra.dom(node),\n ...rest,\n class: cx(className, `${className}-${type as string}`),\n src,\n 'data-embed-type': type,\n allowfullscreen: allowFullScreen ? 'true' : 'false',\n frameBorder: frameBorder?.toString(),\n },\n ]\n },\n }\n }\n\n addIframe = (attributes: IframeAttributes): CommandFunction => {\n return ({ tr, dispatch }) => {\n dispatch?.(tr.replaceSelectionWith(this.type.create(attributes)))\n\n return true\n }\n }\n\n createCommands() {\n return {\n addIframe: this.addIframe,\n }\n }\n\n createInputRules(): InputRule[] {\n const rules: InputRule[] = [\n nodeInputRule({\n regexp: new RegExp('<iframe[^>]*>'),\n type: this.type,\n getAttributes: (match) => {\n return getAttrsBySignalHtmlContent(match[0])\n },\n }),\n ]\n\n return rules\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.inline,\n token: 'iframe_inline',\n node: this.name,\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n state.text(\n buildHtmlStringFromAst({\n tag: 'iframe',\n attrs: node.attrs,\n voidElement: true,\n }),\n false,\n )\n }\n}\n", "import type { NodeViewComponentProps } from '@rme-sdk/react'\nimport { useRef } from 'react'\nimport { Popover } from 'zens'\nimport { Resizable } from '../../components/Resizable'\n\nexport function IframeNodeView(props: NodeViewComponentProps) {\n const { node, selected } = props\n const initRef = useRef<() => void>()\n\n return (\n <Popover placement='top-start' open={selected} arrow={false}>\n <Resizable controlInit={(init) => (initRef.current = init)} {...props}>\n <iframe onLoad={() => initRef.current?.()} {...node.attrs}/>\n </Resizable>\n </Popover>\n )\n}\n", "import type { NodeViewComponentProps } from '@rme-sdk/react'\nimport { memo, useCallback, useEffect, useRef, useState, type FC } from 'react'\nimport styled from 'styled-components'\nimport { ResizableHandle, ResizableHandleType } from './ResizableHandle'\n\nconst throttle = (delay: number, noTrailing: boolean, callback: (...args: any[]) => void) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n let lastExec = 0\n\n return function (...args: any[]) {\n const elapsed = Date.now() - lastExec\n\n const execute = () => {\n lastExec = Date.now()\n callback(...args)\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n\n if (elapsed > delay) {\n execute()\n } else if (!noTrailing) {\n timeoutId = setTimeout(execute, delay - elapsed)\n }\n }\n}\n\nexport enum ResizableRatioType {\n Fixed,\n Flexible,\n}\n\nconst ResizableContainer = styled.div`\n display: inline-flex;\n position: relative;\n max-width: 100%;\n user-select: none;\n -webkit-user-select: none; /* Safari */\n -moz-user-select: none; /* Firefox */\n -ms-user-select: none; /* Edge, IE */\n border-radius: 2px;\n transition: all 0.15s ease-out;\n`\n\ninterface ResizableProps extends BaseComponentProps, NodeViewComponentProps {\n selected: boolean\n aspectRatio?: ResizableRatioType\n defaultSize?: { width: number; height: number }\n controlInit?: (init: () => void) => void\n onResize?: (e: React.MouseEvent<Element, MouseEvent>) => void\n}\n\nconst MIN_WIDTH = 20\n\nexport const Resizable: FC<ResizableProps> = memo((props) => {\n const {\n node,\n aspectRatio = ResizableRatioType.Fixed,\n updateAttributes,\n selected,\n controlInit,\n onResize,\n } = props\n\n const [size, setSize] = useState<{ width?: number; height?: number }>({})\n const [inNode, setInNode] = useState(false)\n const [hasChanged, setHasChanged] = useState(false)\n const destoryList = useRef<(() => void)[]>([])\n const containerRef = useRef<HTMLDivElement>(null)\n const startWidthRef = useRef(0)\n const startHeightRef = useRef(0)\n const currentWidthRef = useRef(0)\n const currentHeightRef = useRef(0)\n const isResizingRef = useRef(false)\n\n const startResizing = useCallback(\n (e: React.MouseEvent<Element, MouseEvent>, handleType: ResizableHandleType) => {\n e.preventDefault()\n\n const startX = e.pageX\n const startY = e.pageY\n const startWidth = startWidthRef.current || 0\n const startHeight = startHeightRef.current || 0\n\n // Initialize current dimensions and start resizing\n currentWidthRef.current = startWidth\n currentHeightRef.current = startHeight\n isResizingRef.current = true\n\n const onMouseMove = throttle(100, false, (event: any) => {\n // Only process if still resizing\n if (!isResizingRef.current) return\n const currentX = event.pageX\n const currentY = event.pageY\n const diffX = currentX - startX\n const diffY = currentY - startY\n let newWidth: number | null = null\n let newHeight: number | null = null\n\n if (aspectRatio === ResizableRatioType.Fixed && startWidth && startHeight) {\n switch (handleType) {\n case ResizableHandleType.Right:\n case ResizableHandleType.TopRight:\n case ResizableHandleType.BottomRight:\n newWidth = startWidth + diffX\n newHeight = (startHeight / startWidth) * newWidth!\n break\n case ResizableHandleType.Left:\n case ResizableHandleType.TopLeft:\n case ResizableHandleType.BottomLeft:\n newWidth = startWidth - diffX\n newHeight = (startHeight / startWidth) * newWidth\n break\n case ResizableHandleType.Bottom:\n newHeight = startHeight + diffY\n newWidth = (startWidth / startHeight) * newHeight!\n break\n case ResizableHandleType.Top:\n newHeight = startHeight - diffY\n newWidth = (startWidth / startHeight) * newHeight!\n break\n }\n } else if (aspectRatio === ResizableRatioType.Flexible) {\n switch (handleType) {\n case ResizableHandleType.Right:\n newWidth = startWidth + diffX\n break\n case ResizableHandleType.Left:\n newWidth = startWidth - diffX\n break\n case ResizableHandleType.Bottom:\n newHeight = startHeight + diffY\n break\n case ResizableHandleType.Top:\n newHeight = startHeight - diffY\n break\n case ResizableHandleType.BottomRight:\n case ResizableHandleType.TopRight:\n newWidth = startWidth + diffX\n newHeight = startHeight + diffY\n break\n case ResizableHandleType.BottomLeft:\n case ResizableHandleType.TopLeft:\n newWidth = startWidth - diffX\n newHeight = startHeight + diffY\n break\n }\n }\n\n if (typeof newWidth === 'number' && newWidth < MIN_WIDTH) {\n if (aspectRatio === ResizableRatioType.Fixed && startWidth && startHeight) {\n newWidth = MIN_WIDTH\n newHeight = (startHeight / startWidth) * newWidth\n } else if (aspectRatio === ResizableRatioType.Flexible) {\n newWidth = MIN_WIDTH\n }\n }\n\n if (newWidth && containerRef.current && isResizingRef.current) {\n currentWidthRef.current = Math.round(newWidth!)\n setSize((prev) => ({ ...prev, width: currentWidthRef.current }))\n }\n\n if (newHeight && isResizingRef.current) {\n currentHeightRef.current = Math.round(newHeight!)\n setSize((prev) => ({ ...prev, height: currentHeightRef.current }))\n }\n })\n\n const onMouseUp = (event: any) => {\n event.preventDefault()\n event.stopPropagation()\n\n // Stop resizing immediately to prevent further mousemove updates\n isResizingRef.current = false\n\n document.removeEventListener('mousemove', onMouseMove)\n document.removeEventListener('mouseup', onMouseUp)\n\n // Use the ref values which are always up to date\n const finalWidth = currentWidthRef.current\n const finalHeight = currentHeightRef.current\n\n startWidthRef.current = finalWidth\n startHeightRef.current = finalHeight\n setSize({ width: finalWidth, height: finalHeight })\n\n updateAttributes({\n ...node.attrs,\n width: finalWidth,\n height: finalHeight,\n })\n onResize?.(event)\n }\n\n document.addEventListener('mousemove', onMouseMove)\n document.addEventListener('mouseup', onMouseUp)\n\n destoryList.current.push(() => {\n isResizingRef.current = false\n document.removeEventListener('mousemove', onMouseMove)\n })\n destoryList.current.push(() => document.removeEventListener('mouseup', onMouseUp))\n },\n [aspectRatio, node.attrs, updateAttributes, onResize],\n )\n\n const handleResizing = useCallback(\n (e: React.MouseEvent, handleType: ResizableHandleType) => {\n setHasChanged(true)\n startResizing(e, handleType)\n },\n [startResizing],\n )\n useEffect(() => {\n const init = () => {\n if (containerRef.current) {\n const { width, height } = containerRef.current.getBoundingClientRect()\n startWidthRef.current = width\n startHeightRef.current = height\n currentWidthRef.current = width\n currentHeightRef.current = height\n setSize({ width, height })\n }\n }\n\n if (controlInit) {\n controlInit(init)\n } else {\n init()\n }\n\n return () => {\n destoryList.current.forEach((destory) => destory())\n destoryList.current = []\n }\n }, [controlInit])\n\n const handleVisible = selected || inNode\n\n return (\n <ResizableContainer\n ref={containerRef}\n style={\n hasChanged\n ? {\n width: `${size.width}px`,\n height: `${size.height}px`,\n aspectRatio: `${size.width} / ${size.height}`,\n }\n : undefined\n }\n onMouseOver={() => setInNode(true)}\n onMouseOut={() => setInNode(false)}\n >\n <ResizableHandle\n visible={handleVisible}\n selected={selected}\n onResizing={handleResizing}\n handleType={ResizableHandleType.TopLeft}\n />\n <ResizableHandle\n visible={handleVisible}\n selected={selected}\n onResizing={handleResizing}\n handleType={ResizableHandleType.TopRight}\n />\n <ResizableHandle\n visible={handleVisible}\n selected={selected}\n onResizing={handleResizing}\n handleType={ResizableHandleType.BottomLeft}\n />\n <ResizableHandle\n visible={handleVisible}\n selected={selected}\n onResizing={handleResizing}\n handleType={ResizableHandleType.BottomRight}\n />\n {props.children}\n </ResizableContainer>\n )\n})\n", "import { type FC } from 'react'\nimport styled, { css } from 'styled-components'\n\nexport enum ResizableHandleType {\n Right,\n Left,\n Top,\n Bottom,\n TopRight,\n TopLeft,\n BottomRight,\n BottomLeft,\n}\n\ninterface ResizableHandleProps extends BaseComponentProps {\n visible: boolean\n handleType: ResizableHandleType\n selected?: boolean\n onResizing?: (e: React.MouseEvent, handleType: ResizableHandleType) => void\n}\n\nconst ResizableHandleContainer = styled.span<ResizableHandleProps>`\n position: absolute;\n border-radius: 12px;\n border: 2px solid #fff;\n background: rgba(0, 0, 0, 0.65);\n border: 1px solid rgba(255, 255, 255, 0.5);\n border-radius: 6px;\n transition: opacity ${props => props.selected ? '100ms' : '300ms'} ease-in 0s;\n z-index: 99;\n\n ${(props) => {\n if (props.visible) {\n return css`\n opacity: 1;\n ${props.selected ? 'transform: scale(1.1);' : ''}\n `\n } else {\n return css`\n opacity: 0;\n `\n }\n }}\n\n ${(props) => {\n switch (props.handleType) {\n case ResizableHandleType.BottomLeft:\n return css`\n left: -6px;\n bottom: -6px;\n height: 6px;\n width: 6px;\n border-radius: 6px;\n background-color: ${props.theme.accentColor};\n cursor: sw-resize;\n `\n case ResizableHandleType.BottomRight:\n return css`\n right: -6px;\n bottom: -6px;\n height: 6px;\n width: 6px;\n border-radius: 6px;\n background-color: ${props.theme.accentColor};\n cursor: se-resize;\n `\n case ResizableHandleType.TopLeft:\n return css`\n left: -6px;\n top: -6px;\n height: 6px;\n width: 6px;\n border-radius: 6px;\n background-color: ${props.theme.accentColor};\n cursor: nw-resize;\n `\n case ResizableHandleType.TopRight:\n return css`\n right: -6px;\n top: -6px;\n height: 6px;\n width: 6px;\n border-radius: 6px;\n background-color: ${props.theme.accentColor};\n cursor: ne-resize;\n `\n case ResizableHandleType.Left:\n return css`\n left: 6px;\n top: calc(50% - 20px);\n height: 30px;\n width: 6px;\n cursor: col-resize;\n `\n case ResizableHandleType.Right:\n return css`\n right: 6px;\n top: calc(50% - 20px);\n height: 30px;\n width: 6px;\n cursor: col-resize;\n `\n case ResizableHandleType.Top:\n return css`\n left: calc(50% - 20px);\n top: 6px;\n height: 6px;\n width: 30px;\n cursor: row-resize;\n `\n case ResizableHandleType.Bottom:\n return css`\n right: calc(50% - 20px);\n bottom: 6px;\n height: 6px;\n width: 30px;\n cursor: row-resize;\n `\n default:\n break\n }\n }}\n`\n\nexport const ResizableHandle: FC<ResizableHandleProps> = (props) => {\n const handleResizing: React.MouseEventHandler = (e) => {\n if (props.onResizing) {\n props.onResizing(e, props.handleType)\n }\n }\n\n return (\n <ResizableHandleContainer\n className='resizeable-handle'\n visible={props.visible}\n selected={props.selected}\n handleType={props.handleType}\n onMouseDown={handleResizing}\n />\n )\n}\n", "/* eslint-disable @typescript-eslint/no-shadow */\nimport type {\n ApplySchemaAttributes,\n CommandFunction,\n DelayedPromiseCreator,\n EditorView,\n InputRule,\n NodeExtensionSpec,\n NodeSpecOverride,\n PrimitiveSelection,\n ProsemirrorAttributes,\n} from '@rme-sdk/core'\nimport {\n ErrorConstant,\n extension,\n ExtensionTag,\n getTextSelection,\n invariant,\n isElementDomNode,\n NodeExtension,\n nodeInputRule,\n omitExtraAttributes\n} from '@rme-sdk/core'\nimport type { ComponentType } from 'react'\nimport type { ExtensionsOptions } from '..'\nimport { getHtmlImageInputRule } from '../../inline-input-regex'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport { buildHtmlStringFromAst } from '../../utils/html'\nimport type { ImageNodeViewProps } from './image-nodeview'\nimport { ImageNodeView } from './image-nodeview'\n\ntype DelayedImage = DelayedPromiseCreator<ImageAttributes>\n\nexport interface ImageOptions {\n createPlaceholder?: (view: EditorView, pos: number) => HTMLElement\n updatePlaceholder?: (\n view: EditorView,\n pos: number,\n element: HTMLElement,\n progress: number,\n ) => void\n handleViewImgSrcUrl?: ExtensionsOptions['handleViewImgSrcUrl']\n imagePasteHandler?: ExtensionsOptions['imagePasteHandler']\n destroyPlaceholder?: (view: EditorView, element: HTMLElement) => void\n /**\n * The upload handler for the image extension.\n *\n * It receives a list of dropped or pasted files and returns a promise for the\n * attributes which should be used to insert the image into the editor.\n *\n * @param files - a list of files to upload.\n * @param setProgress - the progress handler.\n */\n uploadHandler?: (files: FileWithProgress[]) => DelayedImage[]\n\n /**\n * The image hosting service upload handler.\n * It receives the image src and returns a promise for the new src after uploading to image hosting service.\n *\n * @param src - the original image src\n * @returns Promise<string> - the new image src after uploading\n */\n imageHostingHandler?: (src: string) => Promise<string>\n\n /**\n * When pasting mixed text and image content (usually from Microsoft Office products) the content on the clipboard is either:\n *\n * a. one large image: containing effectively a screenshot of the original content (an image with text in it).\n * b. HTML content: containing usable text, but images with file protocol URLs (which cannot be resolved due to browser security restrictions).\n *\n * If true, this will extract the text from the clipboard data, and drop the images.\n * If false, the \"screenshot\" image will be used and the text will be dropped.\n *\n * @defaultValue true\n */\n preferPastedTextContent?: boolean\n}\n\ninterface FileWithProgress {\n file: File\n progress: SetProgress\n}\n\n/**\n * Set the progress.\n *\n * @param progress - a value between `0` and `1`.\n */\ntype SetProgress = (progress: number) => void\n\n/**\n * The image extension for placing images into your editor.\n *\n * TODO ->\n * - Captions https://glitch.com/edit/#!/pet-figcaption?path=index.js%3A27%3A1 into a preset\n *\n * TODO => Split this into an image upload extension and image extension.\n * - Add a base64 image\n */\n@extension<ImageOptions>({\n defaultOptions: {\n createPlaceholder,\n handleViewImgSrcUrl: async (src: string) => src,\n updatePlaceholder: () => {},\n destroyPlaceholder: () => {},\n uploadHandler,\n imageHostingHandler: async (src: string) => src,\n preferPastedTextContent: true,\n defaultInlineNode: 'div',\n },\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class HtmlImageExtension extends NodeExtension<ImageOptions> {\n get name() {\n return 'html_image' as const\n }\n\n ReactComponent: ComponentType<ImageNodeViewProps> | undefined = (props) => {\n const { handleViewImgSrcUrl, imageHostingHandler, imagePasteHandler } = this.options\n\n return (\n <ImageNodeView\n handleViewImgSrcUrl={handleViewImgSrcUrl}\n imagePasteHandler={imagePasteHandler}\n imageHostingHandler={imageHostingHandler}\n {...props}\n />\n )\n }\n\n createTags() {\n return [ExtensionTag.InlineNode, ExtensionTag.Media]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n const { preferPastedTextContent } = this.options\n return {\n inline: true,\n selectable: true,\n atom: true,\n ...override,\n attrs: {\n ...extra.defaults(),\n alt: { default: '' },\n crop: { default: null },\n height: { default: null },\n width: { default: null },\n rotate: { default: null },\n src: { default: null },\n title: { default: '' },\n 'data-file-name': { default: null },\n 'data-rme-loading': { default: null },\n 'data-rme-from-paste': { default: null },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (element) => {\n if (isElementDomNode(element)) {\n const attrs = getImageAttributes({ element, parse: extra.parse })\n\n if (preferPastedTextContent && attrs.src?.startsWith('file:///')) {\n return false\n }\n\n return attrs\n }\n\n return {}\n },\n },\n ...(override.parseDOM ?? []),\n ],\n toDOM: (node) => {\n const attrs = omitExtraAttributes(node.attrs, extra)\n return ['img', { ...extra.dom(node), ...attrs }]\n },\n }\n }\n\n insertImage(attributes: ImageAttributes, selection?: PrimitiveSelection): CommandFunction {\n return ({ tr, dispatch }) => {\n const { from, to } = getTextSelection(selection ?? tr.selection, tr.doc)\n const node = this.type.create(attributes)\n\n dispatch?.(tr.replaceRangeWith(from, to, node))\n\n return true\n }\n }\n\n createInputRules(): InputRule[] {\n return getHtmlImageInputRule(this.type).map(nodeInputRule)\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.inline,\n token: 'html_image',\n node: this.name,\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n state.text(\n buildHtmlStringFromAst({\n tag: 'img',\n attrs: node.attrs,\n voidElement: true,\n }),\n false,\n )\n }\n}\n\nexport type ImageAttributes = ProsemirrorAttributes<ImageExtensionAttributes>\n\nexport interface ImageExtensionAttributes {\n align?: 'center' | 'end' | 'justify' | 'left' | 'match-parent' | 'right' | 'start'\n alt?: string\n height?: string | number\n width?: string | number\n rotate?: string\n src: string\n title?: string\n\n /** The file name used to create the image. */\n 'data-file-name'?: string\n}\n\n/**\n * The set of valid image files.\n */\nconst IMAGE_FILE_TYPES = new Set([\n 'image/jpeg',\n 'image/gif',\n 'image/png',\n 'image/jpg',\n 'image/svg',\n 'image/webp',\n])\n\n/**\n * True when the provided file is an image file.\n */\nexport function isImageFileType(file: File): boolean {\n return IMAGE_FILE_TYPES.has(file.type)\n}\n\n/**\n * Get the width and the height of the image.\n */\nfunction getDimensions(element: HTMLElement) {\n let { width, height } = element.style\n width = width || element.getAttribute('width') || ''\n height = height || element.getAttribute('height') || ''\n\n return { width, height }\n}\n\n/**\n * Retrieve attributes from the dom for the image extension.\n */\nfunction getImageAttributes({\n element,\n parse,\n}: {\n element: HTMLElement\n parse: ApplySchemaAttributes['parse']\n}) {\n const { width, height } = getDimensions(element)\n\n return {\n ...parse(element),\n alt: element.getAttribute('alt') ?? '',\n height: Number.parseInt(height || '0', 10) || null,\n src: element.getAttribute('src') ?? null,\n title: element.getAttribute('title') ?? '',\n width: Number.parseInt(width || '0', 10) || null,\n 'data-file-name': element.getAttribute('data-file-name') ?? null,\n }\n}\n\nfunction createPlaceholder(): HTMLElement {\n const element = document.createElement('div')\n\n return element\n}\n\n/**\n * The default handler converts the files into their `base64` representations\n * and adds the attributes before inserting them into the editor.\n */\nfunction uploadHandler(files: FileWithProgress[]): DelayedImage[] {\n invariant(files.length > 0, {\n code: ErrorConstant.EXTENSION,\n message: 'The upload handler was applied for the image extension without any valid files',\n })\n\n let completed = 0\n const promises: DelayedPromiseCreator<ImageAttributes>[] = []\n\n for (const { file, progress } of files) {\n promises.push(\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n () =>\n new Promise<ImageAttributes>((resolve) => {\n const reader = new FileReader()\n\n reader.addEventListener(\n 'load',\n (readerEvent) => {\n completed += 1\n progress(completed / files.length)\n resolve({ src: readerEvent.target?.result as string, 'data-file-name': file.name })\n },\n { once: true },\n )\n\n reader.readAsDataURL(file)\n }),\n )\n }\n\n return promises\n}\n", "import type { NodeViewComponentProps } from '@rme-sdk/react'\nimport { omit } from 'lodash'\nimport { normalizeReference } from 'markdown-it/lib/common/utils.mjs'\nimport { useCallback, useEffect, useEffectEvent, useMemo, useRef } from 'react'\nimport type { PopoverStore } from 'zens'\nimport { Popover, Image as ZensImage } from 'zens'\nimport type { ExtensionsOptions } from '..'\nimport { Resizable } from '../../components/Resizable'\nimport { ImageToolTips } from './image-tool-tips'\n\nexport interface ImageNodeViewProps extends NodeViewComponentProps {\n resizeable?: boolean\n defaultSyntaxType?: 'html' | 'md'\n handleViewImgSrcUrl?: ExtensionsOptions['handleViewImgSrcUrl']\n imagePasteHandler?: ExtensionsOptions['imagePasteHandler']\n imageHostingHandler?: (src: string) => Promise<string>\n}\n\nexport type ReferInfo = {\n label?: string\n}\nconst warningFallBack =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAAAAACIM/FCAAAChElEQVR4Ae3aMW/TQBxAcb70k91AAiGuGlZAtOlQApWaDiSdklZq2RPUTm1xUWL3PgqSpygkXlh88N54nn7S2Trd3y/CP5IQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECPmPIEKECBEiRIgQIeX82+FBO0naB4eTRRkt5P7sNWt1Rw9RQvKThI2SYR4f5OoVW2rfRAYpT6hqHc8WeVHki9mgRdWwiAmyfA9AdrlaW5tlAHxcxQMpK8feRbGxPEkrSREN5ARg/y780V0GMIwFcgXwLg9byvsAN3FA8lfAfr7jYQZ0nqKAfAb21vYVwNruSoEvMUDuE+Ai7IKECZA+RAA5A7JiN6TMgFHzIeUb4DLshoQZ0H1uPGQOvFzVQZYtYNF4yBg4DnWQMAAmjYccArN6yBQ4ajzkAFjUQ+ZAv/GQNpDXQ3Kg03hIAhT1kAJIhLi1/vJl39Ic6Mf3+a2K8PM7BgahtgEwjuKI0lqGjSI8opRdYFb3sk/jODSGEZCVuyFFDzgPzYc8JMBkN2QMpI8RQMIQ2LvdBblNgdM4Lh/aQJaHrf3sAe2nKCDhGqCfb3VEcx1UNQTItlzQ3fYAvoZYIMUHgHRSbiyPU4BPZUSX2JWEbLZcW5v2qByrmMYKxZCq1mA6z4sin08HLapOy8gGPddtttT5HuHobZiwUXr6K85h6KjLWm/PH+MdTy/GR/12knb6g8mPZ38YECJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAhQoQIESJEiBAh0fUb5q7oCGreEVEAAAAASUVORK5CYII='\n\nexport function ImageNodeView(props: ImageNodeViewProps) {\n const {\n node,\n selected,\n updateAttributes,\n handleViewImgSrcUrl,\n imagePasteHandler,\n imageHostingHandler,\n view,\n } = props\n const initRef = useRef<() => void>(null)\n const popoverStore = useRef<PopoverStore>(null)\n const popoverRef = useRef<HTMLDivElement>(null)\n const fromPaste = node.attrs['data-rme-from-paste'] === 'true'\n const refers = view.state.doc.content.content.filter((node) => node.type.name === 'reference_def')\n const curRefer = useMemo(() => {\n let res:\n | {\n href?: string\n title?: string\n label?: string\n }\n | undefined\n\n refers.forEach((refer) => {\n const labelNode = refer.content.content.find(\n (contentNode) => contentNode.type.name === 'reference_label',\n )\n const hrefNode = refer.content.content.find(\n (contentNode) => contentNode.type.name === 'reference_href',\n )\n const titleNode = refer.content.content.find(\n (contentNode) => contentNode.type.name === 'reference_title',\n )\n if (!labelNode?.textContent || !node.attrs['data-refer-label']) {\n return\n }\n if (\n normalizeReference(labelNode?.textContent) ===\n normalizeReference(node.attrs['data-refer-label'])\n ) {\n res = {\n href: hrefNode?.textContent || '',\n title: titleNode?.textContent || '',\n label: labelNode?.textContent || '',\n }\n }\n })\n\n return res\n }, [refers])\n\n const handlePasteEvent = useEffectEvent(async () => {\n let src = node.attrs.src || ''\n if (imagePasteHandler) {\n try {\n src = await imagePasteHandler(node.attrs.src)\n } catch (error) {}\n }\n\n updateAttributes({\n 'data-rme-from-paste': null,\n src,\n })\n })\n\n useEffect(() => {\n if (fromPaste) {\n handlePasteEvent()\n }\n }, [fromPaste])\n\n const handleStoreChange = (store: PopoverStore) => {\n popoverStore.current = store\n }\n\n useEffect(() => {\n const handleOutsideClick = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n popoverStore.current &&\n (!event.target ||\n !(event.target instanceof Node) ||\n !popoverRef.current.contains(event.target))\n ) {\n popoverStore.current.setOpen(false)\n }\n }\n\n if (selected) {\n document.addEventListener('mousedown', handleOutsideClick)\n return () => {\n document.removeEventListener('mousedown', handleOutsideClick)\n }\n }\n }, [selected])\n\n const handleResize = useCallback(() => {\n updateAttributes({\n ['data-rme-type']: 'html',\n })\n }, [updateAttributes])\n\n const Loading = (\n <span className=\"inline-loading\">\n <i className=\"inline-loading-icon ri-loader-4-line\"></i>\n </span>\n )\n\n if (fromPaste) {\n return Loading\n }\n\n const otherAttrs = omit(node.attrs, 'data-refer-label')\n const Main = (\n <Resizable\n key={`${node.attrs.src}`}\n controlInit={(init) => (initRef.current = init)}\n onResize={handleResize}\n {...props}\n >\n <ZensImage\n {...otherAttrs}\n onLoad={() => initRef.current?.()}\n src={curRefer?.href || node.attrs.src}\n loader={Loading}\n imgPromise={() => {\n return new Promise(async (resolve, reject) => {\n let targetSrc = curRefer?.href || node.attrs.src || ''\n const originSrc = curRefer?.href || node.attrs.src || ''\n if (handleViewImgSrcUrl) {\n try {\n targetSrc = await handleViewImgSrcUrl(targetSrc)\n } catch (error) {}\n }\n\n const makeImageLoad = (targetSrc: string) => {\n const img = new Image()\n img.src = targetSrc\n img.onload = () => {\n resolve(targetSrc)\n }\n img.onerror = () => {\n if (targetSrc === originSrc) {\n reject(warningFallBack)\n } else {\n makeImageLoad(originSrc)\n }\n }\n }\n\n makeImageLoad(targetSrc)\n })\n }}\n style={{\n width: '100%',\n height: '100%',\n }}\n />\n </Resizable>\n )\n\n return (\n <div\n ref={popoverRef}\n style={{ position: 'relative', zIndex: selected ? 10 : 'auto', lineHeight: 0 }}\n >\n <Popover\n customContent={\n <ImageToolTips\n key={`${node.attrs.src}`}\n node={node}\n referInfo={curRefer}\n imageHostingHandler={imageHostingHandler}\n updateAttributes={(...args) => {\n updateAttributes(...args)\n popoverStore.current?.setOpen(false)\n }}\n />\n }\n boxProps={{\n style: {\n display: 'inline-flex',\n },\n }}\n placement=\"top-start\"\n onStoreChange={handleStoreChange}\n toggleOnClick\n style={{ zIndex: 11 }}\n >\n {Main}\n </Popover>\n </div>\n )\n}\n", "import type { NodeViewComponentProps } from '@rme-sdk/react'\nimport { t } from 'i18next'\nimport { useState, type FC } from 'react'\nimport styled from 'styled-components'\nimport { Button, Input } from 'zens'\nimport { Shortcut } from '../../toolbar/SlashMenu/SlashMenuRoot'\nimport { ImageNodeViewProps } from './image-nodeview'\n\ninterface ImageToolTipsProps {\n node: NodeViewComponentProps['node']\n referInfo?: {\n label?: string\n href?: string\n }\n updateAttributes?: NodeViewComponentProps['updateAttributes']\n imageHostingHandler?: ImageNodeViewProps['imageHostingHandler']\n}\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${(props) => props.theme.spaceSm};\n padding: ${(props) => props.theme.spaceSm};\n min-width: 320px;\n background-color: ${(props) => props.theme.tipsBgColor};\n border: 1px solid ${(props) => props.theme.borderColor};\n border-radius: ${(props) => props.theme.smallBorderRadius};\n box-shadow: 0 4px 12px ${(props) => props.theme.boxShadowColor};\n font-size: ${(props) => props.theme.fontBase};\n line-height: normal;\n z-index: 100;\n`\n\nconst InputGroup = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${(props) => props.theme.spaceXs};\n`\n\nconst FooterBar = styled.div`\n display: flex;\n justify-content: flex-end;\n gap: ${(props) => props.theme.spaceXs};\n`\n\nconst Label = styled.label`\n font-size: ${(props) => props.theme.fontXs};\n font-weight: 600;\n color: ${(props) => props.theme.labelFontColor};\n margin: 0;\n`\n\nconst StyledInput = styled(Input)`\n width: 100%;\n font-size: ${(props) => props.theme.fontSm};\n\n & input {\n padding: ${(props) => props.theme.spaceXs} ${(props) => props.theme.spaceSm};\n border: 1px solid ${(props) => props.theme.borderColor};\n border-radius: ${(props) => props.theme.smallBorderRadius};\n background-color: ${(props) => props.theme.bgColor};\n color: ${(props) => props.theme.primaryFontColor};\n\n &:focus {\n border-color: ${(props) => props.theme.accentColor};\n outline: none;\n box-shadow: 0 0 0 2px ${(props) => props.theme.accentColor}33;\n }\n\n &::placeholder {\n color: ${(props) => props.theme.placeholderFontColor};\n }\n }\n`\n\nconst ButtonGroup = styled.div`\n display: flex;\n justify-content: flex-end;\n gap: ${(props) => props.theme.spaceXs};\n margin-top: ${(props) => props.theme.spaceXs};\n`\n\nconst ActionButton = styled(Button)`\n padding: ${(props) => props.theme.spaceXs} ${(props) => props.theme.spaceSm};\n font-size: ${(props) => props.theme.fontXs};\n border-radius: ${(props) => props.theme.smallBorderRadius};\n\n &.primary {\n background-color: ${(props) => props.theme.accentColor};\n border-color: ${(props) => props.theme.accentColor};\n color: white;\n\n &:hover {\n background-color: ${(props) => props.theme.accentColor}dd;\n border-color: ${(props) => props.theme.accentColor}dd;\n }\n }\n\n &.secondary {\n background-color: transparent;\n border-color: ${(props) => props.theme.borderColor};\n color: ${(props) => props.theme.primaryFontColor};\n\n &:hover {\n background-color: ${(props) => props.theme.hoverColor};\n }\n }\n`\n\nexport const ImageToolTips: FC<ImageToolTipsProps> = (props) => {\n const { node, referInfo, imageHostingHandler } = props\n const { src, alt } = node.attrs\n const [srcVal, setSrcVal] = useState(src || '')\n const [altVal, setAltVal] = useState(alt || '')\n const [labelVal, setLabelVal] = useState(referInfo?.label || '')\n const [hasChanges, setHasChanges] = useState(false)\n\n const isReferImage = !!referInfo\n\n const handleSrcInput: React.FormEventHandler<HTMLInputElement> = (e) => {\n const newValue = e.currentTarget.value\n setSrcVal(newValue)\n setHasChanges(newValue !== src || altVal !== alt || labelVal !== referInfo?.label)\n }\n\n const handleAltInput: React.FormEventHandler<HTMLInputElement> = (e) => {\n const newValue = e.currentTarget.value\n setAltVal(newValue)\n setHasChanges(srcVal !== src || newValue !== alt || labelVal !== referInfo?.label)\n }\n\n const handleLabelInput: React.FormEventHandler<HTMLInputElement> = (e) => {\n const newValue = e.currentTarget.value\n setLabelVal(newValue)\n setHasChanges(srcVal !== src || altVal !== alt || newValue !== referInfo?.label)\n }\n\n const handleUpdate = () => {\n if (props.updateAttributes) {\n if (isReferImage) {\n // \u5BF9\u4E8E\u5F15\u7528\u56FE\u7247\uFF0C\u53EA\u66F4\u65B0 label \u548C alt\n props.updateAttributes({\n ...node.attrs,\n alt: altVal.trim(),\n referInfo: {\n ...node.attrs.referInfo,\n label: labelVal.trim(),\n },\n })\n } else {\n // \u5BF9\u4E8E\u666E\u901A\u56FE\u7247\uFF0C\u66F4\u65B0 src \u548C alt\n const currentSrc = node.attrs.src\n if (currentSrc && currentSrc !== srcVal && imageHostingHandler) {\n imageHostingHandler(currentSrc).then((newSrc) => {\n if (newSrc !== currentSrc) {\n props.updateAttributes?.({\n ...node.attrs,\n src: newSrc,\n alt: altVal.trim(),\n })\n }\n })\n } else {\n props.updateAttributes({\n ...node.attrs,\n src: srcVal.trim(),\n alt: altVal.trim(),\n })\n }\n }\n setHasChanges(false)\n }\n }\n\n const handleReset = () => {\n setSrcVal(src || '')\n setAltVal(alt || '')\n setLabelVal(referInfo?.label || '')\n setHasChanges(false)\n }\n\n const handleKeyPress = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleUpdate()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n handleReset()\n }\n }\n\n return (\n <Container>\n {isReferImage ? (\n <InputGroup>\n <Label>Refer Label</Label>\n <StyledInput\n placeholder=\"Enter reference label...\"\n value={labelVal}\n onInput={handleLabelInput}\n onKeyDown={handleKeyPress}\n />\n </InputGroup>\n ) : (\n <InputGroup>\n <Label>URL</Label>\n <StyledInput\n placeholder=\"Enter image URL...\"\n value={srcVal}\n onInput={handleSrcInput}\n onKeyDown={handleKeyPress}\n />\n </InputGroup>\n )}\n\n <InputGroup>\n <Label>Alt</Label>\n <StyledInput\n placeholder=\"Enter alternative text for accessibility...\"\n value={altVal}\n onInput={handleAltInput}\n onKeyDown={handleKeyPress}\n />\n </InputGroup>\n <FooterBar>\n <Shortcut>\n <kbd aria-label=\"Esc\">Esc</kbd>\n {t('slashMenu.toCancel')}\n </Shortcut>\n <Shortcut>\n <kbd aria-label=\"Enter\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 10 4 15 9 20\"></polyline>\n <path d=\"M20 4v7a4 4 0 0 1-4 4H4\"></path>\n </svg>\n </kbd>\n {t('slashMenu.toSelect')}\n </Shortcut>\n </FooterBar>\n </Container>\n )\n}\n", "import type { AnyExtension, CommandsFromExtensions } from '@rme-sdk/main'\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport styled, { css } from 'styled-components'\nimport { Input, Space } from 'zens'\nimport { nodeTypeIconMap } from '../../const'\nimport { isSlashKey } from '../../extensions/SlashMenu/utils'\nimport { getModEventKey, getModKeyIconName } from '../../utils/getOS'\nimport TablePanel from './TablePanel'\n\ntype SlashMenuRootProps = {\n rootRef: React.RefObject<HTMLDivElement>\n commands: CommandsFromExtensions<AnyExtension>\n closeMenu: (config?: { insertSlash?: boolean }) => void\n}\n\nexport enum ChildrenHandlerNext {\n None,\n ReturnLeftGroup,\n Close,\n}\n\nexport const SlashMenuRoot: React.FC<SlashMenuRootProps> = memo(\n ({ rootRef, commands, closeMenu }) => {\n const componentRefMap = useRef<Record<string, any>>({})\n const [searchText, setSearchText] = useState('')\n const { t } = useTranslation()\n\n const menuItems = useMemo(() => {\n const headingItems = Array.from({ length: 6 }).map((_, i) => {\n return {\n title: `Heading ${i + 1}`,\n id: `Heading${i + 1}`,\n handler: () => {\n commands.toggleHeading({ level: i + 1 })\n },\n }\n })\n\n const res: {\n title: string\n id: string\n iconName: string\n handler?: () => void\n Renderer?: {\n id: string\n Component: React.ReactNode\n }\n children?: {\n title: string\n id: string\n handler?: () => void\n }[]\n }[] = [\n {\n title: 'Text',\n id: 'text',\n iconName: 'ri-text',\n children: headingItems,\n },\n {\n title: 'Table',\n id: 'table',\n iconName: nodeTypeIconMap.table,\n handler: () => {\n componentRefMap.current.table?.createTable()\n },\n Renderer: {\n id: 'table',\n Component: (\n <TablePanel\n ref={(el) => {\n componentRefMap.current.table = el\n }}\n commands={commands}\n closeMenu={closeMenu}\n />\n ),\n },\n },\n {\n title: 'Code Block',\n id: 'code-block',\n iconName: nodeTypeIconMap.codeMirror,\n handler: () => {\n commands.createCodeMirror()\n },\n },\n {\n title: 'Math Block',\n id: 'math-block',\n iconName: nodeTypeIconMap.math_block,\n handler: () => {\n commands.createMathBlock()\n },\n },\n {\n title: 'Mermaid',\n id: 'mermaid-block',\n iconName: nodeTypeIconMap.mermaid_node,\n handler: () => {\n commands.createMermaidBlock()\n },\n },\n {\n title: 'HTML Block',\n id: 'html-block',\n iconName: nodeTypeIconMap.html_block,\n handler: () => {\n commands.createHtmlBlock()\n },\n },\n {\n title: 'Quote Block',\n id: 'blockquote',\n iconName: nodeTypeIconMap.blockquote,\n handler: () => {\n commands.toggleBlockquote()\n },\n },\n {\n title: 'Horizontal Rule',\n id: 'horizontal-rule',\n iconName: nodeTypeIconMap.horizontalRule,\n handler: () => {\n commands.insertHorizontalRule()\n },\n }\n ]\n\n if (commands.createAiBlock) {\n res.unshift({\n title: 'AI',\n id: 'ai',\n iconName: 'ri-bard-line',\n handler: () => {\n commands.createAiBlock({})\n },\n })\n }\n return res\n }, [closeMenu, commands])\n\n // \u7B5B\u9009\u83DC\u5355\u9879\n const filteredMenuItems = useMemo(() => {\n if (!searchText.trim()) {\n return menuItems\n }\n\n const searchLower = searchText.toLowerCase()\n\n return menuItems\n .filter((item) => {\n // \u68C0\u67E5\u4E3B\u83DC\u5355\u9879\u6807\u9898\n if (item.title.toLowerCase().includes(searchLower)) {\n return true\n }\n\n // \u68C0\u67E5\u5B50\u83DC\u5355\u9879\n if (item.children) {\n const filteredChildren = item.children.filter((child) =>\n child.title.toLowerCase().includes(searchLower),\n )\n if (filteredChildren.length > 0) {\n return true\n }\n }\n\n return false\n })\n .map((item) => {\n if (item.children && searchText.trim()) {\n const searchLower = searchText.toLowerCase()\n\n // \u5982\u679C\u7236\u83DC\u5355\u9879\u5339\u914D\uFF0C\u663E\u793A\u6240\u6709\u5B50\u5143\u7D20\n if (item.title.toLowerCase().includes(searchLower)) {\n return item\n }\n\n // \u5982\u679C\u53EA\u6709\u5B50\u83DC\u5355\u9879\u5339\u914D\uFF0C\u53EA\u663E\u793A\u5339\u914D\u7684\u5B50\u5143\u7D20\n const filteredChildren = item.children.filter((child) =>\n child.title.toLowerCase().includes(searchLower),\n )\n return {\n ...item,\n children: filteredChildren,\n }\n }\n return item\n })\n }, [menuItems, searchText])\n\n const [activeGroupId, setActiveGroupId] = useState<string | undefined>(\n filteredMenuItems[0]?.id,\n )\n const [activeItemId, setActiveItemId] = useState<string | undefined>()\n\n // \u5F53\u7B5B\u9009\u7ED3\u679C\u6539\u53D8\u65F6\uFF0C\u91CD\u7F6E\u9009\u4E2D\u72B6\u6001\n useEffect(() => {\n if (filteredMenuItems.length > 0) {\n setActiveGroupId(filteredMenuItems[0].id)\n if (filteredMenuItems[0].children) {\n setActiveItemId(filteredMenuItems[0].children[0].id)\n } else {\n setActiveItemId(undefined)\n }\n } else {\n setActiveGroupId(undefined)\n setActiveItemId(undefined)\n }\n }, [filteredMenuItems])\n\n const currentIndex = filteredMenuItems.findIndex((item) => item.id === activeGroupId)\n const currentMenuItem = filteredMenuItems[currentIndex]\n\n const handleDown = useCallback(() => {\n if (activeItemId) {\n if (currentMenuItem?.children) {\n const currentChildIndex = currentMenuItem.children.findIndex(\n (item) => item.id === activeItemId,\n )\n const nextIndex = currentChildIndex + 1\n if (nextIndex < currentMenuItem.children.length) {\n setActiveItemId(currentMenuItem.children[nextIndex].id)\n }\n } else if (currentMenuItem?.Renderer) {\n setActiveItemId(currentMenuItem.Renderer.id)\n }\n } else {\n const nextIndex = currentIndex + 1\n if (nextIndex < filteredMenuItems.length) {\n setActiveGroupId(filteredMenuItems[nextIndex].id)\n }\n }\n }, [\n activeItemId,\n currentIndex,\n currentMenuItem?.Renderer,\n currentMenuItem?.children,\n filteredMenuItems,\n ])\n\n const handleUp = useCallback(() => {\n if (activeItemId) {\n if (currentMenuItem?.children) {\n const currentChildIndex = currentMenuItem.children.findIndex(\n (item) => item.id === activeItemId,\n )\n const nextIndex = currentChildIndex - 1\n if (nextIndex >= 0) {\n setActiveItemId(currentMenuItem.children[nextIndex].id)\n }\n } else if (currentMenuItem?.Renderer) {\n setActiveItemId(currentMenuItem.Renderer.id)\n }\n } else {\n const nextIndex = currentIndex - 1\n if (nextIndex >= 0) {\n setActiveGroupId(filteredMenuItems[nextIndex].id)\n }\n }\n }, [\n activeItemId,\n currentIndex,\n currentMenuItem?.Renderer,\n currentMenuItem?.children,\n filteredMenuItems,\n ])\n\n const handleRight = useCallback(() => {\n if (currentMenuItem?.children) {\n setActiveItemId(currentMenuItem.children[0].id)\n } else if (currentMenuItem?.Renderer) {\n setActiveItemId(currentMenuItem.Renderer.id)\n }\n }, [currentMenuItem])\n\n const handleLeft = useCallback(() => {\n setActiveItemId(undefined)\n }, [])\n\n // \u5904\u7406\u641C\u7D22\u8F93\u5165\n const handleSearchChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchText(e.target.value)\n }, [])\n\n useEffect(() => {\n const keydownHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n return closeMenu()\n }\n\n if (event.isComposing || event.key === 'Process') {\n return\n }\n\n const isNavigationKey =\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'ArrowRight' ||\n event.key === 'ArrowLeft' ||\n event.key === 'Enter'\n\n // \u5982\u679C\u6B63\u5728\u8F93\u5165\u641C\u7D22\u6587\u672C\uFF0C\u9700\u8981 mod \u952E\uFF08\u5BFC\u822A\u952E\u9664\u5916\uFF09\n if (searchText && event[getModEventKey()] === false && !isNavigationKey) {\n return\n }\n if (activeItemId) {\n const componentRef = componentRefMap.current[activeItemId]\n if (componentRef?.handleKeyDown) {\n const next = componentRef.handleKeyDown(event)\n\n if (next === ChildrenHandlerNext.Close) {\n closeMenu()\n return\n } else if (next === ChildrenHandlerNext.None) {\n return\n }\n }\n }\n\n if (event.key === 'ArrowDown') {\n handleDown()\n } else if (event.key === 'ArrowUp') {\n handleUp()\n } else if (event.key === 'ArrowRight') {\n handleRight()\n } else if (event.key === 'ArrowLeft') {\n handleLeft()\n } else if (event.key === 'Enter') {\n // Prevent paragraph insertion\n event.preventDefault()\n event.stopPropagation()\n\n if (activeItemId) {\n const item = currentMenuItem?.children?.find((child) => child.id === activeItemId)\n if (item?.handler) {\n item.handler()\n }\n }\n if (currentMenuItem?.handler) {\n currentMenuItem.handler()\n }\n closeMenu()\n }\n }\n\n document.addEventListener('keydown', keydownHandler)\n\n return () => {\n document.removeEventListener('keydown', keydownHandler)\n }\n }, [\n activeItemId,\n handleDown,\n handleLeft,\n handleRight,\n handleUp,\n closeMenu,\n filteredMenuItems,\n currentMenuItem,\n searchText,\n ])\n\n return (\n <div ref={rootRef} style={{ display: 'flex', flexDirection: 'column' }}>\n <SearchContainer>\n <Input\n type=\"text\"\n size=\"small\"\n style={{\n width: '100%',\n }}\n placeholder={t('slashMenu.searchPlaceholder')}\n value={searchText}\n onChange={handleSearchChange}\n autoFocus\n onKeyDown={(e) => {\n if (e.code === 'Backspace') {\n if (searchText === '') {\n e.preventDefault()\n e.stopPropagation()\n closeMenu?.()\n }\n } else if (isSlashKey(e) && (searchText === '' || searchText === '/')) {\n e.preventDefault()\n e.stopPropagation()\n closeMenu?.({\n insertSlash: true,\n })\n }\n }}\n />\n </SearchContainer>\n <MenuContainer>\n <MenuPanel active location=\"left\">\n {filteredMenuItems.map((item) => {\n const selected = item.id === activeGroupId\n return (\n <MenuItem\n onClick={() => {\n setActiveGroupId(item.id)\n // If there are no submenus and no custom renderer, it means it is a command executed directly\n if (!item.children && !item.Renderer && item.handler) {\n item.handler()\n closeMenu()\n }\n }}\n onMouseEnter={() => {\n setActiveGroupId(item.id)\n if (item.children?.length) {\n setActiveItemId(item.children[0].id)\n } else if (item.Renderer) {\n setActiveItemId(item.Renderer.id)\n } else {\n setActiveItemId(undefined)\n }\n }}\n key={item.id}\n selected={selected}\n >\n <Space size={4}>\n <i className={item.iconName} /> {item.title}\n </Space>\n </MenuItem>\n )\n })}\n {filteredMenuItems.length === 0 && (\n <div>\n <span>{t('slashMenu.noResults')}</span>\n </div>\n )}\n </MenuPanel>\n {currentMenuItem?.children || currentMenuItem?.Renderer?.Component ? (\n <MenuPanel active={!!activeItemId} location=\"right\">\n {currentMenuItem?.Renderer\n ? currentMenuItem.Renderer.Component\n : currentMenuItem?.children?.map((item) => {\n const selected = item.id === activeItemId\n\n return (\n <MenuItem\n key={item.id}\n selected={selected}\n onMouseEnter={() => {\n setActiveItemId(item.id)\n }}\n onClick={() => {\n setActiveItemId(item.id)\n item.handler?.()\n closeMenu()\n }}\n >\n {item.title}\n </MenuItem>\n )\n })}\n </MenuPanel>\n ) : null}\n </MenuContainer>\n <SlashMenuFooter>\n <Shortcut>\n {searchText ? (\n <>\n <kbd>{getModKeyIconName()}</kbd>\n <span> + </span>\n </>\n ) : null}\n <kbd aria-label=\"Up Arrow\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m5 12 7-7 7 7\"></path>\n <path d=\"M12 19V5\"></path>\n </svg>\n </kbd>\n <kbd aria-label=\"Down Arrow\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 5v14\"></path>\n <path d=\"m19 12-7 7-7-7\"></path>\n </svg>\n </kbd>\n {currentMenuItem?.children || currentMenuItem?.Renderer ? (\n <>\n <kbd aria-label=\"Left Arrow\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m12 19-7-7 7-7\"></path>\n <path d=\"M19 12H5\"></path>\n </svg>\n </kbd>\n <kbd aria-label=\"Right Arrow\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M5 12h14\"></path>\n <path d=\"m12 5 7 7-7 7\"></path>\n </svg>\n </kbd>\n </>\n ) : null}\n {t('slashMenu.toNavigate')}\n </Shortcut>\n\n <Shortcut>\n {searchText ? (\n <>\n <kbd>{getModKeyIconName()}</kbd>\n <span> + </span>\n </>\n ) : null}\n <kbd aria-label=\"Enter\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 10 4 15 9 20\"></polyline>\n <path d=\"M20 4v7a4 4 0 0 1-4 4H4\"></path>\n </svg>\n </kbd>\n {t('slashMenu.toSelect')}\n </Shortcut>\n </SlashMenuFooter>\n </div>\n )\n },\n)\n\ntype MenuPanelProps = {\n location: 'left' | 'right'\n active: boolean\n}\n\nconst SlashMenuFooter = styled.div`\n display: flex;\n justify-content: space-between;\n padding: ${(props) => props.theme.spaceXs};\n background-color: ${(props) => props.theme.contextMenuBgColor};\n border-top: 1px solid ${(props) => props.theme.slashMenuBorderColor};\n gap: 8px;\n font-size: 0.85em;\n`\n\nexport const Shortcut = styled.div`\n display: flex;\n gap: 0.25rem;\n white-space: nowrap;\n\n & kbd {\n padding: 0 4px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 12px;\n }\n`\n\nconst MenuPanel = styled.div.attrs<MenuPanelProps>((p) => p)`\n display: flex;\n min-width: 130px;\n width: 100%;\n flex-direction: column;\n overscroll-behavior: contain;\n background-color: ${(props) =>\n props.active ? props.theme.contextMenuBgColorActive : props.theme.contextMenuBgColor};\n padding: ${(props) => props.theme.spaceXs};\n color: ${(props) => props.theme.primaryFontColor};\n font-size: ${(props) => props.theme.fontXs};\n outline: none;\n overflow: visible;\n max-height: 260px;\n overflow-y: auto;\n`\n\nconst MenuItem = styled.li.attrs<{\n selected: boolean\n}>((props) => ({\n ...props,\n}))`\n display: flex;\n cursor: default;\n align-items: center;\n border-radius: ${(props) => props.theme.smallBorderRadius};\n padding: ${(props) => props.theme.spaceXs};\n font-size: ${(props) => props.theme.fontXs};\n outline: none !important;\n\n &:hover {\n background-color: ${(props) => props.theme.contextMenuBgColorHover};\n }\n\n ${(p) => {\n if (p.selected) {\n return css`\n background-color: ${(props) => props.theme.contextMenuBgColorHover};\n `\n }\n }}\n`\n\nconst SearchContainer = styled.div`\n padding: ${(props) => props.theme.spaceXs};\n background-color: ${(props) => props.theme.contextMenuBgColor};\n border-bottom: 1px solid ${(props) => props.theme.slashMenuBorderColor};\n border-radius: ${(props) => props.theme.smallBorderRadius}\n ${(props) => props.theme.smallBorderRadius} 0 0;\n`\n\nconst MenuContainer = styled.div`\n display: flex;\n flex: 1;\n`\n", "export const nodeTypeIconMap: Record<string, string> = {\n 'heading-1': 'ri-h-1',\n 'heading-2': 'ri-h-2',\n 'heading-3': 'ri-h-3',\n 'heading-4': 'ri-h-4',\n 'heading-5': 'ri-h-5',\n 'heading-6': 'ri-h-6',\n paragraph: 'ri-paragraph',\n 'list-bullet': 'ri-list-unordered',\n 'list-ordered': 'ri-list-ordered',\n 'list-task': 'ri-list-check-3',\n codeMirror: 'ri-code-box-line',\n table: 'ri-table-line',\n blockquote: 'ri-double-quotes-l',\n html_block: 'ri-html5-line',\n math_block: 'ri-formula',\n mermaid_node: 'ri-flow-chart',\n horizontalRule: 'ri-separator',\n}\n", "import type { PluginKey } from \"prosemirror-state\"\nimport type { EditorView } from \"prosemirror-view\"\nimport type { KeyboardEvent as ReactKeyboardEvent } from \"react\"\nimport type { SlashMenuMeta } from \"./type\"\n\nexport const dispatchWithMeta = (\n view: EditorView,\n key: PluginKey,\n meta: SlashMenuMeta\n) => view.dispatch(view.state.tr.setMeta(key, meta))\n\nexport const isSlashKey = <T extends HTMLElement>(event: ReactKeyboardEvent<T> | KeyboardEvent) => {\n return event.key === \"/\"\n}\n\nexport const defaultIgnoredKeys = [\n \"Unidentified\",\n \"Alt\",\n \"AltGraph\",\n \"CapsLock\",\n \"Control\",\n \"Fn\",\n \"FnLock\",\n \"F1\",\n \"F2\",\n \"F3\",\n \"F4\",\n \"F5\",\n \"F6\",\n \"F7\",\n \"F8\",\n \"F9\",\n \"F10\",\n \"F11\",\n \"F12\",\n \"F13\",\n \"F14\",\n \"F15\",\n \"F16\",\n \"F17\",\n \"F18\",\n \"F19\",\n \"F20\",\n \"F21\",\n \"F22\",\n \"F23\",\n \"F24\",\n \"Hyper\",\n \"Meta\",\n \"NumLock\",\n \"PageDown\",\n \"PageUp\",\n \"Pause\",\n \"PrintScreen\",\n \"Redo\",\n \"ScrollLock\",\n \"Shift\",\n \"Super\",\n \"Symbol\",\n \"SymbolLock\",\n \"Enter\",\n \"Tab\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"End\",\n \"Home\",\n \"PageDown\",\n \"PageUp\",\n \"Backspace\",\n \"Clear\",\n \"Copy\",\n \"CrSel\",\n \"Cut\",\n \"Delete\",\n \"EraseEof\",\n \"ExSel\",\n \"Insert\",\n \"Paste\",\n \"Redo\",\n \"Undo\",\n \"Accept\",\n \"Again\",\n \"Attn\",\n \"Cancel\",\n \"ContextMenu\",\n \"Escape\",\n \"Execute\",\n \"Find\",\n \"Finish\",\n \"Help\",\n \"Pause\",\n \"Play\",\n \"Props\",\n \"Select\",\n \"ZoomIn\",\n \"ZoomOut\",\n \"BrightnessDown\",\n \"BrightnessUp\",\n \"Eject\",\n \"LogOff\",\n \"Power\",\n \"PowerOff\",\n \"PrintScreen\",\n \"Hibernate\",\n \"Standby\",\n \"WakeUp\",\n \"AllCandidates\",\n \"Alphanumeric\",\n \"CodeInput\",\n \"Compose\",\n \"Convert\",\n \"Dead\",\n \"FinalMode\",\n \"GroupFirst\",\n \"GroupLast\",\n \"GroupNext\",\n \"GroupPrevious\",\n \"ModeChange\",\n \"NextCandidate\",\n \"NonConvert\",\n \"PreviousCandidate\",\n \"Process\",\n \"SingleCandidate\",\n \"HangulMode\",\n \"HanjaMode\",\n \"JunjaMode\",\n \"Eisu\",\n \"Hankaku\",\n \"Hiragana\",\n \"HiraganaKatakana\",\n \"KanaMode\",\n \"KanjiMode\",\n \"Katakana\",\n \"Romaji\",\n \"Zenkaku\",\n \"ZenkakuHanaku\",\n]\n", "export function getOS() {\n const userAgent = window.navigator.userAgent\n const platform = window.navigator.platform\n\n if (/Win/.test(platform) || /Win/.test(userAgent)) {\n return 'Windows'\n } else if (/Mac/.test(platform) || /Mac/.test(userAgent)) {\n return 'macOS'\n } else {\n return 'Unknown' // \u53EF\u80FD\u662FLinux\u3001iOS\u3001Android\u6216\u5176\u4ED6\u7CFB\u7EDF\n }\n}\n\nexport function getModKeyIconName() {\n const os = getOS()\n return os === 'macOS' ? <i className=\"ri-command-line\" /> : 'Ctrl'\n}\n\nexport function getModEventKey() {\n const os = getOS()\n return os === 'macOS' ? 'metaKey' : 'ctrlKey'\n}\n", "/* eslint-disable @typescript-eslint/no-shadow */\nimport type { AnyExtension, CommandsFromExtensions } from '@rme-sdk/main'\nimport { useImperativeHandle, useState } from 'react'\nimport styled from 'styled-components'\nimport { ChildrenHandlerNext } from './SlashMenuRoot'\n\ntype TablePanelProps = {\n commands: CommandsFromExtensions<AnyExtension>\n closeMenu: () => void\n ref?: React.Ref<TablePanelRef>\n}\n\ntype TablePanelRef = {\n createTable: () => void\n handleKeyDown: (e: KeyboardEvent) => ChildrenHandlerNext | void\n}\n\nconst TablePanelCell = styled.div.attrs<{ inScope: boolean }>((p) => p)`\n border: 1px solid ${(props) => props.theme.borderColor};\n margin-right: 1px;\n margin-bottom: 1px;\n width: 10px;\n height: 10px;\n background-color: ${(props) =>\n props.inScope ? props.theme.blue : props.theme.contextMenuBgColor};\n`\nconst TablePanel = (props: TablePanelProps) => {\n const { commands, closeMenu, ref } = props\n const [rowsCount, setRowsCount] = useState(3)\n const [columnsCount, setColumnsCount] = useState(3)\n\n useImperativeHandle(ref, () => ({\n createTable: () => {\n commands.createTable({ rowsCount, columnsCount, withHeaderRow: false })\n },\n handleKeyDown: (e) => {\n const handleRight = () => {\n setColumnsCount((prev) => prev + 1)\n return ChildrenHandlerNext.None\n }\n const handleLeft = () => {\n if (e.metaKey || e.ctrlKey) {\n return ChildrenHandlerNext.ReturnLeftGroup\n }\n\n setColumnsCount((prev) => (prev - 1 < 1 ? 1 : prev - 1))\n return ChildrenHandlerNext.None\n }\n const handleUp = () => {\n setRowsCount((prev) => (prev - 1 < 1 ? 1 : prev - 1))\n }\n const handleDown = () => {\n setRowsCount((prev) => prev + 1)\n }\n const handleEnter = () => {\n commands.createTable({ rowsCount, columnsCount })\n return ChildrenHandlerNext.Close\n }\n\n if (e.key === 'ArrowRight') {\n return handleRight()\n } else if (e.key === 'ArrowLeft') {\n return handleLeft()\n } else if (e.key === 'ArrowUp') {\n return handleUp()\n } else if (e.key === 'ArrowDown') {\n return handleDown()\n } else if (e.key === 'Enter') {\n return handleEnter()\n }\n },\n }))\n\n const displayRows = 10\n const displayCols = 8\n\n return (\n <div>\n <span>\n Rows: {rowsCount} Cols: {columnsCount}\n </span>\n {Array.from({ length: displayRows }).map((_, i) => {\n return (\n <div key={i} style={{ display: 'flex' }}>\n {Array.from({ length: displayCols }).map((_, j) => {\n const inScope = i < rowsCount && j < columnsCount\n\n return (\n <TablePanelCell\n key={j}\n inScope={inScope}\n onClick={() => {\n commands.createTable({\n rowsCount: i,\n columnsCount: j,\n withHeaderRow: false,\n })\n closeMenu()\n }}\n />\n )\n })}\n </div>\n )\n })}\n </div>\n )\n}\n\nexport default TablePanel\n", "/* eslint-disable @typescript-eslint/no-shadow */\nimport type {\n ApplySchemaAttributes,\n CommandFunction,\n DelayedPromiseCreator,\n EditorView,\n ExtensionCommandReturn,\n NodeExtensionSpec,\n NodeSpecOverride,\n PrimitiveSelection,\n ProsemirrorAttributes,\n} from '@rme-sdk/core'\nimport {\n ErrorConstant,\n extension,\n ExtensionTag,\n getTextSelection,\n invariant,\n isElementDomNode,\n isNumber,\n NodeExtension,\n nodeInputRule,\n omitExtraAttributes,\n} from '@rme-sdk/core'\nimport { InputRule } from '@rme-sdk/pm/inputrules'\nimport { PasteRule } from '@rme-sdk/pm/paste-rules'\nimport { insertPoint } from '@rme-sdk/pm/transform'\nimport type { ComponentType } from 'react'\nimport type { ExtensionsOptions } from '..'\nimport { getMdImageInputRule } from '../../inline-input-regex'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport { buildHtmlStringFromAst, buildMarkdownTextFromNode } from '../../utils/html'\nimport type { ImageNodeViewProps } from './image-nodeview'\nimport { ImageNodeView } from './image-nodeview'\n\nexport type DelayedImage = DelayedPromiseCreator<ImageAttributes>\n\ninterface ImageOptions {\n createPlaceholder?: (view: EditorView, pos: number) => HTMLElement\n updatePlaceholder?: (\n view: EditorView,\n pos: number,\n element: HTMLElement,\n progress: number,\n ) => void\n handleViewImgSrcUrl?: ExtensionsOptions['handleViewImgSrcUrl']\n imagePasteHandler?: ExtensionsOptions['imagePasteHandler']\n destroyPlaceholder?: (view: EditorView, element: HTMLElement) => void\n /**\n * The upload handler for the image extension.\n *\n * It receives a list of dropped or pasted files and returns a promise for the\n * attributes which should be used to insert the image into the editor.\n *\n * @param files - a list of files to upload.\n * @param setProgress - the progress handler.\n */\n uploadHandler?: (files: FileWithProgress[]) => DelayedImage[]\n\n /**\n * The image hosting service upload handler.\n * It receives the image src and returns a promise for the new src after uploading to image hosting service.\n *\n * @param src - the original image src\n * @returns Promise<string> - the new image src after uploading\n */\n imageHostingHandler?: (src: string) => Promise<string>\n\n /**\n * When pasting mixed text and image content (usually from Microsoft Office products) the content on the clipboard is either:\n *\n * a. one large image: containing effectively a screenshot of the original content (an image with text in it).\n * b. HTML content: containing usable text, but images with file protocol URLs (which cannot be resolved due to browser security restrictions).\n *\n * If true, this will extract the text from the clipboard data, and drop the images.\n * If false, the \"screenshot\" image will be used and the text will be dropped.\n *\n * @defaultValue true\n */\n preferPastedTextContent?: boolean\n}\n\nexport interface FileWithProgress {\n file: File\n progress: SetProgress\n}\n\n/**\n * Set the progress.\n *\n * @param progress - a value between `0` and `1`.\n */\ntype SetProgress = (progress: number) => void\n\n/**\n * The image extension for placing images into your editor.\n *\n * TODO ->\n * - Captions https://glitch.com/edit/#!/pet-figcaption?path=index.js%3A27%3A1 into a preset\n *\n * TODO => Split this into an image upload extension and image extension.\n * - Add a base64 image\n */\n@extension<ImageOptions>({\n defaultOptions: {\n createPlaceholder,\n handleViewImgSrcUrl: async (src: string) => src,\n updatePlaceholder: () => {},\n destroyPlaceholder: () => {},\n uploadHandler,\n imageHostingHandler: async (src: string) => src,\n preferPastedTextContent: true,\n defaultInlineNode: 'div',\n },\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class MdImgUriExtension extends NodeExtension<ImageOptions> {\n get name() {\n return 'md_image' as const\n }\n\n ReactComponent: ComponentType<ImageNodeViewProps> | undefined = (props) => {\n const { handleViewImgSrcUrl, imageHostingHandler, imagePasteHandler } = this.options\n\n return (\n <ImageNodeView\n handleViewImgSrcUrl={handleViewImgSrcUrl}\n imageHostingHandler={imageHostingHandler}\n imagePasteHandler={imagePasteHandler}\n {...props}\n />\n )\n }\n\n createTags() {\n return [ExtensionTag.InlineNode, ExtensionTag.Media]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n const { preferPastedTextContent } = this.options\n return {\n inline: true,\n selectable: true,\n atom: true,\n ...override,\n attrs: {\n ...extra.defaults(),\n 'data-rme-type': { default: 'md' },\n alt: { default: '' },\n crop: { default: null },\n height: { default: null },\n width: { default: null },\n rotate: { default: null },\n src: { default: null },\n title: { default: '' },\n 'data-refer-label': { default: '' },\n 'data-file-name': { default: null },\n 'data-rme-from-paste': { default: null },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (element) => {\n if (isElementDomNode(element)) {\n const attrs = getImageAttributes({ element, parse: extra.parse })\n\n if (preferPastedTextContent && attrs.src?.startsWith('file:///')) {\n return false\n }\n\n return attrs\n }\n\n return {}\n },\n },\n ...(override.parseDOM ?? []),\n ],\n toDOM: (node) => {\n const attrs = omitExtraAttributes(node.attrs, extra)\n return ['img', { ...extra.dom(node), ...attrs }]\n },\n }\n }\n\n insertMarkdownImage(\n attributes: ImageAttributes,\n selection?: PrimitiveSelection,\n ): CommandFunction {\n return ({ tr, dispatch }) => {\n const { from, to } = getTextSelection(selection ?? tr.selection, tr.doc)\n const node = this.type.create(attributes)\n\n dispatch?.(tr.replaceRangeWith(from, to, node))\n\n return true\n }\n }\n\n uploadImage = (\n value: DelayedPromiseCreator<ImageAttributes>,\n onElement?: (element: HTMLElement) => void,\n ): CommandFunction => {\n const { updatePlaceholder, destroyPlaceholder, createPlaceholder } = this.options\n return (props) => {\n const { tr } = props\n\n // This is update in the validate hook\n let pos = tr.selection.from\n\n return this.store\n .createPlaceholderCommand({\n promise: value,\n placeholder: {\n type: 'widget',\n get pos() {\n return pos\n },\n createElement: (view, pos) => {\n const element = createPlaceholder(view, pos)\n onElement?.(element)\n return element\n },\n onUpdate: (view, pos, element, data) => {\n updatePlaceholder(view, pos, element, data)\n },\n onDestroy: (view, element) => {\n destroyPlaceholder(view, element)\n },\n },\n onSuccess: (value, range, commandProps) =>\n this.insertMarkdownImage(value, range)(commandProps),\n })\n .validate(({ tr, dispatch }) => {\n const insertPos = insertPoint(tr.doc, pos, this.type)\n\n if (insertPos == null) {\n return false\n }\n\n pos = insertPos\n\n if (!tr.selection.empty) {\n dispatch?.(tr.deleteSelection())\n }\n\n return true\n }, 'unshift')\n\n .generateCommand()(props)\n }\n }\n\n /**\n * Insert an image once the provide promise resolves.\n */\n createCommands(): ExtensionCommandReturn {\n return {\n uploadImage: this.uploadImage,\n uploadFiles: this.uploadFiles,\n }\n }\n\n uploadFiles = (options: { files: File[], pos?: number }): CommandFunction => {\n const { uploadHandler } = this.options\n return (props) => {\n const { tr } = props\n const pos = options.pos ?? tr.selection.from\n\n const { files } = options\n const { commands, chain } = this.store\n const filesWithProgress: FileWithProgress[] = files.map((file, index) => ({\n file,\n progress: (progress) => {\n commands.updatePlaceholder(uploads[index], progress)\n },\n }))\n\n const uploads = uploadHandler(filesWithProgress)\n\n if (isNumber(pos)) {\n chain.selectText(pos)\n }\n\n for (const upload of uploads) {\n chain.uploadImage(upload)\n }\n\n chain.run()\n\n return true\n }\n }\n\n private fileUploadFileHandler(files: File[], event: ClipboardEvent | DragEvent, pos?: number) {\n const { preferPastedTextContent } = this.options\n\n if (\n preferPastedTextContent &&\n isClipboardEvent(event) &&\n event.clipboardData?.getData('text/plain')\n ) {\n return false\n }\n const { chain } = this.store\n\n chain.uploadFiles({ files, pos })\n chain.run()\n\n return true\n }\n\n createPasteRules(): PasteRule[] {\n return [\n {\n type: 'file',\n regexp: /image/i,\n fileHandler: (props): boolean => {\n props.event.preventDefault()\n const pos = props.type === 'drop' ? props.pos : undefined\n return this.fileUploadFileHandler(props.files, props.event, pos)\n },\n },\n ]\n }\n\n createInputRules(): InputRule[] {\n return getMdImageInputRule(this.type).map(nodeInputRule)\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.inline,\n token: 'md_image',\n node: this.name,\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n if (node.attrs['data-rme-type'] === 'html') {\n state.text(\n buildHtmlStringFromAst({\n tag: 'img',\n attrs: node.attrs,\n voidElement: true,\n }),\n )\n } else {\n state.text(buildMarkdownTextFromNode(node), false)\n }\n }\n}\n\ntype ImageAttributes = ProsemirrorAttributes<ImageExtensionAttributes>\n\ninterface ImageExtensionAttributes {\n align?: 'center' | 'end' | 'justify' | 'left' | 'match-parent' | 'right' | 'start'\n alt?: string\n height?: string | number\n width?: string | number\n rotate?: string\n src: string\n title?: string\n\n /** The file name used to create the image. */\n 'data-file-name'?: string\n}\n\n/**\n * The set of valid image files.\n */\nconst IMAGE_FILE_TYPES = new Set([\n 'image/jpeg',\n 'image/gif',\n 'image/png',\n 'image/jpg',\n 'image/svg',\n 'image/webp',\n])\n\n/**\n * True when the provided file is an image file.\n */\nfunction isImageFileType(file: File): boolean {\n return IMAGE_FILE_TYPES.has(file.type)\n}\n\n/**\n * Get the width and the height of the image.\n */\nfunction getDimensions(element: HTMLElement) {\n let { width, height } = element.style\n width = width || element.getAttribute('width') || ''\n height = height || element.getAttribute('height') || ''\n\n return { width, height }\n}\n\n/**\n * Retrieve attributes from the dom for the image extension.\n */\nfunction getImageAttributes({\n element,\n parse,\n}: {\n element: HTMLElement\n parse: ApplySchemaAttributes['parse']\n}) {\n const { width, height } = getDimensions(element)\n\n return {\n ...parse(element),\n alt: element.getAttribute('alt') ?? '',\n height: Number.parseInt(height || '0', 10) || null,\n src: element.getAttribute('src') ?? null,\n title: element.getAttribute('title') ?? '',\n width: Number.parseInt(width || '0', 10) || null,\n 'data-file-name': element.getAttribute('data-file-name') ?? null,\n }\n}\n\nfunction createPlaceholder(): HTMLElement {\n const element = document.createElement('div')\n\n return element\n}\n\n/**\n * The default handler converts the files into their `base64` representations\n * and adds the attributes before inserting them into the editor.\n */\nfunction uploadHandler(files: FileWithProgress[]): DelayedImage[] {\n invariant(files.length > 0, {\n code: ErrorConstant.EXTENSION,\n message: 'The upload handler was applied for the image extension without any valid files',\n })\n\n let completed = 0\n const promises: DelayedPromiseCreator<ImageAttributes>[] = []\n\n for (const { file, progress } of files) {\n promises.push(\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n () =>\n new Promise<ImageAttributes>((resolve) => {\n const reader = new FileReader()\n\n reader.addEventListener(\n 'load',\n (readerEvent) => {\n completed += 1\n progress(completed / files.length)\n resolve({ src: readerEvent.target?.result as string, 'data-file-name': file.name })\n },\n { once: true },\n )\n\n reader.readAsDataURL(file)\n }),\n )\n }\n\n return promises\n}\n\nfunction isClipboardEvent(event: ClipboardEvent | DragEvent): event is ClipboardEvent {\n return (event as ClipboardEvent).clipboardData !== undefined\n}\n", "import type { CreateExtensionPlugin } from '@rme-sdk/core'\nimport { isTextSelection, PlainExtension } from '@rme-sdk/core'\nimport type { Node as ProsemirrorNode } from '@rme-sdk/pm/model'\nimport type { EditorState } from '@rme-sdk/pm/state'\nimport { Decoration, DecorationSet } from '@rme-sdk/pm/view'\n\nimport { excludeHtmlInlineNodes } from '../../transform/markdown-it-html-inline'\nimport type { LineMarkAttrs } from './inline-mark-extensions'\nimport { isAutoHideMark } from './inline-mark-extensions'\n\ntype TextAttrs = Partial<LineMarkAttrs & { isAutoHideMark?: boolean }>\n\nfunction getTextAttrs(textNode: ProsemirrorNode | undefined | null): TextAttrs {\n const attrs: TextAttrs = {}\n for (const mark of textNode?.marks || []) {\n if (excludeHtmlInlineNodes.includes(textNode?.type.name || '')) {\n break\n }\n if (isAutoHideMark(mark.type.name)) {\n attrs.isAutoHideMark = true\n }\n Object.assign(attrs, mark.attrs)\n }\n return attrs\n}\n\nfunction findVisibleMarks(\n textBlock: ProsemirrorNode,\n cursorPos: number,\n textIndex: number,\n includeBefore: boolean,\n): [number, number][] {\n const posPairs: [number, number][] = []\n\n let textStartPos = cursorPos\n for (let i = textIndex; i < textBlock.content.childCount; i++) {\n const textNode = textBlock.content.child(i)\n const info = getTextAttrs(textNode)\n if (info.isAutoHideMark) {\n posPairs.push([textStartPos, textStartPos + textNode.nodeSize])\n }\n textStartPos += textNode.nodeSize\n if (info.depth === 1 && info.last) break\n }\n\n const infoAfterCursor = getTextAttrs(textBlock.maybeChild(textIndex))\n if (infoAfterCursor.depth === 1 && infoAfterCursor.first && !includeBefore) {\n return posPairs\n }\n\n let textEndPos = cursorPos\n for (let i = textIndex - 1; i >= 0; i--) {\n const textNode = textBlock.content.child(i)\n const info = getTextAttrs(textNode)\n if (info.isAutoHideMark) {\n posPairs.push([textEndPos - textNode.nodeSize, textEndPos])\n }\n textEndPos -= textNode.nodeSize\n if (info.depth === 1 && info.first) break\n }\n\n return posPairs\n}\n\nfunction createDecorationPlugin(): CreateExtensionPlugin {\n return {\n props: {\n decorations: (state: EditorState) => {\n if (!isTextSelection(state.selection)) return null\n\n const $pos = state.selection.$anchor\n\n const textBlock = $pos.parent\n if (!textBlock.isTextblock) return null\n\n let posPairs: [number, number][]\n\n if ($pos.textOffset === 0) {\n posPairs = findVisibleMarks(textBlock, $pos.pos, $pos.index($pos.depth), true)\n } else {\n const textNodeIndex = $pos.index($pos.depth)\n const textNode = textBlock.content.maybeChild(textNodeIndex)\n if (!textNode) return null\n\n const tokenDepth = getTextAttrs(textNode).depth\n if (!tokenDepth) return null\n\n posPairs = findVisibleMarks(\n textBlock,\n $pos.pos - $pos.textOffset,\n $pos.index($pos.depth),\n false,\n )\n }\n\n return DecorationSet.create(\n state.doc,\n posPairs.map(([from, to]) => Decoration.inline(from, to, { class: 'show' })),\n )\n },\n },\n }\n}\n\nexport class LineInlineDecorationExtension extends PlainExtension {\n get name() {\n return 'inlineDecoration' as const\n }\n\n createPlugin(): CreateExtensionPlugin {\n return createDecorationPlugin()\n }\n}\n", "import type {\n ExtensionCommandReturn,\n MarkExtensionSpec,\n NodeView,\n NodeViewMethod,\n} from '@rme-sdk/core'\nimport { MarkExtension, extension } from '@rme-sdk/core'\n\nimport { formatHref } from './format-href'\nimport { toggleInlineMark } from './inline-mark-commands'\n\nconst commonAttrs = {\n depth: { default: 0 },\n ignoreWhenCopy: { default: false },\n linkHref: { default: null }\n}\nconst endpointAttrs = {\n depth: { default: 0 },\n first: { default: false },\n last: { default: false },\n class: { default: '' },\n ignoreWhenCopy: { default: false },\n linkHref: { default: null }\n}\n\nclass MetaKey extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdMark' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n inclusive: false,\n attrs: endpointAttrs,\n toDOM: (mark) => {\n return ['span', { class: 'md-mark', 'data-ignore-when-copy': mark.attrs.ignoreWhenCopy }, 0]\n },\n }\n }\n\n createCommands() {\n return {\n toggleInlineMark: toggleInlineMark,\n }\n }\n}\n\nclass PlainText extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdText' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n attrs: endpointAttrs,\n toDOM: (mark) => ['span', { class: mark.attrs.class }, 0],\n }\n }\n}\n\nclass Emphasis extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdEm' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n attrs: commonAttrs,\n toDOM: () => ['em', 0],\n }\n }\n\n createCommands(): ExtensionCommandReturn {\n return {\n toggleEmphasis: () => (props) => toggleInlineMark(this.name)(props),\n }\n }\n}\n\nclass Strong extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdStrong' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n attrs: commonAttrs,\n toDOM: () => ['strong', 0],\n }\n }\n\n createCommands(): ExtensionCommandReturn {\n return {\n toggleStrong: () => (props) => toggleInlineMark(this.name)(props),\n }\n }\n}\n\nclass CodeText extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdCodeText' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n attrs: commonAttrs,\n toDOM: () => ['code', 0],\n }\n }\n\n createCommands(): ExtensionCommandReturn {\n return {\n toggleCodeText: () => (props) => toggleInlineMark(this.name)(props),\n }\n }\n}\n\nclass CodeSpace extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdCodeSpace' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n attrs: commonAttrs,\n toDOM: () => ['span', 0],\n }\n }\n}\n\nclass Delete extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdDel' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n attrs: commonAttrs,\n toDOM: () => ['del', 0],\n }\n }\n\n createCommands(): ExtensionCommandReturn {\n return {\n toggleDelete: () => (props) => toggleInlineMark(this.name)(props),\n }\n }\n}\n\nclass LinkText extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdLinkText' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n attrs: {\n ...commonAttrs,\n href: {\n default: '',\n },\n },\n toDOM: (mark) => [\n 'a',\n {\n href: mark.attrs.href,\n },\n 0,\n ],\n }\n }\n}\n\nclass LinkUri extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdLinkUri' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n spanning: false,\n attrs: commonAttrs,\n toDOM: (mark) => [\n 'a',\n { class: 'md-link', 'data-ignore-when-copy': mark.attrs.ignoreWhenCopy },\n 0,\n ],\n }\n }\n}\n\nclass ImgText extends MarkExtension {\n static disableExtraAttributes = true\n get name() {\n return 'mdImgText' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n spanning: false,\n attrs: commonAttrs,\n toDOM: () => ['span', { class: 'md-img-text' }, 0],\n }\n }\n}\n\nexport interface MfImgOptions {\n handleViewImgSrcUrl?: (src: string) => Promise<string>\n}\n\nconst globalImageHrefCache: Map<string, string> = new Map()\n\n@extension<MfImgOptions>({\n defaultOptions: {\n handleViewImgSrcUrl: async (src: string) => src,\n },\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nclass ImgUri extends MarkExtension<MfImgOptions> {\n static disableExtraAttributes = true\n get name() {\n return 'mdImgUri' as const\n }\n createMarkSpec(): MarkExtensionSpec {\n return {\n spanning: false,\n attrs: {\n ...commonAttrs,\n key: {\n default: '',\n },\n href: {\n default: '',\n },\n },\n toDOM: (mark) => ['img', { src: mark.attrs.href }, 0],\n }\n }\n\n createNodeViews = (): NodeViewMethod => {\n return (mark): NodeView => {\n const innerContainer = document.createElement('span')\n\n const img = document.createElement('img')\n if (this.options.handleViewImgSrcUrl) {\n this.options.handleViewImgSrcUrl(mark.attrs.href).then((newHref) => {\n img.setAttribute('src', formatHref(newHref))\n globalImageHrefCache.set(mark.attrs.href, newHref)\n })\n } else {\n img.setAttribute('src', formatHref(mark.attrs.href))\n }\n\n const outerContainer = document.createElement('span')\n outerContainer.appendChild(img)\n outerContainer.appendChild(innerContainer)\n outerContainer.setAttribute('class', 'md-img-uri')\n\n return { dom: outerContainer, contentDOM: innerContainer }\n }\n }\n}\n\nconst autoHideMarks: Record<string, true> = {\n mdMark: true,\n mdLinkUri: true,\n mdImgText: true,\n mdHtmlInline: true,\n}\n\nexport function isAutoHideMark(name: string): boolean {\n // This should be the fastest way based on my performance test.\n return autoHideMarks[name]\n}\n\ntype LineMarkExtensionOptions = {\n handleViewImgSrcUrl?: (src: string) => Promise<string>\n}\n\nexport const markExtensions = (options: LineMarkExtensionOptions = {}) => [\n new MetaKey(),\n new PlainText(),\n new Emphasis(),\n new Strong(),\n new CodeText(),\n new CodeSpace(),\n new Delete(),\n new LinkText(),\n new LinkUri(),\n new ImgText(),\n // new ImgUri({\n // handleViewImgSrcUrl: options.handleViewImgSrcUrl,\n // }),\n // new HtmlInlineMarks(),\n]\nexport type LineMarkExtension = ReturnType<typeof markExtensions>[number]\nexport type LineMarkName = LineMarkExtension['name']\nexport type LineMarkAttrs = {\n depth: number\n\n first?: boolean\n last?: boolean\n\n href?: string\n\n ignoreWhenCopy?: boolean\n\n htmlText?: string\n\n /**\n * to fix same attrs node only render once\n */\n key?: string\n\n /**\n * class name\n */\n class?: string\n}\n", "export function formatHref(location: string): string {\n if (isUnixFilePath(location) || isWindowsFilePath(location)) {\n return formatFileUrl(location)\n } else {\n return location\n }\n}\n\nfunction isUnixFilePath(location: string): boolean {\n return location.startsWith('/')\n}\n\nfunction isWindowsFilePath(location: string): boolean {\n return location.startsWith('\\\\') || /^[A-Z]{1,2}:/.test(location)\n}\n\nfunction formatFileUrl(filePath: string) {\n let pathName = filePath\n\n pathName = pathName.replace(/\\\\/g, '/')\n\n if (pathName[0] !== '/') {\n pathName = `/${pathName}`\n }\n\n return encodeURI(`file://${pathName}`).replace(/[?#]/g, encodeURIComponent)\n}\n", "import type { CommandFunction, CommandFunctionProps, ProsemirrorNode } from '@rme-sdk/core'\nimport type { Transaction } from '@rme-sdk/pm/state'\nimport { TextSelection } from '@rme-sdk/pm/state'\n\nimport { updateRangeMarks } from './inline-mark-helpers'\n\ntype CreateInlineKeyBindingProps = {\n left: string\n right: string\n mark: ToggleableInlineMarkName\n}\n\nfunction findMarkIndex(\n textBlockNode: ProsemirrorNode,\n mark: string,\n fromIndex: number,\n toIndex: number,\n empty: boolean,\n): false | number {\n for (let index = fromIndex; index <= toIndex; index++) {\n if (hasMark(textBlockNode.maybeChild(index), mark)) {\n return index\n }\n }\n if (empty || fromIndex === toIndex) {\n if (\n hasMark(textBlockNode.maybeChild(fromIndex), 'mdMark') &&\n hasMark(textBlockNode.maybeChild(fromIndex - 1), mark)\n ) {\n return fromIndex - 1\n }\n\n if (\n hasMark(textBlockNode.maybeChild(toIndex), 'mdMark') &&\n hasMark(textBlockNode.maybeChild(toIndex + 1), mark)\n ) {\n return toIndex + 1\n }\n }\n\n return false\n}\n\nfunction deleteSimpleInlineMark({\n left,\n right,\n mark,\n}: CreateInlineKeyBindingProps): CommandFunction {\n return (props: CommandFunctionProps): boolean => {\n const { tr, dispatch, state } = props\n const { $from, $to, empty } = state.selection\n\n const textBlockNode = $from.parent\n if (!textBlockNode || !textBlockNode.isTextblock) {\n return false\n }\n\n const textBlockStart = $from.start()\n if (textBlockStart < 0) {\n return false\n }\n\n let fromIndex = $from.index()\n let toIndex = $to.index()\n\n if ($to.textOffset === 0) {\n if (empty) {\n fromIndex = Math.max(fromIndex - 1, 0)\n } else if (toIndex > fromIndex) {\n toIndex--\n }\n }\n\n const existedMarkIndex = findMarkIndex(textBlockNode, mark, fromIndex, toIndex, empty)\n\n if (existedMarkIndex !== false) {\n let found = false\n for (let i = existedMarkIndex; i < textBlockNode.childCount; i++) {\n const textNode = textBlockNode.child(i)\n if (hasMark(textNode, 'mdMark') && textNode.text === right) {\n deleteTextBlockChild(tr, textBlockNode, textBlockStart, i)\n found = true\n }\n }\n for (let i = existedMarkIndex; i >= 0; i--) {\n const textNode = textBlockNode.child(i)\n if (hasMark(textNode, 'mdMark') && textNode.text === left) {\n deleteTextBlockChild(tr, textBlockNode, textBlockStart, i)\n found = true\n }\n }\n if (found) {\n if (dispatch) {\n try {\n updateRangeMarks(tr)\n dispatch(tr)\n } catch {\n return false\n }\n }\n return true\n }\n }\n\n return false\n }\n}\n\nfunction addSimpleInlineMark({ left, right }: CreateInlineKeyBindingProps): CommandFunction {\n return (props: CommandFunctionProps): boolean => {\n const { tr, dispatch, state } = props\n const { $from, $to, anchor, head } = state.selection\n\n if (dispatch) {\n tr.insertText(right, $to.pos)\n tr.insertText(left, $from.pos)\n const offset = left.length\n tr.setSelection(TextSelection.create(tr.doc, anchor + offset, head + offset))\n updateRangeMarks(tr)\n dispatch(tr)\n }\n\n return true\n }\n}\n\nfunction toggleSimpleInlineMark({\n left,\n right,\n mark,\n}: CreateInlineKeyBindingProps): CommandFunction {\n return (props: CommandFunctionProps): boolean => {\n const { $from, $to } = props.state.selection\n\n if (!$from.sameParent($to) || !$from.parent.type.isTextblock) {\n return false\n }\n\n if (deleteSimpleInlineMark({ left, right, mark })(props)) {\n return true\n }\n\n if (addSimpleInlineMark({ left, right, mark })(props)) {\n return true\n }\n\n return false\n }\n}\n\n/** @public */\nexport type ToggleableInlineMarkName = 'mdStrong' | 'mdEm' | 'mdCodeText' | 'mdDel'\n\nexport function toggleInlineMark(mark: ToggleableInlineMarkName): CommandFunction {\n switch (mark) {\n case 'mdStrong':\n return toggleSimpleInlineMark({ mark, left: '**', right: '**' })\n case 'mdEm':\n return toggleSimpleInlineMark({ mark, left: '*', right: '*' })\n case 'mdCodeText':\n return toggleSimpleInlineMark({ mark, left: '`', right: '`' })\n case 'mdDel':\n return toggleSimpleInlineMark({ mark, left: '~~', right: '~~' })\n default:\n throwUnknownMarkError(mark)\n }\n}\n\nexport type ToggleInlineMark = typeof toggleInlineMark\n\nfunction throwUnknownMarkError(mark: never): never {\n throw new Error(`Unknown mark to toggle: ${mark}`)\n}\n\nfunction hasMark(node: ProsemirrorNode | null | undefined, mark: string): boolean {\n if (!node) {\n return false\n }\n\n return node.marks.some((m) => m.type.name === mark)\n}\n\nfunction deleteTextBlockChild(\n tr: Transaction,\n textBlockNode: ProsemirrorNode,\n textBlockStart: number,\n childIndex: number,\n): Transaction {\n if (childIndex < 0 || childIndex >= textBlockNode.childCount) {\n return tr\n }\n\n const childNode = textBlockNode.child(childIndex)\n if (!childNode) {\n return tr\n }\n\n const docSize = tr.doc.content.size\n if (textBlockStart < 0 || textBlockStart > docSize) {\n return tr\n }\n\n let offset = textBlockStart\n for (let i = 0; i < childIndex; i++) {\n const node = textBlockNode.child(i)\n if (node) {\n offset += node.nodeSize\n }\n }\n\n const deleteFrom = offset\n const deleteTo = offset + childNode.nodeSize\n\n if (deleteFrom < 0 || deleteTo > docSize || deleteFrom >= deleteTo) {\n return tr\n }\n\n try {\n return tr.delete(deleteFrom, deleteTo)\n } catch {\n return tr\n }\n}\n", "import type { EditorSchema, ProsemirrorNode } from '@rme-sdk/pm'\nimport type { Node, Schema } from '@rme-sdk/pm/model'\nimport type { Transaction } from '@rme-sdk/pm/state'\nimport { Transform } from '@rme-sdk/pm/transform'\nimport type { EditorView } from '@rme-sdk/pm/view'\n\nimport type { MarkChunk } from '../../steps/batch-mark-step'\nimport { BatchSetMarkStep } from '../../steps/batch-mark-step'\nimport { excludeHtmlInlineNodes } from '../../transform/markdown-it-html-inline'\nimport { iterNode, iterNodeRange } from '../../utils/iter-node'\nimport { fromInlineMarkdown } from './from-inline-markdown'\nimport { InlineDecorateType } from './inline-types'\n\n/**\n * \u5904\u7406\u76F8\u90BB\u6807\u8BB0\u5757\u4E4B\u95F4\u7684\u8FB9\u754C\u60C5\u51B5\n * \u5F53\u6392\u9664\u8282\u70B9\u4F4D\u4E8E\u524D\u4E00\u4E2A\u6807\u8BB0\u5757\u7684\u7ED3\u675F\u4F4D\u7F6E\u65F6\uFF0C\u9700\u8981\u8C03\u6574\u524D\u4E00\u4E2A\u6807\u8BB0\u5757\u7684\u8303\u56F4\n * \u6D4B\u8BD5\u7528\u4F8B: *mark*<span>`qwe`\n */\nfunction adjustAdjacentChunkBoundary(\n output: MarkChunk[],\n excludedPositionsInRange: number[],\n): void {\n if (excludedPositionsInRange.length === 0 || output.length === 0) {\n return\n }\n\n const lastChunk = output[output.length - 1]\n const firstExcludedPos = excludedPositionsInRange[0]\n\n // \u5982\u679C\u6392\u9664\u8282\u70B9\u6B63\u597D\u4F4D\u4E8E\u524D\u4E00\u4E2A\u6807\u8BB0\u5757\u7684\u7ED3\u675F\u4F4D\u7F6E\uFF0C\u6269\u5C55\u524D\u4E00\u4E2A\u6807\u8BB0\u5757\u7684\u8303\u56F4\n if (lastChunk[1] - 1 === firstExcludedPos) {\n lastChunk[0] += 1\n lastChunk[1] += 1\n }\n}\n\nfunction parseTextBlock(tr: Transform, schema: Schema, node: Node, startPos: number, output: MarkChunk[]): void {\n if (!node.textContent) {\n return\n }\n\n // \u6536\u96C6\u9700\u8981\u6392\u9664\u7684 HTML \u5185\u8054\u8282\u70B9\u7684\u4F4D\u7F6E\n const excludedNodePositions: number[] = []\n let currentPos = -1\n\n for (let i = 0; i < node.childCount; i++) {\n const child = node.child(i)\n currentPos += child.nodeSize\n\n if (excludeHtmlInlineNodes.includes(child.type.name)) {\n excludedNodePositions.push(currentPos)\n }\n }\n\n if (node.type.name === \"reference_def\") {\n return\n }\n const tokens = fromInlineMarkdown(tr, node.textContent, node)\n\n if (tokens.length === 0) {\n return\n }\n\n let totalOffset = 0\n\n for (const token of tokens) {\n // \u521B\u5EFA\u6807\u8BB0\u5BF9\u8C61\n const expectedMarks = token.marks.map((markName) => schema.marks[markName].create(token.attrs))\n\n // \u8BA1\u7B97\u5F53\u524D token \u5728\u6587\u672C\u4E2D\u7684\u4F4D\u7F6E\uFF08\u8003\u8651\u4E4B\u524D\u7684\u504F\u79FB\u91CF\uFF09\n const tokenStart = token.start + totalOffset\n const tokenEnd = token.end + totalOffset\n\n // \u627E\u51FA\u5728\u5F53\u524D token \u8303\u56F4\u5185\u7684\u6392\u9664\u8282\u70B9\u4F4D\u7F6E\n const excludedPositionsInRange = excludedNodePositions.filter(\n (pos) => pos >= tokenStart && pos < tokenEnd,\n )\n const offset = excludedPositionsInRange.length\n\n\n // \u5904\u7406\u76F8\u90BB\u6807\u8BB0\u5757\u4E4B\u95F4\u7684\u8FB9\u754C\u60C5\u51B5\n adjustAdjacentChunkBoundary(output, excludedPositionsInRange)\n\n // \u6DFB\u52A0\u65B0\u7684\u6807\u8BB0\u5757\u5230\u8F93\u51FA\n output.push([\n startPos + token.start + totalOffset,\n startPos + token.end + totalOffset + offset,\n expectedMarks,\n ])\n\n totalOffset += offset\n }\n}\n\nfunction parseNode(\n tr: Transform,\n schema: EditorSchema,\n node: Node,\n startPos: number,\n output: MarkChunk[],\n): void {\n if (node.attrs.inlineDecorateType === InlineDecorateType.Ignore) {\n return\n }\n\n if (node.isTextblock) {\n parseTextBlock(tr, schema, node, startPos, output)\n } else {\n node.forEach((child: Node, offset: number) => {\n parseNode(tr, schema, child, startPos + offset + 1, output)\n })\n }\n}\n\nfunction updateNodeMarks(tr: Transform, node: Node, startPos: number, output: MarkChunk[]): void {\n if (!node.isTextblock) {\n for (const [child, offset] of iterNode(node)) {\n updateNodeMarks(tr, child, startPos + offset + 1, output)\n }\n } else {\n const schema = tr.doc.type.schema\n parseNode(tr, schema, node, startPos, output)\n }\n}\n\nexport function initDocMarks(doc: ProsemirrorNode): ProsemirrorNode {\n const tr = new Transform(doc)\n const output: MarkChunk[] = []\n updateNodeMarks(tr, doc, 0, output)\n if (output.length) {\n tr.step(new BatchSetMarkStep(output))\n }\n return tr.doc\n}\n\nexport function applySelectionMarks(view: EditorView): void {\n if (view.isDestroyed) return\n\n const tr = view.state.tr\n tr.setMeta('addToHistory', false)\n if (updateRangeMarks(tr)) {\n view.dispatch(tr)\n }\n}\n\nexport function applyDocMarks(view: EditorView): void {\n if (view.isDestroyed) return\n\n const tr = view.state.tr\n if (updateRangeMarks(tr, true)) {\n view.dispatch(tr)\n }\n}\n\nexport function updateRangeMarks(tr: Transaction, forceUpdateAll?: boolean): boolean {\n tr.setMeta('APPLY_MARKS', true)\n\n const { $from, $to } = tr.selection\n const range = $from.blockRange($to)\n\n const output: MarkChunk[] = []\n if (!range || forceUpdateAll) {\n updateNodeMarks(tr, tr.doc, 0, output)\n } else {\n const rangeEnd = range.end\n for (const [child, pos] of iterNodeRange(range)) {\n if (pos < range.start || pos > rangeEnd) {\n continue\n }\n updateNodeMarks(tr, child, pos, output)\n }\n }\n\n if (output.length === 0) {\n return false\n }\n\n const docSize = tr.doc.content.size\n const validChunks: MarkChunk[] = []\n for (const [from, to, marks] of output) {\n if (from < 0 || to > docSize || from >= to) {\n continue\n }\n validChunks.push([from, to, marks])\n }\n\n if (validChunks.length === 0) {\n return false\n }\n\n try {\n tr.step(new BatchSetMarkStep(validChunks))\n } catch {\n return false\n }\n\n if (tr.docChanged) {\n return true\n }\n return false\n}\n", "import type { Node, Schema } from '@rme-sdk/pm/model'\nimport { Fragment, Mark, NodeRange, Slice } from '@rme-sdk/pm/model'\nimport { Step, StepResult } from '@rme-sdk/pm/transform'\n\nimport { ReplaceDocStep } from \"./replace-doc-step\"\n\nexport type MarkChunk = [from: number, to: number, marks: Mark[]]\n\n// Replace the marks of multiple ranges in bulk. This is much more efficient\n// than creating multiple AddMarkStep and RemoveMarkStep, because it only needs\n// to go through the document once to add/remove the marks.\nexport class BatchSetMarkStep extends Step {\n constructor(readonly chunks: MarkChunk[]) {\n if (chunks.length === 0) {\n throw new RangeError('BatchSetMarkStep: at least one chunk is required')\n }\n\n let pos = 0\n for (const [from, to] of chunks) {\n if (pos > from || from > to) {\n throw new RangeError('BatchSetMarkStep: chunks must be sorted')\n }\n pos = to\n }\n\n super()\n }\n\n apply(doc: Node): StepResult {\n const chunks = this.chunks\n\n const from = chunks[0][0]\n const to = chunks[chunks.length - 1][1]\n\n const $from = doc.resolve(from)\n const $to = doc.resolve(to)\n\n const depth = $from.sharedDepth(to)\n const { start, parent } = new NodeRange($from, $to, depth)\n\n // We use the `start` from `NodeRange` to make sure that the\n // `oldSlice.openStart` is 0, so that we can calulate the position\n // of nodes correctly.\n const oldSlice = doc.slice(start, to)\n\n let chunkIndex = 0,\n nodeHi: number,\n chunkLo: number,\n chunkHi: number,\n lo: number,\n hi: number,\n mark: Mark,\n expectedMarks: readonly Mark[],\n marks: readonly Mark[],\n node: Node | null,\n nextNode: Node | null\n\n const fragment = mapFragment(\n oldSlice.content,\n start,\n parent,\n (inlineNode: Node, parent: Node, nodeLo: number) => {\n node = inlineNode\n\n const mapped: Node[] = []\n\n while (node && chunkIndex < chunks.length) {\n nodeHi = nodeLo + node.nodeSize\n ;[chunkLo, chunkHi, expectedMarks] = chunks[chunkIndex]\n\n // Invalid chunk. Skip it.\n if (chunkLo >= chunkHi) {\n chunkIndex++\n continue\n }\n\n // chunk and node do not overlap. Check the next node.\n if (chunkLo >= nodeHi) {\n mapped.push(node)\n break\n }\n\n // chunk and node do not overlap. Check the next chunk.\n if (nodeLo >= chunkHi) {\n chunkIndex++\n continue\n }\n\n // chunk and node overlap in the range [lo, hi].\n lo = Math.max(chunkLo, nodeLo)\n hi = Math.min(chunkHi, nodeHi)\n\n if (lo > nodeLo) {\n // The start part of the node is not been covered.\n mapped.push(node.cut(0, lo - nodeLo))\n node = node.cut(lo - nodeLo)\n nodeLo = lo\n }\n if (hi < nodeHi) {\n // The end part of the node is not been covered.\n ;[node, nextNode] = [node.cut(0, hi - nodeLo), node.cut(hi - nodeLo)]\n nodeHi = hi\n }\n\n marks = node.marks\n for (mark of marks) {\n if (!mark.isInSet(expectedMarks)) {\n marks = mark.removeFromSet(marks)\n }\n }\n for (mark of expectedMarks) {\n if (!mark.isInSet(marks) && parent?.type.allowsMarkType(mark.type)) {\n marks = mark.addToSet(marks)\n }\n }\n\n node = node.mark(marks)\n mapped.push(node)\n\n nodeLo += node.nodeSize\n node = nextNode\n nextNode = null\n }\n return mapped\n },\n )\n\n return StepResult.fromReplace(\n doc,\n start,\n to,\n new Slice(fragment, oldSlice.openStart, oldSlice.openEnd),\n )\n }\n\n invert(doc: Node): Step {\n return new ReplaceDocStep(doc)\n }\n\n map(): Step | null {\n return null\n }\n\n merge(): Step | null {\n return null\n }\n\n toJSON(): any {\n const chunks = this.chunks.map((chunk) => [\n chunk[0],\n chunk[1],\n chunk[2].map((mark: Mark) => mark.toJSON()),\n ])\n return { stepType: 'batchSetMark', chunks }\n }\n\n static fromJSON(schema: Schema, json: any): BatchSetMarkStep {\n return new BatchSetMarkStep(\n json.chunks.map((chunk: any) => {\n return [chunk[0], chunk[1], chunk[2].map((mark: any) => Mark.fromJSON(schema, mark))]\n }),\n )\n }\n}\n\ntry {\n Step.jsonID('batchSetMark', BatchSetMarkStep)\n} catch (error) {}\n\nfunction mapFragment(\n fragment: Fragment,\n start: number,\n parent: Node,\n fn: (inlineNode: Node, textBlockNode: Node, start: number) => Node[],\n): Fragment {\n const mapped: Node[] = []\n let offset = start\n\n for (let i = 0; i < fragment.childCount; i++) {\n let child = fragment.child(i)\n if (child.content.size) {\n child = child.copy(mapFragment(child.content, offset + (child.isLeaf ? 0 : 1), child, fn))\n }\n if (child.isInline) {\n mapped.push(...fn(child, parent, offset))\n } else {\n mapped.push(child)\n }\n\n offset += child.nodeSize\n }\n return Fragment.fromArray(mapped)\n}\n", "import type { Node, Schema } from '@rme-sdk/pm/model'\nimport { Step, StepMap, StepResult } from '@rme-sdk/pm/transform'\n\n// Replace the document with a new document.\nexport class ReplaceDocStep extends Step {\n constructor(readonly doc: Node) {\n super()\n }\n\n apply(doc: Node) {\n return StepResult.ok(doc)\n }\n\n getMap() {\n return StepMap.empty\n }\n\n invert(doc: Node) {\n return new ReplaceDocStep(doc)\n }\n\n map() {\n return null\n }\n\n merge(other: Step) {\n return null\n }\n\n toJSON(): any {\n return { stepType: 'replaceDoc', doc: this.doc.toJSON() }\n }\n\n /// @internal\n static fromJSON(schema: Schema, json: any) {\n const doc = schema.nodeFromJSON(json.doc)\n return new ReplaceDocStep(doc)\n }\n}\n\ntry {\n Step.jsonID('replaceDoc', ReplaceDocStep)\n} catch (error) {\n\n}\n", "import type { ProsemirrorNode } from \"@rme-sdk/core\"\nimport type { NodeRange } from \"@rme-sdk/pm/model\"\n\n/**\n * Iterate all children from a parent node. Yield child node, its\n * offset into this parent node and its index.\n *\n * Same function as node.forEach but with two benefits by using\n * ES6 generator:\n * 1. better readability\n * 2. ability to break the loop\n *\n * @param node The parent node\n * @yields {[node, offset, index]}\n */\nexport function* iterNode(node: ProsemirrorNode): Generator<[ProsemirrorNode, number, number]> {\n const fragment = node.content\n for (let index = 0, offset = 0; index < fragment.childCount; index++) {\n const child = fragment.child(index)\n yield [child, offset, index]\n offset += child.nodeSize\n }\n}\n\n/**\n * Iterage all children from a NodeRange object. Yield each child node\n * and its (absolute) position\n *\n * @param range\n * @yields {[node, offset]}\n */\nexport function* iterNodeRange(range: NodeRange): Generator<[ProsemirrorNode, number]> {\n let pos = range.start + 1\n for (const [child, , index] of iterNode(range.parent)) {\n if (index < range.startIndex) continue\n else if (index >= range.endIndex) break\n yield [child, pos]\n pos += child.nodeSize\n }\n}\n", "import { excludeHtmlInlineNodes } from '@/editor/transform/markdown-it-html-inline'\nimport { Node } from '@rme-sdk/pm/model'\nimport pkg from 'lodash'\nimport mdast from 'mdast'\nimport type { Options as FromMarkdownOptions } from 'mdast-util-from-markdown'\nimport { fromMarkdown } from 'mdast-util-from-markdown'\nimport { gfmAutolinkLiteralFromMarkdown } from 'mdast-util-gfm-autolink-literal'\nimport { gfmStrikethroughFromMarkdown } from 'mdast-util-gfm-strikethrough'\nimport { gfmAutolinkLiteral } from 'micromark-extension-gfm-autolink-literal'\nimport { gfmStrikethrough } from 'micromark-extension-gfm-strikethrough'\nimport { Transform } from 'prosemirror-transform'\nimport type { LineMarkName } from './inline-mark-extensions'\nimport type { InlineToken } from './inline-types'\nconst { cloneDeep } = pkg\n\ngfmAutolinkLiteralFromMarkdown.transforms = []\n\nfunction fixMarkNames(marks: LineMarkName[]): LineMarkName[] {\n if (marks.length <= 1) return marks\n if (marks.includes('mdMark')) return ['mdMark']\n if (marks.includes('mdCodeText')) return ['mdCodeText']\n if (marks.includes('mdText')) return marks.filter((x) => x !== 'mdText')\n return marks\n}\n\nfunction flatText(mdastToken: mdast.Text, depth: number): InlineToken[] {\n return [\n {\n marks: ['mdText'],\n attrs: { depth, first: true, last: true },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.end.offset!,\n },\n ]\n}\n\nfunction flatStrong(mdastToken: mdast.Strong, depth: number, node?: Node): InlineToken[] {\n const inlineTokens: InlineToken[] = [\n {\n marks: ['mdMark'],\n attrs: { depth, first: true },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.start.offset! + 2,\n },\n ]\n for (const childMdastToken of mdastToken.children) {\n for (const inlineToken of flatPhrasingContent(childMdastToken, depth + 1, node)) {\n inlineToken.marks.push('mdStrong')\n inlineTokens.push(inlineToken)\n }\n }\n inlineTokens.push({\n marks: ['mdMark'],\n attrs: { depth, last: true },\n start: mdastToken.position!.end.offset! - 2,\n end: mdastToken.position!.end.offset!,\n })\n return inlineTokens\n}\n\nfunction flatEmphasis(mdastToken: mdast.Emphasis, depth: number, node?: Node): InlineToken[] {\n const inlineTokens: InlineToken[] = [\n {\n marks: ['mdMark'],\n attrs: { depth, first: true },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.start.offset! + 1,\n },\n ]\n for (const childMdastToken of mdastToken.children) {\n for (const inlineToken of flatPhrasingContent(childMdastToken, depth + 1, node)) {\n inlineToken.marks.push('mdEm')\n inlineTokens.push(inlineToken)\n }\n }\n inlineTokens.push({\n marks: ['mdMark'],\n attrs: { depth, last: true },\n start: mdastToken.position!.end.offset! - 1,\n end: mdastToken.position!.end.offset!,\n })\n return inlineTokens\n}\n\nfunction flatDelete(mdastToken: mdast.Delete, depth: number, node?: Node): InlineToken[] {\n const inlineTokens: InlineToken[] = [\n {\n marks: ['mdMark'],\n attrs: { depth, first: true },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.start.offset! + 2,\n },\n ]\n for (const childMdastToken of mdastToken.children) {\n for (const inlineToken of flatPhrasingContent(childMdastToken, depth + 1, node)) {\n inlineToken.marks.push('mdDel')\n inlineTokens.push(inlineToken)\n }\n }\n inlineTokens.push({\n marks: ['mdMark'],\n attrs: { depth, last: true },\n start: mdastToken.position!.end.offset! - 2,\n end: mdastToken.position!.end.offset!,\n })\n return inlineTokens\n}\n\nfunction flatInlineCode(mdastToken: mdast.InlineCode, depth: number): InlineToken[] {\n return [\n {\n marks: ['mdMark'],\n attrs: { depth, first: true },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.start.offset! + 1,\n },\n {\n marks: ['mdCodeText'],\n attrs: { depth },\n start: mdastToken.position!.start.offset! + 1,\n end: mdastToken.position!.end.offset! - 1,\n },\n {\n marks: ['mdMark'],\n attrs: { depth, last: true },\n start: mdastToken.position!.end.offset! - 1,\n end: mdastToken.position!.end.offset!,\n },\n ]\n}\n\n// function flatImage(mdastToken: mdast.Image, depth: number): InlineToken[] {\n// return [\n// {\n// marks: ['mdImgUri'],\n// attrs: { depth, first: true, last: true, href: mdastToken.url, key: nanoid() },\n// start: mdastToken.position!.start.offset!,\n// end: mdastToken.position!.end.offset!,\n// },\n// ]\n// }\n\nfunction flatAutoLinkLiteral(mdastToken: mdast.Link, depth: number): InlineToken[] {\n return [\n {\n marks: ['mdLinkText'],\n attrs: { depth, first: true, last: true, href: mdastToken.url },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.end.offset!,\n },\n ]\n}\n\nfunction flatLink(\n mdastToken: mdast.Link,\n depth: number,\n node?: Node,\n): InlineToken[] {\n let parentStartPos = mdastToken.position!.start.offset!\n let parentEndPos = mdastToken.position!.end.offset!\n\n let offset = 0\n if (node) {\n let currentChildPos = 0\n\n node.forEach((child) => {\n if (\n excludeHtmlInlineNodes.includes(child.type.name) &&\n parentStartPos <= currentChildPos &&\n currentChildPos < parentEndPos\n ) {\n offset++\n }\n currentChildPos += child.nodeSize\n })\n }\n\n if (mdastToken.children.length === 0) {\n // process [](https://example.com)\n return [\n {\n marks: [offset > 0 ? 'mdMark' : 'mdText'],\n attrs: { depth, first: true, last: false, ignoreWhenCopy: true, linkHref: mdastToken.url },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.start.offset! + 2,\n },\n {\n marks: [offset > 0 ? 'mdMark' : 'mdText'],\n attrs: { depth, first: false, last: true, ignoreWhenCopy: true, linkHref: mdastToken.url },\n start: mdastToken.position!.start.offset! + 2,\n end: parentEndPos,\n },\n ]\n }\n const childrenStartPos = mdastToken.children[0].position!.start.offset!\n let childrenEndPos = mdastToken.children[mdastToken.children.length - 1].position!.end.offset!\n\n if (offset > 0) {\n childrenEndPos += offset\n }\n\n if (parentStartPos === childrenStartPos && parentEndPos === childrenEndPos) {\n return flatAutoLinkLiteral(mdastToken, depth)\n }\n\n const inlineTokens: InlineToken[] = [\n // match \"<\" for autolinks or \"[\" for links\n {\n marks: ['mdMark'],\n attrs: { depth, first: true, ignoreWhenCopy: true },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.start.offset! + 1,\n },\n ]\n for (const childMdastToken of mdastToken.children) {\n for (const inlineToken of flatPhrasingContent(childMdastToken, depth + 1, node)) {\n inlineToken.marks.push('mdLinkText')\n inlineToken.attrs.href = mdastToken.url\n inlineTokens.push(inlineToken)\n }\n }\n\n if (childrenEndPos + 2 < parentEndPos) {\n inlineTokens.push(\n // match \"](\" for links\n {\n marks: ['mdMark'],\n attrs: { depth, ignoreWhenCopy: true },\n start: childrenEndPos,\n end: childrenEndPos + 2,\n },\n // match the content between \"(\" and \")\" for links\n {\n marks: ['mdLinkUri'], // TODO: it's not only uri\n attrs: { depth, ignoreWhenCopy: true },\n start: childrenEndPos + 2,\n end: parentEndPos - 1,\n },\n )\n }\n\n // match \">\" for autolinks or \"]\" for links\n inlineTokens.push({\n marks: ['mdMark'],\n attrs: { depth, last: true, ignoreWhenCopy: true },\n start: parentEndPos - 1,\n end: parentEndPos,\n })\n return inlineTokens\n}\n\nfunction flatLinkReference(\n mdastToken: mdast.LinkReference,\n depth: number,\n node?: Node,\n): InlineToken[] {\n let parentStartPos = mdastToken.position!.start.offset!\n let parentEndPos = mdastToken.position!.end.offset!\n\n let offset = 0\n if (node) {\n let currentChildPos = 0\n\n node.forEach((child) => {\n if (\n excludeHtmlInlineNodes.includes(child.type.name) &&\n parentStartPos <= currentChildPos &&\n currentChildPos < parentEndPos\n ) {\n offset++\n }\n currentChildPos += child.nodeSize\n })\n }\n\n if (mdastToken.children.length === 0) {\n // process [](https://example.com)\n return [\n {\n marks: [offset > 0 ? 'mdMark' : 'mdText'],\n attrs: { depth, first: true, last: false, ignoreWhenCopy: true },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.start.offset! + 2,\n },\n {\n marks: [offset > 0 ? 'mdMark' : 'mdText'],\n attrs: { depth, first: false, last: true, ignoreWhenCopy: true },\n start: mdastToken.position!.start.offset! + 2,\n end: parentEndPos,\n },\n ]\n }\n const childrenStartPos = mdastToken.children[0].position!.start.offset!\n let childrenEndPos = mdastToken.children[mdastToken.children.length - 1].position!.end.offset!\n\n if (offset > 0) {\n childrenEndPos += offset\n }\n\n const inlineTokens: InlineToken[] = [\n // match \"<\" for autolinks or \"[\" for links\n {\n marks: ['mdMark'],\n attrs: { depth, first: true, ignoreWhenCopy: true },\n start: mdastToken.position!.start.offset!,\n end: mdastToken.position!.start.offset! + 1,\n },\n ]\n for (const childMdastToken of mdastToken.children) {\n for (const inlineToken of flatPhrasingContent(childMdastToken, depth + 1, node)) {\n inlineToken.marks.push('mdLinkText')\n inlineTokens.push(inlineToken)\n }\n }\n\n if (childrenEndPos + 2 < parentEndPos) {\n inlineTokens.push(\n // match \"](\" for links\n {\n marks: ['mdMark'],\n attrs: { depth, ignoreWhenCopy: true },\n start: childrenEndPos,\n end: childrenEndPos + 2,\n },\n // match the content between \"(\" and \")\" for links\n {\n marks: ['mdLinkUri'], // TODO: it's not only uri\n attrs: { depth, ignoreWhenCopy: true },\n start: childrenEndPos + 2,\n end: parentEndPos - 1,\n },\n )\n }\n\n // match \">\" for autolinks or \"]\" for links\n inlineTokens.push({\n marks: ['mdMark'],\n attrs: { depth, last: true, ignoreWhenCopy: true },\n start: parentEndPos - 1,\n end: parentEndPos,\n })\n return inlineTokens\n}\n// Make a tree structural mdast `PhrasingContent` object into a flat `InlineToken` array.\nfunction flatPhrasingContent(\n mdastToken: mdast.PhrasingContent,\n depth: number,\n node?: Node,\n): InlineToken[] {\n switch (mdastToken.type) {\n case 'text':\n return flatText(mdastToken, depth)\n case 'strong':\n return flatStrong(mdastToken, depth, node)\n case 'emphasis':\n return flatEmphasis(mdastToken, depth, node)\n case 'delete':\n return flatDelete(mdastToken, depth, node)\n case 'inlineCode':\n return flatInlineCode(mdastToken, depth)\n case 'html':\n return []\n case 'break':\n return []\n case 'image':\n return []\n case 'imageReference':\n return []\n case 'footnote':\n return []\n case 'footnoteReference':\n return []\n case 'link':\n return flatLink(mdastToken, depth, node)\n case 'linkReference':\n return flatLinkReference(mdastToken, depth, node)\n default:\n console.warn('unknow mdast token:', mdastToken)\n return []\n }\n}\n\ntype PhrasingContentType = mdast.PhrasingContent['type']\n\nconst phrasingContentTypes: Record<PhrasingContentType, true> = {\n delete: true,\n text: true,\n emphasis: true,\n strong: true,\n html: true,\n inlineCode: true,\n break: true,\n image: true,\n imageReference: true,\n footnote: true,\n footnoteReference: true,\n link: true,\n linkReference: true,\n}\n\nconst fromMarkdownOptions: FromMarkdownOptions = {\n extensions: [\n {\n disable: {\n null: [\n 'blockQuote',\n 'characterEscape',\n 'codeFenced',\n 'codeIndented',\n 'headingAtx',\n 'htmlFlow',\n 'htmlText',\n 'list',\n 'thematicBreak',\n 'image',\n ],\n },\n },\n gfmStrikethrough({ singleTilde: false }),\n gfmAutolinkLiteral,\n ],\n mdastExtensions: [gfmStrikethroughFromMarkdown, gfmAutolinkLiteralFromMarkdown],\n}\n\nfunction parseInlineMarkdown(text: string): mdast.PhrasingContent[] {\n try {\n const root: mdast.Root = fromMarkdown(text, fromMarkdownOptions)\n if (root.children.length === 0) {\n return []\n }\n const paragraph = root.children[0]\n if (paragraph.type !== 'paragraph') {\n throw Error(`unknow child type ${paragraph.type}`)\n }\n\n for (const child of paragraph.children) {\n if (!phrasingContentTypes[child.type]) {\n throw Error(`got unknow phrasingContent token: ${JSON.stringify(child)}`)\n }\n }\n return paragraph.children\n } catch (error) {\n console.warn(`failed to parse inline markdown text ${JSON.stringify(text)}: ${error}`)\n }\n return []\n}\n\nfunction fixTokensMarkNames(tokens: InlineToken[]) {\n for (const inlineToken of tokens) {\n if (inlineToken.end - inlineToken.start === 0) {\n continue // Prosemirror doesn't allow empty text node\n }\n inlineToken.marks = fixMarkNames(inlineToken.marks)\n }\n return tokens\n}\n\nfunction parseMdInline(phrasingContents: mdast.PhrasingContent[], node?: Node, depth = 1) {\n let tokens: InlineToken[] = []\n for (const token of phrasingContents) {\n tokens = tokens.concat(flatPhrasingContent(token, depth, node))\n }\n\n return fixTokensMarkNames(tokens)\n}\n\nexport function fromInlineMarkdown(tr: Transform, text: string, node?: Node): InlineToken[] {\n const references = tr.doc.content.content.filter((node) => node.type?.name === 'reference_def')\n const refercencesText = references\n .map((refer) => {\n return `[${refer.attrs.label}]: ${refer.attrs.href}${refer.attrs.title ? ` \"${refer.attrs.title}\"` : ''}`\n })\n .join('\\n\\n')\n\n const phrasingContents = parseInlineMarkdown(`${text}\\n\\n${refercencesText}`)\n\n const res = parseMdInline(phrasingContents, node)\n\n return res\n}\n\nexport type HTMLNode = {\n tag: string\n voidElement: boolean\n isClosingTag: boolean\n index: number\n}\n\nexport const canCreateDomTagName = (tagName: string) => {\n try {\n document.createElement(tagName)\n return true\n } catch (error) {\n return false\n }\n}\n", "import { TextSelection, type Transaction } from '@rme-sdk/pm/state'\nimport type { EditorView } from '@rme-sdk/pm/view'\n\nimport { PlainExtension } from '@rme-sdk/main'\nimport { applySelectionMarks } from './inline-mark-helpers'\n\nexport class LineInlineMarkExtension extends PlainExtension {\n get name() {\n return 'inlineMark' as const\n }\n\n createPlugin() {\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n\n const debounceApplyMarks = (view: EditorView): void => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n timeoutId = setTimeout(() => {\n if (view.isDestroyed) {\n timeoutId = null\n return\n }\n\n const currentDoc = view.state.doc\n const currentSelection = view.state.selection\n const { $head, $anchor } = currentSelection\n\n applySelectionMarks(view)\n\n const maxPos = currentDoc.content.size\n const validHeadPos = Math.min(Math.max($head.pos, 0), maxPos)\n const validAnchorPos = Math.min(Math.max($anchor.pos, 0), maxPos)\n\n if (validHeadPos >= 0 && validHeadPos <= maxPos && validAnchorPos >= 0 && validAnchorPos <= maxPos) {\n try {\n const $validHead = currentDoc.resolve(validHeadPos)\n const $validAnchor = currentDoc.resolve(validAnchorPos)\n const newSelection = $validHead.parent === $validAnchor.parent\n ? TextSelection.create(currentDoc, validAnchorPos, validHeadPos)\n : TextSelection.create(currentDoc, validHeadPos)\n view.dispatch(view.state.tr.setSelection(newSelection))\n } catch {\n }\n }\n\n timeoutId = null\n }, 10)\n }\n\n let view: EditorView | null = null\n\n return {\n appendTransaction: (transactions: readonly Transaction[]): Transaction | null | undefined => {\n let shouldUpdate = false\n\n for (const tr of transactions) {\n if (tr.docChanged && !tr.getMeta('APPLY_MARKS')) {\n shouldUpdate = true\n break\n }\n }\n\n if (shouldUpdate && view && !view.isDestroyed) {\n debounceApplyMarks(view)\n }\n return\n },\n\n view: (editorView: EditorView | null) => {\n view = editorView\n return {}\n },\n }\n }\n}\n", "import type { InputRule, ProsemirrorNode } from '@rme-sdk/core'\nimport { isString } from '@rme-sdk/core'\nimport type Token from 'markdown-it/lib/token.mjs'\nimport type {\n MarkdownParseState,\n NodeSerializerOptions,\n NodeSerializerSpec,\n ParserRule,\n} from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport { listInputRules } from './input-rule'\n\nexport abstract class MarkdownNodeExtension {\n abstract fromMarkdown: () => readonly ParserRule[]\n abstract toMarkdown: NodeSerializerSpec\n}\n\nimport {\n convertCommand,\n ExtensionTag,\n type KeyBindings,\n NodeExtension,\n type NodeExtensionSpec,\n type ProsemirrorPlugin,\n} from '@rme-sdk/core'\nimport type { NodeRange } from '@rme-sdk/pm/model'\nimport {\n createDedentListCommand,\n createIndentListCommand,\n createListPlugins,\n createListSpec,\n createMoveListCommand,\n createSplitListCommand,\n createToggleCollapsedCommand,\n createToggleListCommand,\n createUnwrapListCommand,\n createWrapInListCommand,\n type DedentListOptions,\n type IndentListOptions,\n listKeymap,\n protectCollapsed,\n type ToggleCollapsedOptions,\n type UnwrapListOptions,\n} from '@rme-sdk/prosemirror-flat-list'\nimport { defaultMarkerGetter } from './input-rule/schema/to-dom'\nimport { ListAttributes } from './input-rule/types'\n\n/**\n * A Remirror extension for creating lists. It's a simple wrapper around the API from `prosemirror-flat-list`.\n *\n * @public\n */\nexport class LineListExtension extends NodeExtension {\n static disableExtraAttributes = true\n\n get name() {\n return 'list' as const\n }\n\n createInputRules(): InputRule[] {\n return listInputRules\n }\n\n createTags() {\n return [ExtensionTag.Block]\n }\n\n createNodeSpec(): NodeExtensionSpec {\n // @ts-expect-error: incompatible type\n return createListSpec({ toDomParams: { nativeList: false, getMarkers: defaultMarkerGetter } })\n }\n\n createKeymap(): KeyBindings {\n const bindings: KeyBindings = {}\n for (const [key, command] of Object.entries(listKeymap)) {\n bindings[key] = convertCommand(command)\n }\n bindings['Tab'] = alwaysTrue(bindings['Mod-]'])\n bindings['Shift-Tab'] = alwaysTrue(bindings['Mod-['])\n return bindings\n }\n\n createExternalPlugins(): ProsemirrorPlugin[] {\n return createListPlugins({ schema: this.store.schema })\n }\n\n createCommands() {\n return {\n indentList: (props?: IndentListOptions) => {\n return convertCommand(createIndentListCommand(props))\n },\n dedentList: (props?: DedentListOptions) => {\n return convertCommand(createDedentListCommand(props))\n },\n\n unwrapList: (options?: UnwrapListOptions) => {\n return convertCommand(createUnwrapListCommand(options))\n },\n\n wrapInList: (getAttrs: ListAttributes | ((range: NodeRange) => ListAttributes | null)) => {\n return convertCommand(createWrapInListCommand<ListAttributes>(getAttrs))\n },\n\n moveList: (direction: 'up' | 'down') => {\n return convertCommand(createMoveListCommand(direction))\n },\n\n splitList: () => convertCommand(createSplitListCommand()),\n\n protectCollapsed: () => convertCommand(protectCollapsed),\n\n toggleCollapsed: (props?: ToggleCollapsedOptions) => {\n return convertCommand(createToggleCollapsedCommand(props))\n },\n\n toggleList: (attrs: ListAttributes) => {\n return convertCommand(createToggleListCommand(attrs))\n },\n } as const\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.free,\n token: 'list_item_open',\n handler: (state: MarkdownParseState, token: Token): void => {\n switch (state.topContext()) {\n case 'ordered_list':\n const token = state.topContextToken()\n let startOrder\n if (token?.type === 'ordered_list_open') {\n token?.attrs?.some(([name, value]) => {\n if (name === 'order') {\n startOrder = parseInt(value, 10)\n state.closeContextToken()\n return true\n }\n return false\n })\n }\n\n state.openNode(this.type, {\n kind: 'ordered',\n order: startOrder,\n } satisfies ListAttributes)\n break\n case 'bullet_list':\n state.openNode(this.type, { kind: 'bullet' } satisfies ListAttributes)\n break\n default:\n throw new Error('unknown context')\n }\n },\n },\n {\n type: ParserRuleType.free,\n token: 'list_checkbox',\n handler: (state: MarkdownParseState, tok: Token) => {\n const parent = state.stack[state.stack.length - 1]\n if (parent?.type.name === 'list') {\n const checked: null | string | boolean = tok.attrGet('checked')\n const attrs: ListAttributes = { kind: 'task', checked: isString(checked) || !!checked }\n parent.attrs = attrs\n } else {\n console.warn(`expect list but got ${parent?.type.name}`)\n }\n },\n },\n {\n type: ParserRuleType.free,\n token: 'list_item_close',\n handler: (state: MarkdownParseState): void => {\n state.closeNode()\n },\n },\n {\n type: ParserRuleType.context,\n token: 'bullet_list',\n context: 'bullet_list',\n },\n {\n type: ParserRuleType.context,\n token: 'ordered_list',\n context: 'ordered_list',\n },\n ] as const\n }\n\n public toMarkdown({ state, node, counter }: NodeSerializerOptions) {\n const attrs = node.attrs as ListAttributes\n let firstDelim = ''\n if (attrs.kind === 'ordered') {\n // If node has custom order attribute, use it (consistent with CSS)\n // Otherwise use counter value which is already calculated correctly in serializer\n // to match CSS counter logic (resets when previous sibling is not an ordered list)\n const order = attrs.order != null ? attrs.order : counter\n firstDelim = `${order}. `\n } else if (attrs.kind === 'task') {\n firstDelim = attrs.checked ? '- [x] ' : '- [ ] '\n } else if (attrs.kind === 'bullet') {\n firstDelim = '- '\n }\n\n state.wrapBlock(' ', firstDelim, node, () =>\n state.renderContent(node),\n )\n }\n}\n\n/**\n * Wrap the giving command function so that it always returns `true`. This is\n * useful when we want pressing `Tab` and `Shift-Tab` won't blur the editor even\n * if the keybinding command returns `false`\n *\n * @public\n */\nexport function alwaysTrue<T extends unknown[]>(\n func: (...args: T) => boolean,\n): (...args: T) => boolean {\n return (...args) => {\n func(...args)\n return true\n }\n}\n\nexport function isOrderedListNode(node: ProsemirrorNode): boolean {\n return node.type.name === 'list' && (node.attrs as ListAttributes).kind === 'ordered'\n}\n", "import { InputRule } from 'prosemirror-inputrules'\nimport type { Attrs } from 'prosemirror-model'\nimport type { Transaction } from 'prosemirror-state'\nimport { findWrapping } from 'prosemirror-transform'\n\nimport type { ListAttributes } from './types'\nimport { getListType } from './utils/get-list-type'\nimport { isListNode } from './utils/is-list-node'\nimport { parseInteger } from './utils/parse-integer'\n\n// Helper function to check if we're inside a table cell\nfunction isInsideTableCell($pos: any): boolean {\n for (let depth = $pos.depth; depth > 0; depth--) {\n const node = $pos.node(depth)\n if (node.type.name === 'tableCell' || node.type.name === 'tableHeaderCell') {\n return true\n }\n }\n return false\n}\n\n/**\n * A callback function to get the attributes for a list input rule.\n *\n * @public @group Input Rules\n */\nexport type ListInputRuleAttributesGetter<\n T extends ListAttributes = ListAttributes,\n> = (options: {\n /**\n * The match result of the regular expression.\n */\n match: RegExpMatchArray\n\n /**\n * The previous attributes of the existing list node, if it exists.\n */\n attributes?: T\n}) => T\n\n/**\n * Build an input rule for automatically wrapping a textblock into a list node\n * when a given string is typed.\n *\n * @public @group Input Rules\n */\nexport function wrappingListInputRule<\n T extends ListAttributes = ListAttributes,\n>(regexp: RegExp, getAttrs: T | ListInputRuleAttributesGetter<T>): InputRule {\n return new InputRule(\n regexp,\n (state, match, start, end): Transaction | null => {\n const tr = state.tr\n tr.deleteRange(start, end)\n const $pos = tr.selection.$from\n\n // Check if we're inside a table cell - if so, don't create a list\n if (isInsideTableCell($pos)) {\n return null\n }\n\n const listNode = $pos.index(-1) === 0 && $pos.node(-1)\n if (listNode && isListNode(listNode)) {\n const oldAttrs: Attrs = listNode.attrs as ListAttributes\n const newAttrs: Attrs =\n typeof getAttrs === 'function'\n ? getAttrs({ match, attributes: oldAttrs as T })\n : getAttrs\n\n const entries = Object.entries(newAttrs).filter(([key, value]) => {\n return oldAttrs[key] !== value\n })\n if (entries.length === 0) {\n return null\n } else {\n const pos = $pos.before(-1)\n for (const [key, value] of entries) {\n tr.setNodeAttribute(pos, key, value)\n }\n return tr\n }\n }\n\n const $start = tr.doc.resolve(start)\n const range = $start.blockRange()\n if (!range) {\n return null\n }\n\n const newAttrs: Attrs =\n typeof getAttrs === 'function' ? getAttrs({ match }) : getAttrs\n const wrapping = findWrapping(range, getListType(state.schema), newAttrs)\n if (!wrapping) {\n return null\n }\n\n return tr.wrap(range, wrapping)\n },\n )\n}\n\n/**\n * All input rules for lists.\n *\n * @public @group Input Rules\n */\nexport const listInputRules: InputRule[] = [\n wrappingListInputRule<ListAttributes>(/^\\s?([*-])\\s$/, {\n kind: 'bullet',\n collapsed: false,\n }),\n wrappingListInputRule<ListAttributes>(/^\\s?(\\d+)\\.\\s$/, ({ match }) => {\n const order = parseInteger(match[1])\n return {\n kind: 'ordered',\n collapsed: false,\n order: order != null && order >= 2 ? order : null,\n }\n }),\n wrappingListInputRule<ListAttributes>(/^\\s?\\[([\\sXx]?)]\\s$/, ({ match }) => {\n return {\n kind: 'task',\n checked: ['x', 'X'].includes(match[1]),\n collapsed: false,\n }\n }),\n wrappingListInputRule<ListAttributes>(/^\\s?>>\\s$/, {\n kind: 'toggle',\n }),\n]\n", "/** @internal */\nexport function parseInteger(attr: string | null | undefined): number | null {\n if (attr == null) return null\n const int = Number.parseInt(attr, 10)\n if (Number.isInteger(int)) return int\n return null\n}\n", "import type { DOMOutputSpec, Node as ProsemirrorNode } from 'prosemirror-model'\n\nimport type { ListAttributes } from '../types'\n\n/**\n * @public @group Schema\n */\nexport interface ListToDOMOptions {\n /**\n * The list node to be rendered.\n */\n node: ProsemirrorNode\n\n /**\n * If `true`, the list will be rendered as a native `<ul>` or `<ol>` element.\n * You might want to use {@link joinListElements} to join the list elements\n * afterward.\n *\n * @defaultValue false\n */\n nativeList?: boolean\n\n /**\n * An optional function to get elements inside `<div class=\"list-marker\">`.\n * Return `null` to hide the marker.\n */\n getMarkers?: (node: ProsemirrorNode) => DOMOutputSpec[] | null\n\n /**\n * An optional function to get the attributes added to HTML element.\n */\n getAttributes?: (node: ProsemirrorNode) => Record<string, string | undefined>\n}\n\n/**\n * Renders a list node to DOM output spec.\n *\n * @public @group Schema\n */\nexport function listToDOM(options: ListToDOMOptions): DOMOutputSpec {\n const {\n node,\n nativeList = false,\n getMarkers = defaultMarkerGetter,\n getAttributes = defaultAttributesGetter,\n } = options\n const attrs = node.attrs as ListAttributes\n const markerHidden = node.firstChild?.type === node.type\n const markers = markerHidden ? null : getMarkers(node)\n const domAttrs = getAttributes(node)\n const contentContainer: DOMOutputSpec = ['div', { class: 'list-content' }, 0]\n const markerContainer: DOMOutputSpec | null = markers && [\n 'div',\n {\n class: 'list-marker list-marker-click-target',\n // Set `contenteditable` to `false` so that the cursor won't be\n // moved into the mark container when clicking on it.\n contenteditable: 'false',\n },\n ...markers,\n ]\n\n if (nativeList) {\n const listTag = attrs.kind === 'ordered' ? 'ol' : 'ul'\n if (markerContainer) {\n return [listTag, ['li', domAttrs, markerContainer, contentContainer]]\n } else {\n return [listTag, ['li', domAttrs, 0]]\n }\n } else {\n if (markerContainer) {\n return ['div', domAttrs, markerContainer, contentContainer]\n } else {\n return ['div', domAttrs, contentContainer]\n }\n }\n}\n\n/** @internal */\nexport function defaultMarkerGetter(\n node: ProsemirrorNode,\n): DOMOutputSpec[] | null {\n const attrs = node.attrs as ListAttributes\n switch (attrs.kind) {\n case 'task':\n // Use a `label` element here so that the area around the checkbox is also checkable.\n return [\n [\n 'label',\n [\n 'input',\n { type: 'checkbox', checked: attrs.checked ? '' : undefined },\n ],\n ],\n ]\n case 'toggle':\n return []\n default:\n return []\n }\n}\n\n/** @internal */\nexport function defaultAttributesGetter(node: ProsemirrorNode) {\n const attrs = node.attrs as ListAttributes\n const markerHidden = node.firstChild?.type === node.type\n const markerType = markerHidden ? undefined : attrs.kind || 'bullet'\n const domAttrs = {\n class: 'prosemirror-flat-list',\n 'data-list-kind': markerType,\n 'data-list-order': attrs.order != null ? String(attrs.order) : undefined,\n 'data-list-checked': attrs.checked ? '' : undefined,\n 'data-list-collapsed': attrs.collapsed ? '' : undefined,\n 'data-list-collapsable': node.childCount >= 2 ? '' : undefined,\n style:\n attrs.order != null\n ? `--prosemirror-flat-list-order: ${attrs.order};`\n : undefined,\n }\n\n return domAttrs\n}\n", "import type { DOMOutputSpec, NodeSpec } from 'prosemirror-model'\n\nimport { createParseDomRules } from './parse-dom'\nimport { listToDOM } from './to-dom'\n\n/**\n * The default group name for list nodes. This is used to find the list node\n * type from the schema.\n *\n * @internal Schema\n */\nexport const flatListGroup = 'flatList'\n\n/**\n * Return the spec for list node.\n *\n * @public @group Schema\n */\nexport function createListSpec(): NodeSpec {\n return {\n content: 'block+',\n group: `${flatListGroup} block`,\n definingForContent: true,\n definingAsContext: false,\n attrs: {\n kind: {\n default: 'bullet',\n },\n order: {\n default: null,\n },\n checked: {\n default: false,\n },\n collapsed: {\n default: false,\n },\n },\n toDOM: (node): DOMOutputSpec => {\n return listToDOM({ node })\n },\n\n parseDOM: createParseDomRules(),\n }\n}\n", "import type { Schema } from 'prosemirror-model'\n\nimport { flatListGroup } from '../schema/node-spec'\n\nconst key = 'PROSEMIRROR_FLAT_LIST_TYPE_NAME'\n\n/** @internal */\nexport function getListTypeName(schema: Schema): string {\n let name: string = schema.cached[key] as string\n\n if (!name) {\n for (const type of Object.values(schema.nodes)) {\n if ((type.spec.group || '').split(' ').includes(flatListGroup)) {\n name = type.name\n break\n }\n }\n\n if (!name) {\n throw new TypeError(\n '[prosemirror-flat-list] Unable to find a flat list type in the schema',\n )\n }\n\n schema.cached[key] = name\n return name\n }\n\n return name\n}\n", "import type { NodeType, Schema } from 'prosemirror-model'\n\nimport { getListTypeName } from './get-list-type-name'\n\n/** @internal */\nexport function getListType(schema: Schema): NodeType {\n return schema.nodes[getListTypeName(schema)]\n}\n", "import type { NodeType } from 'prosemirror-model'\n\nimport { getListTypeName } from './get-list-type-name'\n\n/** @public */\nexport function isListType(type: NodeType): boolean {\n return getListTypeName(type.schema) === type.name\n}\n", "import type { Node as ProsemirrorNode } from 'prosemirror-model'\n\nimport { isListType } from './is-list-type'\n\n/** @public */\nexport function isListNode(node: ProsemirrorNode | null | undefined): boolean {\n if (!node) return false\n return isListType(node.type)\n}\n", "import type { ApplySchemaAttributes, InputRule, NodeExtensionSpec, NodeSpecOverride, NodeViewMethod, ProsemirrorAttributes } from '@rme-sdk/core'\nimport { extension, ExtensionTag, NodeExtension, nodeInputRule, omitExtraAttributes } from '@rme-sdk/core'\nimport { getInlineMathInputRule } from '../../inline-input-regex'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport { MathInlineView } from './math-inline-nodeview'\n\nexport interface MathInlineAttributes {\n tex: string\n}\n\nexport type MathInlineNodeAttrs = ProsemirrorAttributes<MathInlineAttributes>\n\n@extension({\n defaultOptions: {},\n})\nexport class MathInlineExtension extends NodeExtension {\n static disableExtraAttributes = true\n get name() {\n return 'math_inline' as const\n }\n\n createTags() {\n return [ExtensionTag.InlineNode]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n inline: true,\n atom: true,\n selectable: true,\n // disallow marks on the inline atom similar to html-inline-node\n marks: '',\n ...override,\n attrs: {\n ...extra.defaults(),\n tex: { default: '' },\n fromInput: { default: false },\n },\n parseDOM: [\n {\n tag: 'span[data-type=\"math-inline\"]',\n getAttrs: (dom) => {\n const el = dom as HTMLElement\n return { ...extra.parse(dom), tex: el.getAttribute('data-tex') ?? '' }\n },\n },\n ...(override.parseDOM ?? []),\n ],\n toDOM: (node) => {\n const attrs = omitExtraAttributes(node.attrs, extra)\n return ['span', { ...extra.dom(node), 'data-type': 'math-inline', 'data-tex': attrs.tex }]\n },\n }\n }\n\n createInputRules(): InputRule[] {\n return getInlineMathInputRule(this.type).map(nodeInputRule)\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.inline,\n token: 'math_inline',\n node: this.name,\n getAttrs: (tok: any) => {\n return { tex: tok.attrs?.tex || '' }\n },\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n const tex = (node.attrs as any).tex as string\n state.text(`$${tex}$`, false)\n }\n\n createNodeViews(): NodeViewMethod | Record<string, NodeViewMethod> {\n return (node, view, getPos) => new MathInlineView(node, view, getPos)\n }\n}\n\n\n", "// prosemirror imports\nimport { history, redo, undo } from '@rme-sdk/pm/history'\nimport { keymap } from '@rme-sdk/pm/keymap'\nimport { Node as ProseNode } from '@rme-sdk/pm/model'\nimport { Command, EditorState, Plugin, TextSelection, Transaction } from '@rme-sdk/pm/state'\nimport { Decoration, EditorView, NodeView } from '@rme-sdk/pm/view'\nimport katex from 'katex'\n\n/**\n * Create a ProseMirror command to collapse the inner editor selection back to the outer view.\n */\nfunction collapseCmd(\n outerView: EditorView,\n dir: 1 | -1,\n requireOnBorder: boolean,\n requireEmptySelection: boolean = true,\n): Command {\n return (innerState: EditorState, dispatch) => {\n const outerState = outerView.state\n const { to: outerTo, from: outerFrom } = outerState.selection\n const { to: innerTo, from: innerFrom } = innerState.selection\n\n if (requireEmptySelection && innerTo !== innerFrom) return false\n\n const currentPos = dir > 0 ? innerTo : innerFrom\n if (requireOnBorder) {\n const nodeSize = innerState.doc.nodeSize - 2\n if (dir > 0 && currentPos < nodeSize) return false\n if (dir < 0 && currentPos > 0) return false\n }\n\n if (dispatch) {\n const targetPos = dir > 0 ? outerTo : outerFrom\n outerView.dispatch(\n outerState.tr.setSelection(TextSelection.create(outerState.doc, targetPos)),\n )\n outerView.focus()\n }\n return true\n }\n}\n\nexport class MathInlineView implements NodeView {\n private _node: ProseNode\n private _outerView: EditorView\n private _getPos: () => number | undefined\n\n dom: HTMLElement\n private _renderElt: HTMLElement | undefined\n private _srcElt: HTMLElement | undefined\n private _innerView: EditorView | undefined\n private _isEditing: boolean\n\n constructor(node: ProseNode, view: EditorView, getPos: () => number | undefined) {\n this._node = node\n this._outerView = view\n this._getPos = getPos\n this._isEditing = false\n\n this.dom = document.createElement('span')\n this.dom.classList.add('inline-input')\n\n this._renderElt = document.createElement('span')\n this._renderElt.classList.add('inline-input-render')\n this.dom.appendChild(this._renderElt)\n\n this._srcElt = document.createElement('span')\n this._srcElt.spellcheck = false\n this._srcElt.style.display = 'none'\n this.dom.appendChild(this._srcElt)\n\n this.dom.addEventListener('click', () => this.ensureFocus())\n\n if ((node.attrs as any).fromInput) {\n setTimeout(() => this.openEditor())\n } else {\n this.renderTex()\n }\n }\n\n destroy() {\n this.closeEditor(false)\n if (this._renderElt) {\n this._renderElt.remove()\n delete this._renderElt\n }\n if (this._srcElt) {\n this._srcElt.remove()\n delete this._srcElt\n }\n this.dom.remove()\n }\n\n ensureFocus() {\n if (this._innerView && this._outerView.hasFocus()) {\n this._innerView.focus()\n }\n }\n\n update(node: ProseNode, _decorations: readonly Decoration[]) {\n if (!node.sameMarkup(this._node)) return false\n this._node = node\n if (!this._isEditing) this.renderTex()\n return true\n }\n\n selectNode() {\n if (!this._outerView.editable) return\n if (!this._isEditing) this.openEditor()\n }\n\n deselectNode() {\n if (this._isEditing) this.closeEditor()\n }\n\n stopEvent(event: Event): boolean {\n return (\n this._innerView !== undefined &&\n event.target !== undefined &&\n this._innerView.dom.contains(event.target as Node)\n )\n }\n\n ignoreMutation() {\n return true\n }\n\n private renderTex(preview = false) {\n if (!this._renderElt) return\n const raw = this._innerView?.state.doc.textContent ?? (this._node.attrs as any).tex ?? ''\n const tex: string = raw.replace(/\\u200b/g, '').trim()\n\n try {\n while (this._renderElt.firstChild) {\n this._renderElt.firstChild.remove()\n }\n\n const container = document.createElement('span')\n container.setAttribute('data-type', 'math-inline')\n\n katex.render(tex || '', container, {\n throwOnError: false,\n displayMode: false,\n output: 'mathml',\n })\n\n let newRenderEl: HTMLElement = container\n if (container.childElementCount === 1 && container.firstElementChild) {\n newRenderEl = container.firstElementChild as HTMLElement\n }\n\n this._renderElt.replaceWith(newRenderEl)\n this._renderElt = newRenderEl\n\n this.dom.appendChild(this._renderElt)\n\n if (preview) {\n this._renderElt.classList.add('inline-input-preview')\n } else {\n this._renderElt.classList.add('inline-input-render')\n this._renderElt.classList.remove('inline-input-preview')\n }\n } catch (err) {\n console.error(err)\n this._renderElt.classList.add('parse-error')\n this.dom.setAttribute('title', String(err))\n }\n }\n\n private dispatchInner(tr: Transaction) {\n if (!this._innerView) return\n const { state } = this._innerView.state.applyTransaction(tr)\n this._innerView.updateState(state)\n this.renderTex(true)\n }\n\n private openEditor = () => {\n if (this._innerView) return\n\n const currentTex: string = ((this._node.attrs as any).tex ?? '') as string\n this._innerView = new EditorView(this._srcElt!, {\n state: EditorState.create({\n doc: this._outerView.state.schema.node(\n 'paragraph',\n null,\n currentTex\n ? [this._outerView.state.schema.text(currentTex)]\n : [this._outerView.state.schema.text('\\u200b')],\n ),\n plugins: [\n history(),\n keymap({\n ArrowLeft: collapseCmd(this._outerView, -1, true),\n ArrowRight: collapseCmd(this._outerView, +1, true),\n ArrowUp: collapseCmd(this._outerView, -1, true),\n ArrowDown: collapseCmd(this._outerView, +1, true),\n 'Mod-z': (state, dispatch, view) => undo(state, dispatch, view),\n 'Shift-Mod-z': (state, dispatch, view) => redo(state, dispatch, view),\n Backspace: (state) => {\n const { from, to } = state.selection\n if (from === 0 && to === state.doc.content.size) {\n // If the inner editor is empty, delete the whole math block node\n const pos = this._getPos()\n if (pos !== undefined) {\n const tr = this._outerView.state.tr.delete(pos, pos + this._node.nodeSize)\n this._outerView.dispatch(tr)\n this._outerView.focus()\n return true\n }\n }\n return false\n },\n }),\n new Plugin({\n props: {\n handleDOMEvents: {\n blur: () => {\n const pos = this._getPos()\n if (pos !== undefined) {\n const text = (this._innerView?.state.doc.textContent || '').replace(\n /\\u200b/g,\n '',\n )\n const tr = this._outerView.state.tr\n tr.setNodeAttribute(pos, 'fromInput', false)\n tr.setNodeAttribute(pos, 'tex', text)\n this._outerView.dispatch(tr)\n }\n this.closeEditor()\n return true\n },\n },\n },\n }),\n ],\n }),\n dispatchTransaction: this.dispatchInner.bind(this),\n })\n\n this._innerView.dom.classList.add('inline-input-src')\n this._innerView.dom.classList.remove('ProseMirror')\n this._srcElt!.style.display = 'inline'\n\n const innerState = this._innerView.state\n this._innerView.focus()\n const innerPos = innerState.doc.textContent.length || 0\n this._innerView.dispatch(\n innerState.tr.setSelection(TextSelection.create(innerState.doc, innerPos)),\n )\n\n this._renderElt?.classList.add('inline-input-preview')\n this._isEditing = true\n }\n\n private closeEditor = (render: boolean = true) => {\n if (this._srcElt) {\n this._srcElt.style.display = 'none'\n }\n if (this._innerView) {\n this._innerView.destroy()\n this._innerView = undefined\n }\n if (render) {\n this.renderTex()\n }\n this._isEditing = false\n }\n}\n", "import { Extension } from '@codemirror/state'\nimport type {\n ApplySchemaAttributes,\n CommandFunction,\n InputRule,\n NodeExtensionSpec,\n NodeSpecOverride,\n NodeViewMethod\n} from '@rme-sdk/core'\nimport { convertCommand, extension, ExtensionTag, NodeExtension, nodeInputRule } from '@rme-sdk/core'\nimport { setBlockType } from '@rme-sdk/pm/commands'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport { CustomCopyFunction } from '../CodeMirror/codemirror-types'\nimport { MathBlockView } from './math-block-nodeview'\n\nexport interface MathBlockExtensionOptions {\n customCopyFunction?: CustomCopyFunction\n codemirrorExtensions?: Extension[]\n}\n@extension({\n defaultOptions: {},\n})\nexport class MathBlockExtension extends NodeExtension<MathBlockExtensionOptions> {\n get name() {\n return 'math_block' as const\n }\n\n createTags() {\n return [ExtensionTag.Block]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n group: 'block',\n content: 'text*',\n defining: true,\n code: true,\n marks: '',\n ...override,\n attrs: {\n ...extra.defaults(),\n tex: { default: '' },\n fromInput: { default: false },\n },\n parseDOM: [\n {\n tag: 'div[data-type=\"math-block\"]',\n getAttrs: (dom) => extra.parse(dom),\n },\n ...(override.parseDOM ?? []),\n ],\n toDOM: () => ['div', { 'data-type': 'math-block' }, 0],\n isolating: true,\n }\n }\n\n createNodeViews(): NodeViewMethod | Record<string, NodeViewMethod> {\n return (node, view, getPos) => new MathBlockView(node, view, getPos as () => number, this.options)\n }\n\n createMathBlock =\n (attributes: { tex?: string; fromInput?: boolean } = {}): CommandFunction =>\n convertCommand(setBlockType(this.type, { tex: '', fromInput: true, ...attributes }))\n\n createInputRules(): InputRule[] {\n return [\n nodeInputRule({\n regexp: /^\\$\\$$/,\n type: this.type,\n getAttributes: (match) => {\n return { tex: match[1] ?? '', fromInput: true }\n },\n }),\n ]\n }\n\n createCommands() {\n return {\n createMathBlock: this.createMathBlock,\n }\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'math_block',\n node: this.name,\n hasOpenClose: false,\n getAttrs: (tok: any) => {\n return { tex: tok.attrs?.tex || '' }\n },\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n state.write('$$\\n')\n const tex = node.textContent || node.attrs.tex || ''\n state.text(tex, false)\n\n if (!tex.endsWith('\\n')) {\n state.text('\\n')\n }\n\n state.write('$$')\n state.closeBlock(node)\n state.ensureNewLine()\n }\n}\n", "import { MfCodemirrorView } from '@/editor/codemirror'\nimport { Extension } from '@codemirror/state'\nimport type { EditorView as CodeMirrorEditorView } from '@codemirror/view'\nimport { Node as ProseNode } from '@rme-sdk/pm/model'\nimport { Decoration, EditorView, NodeView } from '@rme-sdk/pm/view'\nimport { latex } from 'codemirror-lang-latex'\nimport katex from 'katex'\nimport { addLabelToDom } from '../../utils/dom'\nimport { MathBlockExtensionOptions } from './math-block-extension'\n\nexport class MathBlockView implements NodeView {\n private _node: ProseNode\n private _outerView: EditorView\n private _getPos: () => number\n\n dom: HTMLElement\n private _renderElt: HTMLElement | undefined\n private _srcElt: HTMLElement | undefined\n private _innerView: CodeMirrorEditorView | undefined\n mfCodemirrorView?: MfCodemirrorView\n options?: MathBlockExtensionOptions\n\n constructor(\n node: ProseNode,\n view: EditorView,\n getPos: () => number,\n options: MathBlockExtensionOptions,\n ) {\n this._node = node\n this._outerView = view\n this._getPos = getPos\n this.options = options\n\n this.dom = document.createElement('div')\n this.dom.classList.add('math-block-nodeview')\n\n this._renderElt = document.createElement('div')\n this._renderElt.classList.add('math-block-render')\n this.dom.appendChild(this._renderElt)\n\n this._srcElt = document.createElement('div')\n this._srcElt.classList.add('html-src', 'node-hide')\n\n const labelDom = addLabelToDom(this.dom, {\n labelName: 'LaTex',\n })\n this.dom.appendChild(this._srcElt)\n\n labelDom.addEventListener('click', () => this.ensureFocus())\n\n if ((node.attrs as any).fromInput) {\n this.openEditor()\n } else {\n this.renderTex()\n }\n }\n\n destroy() {\n // close the inner editor without rendering\n this.closeEditor(false)\n // clean up dom elements\n if (this._renderElt) {\n this._renderElt.remove()\n delete this._renderElt\n }\n if (this._srcElt) {\n this._srcElt.remove()\n this._srcElt = undefined\n }\n\n this.dom.remove()\n }\n\n ensureFocus() {\n if (this._outerView.hasFocus()) {\n if (this._innerView) {\n this._innerView.focus()\n } else {\n this.openEditor()\n }\n }\n }\n\n update(node: ProseNode, _decorations: readonly Decoration[]) {\n this._node = node\n return !!this.mfCodemirrorView?.update(node)\n }\n\n setSelection(anchor: number, head: number): void {\n if (!this._innerView) {\n this.openEditor()\n this.mfCodemirrorView!.setSelection(anchor, head)\n } else {\n this.mfCodemirrorView?.setSelection(anchor, head)\n }\n }\n\n stopEvent(): boolean {\n return true\n }\n\n ignoreMutation() {\n return true\n }\n\n private renderTex(preview = false) {\n if (!this._renderElt) return\n const content = this.mfCodemirrorView?.content || this._node.textContent\n\n const tex: string = content.trim()\n\n try {\n while (this._renderElt.firstChild) {\n this._renderElt.firstChild.remove()\n }\n\n const container = document.createElement('div')\n container.setAttribute('data-type', 'math-block')\n\n katex.render(tex || '', container, {\n throwOnError: false,\n displayMode: false,\n output: 'mathml',\n })\n\n let newRenderEl: HTMLElement = container\n if (container.childElementCount === 1 && container.firstElementChild) {\n newRenderEl = container.firstElementChild as HTMLElement\n }\n\n this._renderElt.replaceWith(newRenderEl)\n this._renderElt = newRenderEl\n\n this.dom.appendChild(this._renderElt)\n\n if (preview) {\n this._renderElt.classList.add('math-block-preview')\n } else {\n this._renderElt.classList.add('math-block-render')\n this._renderElt.classList.remove('math-block-preview')\n }\n } catch (err) {\n console.error(err)\n this._renderElt.classList.add('parse-error')\n this.dom.setAttribute('title', String(err))\n }\n }\n\n private openEditor = () => {\n if (this._innerView) return\n\n const currentTex: string = ((this._node.attrs as any).tex ?? '') as string\n\n const codemirrorExtensions: Extension[] = [latex()]\n if (this.options?.codemirrorExtensions) {\n codemirrorExtensions.push(...this.options.codemirrorExtensions)\n }\n this.mfCodemirrorView = new MfCodemirrorView({\n view: this._outerView,\n node: this._node,\n getPos: this._getPos,\n languageName: 'LaTeX',\n extensions: codemirrorExtensions,\n options: {\n useProsemirrorHistoryKey: true,\n codemirrorEditorViewConfig: {\n parent: this._srcElt!,\n },\n copyButton: {\n enabled: true,\n customCopyFunction: this.options?.customCopyFunction,\n },\n },\n })\n\n this._srcElt!.classList.remove('node-hide')\n this._innerView = this.mfCodemirrorView.cm\n this._renderElt?.classList.add('node-hide')\n\n console.log('currentTex', currentTex, this._node.textContent)\n const prevCursorPos: number = this._node.textContent.length || 0\n\n this.setSelection(prevCursorPos, prevCursorPos)\n\n this._innerView.focus()\n\n this._innerView.contentDOM.addEventListener('blur', () => {\n this.closeEditor(true)\n })\n\n this.mfCodemirrorView.forwardSelection()\n }\n\n private closeEditor = (render: boolean = true) => {\n if (this._innerView) {\n this._innerView.destroy()\n this._innerView = undefined\n }\n if (this.mfCodemirrorView) {\n this.mfCodemirrorView.destroy()\n this.mfCodemirrorView = undefined\n }\n\n if (render) {\n this.renderTex()\n }\n }\n}\n", "import { Extension } from '@codemirror/state'\nimport type {\n ApplySchemaAttributes,\n CommandFunction,\n NodeExtensionSpec,\n NodeSpecOverride,\n NodeViewMethod\n} from '@rme-sdk/core'\nimport { convertCommand, extension, isElementDomNode, NodeExtension, nodeInputRule } from '@rme-sdk/core'\nimport type { ProsemirrorNode } from '@rme-sdk/pm'\nimport { setBlockType } from '@rme-sdk/pm/commands'\nimport type { InputRule } from '@rme-sdk/pm/inputrules'\nimport { TextSelection } from '@rme-sdk/pm/state'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\nimport { CustomCopyFunction } from '../CodeMirror/codemirror-types'\nimport { MermaidNodeView } from './mermaid-view'\n\nexport interface MermaidExtensionOptions {\n customCopyFunction?: CustomCopyFunction\n codemirrorExtensions?: Extension[]\n}\n@extension<MermaidExtensionOptions>({\n defaultOptions: {\n customCopyFunction: undefined,\n },\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class MermaidBlockExtension extends NodeExtension<MermaidExtensionOptions> {\n get name() {\n return 'mermaid_node' as const\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n group: 'block',\n content: 'text*',\n defining: true,\n ...override,\n code: true,\n marks: '',\n attrs: {\n ...extra.defaults(),\n },\n parseDOM: [\n {\n tag: 'pre',\n getAttrs: (node) => (isElementDomNode(node) ? extra.parse(node) : false),\n },\n ...(override.parseDOM ?? []),\n ],\n toDOM() {\n return ['pre', { 'data-type': 'mermaid' }, 0]\n },\n isolating: true,\n }\n }\n\n createNodeViews(): NodeViewMethod {\n return (node: ProsemirrorNode, view, getPos) => {\n return new MermaidNodeView(node, view, getPos as () => number, this.options)\n }\n }\n\n createMermaidBlock = (): CommandFunction => convertCommand(setBlockType(this.type))\n\n createInputRules(): InputRule[] {\n const rules: InputRule[] = [\n nodeInputRule({\n regexp: /^```mermaid$/,\n type: this.type,\n beforeDispatch: ({ tr, start, match }) => {\n const $pos = tr.doc.resolve(start)\n tr.setSelection(TextSelection.near($pos))\n },\n }),\n ]\n\n return rules\n }\n\n createCommands() {\n return {\n createMermaidBlock: this.createMermaidBlock,\n }\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: 'mermaid_node',\n node: this.name,\n hasOpenClose: false,\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n state.write('```mermaid\\n')\n state.text(node.textContent, false)\n state.text('\\n')\n state.write('```')\n state.closeBlock(node)\n state.ensureNewLine()\n }\n}\n", "import { Compartment } from '@codemirror/state'\nimport type { EditorView as CodeMirrorEditorView } from '@codemirror/view'\nimport type { ProsemirrorNode } from '@rme-sdk/core'\nimport { type EditorSchema } from '@rme-sdk/core'\nimport type { EditorView } from '@rme-sdk/pm/view'\nimport mermaid from 'mermaid'\nimport type { Node as ProseNode } from 'prosemirror-model'\nimport type { NodeView } from 'prosemirror-view'\nimport { MfCodemirrorView } from '../../codemirror/codemirror'\nimport { addLabelToDom } from '../../utils/dom'\nimport { eventBus } from '../../utils/eventbus'\nimport { minimalSetup } from '../CodeMirror/setup'\nimport { MermaidExtensionOptions } from './mermaid-extension'\n\n/**\n * \u786E\u4FDD\u6BCF\u4E2A\u89C6\u56FE\u90FD\u6709\u4E00\u4E2A\u552F\u4E00\u7684ID\n */\nexport const renderCount = { count: 0 }\n\nexport class MermaidNodeView implements NodeView {\n // nodeview params\n private _node: ProseNode\n private _outerView: EditorView\n private _getPos: () => number\n\n // nodeview dom\n dom: HTMLElement\n private _htmlRenderElt: HTMLElement | undefined\n private _htmlSrcElt: HTMLElement | null = null\n private _innerView: CodeMirrorEditorView | undefined\n private readonly schema: EditorSchema\n private readonly languageConf: Compartment\n mfCodemirrorView?: MfCodemirrorView\n destroying = false\n\n renderViewId: string | null = null\n options?: MermaidExtensionOptions\n\n constructor(node: ProseNode, view: EditorView, getPos: () => number, options: MermaidExtensionOptions) {\n // store arguments\n this._node = node\n this._outerView = view\n this._getPos = getPos\n this.schema = node.type.schema\n this.options = options\n\n // create dom representation of nodeview\n this.dom = document.createElement('div')\n this.dom.classList.add('mermaid-node')\n\n this._htmlRenderElt = document.createElement('p')\n this._htmlRenderElt.textContent = ''\n this._htmlRenderElt.classList.add('html-node-render')\n\n const labelDom = addLabelToDom(this.dom, {\n labelName: 'Mermaid',\n })\n labelDom.addEventListener('click', () => this.ensureFocus())\n\n this.dom.appendChild(this._htmlRenderElt)\n\n this.dom.appendChild(this._htmlRenderElt)\n\n this._htmlSrcElt = document.createElement('span')\n this._htmlSrcElt.classList.add('mermaid-src', 'node-hide')\n\n this.languageConf = new Compartment()\n\n this.dom.appendChild(this._htmlSrcElt)\n\n this.renderHtml()\n eventBus.on('change-theme', this.changeTheme)\n }\n\n ensureFocus() {\n if (this._outerView.hasFocus()) {\n if (this._innerView) {\n this._innerView.focus()\n } else {\n this.openEditor()\n }\n }\n }\n\n ignoreMutation = () => true\n\n update(node: ProsemirrorNode): boolean {\n this._node = node\n return !!this.mfCodemirrorView?.update(node)\n }\n\n // == Events ===================================== //\n stopEvent(): boolean {\n return true\n }\n\n // == Rendering ===================================== //\n changeTheme = () => {\n this.renderHtml()\n }\n\n renderHtml() {\n if (!this._htmlRenderElt) {\n return\n }\n\n // get tex string to render\n const content = this.mfCodemirrorView?.content || this._node.textContent\n\n try {\n this._htmlRenderElt.innerHTML = ''\n this._htmlRenderElt.classList.remove('node-hide')\n this._htmlRenderElt.classList.add('node-show')\n renderCount.count++\n\n const id = `mermaid-${renderCount.count}`\n mermaid\n .render(id, content)\n .then(({ svg, bindFunctions }) => {\n if (!this._htmlRenderElt) {\n return\n }\n this._htmlRenderElt.innerHTML = svg\n bindFunctions?.(this._htmlRenderElt)\n })\n .catch((err) => {\n document.getElementById('d' + id)?.remove()\n console.error('\u6E32\u67D3\u5931\u8D25:', id, err)\n })\n } catch (err) {}\n }\n\n // == Inner Editor ================================== /\n setSelection(anchor: number, head: number): void {\n if (!this._innerView) {\n this.openEditor()\n this.mfCodemirrorView!.setSelection(anchor, head)\n } else {\n this.mfCodemirrorView?.setSelection(anchor, head)\n }\n }\n\n openEditor() {\n if (this._innerView) {\n throw Error('inner view should not exist!')\n }\n\n this.mfCodemirrorView = new MfCodemirrorView({\n view: this._outerView,\n node: this._node,\n getPos: this._getPos,\n languageName: 'mermaid',\n extensions: this.options?.codemirrorExtensions || [minimalSetup],\n options: {\n useProsemirrorHistoryKey: true,\n codemirrorEditorViewConfig: {\n parent: this._htmlSrcElt!,\n },\n copyButton: {\n enabled: true,\n customCopyFunction: this.options?.customCopyFunction\n }\n },\n })\n\n this._htmlSrcElt!.classList.remove('node-hide')\n this._innerView = this.mfCodemirrorView.cm\n this._htmlRenderElt?.classList.add('node-hide')\n\n const prevCursorPos: number = this._node.textContent.length || 0\n\n this.setSelection(prevCursorPos, prevCursorPos)\n\n this._innerView.focus()\n\n this._innerView.contentDOM.addEventListener('blur', () => {\n if (this.destroying) return\n this.closeEditor(true)\n })\n\n this.mfCodemirrorView.forwardSelection()\n }\n\n destroy() {\n this.destroying = true\n // close the inner editor without rendering\n this.closeEditor(false)\n // clean up dom elements\n if (this._htmlRenderElt) {\n this._htmlRenderElt.remove()\n delete this._htmlRenderElt\n }\n if (this._htmlSrcElt) {\n this._htmlSrcElt.remove()\n this._htmlSrcElt = null // fix for the error\n }\n\n this.dom.remove()\n\n eventBus.detach('change-theme', this.changeTheme)\n }\n\n closeEditor(render: boolean = true) {\n if (this._innerView) {\n this._innerView.destroy()\n this._innerView = undefined\n }\n if (this.mfCodemirrorView) {\n this.mfCodemirrorView.destroy()\n this.mfCodemirrorView = undefined\n }\n\n if (render) {\n this.renderHtml()\n }\n }\n}\n", "import EventBus from 'js-event-bus'\n\nexport const eventBus = new EventBus()\n", "import { isHTMLElement } from '@ocavue/utils'\nimport { CreateExtensionPlugin, EditorView, PlainExtension, ResolvedPos } from '@rme-sdk/core'\nimport { NodeSelection, PluginKey, TextSelection } from '@rme-sdk/pm/state'\nimport { buildGetTarget, GetTarget } from './drop-target'\nimport { findBlockByCoords, findFirstLineRect } from './node-target'\nimport type { NodeIndicatorState, ViewDragging } from './types'\n\nexport class NodeIndicatorExtension extends PlainExtension {\n get name() {\n return 'nodeIndicator' as const\n }\n\n createPlugin(): CreateExtensionPlugin<NodeIndicatorState> {\n let getTarget: GetTarget | undefined\n\n const initialState: NodeIndicatorState = {\n node: null,\n pos: null,\n rect: null,\n }\n return {\n initialState,\n state: {\n init: () => initialState,\n apply: (tr, value) => {\n const meta = tr.getMeta(this.pluginKey)\n if (meta) {\n return { ...value, ...meta }\n }\n\n if (tr.docChanged) {\n return { ...value }\n }\n return value\n },\n },\n view: (view) => {\n getTarget = buildGetTarget(view)\n return {}\n },\n props: {\n handleDrop: (view, event, slice, move): boolean => {\n if (!getTarget) {\n return false\n }\n\n const target = getTarget([event.clientX, event.clientY], event)\n\n if (!target) {\n return false\n }\n\n event.preventDefault()\n let insertPos = target[0]\n\n let tr = view.state.tr\n\n if (move) {\n let { node } = (view.dragging as ViewDragging | null) || {}\n if (node) node.replace(tr)\n else tr.deleteSelection()\n }\n\n let pos = tr.mapping.map(insertPos)\n let isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1\n let beforeInsert = tr.doc\n if (isNode) tr.replaceRangeWith(pos, pos, slice.content.firstChild!)\n else tr.replaceRange(pos, pos, slice)\n if (tr.doc.eq(beforeInsert)) {\n return false\n }\n\n let $pos = tr.doc.resolve(pos)\n if (\n isNode &&\n NodeSelection.isSelectable(slice.content.firstChild!) &&\n $pos.nodeAfter &&\n $pos.nodeAfter.sameMarkup(slice.content.firstChild!)\n ) {\n tr.setSelection(new NodeSelection($pos))\n } else {\n let end = tr.mapping.map(insertPos)\n tr.mapping.maps[tr.mapping.maps.length - 1].forEach(\n (_from, _to, _newFrom, newTo) => (end = newTo),\n )\n tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)))\n }\n view.focus()\n view.dispatch(tr.setMeta('uiEvent', 'drop'))\n return true\n },\n handleDOMEvents: {\n pointerout: (view, event) => {\n const relatedTarget = (event as PointerEvent).relatedTarget as Node | null\n if (relatedTarget && view.dom.contains(relatedTarget)) {\n return false\n }\n if (relatedTarget && relatedTarget instanceof HTMLElement) {\n const blockHandler = relatedTarget.closest('.rme-block-handler')\n if (blockHandler) {\n return false\n }\n }\n const currentState = this.pluginKey.getState(view.state)\n if (currentState?.node !== null) {\n view.dispatch(view.state.tr.setMeta(this.pluginKey, { node: null, pos: null, rect: null }))\n }\n return false\n },\n pointermove: (view, event) => {\n if ((view as any).__nodeIndicatorThrottled) {\n return\n }\n ;(view as any).__nodeIndicatorThrottled = true\n requestAnimationFrame(() => {\n ;(view as any).__nodeIndicatorThrottled = false\n handlePointerMove(view, event, this.pluginKey)\n })\n },\n },\n },\n }\n }\n}\n\nfunction selectionBetween(\n view: EditorView,\n $anchor: ResolvedPos,\n $head: ResolvedPos,\n bias?: number,\n) {\n return (\n view.someProp('createSelectionBetween', (f) => f(view, $anchor, $head)) ||\n TextSelection.between($anchor, $head, bias)\n )\n}\n\nfunction handlePointerMove(view: EditorView, event: Event, pluginKey: PluginKey) {\n const currentState = pluginKey.getState(view.state)\n const { x, y } = event as PointerEvent\n\n const block = findBlockByCoords(view, x, y)\n\n if (!block) {\n if (currentState?.node !== null) {\n view.dispatch(view.state.tr.setMeta(pluginKey, { node: null, pos: null, rect: null }))\n }\n return\n }\n\n const { node, pos } = block\n const element = view.nodeDOM(pos)\n if (!element || !isHTMLElement(element)) {\n if (currentState?.node !== null) {\n view.dispatch(view.state.tr.setMeta(pluginKey, { node: null, pos: null, rect: null }))\n }\n return\n }\n\n let newNode = node\n let newPos = pos\n const $pos = view.state.doc.resolve(pos)\n\n if ($pos.depth > 0 && $pos.index($pos.depth) === 0) {\n const parentPos = $pos.before($pos.depth)\n const parentNode = $pos.parent\n newNode = parentNode\n newPos = parentPos\n }\n\n if (currentState?.pos === newPos && currentState?.node && newNode.type === currentState?.node.type) {\n return\n }\n\n const newElement = view.nodeDOM(newPos)\n if (!newElement || !isHTMLElement(newElement)) {\n return\n }\n\n let rect\n if ($pos.depth > 0 && $pos.index($pos.depth) === 0) {\n const parentElement = view.nodeDOM($pos.before($pos.depth))\n rect = findFirstLineRect(parentElement, newElement)\n } else {\n rect = findFirstLineRect(undefined, newElement)\n }\n\n view.dispatch(\n view.state.tr.setMeta(pluginKey, {\n node: newNode,\n pos: newPos,\n rect: rect || {},\n }),\n )\n}\n\nexport type { NodeIndicatorPluginOptions, NodeIndicatorState } from './types'\n\n", "import { isHTMLElement } from '@ocavue/utils'\nimport type { Node as ProseMirrorNode } from '@rme-sdk/pm/model'\nimport { NodeSelection } from '@rme-sdk/pm/state'\nimport type { EditorView } from '@rme-sdk/pm/view'\n\nimport type { DragEventHandler } from './types'\n\ntype Point = readonly [x: number, y: number]\n\ntype Line = readonly [x1: number, y1: number, x2: number, y2: number]\n\n/**\n * @internal\n */\ntype DropTarget = readonly [pos: number, line: Line]\n\nfunction getTargetsByView(view: EditorView): DropTarget[] {\n type StackItem = [pos: number, node: ProseMirrorNode]\n let stack: StackItem[] = [[-1, view.state.doc]]\n let targets: DropTarget[] = []\n\n while (stack.length > 0) {\n const [pos, node] = stack.pop()!\n if (pos >= 0) {\n let dom = view.nodeDOM(pos)\n if (dom && isHTMLElement(dom)) {\n let rect = dom.getBoundingClientRect()\n let { top, bottom, left: x1, right: x2 } = rect\n targets.push(\n [pos, [x1, top, x2, top]],\n [pos + node.nodeSize, [x1, bottom, x2, bottom]],\n )\n }\n }\n if (node.isBlock && !node.isTextblock) {\n let childPos = pos + 1\n for (let child of node.children) {\n stack.push([childPos, child])\n childPos += child.nodeSize\n }\n }\n }\n\n return targets\n}\n\n/**\n * @internal\n */\nexport type GetTarget = (point: Point, event: DragEvent) => DropTarget | undefined\n\n/**\n * @internal\n */\nexport function buildGetTarget(\n view: EditorView,\n onDrag?: DragEventHandler,\n): GetTarget {\n let prevTargets: DropTarget[] = []\n let prevDoc: ProseMirrorNode | undefined\n let prevRect: DOMRect | undefined\n\n const getTargets = (): DropTarget[] => {\n const rect = view.dom.getBoundingClientRect()\n const doc = view.state.doc\n\n if (\n prevTargets && prevDoc && prevRect\n && rect.width === prevRect.width\n && rect.height === prevRect.height\n && rect.x === prevRect.x\n && rect.y === prevRect.y\n && prevDoc.eq(doc)\n ) {\n return prevTargets\n }\n\n prevRect = rect\n prevDoc = doc\n prevTargets = getTargetsByView(view)\n return prevTargets\n }\n\n const getTargetImpl: GetTarget = (point, event) => {\n if (!view.editable || view.isDestroyed) {\n return\n }\n\n const compare = (p1: DropTarget, p2: DropTarget): number => {\n const [pos1, line1] = p1\n const [pos2, line2] = p2\n const p1Distance = pointLineDistance(point, line1)\n const p2Distance = pointLineDistance(point, line2)\n\n return (p1Distance - p2Distance) || (pos1 - pos2)\n }\n\n let targets = getTargets()\n targets.sort(compare)\n\n // Only consider the first few targets for performance reasons.\n targets = targets.slice(0, 8)\n\n // Find the closest valid target.\n const target = targets.find(target => onDrag?.({ view, pos: target[0], event }) !== false)\n\n // If the dragging node is already at the target position, we ignore this\n // target. Notice that we don't pick the second better target here.\n if (target && isDraggingToItself(view, target[0])) {\n return undefined\n }\n\n return target\n }\n\n let prevPoint: Point | undefined\n let prevTarget: DropTarget | undefined\n\n const getTargetCached: GetTarget = (point, event) => {\n if (prevPoint && pointEqual(prevPoint, point)) {\n return prevTarget\n }\n\n prevPoint = point\n prevTarget = getTargetImpl(point, event)\n return prevTarget\n }\n\n return getTargetCached\n}\n\nfunction pointEqual(a: Point, b: Point) {\n return a[0] === b[0] && a[1] === b[1]\n}\n\nfunction pointPointDistance(a: Point, b: Point) {\n // Manhattan distance\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1])\n}\n\nfunction pointLineDistance(point: Point, line: Line) {\n // Notice that we are actually not calculating the distance between the point\n // and the line. Instead, we are calculating the distance between the point\n // and the two endpoints of the line.\n return Math.min(\n pointPointDistance(point, [line[0], line[1]]),\n pointPointDistance(point, [line[2], line[3]]),\n )\n}\n\n/**\n * Whether the dragging node is being dragged to the same position. For example,\n * dragging a list node into a new position that is just below the list node, or\n * dragging a nested quoteblock into itself.\n */\nfunction isDraggingToItself(view: EditorView, pos: number) {\n const dragging = view.dragging\n if (!dragging) return\n\n const { move } = dragging\n if (!move) return\n\n const selection = view.state.selection\n if (!(selection instanceof NodeSelection)) return\n\n const { from, to } = selection\n return from <= pos && pos <= to\n}\n", "import type { VirtualElement } from '@floating-ui/dom'\nimport {\n isElement,\n isHTMLElement,\n isTextNode,\n} from '@ocavue/utils'\nimport type { Node as ProseMirrorNode } from '@rme-sdk/pm/model'\nimport type { EditorView } from '@rme-sdk/pm/view'\n\nimport { getClientRect } from '../../utils/get-client-rect'\nimport { Rect } from './types'\n\nexport interface HoverState {\n node: ProseMirrorNode\n pos: number\n}\n\nexport type ElementHoverHandler = (\n reference: VirtualElement | null,\n hoverState: HoverState | null,\n) => void\n\n\nexport function findBlockByCoords(view: EditorView, x: number, y: number): { node: ProseMirrorNode; pos: number } | undefined {\n const rect = getClientRect(view.dom)\n if (!isWithinRect(rect, x, y)) {\n return\n }\n\n let parent: ProseMirrorNode | undefined = view.state.doc\n let pos = -1\n\n while (parent) {\n if (parent.isBlock && (parent.isTextblock || parent.isAtom || parent.type.spec.isolating)) {\n return { node: parent, pos }\n }\n\n // Collect all children and their positions\n const children: ProseMirrorNode[] = []\n const positions: number[] = []\n parent.forEach((child, offset) => {\n children.push(child)\n positions.push(offset + pos + 1)\n })\n\n let lo = 0\n let hi = children.length - 1\n\n while (lo <= hi) {\n const i = hi - ((hi - lo) >> 1)\n const childDOM = view.nodeDOM(positions[i])\n const childRect = getNodeRect(childDOM)\n if (!childRect) {\n console.warn(`[rme] Unable to get rect at position: ${positions[i]}`)\n return\n }\n if (childRect.top > y) {\n hi = i - 1\n } else if (childRect.bottom < y) {\n lo = i + 1\n } else {\n lo = i\n break\n }\n }\n\n if (lo > hi) {\n return\n }\n\n parent = children[lo]\n pos = positions[lo]\n }\n}\n\nfunction getNodeRect(node: Node | null | undefined): Rect | undefined {\n if (node && isElement(node) && node.isConnected) {\n return getClientRect(node)\n }\n}\n\nfunction isWithinRect(rect: Rect, x: number, y: number) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom\n}\n\nexport function findFirstLineRect(outer?: Node | null, inner?: Node | null): Rect | undefined {\n if (outer && !outer.isConnected) {\n return\n }\n if (inner && !inner.isConnected) {\n return\n }\n\n if (outer && inner) {\n const outerRect = findOuterRect(outer)\n const innerRect = findFirstLineRectInNode(inner)\n if (outerRect && innerRect) {\n const { top, bottom } = innerRect\n const { left, right } = outerRect\n return { top, bottom, left, right }\n } else {\n return outerRect || innerRect\n }\n } else if (outer) {\n return findFirstLineRectInNode(outer)\n } else if (inner) {\n return findFirstLineRectInNode(inner)\n }\n}\n\nfunction findOuterRect(node: Node): Rect | undefined {\n if (!isElement(node)) {\n return\n }\n\n const rect = getClientRect(node)\n const style = node.ownerDocument.defaultView?.getComputedStyle(node)\n const marginLeft = style && Number.parseInt(style.marginLeft, 10) || 0\n const marginRight = style && Number.parseInt(style.marginRight, 10) || 0\n const left = rect.left - marginLeft\n const right = rect.right + marginRight\n\n return { top: rect.top, bottom: rect.bottom, left, right }\n}\n\nfunction findFirstLineRectInNode(node: Node): Rect | undefined {\n if (isElement(node)) {\n return findFirstLineRectInElement(node)\n } else if (isTextNode(node)) {\n return findFirstLineRectInTextNode(node)\n }\n}\n\nfunction findFirstLineRectInTextNode(node: Text): Rect | undefined {\n const ownerDocument = node.ownerDocument\n if (!ownerDocument) {\n return\n }\n const range = ownerDocument.createRange()\n range.setStart(node, 0)\n range.setEnd(node, 0)\n const rects = range.getClientRects()\n return rects[0]\n}\n\nfunction findFirstLineRectInElement(element: Element): Rect | undefined {\n if (element.nodeName === 'BR') {\n return element.getBoundingClientRect()\n }\n\n const rect = getClientRect(element)\n const style = element.ownerDocument.defaultView?.getComputedStyle(element)\n const marginLeft = style && Number.parseInt(style.marginLeft, 10) || 0\n const marginRight = style && Number.parseInt(style.marginRight, 10) || 0\n const left = rect.left - marginLeft\n const right = rect.right + marginRight\n\n const lineHeight = style && Number.parseInt(style.lineHeight, 10) || 24\n const paddingTop = style && Number.parseInt(style.paddingTop, 10) || 0\n const borderTop = style && Number.parseInt(style.borderTopWidth, 10) || 0\n const top = rect.top + paddingTop + borderTop\n const bottom = top + lineHeight\n\n return { top, bottom, left, right }\n}\n", "/**\n * Similar to `element.getBoundingClientRect`, but handles `display: contents` elements.\n */\nexport function getClientRect(element: Element): {\n top: number\n right: number\n bottom: number\n left: number\n} {\n const rect = element.getBoundingClientRect()\n if (rect.width === 0 && rect.height === 0 && rect.x === 0 && rect.y === 0) {\n // Suspiciously rect, probably an element with `display: contents`, in\n // which case `element.getClientRects()` will return an empty array.\n if (element.getClientRects().length === 0) {\n const children = Array.from(element.children)\n const rects = children.map(child => getClientRect(child))\n if (rects.length === 0) {\n return rect\n }\n if (rects.length === 1) {\n return rects[0]\n }\n let { top, bottom, left, right } = rects[0]\n for (let i = 1; i < rects.length; i++) {\n const r = rects[i]\n if (r.top < top) top = r.top\n if (r.bottom > bottom) bottom = r.bottom\n if (r.left < left) left = r.left\n if (r.right > right) right = r.right\n }\n return { top, bottom, left, right }\n }\n }\n return rect\n}\n", "import type { ApplySchemaAttributes, NodeExtensionSpec, NodeSpecOverride } from \"@rme-sdk/core\"\nimport { ParagraphExtension } from \"@rme-sdk/main/extensions\"\n\nimport type { NodeSerializerOptions } from \"../../transform\"\nimport { ParserRuleType } from \"../../transform\"\n\nexport class LineParagraphExtension extends ParagraphExtension {\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n const spec = super.createNodeSpec(extra, override)\n // @ts-expect-error: remirror needs to be fixed for this to work\n return { ...spec, whitespace: \"pre\" }\n }\n\n fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n token: \"paragraph\",\n node: this.name,\n hasOpenClose: true,\n },\n ] as const\n }\n\n toMarkdown({ state, node }: NodeSerializerOptions) {\n state.renderInline(node)\n state.closeBlock(node)\n }\n}\n", "import type {\n CreateExtensionPlugin,\n OnSetOptionsProps,\n ProsemirrorAttributes,\n} from '@rme-sdk/core'\nimport { extension, ManagerPhase, PlainExtension } from '@rme-sdk/core'\nimport type { EditorState } from '@rme-sdk/pm/state'\nimport { Decoration, DecorationSet } from '@rme-sdk/pm/view'\n\nexport interface PlaceholderOptions {\n /**\n * The placeholder text to use.\n */\n placeholder?: string\n\n /**\n * The class to decorate the empty top level node with. If you change this\n * then you will also need to apply your own styles.\n */\n emptyNodeClass?: string\n}\n\nexport interface PlaceholderPluginState extends Required<PlaceholderOptions> {\n empty: boolean\n}\n\n/**\n * The placeholder extension which adds a placeholder annotation to an empty\n * document.\n */\n@extension<PlaceholderOptions>({\n defaultOptions: {\n placeholder: '',\n },\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: []\n})\nexport class PlaceholderExtension extends PlainExtension<PlaceholderOptions> {\n get name() {\n return 'placeholder' as const\n }\n\n createAttributes(): ProsemirrorAttributes {\n return { 'aria-placeholder': this.options.placeholder }\n }\n\n createPlugin(): CreateExtensionPlugin {\n return {\n props: {\n decorations: (state) => createDecorationSet({ state, extension: this }),\n },\n }\n }\n\n protected onSetOptions(props: OnSetOptionsProps<PlaceholderOptions>): void {\n const { changes } = props\n\n if (changes.placeholder.changed && this.store.phase >= ManagerPhase.EditorView) {\n // update the attributes object\n this.store.updateAttributes()\n }\n }\n}\n\ninterface SharedProps {\n /**\n * A reference to the extension\n */\n extension: PlaceholderExtension\n /**\n * The editor state\n */\n state: EditorState\n}\n\n/**\n * Creates a decoration set from the passed through state.\n *\n * @param props - see [[`SharedProps`]]\n */\nfunction createDecorationSet(props: SharedProps) {\n const { extension: ext, state } = props\n const { emptyNodeClass, placeholder } = ext.options\n const decorations: any = []\n state.doc.descendants((node, pos, parent) => {\n if (\n node.type.name === 'paragraph' &&\n node.content.size === 0 &&\n placeholder &&\n state.selection.from - 1 === pos &&\n parent?.type.name === 'doc'\n ) {\n const placeholderDecoration = Decoration.node(pos, pos + node.nodeSize, {\n class: emptyNodeClass,\n 'data-placeholder': placeholder,\n })\n decorations.push(placeholderDecoration)\n }\n })\n return DecorationSet.create(state.doc, decorations)\n}\n", "import type {\n ApplySchemaAttributes,\n EditorState,\n InputRule,\n NodeExtensionSpec,\n NodeSpecOverride,\n} from '@rme-sdk/core'\nimport {\n extension,\n ExtensionTag,\n findParentNodeOfType,\n isElementDomNode,\n NodeExtension,\n nodeInputRule,\n} from '@rme-sdk/core'\nimport { Decoration, DecorationSet } from '@rme-sdk/pm/view'\nimport { Token } from 'markdown-it/index.js'\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\n\nexport interface ReferenceDefinitionExtensionOptions {}\n\n@extension<ReferenceDefinitionExtensionOptions>({\n defaultOptions: {},\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class ReferenceDefinitionExtension extends NodeExtension<ReferenceDefinitionExtensionOptions> {\n get name() {\n return 'reference_def' as const\n }\n\n createTags() {\n return [\n ExtensionTag.LastNodeCompatible,\n ExtensionTag.TextBlock,\n ExtensionTag.Block,\n ExtensionTag.FormattingNode,\n ]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n group: 'reference',\n content: 'reference_label reference_href reference_title*',\n ...override,\n attrs: {\n ...extra.defaults(),\n label: { default: '' },\n href: { default: '' },\n title: { default: '' },\n },\n parseDOM: [\n {\n tag: 'div[data-reference-definition]',\n getAttrs: (node) => {\n if (!isElementDomNode(node)) {\n return false\n }\n\n const label = node.getAttribute('data-reference-label') || ''\n const href = node.getAttribute('data-reference-href') || ''\n const title = node.getAttribute('data-reference-title') || ''\n\n return {\n ...extra.parse(node),\n label,\n href,\n title,\n }\n },\n },\n ...(override.parseDOM ?? []),\n ],\n toDOM: (node) => {\n return [\n 'div',\n {\n ...extra.dom(node),\n class: 'reference-def',\n },\n 0,\n ]\n },\n }\n }\n\n createDecorations(state: EditorState): DecorationSet {\n const found = findParentNodeOfType({ types: this.type, selection: state.selection })\n if (!found) {\n return DecorationSet.empty\n }\n\n return DecorationSet.create(state.doc, [\n Decoration.node(found.pos, found.pos + found.node.nodeSize, { class: 'rme-block-focus' }),\n ])\n }\n\n createInputRules(): InputRule[] {\n return [\n nodeInputRule({\n regexp: /^\\[([^\\]]*)\\]:\\s*([^\\s\"]+(:\\s+[^\\s\"]+)*)?(?:\\s+\"(.*?)\")?/,\n type: this.type,\n getAttributes: (match: string[]) => {\n const [, label, ref, title] = match\n console.log('matchmatch', match)\n return { label, ref, title }\n },\n }),\n ]\n }\n\n public fromMarkdown() {\n return [\n {\n type: ParserRuleType.block,\n node: this.name,\n token: 'reference_def',\n hasOpenClose: true,\n getAttrs: (token: Token) => {\n return {\n label: token.attrs?.[0]?.[1] || '',\n href: token.attrs?.[1]?.[1] || '',\n title: token.attrs?.[2]?.[1] || '',\n }\n },\n },\n ] as const\n }\n\n public toMarkdown({ state, node }: NodeSerializerOptions) {\n state.renderInline(node)\n state.closeBlock(node)\n return\n }\n}\n", "import { NodeSerializerOptions, ParserRuleType } from '@/editor/transform'\nimport type {\n ApplySchemaAttributes,\n KeyBindings,\n NodeExtensionSpec,\n NodeSpecOverride,\n} from '@rme-sdk/core'\nimport { extension, ExtensionTag, NodeExtension } from '@rme-sdk/core'\nimport { Token } from 'markdown-it/index.js'\n\n@extension({\n defaultOptions: {},\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class ReferenceLabelExtension extends NodeExtension {\n get name() {\n return 'reference_label' as const\n }\n\n createTags() {\n return [ExtensionTag.InlineNode]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n inline: true,\n group: 'reference_inline',\n content: 'text*',\n ...override,\n attrs: {\n ...extra.defaults(),\n },\n toDOM: (node) => {\n return [\n 'span',\n {\n ...extra.dom(node),\n class: 'reference-definition-node__label',\n },\n // \u4E3A\u4E86\u963B\u6B62 prosemirror \u7684\u9ED8\u8BA4\u5220\u9664\u884C\u4E3A\n ['span', { contenteditable: 'false', disabled: 'true' }, '\\u200B'],\n ['span', {}, 0],\n ['span', { contenteditable: 'false', disabled: 'true' }, '\\u200B'],\n ]\n },\n }\n }\n\n fromMarkdown() {\n return [\n {\n type: ParserRuleType.inline,\n token: 'reference_label',\n getText: (tok: Token) => tok.content,\n },\n ] as const\n }\n\n toMarkdown({ state, node }: NodeSerializerOptions) {\n state.write('[')\n state.text(node.textContent || '')\n state.write(']: ')\n }\n\n createKeymap(): KeyBindings {\n return {\n Backspace: ({ state, dispatch }) => {\n const { selection } = state\n const { $from } = selection\n\n if ($from.parent.type.name !== this.name) {\n return false\n }\n\n if ($from.parent.textContent.length === 0) {\n let parentNode = null\n let parentPos = -1\n\n for (let depth = $from.depth - 1; depth >= 0; depth--) {\n const node = $from.node(depth)\n if (node.type.name === 'reference_def') {\n parentNode = node\n parentPos = $from.start(depth)\n break\n }\n }\n\n if (parentNode && parentPos !== -1 && dispatch) {\n dispatch(state.tr.delete(parentPos, parentPos + parentNode.nodeSize))\n return true\n }\n }\n\n return false\n },\n }\n }\n}\n\n@extension({\n defaultOptions: {},\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class ReferenceHrefExtension extends NodeExtension {\n get name() {\n return 'reference_href' as const\n }\n\n createTags() {\n return [ExtensionTag.InlineNode]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n inline: true,\n group: 'reference_inline',\n content: 'text*',\n ...override,\n attrs: {\n ...extra.defaults(),\n },\n toDOM: (node) => {\n return [\n 'span',\n {\n ...extra.dom(node),\n class: 'reference-definition-node__href',\n },\n 0,\n ]\n },\n }\n }\n\n fromMarkdown() {\n return [\n {\n type: ParserRuleType.inline,\n token: 'reference_href',\n getText: (tok: Token) => tok.content,\n },\n ] as const\n }\n\n toMarkdown({ state, node }: NodeSerializerOptions) {\n state.text(`${node.textContent || ''} `)\n }\n}\n\n@extension({\n defaultOptions: {},\n staticKeys: [],\n handlerKeys: [],\n customHandlerKeys: [],\n})\nexport class ReferenceTitleExtension extends NodeExtension {\n get name() {\n return 'reference_title' as const\n }\n\n createTags() {\n return [ExtensionTag.InlineNode]\n }\n\n createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec {\n return {\n inline: true,\n group: 'reference_inline',\n content: 'text*',\n ...override,\n attrs: {\n ...extra.defaults(),\n },\n toDOM: (node) => {\n return [\n 'span',\n {\n ...extra.dom(node),\n class: 'reference-definition-node__title',\n },\n 0,\n ]\n },\n }\n }\n\n fromMarkdown() {\n return [\n {\n type: ParserRuleType.inline,\n token: 'reference_title',\n getText: (tok: Token) => tok.content,\n },\n ] as const\n }\n\n toMarkdown({ state, node }: NodeSerializerOptions) {\n if (node.textContent) {\n state.write('\"')\n state.text(node.textContent || '')\n state.write('\"')\n }\n }\n}\n", "// prosemirror imports\nimport { Node as ProseNode } from '@rme-sdk/pm/model'\nimport { TextSelection } from '@rme-sdk/pm/state'\nimport { EditorView, NodeView } from '@rme-sdk/pm/view'\n\nexport class ReferenceNodeView implements NodeView {\n // nodeview params\n private _node: ProseNode\n private _outerView: EditorView\n private _getPos: () => number | undefined\n\n // nodeview dom\n dom: HTMLElement\n\n private _removing = false\n\n // Elements for each editable part\n private _labelElement: HTMLElement\n private _separatorElement: HTMLElement\n private _hrefElement: HTMLElement\n private _titleElement: HTMLElement\n\n constructor(node: ProseNode, view: EditorView, getPos: () => number | undefined) {\n // store arguments\n this._node = node\n this._outerView = view\n this._getPos = getPos\n\n // create dom representation of nodeview\n this.dom = document.createElement('div')\n this.dom.classList.add('reference-definition-node')\n\n // Create elements for each part\n this._labelElement = document.createElement('span')\n this._labelElement.classList.add('reference-definition-node__label')\n // this._labelElement.contentEditable = 'true'\n\n this._separatorElement = document.createElement('span')\n this._separatorElement.classList.add('reference-definition-node__separator')\n this._separatorElement.textContent = ':'\n\n this._hrefElement = document.createElement('span')\n this._hrefElement.classList.add('reference-definition-node__href')\n // this._hrefElement.contentEditable = 'true'\n\n this._titleElement = document.createElement('span')\n this._titleElement.classList.add('reference-definition-node__title')\n // this._titleElement.contentEditable = 'true'\n\n // Append elements to dom\n this.dom.appendChild(this._labelElement)\n this.dom.appendChild(this._separatorElement)\n this.dom.appendChild(this._hrefElement)\n this.dom.appendChild(this._titleElement)\n\n // Add event listeners for updates\n this._labelElement.addEventListener('blur', () => this.onLabelChange())\n this._hrefElement.addEventListener('blur', () => this.onHrefChange())\n this._titleElement.addEventListener('blur', () => this.onTitleChange())\n\n // Prevent enter key from creating newlines\n this._labelElement.addEventListener('keydown', (e) => this.handleKeyDown(e))\n this._hrefElement.addEventListener('keydown', (e) => this.handleKeyDown(e))\n this._titleElement.addEventListener('keydown', (e) => this.handleKeyDown(e))\n\n // Render initial content\n this.renderContent()\n }\n\n destroy() {\n // Clean up dom elements\n this.dom.remove()\n }\n\n // == Updates ======================================= //\n\n update(node: ProseNode) {\n if (!node.sameMarkup(this._node)) return false\n this._node = node\n this.renderContent()\n return true\n }\n\n // == Events ===================================== //\n\n selectNode() {\n if (!this._outerView.editable) {\n return\n }\n\n // Focus the first editable field by default\n this._labelElement.focus()\n }\n\n deselectNode() {\n // Blur all elements when node is deselected\n this._labelElement.blur()\n this._hrefElement.blur()\n this._titleElement.blur()\n }\n\n stopEvent(event: Event): boolean {\n const target = event.target as Node\n return (\n this._labelElement.contains(target) ||\n this._hrefElement.contains(target) ||\n this._titleElement.contains(target)\n )\n }\n\n ignoreMutation() {\n return true\n }\n\n // == Rendering ===================================== //\n\n renderContent() {\n const attrs = this._node.attrs\n const labelText = attrs.label ? `${attrs.label}` : ''\n const hrefText = attrs.href ? `${attrs.href}` : ''\n const titleText = attrs.title ? `${attrs.title}` : ''\n\n // Update text content\n this._labelElement.textContent = labelText\n this._hrefElement.textContent = hrefText\n this._titleElement.textContent = titleText\n }\n\n // == Event Handlers ================================== //\n\n handleKeyDown = (event: KeyboardEvent) => {\n // Prevent enter key from creating newlines\n if (event.key === 'Enter') {\n event.preventDefault()\n ;(event.target as HTMLElement).blur()\n return\n }\n\n // Handle delete key when label element is empty\n if (event.key === 'Backspace' && event.target === this._labelElement) {\n const selection = window.getSelection()\n if (\n selection &&\n selection.rangeCount > 0 &&\n this._labelElement.textContent === '' &&\n selection.anchorOffset === 0 &&\n selection.focusOffset === 0\n ) {\n // Prevent default behavior\n event.preventDefault()\n\n const pos = this._getPos()\n if (pos !== undefined) {\n this._removing = true\n\n const hrefText = this._hrefElement.textContent || ''\n\n if (hrefText.trim() !== '') {\n const textNode = this._outerView.state.schema.text(hrefText)\n const tr = this._outerView.state.tr\n const tr2 = tr.replaceWith(pos, pos + this._node.nodeSize, textNode)\n tr2.setSelection(TextSelection.near(tr2.doc.resolve(pos)))\n\n this._outerView.dispatch(tr2)\n this._outerView.focus()\n } else {\n // \u5982\u679Chref\u4E2D\u6CA1\u6709\u6587\u672C\uFF0C\u76F4\u63A5\u5220\u9664\u5F53\u524D\u8282\u70B9\n const deleteTr = this._outerView.state.tr\n deleteTr.delete(pos, pos + this._node.nodeSize)\n // Set selection to the position where the node was deleted\n deleteTr.setSelection(TextSelection.near(deleteTr.doc.resolve(pos)))\n this._outerView.dispatch(deleteTr)\n this._outerView.focus()\n }\n }\n }\n }\n }\n\n onLabelChange = () => {\n if (this._removing) {\n return\n }\n const newText = this._labelElement.textContent || ''\n const pos = this._getPos()\n\n if (pos !== undefined) {\n const tr = this._outerView.state.tr\n tr.setNodeAttribute(pos, 'label', newText)\n this._outerView.dispatch(tr)\n }\n }\n\n onHrefChange = () => {\n if (this._removing) {\n return\n }\n const newText = this._hrefElement.textContent || ''\n const pos = this._getPos()\n\n if (pos !== undefined) {\n const tr = this._outerView.state.tr\n tr.setNodeAttribute(pos, 'href', newText)\n this._outerView.dispatch(tr)\n }\n }\n\n onTitleChange = () => {\n if (this._removing) {\n return\n }\n const newText = this._titleElement.textContent || ''\n const pos = this._getPos()\n\n if (pos !== undefined) {\n const tr = this._outerView.state.tr\n tr.setNodeAttribute(pos, 'title', newText)\n this._outerView.dispatch(tr)\n }\n }\n}\n", "import { type SlashMenuMeta, type SlashMenuState, SlashMetaTypes } from './type'\nimport { defaultIgnoredKeys, dispatchWithMeta, isSlashKey } from './utils'\n\nimport type { CreateExtensionPlugin } from '@rme-sdk/main'\nimport { extension, PlainExtension } from '@rme-sdk/main'\nimport { getCase, SlashCases } from './case'\n\ntype SlashMenuOptions = {}\n@extension<SlashMenuOptions>({\n defaultOptions: {},\n})\nexport class SlashMenuExtension extends PlainExtension {\n get name() {\n return 'slash-menu' as const\n }\n\n createPlugin(): CreateExtensionPlugin<SlashMenuState> {\n const initialState: SlashMenuState = {\n open: false,\n filter: '',\n ignoredKeys: defaultIgnoredKeys,\n }\n\n return {\n props: {\n handleKeyDown(view, event) {\n const editorState = view.state\n\n if (!editorState) return false\n\n const state = this.getState(editorState)\n if (!state) return false\n const slashCase = getCase(state, event, view, initialState.ignoredKeys)\n\n switch (slashCase) {\n case SlashCases.OpenMenu:\n const resolvedPos =\n editorState.selection.from < 0 ||\n editorState.selection.from > editorState.doc.content.size\n ? null\n : editorState.doc.resolve(editorState.selection.from)\n\n const parentNode = resolvedPos?.parent\n const inParagraph = parentNode?.type.name === 'paragraph'\n const inRoot = resolvedPos?.depth === 1\n\n if (!inRoot) {\n return false\n }\n\n if (inParagraph && parentNode.textContent === '/' && resolvedPos) {\n // \u4E3B\u8981\u5904\u7406 safari \u4E0Ainput\u4E8B\u4EF6\u5728\u8FD9\u91CC\u5DF2\u7ECF\u89E6\u53D1\u4E86\u7684\u95EE\u9898\n view.dispatch(\n editorState.tr\n .delete(resolvedPos.start(), resolvedPos.end())\n .setMeta(this.spec.key!, { type: SlashMetaTypes.open }),\n )\n }\n dispatchWithMeta(view, this.spec.key!, { type: SlashMetaTypes.open })\n return true\n case SlashCases.CloseMenu: {\n if (event.isComposing) {\n dispatchWithMeta(view, this.spec.key!, {\n type: SlashMetaTypes.close,\n })\n } else if (isSlashKey(event)) {\n view.dispatch(\n editorState.tr.insertText('/').setMeta(this.spec.key!, {\n type: SlashMetaTypes.close,\n }),\n )\n } else {\n dispatchWithMeta(view, this.spec.key!, {\n type: SlashMetaTypes.close,\n })\n }\n return true\n }\n\n case SlashCases.Execute:\n case SlashCases.NextItem:\n case SlashCases.PrevItem:\n case SlashCases.addChar:\n case SlashCases.removeChar:\n case SlashCases.Catch: {\n return true\n }\n\n default:\n return false\n }\n },\n },\n\n state: {\n init() {\n return initialState\n },\n apply(tr, state) {\n // @ts-ignore\n const meta: SlashMenuMeta = tr.getMeta(this.spec.key)\n switch (meta?.type) {\n case SlashMetaTypes.open:\n return { ...initialState, open: true }\n case SlashMetaTypes.close:\n return initialState\n case SlashMetaTypes.execute:\n return {\n ...initialState,\n open: true,\n }\n default:\n return state\n }\n },\n },\n initialState,\n }\n }\n}\n", "import type { EditorView } from '@rme-sdk/pm/view'\nimport type { OpeningConditions, SlashMenuState } from './type'\nimport { isSlashKey } from './utils'\n\nexport enum SlashCases {\n OpenMenu = 'openMenu',\n CloseMenu = 'closeMenu',\n Execute = 'Execute',\n NextItem = 'NextItem',\n PrevItem = 'PrevItem',\n inputChange = 'InputChange',\n addChar = 'addChar',\n removeChar = 'removeChar',\n Ignore = 'Ignore',\n Catch = 'Catch',\n}\nconst defaultConditions = (openInSelection = false): OpeningConditions => {\n return {\n shouldOpen: (state: SlashMenuState, event: KeyboardEvent, view: EditorView) => {\n // \u68C0\u67E5\u662F\u5426\u5728\u8F93\u5165\u6CD5\u7EC4\u5408\u72B6\u6001\u4E2D\uFF0C\u5982\u679C\u662F\u5219\u4E0D\u89E6\u53D1SlashMenu\n if (event.isComposing) {\n return false\n }\n\n const editorState = view.state\n const resolvedPos =\n editorState.selection.from < 0 || editorState.selection.from > editorState.doc.content.size\n ? null\n : editorState.doc.resolve(editorState.selection.from)\n\n const parentNode = resolvedPos?.parent\n const inParagraph = parentNode?.type.name === 'paragraph'\n const posInLine = editorState.selection.$head.parentOffset\n const prevCharacter = editorState.selection.$head.parent.textContent.slice(\n posInLine - 1,\n posInLine,\n )\n const inEmptyPar = inParagraph && parentNode?.textContent === prevCharacter\n\n const spaceBeforePos = prevCharacter === '\u200A' || prevCharacter === '' || prevCharacter === ' '\n\n return (\n !state.open &&\n isSlashKey(event) &&\n inParagraph &&\n (inEmptyPar ||\n spaceBeforePos ||\n (editorState.selection.from !== editorState.selection.to && openInSelection))\n )\n },\n shouldClose: (state: SlashMenuState, event: KeyboardEvent) =>\n state.open &&\n (isSlashKey(event) || event.key === 'Escape' || event.key === 'Backspace') &&\n state.filter.length === 0,\n }\n}\nexport const getCase = (\n state: SlashMenuState,\n event: KeyboardEvent,\n view: EditorView,\n ignoredKeys: string[],\n customConditions?: OpeningConditions,\n shouldOpenInSelection?: boolean,\n): SlashCases => {\n // \u5728\u8F93\u5165\u6CD5\u7EC4\u5408\u72B6\u6001\u4E0B\uFF0C\u5FFD\u7565\u5927\u90E8\u5206\u952E\u76D8\u4E8B\u4EF6\n if (event.isComposing) {\n // \u53EA\u5904\u7406\u4E00\u4E9B\u7279\u6B8A\u952E\uFF0C\u5982Escape\u3001Backspace\u7B49\n if (event.key === 'Escape') {\n return SlashCases.CloseMenu\n }\n if (event.key === 'Backspace' && state.filter.length === 0) {\n return SlashCases.CloseMenu\n }\n // \u5176\u4ED6\u4E8B\u4EF6\u5728\u7EC4\u5408\u72B6\u6001\u4E0B\u5FFD\u7565\n return SlashCases.Ignore\n }\n\n const condition = customConditions || defaultConditions(shouldOpenInSelection)\n if (condition.shouldOpen(state, event, view)) {\n return SlashCases.OpenMenu\n }\n if (condition.shouldClose(state, event, view)) {\n return SlashCases.CloseMenu\n }\n if (state.open) {\n if (event.key === 'ArrowDown') {\n return SlashCases.NextItem\n }\n if (event.key === 'ArrowUp') {\n return SlashCases.PrevItem\n }\n if (event.key === 'Enter' || event.key === 'Tab') {\n return SlashCases.Execute\n }\n if (event.key === 'Escape' || (event.key === 'Backspace' && state.filter.length === 0)) {\n return SlashCases.CloseMenu\n }\n if (state.filter.length > 0 && event.key === 'Backspace') {\n return SlashCases.removeChar\n }\n if (!ignoredKeys.includes(event.key)) {\n return SlashCases.addChar\n }\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n return SlashCases.Catch\n }\n }\n\n return SlashCases.Ignore\n}\n", "import { TextExtension } from '@rme-sdk/main/extensions'\nimport type Token from 'markdown-it/lib/token.mjs'\n\nimport type { NodeSerializerOptions } from '../../transform'\nimport { ParserRuleType } from '../../transform'\n\nexport class LineTextExtension extends TextExtension {\n fromMarkdown() {\n return [\n {\n type: ParserRuleType.text,\n token: 'text',\n getText: (tok: Token) => tok.content,\n },\n {\n type: ParserRuleType.text,\n token: 'inline',\n getText: (tok: Token) => tok.content,\n },\n {\n type: ParserRuleType.text,\n token: 'softbreak',\n getText: (tok: Token) => '\\n',\n },\n ] as const\n }\n\n toMarkdown({ state, node }: NodeSerializerOptions) {\n state.text(node.text || '')\n }\n}\n", "import type { CreateExtensionPlugin } from '@rme-sdk/core';\nimport { PlainExtension, extension } from '@rme-sdk/core';\nimport { DocToString, StringToDoc } from '../../types/index';\n\nexport type TransformerMenuState = {\n isTransformerFlag: true\n stringToDoc: StringToDoc | null\n docToString: DocToString | null\n}\ntype TranformerOptions = {}\n\n@extension<TranformerOptions>({\n defaultOptions: {},\n})\nexport class TransformerExtension extends PlainExtension {\n get name() {\n return 'transformer' as const\n }\n\n createPlugin(): CreateExtensionPlugin<TransformerMenuState> {\n const initialState: TransformerMenuState = {\n isTransformerFlag: true,\n stringToDoc: null,\n docToString: null,\n }\n\n return {\n state: {\n init() {\n return initialState\n },\n apply: (tr, state) => {\n const meta = tr.getMeta(this.pluginKey)\n\n if (meta) {\n return {\n ...state,\n stringToDoc: meta.stringToDoc,\n docToString: meta.docToString,\n }\n }\n return state\n },\n },\n initialState,\n }\n }\n}\n", "import type { Node } from '@rme-sdk/pm/model'\nimport { isOrderedListNode } from '../extensions'\nimport type { ListAttributes } from '../extensions/List/input-rule/types'\n\nexport type NodeSerializerOptions = {\n state: MarkdownSerializerState\n node: Node\n parent: Node\n index: number\n counter: number\n}\nexport type NodeSerializerSpec = (options: NodeSerializerOptions) => void\nexport type NodeSerializerSpecs = Record<string, NodeSerializerSpec>\n\nexport class MarkdownSerializerState {\n private nodes: NodeSerializerSpecs\n private delimiter: string\n public out: string\n private closed: Node | null\n private inTightList: boolean\n\n public constructor(nodes: NodeSerializerSpecs) {\n this.nodes = nodes\n this.delimiter = ''\n this.out = ''\n this.closed = null\n this.inTightList = false\n }\n\n public flushClose(size = 2) {\n if (this.closed) {\n this.ensureNewLine()\n if (size > 1) {\n let delimMin = this.delimiter\n const trim = /\\s+$/.exec(delimMin)\n if (trim) delimMin = delimMin.slice(0, delimMin.length - trim[0].length)\n for (let i = 1; i < size; i++) this.out += delimMin + '\\n'\n }\n this.closed = null\n }\n }\n\n // Render a block, prefixing each line with `delimiter`, and the first\n // line in `firstDelim`. `node` should be the node that is closed at\n // the end of the block, and `f` is a function that renders the\n // content of the block.\n public wrapBlock(newDelimiter: string, firstDelim: string | null, node: Node, f: () => void) {\n const oldDelimiter = this.delimiter\n this.write(firstDelim || newDelimiter)\n this.delimiter = this.delimiter + newDelimiter\n f()\n this.delimiter = oldDelimiter\n this.closeBlock(node)\n }\n\n public atBlank() {\n return /(^|\\n)$/.test(this.out)\n }\n\n // Ensure the current content ends with a newline.\n public ensureNewLine() {\n if (!this.atBlank()) this.out += '\\n'\n }\n\n // Prepare the state for writing output (closing closed paragraphs,\n // adding delimiters, and so on), and then optionally add content\n // (unescaped) to the output.\n public write(content?: string) {\n this.flushClose()\n if (this.delimiter && this.atBlank()) this.out += this.delimiter\n if (content) this.out += content\n }\n\n // Close the block for the given node.\n public closeBlock(node: Node) {\n this.closed = node\n }\n\n // Add the given text to the document. When escape is true,\n // it will be escaped.\n public text(text: string, escape = true) {\n const lines = text.split('\\n')\n for (let i = 0; i < lines.length; i++) {\n const startOfLine = this.atBlank() || this.closed\n this.write()\n this.out += escape ? this.esc(lines[i], Boolean(startOfLine)) : lines[i]\n if (i != lines.length - 1) this.out += '\\n'\n }\n }\n\n // Render the given node as a block.\n public render(node: Node, parent: Node, index: number, counter = 0) {\n const spec = this.nodes[node.type.name]\n if (!spec) return\n if (!spec) throw new Error(`Can't find node spec for type '${node.type.name}'`)\n spec({ state: this, node, parent, index, counter })\n }\n\n // Render the contents of `parent` as block nodes.\n public renderContent(parent: Node) {\n let counter = 0\n if (parent.forEach) {\n parent.forEach((node, offset, index) => {\n // Check if current node is an ordered list\n if (isOrderedListNode(node)) {\n // Check if previous sibling is also an ordered list\n // If not, reset counter to 0 (consistent with CSS logic)\n const prevSibling = index > 0 ? parent.child(index - 1) : null\n if (prevSibling && !isOrderedListNode(prevSibling)) {\n counter = 0\n }\n\n // If node has custom order attribute, use it as starting value (consistent with CSS)\n // Otherwise increment counter\n const attrs = node.attrs as ListAttributes\n if (attrs.order != null) {\n counter = attrs.order\n } else {\n counter += 1\n }\n } else {\n // Reset counter when encountering non-ordered-list node\n counter = 0\n }\n\n this.render(node, parent, index, counter)\n })\n } else {\n if (isOrderedListNode(parent)) {\n const attrs = parent.attrs as ListAttributes\n if (attrs.order != null) {\n counter = attrs.order\n } else {\n counter += 1\n }\n } else {\n counter = 0\n }\n\n this.render(parent, parent, 0, counter)\n }\n }\n\n // Render the contents of `parent` as inline content.\n public renderInline(parent: Node) {\n parent.forEach((node, offset, index) => {\n if (node.isText) this.text(node.text || '', false)\n else this.render(node, parent, index)\n })\n }\n\n // Render a node's content as a list. `delim` should be the extra\n // indentation added to all lines except the first in an item,\n // `firstDelim` is a function going from an item index to a\n // delimiter for the first line of the item.\n public renderList(node: Node, delim: string, firstDelim: (n: number) => string): void {\n if (this.closed && this.closed.type === node.type) {\n this.flushClose(3)\n } else if (this.inTightList) {\n this.flushClose(1)\n } else {\n this.flushClose(2)\n }\n\n const prevTight = this.inTightList\n this.inTightList = true\n node.forEach((child, _, i) => {\n if (i) this.flushClose(1)\n this.wrapBlock(delim, firstDelim(i), node, () => this.render(child, node, i))\n })\n this.inTightList = prevTight\n }\n\n // Escape the given string so that it can safely appear in Markdown\n // content. If `startOfLine` is true, also escape characters that\n // has special meaning only at the start of the line.\n public esc(str: string, startOfLine?: boolean): string {\n str = str.replace(/[`*\\\\~\\[\\]]/g, '\\\\$&')\n if (startOfLine) str = str.replace(/^[:#\\-*+]/, '\\\\$&').replace(/^(\\d+)\\./, '$1\\\\.')\n return str\n }\n\n public quote(str: string): string {\n const wrap = !str.includes(`\"`) ? `\"\"` : !str.includes(`'`) ? `''` : `()`\n return wrap[0] + str + wrap[1]\n }\n\n // Repeat the given string `n` times.\n public repeat(str: string, n: number): string {\n let out = ''\n for (let i = 0; i < n; i++) out += str\n return out\n }\n\n // Get leading and trailing whitespace from a string. Values of\n // leading or trailing property of the return object will be undefined\n // if there is no match.\n public getEnclosingWhitespace(text: string) {\n return {\n leading: (/^(\\s+)/.exec(text) || [])[0],\n trailing: (/(\\s+)$/.exec(text) || [])[0],\n }\n }\n}\n\nexport class MarkdownSerializer {\n private nodes: NodeSerializerSpecs\n\n public constructor(nodes: NodeSerializerSpecs) {\n this.nodes = nodes\n }\n\n public serialize(content: Node) {\n const state = new MarkdownSerializerState(this.nodes)\n state.renderContent(content)\n return state.out\n }\n}\n", "import { languages } from '@codemirror/language-data'\nimport { computePosition } from '@floating-ui/dom'\nimport type { EditorView, FindProsemirrorNodeResult } from '@rme-sdk/core'\nimport { Selection } from '@rme-sdk/pm/state'\nimport Fuse from 'fuse.js'\nimport { t } from 'i18next'\nimport { fakeIndentedLanguage } from './codemirror-extension'\n\ninterface CodeMirrorMenuDecorations {\n create: (view: EditorView, getPos: () => number | undefined) => HTMLElement\n destroy: () => void\n}\n\nconst createLanguagesList = (currentLanguage: string): HTMLUListElement => {\n const languagesList = document.createElement('ul')\n languagesList.classList.add('code-block__languages')\n languages.forEach((language) => {\n const languageItem = document.createElement('li')\n languageItem.classList.add('code-block__language')\n languageItem.classList.toggle('code-block__language--active', language.name === currentLanguage)\n languageItem.innerText = language.name\n languagesList.append(languageItem)\n })\n\n return languagesList\n}\n\nconst updateLanguagesList = ({\n keyword,\n languagesList,\n currentLanguage,\n highlightedIndex,\n}: {\n keyword?: string\n languagesList: HTMLUListElement\n currentLanguage: string\n highlightedIndex: number\n}) => {\n let filteredLanguages = languages\n\n if (keyword) {\n filteredLanguages = new Fuse(languages, {\n keys: ['name'],\n })\n .search(keyword)\n .map((result) => result.item)\n }\n\n languagesList.innerHTML = ''\n if (filteredLanguages.length === 0) {\n const emptyItem = document.createElement('li')\n emptyItem.classList.add('code-block__language', 'code-block__language--empty')\n emptyItem.innerText = 'No results'\n languagesList.append(emptyItem)\n return filteredLanguages\n }\n\n filteredLanguages.forEach((language, index) => {\n const languageItem = document.createElement('li')\n languageItem.classList.add('code-block__language')\n languageItem.classList.toggle('code-block__language--active', language.name === currentLanguage)\n languageItem.classList.toggle('code-block__language--highlight', index === highlightedIndex)\n languageItem.dataset.value = language.name\n languageItem.dataset.index = String(index)\n languageItem.innerText = language.name\n languagesList.append(languageItem)\n })\n return filteredLanguages\n}\n\nconst createCodeMirrorMenuDecorations = (\n found: FindProsemirrorNodeResult,\n): CodeMirrorMenuDecorations => {\n const destoryCallbacks: Function[] = []\n\n const handleBlurClick = (e: MouseEvent) => {\n const targetNode = e.target as HTMLElement\n if (!targetNode.classList.contains('code-block__languages__input')) {\n destroy()\n }\n }\n\n const create = (view: EditorView, getPos: () => number | undefined): HTMLElement => {\n let currentLanguage = found.node.attrs.language || ''\n if (currentLanguage === fakeIndentedLanguage) {\n currentLanguage = ''\n }\n\n const languagesList = createLanguagesList(currentLanguage)\n let filteredLanguages = languages\n let highlightedIndex = -1\n let menuOpen = false\n\n const setLanguage = (language: string) => {\n const pos = getPos()\n if (pos !== undefined) {\n view.dispatch(view.state.tr.setNodeMarkup(pos, undefined, { language }))\n }\n }\n\n const moveSelection = (dir: 1 | -1) => {\n const pos = getPos()\n if (pos === undefined) {\n return\n }\n const targetPos = dir < 0 ? pos : pos + found.node.nodeSize\n const selection = Selection.near(view.state.doc.resolve(targetPos), dir)\n view.dispatch(view.state.tr.setSelection(selection).scrollIntoView())\n view.focus()\n }\n const focusCodeEditor = (dir: 1 | -1) => {\n const pos = getPos()\n if (pos === undefined) {\n return\n }\n const targetPos = dir < 0 ? pos + found.node.nodeSize - 1 : pos + 1\n const selection = Selection.near(view.state.doc.resolve(targetPos), dir)\n view.dispatch(view.state.tr.setSelection(selection).scrollIntoView())\n view.focus()\n }\n\n const openMenu = () => {\n if (menuOpen) {\n return\n }\n menuOpen = true\n destoryCallbacks.push(() => {\n if (menuOpen) {\n reference.removeChild(languagesList)\n menuOpen = false\n }\n })\n reference.appendChild(languagesList)\n computePosition(reference, languagesList, { placement: 'bottom-start' }).then(({ x, y }) => {\n Object.assign(languagesList.style, {\n left: `${x}px`,\n top: `${y}px`,\n })\n })\n }\n\n const reference = document.createElement('div')\n const langInput = document.createElement('input')\n reference.classList.add('code-block__reference', 'code-block__reference--active')\n langInput.classList.add('code-block__languages__input')\n\n langInput.placeholder = t('codemirror.searchInputPlaceholder')\n\n reference.appendChild(langInput)\n langInput.value = currentLanguage\n\n langInput.addEventListener('focus', () => {\n const matchedIndex = filteredLanguages.findIndex((language) => language.name === currentLanguage)\n highlightedIndex = matchedIndex >= 0 ? matchedIndex : filteredLanguages.length > 0 ? 0 : -1\n filteredLanguages = updateLanguagesList({\n keyword: langInput.value,\n currentLanguage,\n languagesList,\n highlightedIndex,\n })\n })\n\n document.addEventListener('click', handleBlurClick, true)\n\n langInput.addEventListener('input', (e) => {\n if (e.target) {\n if (!menuOpen) {\n openMenu()\n }\n const value = (e.target as HTMLInputElement).value\n highlightedIndex = -1\n filteredLanguages = updateLanguagesList({\n keyword: value,\n currentLanguage,\n languagesList,\n highlightedIndex,\n })\n setLanguage(value)\n }\n })\n\n languagesList?.addEventListener('click', (e) => {\n const target = e.target as HTMLElement\n const value = target.dataset.value\n if (!value) {\n return\n }\n currentLanguage = value\n setLanguage(currentLanguage)\n langInput.value = currentLanguage\n highlightedIndex = filteredLanguages.findIndex((language) => language.name === currentLanguage)\n filteredLanguages = updateLanguagesList({\n keyword: langInput.value,\n currentLanguage,\n languagesList,\n highlightedIndex,\n })\n })\n\n languagesList?.addEventListener('mousemove', (e) => {\n const target = e.target as HTMLElement\n const index = target.dataset.index\n if (index === undefined) {\n return\n }\n highlightedIndex = Number(index)\n filteredLanguages = updateLanguagesList({\n keyword: langInput.value,\n currentLanguage,\n languagesList,\n highlightedIndex,\n })\n })\n\n langInput.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowDown') {\n if (!menuOpen) {\n e.preventDefault()\n focusCodeEditor(1)\n return\n }\n if (filteredLanguages.length === 0) return\n e.preventDefault()\n highlightedIndex = (highlightedIndex + 1) % filteredLanguages.length\n } else if (e.key === 'ArrowUp') {\n if (!menuOpen) {\n e.preventDefault()\n moveSelection(-1)\n return\n }\n if (filteredLanguages.length === 0) return\n e.preventDefault()\n highlightedIndex =\n (highlightedIndex - 1 + filteredLanguages.length) % filteredLanguages.length\n } else if (e.key === 'Enter') {\n if (!menuOpen) {\n return\n }\n if (filteredLanguages.length > 0 && highlightedIndex >= 0) {\n e.preventDefault()\n const selected = filteredLanguages[highlightedIndex]\n currentLanguage = selected.name\n setLanguage(currentLanguage)\n langInput.value = currentLanguage\n }\n } else if (e.key === 'Escape') {\n destroy()\n return\n } else {\n return\n }\n if (menuOpen) {\n filteredLanguages = updateLanguagesList({\n keyword: langInput.value,\n currentLanguage,\n languagesList,\n highlightedIndex,\n })\n const activeEl = languagesList.querySelector(\n `[data-index=\"${highlightedIndex}\"]`,\n ) as HTMLElement | null\n activeEl?.scrollIntoView({ block: 'nearest' })\n }\n })\n\n filteredLanguages = updateLanguagesList({\n keyword: currentLanguage,\n currentLanguage,\n languagesList,\n highlightedIndex,\n })\n\n const container = document.createElement('div')\n container.classList.add('code-block__menu')\n container.dataset.pos = String(found.pos)\n container.appendChild(reference)\n\n return container\n }\n\n const destroy = () => {\n destoryCallbacks.forEach((callback) => callback())\n destoryCallbacks.length = 0\n\n document.removeEventListener('click', handleBlurClick)\n }\n\n return {\n create,\n destroy,\n }\n}\n\nexport default createCodeMirrorMenuDecorations\n", "import type { LanguageSupport } from '@codemirror/language'\nimport type { Extension as CodeMirrorExtension } from '@codemirror/state'\nimport { EditorView as CodeMirrorEditorView } from '@codemirror/view'\nimport type { EditorView, NodeView, ProsemirrorNode } from '@rme-sdk/pm'\nimport { CreateCodemirrorOptions, MfCodemirrorView } from '../../codemirror/codemirror'\n\nexport type LoadLanguage = (lang: string) => Promise<LanguageSupport> | LanguageSupport | void\n\nexport class CodeMirror6NodeView implements NodeView {\n public dom: HTMLElement\n private node: ProsemirrorNode\n private readonly view: EditorView\n private readonly getPos: () => number\n private readonly cm: CodeMirrorEditorView\n private readonly mfCodemirrorView: MfCodemirrorView\n private languageName: string\n\n constructor({\n node,\n view,\n getPos,\n extensions,\n options,\n onCodemirrorViewLoad,\n }: {\n node: ProsemirrorNode\n view: EditorView\n getPos: () => number\n extensions: CodeMirrorExtension[] | null\n options?: CreateCodemirrorOptions\n toggleName: string\n onCodemirrorViewLoad: (cm: MfCodemirrorView) => void\n }) {\n this.node = node\n this.view = view\n this.getPos = getPos\n this.languageName = ''\n\n const resolvedExtensions = extensions\n\n this.mfCodemirrorView = new MfCodemirrorView({\n view: this.view,\n getPos: this.getPos,\n node: this.node,\n extensions: resolvedExtensions,\n languageName: this.languageName,\n options,\n })\n\n if (onCodemirrorViewLoad) {\n onCodemirrorViewLoad(this.mfCodemirrorView)\n }\n // Create a CodeMirror instance\n this.cm = this.mfCodemirrorView.cm\n\n // The editor's outer node is our DOM representation\n this.dom = this.cm.dom\n }\n\n update(node: ProsemirrorNode): boolean {\n this.node = node\n return this.mfCodemirrorView.update(node)\n }\n\n /**\n * Synchronize the selections from ProseMirror to CodeMirrror\n */\n setSelection(anchor: number, head: number): void {\n this.mfCodemirrorView.setSelection(anchor, head)\n }\n\n focus(): void {\n this.cm.focus()\n this.mfCodemirrorView.forwardSelection()\n }\n\n stopEvent(): boolean {\n return true\n }\n\n destroy(): void {\n this.mfCodemirrorView.destroy()\n }\n}\n", "import { useRemirrorContext } from '@rme-sdk/react-core'\nimport { useEffect } from 'react'\nimport { EditorContext } from '../types'\n\nexport const useContextMounted = (onContextMounted?: (ctx: EditorContext) => void) => {\n const remirrorContext = useRemirrorContext()\n\n useEffect(() => {\n if (onContextMounted) {\n onContextMounted(remirrorContext)\n }\n }, [onContextMounted, remirrorContext])\n}\n", "import type { Extension, RemirrorEventListener } from '@rme-sdk/core'\nimport { ProsemirrorDevTools } from '@rme-sdk/dev'\nimport { Remirror } from '@rme-sdk/react'\nimport { memo, useCallback, useEffect, useMemo, type FC } from 'react'\nimport { TransformerExtension } from '../../extensions/Transformer/transformer-extension'\nimport { WysiwygThemeWrapper } from '../../theme'\nimport { BlockHandler } from '../../toolbar/BlockHandler'\nimport { SlashMenu } from '../../toolbar/SlashMenu'\nimport TableToolbar from '../../toolbar/TableToolbar'\nimport { WysiwygToolbar } from '../../toolbar/toolbar'\nimport { defaultStyleToken, type EditorProps } from '../Editor'\nimport ErrorBoundary from '../ErrorBoundary'\nimport Text from './Text'\nimport { createWysiwygDelegate } from './delegate'\n\nconst WysiwygEditor: FC<EditorProps> = (props) => {\n const {\n content,\n hooks,\n delegate,\n wysiwygToolBar,\n isTesting,\n editable = true,\n wysiwygToolBarOptions,\n styleToken = defaultStyleToken,\n wysiwygTextContainerProps = {},\n } = props\n\n const editorDelegate = useMemo(() => delegate ?? createWysiwygDelegate(), [delegate])\n\n const handleChange: RemirrorEventListener<Extension> = useCallback(\n (params) => {\n try {\n // const textContent = editorDelegate.docToString(params.state.doc)\n props.onChange?.(params)\n } catch (error) {\n console.error(error)\n }\n },\n [editorDelegate, props],\n )\n\n useEffect(() => {\n const ext = editorDelegate.manager.getExtension(TransformerExtension)\n\n if (ext) {\n editorDelegate?.manager?.view?.dispatch(\n editorDelegate.manager.view.state.tr.setMeta(ext.pluginKey, {\n stringToDoc: editorDelegate.stringToDoc,\n docToString: editorDelegate.docToString,\n }),\n )\n }\n }, [editorDelegate])\n\n let initialContent\n try {\n initialContent = editorDelegate.stringToDoc(content)\n } catch (error) {\n return <ErrorBoundary hasError error={error} {...(props.errorHandler || {})} />\n }\n\n return (\n <ErrorBoundary {...(props.errorHandler || {})}>\n <WysiwygThemeWrapper {...styleToken}>\n <Remirror\n manager={editorDelegate.manager}\n initialContent={initialContent}\n hooks={hooks}\n editable={editable}\n onChange={handleChange}\n autoRender={false}\n >\n {wysiwygToolBarOptions?.enable ? (\n <WysiwygToolbar {...wysiwygToolBarOptions?.compProps} />\n ) : null}\n <Text {...wysiwygTextContainerProps} />\n <TableToolbar />\n <BlockHandler />\n <SlashMenu />\n {wysiwygToolBar || null}\n {isTesting ? <ProsemirrorDevTools /> : null}\n </Remirror>\n </WysiwygThemeWrapper>\n </ErrorBoundary>\n )\n}\n\nexport default memo(WysiwygEditor)\nexport * from './delegate'\n", "import { isHTMLElement } from '@ocavue/utils'\nimport { NodeSelection } from '@rme-sdk/pm/state'\nimport { useExtension, useRemirrorContext } from '@rme-sdk/react-core'\nimport { memo } from 'react'\nimport styled from 'styled-components'\nimport { nodeTypeIconMap } from '../../const'\nimport { createDraggingPreview, setViewDragging } from '../../extensions/NodeIndicator/drag-preview'\nimport {\n NodeIndicatorExtension,\n NodeIndicatorState,\n} from '../../extensions/NodeIndicator/node-indicator-extension'\n\nexport const BlockHandler = memo(() => {\n const { view: editorView } = useRemirrorContext({ autoUpdate: true })\n const nodeIndicatorExtension = useExtension(NodeIndicatorExtension)\n const state = nodeIndicatorExtension?.getPluginState() as NodeIndicatorState | undefined\n\n const handleClick = () => {\n if (editorView && nodeIndicatorExtension && state && state.pos !== null && state.node) {\n const tr = editorView.state.tr\n tr.setSelection(NodeSelection.create(tr.doc, state.pos))\n editorView.dispatch(tr)\n }\n }\n\n const handleDragStart = (event: React.DragEvent<HTMLDivElement>) => {\n if (editorView && state && state.pos !== null && state.node && state.node.isBlock) {\n editorView.dom.classList.add('rme-dragging')\n\n handleClick()\n const dom = editorView.nodeDOM(state.pos)\n\n if (dom && isHTMLElement(dom)) {\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move'\n }\n\n createDraggingPreview(editorView, state, event)\n setViewDragging(editorView, state)\n }\n }\n }\n\n const handleDragEnd = () => {\n if (editorView) {\n editorView.dom.classList.remove('rme-dragging')\n }\n }\n\n if (!editorView || !state?.node) {\n return null\n }\n\n const renderIcon = () => {\n let key = state?.node?.type?.name || ''\n if (state?.node?.type?.name === 'heading') {\n key = `heading-${state?.node?.attrs?.level}`\n }\n\n if (state?.node?.type?.name === 'list') {\n key = `list-${state?.node?.attrs?.kind}`\n }\n\n const iconName = nodeTypeIconMap[key]\n if (iconName) {\n return <i className={iconName} />\n }\n\n return null\n }\n\n return (\n <Container\n key=\"rme-block-handler\"\n className=\"rme-block-handler\"\n draggable=\"true\"\n onClick={handleClick}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n style={{\n position: 'fixed',\n left: `${state?.rect?.left ? state.rect.left - 38 : 0}px`,\n top: `${state?.rect?.top || 0}px`,\n }}\n >\n {renderIcon()}\n\n <div className=\"rme-draggable-handler\">\n <i className=\"ri-draggable\" />\n </div>\n </Container>\n )\n})\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 2px;\n border: 1px solid ${(props) => props.theme.borderColor};\n border-radius: 4px;\n font-size: 14px;\n z-index: 10;\n\n .rme-draggable-handler {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 18px;\n width: 18px;\n border-radius: 4px;\n cursor: grab;\n\n &:hover {\n background-color: ${(props) => props.theme.hoverColor};\n }\n }\n`\n", "import { isHTMLElement } from '@ocavue/utils'\nimport { EditorView, Fragment, Slice } from '@rme-sdk/pm'\nimport { NodeSelection } from '@rme-sdk/pm/state'\nimport { NodeIndicatorState } from '.'\nimport { getBoxElement } from '../../utils/get-box-element'\nimport { setDragPreview } from './set-drag-preview'\n\nexport function createDraggingPreview(\n view: EditorView,\n hoverState: NodeIndicatorState,\n event: React.DragEvent<HTMLDivElement>,\n): void {\n if (!event.dataTransfer) {\n return\n }\n\n const { pos } = hoverState\n\n if (pos == null) {\n return\n }\n\n const element = view.nodeDOM(pos)\n if (!element || !isHTMLElement(element)) {\n return\n }\n\n const boxElement = getBoxElement(element)\n if (!boxElement || !isHTMLElement(boxElement)) {\n return\n }\n\n event.dataTransfer.clearData()\n event.dataTransfer.setData('text/html', boxElement.outerHTML)\n event.dataTransfer.effectAllowed = 'copyMove'\n setDragPreview(event, boxElement)\n\n return\n}\n\nexport function setViewDragging(view: EditorView, hoverState: any): void {\n const { node, pos } = hoverState\n\n const dragging = {\n slice: new Slice(Fragment.from(node), 0, 0),\n move: true,\n node: NodeSelection.create(view.state.doc, pos),\n }\n\n view.dragging = dragging\n}\n", "/**\n * Returns the element that has a box.\n */\nexport function getBoxElement(element: Element): Element | null | undefined {\n const window = element.ownerDocument.defaultView\n if (!window) {\n return\n }\n\n const style = window.getComputedStyle(element)\n const display = style.display\n\n if (display === 'contents' && element.childElementCount === 1) {\n return element.firstElementChild\n } else if (display === 'none') {\n return\n }\n\n return element\n}\n", "import { deepCloneElement, injectStyle } from '../../utils/dom'\nimport { getClientRect } from '../../utils/get-client-rect'\n\nexport function setDragPreview(event: React.DragEvent<HTMLDivElement>, element: HTMLElement): void {\n const { top, bottom, left, right } = getClientRect(element)\n const width = right - left\n const height = bottom - top\n const elementX = left\n const elementY = top\n\n const { clientX, clientY } = event\n\n const document = element.ownerDocument\n\n const container = document.createElement('div')\n\n // If outsideX is positive, the point is at the left side of the element.\n const outsideX = Math.round(elementX - clientX)\n // If outsideY is positive, the point is above the element.\n const outsideY = Math.round(elementY - clientY)\n\n const borderX = Math.max(outsideX, 0)\n const borderY = Math.max(outsideY, 0)\n Object.assign(container.style, {\n // Ensuring we don't cause reflow when adding the element to the page using\n // `position:fixed` rather than `position:absolute` so we are positioned on\n // the current viewport. `position:fixed` also creates a new stacking\n // context, so we don't need to do that here.\n // https://github.com/atlassian/pragmatic-drag-and-drop/blob/56276552/packages/core/src/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.ts#L60\n position: 'fixed',\n\n // The element is positioned off-screen to avoid capturing the content of\n // the page on Safari when the dragging element has a transparent background\n // on Safari. See https://github.com/prosekit/prosekit/issues/1153 for more\n // details.\n top: '-1000vh',\n left: '-1000vw',\n\n // The element should not be interactive.\n pointerEvents: 'none',\n\n // The element should be on top of everything else.\n zIndex: '2147483647',\n\n // Only reliable cross browser technique found to push a drag preview away\n // from the cursor is to use transparent borders on the container.\n // https://github.com/atlassian/pragmatic-drag-and-drop/blob/56276552/packages/core/src/public-utils/element/custom-native-drag-preview/pointer-outside-of-preview.ts#L13-L18\n borderLeft: `${borderX}px solid transparent`,\n borderTop: `${borderY}px solid transparent`,\n\n boxSizing: 'border-box',\n width: `${width + borderX}px`,\n height: `${height + borderY}px`,\n })\n\n const [clonedElement, styleText] = deepCloneElement(element, true)\n\n // A hardcoded opacity.\n clonedElement.style.setProperty('opacity', '0.7', 'important')\n // The bounding client rect doesn't include the margin, so we need to remove\n // the margin too from the cloned element so that it can fit the container.\n clonedElement.style.setProperty('margin', '0', 'important')\n // Hide the outline of the cloned element.\n clonedElement.style.setProperty('outline-color', 'transparent', 'important')\n\n document.body.appendChild(container)\n container.appendChild(clonedElement)\n injectStyle(container, styleText)\n\n event.dataTransfer?.setDragImage(container, Math.max(-outsideX, 0), Math.max(-outsideY, 0))\n\n requestAnimationFrame(() => {\n container.remove()\n })\n}\n", "import { useExtension, useRemirrorContext } from '@rme-sdk/react-core'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { usePopper } from 'react-popper'\nimport styled from 'styled-components'\nimport { SlashMenuExtension } from '../../extensions/SlashMenu'\nimport type { SlashMenuState } from '../../extensions/SlashMenu/type'\nimport { SlashMetaTypes } from '../../extensions/SlashMenu/type'\nimport { dispatchWithMeta } from '../../extensions/SlashMenu/utils'\nimport { SlashMenuRoot } from './SlashMenuRoot'\n\nexport enum Placement {\n auto = 'auto',\n autoStart = 'auto-start',\n autoEnd = 'auto-end',\n top = 'top',\n topStart = 'top-start',\n topEnd = 'top-end',\n bottom = 'bottom',\n bottomStart = 'bottom-start',\n bottomEnd = 'bottom-end',\n right = 'right',\n rightStart = 'right-start',\n rightEnd = 'right-end',\n left = 'left',\n leftStart = 'left-start',\n leftEnd = 'left-end',\n}\n\nexport const SlashMenu = () => {\n const { view: editorView, getState, commands } = useRemirrorContext({ autoUpdate: true })\n if (!editorView) {\n return\n }\n\n const editorState = getState()\n\n const slashMenuExtension = useExtension(SlashMenuExtension)\n const menuState: SlashMenuState = slashMenuExtension.getPluginState()\n\n const rootRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!rootRef) return\n\n const outsideClickHandler = (event: MouseEvent) => {\n if (\n rootRef.current &&\n (!event.target ||\n !(event.target instanceof Node) ||\n !rootRef.current.contains(event?.target))\n ) {\n dispatchWithMeta(editorView, slashMenuExtension.pluginKey, {\n type: SlashMetaTypes.close,\n })\n }\n }\n\n document.addEventListener('mousedown', outsideClickHandler)\n\n return () => {\n document.removeEventListener('mousedown', outsideClickHandler)\n }\n }, [editorView, rootRef, slashMenuExtension.pluginKey])\n\n const [popperElement, setPopperElement] = useState(null)\n\n const virtualReference = useMemo(() => {\n const domNode = editorView.domAtPos(editorState.selection.to)?.node\n const cursorPosition = editorView.state.selection.to\n const cursorLeft = editorView.coordsAtPos(cursorPosition).left\n\n if (!(domNode instanceof HTMLElement)) return\n\n const { top, height } = domNode.getBoundingClientRect()\n\n return {\n getBoundingClientRect() {\n return {\n top: top,\n right: cursorLeft,\n bottom: top,\n left: cursorLeft,\n width: 0,\n height: height,\n x: cursorLeft,\n y: top,\n toJSON: () =>\n JSON.stringify({\n top: top,\n right: cursorLeft,\n bottom: top,\n left: cursorLeft,\n width: 0,\n height: height,\n x: cursorLeft,\n y: top,\n }),\n }\n },\n }\n }, [editorView, editorState])\n\n const { styles, attributes } = usePopper(virtualReference, popperElement, {\n placement: Placement.bottomStart,\n modifiers: [\n { name: 'flip', enabled: true },\n {\n name: 'preventOverflow',\n },\n ],\n })\n\n const closeMenu = useCallback((config: {\n insertSlash?: boolean\n }) => {\n if (menuState.open) {\n dispatchWithMeta(editorView, slashMenuExtension.pluginKey, {\n type: SlashMetaTypes.close,\n })\n\n\n if (config?.insertSlash) {\n editorView.dispatch(\n editorView.state.tr.insertText('/').setMeta(slashMenuExtension.pluginKey, {\n type: SlashMetaTypes.close,\n }),\n )\n }\n editorView.focus()\n }\n }, [editorView, menuState.open, slashMenuExtension.pluginKey])\n\n return (\n <>\n {menuState.open ? (\n <Container\n // @ts-ignore\n ref={setPopperElement}\n style={{\n ...styles.popper,\n }}\n {...attributes.popper}\n >\n <SlashMenuRoot rootRef={rootRef} commands={commands} closeMenu={closeMenu} />\n </Container>\n ) : null}\n </>\n )\n}\n\nconst Container = styled.div`\n border-radius: 4px;\n border: 1px solid ${(props) => props.theme.slashMenuBorderColor};\n z-index: 1000;\n`\n", "import { PositionerPortal, useCommands, useMultiPositioner } from '@rme-sdk/react'\nimport { useEffect } from 'react'\nimport ActiveCellMenu from './ActiveCellMenu'\nimport TitleBar from './TableBar'\nimport type { PositionerIllustrationProps } from './positioner'\nimport { activeCellColumnAndRowPositioner } from './positioner'\n\nconst MultiPositionerIllustration = ({ positioner }: PositionerIllustrationProps) => {\n const positioners = useMultiPositioner(positioner, [])\n const { forceUpdatePositioners } = useCommands()\n\n useEffect(() => {\n forceUpdatePositioners()\n }, [forceUpdatePositioners])\n\n if (positioners.length === 0) return null\n\n const positionersRender = [TitleBar, ActiveCellMenu]\n\n return (\n <>\n {positioners.map((pos, i) => {\n const Component = positionersRender[i]\n return <Component key={pos.key} positioner={pos} />\n })}\n </>\n )\n}\n\nconst TableToolbar = () => {\n return (\n <>\n <PositionerPortal>\n <MultiPositionerIllustration positioner={activeCellColumnAndRowPositioner} />\n </PositionerPortal>\n </>\n )\n}\n\nexport default TableToolbar\n", "import { useCommands, type UseMultiPositionerReturn } from '@rme-sdk/react'\nimport type { MenuProps } from 'antd'\nimport { Dropdown } from 'antd'\nimport { useTranslation } from 'react-i18next'\n\nconst ActiveCellMenu = (props: ActiveCellMenuProps) => {\n const { positioner } = props\n const commands = useCommands()\n const { t } = useTranslation()\n\n const menuItems: MenuProps['items'] = [\n {\n key: 'insertColumnBefore',\n label: t('table.insertColumnBefore'),\n onClick: commands.addTableColumnBefore,\n },\n {\n key: 'insertColumnAfter',\n label: t('table.insertColumnAfter'),\n onClick: commands.addTableColumnAfter,\n },\n {\n key: 'insertRowBefore',\n label: t('table.insertRowBefore'),\n onClick: commands.addTableRowBefore,\n },\n {\n key: 'insertRowAfter',\n label: t('table.insertRowAfter'),\n onClick: commands.addTableRowAfter,\n },\n {\n key: 'deleteColumn',\n label: t('table.deleteColumn'),\n onClick: commands.deleteTableColumn,\n },\n {\n key: 'deleteRow',\n label: t('table.deleteRow'),\n onClick: commands.deleteTableRow,\n },\n ]\n\n const { ref, key, x, y } = positioner\n\n return (\n <div\n key={key}\n ref={ref}\n style={{\n position: 'absolute',\n left: x,\n top: y,\n width: 20,\n height: 20,\n zIndex: 1,\n }}\n >\n <Dropdown menu={{ items: menuItems }} trigger={['click']}>\n <div\n onMouseDown={(e) => {\n e.preventDefault()\n }}\n style={{ cursor: 'pointer' }}\n >\n <i className=\"ri-equalizer-line\"></i>\n </div>\n </Dropdown>\n </div>\n )\n}\n\nexport default ActiveCellMenu\n\ninterface ActiveCellMenuProps {\n positioner: UseMultiPositionerReturn\n}\n", "import type { UseMultiPositionerReturn } from '@rme-sdk/react'\nimport { useCommands } from '@rme-sdk/react'\nimport styled from 'styled-components'\nimport { Tooltip } from 'zens'\n\nconst Container = styled.div`\n position: absolute;\n color: ${(props) => props.theme.dangerColor};\n`\n\nfunction TableBar(props: TableBarProps) {\n const { positioner } = props\n const commands = useCommands()\n const { ref, key, x, y } = positioner\n\n return (\n <Container\n key={key}\n ref={ref}\n style={{\n left: x - 15 + positioner.width / 2, // selector left: -15px\n top: y + positioner.height,\n width: 20,\n height: 20,\n }}\n onMouseDown={(e) => {\n e.preventDefault()\n commands.deleteTable()\n }}\n >\n <Tooltip title=\"delete\">\n <i className=\"ri-delete-bin-line\" />\n </Tooltip>\n </Container>\n )\n}\n\ninterface TableBarProps {\n positioner: UseMultiPositionerReturn\n}\n\nexport default TableBar\n", "import type { ResolvedPos, Selection } from '@rme-sdk/core-types'\nimport type { PositionerPosition } from '@rme-sdk/extension-positioner'\nimport { Positioner, hasStateChanged, isPositionVisible } from '@rme-sdk/extension-positioner'\nimport type { ActiveCellColumnPositionerData } from '@rme-sdk/extension-tables'\nimport type { FindProsemirrorNodeResult, Shape } from '@rme-sdk/main'\nimport { findParentNodeOfType, isElementDomNode } from '@rme-sdk/main'\n\nexport interface PositionerIllustrationProps {\n positioner: Positioner\n}\n\nfunction findTable(selection: Selection | ResolvedPos): FindProsemirrorNodeResult | undefined {\n return findParentNodeOfType({ selection, types: 'table' })\n}\n\nfunction findCellClosestToPos(\n selection: Selection | ResolvedPos,\n): FindProsemirrorNodeResult | undefined {\n return findParentNodeOfType({ selection, types: ['tableHeaderCell', 'tableCell'] })\n}\n\nconst basePosition = { y: -999_999, x: -999_999, width: 0, height: 0 }\nconst baseRect = {\n ...basePosition,\n left: -999_999,\n top: -999_999,\n bottom: -999_999,\n right: -999_999,\n}\n\nconst defaultAbsolutePosition: PositionerPosition = {\n ...basePosition,\n rect: { ...baseRect, toJSON: () => baseRect as Shape },\n visible: false,\n}\n\nexport const activeCellColumnAndRowPositioner = Positioner.create<ActiveCellColumnPositionerData>({\n hasChanged: hasStateChanged,\n\n getActive(props) {\n const { state, view } = props\n const { selection } = state\n const table = findTable(selection)\n\n if (!table) {\n return Positioner.EMPTY\n }\n\n const cell = findCellClosestToPos(selection)\n if (!cell) {\n return Positioner.EMPTY\n }\n\n const { pos } = cell\n const tableNode = view.nodeDOM(table.pos)\n const node = view.nodeDOM(pos)\n\n if (!isElementDomNode(tableNode) || !isElementDomNode(node)) {\n return Positioner.EMPTY\n }\n\n const tableRect = tableNode.getBoundingClientRect()\n const rect = node.getBoundingClientRect()\n\n return [\n {\n pos: table.pos,\n rect: new DOMRect(tableRect.x, tableRect.y, tableRect.width, tableRect.height),\n },\n {\n pos,\n rect: new DOMRect(rect.x, tableRect.y, rect.width, tableRect.height),\n },\n ]\n },\n\n getID(data) {\n return `${data.pos}`\n },\n\n getPosition(props) {\n const { view, data: cell } = props\n const node = view.nodeDOM(cell.pos)\n\n if (!isElementDomNode(node)) {\n // This should never happen.\n return defaultAbsolutePosition\n }\n\n const rect = node.getBoundingClientRect()\n const editorRect = view.dom.getBoundingClientRect()\n\n const width = rect.width\n\n // The top and left relative to the parent `editorRect`.\n const left = view.dom.scrollLeft + rect.left - editorRect.left\n const top = view.dom.scrollTop + rect.top - editorRect.top\n const height = rect.height\n\n const columnTopRect = new DOMRect(rect.x, rect.y, width, height)\n\n return {\n x: left, // padding: 0 20px\n y: top,\n width,\n height,\n rect: columnTopRect,\n visible: isPositionVisible(columnTopRect, view.dom),\n }\n },\n})\n", "import { CoreIcon, isString } from '@rme-sdk/core'\nimport { FC, JSX, MouseEvent, ReactNode, useCallback } from 'react'\n\nimport styled from 'styled-components'\nimport { Ariakit, Tooltip } from 'zens'\nimport { useCommandOptionValues, UseCommandOptionValuesParams } from '../use-command-option-values'\nimport { CommandButtonIcon } from './command-button-icon'\n\nexport interface CommandButtonProps extends Omit<UseCommandOptionValuesParams, 'active' | 'attrs'> {\n active?: UseCommandOptionValuesParams['active']\n 'aria-label'?: string\n label?: NonNullable<ReactNode>\n commandName: string\n displayShortcut?: boolean\n onSelect: () => void\n onChange?: (e: MouseEvent<HTMLElement>) => void\n icon?: CoreIcon | JSX.Element | string\n attrs?: UseCommandOptionValuesParams['attrs']\n}\n\nexport const CommandButton: FC<CommandButtonProps> = ({\n commandName,\n active = false,\n enabled,\n attrs,\n onSelect,\n onChange,\n icon,\n displayShortcut = true,\n 'aria-label': ariaLabel,\n label,\n ...rest\n}) => {\n const handleChange = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n onSelect()\n onChange?.(e)\n },\n [onSelect, onChange],\n )\n\n const commandOptions = useCommandOptionValues({ commandName, active, enabled, attrs })\n\n let fallbackIcon = null\n\n if (commandOptions.icon) {\n fallbackIcon = isString(commandOptions.icon) ? commandOptions.icon : commandOptions.icon.name\n }\n\n const labelText = ariaLabel ?? commandOptions.label ?? ''\n const tooltipText = label ?? labelText\n const shortcutText =\n displayShortcut && commandOptions.shortcut ? ` (${commandOptions.shortcut})` : ''\n\n return (\n <Tooltip title={`${tooltipText}${shortcutText}`}>\n <Container\n aria-label={labelText}\n disabled={!enabled}\n {...rest}\n value={commandName}\n onClick={handleChange}\n >\n <CommandButtonIcon icon={icon ?? fallbackIcon} />\n </Container>\n </Tooltip>\n )\n}\n\nconst Container = styled(Ariakit.ToolbarItem)`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n border-radius: 0;\n padding: 6px;\n border: none;\n font-size: 1em;\n color: ${props => props.disabled ? props.theme.labelFontColor : props.theme.primaryFontColor};\n background-color: transparent;\n\n &:hover {\n background-color: ${props => props.theme.hoverColor};\n }\n`\n", "import type { CommandDecoratorMessageProps, CommandUiIcon } from '@rme-sdk/core'\nimport type { CoreIcon } from '@rme-sdk/icons'\nimport { useHelpers } from '@rme-sdk/react-core'\nimport { useMemo } from 'react'\n\nimport { t } from 'i18next'\nimport { getCommandOptionValue, RmeCommandDecoratorMessageProps } from './react-component-utils'\n\nexport interface UseCommandOptionValuesParams extends Omit<CommandDecoratorMessageProps, 't'> {\n commandName: string\n}\n\nexport interface UseCommandOptionValuesResult {\n description?: string\n label?: string\n icon?: CoreIcon | CommandUiIcon\n shortcut?: string\n}\n\nexport const useCommandOptionValues = ({\n commandName,\n active,\n enabled,\n attrs,\n}: UseCommandOptionValuesParams): UseCommandOptionValuesResult => {\n const { getCommandOptions } = useHelpers()\n const options = getCommandOptions(commandName)\n\n const { description, label, icon, shortcut } = options || {}\n const commandProps: RmeCommandDecoratorMessageProps = useMemo(\n () => ({ active, attrs, enabled, t }),\n [active, attrs, enabled],\n )\n\n return useMemo(\n () => ({\n description: getCommandOptionValue(description, commandProps),\n label: getCommandOptionValue(label, commandProps),\n icon: getCommandOptionValue(icon, commandProps),\n // TODO\n shortcut: '',\n }),\n [commandProps, description, label, icon],\n )\n}\n", "import {\n CommandDecoratorMessageProps,\n CommandDecoratorShortcut,\n CommandDecoratorValue,\n isArray,\n isEqual,\n isFunction,\n isString,\n ProsemirrorAttributes,\n} from '@rme-sdk/core'\nimport { t } from 'i18next'\n\nexport interface RmeCommandDecoratorMessageProps extends CommandDecoratorMessageProps {\n t: typeof t\n}\n/**\n * Get the value from the option passed into the command.\n */\n\nexport function getCommandOptionValue<Type>(\n value: CommandDecoratorValue<Type> | undefined,\n commandProps: RmeCommandDecoratorMessageProps,\n): Type | undefined {\n return isFunction(value) ? value(commandProps) : value\n}\n\n/**\n * Checks whether the first element in an array is a string and assumes the\n * whole array is a string array.\n */\nfunction isStringArray(array: unknown[]): array is string[] {\n return isString(array[0])\n}\n/**\n * Get the string value from the available UI Shortcut.\n */\n\nexport function getUiShortcutString(\n uiShortcut: CommandDecoratorShortcut,\n attrs: ProsemirrorAttributes,\n): string {\n if (isString(uiShortcut)) {\n return uiShortcut\n }\n\n if (!isArray(uiShortcut)) {\n return uiShortcut.shortcut\n }\n\n if (isStringArray(uiShortcut)) {\n return uiShortcut[0] ?? ''\n }\n\n return (\n (uiShortcut.find((shortcut) => isEqual(shortcut.attrs, attrs)) ?? uiShortcut[0])?.shortcut ?? ''\n )\n}\n", "import { CoreIcon, isString } from '@rme-sdk/core';\nimport { FC, JSX } from 'react';\n\nexport interface CommandButtonIconProps {\n icon: CoreIcon | JSX.Element | null | string;\n}\n\nexport const CommandButtonIcon: FC<CommandButtonIconProps> = ({ icon }) => {\n if (isString(icon)) {\n return <i className={icon}></i>\n }\n\n return icon;\n};\n", "import { FC } from 'react'\nimport styled from 'styled-components'\nimport { Ariakit } from 'zens'\nimport { InsertSeparatorButton } from './command-btns/insert-separator-button'\nimport { RedoButton } from './command-btns/redo-button'\nimport { ToggleBlockquoteButton } from './command-btns/toggle-blockquote-button'\nimport { ToggleBoldButton } from './command-btns/toggle-bold-button'\nimport { ToggleBulletListButton } from './command-btns/toggle-bullet-list-button'\nimport { ToggleCodeBlockButton } from './command-btns/toggle-code-block-button'\nimport { ToggleCodeButton } from './command-btns/toggle-code-button'\nimport { ToggleHeadingButton } from './command-btns/toggle-heading-button'\nimport { ToggleItalicButton } from './command-btns/toggle-italic-button'\nimport { ToggleOrderedListButton } from './command-btns/toggle-ordered-list-button'\nimport { ToggleTaskListButton } from './command-btns/toggle-task-list-button'\nimport { UndoButton } from './command-btns/undo-button'\n\nexport type WysiwygToolbarProps = {\n className?: string\n style?: React.CSSProperties\n prevActions?: React.ReactNode\n nextActions?: React.ReactNode\n}\n\nexport const WysiwygToolbar: FC<WysiwygToolbarProps> = (props) => {\n const { prevActions = null, nextActions = null } = props\n\n return (\n <ToolBar className={props.className} style={props.style}>\n {prevActions}\n <UndoButton />\n <RedoButton />\n <ToolbarSeparator render={<div />} />\n <ToggleHeadingButton />\n <ToggleBoldButton />\n <ToggleItalicButton />\n <ToggleBlockquoteButton />\n <ToggleCodeBlockButton />\n <ToggleCodeButton />\n <InsertSeparatorButton />\n <ToolbarSeparator render={<div />} />\n <ToggleBulletListButton />\n <ToggleOrderedListButton />\n <ToggleTaskListButton />\n {nextActions}\n </ToolBar>\n )\n}\n\nconst ToolBar = styled(Ariakit.Toolbar)`\n display: flex;\n flex-wrap: wrap;\n max-width: 100%;\n align-items: center;\n gap: 0.25rem;\n height: 28px;\n font-size: ${(props) => props.theme.fontSm};\n color: ${(props) => props.theme.primaryFontColor};\n background-color: ${(props) => props.theme.editorToolbarBgColor};\n`\n\nconst ToolbarSeparator = styled(Ariakit.ToolbarSeparator)`\n height: 0.5em;\n margin: 0 0.25em;\n border-right-width: 1px;\n border-right-style: solid;\n border-color: ${(props) => props.theme.labelFontColor};\n`\n", "import { useActive, useCommands } from '@rme-sdk/react-core'\nimport { FC, useCallback } from 'react'\n\nimport { CodeMirrorExtensionAttributes } from '@/editor/extensions/CodeMirror/codemirror-types'\nimport { t } from 'i18next'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface ToggleCodeBlockButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {\n attrs?: Partial<CodeMirrorExtensionAttributes>\n}\n\nexport const InsertSeparatorButton: FC<ToggleCodeBlockButtonProps> = ({ attrs = {}, ...rest }) => {\n const { insertHorizontalRule } = useCommands()\n\n const handleSelect = useCallback(() => {\n if (insertHorizontalRule.enabled(attrs)) {\n insertHorizontalRule(attrs)\n }\n }, [insertHorizontalRule, attrs])\n\n const active = useActive().codeMirror()\n const enabled = insertHorizontalRule.enabled(attrs)\n\n return (\n <CommandButton\n {...rest}\n label={t(\"toolbar.separator\")}\n icon=\"ri-separator\"\n commandName=\"insertHorizontalRule\"\n active={active}\n enabled={enabled}\n attrs={attrs}\n onSelect={handleSelect}\n />\n )\n}\n", "import { HistoryExtension } from '@rme-sdk/extension-history'\nimport { useCommands, useHelpers } from '@rme-sdk/react-core'\nimport { t } from 'i18next'\nimport { FC, useCallback } from 'react'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface RedoButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {}\n\nexport const RedoButton: FC<RedoButtonProps> = (props) => {\n const { redo } = useCommands<HistoryExtension>()\n const { redoDepth } = useHelpers<HistoryExtension>(true)\n\n const handleSelect = useCallback(() => {\n if (redo.enabled()) {\n redo()\n }\n }, [redo])\n\n const enabled = redoDepth() > 0\n\n return (\n <CommandButton\n {...props}\n label={t('toolbar.redo')}\n icon=\"ri-arrow-go-forward-fill\"\n commandName=\"redo\"\n active={false}\n enabled={enabled}\n onSelect={handleSelect}\n />\n )\n}\n", "import { useActive, useCommands } from '@rme-sdk/react-core'\nimport { FC, useCallback } from 'react'\n\nimport { t } from 'i18next'\nimport { LineBlockquoteExtension } from '../../../extensions/BlockQuote'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface ToggleBlockquoteButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {\n}\n\nexport const ToggleBlockquoteButton: FC<ToggleBlockquoteButtonProps> = ({ ...rest }) => {\n const { toggleBlockquote } = useCommands<LineBlockquoteExtension>()\n\n const handleSelect = useCallback(() => {\n if (toggleBlockquote.enabled()) {\n toggleBlockquote()\n }\n }, [toggleBlockquote])\n\n const active = useActive<LineBlockquoteExtension>().blockquote()\n const enabled = toggleBlockquote.enabled()\n\n return (\n <CommandButton\n {...rest}\n label={t('toolbar.blockquote')}\n icon=\"ri-double-quotes-r\"\n commandName=\"toggleBlockquote\"\n active={active}\n enabled={enabled}\n onSelect={handleSelect}\n />\n )\n}\n", "import { BoldExtension } from '@rme-sdk/extension-bold';\nimport { useActive, useCommands } from '@rme-sdk/react-core';\nimport { FC, useCallback } from 'react';\n\nimport { t } from 'i18next';\nimport { CommandButton, CommandButtonProps } from './command-button';\n\nexport interface ToggleBoldButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {}\n\nexport const ToggleBoldButton: FC<ToggleBoldButtonProps> = (props) => {\n const { toggleStrong } = useCommands<BoldExtension>();\n\n const handleSelect = useCallback(() => {\n if (toggleStrong.enabled()) {\n toggleStrong();\n }\n }, [toggleStrong]);\n\n const active = useActive<BoldExtension>().mdStrong();\n const enabled = toggleStrong.enabled();\n\n return (\n <CommandButton\n {...props}\n label={t('toolbar.bold')}\n icon=\"ri-bold\"\n commandName='toggleStrong'\n active={active}\n enabled={enabled}\n onSelect={handleSelect}\n />\n );\n};\n", "import { useActive, useCommands } from '@rme-sdk/react-core'\nimport { FC, useCallback } from 'react'\n\nimport { t } from 'i18next'\nimport { LineListExtension } from '../../../extensions'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface ToggleBulletListButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {}\n\nexport const ToggleBulletListButton: FC<ToggleBulletListButtonProps> = (props) => {\n const { toggleList } = useCommands<LineListExtension>()\n\n const handleSelect = useCallback(() => {\n if (toggleList) {\n toggleList({})\n }\n }, [toggleList])\n\n const active = useActive<LineListExtension>().list()\n const enabled = true\n\n return (\n <CommandButton\n {...props}\n label={t('toolbar.bulletList')}\n icon=\"ri-list-unordered\"\n commandName=\"toggleList\"\n active={active}\n enabled={enabled}\n onSelect={handleSelect}\n />\n )\n}\n", "import { useActive, useCommands } from '@rme-sdk/react-core'\nimport { FC, useCallback } from 'react'\n\nimport { t } from 'i18next'\nimport { LineCodeMirrorExtension } from '../../../extensions/CodeMirror'\nimport { CodeMirrorExtensionAttributes } from '../../../extensions/CodeMirror/codemirror-types'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface ToggleCodeBlockButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {\n attrs?: Partial<CodeMirrorExtensionAttributes>\n}\n\nexport const ToggleCodeBlockButton: FC<ToggleCodeBlockButtonProps> = ({ attrs = {}, ...rest }) => {\n const { createCodeMirror } = useCommands<LineCodeMirrorExtension>()\n\n const handleSelect = useCallback(() => {\n if (createCodeMirror.enabled(attrs)) {\n createCodeMirror(attrs)\n }\n }, [createCodeMirror, attrs])\n\n const active = useActive<LineCodeMirrorExtension>().codeMirror()\n const enabled = createCodeMirror.enabled(attrs)\n\n return (\n <CommandButton\n {...rest}\n label={t('toolbar.codeBlock')}\n icon=\"ri-code-box-line\"\n commandName=\"createCodeMirror\"\n active={active}\n enabled={enabled}\n attrs={attrs}\n onSelect={handleSelect}\n />\n )\n}\n", "import { CodeExtension } from '@rme-sdk/extension-code'\nimport { useActive, useCommands } from '@rme-sdk/react-core'\nimport { FC, useCallback } from 'react'\n\nimport { t } from 'i18next'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface ToggleCodeButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {}\n\nexport const ToggleCodeButton: FC<ToggleCodeButtonProps> = (props) => {\n const { toggleCodeText } = useCommands<CodeExtension>()\n\n const handleSelect = useCallback(() => {\n if (toggleCodeText.enabled()) {\n toggleCodeText()\n }\n }, [toggleCodeText])\n\n const active = useActive<CodeExtension>().mdCodeText()\n const enabled = toggleCodeText.enabled()\n\n return (\n <CommandButton\n {...props}\n label={t('toolbar.codeText')}\n icon=\"ri-code-line\"\n commandName=\"toggleCodeText\"\n active={active}\n enabled={enabled}\n onSelect={handleSelect}\n />\n )\n}\n", "import { HeadingExtension, HeadingExtensionAttributes } from '@rme-sdk/extension-heading';\nimport { useActive, useCommands } from '@rme-sdk/react-core';\nimport { FC, useCallback } from 'react';\n\nimport { t } from 'i18next';\nimport { CommandButton, CommandButtonProps } from './command-button';\n\nexport interface ToggleHeadingButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {\n attrs?: Partial<HeadingExtensionAttributes>;\n}\n\nexport const ToggleHeadingButton: FC<ToggleHeadingButtonProps> = ({ attrs, ...rest }) => {\n const { toggleHeading } = useCommands<HeadingExtension>();\n\n const handleSelect = useCallback(() => {\n if (toggleHeading.enabled(attrs)) {\n toggleHeading(attrs);\n }\n }, [toggleHeading, attrs]);\n\n const active = useActive<HeadingExtension>().heading(attrs);\n const enabled = toggleHeading.enabled(attrs);\n\n return (\n <CommandButton\n {...rest}\n label={t('toolbar.heading')}\n icon=\"ri-heading\"\n commandName='toggleHeading'\n active={active}\n enabled={enabled}\n attrs={attrs}\n onSelect={handleSelect}\n />\n );\n};\n", "import { ItalicExtension } from '@rme-sdk/extension-italic'\nimport { useActive, useCommands } from '@rme-sdk/react-core'\nimport { FC, useCallback } from 'react'\n\nimport { t } from 'i18next'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface ToggleItalicButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {}\n\nexport const ToggleItalicButton: FC<ToggleItalicButtonProps> = (props) => {\n const { toggleEmphasis } = useCommands<ItalicExtension>()\n\n const handleSelect = useCallback(() => {\n if (toggleEmphasis.enabled()) {\n toggleEmphasis()\n }\n }, [toggleEmphasis])\n\n const active = useActive<ItalicExtension>().mdEm()\n const enabled = toggleEmphasis.enabled()\n\n return (\n <CommandButton\n {...props}\n label={t('toolbar.italic')}\n icon=\"ri-italic\"\n commandName=\"toggleEmphasis\"\n active={active}\n enabled={enabled}\n onSelect={handleSelect}\n />\n )\n}\n", "import { useActive, useCommands } from '@rme-sdk/react-core'\nimport { FC, useCallback } from 'react'\n\nimport { t } from 'i18next'\nimport { LineListExtension } from '../../../extensions'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface ToggleOrderedListButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {}\n\nexport const ToggleOrderedListButton: FC<ToggleOrderedListButtonProps> = (props) => {\n const { toggleList } = useCommands<LineListExtension>()\n\n const handleSelect = useCallback(() => {\n if (toggleList) {\n toggleList({\n kind: 'ordered',\n })\n }\n }, [toggleList])\n\n const active = useActive<LineListExtension>().list()\n const enabled = true\n\n return (\n <CommandButton\n {...props}\n label={t('toolbar.orderedList')}\n icon=\"ri-list-ordered\"\n commandName=\"toggleList\"\n active={active}\n enabled={enabled}\n onSelect={handleSelect}\n />\n )\n}\n", "import { useActive, useCommands } from '@rme-sdk/react-core'\nimport { FC, useCallback } from 'react'\n\nimport { t } from 'i18next'\nimport { LineListExtension } from '../../../extensions'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface ToggleTaskListButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {}\n\nexport const ToggleTaskListButton: FC<ToggleTaskListButtonProps> = (props) => {\n const { toggleList } = useCommands<LineListExtension>()\n\n const handleSelect = useCallback(() => {\n if (toggleList) {\n toggleList({\n kind: 'task',\n })\n }\n }, [toggleList])\n\n const active = useActive<LineListExtension>().list()\n const enabled = true\n\n return (\n <CommandButton\n {...props}\n label={t('toolbar.taskList')}\n icon=\"ri-list-check-3\"\n commandName=\"toggleList\"\n active={active}\n enabled={enabled}\n onSelect={handleSelect}\n />\n )\n}\n", "import { HistoryExtension } from '@rme-sdk/extension-history'\nimport { useCommands, useHelpers } from '@rme-sdk/react-core'\nimport { t } from 'i18next'\nimport { FC, useCallback } from 'react'\nimport { CommandButton, CommandButtonProps } from './command-button'\n\nexport interface UndoButtonProps\n extends Omit<CommandButtonProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {}\n\nexport const UndoButton: FC<UndoButtonProps> = (props) => {\n const { undo } = useCommands<HistoryExtension>()\n const { undoDepth } = useHelpers<HistoryExtension>(true)\n\n const handleSelect = useCallback(() => {\n if (undo.enabled()) {\n undo()\n }\n }, [undo])\n\n const enabled = undoDepth() > 0\n\n return (\n <CommandButton\n {...props}\n label={t(\"toolbar.undo\")}\n icon=\"ri-arrow-go-back-fill\"\n commandName=\"undo\"\n active={false}\n enabled={enabled}\n onSelect={handleSelect}\n />\n )\n}\n", "import { useRemirrorContext } from '@rme-sdk/react'\nimport type { CSSProperties, FC } from 'react'\nimport React, { memo } from 'react'\n\nexport interface ITextProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode\n className?: string\n style?: CSSProperties\n}\n\nconst Text: FC<ITextProps> = memo(({ children, ...props }) => {\n const { getRootProps } = useRemirrorContext()\n\n const { key, ...rootProps } = getRootProps()\n\n const style = Object.assign(\n {\n position: 'relative',\n padding: '0 40px'\n },\n props.style,\n )\n\n return (\n <div {...rootProps} spellCheck={false} {...props} style={style}>\n {children}\n </div>\n )\n})\n\nexport default Text\n", "import type { RemirrorManager } from '@rme-sdk/core'\nimport { isExtension } from '@rme-sdk/core'\nimport type { AnyExtension } from '@rme-sdk/main'\nimport type { Node } from '@rme-sdk/pm/model'\nimport { createReactManager } from '@rme-sdk/react'\nimport type { ExtensionsOptions, MarkdownNodeExtension } from '../../extensions'\nimport EditorExtensions from '../../extensions'\nimport { initDocMarks } from '../../extensions/Inline'\nimport type { NodeSerializerSpecs, ParserRule } from '../../transform'\nimport { MarkdownParser, MarkdownSerializer } from '../../transform'\nimport type { DocToString, EditorDelegate, StringToDoc } from '../../types'\n\nfunction isMarkdownNodeExtension(extension: unknown): extension is MarkdownNodeExtension {\n return !!(\n isExtension(extension) &&\n (extension as unknown as MarkdownNodeExtension).fromMarkdown &&\n (extension as unknown as MarkdownNodeExtension).toMarkdown\n )\n}\n\nexport function buildMarkdownParser<Extension extends AnyExtension>(\n manager: RemirrorManager<Extension>,\n) {\n const parserRules: ParserRule[] = []\n for (const extension of manager.extensions) {\n if (isMarkdownNodeExtension(extension)) {\n parserRules.push(...extension.fromMarkdown())\n }\n }\n return new MarkdownParser(manager.schema, parserRules)\n}\n\nexport function buildMarkdownSerializer<Extension extends AnyExtension>(\n manager: RemirrorManager<Extension>,\n) {\n const specs: NodeSerializerSpecs = {}\n for (const extension of manager.extensions) {\n if (isMarkdownNodeExtension(extension)) {\n specs[extension.name] = extension.toMarkdown\n }\n }\n return new MarkdownSerializer(specs)\n}\n\nexport type CreateWysiwygDelegateOptions = ExtensionsOptions\n\nexport const createWysiwygDelegate = (\n options: CreateWysiwygDelegateOptions = {},\n): EditorDelegate<any> => {\n const defaultOverrideShortcutMap = {\n copy: 'mod-c',\n paste: 'mod-v',\n undo: 'mod-z',\n redo: 'mod-shift-z',\n cut: 'mod-x',\n toggleH1: 'mod-1',\n toggleH2: 'mod-2',\n toggleH3: 'mod-3',\n toggleH4: 'mod-4',\n toggleH5: 'mod-5',\n toggleH6: 'mod-6',\n toggleStrong: 'mod-b',\n toggleEmphasis: 'mod-i',\n toggleCodeText: 'mod-e',\n toggleDelete: 'mod-shift-s',\n }\n\n const overrideShortcutMap = {\n ...(options.overrideShortcutMap || {}),\n }\n\n if (!options.disableAllBuildInShortcuts) {\n Object.assign(overrideShortcutMap, defaultOverrideShortcutMap)\n }\n\n // if (overrideShortcutMap?.paste?.toLowerCase() === 'mod-v') {\n delete overrideShortcutMap.paste\n // }\n\n const manager = createReactManager(\n () => {\n return [...EditorExtensions(options)]\n },\n {\n builtin: {\n overrideShortcutMap,\n },\n },\n )\n\n const parser = buildMarkdownParser(manager)\n const serializer = buildMarkdownSerializer(manager)\n\n const stringToDoc: StringToDoc = (content: string) => {\n const doc = parser.parse(content)\n return initDocMarks(doc)\n }\n\n const docToString: DocToString = (doc: Node) => {\n return serializer.serialize(doc)\n }\n\n return {\n view: 'Wysiwyg',\n manager,\n stringToDoc,\n docToString,\n }\n}\n", "import { ThemeProvider as ScThemeProvider } from 'styled-components'\nimport { CreateThemeOptions, changeTheme } from '../codemirror'\nimport { memo, useEffect } from 'react'\nimport { darkTheme, lightTheme } from '../theme'\nimport { changeLng, i18nInit } from '../i18n'\nimport mermaid from 'mermaid'\nimport { eventBus } from '../utils/eventbus'\n\nexport * from './Editor'\n\ntype Props = {\n theme?: {\n mode: 'light' | 'dark'\n /**\n * Some theme variables can be modified through the token attribute in theme.\n */\n token?: Record<string, any>\n /**\n * The sourcode editor theme.\n */\n codemirrorTheme?: CreateThemeOptions\n }\n i18n?: {\n locales?: Record<string, Record<'translation', Record<string, any>>>\n language?: string\n }\n locales?: Record<string, any>\n children?: React.ReactNode\n}\n\nexport const ThemeProvider: React.FC<Props> = memo(({ theme, i18n, children }: Props) => {\n const mode = theme?.mode || 'light'\n\n const defaultThemeToken = mode === 'dark' ? darkTheme.styledConstants : lightTheme.styledConstants\n\n const themeToken = theme?.token ? { ...defaultThemeToken, ...theme.token } : defaultThemeToken\n\n useEffect(() => {\n if (i18n?.locales) {\n i18nInit(i18n.locales).then(() => {\n if (i18n?.language) {\n changeLng(i18n?.language)\n }\n })\n }\n }, [i18n])\n\n useEffect(() => {\n const codemirrorTheme =\n theme?.codemirrorTheme || mode === 'dark'\n ? darkTheme.codemirrorTheme\n : lightTheme.codemirrorTheme\n changeTheme(codemirrorTheme)\n\n mermaid.initialize({\n theme: mode === 'dark' ? 'dark' : 'default',\n })\n\n eventBus.emit('change-theme')\n }, [mode, theme?.codemirrorTheme, changeTheme])\n\n return <ScThemeProvider theme={themeToken}>{children}</ScThemeProvider>\n})\n", "import type { InitOptions } from 'i18next'\nimport i18next from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport EN from './en.json'\n\nexport async function i18nInit(locales: Record<string, any> = {}, options?: InitOptions) {\n await i18next.use(initReactI18next).init({\n resources: {\n en: {\n translation: EN,\n },\n ...locales,\n },\n interpolation: {\n escapeValue: false, // react already safes from xss\n },\n fallbackLng: 'en',\n ...options,\n })\n}\n\nexport function changeLng(lng?: string) {\n return i18next.changeLanguage(lng)\n}\n", "{\n \"common\": {\n \"loading\": \"Loading\",\n \"accept\": \"Accept\"\n },\n \"table\": {\n \"insertColumnAfter\": \"insert column after\",\n \"insertColumnBefore\": \"insert column before\",\n \"insertRowAfter\": \"insert row after\",\n \"insertRowBefore\": \"insert row before\",\n \"deleteColumn\": \"delete column\",\n \"deleteRow\": \"delete row\"\n },\n \"codemirror\": {\n \"searchInputPlaceholder\": \"Input language\",\n \"frontMatterPlaceholder\": \"input yaml front matter\"\n },\n \"ai\": {\n \"generate\": \"Generate Text\",\n \"stop\": \"Stop\",\n \"retry\": \"Retry\",\n \"regenerate\": \"Regenerate\",\n \"preview\": \"Preview\",\n \"error\": \"Error occurred\",\n \"prompt\": \"Prompt\"\n },\n \"toolbar\": {\n \"undo\": \"Undo\",\n \"redo\": \"Redo\",\n \"separator\": \"Insert Separator\",\n \"blockquote\": \"Blockquote\",\n \"bold\": \"Bold\",\n \"italic\": \"Italic\",\n \"codeText\": \"Code Text\",\n \"codeBlock\": \"Code Block\",\n \"heading\": \"Heading\",\n \"bulletList\": \"Bullet List\",\n \"orderedList\": \"Ordered List\",\n \"taskList\": \"Task List\"\n },\n \"slashMenu\": {\n \"searchPlaceholder\": \"Search menu items...\",\n \"noResults\": \"No results\",\n \"toNavigate\": \"to navigate\",\n \"toSelect\": \"to select\",\n \"toCancel\": \"to cancel\"\n }\n}\n", "import { type Node } from '@rme-sdk/pm/model'\nimport { useEffect, useState } from 'react'\nimport { Icon } from 'zens'\nimport { WysiwygThemeWrapper } from '../../theme'\nimport { rmeProsemirrorNodeToHtml } from '../../utils/prosemirrorNodeToHtml'\nimport { EditorProps } from '../Editor'\nimport { createWysiwygDelegate } from '../WysiwygEditor'\n\ninterface PreviewProps {\n doc: Node | string\n delegateOptions?: EditorProps['delegateOptions']\n onError?: (e: Error) => void\n}\n\nexport type HTMLAstNode = {\n attrs: Record<string, any>\n name: string\n type: string\n children?: HTMLAstNode[]\n content?: string\n}\n\nexport const Preview: React.FC<PreviewProps> = (props) => {\n const { doc, delegateOptions } = props\n const [processedHtml, setProcessedHtml] = useState('')\n let targetDoc: PreviewProps['doc'] = doc\n\n if (typeof targetDoc === 'string') {\n targetDoc = createWysiwygDelegate(delegateOptions).stringToDoc(targetDoc)\n }\n\n useEffect(() => {\n rmeProsemirrorNodeToHtml(targetDoc, delegateOptions)\n .then((html) => {\n setProcessedHtml(html)\n })\n .catch((e) => {\n props.onError?.(e)\n console.error(e)\n })\n }, [props.onError])\n\n if (!processedHtml) {\n return (\n <div\n style={{\n width: '100%',\n minHeight: '60px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Icon.Loading3QuartersOutlined spin size={40} />\n </div>\n )\n }\n\n return <WysiwygThemeWrapper dangerouslySetInnerHTML={{ __html: processedHtml }} />\n}\n", "import { prosemirrorNodeToHtml } from '@rme-sdk/main'\nimport { type Node } from '@rme-sdk/pm/model'\n// @ts-ignore\nimport HTML from 'html-parse-stringify'\nimport { normalizeReference } from 'markdown-it/lib/common/utils.mjs'\nimport mermaid from 'mermaid'\nimport { nanoid } from 'nanoid'\nimport { EditorProps } from '../components'\nimport { HTMLAstNode } from '../components/Preview'\n\nexport const handlerByAdditions: Record<\n string,\n {\n checker: (node: HTMLAstNode, delegateOptions: EditorProps['delegateOptions'], referenceDefs?: Map<string, { href: string; title: string }>) => boolean\n handler: (node: HTMLAstNode, delegateOptions: EditorProps['delegateOptions'], referenceDefs?: Map<string, { href: string; title: string }>) => Promise<void>\n }[]\n> = {\n img: [\n {\n checker: (node: HTMLAstNode, delegateOptions: EditorProps['delegateOptions']) => {\n return node.name === 'img' && node.attrs?.src && delegateOptions?.handleViewImgSrcUrl\n },\n handler: async (node: HTMLAstNode, delegateOptions: EditorProps['delegateOptions']) => {\n node.attrs.src = await delegateOptions?.handleViewImgSrcUrl?.(node.attrs.src)\n node.attrs.key = nanoid()\n },\n },\n {\n checker: (node: HTMLAstNode) => {\n return node.name === 'img' && node.attrs?.['data-refer-label']\n },\n handler: async (node: HTMLAstNode, delegateOptions: EditorProps['delegateOptions'], referenceDefs) => {\n const label = node.attrs['data-refer-label']\n const def = referenceDefs?.get(normalizeReference(label))\n if (def?.href) {\n node.attrs.src = def.href\n if (def.title) {\n node.attrs.title = def.title\n }\n }\n if (delegateOptions?.handleViewImgSrcUrl && node.attrs.src) {\n node.attrs.src = await delegateOptions.handleViewImgSrcUrl(node.attrs.src)\n }\n node.attrs.key = nanoid()\n delete node.attrs['data-refer-label']\n },\n },\n ],\n pre: [\n {\n checker: (node: HTMLAstNode) => {\n return node.attrs['data-type'] === 'mermaid'\n },\n handler: async (node: HTMLAstNode, delegateOptions: EditorProps['delegateOptions']) => {\n let textContent = node.children?.[0]?.content || ''\n\n const dom = document.createElement('div')\n dom.innerHTML = textContent\n textContent = dom.textContent || ''\n\n const res = await mermaid.render(\n `mermaid_${previewMermaidRenderCount.count++}`,\n textContent,\n )\n const svgAst = HTML.parse(res.svg)\n\n node.name = 'div'\n node.attrs = {\n key: nanoid(),\n }\n node.children = svgAst\n },\n },\n ],\n}\n\nconst previewMermaidRenderCount = { count: 0 }\n\nexport const rmeProsemirrorNodeToHtml = async (\n doc: Node,\n delegateOptions: EditorProps['delegateOptions'],\n) => {\n const html = prosemirrorNodeToHtml(doc)\n const fullAst = HTML.parse(html)\n const referenceDefs = new Map<string, { href: string; title: string }>()\n for (const child of doc.content.content) {\n if (child.type.name === 'reference_def') {\n let label = ''\n let href = ''\n let title = ''\n for (const contentNode of child.content.content) {\n if (contentNode.type.name === 'reference_label') {\n label = contentNode.textContent || ''\n } else if (contentNode.type.name === 'reference_href') {\n href = contentNode.textContent || ''\n } else if (contentNode.type.name === 'reference_title') {\n title = contentNode.textContent || ''\n }\n }\n if (label && href) {\n referenceDefs.set(normalizeReference(label), { href, title })\n }\n }\n }\n console.log('preview', referenceDefs, fullAst)\n\n const imageLoadTasks: Promise<void>[] = []\n const handleHtmlText = (ast: HTMLAstNode[]) => {\n const handleNode = (node: HTMLAstNode) => {\n if (!node) {\n return\n }\n const handlerByAddition = handlerByAdditions[node.name]\n\n if (handlerByAddition) {\n for (const handler of handlerByAddition) {\n if (handler.checker(node, delegateOptions, referenceDefs)) {\n imageLoadTasks.push(handler.handler(node, delegateOptions, referenceDefs))\n }\n }\n }\n\n if (node.children) {\n handleHtmlText(node.children)\n }\n }\n\n for (let i = 0; i < ast.length; i++) {\n handleNode(ast[i])\n }\n }\n\n handleHtmlText(fullAst)\n\n try {\n await Promise.all(imageLoadTasks)\n return HTML.stringify(fullAst) as string\n } catch (error) {\n return html\n }\n}\n", "import { useCommands, useHelpers, useKeymap, useRemirrorContext } from '@rme-sdk/react'\n\n\nexport {\n useCommands, useHelpers,\n useKeymap,\n useRemirrorContext\n}\n\n", "import type { AnyExtension, RemirrorManager } from '@rme-sdk/core'\nimport type { Node } from '@rme-sdk/pm/model'\nimport type { ReactFrameworkOutput } from '@rme-sdk/react-core'\n\nexport type StringToDoc = (content: string) => Node\nexport type DocToString = (doc: Node) => string\n\nexport type EditorDelegate<E extends AnyExtension = any> = {\n manager: RemirrorManager<E>\n stringToDoc: StringToDoc\n docToString: DocToString\n view: 'SourceCode' | 'Wysiwyg'\n}\n\n/** @public */\nexport interface Note {\n content: string\n deleted: boolean\n}\n\nexport enum EditorViewType {\n WYSIWYG = 'wysiwyg',\n SOURCECODE = 'sourceCode',\n PREVIEW = 'preview',\n}\n\ntype BaseEditorState = {\n mode: EditorViewType\n delegate?: EditorDelegate\n note: Note\n hasUnsavedChanges: boolean\n saveedUndoDepth: number\n loaded: boolean\n}\n\nexport type EditorState = BaseEditorState\n\nexport type EditorContext = ReactFrameworkOutput<Remirror.Extensions>\n"],
|
|
5
|
-
"mappings": "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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAmHxC,CAAC,UAAU,MAAM,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAsJtC,CAAC,UAAU,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
|
|
6
|
-
"names": ["redo", "undo", "html", "keymap", "t", "css", "css", "styled", "css", "extensions", "undo", "redo", "Slice", "memo", "useCallback", "useImperativeHandle", "useMemo", "useRef", "useState", "memo", "useCallback", "useMemo", "useEffect", "useRef", "useRef", "useEffect", "React", "styled", "jsx", "jsx", "key", "CountExtension", "languages", "extension", "findParentNodeOfType", "isElementDomNode", "isTextSelection", "NodeExtension", "nodeInputRule", "setBlockType", "TextSelection", "Decoration", "DecorationSet", "t", "t", "Token", "html", "alt", "key", "Token", "isInlineToken", "t", "rule", "child", "Token", "rule", "t", "Token", "rule", "t", "Token", "rule", "normalizeReference", "Token", "nextLine", "pos", "max", "rule", "findParentNodeOfType", "TextSelection", "TableMap", "TableMap", "Decoration", "key", "source", "target", "key", "document", "findParentNodeOfType", "TableMap", "TableMap", "Decoration", "TextSelection", "findParentNodeOfType", "TableMap", "TextSelection", "t", "useEffect", "useRef", "useState", "styled", "jsx", "jsxs", "useState", "useRef", "useEffect", "jsxs", "jsx", "t", "styled", "jsx", "TextSelection", "extension", "PlainExtension", "DOMParser", "Fragment", "PlainExtension", "html", "DOMParser", "slice", "node", "Fragment", "text", "extension", "EditorView", "keymap", "extension", "PlainExtension", "Selection", "PlainExtension", "extension", "extension", "isTextSelection", "PlainExtension", "Decoration", "DecorationSet", "PlainExtension", "isTextSelection", "Decoration", "DecorationSet", "extension", "extension", "PlainExtension", "TextSelection", "SearchQuery", "PlainExtension", "SearchQuery", "TextSelection", "extension", "PlainExtension", "PlainExtension", "rule", "tr", "convertCommand", "exitCode", "convertCommand", "findParentNodeOfType", "findParentNodeOfType", "convertCommand", "ExtensionTag", "NodeExtension", "TextSelection", "NodeExtension", "ExtensionTag", "TextSelection", "extension", "ExtensionTag", "NodeExtension", "nodeInputRule", "NodeExtension", "ExtensionTag", "nodeInputRule", "extension", "convertCommand", "extension", "NodeExtension", "nodeInputRule", "setBlockType", "TextSelection", "Compartment", "Compartment", "NodeExtension", "convertCommand", "setBlockType", "nodeInputRule", "TextSelection", "extension", "ExtensionTag", "NodeExtension", "extension", "nodeInputRule", "block_names", "history", "redo", "undo", "keymap", "EditorState", "TextSelection", "EditorView", "TextSelection", "EditorView", "EditorState", "history", "keymap", "undo", "redo", "NodeExtension", "ExtensionTag", "nodeInputRule", "block_names", "extension", "cx", "extension", "ExtensionTag", "NodeExtension", "nodeInputRule", "useRef", "memo", "useEffect", "useRef", "useState", "styled", "styled", "css", "jsx", "styled", "css", "jsx", "jsx", "jsxs", "styled", "memo", "useState", "useRef", "useEffect", "jsxs", "jsx", "jsx", "useRef", "jsx", "NodeExtension", "ExtensionTag", "cx", "nodeInputRule", "extension", "ErrorConstant", "extension", "ExtensionTag", "invariant", "isElementDomNode", "NodeExtension", "nodeInputRule", "omitExtraAttributes", "normalizeReference", "useCallback", "useEffect", "useMemo", "useRef", "Popover", "t", "useState", "styled", "Button", "Input", "memo", "useCallback", "useEffect", "useRef", "useState", "styled", "css", "key", "jsx", "useState", "styled", "jsx", "jsxs", "styled", "useState", "_", "Fragment", "jsx", "jsxs", "memo", "useRef", "useState", "t", "jsx", "searchLower", "useEffect", "useCallback", "jsxs", "Fragment", "styled", "css", "jsx", "jsxs", "Container", "styled", "Label", "Input", "Button", "useState", "t", "jsx", "useRef", "node", "useMemo", "normalizeReference", "useEffect", "useCallback", "targetSrc", "Popover", "jsx", "NodeExtension", "ExtensionTag", "isElementDomNode", "omitExtraAttributes", "nodeInputRule", "extension", "invariant", "ErrorConstant", "ErrorConstant", "extension", "ExtensionTag", "getTextSelection", "invariant", "isElementDomNode", "NodeExtension", "nodeInputRule", "omitExtraAttributes", "jsx", "NodeExtension", "createPlaceholder", "pos", "value", "tr", "uploadHandler", "ExtensionTag", "isElementDomNode", "getImageAttributes", "omitExtraAttributes", "getTextSelection", "nodeInputRule", "extension", "getDimensions", "getImageAttributes", "createPlaceholder", "uploadHandler", "invariant", "ErrorConstant", "isTextSelection", "PlainExtension", "Decoration", "DecorationSet", "extension", "location", "TextSelection", "Fragment", "Mark", "Slice", "Step", "StepResult", "Step", "parent", "StepResult", "Slice", "Mark", "Fragment", "node", "TextSelection", "extension", "isTextSelection", "DecorationSet", "Decoration", "PlainExtension", "TextSelection", "PlainExtension", "PlainExtension", "view", "TextSelection", "InputRule", "InputRule", "newAttrs", "key", "convertCommand", "ExtensionTag", "NodeExtension", "NodeExtension", "ExtensionTag", "key", "convertCommand", "token", "extension", "ExtensionTag", "NodeExtension", "nodeInputRule", "omitExtraAttributes", "history", "redo", "undo", "keymap", "EditorState", "Plugin", "TextSelection", "EditorView", "collapseCmd", "NodeExtension", "ExtensionTag", "omitExtraAttributes", "nodeInputRule", "extension", "convertCommand", "extension", "ExtensionTag", "NodeExtension", "nodeInputRule", "setBlockType", "katex", "katex", "NodeExtension", "convertCommand", "setBlockType", "ExtensionTag", "nodeInputRule", "extension", "convertCommand", "extension", "isElementDomNode", "NodeExtension", "nodeInputRule", "setBlockType", "TextSelection", "Compartment", "Compartment", "NodeExtension", "convertCommand", "setBlockType", "isElementDomNode", "nodeInputRule", "TextSelection", "extension", "isHTMLElement", "PlainExtension", "NodeSelection", "TextSelection", "target", "PlainExtension", "NodeSelection", "TextSelection", "isHTMLElement", "extension", "PlainExtension", "Decoration", "DecorationSet", "PlainExtension", "extension", "placeholder", "Decoration", "DecorationSet", "extension", "ExtensionTag", "findParentNodeOfType", "isElementDomNode", "NodeExtension", "nodeInputRule", "Decoration", "DecorationSet", "NodeExtension", "ExtensionTag", "isElementDomNode", "findParentNodeOfType", "DecorationSet", "Decoration", "nodeInputRule", "extension", "extension", "ExtensionTag", "NodeExtension", "NodeExtension", "ExtensionTag", "extension", "TextSelection", "extension", "PlainExtension", "PlainExtension", "extension", "PlainExtension", "extension", "PlainExtension", "extension", "languages", "Selection", "t", "languages", "Selection", "reference", "t", "extensions", "NodeExtension", "isTextSelection", "TextSelection", "setBlockType", "findParentNodeOfType", "isElementDomNode", "t", "nodeInputRule", "DecorationSet", "languages", "Decoration", "extension", "CountExtension", "jsx", "jsxs", "memo", "useMemo", "useCallback", "useRemirrorContext", "useEffect", "ProsemirrorDevTools", "Remirror", "memo", "useCallback", "useEffect", "useMemo", "isHTMLElement", "NodeSelection", "useRemirrorContext", "memo", "styled", "isHTMLElement", "Fragment", "Slice", "NodeSelection", "window", "document", "isHTMLElement", "Slice", "Fragment", "NodeSelection", "jsx", "jsxs", "memo", "useRemirrorContext", "NodeSelection", "isHTMLElement", "key", "Container", "styled", "useExtension", "useRemirrorContext", "useCallback", "useEffect", "useMemo", "useRef", "useState", "styled", "Fragment", "jsx", "useRemirrorContext", "useExtension", "useRef", "useEffect", "useState", "useMemo", "useCallback", "jsx", "Fragment", "Container", "styled", "useCommands", "useEffect", "useTranslation", "jsx", "t", "key", "useCommands", "styled", "jsx", "Container", "key", "findParentNodeOfType", "isElementDomNode", "findTable", "Fragment", "jsx", "useCommands", "useEffect", "isString", "useCallback", "styled", "Tooltip", "useMemo", "t", "isEqual", "isString", "useMemo", "t", "isString", "jsx", "jsx", "useCallback", "isString", "Tooltip", "Container", "styled", "styled", "Ariakit", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "t", "useCommands", "useHelpers", "t", "useCallback", "jsx", "redo", "useCommands", "useHelpers", "useCallback", "t", "useActive", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "useActive", "t", "useActive", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "useActive", "t", "useActive", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "useActive", "t", "useActive", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "useActive", "t", "useActive", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "useActive", "t", "useActive", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "useActive", "t", "useActive", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "useActive", "t", "useActive", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "useActive", "t", "useActive", "useCommands", "useCallback", "t", "jsx", "useCommands", "useCallback", "useActive", "t", "useCommands", "useHelpers", "t", "useCallback", "jsx", "undo", "useCommands", "useHelpers", "useCallback", "t", "jsx", "jsxs", "styled", "Ariakit", "useRemirrorContext", "memo", "jsx", "Text", "key", "Text_default", "createReactManager", "extension", "createReactManager", "jsx", "jsxs", "useMemo", "useCallback", "useEffect", "Remirror", "Text_default", "ProsemirrorDevTools", "memo", "HTML", "nanoid", "jsx", "memo", "useState", "useRef", "useCallback", "Slice", "useImperativeHandle", "html", "useMemo", "memo", "useEffect", "mermaid", "jsx", "memo", "useEffect", "mermaid", "useEffect", "useState", "prosemirrorNodeToHtml", "HTML", "normalizeReference", "mermaid", "nanoid", "html", "jsx", "useState", "useEffect", "html", "useCommands", "useHelpers", "useRemirrorContext", "EditorViewType"]
|
|
7
|
-
}
|