@formulaxjs/tinymce 0.1.1 → 0.1.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.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.global.js +22 -20
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -133,7 +133,7 @@ function mountFormulaXEditorInModal(root, input) {
|
|
|
133
133
|
fontsize: input.options.editor.render?.fontsize ?? 40
|
|
134
134
|
}
|
|
135
135
|
};
|
|
136
|
-
return (0, import_editor3.
|
|
136
|
+
return (0, import_editor3.mountFormulaXEditor)(root, options);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
// src/modal.ts
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/markup.ts","../src/compat.ts","../src/styles.ts","../src/editor-host.ts","../src/modal.ts","../src/plugin.ts"],"sourcesContent":["export {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n createTinyMceFormulaMarkup,\n parseTinyMceFormulaMarkup,\n serializeTinyMceFormulaMarkup,\n getFormulaLatexFromElement,\n findFormulaElement,\n isFormulaElement,\n replaceFormulaElement,\n} from './markup';\n\nexport {\n getTinyMceMajorVersion,\n createTinyMceCompat,\n warnUnsupportedTinyMceVersion,\n} from './compat';\n\nexport {\n registerFormulaXTinyMcePlugin,\n resolveOptions,\n} from './plugin';\n\nexport {\n openFormulaXOverlayModal,\n} from './modal';\n\nexport type {\n FormulaXTinyMceOptions,\n FormulaXModalOptions,\n FormulaXModalOpenOptions,\n RequiredFormulaXTinyMceOptions,\n TinyMceEditorLike,\n TinyMceLike,\n} from './types';\n","import { parseLatex, serializeLatex, type FormulaDoc } from '@formulaxjs/core';\nimport {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n createFormulaElement,\n createFormulaMarkup,\n escapeAttribute,\n escapeHtml,\n findFormulaElement,\n getFormulaLatexFromElement,\n isFormulaElement,\n replaceFormulaElement,\n type CreateFormulaMarkupOptions,\n} from '@formulaxjs/editor';\n\nexport type { CreateFormulaMarkupOptions };\n\nexport function createTinyMceFormulaMarkup(\n latex: string,\n options: CreateFormulaMarkupOptions = {},\n): string {\n return createFormulaMarkup(latex, {\n ...options,\n extraAttributes: {\n ...options.extraAttributes,\n 'data-mce-contenteditable': 'false',\n },\n });\n}\n\r\nexport function parseTinyMceFormulaMarkup(latex: string): FormulaDoc {\r\n return parseLatex(latex);\r\n}\r\n\r\nexport function serializeTinyMceFormulaMarkup(\r\n doc: FormulaDoc,\r\n options: CreateFormulaMarkupOptions = {},\r\n): string {\r\n return createTinyMceFormulaMarkup(serializeLatex(doc), options);\r\n}\r\n\r\nexport function createTinyMceFormulaElement(\n ownerDocument: Document,\n latex: string,\n options: CreateFormulaMarkupOptions = {},\n): HTMLElement | null {\n return createFormulaElement(ownerDocument, latex, {\n ...options,\n extraAttributes: {\n ...options.extraAttributes,\n 'data-mce-contenteditable': 'false',\n },\n });\n}\n\nexport {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n escapeAttribute,\n escapeHtml,\n findFormulaElement,\n getFormulaLatexFromElement,\n isFormulaElement,\n replaceFormulaElement,\n};\n","import type { TinyMceEditorLike, TinyMceLike } from './types';\nimport { findFormulaElement } from './markup';\n\nexport interface TinyMceCompat {\n major: number;\n insertContent: (html: string) => void;\n dispatchEvent: (name: string, detail?: Record<string, unknown>) => void;\n getSelectedFormulaElement: () => HTMLElement | null;\n getEditorDocument: () => Document;\n getEditorWindow: () => Window;\n getEditorBody: () => HTMLElement | null;\n focus: () => void;\n}\n\nexport function getTinyMceMajorVersion(tinymce?: TinyMceLike): number {\n const raw = tinymce?.majorVersion;\n const major = typeof raw === 'string' ? Number.parseInt(raw, 10) : Number(raw);\n return Number.isFinite(major) ? major : 0;\n}\n\nexport function createTinyMceCompat(\n editor: TinyMceEditorLike,\n tinymce?: TinyMceLike,\n): TinyMceCompat {\n const major = getTinyMceMajorVersion(tinymce);\n\n return {\n major,\n\n insertContent(html: string): void {\n editor.insertContent(html);\n },\n\n dispatchEvent(name: string, detail?: Record<string, unknown>): void {\n if (typeof editor.dispatch === 'function') {\n editor.dispatch(name, detail);\n return;\n }\n\n if (typeof editor.fire === 'function') {\n editor.fire(name, detail);\n }\n },\n\n getSelectedFormulaElement(): HTMLElement | null {\n const node = editor.selection?.getNode?.();\n return findFormulaElement(node ?? null);\n },\n\n getEditorDocument(): Document {\n return editor.getDoc?.() ?? document;\n },\n\n getEditorWindow(): Window {\n return editor.getWin?.() ?? window;\n },\n\n getEditorBody(): HTMLElement | null {\n return editor.getBody?.() ?? null;\n },\n\n focus(): void {\n editor.focus?.();\n },\n };\n}\n\nexport function warnUnsupportedTinyMceVersion(tinymce?: TinyMceLike): void {\n const major = getTinyMceMajorVersion(tinymce);\n if (major > 0 && (major < 5 || major >= 9)) {\n console.warn(`[FormulaX] TinyMCE ${major} is not officially supported. Expected >=5 <9.`);\n }\n}\n","import {\n ensureFormulaXModalStyles,\n formulaXModalStyles,\n} from '@formulaxjs/editor';\n\nexport const tinymceStyles = formulaXModalStyles;\n\nexport function ensureTinyMceStyles(doc: Document = document): void {\n ensureFormulaXModalStyles(doc);\n}\n","import {\n mountFormulaXKityEditor,\n type FormulaXKityEditorOptions,\n} from '@formulaxjs/editor';\nimport { serializeSvgForInsertion } from '@formulaxjs/renderer';\nimport type { MountedFormulaXEditor, RequiredFormulaXTinyMceOptions } from './types';\n\nexport interface MountFormulaXEditorOptions {\n initialLatex?: string;\n options: RequiredFormulaXTinyMceOptions;\n}\n\nexport function mountFormulaXEditorInModal(\n root: HTMLElement,\n input: MountFormulaXEditorOptions,\n): MountedFormulaXEditor {\n const options: FormulaXKityEditorOptions = {\n initialLatex: input.initialLatex,\n height: input.options.editor.height ?? '100%',\n autofocus: input.options.editor.autofocus ?? true,\n assets: input.options.editor.assets,\n render: {\n fontsize: input.options.editor.render?.fontsize ?? 40,\n },\n };\n return mountFormulaXKityEditor(root, options);\n}\n\nexport { serializeSvgForInsertion };\n","import type { FormulaXModalOpenOptions, TinyMceEditorLike } from './types';\r\nimport { ensureTinyMceStyles } from './styles';\r\nimport { mountFormulaXEditorInModal } from './editor-host';\r\nimport {\r\n createTinyMceFormulaElement,\r\n createTinyMceFormulaMarkup,\r\n escapeAttribute,\r\n escapeHtml,\r\n getFormulaLatexFromElement,\r\n replaceFormulaElement,\r\n} from './markup';\r\n\r\nexport interface OpenFormulaXModalResult {\r\n close: () => void;\r\n}\r\n\r\nexport function openFormulaXOverlayModal(input: FormulaXModalOpenOptions): OpenFormulaXModalResult {\n ensureTinyMceStyles(document);\n\r\n const { editor, target, options } = input;\r\n const initialLatex = target\r\n ? getFormulaLatexFromElement(target, options.formulaAttributeName)\r\n : input.initialLatex ?? options.initialLatex ?? '';\r\n\r\n const root = document.createElement('div');\n root.className = 'fx-formula-modal-root';\n root.setAttribute('data-formulax-modal', 'true');\n\r\n const isUpdate = Boolean(target);\r\n const submitText = isUpdate ? options.modal.updateText : options.modal.insertText;\r\n const title = options.modal.title || (isUpdate ? 'Edit Formula' : 'Insert Formula');\r\n\r\n root.innerHTML = `\n <div class=\"fx-formula-modal-backdrop\" data-action=\"backdrop\"></div>\n <div class=\"fx-formula-modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${escapeAttribute(title)}\">\n <header class=\"fx-formula-modal__header\">\n <h2 class=\"fx-formula-modal__title\">${escapeHtml(title)}</h2>\n <button class=\"fx-formula-modal__close\" type=\"button\" data-action=\"close\" aria-label=\"Close\">×</button>\n </header>\n <section class=\"fx-formula-modal__body\">\n <div class=\"fx-formula-editor-host\"></div>\n </section>\n <footer class=\"fx-formula-modal__footer\">\n <button class=\"fx-formula-modal__button\" type=\"button\" data-action=\"cancel\">${escapeHtml(options.modal.cancelText)}</button>\n <button class=\"fx-formula-modal__button fx-formula-modal__button--primary\" type=\"button\" data-action=\"submit\">${escapeHtml(submitText)}</button>\n </footer>\n </div>\n `;\n\n document.body.appendChild(root);\n document.body.classList.add('fx-formula-modal-open');\n\n const host = root.querySelector<HTMLElement>('.fx-formula-editor-host');\n if (!host) {\n root.remove();\n throw new Error('[FormulaX] Modal editor host not found.');\n }\r\n\r\n const mounted = mountFormulaXEditorInModal(host, { initialLatex, options });\r\n let closed = false;\r\n\r\n const close = (): void => {\r\n if (closed) return;\r\n closed = true;\r\n\r\n mounted.destroy();\r\n root.removeEventListener('click', onClick);\n document.removeEventListener('keydown', onKeydown, true);\n root.remove();\n document.body.classList.remove('fx-formula-modal-open');\n editor.focus?.();\n };\n\r\n const submit = async (): Promise<void> => {\r\n const latex = await mounted.getLatex();\r\n const renderHtml = mounted.getRenderHtml ? await mounted.getRenderHtml() : undefined;\r\n\r\n runEditorTransaction(editor, () => {\r\n if (target) {\n const next = replaceFormulaElement(target, latex, {\n attributeName: options.formulaAttributeName,\n className: options.formulaClassName,\n cursorStyle: options.cursorStyle,\n renderHtml,\n });\n if (next) {\n moveSelectionAfterNode(editor, next);\n }\n } else {\n insertFormulaElementIntoEditor(\n editor,\n latex,\n options.formulaAttributeName,\n options.formulaClassName,\n options.cursorStyle,\n renderHtml,\n );\n }\n\r\n notifyEditorChanged(editor);\r\n });\r\n\r\n close();\r\n };\r\n\r\n function onClick(event: MouseEvent): void {\r\n const action = (event.target as HTMLElement).closest<HTMLElement>('[data-action]')?.dataset.action;\r\n if (!action) return;\r\n\r\n if (action === 'submit') {\r\n void submit();\r\n return;\r\n }\r\n\r\n if (action === 'cancel' || action === 'close') {\r\n close();\r\n return;\r\n }\r\n\r\n if (action === 'backdrop' && options.modal.closeOnBackdrop) {\r\n close();\r\n }\r\n }\r\n\r\n function onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n close();\r\n }\r\n }\r\n\r\n root.addEventListener('click', onClick);\r\n document.addEventListener('keydown', onKeydown, true);\r\n\r\n queueMicrotask(() => {\r\n mounted.root.focus();\r\n });\r\n\r\n return { close };\r\n}\r\n\r\nfunction runEditorTransaction(editor: TinyMceEditorLike, mutation: () => void): void {\r\n if (typeof editor.undoManager?.transact === 'function') {\r\n editor.undoManager.transact(mutation);\r\n return;\r\n }\r\n\r\n mutation();\r\n editor.undoManager?.add?.();\r\n}\r\n\r\nfunction insertFormulaElementIntoEditor(\n editor: TinyMceEditorLike,\n latex: string,\n attributeName: string,\n className: string,\n cursorStyle: string,\n renderHtml?: string,\n): void {\n const editorDoc = editor.getDoc?.() ?? document;\n const next = createTinyMceFormulaElement(editorDoc, latex, {\n attributeName,\n className,\n cursorStyle,\n renderHtml,\n });\n\r\n if (next && insertNodeAtEditorSelection(editor, next)) {\r\n return;\r\n }\r\n\r\n insertFormulaElementWithPlaceholder(editor, latex, attributeName, className, cursorStyle, renderHtml);\n}\n\r\nfunction insertNodeAtEditorSelection(editor: TinyMceEditorLike, node: HTMLElement): boolean {\r\n const range = getEditorRange(editor);\r\n if (!range || !isRangeInsideEditor(editor, range)) {\r\n return false;\r\n }\r\n\r\n try {\r\n range.deleteContents();\r\n range.insertNode(node);\r\n moveSelectionAfterNode(editor, node);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nfunction getEditorRange(editor: TinyMceEditorLike): Range | null {\r\n try {\r\n return editor.selection?.getRng?.() ?? null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction isRangeInsideEditor(editor: TinyMceEditorLike, range: Range): boolean {\r\n const editorDoc = editor.getDoc?.() ?? document;\r\n if (range.startContainer.ownerDocument !== editorDoc || range.endContainer.ownerDocument !== editorDoc) {\r\n return false;\r\n }\r\n\r\n const body = editor.getBody?.();\r\n if (!body) {\r\n return true;\r\n }\r\n\r\n return body.contains(getRangeContainerElement(range.startContainer))\r\n && body.contains(getRangeContainerElement(range.endContainer));\r\n}\r\n\r\nfunction getRangeContainerElement(node: Node): Node {\r\n return node.nodeType === 1 ? node : node.parentNode ?? node;\r\n}\r\n\r\nfunction moveSelectionAfterNode(editor: TinyMceEditorLike, node: HTMLElement): void {\r\n const doc = node.ownerDocument;\r\n const range = doc.createRange();\r\n range.setStartAfter(node);\r\n range.collapse(true);\r\n\r\n try {\r\n editor.selection?.setRng?.(range);\r\n editor.selection?.collapse?.(false);\r\n } catch {\r\n // Ignore selection restoration failures across TinyMCE versions.\r\n }\r\n}\r\n\r\nfunction insertFormulaElementWithPlaceholder(\n editor: TinyMceEditorLike,\n latex: string,\n attributeName: string,\n className: string,\n cursorStyle: string,\n renderHtml?: string,\n): void {\n const editorDoc = editor.getDoc?.() ?? document;\r\n const marker = `fx-pending-${Math.random().toString(36).slice(2, 10)}`;\r\n editor.insertContent(`<span data-formulax-pending=\"${escapeAttribute(marker)}\"></span>`);\r\n\r\n const placeholder = editorDoc.querySelector<HTMLElement>(`[data-formulax-pending=\"${marker}\"]`);\r\n if (!placeholder) {\r\n const html = createTinyMceFormulaMarkup(latex, {\n attributeName,\n className,\n cursorStyle,\n renderHtml,\n });\n editor.insertContent(html);\r\n return;\r\n }\r\n\r\n const next = createTinyMceFormulaElement(editorDoc, latex, {\n attributeName,\n className,\n cursorStyle,\n renderHtml,\n });\n\r\n if (!next) {\r\n placeholder.remove();\r\n return;\r\n }\r\n\r\n placeholder.replaceWith(next);\r\n moveSelectionAfterNode(editor, next);\r\n}\r\n\r\nfunction notifyEditorChanged(editor: TinyMceEditorLike): void {\r\n editor.nodeChanged?.();\r\n\r\n if (typeof editor.dispatch === 'function') {\r\n editor.dispatch('change');\r\n return;\r\n }\r\n\r\n editor.fire?.('change');\r\n}\r\n","import type {\n FormulaXTinyMceOptions,\n RequiredFormulaXTinyMceOptions,\n TinyMceEditorLike,\n TinyMceLike,\n} from './types';\nimport { createTinyMceCompat, warnUnsupportedTinyMceVersion } from './compat';\nimport { findFormulaElement } from './markup';\nimport { openFormulaXOverlayModal } from './modal';\nimport { ensureTinyMceStyles } from './styles';\n\nconst FORMULAX_SVG_VALID_ELEMENTS = [\n 'svg[class|style|id|xmlns|xmlns:xlink|version|width|height|viewbox|font-size|focusable|role|tabindex|contenteditable|data-formulax|data-formulax-latex|data-latex|aria-hidden|preserveaspectratio]',\n 'defs[id|class|style]',\n 'style[type|media]',\n 'g[id|class|style|transform|fill|stroke|stroke-width|stroke-linecap|stroke-linejoin|opacity|font-family|font-size|font-style|font-weight|data-type|data-flag|data-root]',\n 'path[id|class|style|d|fill|stroke|stroke-width|stroke-linecap|stroke-linejoin|opacity|transform|data-type|data-mce-style]',\n 'use[id|class|style|x|y|width|height|href|xlink:href|transform|fill|stroke|opacity]',\n 'text[id|class|style|x|y|dx|dy|fill|stroke|transform|font-family|font-size|font-style|font-weight|text-anchor|text-rendering|xml:space]',\n 'tspan[id|class|style|x|y|dx|dy|fill|stroke|transform|font-family|font-size|font-style|font-weight|text-anchor]',\n 'line[id|class|style|x1|y1|x2|y2|fill|stroke|stroke-width|stroke-linecap|opacity|transform]',\n 'rect[id|class|style|x|y|width|height|rx|ry|fill|stroke|stroke-width|opacity|transform]',\n 'circle[id|class|style|cx|cy|r|fill|stroke|stroke-width|opacity|transform]',\n 'ellipse[id|class|style|cx|cy|rx|ry|fill|stroke|stroke-width|opacity|transform]',\n 'polygon[id|class|style|points|fill|stroke|stroke-width|opacity|transform]',\n 'polyline[id|class|style|points|fill|stroke|stroke-width|opacity|transform]',\n].join(',');\n\nexport function resolveOptions(options: FormulaXTinyMceOptions = {}): RequiredFormulaXTinyMceOptions {\n return {\r\n pluginName: options.pluginName ?? 'formulax',\r\n buttonName: options.buttonName ?? 'formulax',\r\n menuItemName: options.menuItemName ?? 'formulax',\n toolbarText: options.toolbarText ?? 'FormulaX',\n tooltip: options.tooltip ?? 'Insert formula',\n cursorStyle: options.cursorStyle ?? 'pointer',\n formulaClassName: options.formulaClassName ?? 'formulax-math',\n formulaAttributeName: options.formulaAttributeName ?? 'data-formulax-latex',\n renderMode: options.renderMode ?? 'text',\n initialLatex: options.initialLatex ?? '',\r\n modal: {\r\n title: options.modal?.title ?? 'FormulaX',\r\n insertText: options.modal?.insertText ?? 'Insert',\r\n updateText: options.modal?.updateText ?? 'Update',\r\n cancelText: options.modal?.cancelText ?? 'Cancel',\r\n width: options.modal?.width ?? '1100px',\r\n height: options.modal?.height ?? 'auto',\r\n closeOnBackdrop: options.modal?.closeOnBackdrop ?? true,\r\n },\r\n editor: {\n mode: 'kity',\n height: options.editor?.height ?? '100%',\n autofocus: options.editor?.autofocus ?? true,\n assets: options.editor?.assets ?? {},\n render: {\n fontsize: options.editor?.render?.fontsize ?? 40,\n },\n },\r\n };\r\n}\r\n\r\nexport function registerFormulaXTinyMcePlugin(\r\n tinymce: TinyMceLike,\r\n options: FormulaXTinyMceOptions = {},\r\n): void {\r\n if (!tinymce?.PluginManager?.add) {\r\n throw new Error('[FormulaX] Invalid TinyMCE instance: PluginManager.add is missing.');\r\n }\r\n\r\n warnUnsupportedTinyMceVersion(tinymce);\r\n const resolved = resolveOptions(options);\r\n\r\n tinymce.PluginManager.add(\n resolved.pluginName,\n function FormulaXTinyMcePlugin(editor: TinyMceEditorLike): undefined {\n const compat = createTinyMceCompat(editor, tinymce);\n editor.schema?.addValidElements?.(FORMULAX_SVG_VALID_ELEMENTS);\n\n const open = (target?: HTMLElement | null): void => {\n const resolvedTarget = target ?? compat.getSelectedFormulaElement();\n\n openFormulaXOverlayModal({\n editor,\n target: resolvedTarget,\r\n initialLatex: resolvedTarget ? undefined : resolved.initialLatex,\r\n options: resolved,\r\n });\r\n };\r\n\n editor.addCommand('FormulaXOpen', () => {\n open();\n });\n\r\n editor.ui?.registry?.addButton?.(resolved.buttonName, {\n text: resolved.toolbarText,\n tooltip: resolved.tooltip,\n onAction: () => editor.execCommand('FormulaXOpen'),\n });\n\r\n editor.ui?.registry?.addMenuItem?.(resolved.menuItemName, {\r\n text: resolved.toolbarText,\r\n onAction: () => editor.execCommand('FormulaXOpen'),\r\n });\r\n\n editor.on('init', () => {\n ensureTinyMceStyles(document);\n const editorDoc = editor.getDoc?.();\n if (editorDoc) {\n ensureTinyMceStyles(editorDoc);\n }\n });\n\r\n editor.on('dblclick', (event: unknown) => {\r\n const formula = findFormulaElement((event as MouseEvent).target as Node);\n if (!formula) return;\n (event as Event).preventDefault?.();\n open(formula);\n });\n\r\n editor.on('keydown', (event: unknown) => {\r\n const e = event as KeyboardEvent;\r\n if (e.key !== 'Enter' && e.key !== ' ') return;\n const formula = compat.getSelectedFormulaElement();\n if (!formula) return;\n e.preventDefault?.();\n open(formula);\n });\n\r\n return undefined;\r\n },\r\n );\r\n}\r\n"],"mappings":"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","names":["import_editor","import_editor"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/markup.ts","../src/compat.ts","../src/styles.ts","../src/editor-host.ts","../src/modal.ts","../src/plugin.ts"],"sourcesContent":["export {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n createTinyMceFormulaMarkup,\n parseTinyMceFormulaMarkup,\n serializeTinyMceFormulaMarkup,\n getFormulaLatexFromElement,\n findFormulaElement,\n isFormulaElement,\n replaceFormulaElement,\n} from './markup';\n\nexport {\n getTinyMceMajorVersion,\n createTinyMceCompat,\n warnUnsupportedTinyMceVersion,\n} from './compat';\n\nexport {\n registerFormulaXTinyMcePlugin,\n resolveOptions,\n} from './plugin';\n\nexport {\n openFormulaXOverlayModal,\n} from './modal';\n\nexport type {\n FormulaXTinyMceOptions,\n FormulaXModalOptions,\n FormulaXModalOpenOptions,\n RequiredFormulaXTinyMceOptions,\n TinyMceEditorLike,\n TinyMceLike,\n} from './types';\n","import { parseLatex, serializeLatex, type FormulaDoc } from '@formulaxjs/core';\nimport {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n createFormulaElement,\n createFormulaMarkup,\n escapeAttribute,\n escapeHtml,\n findFormulaElement,\n getFormulaLatexFromElement,\n isFormulaElement,\n replaceFormulaElement,\n type CreateFormulaMarkupOptions,\n} from '@formulaxjs/editor';\n\nexport type { CreateFormulaMarkupOptions };\n\nexport function createTinyMceFormulaMarkup(\n latex: string,\n options: CreateFormulaMarkupOptions = {},\n): string {\n return createFormulaMarkup(latex, {\n ...options,\n extraAttributes: {\n ...options.extraAttributes,\n 'data-mce-contenteditable': 'false',\n },\n });\n}\n\r\nexport function parseTinyMceFormulaMarkup(latex: string): FormulaDoc {\r\n return parseLatex(latex);\r\n}\r\n\r\nexport function serializeTinyMceFormulaMarkup(\r\n doc: FormulaDoc,\r\n options: CreateFormulaMarkupOptions = {},\r\n): string {\r\n return createTinyMceFormulaMarkup(serializeLatex(doc), options);\r\n}\r\n\r\nexport function createTinyMceFormulaElement(\n ownerDocument: Document,\n latex: string,\n options: CreateFormulaMarkupOptions = {},\n): HTMLElement | null {\n return createFormulaElement(ownerDocument, latex, {\n ...options,\n extraAttributes: {\n ...options.extraAttributes,\n 'data-mce-contenteditable': 'false',\n },\n });\n}\n\nexport {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n escapeAttribute,\n escapeHtml,\n findFormulaElement,\n getFormulaLatexFromElement,\n isFormulaElement,\n replaceFormulaElement,\n};\n","import type { TinyMceEditorLike, TinyMceLike } from './types';\nimport { findFormulaElement } from './markup';\n\nexport interface TinyMceCompat {\n major: number;\n insertContent: (html: string) => void;\n dispatchEvent: (name: string, detail?: Record<string, unknown>) => void;\n getSelectedFormulaElement: () => HTMLElement | null;\n getEditorDocument: () => Document;\n getEditorWindow: () => Window;\n getEditorBody: () => HTMLElement | null;\n focus: () => void;\n}\n\nexport function getTinyMceMajorVersion(tinymce?: TinyMceLike): number {\n const raw = tinymce?.majorVersion;\n const major = typeof raw === 'string' ? Number.parseInt(raw, 10) : Number(raw);\n return Number.isFinite(major) ? major : 0;\n}\n\nexport function createTinyMceCompat(\n editor: TinyMceEditorLike,\n tinymce?: TinyMceLike,\n): TinyMceCompat {\n const major = getTinyMceMajorVersion(tinymce);\n\n return {\n major,\n\n insertContent(html: string): void {\n editor.insertContent(html);\n },\n\n dispatchEvent(name: string, detail?: Record<string, unknown>): void {\n if (typeof editor.dispatch === 'function') {\n editor.dispatch(name, detail);\n return;\n }\n\n if (typeof editor.fire === 'function') {\n editor.fire(name, detail);\n }\n },\n\n getSelectedFormulaElement(): HTMLElement | null {\n const node = editor.selection?.getNode?.();\n return findFormulaElement(node ?? null);\n },\n\n getEditorDocument(): Document {\n return editor.getDoc?.() ?? document;\n },\n\n getEditorWindow(): Window {\n return editor.getWin?.() ?? window;\n },\n\n getEditorBody(): HTMLElement | null {\n return editor.getBody?.() ?? null;\n },\n\n focus(): void {\n editor.focus?.();\n },\n };\n}\n\nexport function warnUnsupportedTinyMceVersion(tinymce?: TinyMceLike): void {\n const major = getTinyMceMajorVersion(tinymce);\n if (major > 0 && (major < 5 || major >= 9)) {\n console.warn(`[FormulaX] TinyMCE ${major} is not officially supported. Expected >=5 <9.`);\n }\n}\n","import {\n ensureFormulaXModalStyles,\n formulaXModalStyles,\n} from '@formulaxjs/editor';\n\nexport const tinymceStyles = formulaXModalStyles;\n\nexport function ensureTinyMceStyles(doc: Document = document): void {\n ensureFormulaXModalStyles(doc);\n}\n","import {\n mountFormulaXEditor,\n type FormulaXEditorOptions,\n} from '@formulaxjs/editor';\nimport { serializeSvgForInsertion } from '@formulaxjs/renderer';\nimport type { MountedFormulaXEditor, RequiredFormulaXTinyMceOptions } from './types';\n\nexport interface MountFormulaXEditorOptions {\n initialLatex?: string;\n options: RequiredFormulaXTinyMceOptions;\n}\n\nexport function mountFormulaXEditorInModal(\n root: HTMLElement,\n input: MountFormulaXEditorOptions,\n): MountedFormulaXEditor {\n const options: FormulaXEditorOptions = {\n initialLatex: input.initialLatex,\n height: input.options.editor.height ?? '100%',\n autofocus: input.options.editor.autofocus ?? true,\n assets: input.options.editor.assets,\n render: {\n fontsize: input.options.editor.render?.fontsize ?? 40,\n },\n };\n return mountFormulaXEditor(root, options);\n}\n\nexport { serializeSvgForInsertion };\n","import type { FormulaXModalOpenOptions, TinyMceEditorLike } from './types';\r\nimport { ensureTinyMceStyles } from './styles';\r\nimport { mountFormulaXEditorInModal } from './editor-host';\r\nimport {\r\n createTinyMceFormulaElement,\r\n createTinyMceFormulaMarkup,\r\n escapeAttribute,\r\n escapeHtml,\r\n getFormulaLatexFromElement,\r\n replaceFormulaElement,\r\n} from './markup';\r\n\r\nexport interface OpenFormulaXModalResult {\r\n close: () => void;\r\n}\r\n\r\nexport function openFormulaXOverlayModal(input: FormulaXModalOpenOptions): OpenFormulaXModalResult {\n ensureTinyMceStyles(document);\n\r\n const { editor, target, options } = input;\r\n const initialLatex = target\r\n ? getFormulaLatexFromElement(target, options.formulaAttributeName)\r\n : input.initialLatex ?? options.initialLatex ?? '';\r\n\r\n const root = document.createElement('div');\n root.className = 'fx-formula-modal-root';\n root.setAttribute('data-formulax-modal', 'true');\n\r\n const isUpdate = Boolean(target);\r\n const submitText = isUpdate ? options.modal.updateText : options.modal.insertText;\r\n const title = options.modal.title || (isUpdate ? 'Edit Formula' : 'Insert Formula');\r\n\r\n root.innerHTML = `\n <div class=\"fx-formula-modal-backdrop\" data-action=\"backdrop\"></div>\n <div class=\"fx-formula-modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${escapeAttribute(title)}\">\n <header class=\"fx-formula-modal__header\">\n <h2 class=\"fx-formula-modal__title\">${escapeHtml(title)}</h2>\n <button class=\"fx-formula-modal__close\" type=\"button\" data-action=\"close\" aria-label=\"Close\">×</button>\n </header>\n <section class=\"fx-formula-modal__body\">\n <div class=\"fx-formula-editor-host\"></div>\n </section>\n <footer class=\"fx-formula-modal__footer\">\n <button class=\"fx-formula-modal__button\" type=\"button\" data-action=\"cancel\">${escapeHtml(options.modal.cancelText)}</button>\n <button class=\"fx-formula-modal__button fx-formula-modal__button--primary\" type=\"button\" data-action=\"submit\">${escapeHtml(submitText)}</button>\n </footer>\n </div>\n `;\n\n document.body.appendChild(root);\n document.body.classList.add('fx-formula-modal-open');\n\n const host = root.querySelector<HTMLElement>('.fx-formula-editor-host');\n if (!host) {\n root.remove();\n throw new Error('[FormulaX] Modal editor host not found.');\n }\r\n\r\n const mounted = mountFormulaXEditorInModal(host, { initialLatex, options });\r\n let closed = false;\r\n\r\n const close = (): void => {\r\n if (closed) return;\r\n closed = true;\r\n\r\n mounted.destroy();\r\n root.removeEventListener('click', onClick);\n document.removeEventListener('keydown', onKeydown, true);\n root.remove();\n document.body.classList.remove('fx-formula-modal-open');\n editor.focus?.();\n };\n\r\n const submit = async (): Promise<void> => {\r\n const latex = await mounted.getLatex();\r\n const renderHtml = mounted.getRenderHtml ? await mounted.getRenderHtml() : undefined;\r\n\r\n runEditorTransaction(editor, () => {\r\n if (target) {\n const next = replaceFormulaElement(target, latex, {\n attributeName: options.formulaAttributeName,\n className: options.formulaClassName,\n cursorStyle: options.cursorStyle,\n renderHtml,\n });\n if (next) {\n moveSelectionAfterNode(editor, next);\n }\n } else {\n insertFormulaElementIntoEditor(\n editor,\n latex,\n options.formulaAttributeName,\n options.formulaClassName,\n options.cursorStyle,\n renderHtml,\n );\n }\n\r\n notifyEditorChanged(editor);\r\n });\r\n\r\n close();\r\n };\r\n\r\n function onClick(event: MouseEvent): void {\r\n const action = (event.target as HTMLElement).closest<HTMLElement>('[data-action]')?.dataset.action;\r\n if (!action) return;\r\n\r\n if (action === 'submit') {\r\n void submit();\r\n return;\r\n }\r\n\r\n if (action === 'cancel' || action === 'close') {\r\n close();\r\n return;\r\n }\r\n\r\n if (action === 'backdrop' && options.modal.closeOnBackdrop) {\r\n close();\r\n }\r\n }\r\n\r\n function onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n close();\r\n }\r\n }\r\n\r\n root.addEventListener('click', onClick);\r\n document.addEventListener('keydown', onKeydown, true);\r\n\r\n queueMicrotask(() => {\r\n mounted.root.focus();\r\n });\r\n\r\n return { close };\r\n}\r\n\r\nfunction runEditorTransaction(editor: TinyMceEditorLike, mutation: () => void): void {\r\n if (typeof editor.undoManager?.transact === 'function') {\r\n editor.undoManager.transact(mutation);\r\n return;\r\n }\r\n\r\n mutation();\r\n editor.undoManager?.add?.();\r\n}\r\n\r\nfunction insertFormulaElementIntoEditor(\n editor: TinyMceEditorLike,\n latex: string,\n attributeName: string,\n className: string,\n cursorStyle: string,\n renderHtml?: string,\n): void {\n const editorDoc = editor.getDoc?.() ?? document;\n const next = createTinyMceFormulaElement(editorDoc, latex, {\n attributeName,\n className,\n cursorStyle,\n renderHtml,\n });\n\r\n if (next && insertNodeAtEditorSelection(editor, next)) {\r\n return;\r\n }\r\n\r\n insertFormulaElementWithPlaceholder(editor, latex, attributeName, className, cursorStyle, renderHtml);\n}\n\r\nfunction insertNodeAtEditorSelection(editor: TinyMceEditorLike, node: HTMLElement): boolean {\r\n const range = getEditorRange(editor);\r\n if (!range || !isRangeInsideEditor(editor, range)) {\r\n return false;\r\n }\r\n\r\n try {\r\n range.deleteContents();\r\n range.insertNode(node);\r\n moveSelectionAfterNode(editor, node);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nfunction getEditorRange(editor: TinyMceEditorLike): Range | null {\r\n try {\r\n return editor.selection?.getRng?.() ?? null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction isRangeInsideEditor(editor: TinyMceEditorLike, range: Range): boolean {\r\n const editorDoc = editor.getDoc?.() ?? document;\r\n if (range.startContainer.ownerDocument !== editorDoc || range.endContainer.ownerDocument !== editorDoc) {\r\n return false;\r\n }\r\n\r\n const body = editor.getBody?.();\r\n if (!body) {\r\n return true;\r\n }\r\n\r\n return body.contains(getRangeContainerElement(range.startContainer))\r\n && body.contains(getRangeContainerElement(range.endContainer));\r\n}\r\n\r\nfunction getRangeContainerElement(node: Node): Node {\r\n return node.nodeType === 1 ? node : node.parentNode ?? node;\r\n}\r\n\r\nfunction moveSelectionAfterNode(editor: TinyMceEditorLike, node: HTMLElement): void {\r\n const doc = node.ownerDocument;\r\n const range = doc.createRange();\r\n range.setStartAfter(node);\r\n range.collapse(true);\r\n\r\n try {\r\n editor.selection?.setRng?.(range);\r\n editor.selection?.collapse?.(false);\r\n } catch {\r\n // Ignore selection restoration failures across TinyMCE versions.\r\n }\r\n}\r\n\r\nfunction insertFormulaElementWithPlaceholder(\n editor: TinyMceEditorLike,\n latex: string,\n attributeName: string,\n className: string,\n cursorStyle: string,\n renderHtml?: string,\n): void {\n const editorDoc = editor.getDoc?.() ?? document;\r\n const marker = `fx-pending-${Math.random().toString(36).slice(2, 10)}`;\r\n editor.insertContent(`<span data-formulax-pending=\"${escapeAttribute(marker)}\"></span>`);\r\n\r\n const placeholder = editorDoc.querySelector<HTMLElement>(`[data-formulax-pending=\"${marker}\"]`);\r\n if (!placeholder) {\r\n const html = createTinyMceFormulaMarkup(latex, {\n attributeName,\n className,\n cursorStyle,\n renderHtml,\n });\n editor.insertContent(html);\r\n return;\r\n }\r\n\r\n const next = createTinyMceFormulaElement(editorDoc, latex, {\n attributeName,\n className,\n cursorStyle,\n renderHtml,\n });\n\r\n if (!next) {\r\n placeholder.remove();\r\n return;\r\n }\r\n\r\n placeholder.replaceWith(next);\r\n moveSelectionAfterNode(editor, next);\r\n}\r\n\r\nfunction notifyEditorChanged(editor: TinyMceEditorLike): void {\r\n editor.nodeChanged?.();\r\n\r\n if (typeof editor.dispatch === 'function') {\r\n editor.dispatch('change');\r\n return;\r\n }\r\n\r\n editor.fire?.('change');\r\n}\r\n","import type {\n FormulaXTinyMceOptions,\n RequiredFormulaXTinyMceOptions,\n TinyMceEditorLike,\n TinyMceLike,\n} from './types';\nimport { createTinyMceCompat, warnUnsupportedTinyMceVersion } from './compat';\nimport { findFormulaElement } from './markup';\nimport { openFormulaXOverlayModal } from './modal';\nimport { ensureTinyMceStyles } from './styles';\n\nconst FORMULAX_SVG_VALID_ELEMENTS = [\n 'svg[class|style|id|xmlns|xmlns:xlink|version|width|height|viewbox|font-size|focusable|role|tabindex|contenteditable|data-formulax|data-formulax-latex|data-latex|aria-hidden|preserveaspectratio]',\n 'defs[id|class|style]',\n 'style[type|media]',\n 'g[id|class|style|transform|fill|stroke|stroke-width|stroke-linecap|stroke-linejoin|opacity|font-family|font-size|font-style|font-weight|data-type|data-flag|data-root]',\n 'path[id|class|style|d|fill|stroke|stroke-width|stroke-linecap|stroke-linejoin|opacity|transform|data-type|data-mce-style]',\n 'use[id|class|style|x|y|width|height|href|xlink:href|transform|fill|stroke|opacity]',\n 'text[id|class|style|x|y|dx|dy|fill|stroke|transform|font-family|font-size|font-style|font-weight|text-anchor|text-rendering|xml:space]',\n 'tspan[id|class|style|x|y|dx|dy|fill|stroke|transform|font-family|font-size|font-style|font-weight|text-anchor]',\n 'line[id|class|style|x1|y1|x2|y2|fill|stroke|stroke-width|stroke-linecap|opacity|transform]',\n 'rect[id|class|style|x|y|width|height|rx|ry|fill|stroke|stroke-width|opacity|transform]',\n 'circle[id|class|style|cx|cy|r|fill|stroke|stroke-width|opacity|transform]',\n 'ellipse[id|class|style|cx|cy|rx|ry|fill|stroke|stroke-width|opacity|transform]',\n 'polygon[id|class|style|points|fill|stroke|stroke-width|opacity|transform]',\n 'polyline[id|class|style|points|fill|stroke|stroke-width|opacity|transform]',\n].join(',');\n\nexport function resolveOptions(options: FormulaXTinyMceOptions = {}): RequiredFormulaXTinyMceOptions {\n return {\r\n pluginName: options.pluginName ?? 'formulax',\r\n buttonName: options.buttonName ?? 'formulax',\r\n menuItemName: options.menuItemName ?? 'formulax',\n toolbarText: options.toolbarText ?? 'FormulaX',\n tooltip: options.tooltip ?? 'Insert formula',\n cursorStyle: options.cursorStyle ?? 'pointer',\n formulaClassName: options.formulaClassName ?? 'formulax-math',\n formulaAttributeName: options.formulaAttributeName ?? 'data-formulax-latex',\n renderMode: options.renderMode ?? 'text',\n initialLatex: options.initialLatex ?? '',\r\n modal: {\r\n title: options.modal?.title ?? 'FormulaX',\r\n insertText: options.modal?.insertText ?? 'Insert',\r\n updateText: options.modal?.updateText ?? 'Update',\r\n cancelText: options.modal?.cancelText ?? 'Cancel',\r\n width: options.modal?.width ?? '1100px',\r\n height: options.modal?.height ?? 'auto',\r\n closeOnBackdrop: options.modal?.closeOnBackdrop ?? true,\r\n },\r\n editor: {\n mode: 'kity',\n height: options.editor?.height ?? '100%',\n autofocus: options.editor?.autofocus ?? true,\n assets: options.editor?.assets ?? {},\n render: {\n fontsize: options.editor?.render?.fontsize ?? 40,\n },\n },\r\n };\r\n}\r\n\r\nexport function registerFormulaXTinyMcePlugin(\r\n tinymce: TinyMceLike,\r\n options: FormulaXTinyMceOptions = {},\r\n): void {\r\n if (!tinymce?.PluginManager?.add) {\r\n throw new Error('[FormulaX] Invalid TinyMCE instance: PluginManager.add is missing.');\r\n }\r\n\r\n warnUnsupportedTinyMceVersion(tinymce);\r\n const resolved = resolveOptions(options);\r\n\r\n tinymce.PluginManager.add(\n resolved.pluginName,\n function FormulaXTinyMcePlugin(editor: TinyMceEditorLike): undefined {\n const compat = createTinyMceCompat(editor, tinymce);\n editor.schema?.addValidElements?.(FORMULAX_SVG_VALID_ELEMENTS);\n\n const open = (target?: HTMLElement | null): void => {\n const resolvedTarget = target ?? compat.getSelectedFormulaElement();\n\n openFormulaXOverlayModal({\n editor,\n target: resolvedTarget,\r\n initialLatex: resolvedTarget ? undefined : resolved.initialLatex,\r\n options: resolved,\r\n });\r\n };\r\n\n editor.addCommand('FormulaXOpen', () => {\n open();\n });\n\r\n editor.ui?.registry?.addButton?.(resolved.buttonName, {\n text: resolved.toolbarText,\n tooltip: resolved.tooltip,\n onAction: () => editor.execCommand('FormulaXOpen'),\n });\n\r\n editor.ui?.registry?.addMenuItem?.(resolved.menuItemName, {\r\n text: resolved.toolbarText,\r\n onAction: () => editor.execCommand('FormulaXOpen'),\r\n });\r\n\n editor.on('init', () => {\n ensureTinyMceStyles(document);\n const editorDoc = editor.getDoc?.();\n if (editorDoc) {\n ensureTinyMceStyles(editorDoc);\n }\n });\n\r\n editor.on('dblclick', (event: unknown) => {\r\n const formula = findFormulaElement((event as MouseEvent).target as Node);\n if (!formula) return;\n (event as Event).preventDefault?.();\n open(formula);\n });\n\r\n editor.on('keydown', (event: unknown) => {\r\n const e = event as KeyboardEvent;\r\n if (e.key !== 'Enter' && e.key !== ' ') return;\n const formula = compat.getSelectedFormulaElement();\n if (!formula) return;\n e.preventDefault?.();\n open(formula);\n });\n\r\n return undefined;\r\n },\r\n );\r\n}\r\n"],"mappings":"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","names":["import_editor","import_editor"]}
|
package/dist/index.global.js
CHANGED
|
@@ -4919,28 +4919,30 @@ var FormulaX = (() => {
|
|
|
4919
4919
|
|
|
4920
4920
|
// ../kity-runtime/src/vendor/legacy-ui-utils.ts
|
|
4921
4921
|
function createLegacyUiUtils() {
|
|
4922
|
-
return
|
|
4923
|
-
ele: createElement,
|
|
4924
|
-
getRectBox,
|
|
4925
|
-
on(target, type, fn) {
|
|
4926
|
-
addEvent(target, type, fn);
|
|
4927
|
-
return this;
|
|
4928
|
-
},
|
|
4929
|
-
delegate(target, selector, type, fn) {
|
|
4930
|
-
delegateEvent(target, selector, type, fn);
|
|
4931
|
-
return this;
|
|
4932
|
-
},
|
|
4933
|
-
publish(topic, ...args) {
|
|
4934
|
-
publish(topic, ...args);
|
|
4935
|
-
},
|
|
4936
|
-
subscribe,
|
|
4937
|
-
getClassList
|
|
4938
|
-
};
|
|
4922
|
+
return legacyUiUtils;
|
|
4939
4923
|
}
|
|
4924
|
+
var legacyUiUtils;
|
|
4940
4925
|
var init_legacy_ui_utils = __esm({
|
|
4941
4926
|
"../kity-runtime/src/vendor/legacy-ui-utils.ts"() {
|
|
4942
4927
|
"use strict";
|
|
4943
4928
|
init_dom_utils();
|
|
4929
|
+
legacyUiUtils = {
|
|
4930
|
+
ele: createElement,
|
|
4931
|
+
getRectBox,
|
|
4932
|
+
on(target, type, fn) {
|
|
4933
|
+
addEvent(target, type, fn);
|
|
4934
|
+
return this;
|
|
4935
|
+
},
|
|
4936
|
+
delegate(target, selector, type, fn) {
|
|
4937
|
+
delegateEvent(target, selector, type, fn);
|
|
4938
|
+
return this;
|
|
4939
|
+
},
|
|
4940
|
+
publish(topic, ...args) {
|
|
4941
|
+
publish(topic, ...args);
|
|
4942
|
+
},
|
|
4943
|
+
subscribe,
|
|
4944
|
+
getClassList
|
|
4945
|
+
};
|
|
4944
4946
|
}
|
|
4945
4947
|
});
|
|
4946
4948
|
|
|
@@ -23840,7 +23842,7 @@ var FormulaX = (() => {
|
|
|
23840
23842
|
kity: runtimeWindow.kity,
|
|
23841
23843
|
otherPosition: legacyOtherPosition,
|
|
23842
23844
|
uiDef: legacyUiDef,
|
|
23843
|
-
uiUtils:
|
|
23845
|
+
uiUtils: legacyUiUtils
|
|
23844
23846
|
};
|
|
23845
23847
|
}
|
|
23846
23848
|
async function ensureKityRuntime() {
|
|
@@ -24303,7 +24305,7 @@ var FormulaX = (() => {
|
|
|
24303
24305
|
style.textContent = formulaXModalStyles;
|
|
24304
24306
|
doc2.head.appendChild(style);
|
|
24305
24307
|
}
|
|
24306
|
-
function
|
|
24308
|
+
function mountFormulaXEditor(root2, options = {}) {
|
|
24307
24309
|
let destroyed = false;
|
|
24308
24310
|
let latestLatex = options.initialLatex ?? "";
|
|
24309
24311
|
let handle = null;
|
|
@@ -24802,7 +24804,7 @@ var FormulaX = (() => {
|
|
|
24802
24804
|
fontsize: input.options.editor.render?.fontsize ?? 40
|
|
24803
24805
|
}
|
|
24804
24806
|
};
|
|
24805
|
-
return
|
|
24807
|
+
return mountFormulaXEditor(root2, options);
|
|
24806
24808
|
}
|
|
24807
24809
|
|
|
24808
24810
|
// src/modal.ts
|