@formulaxjs/tinymce 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -18
- package/README.zh-CN.md +20 -18
- package/dist/base.css +47 -0
- package/dist/canvg-runtime-UR3JNX5Q.js +2759 -0
- package/dist/canvg-runtime-UR3JNX5Q.js.map +1 -0
- package/dist/chunk-4NHESKRD.js +3407 -0
- package/dist/chunk-4NHESKRD.js.map +1 -0
- package/dist/images/scrollbar/custom/bar-bg.png +0 -0
- package/dist/images/scrollbar/custom/bar.png +0 -0
- package/dist/images/scrollbar/custom/bg.png +0 -0
- package/dist/images/scrollbar/custom/bottom.png +0 -0
- package/dist/images/scrollbar/custom/btn.png +0 -0
- package/dist/images/scrollbar/custom/down.png +0 -0
- package/dist/images/scrollbar/custom/top.png +0 -0
- package/dist/images/scrollbar/custom/up.png +0 -0
- package/dist/images/scrollbar/edit/bar-bg.png +0 -0
- package/dist/images/scrollbar/edit/bar-left.png +0 -0
- package/dist/images/scrollbar/edit/bar-right.png +0 -0
- package/dist/images/scrollbar/edit/thumb-bg.png +0 -0
- package/dist/images/scrollbar/edit/thumb-left.png +0 -0
- package/dist/images/scrollbar/edit/thumb-right.png +0 -0
- package/dist/images/toolbar/btn.png +0 -0
- package/dist/index.cjs +24136 -128
- package/dist/index.cjs.map +1 -1
- package/dist/index.global.js +162 -156
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +3762 -21
- package/dist/index.js.map +1 -1
- package/dist/install-XGCSWTLU.js +5464 -0
- package/dist/install-XGCSWTLU.js.map +1 -0
- package/dist/install-XVTKACEN.js +1349 -0
- package/dist/install-XVTKACEN.js.map +1 -0
- package/dist/other.png +0 -0
- package/dist/scrollbar.css +78 -0
- package/dist/start-CRRRBVTN.js +4926 -0
- package/dist/start-CRRRBVTN.js.map +1 -0
- package/dist/ui.css +625 -0
- package/package.json +9 -4
- /package/dist/{KF_AMS_BB-5QF7FUSO.woff → KF_AMS_BB.woff} +0 -0
- /package/dist/{KF_AMS_CAL-NXRNLAZN.woff → KF_AMS_CAL.woff} +0 -0
- /package/dist/{KF_AMS_FRAK-CO33WWN4.woff → KF_AMS_FRAK.woff} +0 -0
- /package/dist/{KF_AMS_MAIN-25QJVAWY.woff → KF_AMS_MAIN.woff} +0 -0
- /package/dist/{KF_AMS_ROMAN-243BR7HH.woff → KF_AMS_ROMAN.woff} +0 -0
- /package/dist/{btn-5DANP6JY.png → btn.png} +0 -0
- /package/dist/{editor-JT5KLVXX.css → editor.css} +0 -0
- /package/dist/{other-OMWJFGL5.png → images/toolbar/other.png} +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/markup.ts","../src/compat.ts","../src/plugin.ts","../src/modal.ts","../src/styles.ts","../src/editor-host.ts"],"sourcesContent":["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/renderer';\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 type {\n FormulaXTinyMceOptions,\n RequiredFormulaXTinyMceOptions,\n TinyMceEditorLike,\n TinyMceLike,\n} from './types';\nimport { scheduleFormulaXEditorPreload } from '@formulaxjs/editor';\nimport { createKityFormulaRenderer } from '@formulaxjs/renderer-kity';\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 initialLatex: options.initialLatex ?? '',\n renderer: options.renderer ?? createKityFormulaRenderer({\n fontSize: options.editor?.render?.fontsize ?? 40,\n height: options.editor?.height ?? '100%',\n assets: options.editor?.assets ?? {},\n }),\n preload: options.preload ?? 'idle',\n modal: {\n title: options.modal?.title ?? 'FormulaX',\n insertText: options.modal?.insertText ?? 'Insert',\n updateText: options.modal?.updateText ?? 'Update',\n cancelText: options.modal?.cancelText ?? 'Cancel',\n width: options.modal?.width ?? '1100px',\r\n height: options.modal?.height ?? 'auto',\r\n closeOnBackdrop: options.modal?.closeOnBackdrop ?? true,\n },\n editor: {\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 let preloadCleanup: (() => void) | null = null;\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 preloadCleanup = scheduleFormulaXEditorPreload(\n resolved.preload,\n editor.getBody?.() ?? null,\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) => {\n const e = event as KeyboardEvent;\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\n editor.on('remove', () => {\n preloadCleanup?.();\n preloadCleanup = null;\n });\n\n return undefined;\n },\n );\r\n}\r\n","import type { FormulaXModalOpenOptions, TinyMceEditorLike } from './types';\nimport {\n clearFormulaXPerfMarks,\n markFormulaXPerf,\n measureFormulaXPerf,\n recordFormulaXPerfPoint,\n renderFormulaXEditorLoadingState,\n waitForFormulaXAnimationFrame,\n} from '@formulaxjs/editor';\nimport { ensureTinyMceStyles } from './styles';\nimport { mountFormulaXEditorInModal } from './editor-host';\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 recordFormulaXPerfPoint('fx:modal:open:start');\n const modalOpenStart = markFormulaXPerf('fx:modal:open:start:scope');\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 const modalDomReadyMark = markFormulaXPerf('fx:modal:dom-ready');\n measureFormulaXPerf('fx:modal:dom-ready', modalOpenStart, modalDomReadyMark);\n clearFormulaXPerfMarks(modalDomReadyMark);\n\n const host = root.querySelector<HTMLElement>('.fx-formula-editor-host');\n if (!host) {\n root.remove();\n clearFormulaXPerfMarks(modalOpenStart);\n throw new Error('[FormulaX] Modal editor host not found.');\n }\n\n renderFormulaXEditorLoadingState(host);\n let closed = false;\n let mounted: ReturnType<typeof mountFormulaXEditorInModal> | null = null;\n\n const mountedPromise = waitForFormulaXAnimationFrame()\n .then(() => {\n if (closed) {\n clearFormulaXPerfMarks(modalOpenStart);\n return null;\n }\n\n const mountStartMark = markFormulaXPerf('fx:modal:editor-mount-start');\n measureFormulaXPerf('fx:modal:editor-mount-start', modalOpenStart, mountStartMark);\n clearFormulaXPerfMarks(mountStartMark);\n\n const nextMounted = mountFormulaXEditorInModal(host, { initialLatex, options });\n mounted = nextMounted;\n\n const mountedMark = markFormulaXPerf('fx:modal:editor-mounted');\n measureFormulaXPerf('fx:modal:editor-mounted', modalOpenStart, mountedMark);\n clearFormulaXPerfMarks(mountedMark, modalOpenStart);\n\n queueMicrotask(() => {\n if (!closed) {\n nextMounted.root.focus();\n }\n });\n\n return nextMounted;\n })\n .catch((error) => {\n clearFormulaXPerfMarks(modalOpenStart);\n throw error;\n });\n\n const close = (): void => {\n if (closed) return;\n closed = true;\n\n mounted?.destroy();\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\n const submit = async (): Promise<void> => {\n const activeMounted = mounted ?? await mountedPromise;\n if (!activeMounted) {\n return;\n }\n\n const latex = await activeMounted.getLatex();\n const renderHtml = latex.trim()\n ? (await options.renderer.renderLatex(latex, {\n fontSize: options.editor.render?.fontsize ?? 40,\n className: options.formulaClassName,\n })).html\n : undefined;\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\n root.addEventListener('click', onClick);\n document.addEventListener('keydown', onKeydown, true);\n\n return { close };\n}\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 {\n ensureFormulaXBaseStyles,\n} from '@formulaxjs/renderer';\nimport {\n ensureFormulaXModalStyles,\n formulaXModalStyles,\n} from '@formulaxjs/editor';\n\nexport const tinymceStyles = formulaXModalStyles;\n\nexport function ensureTinyMceStyles(doc: Document = document): void {\n ensureFormulaXBaseStyles(doc);\n ensureFormulaXModalStyles(doc);\n}\n","import {\n mountFormulaXEditor,\n type FormulaXEditorOptions,\n} from '@formulaxjs/editor';\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"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/markup.ts","../src/compat.ts","../../kity-runtime/src/vendor/char-position.ts","../../kity-runtime/src/vendor/legacy-common.ts","../../kity-runtime/src/kity/class-system.ts","../../kity-runtime/src/kity/geometry.ts","../../kity-runtime/src/kity/graphics.ts","../../kity-runtime/src/kity/index.ts","../../kity-runtime/src/perf.ts","../../kity-runtime/src/create-editor.ts","../src/plugin.ts","../src/modal.ts","../src/styles.ts","../src/editor-host.ts"],"sourcesContent":["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/renderer';\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","export const legacyCharPosition = {\r\n \"\\\\pm\": {\r\n \"x\": 5,\r\n \"y\": 0\r\n },\r\n \"\\\\infty\": {\r\n \"x\": 42,\r\n \"y\": 0\r\n },\r\n \"=\": {\r\n \"x\": 79,\r\n \"y\": 0\r\n },\r\n \"\\\\sim\": {\r\n \"x\": 116,\r\n \"y\": 0\r\n },\r\n \"\\\\times\": {\r\n \"x\": 153,\r\n \"y\": 0\r\n },\r\n \"\\\\div\": {\r\n \"x\": 190,\r\n \"y\": 0\r\n },\r\n \"!\": {\r\n \"x\": 227,\r\n \"y\": 0\r\n },\r\n \"<\": {\r\n \"x\": 264,\r\n \"y\": 0\r\n },\r\n \"\\\\ll\": {\r\n \"x\": 301,\r\n \"y\": 0\r\n },\r\n \">\": {\r\n \"x\": 338,\r\n \"y\": 0\r\n },\r\n \"\\\\gg\": {\r\n \"x\": 375,\r\n \"y\": 0\r\n },\r\n \"\\\\leq\": {\r\n \"x\": 412,\r\n \"y\": 0\r\n },\r\n \"\\\\geq\": {\r\n \"x\": 449,\r\n \"y\": 0\r\n },\r\n \"\\\\mp\": {\r\n \"x\": 486,\r\n \"y\": 0\r\n },\r\n \"\\\\cong\": {\r\n \"x\": 523,\r\n \"y\": 0\r\n },\r\n \"\\\\equiv\": {\r\n \"x\": 560,\r\n \"y\": 0\r\n },\r\n \"\\\\propto\": {\r\n \"x\": 597,\r\n \"y\": 0\r\n },\r\n \"\\\\approx\": {\r\n \"x\": 634,\r\n \"y\": 0\r\n },\r\n \"\\\\forall\": {\r\n \"x\": 671,\r\n \"y\": 0\r\n },\r\n \"\\\\partial\": {\r\n \"x\": 708,\r\n \"y\": 0\r\n },\r\n \"\\\\surd\": {\r\n \"x\": 745,\r\n \"y\": 0\r\n },\r\n \"\\\\cup\": {\r\n \"x\": 782,\r\n \"y\": 0\r\n },\r\n \"\\\\cap\": {\r\n \"x\": 819,\r\n \"y\": 0\r\n },\r\n \"\\\\varnothing\": {\r\n \"x\": 856,\r\n \"y\": 0\r\n },\r\n \"%\": {\r\n \"x\": 893,\r\n \"y\": 0\r\n },\r\n \"\\\\circ\": {\r\n \"x\": 930,\r\n \"y\": 0\r\n },\r\n \"\\\\exists\": {\r\n \"x\": 967,\r\n \"y\": 0\r\n },\r\n \"\\\\nexists\": {\r\n \"x\": 1004,\r\n \"y\": 0\r\n },\r\n \"\\\\in\": {\r\n \"x\": 1041,\r\n \"y\": 0\r\n },\r\n \"\\\\ni\": {\r\n \"x\": 1078,\r\n \"y\": 0\r\n },\r\n \"\\\\gets\": {\r\n \"x\": 5,\r\n \"y\": 37\r\n },\r\n \"\\\\uparrow\": {\r\n \"x\": 42,\r\n \"y\": 37\r\n },\r\n \"\\\\to\": {\r\n \"x\": 79,\r\n \"y\": 37\r\n },\r\n \"\\\\downarrow\": {\r\n \"x\": 116,\r\n \"y\": 37\r\n },\r\n \"\\\\leftrightarrow\": {\r\n \"x\": 153,\r\n \"y\": 37\r\n },\r\n \"\\\\therefore\": {\r\n \"x\": 190,\r\n \"y\": 37\r\n },\r\n \"\\\\because\": {\r\n \"x\": 227,\r\n \"y\": 37\r\n },\r\n \"+\": {\r\n \"x\": 264,\r\n \"y\": 37\r\n },\r\n \"-\": {\r\n \"x\": 301,\r\n \"y\": 37\r\n },\r\n \"\\\\neg\": {\r\n \"x\": 338,\r\n \"y\": 37\r\n },\r\n \"\\\\ast\": {\r\n \"x\": 375,\r\n \"y\": 37\r\n },\r\n \"\\\\cdot\": {\r\n \"x\": 412,\r\n \"y\": 37\r\n },\r\n \"\\\\vdots\": {\r\n \"x\": 449,\r\n \"y\": 37\r\n },\r\n \"\\\\ddots\": {\r\n \"x\": 486,\r\n \"y\": 37\r\n },\r\n \"\\\\aleph\": {\r\n \"x\": 523,\r\n \"y\": 37\r\n },\r\n \"\\\\beth\": {\r\n \"x\": 560,\r\n \"y\": 37\r\n },\r\n \"\\\\blacksquare\": {\r\n \"x\": 597,\r\n \"y\": 37\r\n },\r\n \"\\\\alpha\": {\r\n \"x\": 634,\r\n \"y\": 37\r\n },\r\n \"\\\\beta\": {\r\n \"x\": 671,\r\n \"y\": 37\r\n },\r\n \"\\\\gamma\": {\r\n \"x\": 708,\r\n \"y\": 37\r\n },\r\n \"\\\\delta\": {\r\n \"x\": 745,\r\n \"y\": 37\r\n },\r\n \"\\\\epsilon\": {\r\n \"x\": 782,\r\n \"y\": 37\r\n },\r\n \"\\\\zeta\": {\r\n \"x\": 819,\r\n \"y\": 37\r\n },\r\n \"\\\\eta\": {\r\n \"x\": 856,\r\n \"y\": 37\r\n },\r\n \"\\\\theta\": {\r\n \"x\": 893,\r\n \"y\": 37\r\n },\r\n \"\\\\iota\": {\r\n \"x\": 930,\r\n \"y\": 37\r\n },\r\n \"\\\\kappa\": {\r\n \"x\": 967,\r\n \"y\": 37\r\n },\r\n \"\\\\lambda\": {\r\n \"x\": 1004,\r\n \"y\": 37\r\n },\r\n \"\\\\mu\": {\r\n \"x\": 1041,\r\n \"y\": 37\r\n },\r\n \"\\\\nu\": {\r\n \"x\": 1078,\r\n \"y\": 37\r\n },\r\n \"\\\\xi\": {\r\n \"x\": 5,\r\n \"y\": 74\r\n },\r\n \"\\\\omicron\": {\r\n \"x\": 42,\r\n \"y\": 74\r\n },\r\n \"\\\\pi\": {\r\n \"x\": 79,\r\n \"y\": 74\r\n },\r\n \"\\\\rho\": {\r\n \"x\": 116,\r\n \"y\": 74\r\n },\r\n \"\\\\sigma\": {\r\n \"x\": 153,\r\n \"y\": 74\r\n },\r\n \"\\\\tau\": {\r\n \"x\": 190,\r\n \"y\": 74\r\n },\r\n \"\\\\upsilon\": {\r\n \"x\": 227,\r\n \"y\": 74\r\n },\r\n \"\\\\phi\": {\r\n \"x\": 264,\r\n \"y\": 74\r\n },\r\n \"\\\\chi\": {\r\n \"x\": 301,\r\n \"y\": 74\r\n },\r\n \"\\\\psi\": {\r\n \"x\": 338,\r\n \"y\": 74\r\n },\r\n \"\\\\omega\": {\r\n \"x\": 375,\r\n \"y\": 74\r\n },\r\n \"\\\\Alpha\": {\r\n \"x\": 412,\r\n \"y\": 74\r\n },\r\n \"\\\\Beta\": {\r\n \"x\": 449,\r\n \"y\": 74\r\n },\r\n \"\\\\Gamma\": {\r\n \"x\": 486,\r\n \"y\": 74\r\n },\r\n \"\\\\Delta\": {\r\n \"x\": 523,\r\n \"y\": 74\r\n },\r\n \"\\\\Epsilon\": {\r\n \"x\": 560,\r\n \"y\": 74\r\n },\r\n \"\\\\Zeta\": {\r\n \"x\": 597,\r\n \"y\": 74\r\n },\r\n \"\\\\Eta\": {\r\n \"x\": 634,\r\n \"y\": 74\r\n },\r\n \"\\\\Theta\": {\r\n \"x\": 671,\r\n \"y\": 74\r\n },\r\n \"\\\\Iota\": {\r\n \"x\": 708,\r\n \"y\": 74\r\n },\r\n \"\\\\Kappa\": {\r\n \"x\": 745,\r\n \"y\": 74\r\n },\r\n \"\\\\Lambda\": {\r\n \"x\": 782,\r\n \"y\": 74\r\n },\r\n \"\\\\Mu\": {\r\n \"x\": 819,\r\n \"y\": 74\r\n },\r\n \"\\\\Nu\": {\r\n \"x\": 856,\r\n \"y\": 74\r\n },\r\n \"\\\\Xi\": {\r\n \"x\": 893,\r\n \"y\": 74\r\n },\r\n \"\\\\Omicron\": {\r\n \"x\": 930,\r\n \"y\": 74\r\n },\r\n \"\\\\Pi\": {\r\n \"x\": 967,\r\n \"y\": 74\r\n },\r\n \"\\\\Rho\": {\r\n \"x\": 1004,\r\n \"y\": 74\r\n },\r\n \"\\\\Sigma\": {\r\n \"x\": 1041,\r\n \"y\": 74\r\n },\r\n \"\\\\Tau\": {\r\n \"x\": 1078,\r\n \"y\": 74\r\n },\r\n \"\\\\Upsilon\": {\r\n \"x\": 5,\r\n \"y\": 111\r\n },\r\n \"\\\\Phi\": {\r\n \"x\": 42,\r\n \"y\": 111\r\n },\r\n \"\\\\Chi\": {\r\n \"x\": 79,\r\n \"y\": 111\r\n },\r\n \"\\\\Psi\": {\r\n \"x\": 116,\r\n \"y\": 111\r\n },\r\n \"\\\\Omega\": {\r\n \"x\": 153,\r\n \"y\": 111\r\n },\r\n \"\\\\digamma\": {\r\n \"x\": 190,\r\n \"y\": 111\r\n },\r\n \"\\\\varepsilon\": {\r\n \"x\": 227,\r\n \"y\": 111\r\n },\r\n \"\\\\varkappa\": {\r\n \"x\": 264,\r\n \"y\": 111\r\n },\r\n \"\\\\varphi\": {\r\n \"x\": 301,\r\n \"y\": 111\r\n },\r\n \"\\\\varpi\": {\r\n \"x\": 338,\r\n \"y\": 111\r\n },\r\n \"\\\\varrho\": {\r\n \"x\": 375,\r\n \"y\": 111\r\n },\r\n \"\\\\varsigma\": {\r\n \"x\": 412,\r\n \"y\": 111\r\n },\r\n \"\\\\vartheta\": {\r\n \"x\": 449,\r\n \"y\": 111\r\n },\r\n \"\\\\neq\": {\r\n \"x\": 486,\r\n \"y\": 111\r\n },\r\n \"\\\\nless\": {\r\n \"x\": 523,\r\n \"y\": 111\r\n },\r\n \"\\\\ngtr\": {\r\n \"x\": 560,\r\n \"y\": 111\r\n },\r\n \"\\\\nleq\": {\r\n \"x\": 597,\r\n \"y\": 111\r\n },\r\n \"\\\\ngeq\": {\r\n \"x\": 634,\r\n \"y\": 111\r\n },\r\n \"\\\\nsim\": {\r\n \"x\": 671,\r\n \"y\": 111\r\n },\r\n \"\\\\lneqq\": {\r\n \"x\": 708,\r\n \"y\": 111\r\n },\r\n \"\\\\gneqq\": {\r\n \"x\": 745,\r\n \"y\": 111\r\n },\r\n \"\\\\nprec\": {\r\n \"x\": 782,\r\n \"y\": 111\r\n },\r\n \"\\\\nsucc\": {\r\n \"x\": 819,\r\n \"y\": 111\r\n },\r\n \"\\\\notin\": {\r\n \"x\": 856,\r\n \"y\": 111\r\n },\r\n \"\\\\nsubseteq\": {\r\n \"x\": 893,\r\n \"y\": 111\r\n },\r\n \"\\\\nsupseteq\": {\r\n \"x\": 930,\r\n \"y\": 111\r\n },\r\n \"\\\\subsetneq\": {\r\n \"x\": 967,\r\n \"y\": 111\r\n },\r\n \"\\\\supsetneq\": {\r\n \"x\": 1004,\r\n \"y\": 111\r\n },\r\n \"\\\\lnsim\": {\r\n \"x\": 1041,\r\n \"y\": 111\r\n },\r\n \"\\\\gnsim\": {\r\n \"x\": 1078,\r\n \"y\": 111\r\n },\r\n \"\\\\precnsim\": {\r\n \"x\": 5,\r\n \"y\": 148\r\n },\r\n \"\\\\succnsim\": {\r\n \"x\": 42,\r\n \"y\": 148\r\n },\r\n \"\\\\ntriangleleft\": {\r\n \"x\": 79,\r\n \"y\": 148\r\n },\r\n \"\\\\ntriangleright\": {\r\n \"x\": 116,\r\n \"y\": 148\r\n },\r\n \"\\\\ntrianglelefteq\": {\r\n \"x\": 153,\r\n \"y\": 148\r\n },\r\n \"\\\\ntrianglerighteq\": {\r\n \"x\": 190,\r\n \"y\": 148\r\n },\r\n \"\\\\nmid\": {\r\n \"x\": 227,\r\n \"y\": 148\r\n },\r\n \"\\\\nparallel\": {\r\n \"x\": 264,\r\n \"y\": 148\r\n },\r\n \"\\\\nvdash\": {\r\n \"x\": 301,\r\n \"y\": 148\r\n },\r\n \"\\\\nVdash\": {\r\n \"x\": 338,\r\n \"y\": 148\r\n },\r\n \"\\\\nvDash\": {\r\n \"x\": 375,\r\n \"y\": 148\r\n },\r\n \"\\\\nVDash\": {\r\n \"x\": 412,\r\n \"y\": 148\r\n },\r\n \"\\\\daleth\": {\r\n \"x\": 449,\r\n \"y\": 148\r\n },\r\n \"\\\\gimel\": {\r\n \"x\": 486,\r\n \"y\": 148\r\n },\r\n \"\\\\complement\": {\r\n \"x\": 523,\r\n \"y\": 148\r\n },\r\n \"\\\\ell\": {\r\n \"x\": 560,\r\n \"y\": 148\r\n },\r\n \"\\\\eth\": {\r\n \"x\": 597,\r\n \"y\": 148\r\n },\r\n \"\\\\hbar\": {\r\n \"x\": 634,\r\n \"y\": 148\r\n },\r\n \"\\\\hslash\": {\r\n \"x\": 671,\r\n \"y\": 148\r\n },\r\n \"\\\\mho\": {\r\n \"x\": 708,\r\n \"y\": 148\r\n },\r\n \"\\\\wp\": {\r\n \"x\": 745,\r\n \"y\": 148\r\n },\r\n \"\\\\circledS\": {\r\n \"x\": 782,\r\n \"y\": 148\r\n },\r\n \"\\\\Bbbk\": {\r\n \"x\": 819,\r\n \"y\": 148\r\n },\r\n \"\\\\Finv\": {\r\n \"x\": 856,\r\n \"y\": 148\r\n },\r\n \"\\\\Game\": {\r\n \"x\": 893,\r\n \"y\": 148\r\n },\r\n \"\\\\Im\": {\r\n \"x\": 930,\r\n \"y\": 148\r\n },\r\n \"\\\\Re\": {\r\n \"x\": 967,\r\n \"y\": 148\r\n },\r\n \"\\\\updownarrow\": {\r\n \"x\": 1004,\r\n \"y\": 148\r\n },\r\n \"\\\\Leftarrow\": {\r\n \"x\": 1041,\r\n \"y\": 148\r\n },\r\n \"\\\\Rightarrow\": {\r\n \"x\": 1078,\r\n \"y\": 148\r\n },\r\n \"\\\\Uparrow\": {\r\n \"x\": 5,\r\n \"y\": 185\r\n },\r\n \"\\\\Downarrow\": {\r\n \"x\": 42,\r\n \"y\": 185\r\n },\r\n \"\\\\Leftrightarrow\": {\r\n \"x\": 79,\r\n \"y\": 185\r\n },\r\n \"\\\\Updownarrow\": {\r\n \"x\": 116,\r\n \"y\": 185\r\n },\r\n \"\\\\longleftarrow\": {\r\n \"x\": 153,\r\n \"y\": 185\r\n },\r\n \"\\\\longrightarrow\": {\r\n \"x\": 190,\r\n \"y\": 185\r\n },\r\n \"\\\\longleftrightarrow\": {\r\n \"x\": 227,\r\n \"y\": 185\r\n },\r\n \"\\\\Longleftarrow\": {\r\n \"x\": 264,\r\n \"y\": 185\r\n },\r\n \"\\\\Longrightarrow\": {\r\n \"x\": 301,\r\n \"y\": 185\r\n },\r\n \"\\\\Longleftrightarrow\": {\r\n \"x\": 338,\r\n \"y\": 185\r\n },\r\n \"\\\\nearrow\": {\r\n \"x\": 375,\r\n \"y\": 185\r\n },\r\n \"\\\\nwarrow\": {\r\n \"x\": 412,\r\n \"y\": 185\r\n },\r\n \"\\\\searrow\": {\r\n \"x\": 449,\r\n \"y\": 185\r\n },\r\n \"\\\\swarrow\": {\r\n \"x\": 486,\r\n \"y\": 185\r\n },\r\n \"\\\\nleftarrow\": {\r\n \"x\": 523,\r\n \"y\": 185\r\n },\r\n \"\\\\nrightarrow\": {\r\n \"x\": 560,\r\n \"y\": 185\r\n },\r\n \"\\\\nLeftarrow\": {\r\n \"x\": 597,\r\n \"y\": 185\r\n },\r\n \"\\\\nRightarrow\": {\r\n \"x\": 634,\r\n \"y\": 185\r\n },\r\n \"\\\\nLeftrightarrow\": {\r\n \"x\": 671,\r\n \"y\": 185\r\n },\r\n \"\\\\leftharpoonup\": {\r\n \"x\": 708,\r\n \"y\": 185\r\n },\r\n \"\\\\leftharpoondown\": {\r\n \"x\": 745,\r\n \"y\": 185\r\n },\r\n \"\\\\rightharpoonup\": {\r\n \"x\": 782,\r\n \"y\": 185\r\n },\r\n \"\\\\rightharpoondown\": {\r\n \"x\": 819,\r\n \"y\": 185\r\n },\r\n \"\\\\upharpoonleft\": {\r\n \"x\": 856,\r\n \"y\": 185\r\n },\r\n \"\\\\upharpoonright\": {\r\n \"x\": 893,\r\n \"y\": 185\r\n },\r\n \"\\\\downharpoonleft\": {\r\n \"x\": 930,\r\n \"y\": 185\r\n },\r\n \"\\\\downharpoonright\": {\r\n \"x\": 967,\r\n \"y\": 185\r\n },\r\n \"\\\\leftrightharpoons\": {\r\n \"x\": 1004,\r\n \"y\": 185\r\n },\r\n \"\\\\rightleftharpoons\": {\r\n \"x\": 1041,\r\n \"y\": 185\r\n },\r\n \"\\\\leftleftarrows\": {\r\n \"x\": 1078,\r\n \"y\": 185\r\n },\r\n \"\\\\rightrightarrows\": {\r\n \"x\": 5,\r\n \"y\": 222\r\n },\r\n \"\\\\upuparrows\": {\r\n \"x\": 42,\r\n \"y\": 222\r\n },\r\n \"\\\\downdownarrows\": {\r\n \"x\": 79,\r\n \"y\": 222\r\n },\r\n \"\\\\leftrightarrows\": {\r\n \"x\": 116,\r\n \"y\": 222\r\n },\r\n \"\\\\rightleftarrows\": {\r\n \"x\": 153,\r\n \"y\": 222\r\n },\r\n \"\\\\looparrowleft\": {\r\n \"x\": 190,\r\n \"y\": 222\r\n },\r\n \"\\\\looparrowright\": {\r\n \"x\": 227,\r\n \"y\": 222\r\n },\r\n \"\\\\leftarrowtail\": {\r\n \"x\": 264,\r\n \"y\": 222\r\n },\r\n \"\\\\rightarrowtail\": {\r\n \"x\": 301,\r\n \"y\": 222\r\n },\r\n \"\\\\Lsh\": {\r\n \"x\": 338,\r\n \"y\": 222\r\n },\r\n \"\\\\Rsh\": {\r\n \"x\": 375,\r\n \"y\": 222\r\n },\r\n \"\\\\Lleftarrow\": {\r\n \"x\": 412,\r\n \"y\": 222\r\n },\r\n \"\\\\Rrightarrow\": {\r\n \"x\": 449,\r\n \"y\": 222\r\n },\r\n \"\\\\curvearrowleft\": {\r\n \"x\": 486,\r\n \"y\": 222\r\n },\r\n \"\\\\curvearrowright\": {\r\n \"x\": 523,\r\n \"y\": 222\r\n },\r\n \"\\\\circlearrowleft\": {\r\n \"x\": 560,\r\n \"y\": 222\r\n },\r\n \"\\\\circlearrowright\": {\r\n \"x\": 597,\r\n \"y\": 222\r\n },\r\n \"\\\\multimap\": {\r\n \"x\": 634,\r\n \"y\": 222\r\n },\r\n \"\\\\leftrightsquigarrow\": {\r\n \"x\": 671,\r\n \"y\": 222\r\n },\r\n \"\\\\twoheadleftarrow\": {\r\n \"x\": 708,\r\n \"y\": 222\r\n },\r\n \"\\\\twoheadrightarrow\": {\r\n \"x\": 745,\r\n \"y\": 222\r\n },\r\n \"\\\\rightsquigarrow\": {\r\n \"x\": 782,\r\n \"y\": 222\r\n },\r\n \"\\\\mathcal{A}\": {\r\n \"x\": 819,\r\n \"y\": 222\r\n },\r\n \"\\\\mathcal{B}\": {\r\n \"x\": 856,\r\n \"y\": 222\r\n },\r\n \"\\\\mathcal{C}\": {\r\n \"x\": 893,\r\n \"y\": 222\r\n },\r\n \"\\\\mathcal{D}\": {\r\n \"x\": 930,\r\n \"y\": 222\r\n },\r\n \"\\\\mathcal{E}\": {\r\n \"x\": 967,\r\n \"y\": 222\r\n },\r\n \"\\\\mathcal{F}\": {\r\n \"x\": 1004,\r\n \"y\": 222\r\n },\r\n \"\\\\mathcal{G}\": {\r\n \"x\": 1041,\r\n \"y\": 222\r\n },\r\n \"\\\\mathcal{H}\": {\r\n \"x\": 1078,\r\n \"y\": 222\r\n },\r\n \"\\\\mathcal{I}\": {\r\n \"x\": 5,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{J}\": {\r\n \"x\": 42,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{K}\": {\r\n \"x\": 79,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{L}\": {\r\n \"x\": 116,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{M}\": {\r\n \"x\": 153,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{N}\": {\r\n \"x\": 190,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{O}\": {\r\n \"x\": 227,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{P}\": {\r\n \"x\": 264,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{Q}\": {\r\n \"x\": 301,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{R}\": {\r\n \"x\": 338,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{S}\": {\r\n \"x\": 375,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{T}\": {\r\n \"x\": 412,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{U}\": {\r\n \"x\": 449,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{V}\": {\r\n \"x\": 486,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{W}\": {\r\n \"x\": 523,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{X}\": {\r\n \"x\": 560,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{Y}\": {\r\n \"x\": 597,\r\n \"y\": 259\r\n },\r\n \"\\\\mathcal{Z}\": {\r\n \"x\": 634,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{A}\": {\r\n \"x\": 671,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{B}\": {\r\n \"x\": 708,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{C}\": {\r\n \"x\": 745,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{D}\": {\r\n \"x\": 782,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{E}\": {\r\n \"x\": 819,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{F}\": {\r\n \"x\": 856,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{G}\": {\r\n \"x\": 893,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{H}\": {\r\n \"x\": 930,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{I}\": {\r\n \"x\": 967,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{J}\": {\r\n \"x\": 1004,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{K}\": {\r\n \"x\": 1041,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{L}\": {\r\n \"x\": 1078,\r\n \"y\": 259\r\n },\r\n \"\\\\mathfrak{M}\": {\r\n \"x\": 5,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{N}\": {\r\n \"x\": 42,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{O}\": {\r\n \"x\": 79,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{P}\": {\r\n \"x\": 116,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{Q}\": {\r\n \"x\": 153,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{R}\": {\r\n \"x\": 190,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{S}\": {\r\n \"x\": 227,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{T}\": {\r\n \"x\": 264,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{U}\": {\r\n \"x\": 301,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{V}\": {\r\n \"x\": 338,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{W}\": {\r\n \"x\": 375,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{X}\": {\r\n \"x\": 412,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{Y}\": {\r\n \"x\": 449,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{Z}\": {\r\n \"x\": 486,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{a}\": {\r\n \"x\": 523,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{b}\": {\r\n \"x\": 560,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{c}\": {\r\n \"x\": 597,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{d}\": {\r\n \"x\": 634,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{e}\": {\r\n \"x\": 671,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{f}\": {\r\n \"x\": 708,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{g}\": {\r\n \"x\": 745,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{h}\": {\r\n \"x\": 782,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{i}\": {\r\n \"x\": 819,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{j}\": {\r\n \"x\": 856,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{k}\": {\r\n \"x\": 893,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{l}\": {\r\n \"x\": 930,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{m}\": {\r\n \"x\": 967,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{n}\": {\r\n \"x\": 1004,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{o}\": {\r\n \"x\": 1041,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{p}\": {\r\n \"x\": 1078,\r\n \"y\": 296\r\n },\r\n \"\\\\mathfrak{q}\": {\r\n \"x\": 5,\r\n \"y\": 333\r\n },\r\n \"\\\\mathfrak{r}\": {\r\n \"x\": 42,\r\n \"y\": 333\r\n },\r\n \"\\\\mathfrak{s}\": {\r\n \"x\": 79,\r\n \"y\": 333\r\n },\r\n \"\\\\mathfrak{t}\": {\r\n \"x\": 116,\r\n \"y\": 333\r\n },\r\n \"\\\\mathfrak{u}\": {\r\n \"x\": 153,\r\n \"y\": 333\r\n },\r\n \"\\\\mathfrak{v}\": {\r\n \"x\": 190,\r\n \"y\": 333\r\n },\r\n \"\\\\mathfrak{w}\": {\r\n \"x\": 227,\r\n \"y\": 333\r\n },\r\n \"\\\\mathfrak{x}\": {\r\n \"x\": 264,\r\n \"y\": 333\r\n },\r\n \"\\\\mathfrak{y}\": {\r\n \"x\": 301,\r\n \"y\": 333\r\n },\r\n \"\\\\mathfrak{z}\": {\r\n \"x\": 338,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{A}\": {\r\n \"x\": 375,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{B}\": {\r\n \"x\": 412,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{C}\": {\r\n \"x\": 449,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{D}\": {\r\n \"x\": 486,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{E}\": {\r\n \"x\": 523,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{F}\": {\r\n \"x\": 560,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{G}\": {\r\n \"x\": 597,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{H}\": {\r\n \"x\": 634,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{I}\": {\r\n \"x\": 671,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{J}\": {\r\n \"x\": 708,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{K}\": {\r\n \"x\": 745,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{L}\": {\r\n \"x\": 782,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{M}\": {\r\n \"x\": 819,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{N}\": {\r\n \"x\": 856,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{O}\": {\r\n \"x\": 893,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{P}\": {\r\n \"x\": 930,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{Q}\": {\r\n \"x\": 967,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{R}\": {\r\n \"x\": 1004,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{S}\": {\r\n \"x\": 1041,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{T}\": {\r\n \"x\": 1078,\r\n \"y\": 333\r\n },\r\n \"\\\\mathbb{U}\": {\r\n \"x\": 5,\r\n \"y\": 370\r\n },\r\n \"\\\\mathbb{V}\": {\r\n \"x\": 42,\r\n \"y\": 370\r\n },\r\n \"\\\\mathbb{W}\": {\r\n \"x\": 79,\r\n \"y\": 370\r\n },\r\n \"\\\\mathbb{X}\": {\r\n \"x\": 116,\r\n \"y\": 370\r\n },\r\n \"\\\\mathbb{Y}\": {\r\n \"x\": 153,\r\n \"y\": 370\r\n },\r\n \"\\\\mathbb{Z}\": {\r\n \"x\": 190,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{A}\": {\r\n \"x\": 227,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{B}\": {\r\n \"x\": 264,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{C}\": {\r\n \"x\": 301,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{D}\": {\r\n \"x\": 338,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{E}\": {\r\n \"x\": 375,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{F}\": {\r\n \"x\": 412,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{G}\": {\r\n \"x\": 449,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{H}\": {\r\n \"x\": 486,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{I}\": {\r\n \"x\": 523,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{J}\": {\r\n \"x\": 560,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{K}\": {\r\n \"x\": 597,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{L}\": {\r\n \"x\": 634,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{M}\": {\r\n \"x\": 671,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{N}\": {\r\n \"x\": 708,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{O}\": {\r\n \"x\": 745,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{P}\": {\r\n \"x\": 782,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{Q}\": {\r\n \"x\": 819,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{R}\": {\r\n \"x\": 856,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{S}\": {\r\n \"x\": 893,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{T}\": {\r\n \"x\": 930,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{U}\": {\r\n \"x\": 967,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{V}\": {\r\n \"x\": 1004,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{W}\": {\r\n \"x\": 1041,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{X}\": {\r\n \"x\": 1078,\r\n \"y\": 370\r\n },\r\n \"\\\\mathrm{Y}\": {\r\n \"x\": 5,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{Z}\": {\r\n \"x\": 42,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{a}\": {\r\n \"x\": 79,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{b}\": {\r\n \"x\": 116,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{c}\": {\r\n \"x\": 153,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{d}\": {\r\n \"x\": 190,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{e}\": {\r\n \"x\": 227,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{f}\": {\r\n \"x\": 264,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{g}\": {\r\n \"x\": 301,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{h}\": {\r\n \"x\": 338,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{i}\": {\r\n \"x\": 375,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{j}\": {\r\n \"x\": 412,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{k}\": {\r\n \"x\": 449,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{l}\": {\r\n \"x\": 486,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{m}\": {\r\n \"x\": 523,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{n}\": {\r\n \"x\": 560,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{o}\": {\r\n \"x\": 597,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{p}\": {\r\n \"x\": 634,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{q}\": {\r\n \"x\": 671,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{r}\": {\r\n \"x\": 708,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{s}\": {\r\n \"x\": 745,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{t}\": {\r\n \"x\": 782,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{u}\": {\r\n \"x\": 819,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{v}\": {\r\n \"x\": 856,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{w}\": {\r\n \"x\": 893,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{x}\": {\r\n \"x\": 930,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{y}\": {\r\n \"x\": 967,\r\n \"y\": 407\r\n },\r\n \"\\\\mathrm{z}\": {\r\n \"x\": 1004,\r\n \"y\": 407\r\n }\r\n } as const;\r\n","import { legacyBaseUtils } from './legacy-utils';\n\nexport const legacyCommonUtils = {\n contains: legacyBaseUtils.contains,\n getRect: legacyBaseUtils.getRect,\n};\n","type AnyFunc = (...args: any[]) => any;\n\ninterface KityCtor<T = Record<string, any>> {\n new (...args: any[]): T;\n (this: unknown, ...args: any[]): T;\n prototype: T;\n __KityClassName?: string;\n __KityBaseClass?: AnyFunc;\n __KityMixins?: Record<string, AnyFunc>;\n __KityConstructor?: AnyFunc;\n}\n\ninterface KityMethodInfo {\n cls: KityCtor;\n methodName: string;\n}\n\nfunction Class(this: any) {}\n\nconst ClassProto = Class.prototype as Record<string, any>;\n\nClassProto.base = function (this: any, name: string) {\n const stack: KityMethodInfo[] = this.__kityCallStack__;\n const info = stack[stack.length - 1];\n const method = info.cls.__KityBaseClass!.prototype[name];\n return method.apply(this, Array.prototype.slice.call(arguments, 1));\n};\n\nClassProto.callBase = function (this: any) {\n const stack: KityMethodInfo[] = this.__kityCallStack__;\n const info = stack[stack.length - 1];\n const method = info.cls.__KityBaseClass!.prototype[info.methodName];\n return method.apply(this, arguments as unknown as unknown[]);\n};\n\nClassProto.mixin = function (this: any, name: string) {\n const stack: KityMethodInfo[] = this.__kityCallStack__;\n const info = stack[stack.length - 1];\n const mixins = info.cls.__KityMixins;\n if (!mixins) return this;\n return mixins[name].apply(this, Array.prototype.slice.call(arguments, 1));\n};\n\nClassProto.callMixin = function (this: any) {\n const stack: KityMethodInfo[] = this.__kityCallStack__;\n const info = stack[stack.length - 1];\n const methodName = info.methodName;\n const mixins = info.cls.__KityMixins;\n if (!mixins) return this;\n const method = mixins[methodName] as unknown as AnyFunc[];\n if (methodName === 'constructor') {\n for (let i = 0; i < method.length; i++) method[i].call(this);\n return this;\n }\n return (method as unknown as AnyFunc).apply(this, arguments as unknown as unknown[]);\n};\n\nClassProto.pipe = function (this: any, fn: AnyFunc) {\n if (typeof fn === 'function') fn.call(this, this);\n return this;\n};\n\nClassProto.getType = function (this: any) {\n return this.__KityClassName as string;\n};\n\nClassProto.getClass = function (this: any) {\n return this.constructor as KityCtor;\n};\n\nfunction wrapMethod(cls: KityCtor, methodName: string, originalMethod: AnyFunc): AnyFunc {\n const wrapped = function (this: any) {\n this.__kityCallStack__ = this.__kityCallStack__ || [];\n this.__kityCallStack__.push({ cls, methodName });\n try {\n return originalMethod.apply(this, arguments as unknown as unknown[]);\n } finally {\n this.__kityCallStack__.pop();\n }\n };\n (wrapped as unknown as Record<string, unknown>).__KityMethodClass = cls;\n (wrapped as unknown as Record<string, unknown>).__KityMethodName = methodName;\n return wrapped;\n}\n\nfunction inherit(constructor: AnyFunc, BaseClass: KityCtor): KityCtor {\n const KityClass = function (this: any) {\n const meta = KityClass as unknown as Record<string, unknown>;\n (meta.__KityConstructor as AnyFunc).apply(this, arguments as unknown as unknown[]);\n };\n\n const meta = KityClass as unknown as Record<string, unknown>;\n meta.__KityConstructor = constructor;\n KityClass.prototype = Object.create(BaseClass.prototype);\n\n for (const methodName in BaseClass.prototype) {\n if (\n Object.prototype.hasOwnProperty.call(BaseClass.prototype, methodName) &&\n methodName.indexOf('__Kity') !== 0\n ) {\n KityClass.prototype[methodName] = BaseClass.prototype[methodName];\n }\n }\n\n KityClass.prototype.constructor = KityClass;\n return KityClass as unknown as KityCtor;\n}\n\nfunction legacyMixin(NewClass: KityCtor, mixins: KityCtor[]): KityCtor {\n if (!(mixins instanceof Array)) return NewClass;\n const meta = NewClass as unknown as Record<string, unknown>;\n meta.__KityMixins = { constructor: [] };\n for (let i = 0; i < mixins.length; i++) {\n const proto = mixins[i].prototype;\n for (const method in proto) {\n if (!Object.prototype.hasOwnProperty.call(proto, method)) continue;\n if (method === 'constructor') {\n (meta.__KityMixins as Record<string, AnyFunc[]>)['constructor'].push(proto[method]);\n } else {\n NewClass.prototype[method] = (meta.__KityMixins as Record<string, AnyFunc>)[method] =\n proto[method];\n }\n }\n }\n return NewClass;\n}\n\nfunction extend(BaseClass: KityCtor, extension: Record<string, unknown>): KityCtor {\n for (const methodName in extension) {\n if (\n Object.prototype.hasOwnProperty.call(extension, methodName) &&\n methodName !== 'constructor' &&\n methodName.indexOf('__Kity') !== 0\n ) {\n BaseClass.prototype[methodName] = wrapMethod(\n BaseClass,\n methodName,\n extension[methodName] as AnyFunc,\n );\n }\n }\n return BaseClass;\n}\n\nfunction checkBaseConstructorCall(targetClass: AnyFunc, classname: string) {\n if (!/this\\.callBase/.test(targetClass.toString())) {\n throw new Error(\n `${classname}: the constructor must call the base constructor for compatibility with the legacy kity class system.`,\n );\n }\n}\n\nexport { Class };\nexport type { KityCtor };\n\nexport function createClass<T = Record<string, any>>(\n classname: string,\n defines?: Record<string, any> & ThisType<T>,\n): KityCtor<T> {\n let constructor: AnyFunc;\n let NewClass: KityCtor;\n let BaseClass: KityCtor;\n\n if (arguments.length === 1) {\n defines = arguments[0];\n classname = 'AnonymousClass';\n }\n\n defines = defines || {};\n BaseClass = defines.base || (Class as unknown as KityCtor);\n\n if (Object.prototype.hasOwnProperty.call(defines, 'constructor')) {\n constructor = defines.constructor as AnyFunc;\n if (BaseClass !== (Class as unknown as KityCtor)) {\n checkBaseConstructorCall(constructor, classname);\n }\n } else {\n constructor = function (this: any) {\n this.callBase.apply(this, arguments);\n this.callMixin.apply(this, arguments);\n };\n }\n\n const originalConstructor = constructor;\n constructor = function (this: any) {\n this.__kityCallStack__ = this.__kityCallStack__ || [];\n this.__kityCallStack__.push({\n cls: NewClass,\n methodName: 'constructor',\n });\n try {\n return originalConstructor.apply(this, arguments as unknown as unknown[]);\n } finally {\n this.__kityCallStack__.pop();\n }\n };\n\n NewClass = inherit(constructor, BaseClass);\n NewClass = legacyMixin(NewClass, defines.mixins || []);\n\n const meta = NewClass as unknown as Record<string, unknown>;\n meta.__KityClassName = (constructor as unknown as Record<string, unknown>).__KityClassName =\n classname;\n meta.__KityBaseClass = (constructor as unknown as Record<string, unknown>).__KityBaseClass =\n BaseClass;\n (constructor as unknown as Record<string, unknown>).__KityMethodName = 'constructor';\n (constructor as unknown as Record<string, unknown>).__KityMethodClass = NewClass;\n\n delete (defines as any).mixins;\n delete (defines as any).constructor;\n delete (defines as any).base;\n\n NewClass = extend(NewClass, defines as Record<string, unknown>);\n\n return NewClass as KityCtor<T>;\n}\n\nexport function extendClass(clazz: KityCtor, extension: Record<string, any>): KityCtor {\n return extend(clazz, extension);\n}\n","import { createClass, type KityCtor } from './class-system';\nimport utils from './utils';\n\n/* ===== Box ===== */\n\nexport interface BoxInstance {\n x: number;\n y: number;\n width: number;\n height: number;\n left: number;\n right: number;\n top: number;\n bottom: number;\n cx: number;\n cy: number;\n getRangeX(): number[];\n getRangeY(): number[];\n merge(another: BoxInstance): BoxInstance;\n intersect(another: BoxInstance): BoxInstance;\n expand(top: number, right?: number, bottom?: number, left?: number): BoxInstance;\n valueOf(): number[];\n toString(): string;\n isEmpty(): boolean;\n container?: unknown;\n}\n\nexport interface BoxConstructor extends KityCtor<BoxInstance> {\n parse(unknown: any): BoxInstance;\n}\n\nconst Box = createClass<BoxInstance>('Box', {\n constructor(x?: any, y?: any, width?: number, height?: number) {\n const box = arguments[0];\n if (box && typeof box === 'object' && ('x' in box || 'left' in box)) {\n x = box.x ?? box.left;\n y = box.y ?? box.top;\n width = box.width;\n height = box.height;\n }\n const w = (width as number) ?? 0;\n const h = (height as number) ?? 0;\n if (w < 0) {\n x = (x as number) - (width = -w);\n }\n if (h < 0) {\n y = (y as number) - (height = -h);\n }\n this.x = (x as number) || 0;\n this.y = (y as number) || 0;\n this.width = width || 0;\n this.height = height || 0;\n this.left = this.x;\n this.right = this.x + this.width;\n this.top = this.y;\n this.bottom = this.y + this.height;\n this.cx = this.x + this.width / 2;\n this.cy = this.y + this.height / 2;\n },\n\n getRangeX() {\n return [this.left, this.right];\n },\n\n getRangeY() {\n return [this.top, this.bottom];\n },\n\n merge(another: any) {\n if (this.isEmpty()) return new Box(another.x, another.y, another.width, another.height);\n const left = Math.min(this.left, another.left);\n const right = Math.max(this.right, another.right);\n const top = Math.min(this.top, another.top);\n const bottom = Math.max(this.bottom, another.bottom);\n return new Box(left, top, right - left, bottom - top);\n },\n\n intersect(another: any) {\n if (!(another instanceof Box) || this.isEmpty() || another.isEmpty()) return new Box();\n if (\n this.right <= another.left ||\n another.right <= this.left ||\n this.bottom <= another.top ||\n another.bottom <= this.top\n )\n return new Box();\n const x = Math.max(this.left, another.left),\n y = Math.max(this.top, another.top);\n return new Box(\n x,\n y,\n Math.min(this.right, another.right) - x,\n Math.min(this.bottom, another.bottom) - y,\n );\n },\n\n expand(top: number, right?: number, bottom?: number, left?: number) {\n if (arguments.length < 4) {\n right = top;\n bottom = top;\n left = top;\n }\n return new Box(\n this.x - (left as number),\n this.y - top,\n this.width + (right as number) + (left as number),\n this.height + top + (bottom as number),\n );\n },\n\n valueOf() {\n return [this.x, this.y, this.width, this.height];\n },\n\n toString() {\n return (this.valueOf() as number[]).join(' ');\n },\n\n isEmpty() {\n return !this.width || !this.height;\n },\n}) as unknown as BoxConstructor;\n\n(Box as BoxConstructor).parse = function (unknown: any): BoxInstance {\n if (!unknown) return new Box();\n if (unknown instanceof Box) return unknown;\n if (typeof unknown === 'string') return Box.parse(unknown.split(/\\s*[\\s,]\\s*/));\n if ('0' in unknown && '1' in unknown && '2' in unknown && '3' in unknown)\n return new Box(unknown[0], unknown[1], unknown[2], unknown[3]);\n return new Box();\n};\n\n/* ===== Point ===== */\n\nexport interface PointInstance {\n x: number;\n y: number;\n offset(dx: number | PointInstance, dy?: number): PointInstance;\n valueOf(): number[];\n toString(): string;\n spof(): PointInstance;\n round(): PointInstance;\n isOrigin(): boolean;\n container?: unknown;\n}\n\nexport interface PointConstructor extends KityCtor<PointInstance> {\n fromPolar(radius: number, angle: number, unit?: string): PointInstance;\n parse(unknown: any): PointInstance;\n}\n\nconst Point = createClass<PointInstance>('Point', {\n constructor(x?: number, y?: number) {\n this.x = x || 0;\n this.y = y || 0;\n },\n\n offset(dx: any, dy?: number) {\n if (arguments.length === 1) {\n dy = dx.y;\n dx = dx.x;\n }\n return new Point(this.x + (dx as number), this.y + (dy as number));\n },\n\n valueOf() {\n return [this.x, this.y];\n },\n\n toString() {\n return (this.valueOf() as number[]).join(' ');\n },\n\n spof() {\n return new Point((this.x | 0) + 0.5, (this.y | 0) + 0.5);\n },\n\n round() {\n return new Point(this.x | 0, this.y | 0);\n },\n\n isOrigin() {\n return this.x === 0 && this.y === 0;\n },\n}) as unknown as PointConstructor;\n\n(Point as PointConstructor).fromPolar = function (\n radius: number,\n angle: number,\n unit?: string,\n): PointInstance {\n if (unit !== 'rad') angle = (angle / 180) * Math.PI;\n return new Point(radius * Math.cos(angle), radius * Math.sin(angle));\n};\n\n(Point as PointConstructor).parse = function (unknown: any): PointInstance {\n if (!unknown) return new Point();\n if (unknown instanceof Point) return unknown;\n if (typeof unknown === 'string') return Point.parse(unknown.split(/\\s*[\\s,]\\s*/));\n if ('0' in unknown && '1' in unknown) return new Point(unknown[0], unknown[1]);\n return new Point();\n};\n\n/* ===== g (path utilities) ===== */\n\nconst g: Record<string, any> = {};\ng.pathToString = function (pathSegment: any): string {\n pathSegment = pathSegment || this;\n if (typeof pathSegment === 'string') return pathSegment;\n if (pathSegment instanceof Array)\n return utils\n .flatten(pathSegment)\n .join(',')\n .replace(/,?([achlmqrstvxz]),?/gi, '$1');\n return '';\n};\n\n/* ===== Matrix ===== */\n\nfunction d2r(deg: number) {\n return (deg * Math.PI) / 180;\n}\n\nexport interface MatrixData {\n a: number;\n b: number;\n c: number;\n d: number;\n e: number;\n f: number;\n}\n\nfunction mergeMatrixData(m2: MatrixData, m1: MatrixData): MatrixData {\n return {\n a: m1.a * m2.a + m1.c * m2.b,\n b: m1.b * m2.a + m1.d * m2.b,\n c: m1.a * m2.c + m1.c * m2.d,\n d: m1.b * m2.c + m1.d * m2.d,\n e: m1.a * m2.e + m1.c * m2.f + m1.e,\n f: m1.b * m2.e + m1.d * m2.f + m1.f,\n };\n}\n\nconst mPattern = /matrix\\s*\\((.+)\\)/i;\n\nexport interface MatrixInstance {\n m: MatrixData;\n translate(x: number, y: number): MatrixInstance;\n rotate(deg: number): MatrixInstance;\n scale(sx: number, sy?: number): MatrixInstance;\n skew(degX: number, degY?: number): MatrixInstance;\n inverse(): MatrixInstance;\n setMatrix(\n a: number | MatrixData,\n b?: number,\n c?: number,\n d?: number,\n e?: number,\n f?: number,\n ): MatrixInstance;\n getMatrix(): MatrixData;\n getTranslate(): { x: number; y: number };\n mergeMatrix(matrix: MatrixInstance): MatrixInstance;\n merge(matrix: MatrixInstance): MatrixInstance;\n toString(): string;\n valueOf(): number[];\n equals(matrix: MatrixInstance): boolean;\n transformPoint(...args: any[]): PointInstance;\n transformBox(box: BoxInstance): BoxInstance;\n clone(): MatrixInstance;\n reverse(): MatrixInstance;\n}\n\nexport interface MatrixConstructor extends KityCtor<MatrixInstance> {\n parse(str: any): MatrixInstance;\n transformPoint(x: number | PointInstance, y?: number | MatrixData, m?: MatrixData): PointInstance;\n transformBox(box: BoxInstance, matrix: MatrixData): BoxInstance;\n getCTM(target: any, refer?: string | any): MatrixInstance;\n}\n\nconst Matrix = createClass<MatrixInstance>('Matrix', {\n constructor(..._args: any[]) {\n if (arguments.length) {\n (this as any).setMatrix.apply(this, arguments);\n } else {\n this.setMatrix(1, 0, 0, 1, 0, 0);\n }\n },\n\n translate(x: number, y: number) {\n this.m = mergeMatrixData(this.m, {\n a: 1,\n c: 0,\n e: x,\n b: 0,\n d: 1,\n f: y,\n });\n return this;\n },\n\n rotate(deg: number) {\n const r = d2r(deg),\n s = Math.sin(r),\n c = Math.cos(r);\n this.m = mergeMatrixData(this.m, {\n a: c,\n c: -s,\n e: 0,\n b: s,\n d: c,\n f: 0,\n });\n return this;\n },\n\n scale(sx: number, sy?: number) {\n if (sy === undefined) sy = sx;\n this.m = mergeMatrixData(this.m, {\n a: sx,\n c: 0,\n e: 0,\n b: 0,\n d: sy,\n f: 0,\n });\n return this;\n },\n\n skew(degX: number, degY?: number) {\n if (degY === undefined) degY = degX;\n this.m = mergeMatrixData(this.m, {\n a: 1,\n c: Math.tan(d2r(degX)),\n e: 0,\n b: Math.tan(d2r(degY)),\n d: 1,\n f: 0,\n });\n return this;\n },\n\n inverse() {\n const m = this.m,\n k = m.a * m.d - m.b * m.c;\n return new Matrix(\n m.d / k,\n -m.b / k,\n -m.c / k,\n m.a / k,\n (m.c * m.f - m.e * m.d) / k,\n (m.b * m.e - m.a * m.f) / k,\n );\n },\n\n setMatrix(a: any, b?: number, c?: number, d?: number, e?: number, f?: number) {\n if (arguments.length === 1) {\n this.m = utils.clone(arguments[0]);\n } else {\n this.m = {\n a: a as number,\n b: b as number,\n c: c as number,\n d: d as number,\n e: e as number,\n f: f as number,\n };\n }\n return this;\n },\n\n getMatrix() {\n return utils.clone(this.m) as MatrixData;\n },\n\n getTranslate() {\n const m = this.m;\n return { x: m.e / m.a, y: m.f / m.d };\n },\n\n mergeMatrix(matrix: any) {\n return new Matrix(mergeMatrixData(this.m, matrix.m));\n },\n\n merge(matrix: any) {\n return this.mergeMatrix(matrix);\n },\n\n toString() {\n return (this.valueOf() as number[]).join(' ');\n },\n\n valueOf() {\n const m = this.m;\n return [m.a, m.b, m.c, m.d, m.e, m.f];\n },\n\n equals(matrix: any) {\n const m1 = this.m,\n m2 = matrix.m;\n return (\n m1.a === m2.a &&\n m1.b === m2.b &&\n m1.c === m2.c &&\n m1.d === m2.d &&\n m1.e === m2.e &&\n m1.f === m2.f\n );\n },\n\n transformPoint() {\n return ((Matrix as MatrixConstructor).transformPoint as Function).apply(\n null,\n ([].slice.call(arguments) as any[]).concat([this.m]),\n );\n },\n\n transformBox(box: any) {\n return (Matrix as MatrixConstructor).transformBox(box, this.m);\n },\n\n clone() {\n return new Matrix(this.m);\n },\n\n reverse() {\n return this.inverse();\n },\n}) as unknown as MatrixConstructor;\n\n(Matrix as MatrixConstructor).parse = function (str: any): MatrixInstance {\n const f = parseFloat;\n if (str instanceof Array)\n return new Matrix({\n a: f(str[0]),\n b: f(str[1]),\n c: f(str[2]),\n d: f(str[3]),\n e: f(str[4]),\n f: f(str[5]),\n });\n const match = mPattern.exec(str);\n if (match) {\n let values = match[1].split(',');\n if (values.length !== 6) values = match[1].split(' ');\n return new Matrix({\n a: f(values[0]),\n b: f(values[1]),\n c: f(values[2]),\n d: f(values[3]),\n e: f(values[4]),\n f: f(values[5]),\n });\n }\n return new Matrix();\n};\n\n(Matrix as MatrixConstructor).transformPoint = function (\n x: any,\n y?: any,\n m?: MatrixData,\n): PointInstance {\n if (arguments.length === 2) {\n m = y;\n y = x.y;\n x = x.x;\n }\n return new Point(\n m!.a * (x as number) + m!.c * (y as number) + m!.e,\n m!.b * (x as number) + m!.d * (y as number) + m!.f,\n );\n};\n\n(Matrix as MatrixConstructor).transformBox = function (box: any, matrix: MatrixData): BoxInstance {\n let xMin = Number.MAX_VALUE,\n xMax = -Number.MAX_VALUE,\n yMin = Number.MAX_VALUE,\n yMax = -Number.MAX_VALUE;\n const bps = [\n [box.x, box.y],\n [box.x + box.width, box.y],\n [box.x, box.y + box.height],\n [box.x + box.width, box.y + box.height],\n ];\n const rps: PointInstance[] = [];\n let bp: number[] | undefined;\n while ((bp = bps.pop())) {\n const rp = (Matrix as MatrixConstructor).transformPoint(bp[0], bp[1], matrix);\n rps.push(rp);\n xMin = Math.min(xMin, rp.x);\n xMax = Math.max(xMax, rp.x);\n yMin = Math.min(yMin, rp.y);\n yMax = Math.max(yMax, rp.y);\n }\n const result = new Box({\n x: xMin,\n y: yMin,\n width: xMax - xMin,\n height: yMax - yMin,\n });\n utils.extend(result, { closurePoints: rps });\n return result;\n};\n\nfunction getTransformToElement(target: SVGGraphicsElement, source: SVGGraphicsElement): DOMMatrix {\n try {\n return source.getScreenCTM()!.inverse().multiply(target.getScreenCTM()!);\n } catch {\n throw new Error(\"Unable to invert the source element's transformation matrix.\");\n }\n}\n\n(Matrix as MatrixConstructor).getCTM = function (\n target: any,\n refer?: string | any,\n): MatrixInstance {\n let ctm: MatrixData = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0,\n };\n const node = target.shapeNode || target.node;\n refer = refer || 'parent';\n switch (refer) {\n case 'screen':\n ctm = node.getScreenCTM();\n break;\n case 'doc':\n case 'paper':\n ctm = node.getCTM();\n break;\n case 'view':\n case 'top':\n if (target.getPaper()) {\n ctm = getTransformToElement(node, target.getPaper().shapeNode);\n }\n break;\n case 'parent':\n if (target.node.parentNode) {\n ctm = getTransformToElement(node, target.node.parentNode);\n }\n break;\n default:\n if (refer && (refer as any).node) {\n ctm = getTransformToElement(node, (refer as any).shapeNode || (refer as any).node);\n }\n }\n return new Matrix(ctm.a, ctm.b, ctm.c, ctm.d, ctm.e, ctm.f);\n};\n\nexport { Box, Point, g, Matrix };\n","import { createClass, extendClass, type KityCtor } from './class-system';\nimport utils from './utils';\nimport {\n Box,\n Point,\n g,\n Matrix,\n type BoxInstance,\n type PointInstance,\n type MatrixInstance,\n type PointConstructor,\n type MatrixConstructor,\n} from './geometry';\n\nconst pc = Point as unknown as PointConstructor;\nconst mc = Matrix as unknown as MatrixConstructor;\n\n/* ===== Interfaces ===== */\n\nexport interface EventHandlerInstance {\n _EVENT_UID: number;\n _EVNET_UID: number;\n addEventListener(type: string | string[], handler: (...args: any[]) => any): EventHandlerInstance;\n addOnceEventListener(\n type: string | string[],\n handler: (...args: any[]) => any,\n ): EventHandlerInstance;\n removeEventListener(type: string, handler?: (...args: any[]) => any): EventHandlerInstance;\n on(type: string | string[], handler: (...args: any[]) => any): EventHandlerInstance;\n once(type: string | string[], handler: (...args: any[]) => any): EventHandlerInstance;\n off(type: string, handler?: (...args: any[]) => any): EventHandlerInstance;\n fire(type: string, params?: any): EventHandlerInstance;\n trigger(type: string, params?: any): EventHandlerInstance;\n callMixin: (...args: any[]) => any;\n callBase: (...args: any[]) => any;\n}\n\nexport interface StyledInstance {\n node: SVGElement;\n addClass(name: string): StyledInstance;\n removeClass(name: string): StyledInstance;\n hasClass(name: string): boolean;\n setStyle(styleOrName: string | Record<string, string>, value?: string): StyledInstance;\n}\n\nexport interface DataInstance {\n _data: Record<string, any>;\n setData(name: string, value: any): DataInstance;\n getData(name: string): any;\n removeData(name: string): DataInstance;\n}\n\nexport interface ContainerInstance {\n container?: any;\n items: any[];\n getItems(): any[];\n getItem(index: number): any;\n getFirstItem(): any;\n getLastItem(): any;\n indexOf(item: any): number;\n eachItem(fn: (index: number, item: any) => void): ContainerInstance;\n addItem(item: any, pos?: number, noEvent?: boolean): ContainerInstance;\n addItems(items: any[]): ContainerInstance;\n setItems(items: any[]): ContainerInstance;\n appendItem(item: any): ContainerInstance;\n prependItem(item: any): ContainerInstance;\n removeItem(pos: any, noEvent?: boolean): ContainerInstance;\n clear(): ContainerInstance;\n onContainerChanged(type: string, items: any[]): void;\n handleAdd(item: any, index: number): void;\n handleRemove(item: any, index: number): void;\n}\n\nexport interface ShapeInstance extends EventHandlerInstance, StyledInstance, DataInstance {\n node: SVGElement;\n container: ContainerInstance;\n transform: {\n translate: any;\n rotate: any;\n scale: any;\n matrix: any;\n };\n getId(): string;\n setId(id: string): ShapeInstance;\n getNode(): SVGElement;\n getBoundaryBox(): BoxInstance;\n getRenderBox(refer?: any): BoxInstance;\n getWidth(): number;\n getHeight(): number;\n getSize(): Omit<BoxInstance, 'x' | 'y'>;\n setOpacity(value: string | number): ShapeInstance;\n getOpacity(): number;\n setVisible(value: boolean): ShapeInstance;\n getVisible(): any;\n hasAncestor(node: any): boolean;\n getTransform(refer?: any): MatrixInstance;\n clearTransform(): ShapeInstance;\n _applyTransform(): ShapeInstance;\n setMatrix(m: any): ShapeInstance;\n setTranslate(t: any): ShapeInstance;\n setRotate(r: any): ShapeInstance;\n setScale(s: any): ShapeInstance;\n translate(dx: number, dy?: number): ShapeInstance;\n rotate(deg: number): ShapeInstance;\n scale(sx: number, sy?: number): ShapeInstance;\n skew(sx: number, sy?: number): ShapeInstance;\n stroke(pen: any, width?: number): ShapeInstance;\n fill(brush: any): ShapeInstance;\n setAttr(a: string | Record<string, any>, v?: string): ShapeInstance;\n getAttr(a: string): any;\n bringTo(index: number): ShapeInstance;\n bringFront(): ShapeInstance;\n bringBack(): ShapeInstance;\n bringTop(): ShapeInstance;\n bringRear(): ShapeInstance;\n bringRefer(referShape: any, offset?: number): ShapeInstance;\n bringAbove(referShape: any): ShapeInstance;\n bringBelow(referShape: any): ShapeInstance;\n replaceBy(newShape: any): ShapeInstance;\n use(): any;\n getPaper(): any;\n isAttached(): boolean;\n whenPaperReady(fn: (paper: any) => void): ShapeInstance;\n remove?: () => ShapeInstance;\n}\n\nexport interface ShapeContainerInstance extends ContainerInstance {\n isShapeContainer: boolean;\n node: SVGElement;\n shapeNode?: SVGElement;\n getShape(index: number): any;\n addShape(shape: any, index?: number): ShapeContainerInstance;\n put(shape: any): any;\n appendShape(shape: any): ShapeContainerInstance;\n prependShape(shape: any): ShapeContainerInstance;\n replaceShape(replacer: any, origin: any): ShapeContainerInstance;\n addShapeBefore(shape: any, refer: any): ShapeContainerInstance;\n addShapeAfter(shape: any, refer: any): ShapeContainerInstance;\n addShapes(shapes: any[]): ShapeContainerInstance;\n removeShape(index: number): ShapeContainerInstance;\n getShapes(): any[];\n getShapesByType(name: string): any[];\n getShapeById(id: string): any;\n arrangeShape(shape: any, index: number): ShapeContainerInstance;\n getShapeNode(): SVGElement;\n notifyTreeModification(type: string, container: any): void;\n}\n\nexport interface ViewBoxInstance {\n node: SVGElement;\n getViewBox(): {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n setViewBox(x: number, y: number, width: number, height: number): ViewBoxInstance;\n}\n\nexport interface TextContentInstance extends ShapeInstance {\n shapeNode: SVGElement;\n clearContent(): TextContentInstance;\n setContent(content: string): TextContentInstance;\n getContent(): string;\n appendContent(content: string): TextContentInstance;\n setSize(value: number): TextContentInstance;\n setFontSize(value: number): TextContentInstance;\n setFontFamily(value: string): TextContentInstance;\n setFontBold(bold: boolean): TextContentInstance;\n setFontItalic(italic: boolean): TextContentInstance;\n setFont(font: any): TextContentInstance;\n getExtentOfChar(index: number): DOMRect;\n getRotationOfChar(index: number): number;\n getCharNumAtPosition(x: number, y: number): number;\n}\n\nexport interface TextInstance\n extends TextContentInstance, Omit<ShapeContainerInstance, keyof TextContentInstance> {\n _cachedFontHash: string;\n _lastFont: any;\n __fixedPosition?: boolean;\n verticalAlign?: string;\n fixPosition(): void;\n _buildFontHash(): void;\n _fontChanged(font: any): boolean;\n setX(x: number): TextInstance;\n setPosition(x: number, y: number): TextInstance;\n setY(y: number): TextInstance;\n getX(): number;\n getY(): number;\n setTextAnchor(anchor: string): TextInstance;\n getTextAnchor(): string;\n setVerticalAlign(align: string): TextInstance;\n getVerticalAlign(): string;\n setStartOffset(offset: number): void;\n addSpan(span: any): TextInstance;\n setPath(path: any): TextInstance;\n}\n\nexport interface PathInstance extends ShapeInstance {\n pathdata: string;\n setPathData(data: any): PathInstance;\n getPathData(): string;\n getDrawer(): any;\n isClosed(): boolean;\n}\n\nexport interface RectInstance extends PathInstance {\n x: number;\n y: number;\n width: number;\n height: number;\n radius: number;\n update(): RectInstance;\n setWidth(width: number): RectInstance;\n setHeight(height: number): RectInstance;\n setSize(width: number, height: number): RectInstance;\n setBox(box: any): RectInstance;\n getBox(): BoxInstance;\n getRadius(): number;\n setRadius(radius: number): RectInstance;\n getPosition(): PointInstance;\n setPosition(xOrP: any, y?: number): RectInstance;\n getPositionX(): number;\n getPositionY(): number;\n setPositionX(x: number): RectInstance;\n setPositionY(y: number): RectInstance;\n}\n\nexport interface GroupInstance extends Omit<ShapeInstance, 'container'>, ShapeContainerInstance {}\n\nexport interface PaperInstance\n extends ShapeContainerInstance, EventHandlerInstance, StyledInstance, ViewBoxInstance {\n node: SVGSVGElement;\n resourceNode: SVGDefsElement;\n shapeNode: SVGGElement;\n resources: ContainerInstance;\n container: HTMLElement;\n viewport: any;\n createSVGNode(): SVGSVGElement;\n renderTo(container: HTMLElement | string): void;\n getNode(): SVGSVGElement;\n getContainer(): HTMLElement;\n getWidth(): number;\n setWidth(width: string | number): PaperInstance;\n getHeight(): number;\n setHeight(height: string | number): PaperInstance;\n setViewPort(cx: any, cy?: number, zoom?: number): PaperInstance;\n getViewPort(): any;\n getViewPortMatrix(): MatrixInstance;\n getViewPortTransform(): MatrixInstance;\n getTransform(): MatrixInstance;\n addResource(resource: any): PaperInstance;\n removeResource(resource: any): PaperInstance;\n getPaper(): PaperInstance;\n}\n\nexport interface PaperConstructor extends KityCtor<PaperInstance> {}\n\n/* ===== SVG ===== */\n\nconst _svgId = { id: 0 };\n\nconst svg = {\n ns: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n defaults: {\n stroke: 'none',\n fill: 'none',\n },\n createNode(name: string): SVGElement {\n const node = document.createElementNS(svg.ns, name);\n node.id = 'kity_' + name + '_' + _svgId.id++;\n return node as SVGElement;\n },\n};\n\n/* ===== EventHandler ===== */\n\nconst INNER_HANDLER_CACHE: Record<string, Record<string, any>> = {};\nconst USER_HANDLER_CACHE: Record<string, Record<string, any[]>> = {};\nlet _guid = 0;\n\nfunction getEventUid(target: { _EVENT_UID?: number; _EVNET_UID?: number }): number {\n const eventUid = target._EVENT_UID ?? target._EVNET_UID;\n\n if (eventUid === undefined) {\n throw new Error('Event handler instance is missing an event uid.');\n }\n\n return eventUid;\n}\n\nfunction setLegacyEventUid(target: { _EVENT_UID?: number; _EVNET_UID?: number }, eventUid: number) {\n target._EVENT_UID = eventUid;\n\n if (Object.prototype.hasOwnProperty.call(target, '_EVNET_UID')) {\n target._EVNET_UID = eventUid;\n return;\n }\n\n Object.defineProperty(target, '_EVNET_UID', {\n configurable: true,\n enumerable: true,\n get() {\n return target._EVENT_UID;\n },\n set(value: number) {\n target._EVENT_UID = value;\n },\n });\n}\n\nfunction bindDomEvent(node: any, type: string, handler: any) {\n node.addEventListener(type, handler, false);\n}\n\nfunction deleteDomEvent(node: any, type: string, handler: any) {\n node.removeEventListener(type, handler, false);\n}\n\nfunction sendMessage(messageObj: any, type: string, msg?: any) {\n const handlers = INNER_HANDLER_CACHE[getEventUid(messageObj)];\n if (!handlers) {\n return;\n }\n const handler = handlers[type];\n if (!handler) {\n return;\n }\n const event = utils.extend({ type, target: messageObj }, msg || {});\n handler.call(messageObj, event);\n}\n\nfunction listen(node: any, type: string, handler: any, isOnce: boolean, targetObject: any) {\n const eid = getEventUid(targetObject);\n\n if (!INNER_HANDLER_CACHE[eid]) {\n INNER_HANDLER_CACHE[eid] = {};\n }\n if (!INNER_HANDLER_CACHE[eid]![type]) {\n INNER_HANDLER_CACHE[eid]![type] = function kityEventHandler(e: any) {\n e = new ShapeEvent(e || window.event);\n const list = USER_HANDLER_CACHE[eid]![type];\n if (!list) {\n return;\n }\n for (let i = 0; i < list.length; i++) {\n const fn = list[i];\n if (fn) {\n const result = fn.call(targetObject, e);\n if (isOnce) {\n targetObject.off(type, fn);\n }\n if (result === false) {\n return false;\n }\n }\n }\n return;\n };\n }\n\n if (!USER_HANDLER_CACHE[eid]) {\n USER_HANDLER_CACHE[eid] = {};\n }\n if (!USER_HANDLER_CACHE[eid]![type]) {\n USER_HANDLER_CACHE[eid]![type] = [handler];\n if (!!node && 'on' + type in node) {\n bindDomEvent(node, type, INNER_HANDLER_CACHE[eid]![type]);\n }\n } else {\n USER_HANDLER_CACHE[eid]![type].push(handler);\n }\n}\n\nfunction _addEvent(this: any, type: string | string[], handler: any, isOnce?: boolean) {\n isOnce = !!isOnce;\n if (utils.isString(type)) {\n type = (type as string).match(/\\S+/g) || [];\n }\n utils.each(type, (currentType: string) => {\n listen(this.node, currentType, handler, isOnce, this);\n });\n return this;\n}\n\nfunction _removeEvent(this: any, type: string, handler?: any) {\n const eventId = String(getEventUid(this));\n const userHandlerList = USER_HANDLER_CACHE[eventId]![type];\n let isRemoveAll = handler === undefined;\n\n if (!isRemoveAll && userHandlerList) {\n isRemoveAll = true;\n utils.each(userHandlerList, (fn: any, index: number) => {\n if (fn === handler) {\n delete userHandlerList[index];\n } else {\n isRemoveAll = false;\n }\n });\n }\n\n if (isRemoveAll) {\n deleteDomEvent(this.node, type, INNER_HANDLER_CACHE[eventId]![type]);\n delete USER_HANDLER_CACHE[eventId]![type];\n delete INNER_HANDLER_CACHE[eventId]![type];\n }\n return this;\n}\n\nconst EventHandler = createClass<EventHandlerInstance>('EventHandler', {\n constructor() {\n setLegacyEventUid(this, ++_guid);\n },\n\n addEventListener(type: any, handler: any) {\n return _addEvent.call(this, type, handler, false);\n },\n\n addOnceEventListener(type: any, handler: any) {\n return _addEvent.call(this, type, handler, true);\n },\n\n removeEventListener(type: any, handler?: any) {\n return _removeEvent.call(this, type, handler);\n },\n\n on(type: any, handler: any) {\n return this.addEventListener(type, handler);\n },\n\n once(type: any, handler: any) {\n return this.addOnceEventListener(type, handler);\n },\n\n off(type: any, handler?: any) {\n return this.removeEventListener(type, handler);\n },\n\n fire(type: string, params?: any) {\n return this.trigger(type, params);\n },\n\n trigger(type: string, params?: any) {\n sendMessage(this, type, params);\n return this;\n },\n});\n\n/* ===== ShapeEvent ===== */\n\nconst ShapeEvent = createClass<any>('ShapeEvent', {\n constructor(event: any) {\n let target: any = null;\n\n if (!utils.isObject(event.target)) {\n this.type = event.type;\n target = event.target;\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n }\n this.originEvent = event;\n this.targetShape =\n target.shape ||\n target.paper ||\n (event.currentTarget && (event.currentTarget.shape || event.currentTarget.paper));\n if (event._kityParam) {\n utils.extend(this, event._kityParam);\n }\n } else {\n utils.extend(this, event);\n }\n },\n\n preventDefault() {\n const evt = this.originEvent;\n if (!evt) {\n return true;\n }\n\n evt.preventDefault();\n return evt.cancelable;\n },\n\n getPosition(refer?: any, touchIndex?: number) {\n if (!this.originEvent) {\n return null;\n }\n const eventClient = this.originEvent.touches\n ? this.originEvent.touches[touchIndex || 0]\n : this.originEvent;\n const target = this.targetShape;\n const targetNode = target.shapeNode || target.node;\n const pScreen = new pc(\n (eventClient && eventClient.clientX) || 0,\n (eventClient && eventClient.clientY) || 0,\n );\n const pTarget = mc.transformPoint(pScreen, targetNode.getScreenCTM().inverse());\n const pRefer = mc.getCTM(target, refer || 'view').transformPoint(pTarget);\n return pRefer;\n },\n\n stopPropagation() {\n const evt = this.originEvent;\n if (!evt) {\n return true;\n }\n\n evt.stopPropagation();\n },\n});\n\n/* ===== Styled ===== */\n\nconst _ClassListProto: any = {\n constructor(node: HTMLElement) {\n this._node = node;\n this._list = node.className.toString().split(' ');\n },\n _update() {\n this._node.className = this._list.join(' ');\n },\n add(name: string) {\n this._list.push(name);\n this._update();\n },\n remove(name: string) {\n const index = this._list.indexOf(name);\n if (~index) {\n this._list.splice(index, 1);\n }\n this._update();\n },\n contains(name: string) {\n return !!~this._list.indexOf(name);\n },\n};\n\nfunction _getClassList(node: any) {\n if (!node.classList) {\n node.classList = new (createClass('ClassList', _ClassListProto))(node);\n }\n return node.classList;\n}\n\nconst Styled = createClass<StyledInstance>('Styled', {\n addClass(name: string) {\n _getClassList(this.node).add(name);\n return this;\n },\n\n removeClass(name: string) {\n _getClassList(this.node).remove(name);\n return this;\n },\n\n hasClass(name: string) {\n return _getClassList(this.node).contains(name);\n },\n\n setStyle(styleOrName: string | Record<string, string>, value?: string) {\n if (arguments.length === 2 && typeof styleOrName === 'string') {\n (this.node.style as any)[styleOrName as string] = value;\n return this;\n }\n if (typeof styleOrName === 'object') {\n for (const name in styleOrName) {\n if (Object.prototype.hasOwnProperty.call(styleOrName, name)) {\n (this.node.style as any)[name] = (styleOrName as any)[name];\n }\n }\n }\n return this;\n },\n});\n\n/* ===== Data ===== */\n\nconst Data = createClass<DataInstance>('Data', {\n constructor() {\n this._data = {};\n },\n\n setData(name: string, value: any) {\n this._data[name] = value;\n return this;\n },\n\n getData(name: string) {\n return this._data[name];\n },\n\n removeData(name: string) {\n delete this._data[name];\n return this;\n },\n});\n\n/* ===== Container ===== */\n\nfunction itemRemove(this: any) {\n this.container.removeItem(this);\n return this;\n}\n\nconst Container = createClass<ContainerInstance>('Container', {\n getItems() {\n return this.items || (this.items = []);\n },\n\n getItem(index: number) {\n return this.getItems()[index];\n },\n\n getFirstItem() {\n return this.getItem(0);\n },\n\n getLastItem() {\n return this.getItem(this.getItems().length - 1);\n },\n\n indexOf(item: any) {\n return this.getItems().indexOf(item);\n },\n\n eachItem(fn: any) {\n const items = this.getItems();\n for (let i = 0; i < items.length; i++) {\n fn.call(this, i, items[i]);\n }\n return this;\n },\n\n addItem(item: any, pos?: number, noEvent?: boolean) {\n const items = this.getItems();\n const length = items.length;\n\n if (~items.indexOf(item)) {\n return this;\n }\n\n if (!(pos! >= 0 && pos! < length)) {\n pos = length;\n }\n\n items.splice(pos!, 0, item);\n\n if (typeof item === 'object') {\n item.container = this;\n item.remove = itemRemove;\n }\n\n this.handleAdd(item, pos!);\n\n if (!noEvent) {\n this.onContainerChanged('add', [item]);\n }\n\n return this;\n },\n\n addItems(items: any[]) {\n for (let i = 0, l = items.length; i < l; i++) {\n this.addItem(items[i], -1, true);\n }\n this.onContainerChanged('add', items);\n return this;\n },\n\n setItems(items: any[]) {\n return this.clear().addItems(items);\n },\n\n appendItem(item: any) {\n return this.addItem(item);\n },\n\n prependItem(item: any) {\n return this.addItem(item, 0);\n },\n\n removeItem(pos: any, noEvent?: boolean) {\n if (typeof pos !== 'number') {\n return this.removeItem(this.indexOf(pos));\n }\n\n const items = this.getItems();\n const item = items[pos];\n\n if (item === undefined) {\n return this;\n }\n\n items.splice(pos, 1);\n\n if (item.container) {\n delete item.container;\n }\n if (item.remove) {\n delete item.remove;\n }\n\n this.handleRemove(item, pos);\n\n if (!noEvent) {\n this.onContainerChanged('remove', [item]);\n }\n\n return this;\n },\n\n clear() {\n const removed: any[] = [];\n let item: any;\n while ((item = this.getFirstItem()) !== undefined) {\n removed.push(item);\n this.removeItem(0, true);\n }\n this.onContainerChanged('remove', removed);\n return this;\n },\n\n onContainerChanged(_type: string, _items: any[]) {},\n\n handleAdd(_item: any, _index: number) {},\n\n handleRemove(_item: any, _index: number) {},\n});\n\n/* ===== Shape ===== */\n\nconst Shape = createClass<ShapeInstance>('Shape', {\n mixins: [EventHandler, Styled, Data],\n\n constructor(tagName: string) {\n this.node = svg.createNode(tagName);\n (this.node as any).shape = this;\n this.transform = {\n translate: null,\n rotate: null,\n scale: null,\n matrix: null,\n };\n this.callMixin();\n },\n\n getId() {\n return this.node.id;\n },\n\n setId(id: string) {\n this.node.id = id;\n return this;\n },\n\n getNode() {\n return this.node;\n },\n\n getBoundaryBox() {\n let box: any;\n try {\n box = (this.node as SVGGraphicsElement).getBBox();\n } catch {\n box = {\n x: this.node.clientLeft,\n y: this.node.clientTop,\n width: this.node.clientWidth,\n height: this.node.clientHeight,\n };\n }\n return new Box(box);\n },\n\n getRenderBox(refer?: any) {\n const box = this.getBoundaryBox();\n const matrix = this.getTransform(refer);\n return matrix.transformBox(box);\n },\n\n getWidth() {\n return this.getRenderBox().width;\n },\n\n getHeight() {\n return this.getRenderBox().height;\n },\n\n getSize() {\n const box = this.getRenderBox();\n delete (box as any).x;\n delete (box as any).y;\n return box;\n },\n\n setOpacity(value: string | number) {\n this.node.setAttribute('opacity', String(value));\n return this;\n },\n\n getOpacity() {\n const opacity = this.node.getAttribute('opacity');\n return opacity ? +opacity : 1;\n },\n\n setVisible(value: boolean) {\n if (value) {\n this.node.removeAttribute('display');\n } else {\n this.node.setAttribute('display', 'none');\n }\n return this;\n },\n\n getVisible() {\n this.node.getAttribute('display');\n },\n\n hasAncestor(node: any) {\n let parent = this.container;\n while (parent) {\n if (parent === node) {\n return true;\n }\n parent = parent.container;\n }\n return false;\n },\n\n getTransform(refer?: any) {\n return mc.getCTM(this, refer);\n },\n\n clearTransform() {\n this.node.removeAttribute('transform');\n this.transform = {\n translate: null,\n rotate: null,\n scale: null,\n matrix: null,\n };\n this.trigger('shapeupdate', {\n type: 'transform',\n });\n return this;\n },\n\n _applyTransform() {\n const t = this.transform;\n const result: any[] = [];\n if (t.translate) {\n result.push(['translate(', t.translate, ')']);\n }\n if (t.rotate) {\n result.push(['rotate(', t.rotate, ')']);\n }\n if (t.scale) {\n result.push(['scale(', t.scale, ')']);\n }\n if (t.matrix) {\n result.push(['matrix(', t.matrix, ')']);\n }\n this.node.setAttribute('transform', utils.flatten(result).join(' '));\n return this;\n },\n\n setMatrix(m: any) {\n this.transform.matrix = m;\n return this._applyTransform();\n },\n\n setTranslate(t: any) {\n this.transform.translate = (t !== null && [].slice.call(arguments)) || null;\n return this._applyTransform();\n },\n\n setRotate(r: any) {\n this.transform.rotate = (r !== null && [].slice.call(arguments)) || null;\n return this._applyTransform();\n },\n\n setScale(s: any) {\n this.transform.scale = (s !== null && [].slice.call(arguments)) || null;\n return this._applyTransform();\n },\n\n translate(dx: number, dy?: number) {\n let m = this.transform.matrix || new mc();\n if (dy === undefined) {\n dy = 0;\n }\n this.transform.matrix = m.translate(dx, dy);\n return this._applyTransform();\n },\n\n rotate(deg: number) {\n let m = this.transform.matrix || new mc();\n this.transform.matrix = m.rotate(deg);\n return this._applyTransform();\n },\n\n scale(sx: number, sy?: number) {\n let m = this.transform.matrix || new mc();\n if (sy === undefined) {\n sy = sx;\n }\n this.transform.matrix = m.scale(sx, sy);\n return this._applyTransform();\n },\n\n skew(sx: number, sy?: number) {\n let m = this.transform.matrix || new mc();\n if (sy === undefined) {\n sy = sx;\n }\n this.transform.matrix = m.skew(sx, sy);\n return this._applyTransform();\n },\n\n stroke(pen: any, width?: number) {\n if (pen && pen.stroke) {\n pen.stroke(this);\n } else if (pen) {\n this.node.setAttribute('stroke', pen.toString());\n if (width) {\n this.node.setAttribute('stroke-width', String(width));\n }\n } else if (pen === null) {\n this.node.removeAttribute('stroke');\n }\n return this;\n },\n\n fill(brush: any) {\n if (brush) {\n this.node.setAttribute('fill', brush.toString());\n }\n if (brush === null) {\n this.node.removeAttribute('fill');\n }\n return this;\n },\n\n setAttr(a: string | Record<string, any>, v?: string) {\n if (utils.isObject(a)) {\n utils.each(a, (val: any, key: string) => {\n this.setAttr(key, val);\n });\n return this;\n }\n if (v === undefined || v === null || v === '') {\n this.node.removeAttribute(a as string);\n } else {\n this.node.setAttribute(a as string, v);\n }\n return this;\n },\n\n getAttr(a: string) {\n return this.node.getAttribute(a);\n },\n});\n\n/* ===== ShapeContainer ===== */\n\nconst ShapeContainer = createClass<ShapeContainerInstance>('ShapeContainer', {\n base: Container,\n\n isShapeContainer: true,\n\n handleAdd(shape: any, index: number) {\n const parent = this.getShapeNode();\n parent.insertBefore(shape.node, parent.childNodes[index] || null);\n shape.trigger('add', { container: this });\n if (shape.notifyTreeModification) {\n shape.notifyTreeModification('treeadd', this);\n }\n },\n\n handleRemove(shape: any, _index: number) {\n const parent = this.getShapeNode();\n parent.removeChild(shape.node);\n shape.trigger('remove', {\n container: this,\n });\n if (shape.notifyTreeModification) {\n shape.notifyTreeModification('treeremove', this);\n }\n },\n\n notifyTreeModification(type: string, container: any) {\n this.eachItem((_index: number, shape: any) => {\n if (shape.notifyTreeModification) {\n shape.notifyTreeModification(type, container);\n }\n shape.trigger(type, { container });\n });\n },\n\n getShape(index: number) {\n return this.getItem(index);\n },\n\n addShape(shape: any, index?: number) {\n return this.addItem(shape, index);\n },\n\n put(shape: any) {\n this.addShape(shape);\n return shape;\n },\n\n appendShape(shape: any) {\n return this.addShape(shape);\n },\n\n prependShape(shape: any) {\n return this.addShape(shape, 0);\n },\n\n replaceShape(replacer: any, origin: any) {\n const index = this.indexOf(origin);\n if (index === -1) {\n return;\n }\n this.removeShape(index);\n this.addShape(replacer, index);\n return this;\n },\n\n addShapeBefore(shape: any, refer: any) {\n const index = this.indexOf(refer);\n return this.addShape(shape, index);\n },\n\n addShapeAfter(shape: any, refer: any) {\n const index = this.indexOf(refer);\n return this.addShape(shape, index === -1 ? undefined : index + 1);\n },\n\n addShapes(shapes: any[]) {\n return this.addItems(shapes);\n },\n\n removeShape(index: number) {\n return this.removeItem(index);\n },\n\n getShapes() {\n return this.getItems();\n },\n\n getShapesByType(name: string): any[] {\n const shapes: any[] = [];\n const getShapes = (shape: any) => {\n if (name.toLowerCase() === shape.getType().toLowerCase()) {\n shapes.push(shape);\n }\n if (shape.isShapeContainer) {\n utils.each(shape.getShapes(), (n: any) => {\n getShapes(n);\n });\n }\n };\n getShapes(this);\n return shapes;\n },\n\n getShapeById(id: string) {\n return ((this.getShapeNode() as SVGSVGElement).getElementById(id) as any).shape;\n },\n\n arrangeShape(shape: any, index: number) {\n return this.removeShape(shape).addShape(shape, index);\n },\n\n getShapeNode() {\n return this.shapeNode || this.node;\n },\n});\n\n/* ===== Shape extensions via ShapeContainer ===== */\n\nextendClass(Shape, {\n bringTo(index: number) {\n this.container.arrangeShape(this, index);\n return this;\n },\n\n bringFront() {\n return this.bringTo(this.container.indexOf(this) + 1);\n },\n\n bringBack() {\n return this.bringTo(this.container.indexOf(this) - 1);\n },\n\n bringTop() {\n this.container.removeShape(this).addShape(this);\n return this;\n },\n\n bringRear() {\n return this.bringTo(0);\n },\n\n bringRefer(referShape: any, offset?: number) {\n if (referShape.container) {\n if (this.remove) {\n this.remove();\n }\n referShape.container.addShape(this, referShape.container.indexOf(referShape) + (offset || 0));\n }\n return this;\n },\n\n bringAbove(referShape: any) {\n return this.bringRefer(referShape);\n },\n\n bringBelow(referShape: any) {\n return this.bringRefer(referShape, 1);\n },\n\n replaceBy(newShape: any) {\n if (this.container) {\n newShape.bringAbove(this);\n this.remove();\n }\n return this;\n },\n});\n\n/* ===== ViewBox ===== */\n\nconst ViewBox = createClass<ViewBoxInstance>('ViewBox', {\n getViewBox() {\n const attr = this.node.getAttribute('viewBox');\n if (attr === null) {\n return {\n x: 0,\n y: 0,\n width: this.node.clientWidth || (this.node.parentNode as Element)?.clientWidth || 0,\n height: this.node.clientHeight || (this.node.parentNode as Element)?.clientHeight || 0,\n };\n } else {\n const parts = attr.split(' ');\n return {\n x: +parts[0],\n y: +parts[1],\n width: +parts[2],\n height: +parts[3],\n };\n }\n },\n\n setViewBox(x: number, y: number, width: number, height: number) {\n this.node.setAttribute('viewBox', [x, y, width, height].join(' '));\n return this;\n },\n});\n\n/* ===== TextContent ===== */\n\nconst TextContent = createClass<TextContentInstance>('TextContent', {\n base: Shape,\n\n constructor(nodeType: string) {\n this.callBase(nodeType);\n this.shapeNode = this.shapeNode || this.node;\n this.shapeNode.setAttribute('text-rendering', 'geometricPrecision');\n },\n\n clearContent() {\n while (this.shapeNode.firstChild) {\n this.shapeNode.removeChild(this.shapeNode.firstChild);\n }\n return this;\n },\n\n setContent(content: string) {\n this.shapeNode.textContent = content;\n return this;\n },\n\n getContent() {\n return this.shapeNode.textContent;\n },\n\n appendContent(content: string) {\n this.shapeNode.textContent += content;\n return this;\n },\n\n setSize(value: number) {\n return this.setFontSize(value);\n },\n\n setFontSize(value: number) {\n return this.setFont({\n size: value,\n });\n },\n\n setFontFamily(value: string) {\n return this.setFont({\n family: value,\n });\n },\n\n setFontBold(bold: boolean) {\n return this.setFont({\n weight: bold ? 'bold' : 'normal',\n });\n },\n\n setFontItalic(italic: boolean) {\n return this.setFont({\n style: italic ? 'italic' : 'normal',\n });\n },\n\n setFont(font: any) {\n const node = this.node;\n ['family', 'size', 'weight', 'style'].forEach((section) => {\n if (font[section] === null) {\n node.removeAttribute('font-' + section);\n } else if (font[section]) {\n node.setAttribute('font-' + section, font[section]);\n }\n });\n return this;\n },\n\n getExtentOfChar(index: number) {\n return (this.node as SVGTextContentElement).getExtentOfChar(index);\n },\n\n getRotationOfChar(index: number) {\n return (this.node as SVGTextContentElement).getRotationOfChar(index);\n },\n\n getCharNumAtPosition(x: number, y: number) {\n return (this.node as SVGTextContentElement).getCharNumAtPosition({ x, y });\n },\n});\n\n/* ===== Text ===== */\n\nconst _offsetHash: Record<string, any> = {};\n\nfunction _getTextBoundOffset(text: any) {\n const font = text._cachedFontHash;\n if (_offsetHash[font]) {\n return _offsetHash[font];\n }\n const textContent = text.getContent();\n text.setContent('\\u767e\\u5ea6Fex');\n const bbox = text.getBoundaryBox();\n const y = text.getY();\n if (!bbox.height) {\n return { top: 0, bottom: 0, middle: 0 };\n }\n const topOffset = y - bbox.y + +text.node.getAttribute('dy');\n const bottomOffset = topOffset - bbox.height;\n text.setContent(textContent);\n _offsetHash[font] = {\n top: topOffset,\n bottom: bottomOffset,\n middle: (topOffset + bottomOffset) / 2,\n };\n return _offsetHash[font];\n}\n\nconst Text = createClass<TextInstance>('Text', {\n base: TextContent,\n mixins: [ShapeContainer],\n\n constructor(content?: string) {\n this.callBase('text');\n if (content !== undefined) {\n this.setContent(content);\n }\n this._buildFontHash();\n },\n\n fixPosition() {\n if (!this.__fixedPosition) {\n this.setVerticalAlign(this.getVerticalAlign());\n }\n },\n\n _buildFontHash() {\n const style = window.getComputedStyle(this.node);\n this._cachedFontHash = [\n style.fontFamily,\n style.fontSize,\n style.fontStretch,\n style.fontStyle,\n style.fontVariant,\n style.fontWeight,\n ].join('-');\n },\n\n _fontChanged(font: any) {\n const last = this._lastFont;\n const current = utils.extend({}, last, font);\n if (!last) {\n this._lastFont = font;\n return true;\n }\n const changed =\n last.family !== current.family ||\n last.size !== current.size ||\n last.style !== current.style ||\n last.weight !== current.weight;\n this._lastFont = current;\n return changed;\n },\n\n setX(x: number) {\n this.node.setAttribute('x', String(x));\n return this;\n },\n\n setPosition(x: number, y: number) {\n return this.setX(x).setY(y);\n },\n\n setY(y: number) {\n this.node.setAttribute('y', String(y));\n return this;\n },\n\n getX() {\n return +(this.node.getAttribute('x') || '0');\n },\n\n getY() {\n return +(this.node.getAttribute('y') || '0');\n },\n\n setFont(font: any) {\n this.callBase(font);\n if (this._fontChanged(font)) {\n this._buildFontHash();\n this.setVerticalAlign(this.getVerticalAlign());\n }\n return this;\n },\n\n setTextAnchor(anchor: string) {\n this.node.setAttribute('text-anchor', anchor);\n return this;\n },\n\n getTextAnchor() {\n return this.node.getAttribute('text-anchor') || 'start';\n },\n\n setVerticalAlign(align: string) {\n this.whenPaperReady(() => {\n let dy: number;\n switch (align) {\n case 'top':\n dy = _getTextBoundOffset(this).top;\n break;\n case 'bottom':\n dy = _getTextBoundOffset(this).bottom;\n break;\n case 'middle':\n dy = _getTextBoundOffset(this).middle;\n break;\n default:\n dy = 0;\n }\n if (dy) {\n this.__fixedPosition = true;\n }\n this.node.setAttribute('dy', dy as any);\n });\n this.verticalAlign = align;\n return this;\n },\n\n getVerticalAlign() {\n return this.verticalAlign || 'baseline';\n },\n\n setStartOffset(offset: number) {\n if (this.shapeNode !== this.node) {\n this.shapeNode.setAttribute('startOffset', offset * 100 + '%');\n }\n },\n\n addSpan(span: any) {\n this.addShape(span);\n return this;\n },\n\n setPath(path: any) {\n let textpath = this.shapeNode;\n if (this.shapeNode === this.node) {\n textpath = this.shapeNode = svg.createNode('textPath');\n while (this.node.firstChild) {\n this.shapeNode.appendChild(this.node.firstChild);\n }\n this.node.appendChild(textpath);\n }\n textpath.setAttributeNS(svg.xlink, 'xlink:href', '#' + path.node.id);\n this.setTextAnchor(this.getTextAnchor());\n return this;\n },\n});\n\n/* ===== PathDrawer ===== */\n\nconst PathDrawer = createClass<any>('PathDrawer', {\n constructor(path: any) {\n this.segment = [];\n this.path = path;\n this.__clear = false;\n },\n\n getPath() {\n return this.path;\n },\n\n redraw() {\n this._transation = this._transation || [];\n return this.clear();\n },\n\n done() {\n const transation = this._transation;\n this._transation = null;\n this.push(transation);\n return this;\n },\n\n clear() {\n if (this._transation) {\n this._transation = [];\n } else {\n this.path.setPathData('M 0 0');\n }\n this._clear = true;\n return this;\n },\n\n push() {\n const segment = [].slice.call(arguments);\n let originData;\n if (this._transation) {\n this._transation.push(segment);\n return this;\n }\n if (this._clear) {\n originData = '';\n this._clear = false;\n } else {\n originData = this.path.getPathData();\n }\n originData = originData || '';\n this.path.setPathData(originData + g.pathToString(segment));\n return this;\n },\n\n moveTo(_x: number, _y: number) {\n return this.push('M', [].slice.call(arguments));\n },\n\n moveBy(_dx: number, _dy: number) {\n return this.push('m', [].slice.call(arguments));\n },\n\n lineTo(_x: number, _y: number) {\n return this.push('L', [].slice.call(arguments));\n },\n\n lineBy(_dx: number, _dy: number) {\n return this.push('l', [].slice.call(arguments));\n },\n\n arcTo(\n _rx: number,\n _ry: number,\n _xr: number,\n _laf: number,\n _sf: number,\n _x: number,\n _y: number,\n ) {\n return this.push('A', [].slice.call(arguments));\n },\n\n arcBy(\n _rx: number,\n _ry: number,\n _xr: number,\n _laf: number,\n _sf: number,\n _dx: number,\n _dy: number,\n ) {\n return this.push('a', arguments);\n },\n\n carcTo(r: number, _laf: number, _sf: number, _x: number, _y: number) {\n return this.push('A', [r, r, 0].concat([].slice.call(arguments, 1)));\n },\n\n carcBy(r: number, _laf: number, _sf: number, _dx: number, _dy: number) {\n return this.push('a', [r, r, 0].concat([].slice.call(arguments, 1)));\n },\n\n bezierTo(_x1: number, _y1: number, _x2: number, _y2: number, _x: number, _y: number) {\n return this.push('C', [].slice.call(arguments));\n },\n\n bezierBy(\n _dx1: number,\n _dy1: number,\n _dx2: number,\n _dy2: number,\n _dx: number,\n _dy: number,\n ) {\n return this.push('c', [].slice.call(arguments));\n },\n\n close() {\n return this.push('z');\n },\n});\n\n/* ===== Path ===== */\n\nconst Path = createClass<PathInstance>('Path', {\n base: Shape,\n\n constructor(data?: string) {\n this.callBase('path');\n if (data) {\n this.setPathData(data);\n }\n this.node.setAttribute('fill', svg.defaults.fill);\n this.node.setAttribute('stroke', svg.defaults.stroke);\n },\n\n setPathData(data: any) {\n data = data || 'M0,0';\n this.pathdata = g.pathToString(data);\n this.node.setAttribute('d', this.pathdata);\n this.trigger('shapeupdate', {\n type: 'pathdata',\n });\n return this;\n },\n\n getPathData() {\n return this.pathdata || '';\n },\n\n getDrawer() {\n return new PathDrawer(this);\n },\n\n isClosed() {\n const data = this.getPathData();\n return !!~data.indexOf('z') || !!~data.indexOf('Z');\n },\n});\n\n/* ===== Rect ===== */\n\nconst RectUtils = {\n formatRadius(width: number, height: number, radius: number) {\n const minValue = Math.floor(Math.min(width / 2, height / 2));\n return Math.min(minValue, radius);\n },\n};\n\nconst Rect = createClass<RectInstance>('Rect', {\n base: Path,\n\n constructor(width?: number, height?: number, x?: number, y?: number, radius?: number) {\n this.callBase();\n this.x = x || 0;\n this.y = y || 0;\n this.width = width || 0;\n this.height = height || 0;\n this.radius = RectUtils.formatRadius(this.width, this.height, radius || 0);\n this.update();\n },\n\n update() {\n const x = this.x,\n y = this.y,\n w = this.width,\n h = this.height,\n r = this.radius;\n const drawer = this.getDrawer().redraw();\n\n if (!r) {\n drawer.push('M', x, y);\n drawer.push('h', w);\n drawer.push('v', h);\n drawer.push('h', -w);\n drawer.push('z');\n } else {\n const w2 = w - 2 * r;\n const h2 = h - 2 * r;\n drawer.push('M', x + r, y);\n drawer.push('h', w2);\n drawer.push('a', r, r, 0, 0, 1, r, r);\n drawer.push('v', h2);\n drawer.push('a', r, r, 0, 0, 1, -r, r);\n drawer.push('h', -w2);\n drawer.push('a', r, r, 0, 0, 1, -r, -r);\n drawer.push('v', -h2);\n drawer.push('a', r, r, 0, 0, 1, r, -r);\n drawer.push('z');\n }\n drawer.done();\n return this;\n },\n\n setWidth(width: number) {\n this.width = width;\n return this.update();\n },\n\n setHeight(height: number) {\n this.height = height;\n return this.update();\n },\n\n setSize(width: number, height: number) {\n this.width = width;\n this.height = height;\n return this.update();\n },\n\n setBox(box: any) {\n this.x = box.x;\n this.y = box.y;\n this.width = box.width;\n this.height = box.height;\n return this.update();\n },\n\n getBox() {\n return new Box(this.x, this.y, this.width, this.height);\n },\n\n getRadius() {\n return this.radius;\n },\n\n setRadius(radius: number) {\n this.radius = RectUtils.formatRadius(this.width, this.height, radius || 0);\n return this.update();\n },\n\n getPosition() {\n return new pc(this.x, this.y);\n },\n\n setPosition(xOrP: any, y?: number) {\n if (arguments.length === 1) {\n const p = pc.parse(arguments[0]);\n y = p.y;\n xOrP = p.x;\n }\n this.x = xOrP;\n this.y = y as number;\n return this.update();\n },\n\n getWidth() {\n return this.width;\n },\n\n getHeight() {\n return this.height;\n },\n\n getPositionX() {\n return this.x;\n },\n\n getPositionY() {\n return this.y;\n },\n\n setPositionX(x: number) {\n this.x = x;\n return this.update();\n },\n\n setPositionY(y: number) {\n this.y = y;\n return this.update();\n },\n});\n\n/* ===== Group ===== */\n\nconst Group = createClass<GroupInstance>('Group', {\n mixins: [ShapeContainer],\n base: Shape,\n\n constructor() {\n this.callBase('g');\n },\n});\n\n/* ===== Use ===== */\n\nconst Use = createClass<any>('Use', {\n base: Shape,\n\n constructor(shape?: any) {\n this.callBase('use');\n this.ref(shape);\n },\n\n ref(shape: any) {\n if (!shape) {\n this.node.removeAttributeNS(svg.xlink, 'xlink:href');\n return this;\n }\n const shapeId = shape.getId();\n if (shapeId) {\n this.node.setAttributeNS(svg.xlink, 'xlink:href', '#' + shapeId);\n }\n if (shape.node.getAttribute('fill') === 'none') {\n shape.node.removeAttribute('fill');\n }\n if (shape.node.getAttribute('stroke') === 'none') {\n shape.node.removeAttribute('stroke');\n }\n return this;\n },\n});\n\nextendClass(Shape, {\n use() {\n return new Use(this);\n },\n});\n\n/* ===== Paper ===== */\n\nconst Paper = createClass<PaperInstance>('Paper', {\n mixins: [ShapeContainer, EventHandler, Styled, ViewBox],\n\n constructor(container?: HTMLElement | string) {\n this.callBase();\n this.node = this.createSVGNode();\n (this.node as any).paper = this;\n this.node.appendChild((this.resourceNode = svg.createNode('defs') as SVGDefsElement));\n this.node.appendChild((this.shapeNode = svg.createNode('g') as SVGGElement));\n this.resources = new Container();\n this.setWidth('100%').setHeight('100%');\n if (container) {\n this.renderTo(container);\n }\n this.callMixin();\n },\n\n renderTo(container: HTMLElement | string) {\n if (utils.isString(container)) {\n container = document.getElementById(container as string) as HTMLElement;\n }\n this.container = container as HTMLElement;\n (container as HTMLElement).appendChild(this.node);\n },\n\n createSVGNode() {\n const node = svg.createNode('svg');\n node.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n node.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n node.setAttribute('version', '1.1');\n return node;\n },\n\n getNode() {\n return this.node;\n },\n\n getContainer() {\n return this.container;\n },\n\n getWidth() {\n return this.node.clientWidth;\n },\n\n setWidth(width: string | number) {\n this.node.setAttribute('width', String(width));\n return this;\n },\n\n getHeight() {\n return this.node.clientHeight;\n },\n\n setHeight(height: string | number) {\n this.node.setAttribute('height', String(height));\n return this;\n },\n\n setViewPort(cx: any, cy?: number, zoom?: number) {\n let viewport: any, box: any;\n if (arguments.length === 1) {\n viewport = arguments[0];\n cx = viewport.center.x;\n cy = viewport.center.y;\n zoom = viewport.zoom;\n }\n zoom = zoom || 1;\n box = this.getViewBox();\n const matrix = new mc();\n const dx = box.x + box.width / 2 - (cx as number);\n const dy = box.y + box.height / 2 - (cy as number);\n matrix.translate(-(cx as number), -(cy as number));\n matrix.scale(zoom);\n matrix.translate(cx as number, cy as number);\n matrix.translate(dx, dy);\n this.shapeNode.setAttribute('transform', 'matrix(' + matrix + ')');\n this.viewport = {\n center: { x: cx, y: cy },\n offset: { x: dx, y: dy },\n zoom,\n };\n return this;\n },\n\n getViewPort() {\n if (!this.viewport) {\n const box = this.getViewBox();\n return {\n zoom: 1,\n center: {\n x: box.x + box.width / 2,\n y: box.y + box.height / 2,\n },\n offset: { x: 0, y: 0 },\n };\n }\n return this.viewport;\n },\n\n getViewPortMatrix() {\n return mc.parse(this.shapeNode.getAttribute('transform'));\n },\n\n getViewPortTransform() {\n const m = this.shapeNode.getCTM()!;\n return new mc(m.a, m.b, m.c, m.d, m.e, m.f);\n },\n\n getTransform() {\n return this.getViewPortTransform().reverse();\n },\n\n addResource(resource: any) {\n this.resources.appendItem(resource);\n if (resource.node) {\n this.resourceNode.appendChild(resource.node);\n }\n return this;\n },\n\n removeResource(resource: any) {\n if (resource.remove) {\n resource.remove();\n }\n if (resource.node) {\n this.resourceNode.removeChild(resource.node);\n }\n return this;\n },\n\n getPaper() {\n return this;\n },\n}) as unknown as PaperConstructor;\n\n/* ===== Paper extensions on Shape ===== */\n\nextendClass(Shape, {\n getPaper() {\n let parent = this.container;\n while (parent && parent instanceof Paper === false) {\n parent = parent.container;\n }\n return parent;\n },\n\n isAttached() {\n return !!this.getPaper();\n },\n\n whenPaperReady(fn: (paper: any) => void) {\n const me = this;\n function check(): any {\n const paper = me.getPaper();\n if (paper && fn) {\n fn.call(me, paper);\n }\n return paper;\n }\n if (!check()) {\n this.on('add treeadd', function listen() {\n if (check()) {\n me.off('add', listen);\n me.off('treeadd', listen);\n }\n });\n }\n return this;\n },\n});\n\nexport {\n svg,\n EventHandler,\n Styled,\n Data,\n Container,\n Shape,\n ShapeContainer,\n ViewBox,\n PathDrawer,\n Path,\n Rect,\n Group,\n Text,\n Paper,\n Use,\n ShapeEvent,\n};\n","import { createClass, extendClass, Class } from './class-system';\nimport utils, { type KityUtils } from './utils';\nimport { Box, Point, g, Matrix } from './geometry';\nimport {\n svg,\n EventHandler,\n Styled,\n Data,\n Container,\n Shape,\n ShapeContainer,\n ViewBox,\n PathDrawer,\n Path,\n Rect,\n Group,\n Text,\n Paper,\n Use,\n} from './graphics';\n\nexport interface Kity {\n version: string;\n createClass: typeof createClass;\n extendClass: typeof extendClass;\n Utils: KityUtils;\n Class: typeof Class;\n Box: typeof Box;\n Point: typeof Point;\n Matrix: typeof Matrix;\n g: typeof g;\n Container: typeof Container;\n Shape: typeof Shape;\n ShapeContainer: typeof ShapeContainer;\n Group: typeof Group;\n Rect: typeof Rect;\n Path: typeof Path;\n Text: typeof Text;\n Paper: typeof Paper;\n Use: typeof Use;\n ViewBox: typeof ViewBox;\n EventHandler: typeof EventHandler;\n Styled: typeof Styled;\n Data: typeof Data;\n PathDrawer: typeof PathDrawer;\n svg: typeof svg;\n}\n\nconst kity: Kity = {\n version: '2.0.5',\n createClass,\n extendClass,\n Utils: utils as unknown as KityUtils,\n Class: Class as unknown as typeof Class,\n Box: Box as unknown as typeof Box,\n Point: Point as unknown as typeof Point,\n Matrix: Matrix as unknown as typeof Matrix,\n g,\n Container: Container as unknown as typeof Container,\n Shape: Shape as unknown as typeof Shape,\n ShapeContainer: ShapeContainer as unknown as typeof ShapeContainer,\n Group: Group as unknown as typeof Group,\n Rect: Rect as unknown as typeof Rect,\n Path: Path as unknown as typeof Path,\n Text: Text as unknown as typeof Text,\n Paper: Paper as unknown as typeof Paper,\n Use: Use as unknown as typeof Use,\n ViewBox: ViewBox as unknown as typeof ViewBox,\n EventHandler: EventHandler as unknown as typeof EventHandler,\n Styled: Styled as unknown as typeof Styled,\n Data: Data as unknown as typeof Data,\n PathDrawer: PathDrawer as unknown as typeof PathDrawer,\n svg,\n};\n\nexport default kity;\n\nexport function installKityRuntime(targetWindow: Window & typeof globalThis = window) {\n if ((targetWindow as any).kity) {\n return;\n }\n (targetWindow as any).kity = kity;\n}\n","type FormulaXPerfState = {\n reportedMeasureCount: number;\n reportScheduled: boolean;\n};\n\ntype FormulaXPerfHost = typeof globalThis & {\n __FORMULAX_PERF__?: boolean;\n __FORMULAX_PERF_STATE__?: FormulaXPerfState;\n};\n\nfunction getPerfHost(): FormulaXPerfHost {\n return globalThis as FormulaXPerfHost;\n}\n\nfunction getPerfState(): FormulaXPerfState {\n const host = getPerfHost();\n\n host.__FORMULAX_PERF_STATE__ ??= {\n reportedMeasureCount: 0,\n reportScheduled: false,\n };\n\n return host.__FORMULAX_PERF_STATE__;\n}\n\nfunction hasPerfSupport(): boolean {\n return typeof performance !== 'undefined'\n && typeof performance.mark === 'function'\n && typeof performance.measure === 'function'\n && typeof performance.getEntriesByType === 'function';\n}\n\nfunction isPerfDebugEnabled(): boolean {\n return getPerfHost().__FORMULAX_PERF__ === true;\n}\n\nfunction schedulePerfReport(): void {\n if (!hasPerfSupport() || !isPerfDebugEnabled()) {\n return;\n }\n\n const state = getPerfState();\n if (state.reportScheduled) {\n return;\n }\n\n state.reportScheduled = true;\n\n queueMicrotask(() => {\n state.reportScheduled = false;\n\n const entries = performance\n .getEntriesByType('measure')\n .filter((entry): entry is PerformanceMeasure => entry.name.startsWith('fx:'))\n .sort((left, right) => left.startTime - right.startTime);\n\n const nextEntries = entries.slice(state.reportedMeasureCount);\n state.reportedMeasureCount = entries.length;\n\n if (!nextEntries.length) {\n return;\n }\n\n console.table(nextEntries.map((entry) => ({\n name: entry.name,\n duration: Number(entry.duration.toFixed(2)),\n startTime: Number(entry.startTime.toFixed(2)),\n })));\n });\n}\n\nexport function markFormulaXPerf(name: string): string | null {\n if (!hasPerfSupport()) {\n return null;\n }\n\n const markName = `${name}::${Date.now()}::${Math.random().toString(36).slice(2, 8)}`;\n performance.mark(markName);\n return markName;\n}\n\nexport function measureFormulaXPerf(\n name: string,\n startMark: string | null,\n endMark?: string | null,\n): string | null {\n if (!hasPerfSupport() || !startMark) {\n return null;\n }\n\n const resolvedEndMark = endMark ?? markFormulaXPerf(`${name}:end`);\n if (!resolvedEndMark) {\n return null;\n }\n\n performance.measure(name, startMark, resolvedEndMark);\n schedulePerfReport();\n return resolvedEndMark;\n}\n\nexport function recordFormulaXPerfPoint(name: string): void {\n const markName = markFormulaXPerf(name);\n if (!markName) {\n return;\n }\n\n measureFormulaXPerf(name, markName, markName);\n clearFormulaXPerfMarks(markName);\n}\n\nexport function clearFormulaXPerfMarks(...marks: Array<string | null | undefined>): void {\n if (!hasPerfSupport()) {\n return;\n }\n\n for (const mark of marks) {\n if (!mark) {\n continue;\n }\n\n performance.clearMarks(mark);\n }\n}\n","import { kityAssetManifest, type KityAssetManifest } from './asset-manifest';\r\nimport { legacyBoxType } from './vendor/legacy-box-type';\r\nimport { legacyCharPosition } from './vendor/char-position';\r\nimport { legacyOtherPosition } from './vendor/other-position';\r\nimport { legacyCommonUtils } from './vendor/legacy-common';\r\nimport { createLegacyBaseComponent } from './vendor/legacy-component';\r\nimport { legacyEleType } from './vendor/legacy-ele-type';\r\nimport { legacyEventListener } from './vendor/legacy-event';\r\nimport { legacyGroupType } from './vendor/legacy-group-type';\r\nimport { legacyInputFilter } from './vendor/legacy-input-filter';\r\nimport { legacyItemType } from './vendor/legacy-item-type';\r\nimport { legacyKfExtDef } from './vendor/legacy-kf-ext-def';\r\nimport { legacyKfEvent } from './vendor/legacy-kfevent';\r\nimport { legacySysconf } from './vendor/legacy-sysconf';\r\nimport { legacyUiDef } from './vendor/legacy-ui-def';\r\nimport { legacyUiUtils } from './vendor/legacy-ui-utils';\r\nimport { legacyBaseUtils } from './vendor/legacy-utils';\r\nimport { installKityRuntime } from './kity/index';\r\nimport {\r\n clearFormulaXPerfMarks,\r\n markFormulaXPerf,\r\n measureFormulaXPerf,\r\n} from './perf';\r\nimport { setToolbarAssetUrls } from './toolbar-assets';\nimport {\n DEFAULT_FORMULAX_LOCALE,\n getFormulaXRuntimeMessage,\n normalizeFormulaXLocale,\n type FormulaXLocale,\n} from './i18n';\n\r\nconst DEFAULT_LATEX = 'x=\\\\frac{-b\\\\pm\\\\sqrt{b^2-4ac}}{2a}';\r\nconst DEFAULT_EDITOR_HEIGHT = 'auto';\r\nconst KITY_STYLE_ID = 'formulax-kity-editor-styles';\r\n\r\ntype EditorRuntimeFactory = {\r\n ready: (\r\n callback: (this: { execCommand: (name: string, value?: string) => unknown }) => void,\r\n ) => void;\r\n};\r\n\r\ntype EditorFactory = {\r\n create: (\r\n container: HTMLElement,\r\n options: {\n render: { fontsize: number };\n ui?: { locale?: FormulaXLocale };\n resource: { path: string; fonts?: KityFontAssetMap };\n },\n ) => EditorRuntimeFactory;\n};\r\n\r\nexport type KityFontAssetMap = KityAssetManifest['fonts'];\r\nexport type KityToolbarAssetMap = KityAssetManifest['toolbar'];\r\nexport type KityStyleAssetMap = KityAssetManifest['styles'];\r\nexport type KityEditorAssets = {\r\n fonts: KityFontAssetMap;\r\n toolbar: KityToolbarAssetMap;\r\n styles: KityStyleAssetMap;\r\n};\r\n\r\ntype KityWindow = Window &\r\n typeof globalThis & {\r\n kity?: unknown;\r\n __kityFormulaRequire__?: <T = unknown>(id: string) => T | null;\r\n __kityFormulaUse__?: <T = unknown>(id: string) => T | null;\r\n __FORMULAX_KITY_RUNTIME__?: {\r\n baseComponent?: unknown;\r\n baseUtils?: typeof legacyBaseUtils;\r\n boxType?: typeof legacyBoxType;\r\n sysconf: typeof legacySysconf;\r\n charPosition: typeof legacyCharPosition;\r\n commonUtils?: typeof legacyCommonUtils;\r\n eleType?: typeof legacyEleType;\r\n eventListener?: typeof legacyEventListener;\r\n groupType?: typeof legacyGroupType;\r\n inputFilter?: typeof legacyInputFilter;\r\n itemType?: typeof legacyItemType;\r\n kf?: unknown;\r\n kfExtDef?: typeof legacyKfExtDef;\r\n kfEvent?: typeof legacyKfEvent;\r\n kity?: unknown;\r\n otherPosition: typeof legacyOtherPosition;\r\n uiDef?: typeof legacyUiDef;\r\n uiUtils: typeof legacyUiUtils;\r\n };\r\n kf?: Record<string, unknown> & {\r\n EditorFactory?: EditorFactory;\r\n ResourceManager?: {\r\n ready: (\r\n callback: (formula: unknown) => void,\r\n options?: { path?: string; fonts?: KityFontAssetMap },\r\n ) => void;\r\n };\r\n };\r\n };\r\n\r\nexport type KityEditorOptions = {\n height?: number | string;\n initialLatex?: string;\n autofocus?: boolean;\n locale?: FormulaXLocale;\n assets?: Partial<KityEditorAssets>;\n render?: {\n fontsize?: number;\n };\r\n};\r\n\r\nexport type KityEditorConstructorOptions = KityEditorOptions & {\r\n el: string | HTMLElement;\r\n};\r\n\r\nexport type KityEditorHandle = {\r\n ready: EditorRuntimeFactory['ready'];\r\n execCommand: (name: string, value?: string) => void;\r\n focus: () => void;\r\n destroy: () => void;\r\n host: HTMLElement;\r\n raw: EditorRuntimeFactory;\r\n};\r\n\r\nlet runtimePromise: Promise<void> | null = null;\r\n\r\nfunction resolveContainer(el: string | HTMLElement) {\r\n if (typeof el === 'string') {\r\n const element = document.querySelector(el);\r\n\r\n if (!(element instanceof HTMLElement)) {\r\n throw new Error(`Kity editor mount target not found: ${el}`);\r\n }\r\n\r\n return element;\r\n }\r\n\r\n return el;\r\n}\r\n\r\nfunction normalizeCssSize(value: number | string | undefined, fallback: string) {\r\n if (typeof value === 'number') {\r\n return `${value}px`;\r\n }\r\n\r\n return value ?? fallback;\r\n}\r\n\r\nfunction resolveEditorAssets(assets?: Partial<KityEditorAssets>): KityEditorAssets {\r\n return {\r\n fonts: {\r\n ...kityAssetManifest.fonts,\r\n ...assets?.fonts,\r\n },\r\n toolbar: {\r\n ...kityAssetManifest.toolbar,\r\n ...assets?.toolbar,\r\n },\r\n styles: {\r\n ...kityAssetManifest.styles,\r\n ...assets?.styles,\r\n },\r\n };\r\n}\r\n\r\nfunction ensureKityStylesheet(doc: Document, href: string): boolean {\r\n if (doc.getElementById(KITY_STYLE_ID)) {\r\n return false;\r\n }\r\n\r\n const link = doc.createElement('link');\r\n link.id = KITY_STYLE_ID;\r\n link.rel = 'stylesheet';\r\n link.href = href;\r\n doc.head.appendChild(link);\r\n return true;\r\n}\r\n\r\nfunction hydrateLegacyKf(runtimeWindow: KityWindow) {\r\n const requireFormula = runtimeWindow.__kityFormulaRequire__;\r\n\r\n if (!requireFormula) {\r\n return;\r\n }\r\n\r\n runtimeWindow.kf = {\r\n ...(runtimeWindow.kf ?? {}),\r\n ResourceManager: requireFormula('resource-manager') as NonNullable<\r\n KityWindow['kf']\r\n >['ResourceManager'],\r\n Operator: requireFormula('operator/operator'),\r\n Expression: requireFormula('expression/expression'),\r\n CompoundExpression: requireFormula('expression/compound'),\r\n TextExpression: requireFormula('expression/text'),\r\n EmptyExpression: requireFormula('expression/empty'),\r\n CombinationExpression: requireFormula('expression/compound-exp/combination'),\r\n FunctionExpression: requireFormula('expression/compound-exp/func'),\r\n FractionExpression: requireFormula('expression/compound-exp/fraction'),\r\n IntegrationExpression: requireFormula('expression/compound-exp/integration'),\r\n RadicalExpression: requireFormula('expression/compound-exp/radical'),\r\n ScriptExpression: requireFormula('expression/compound-exp/script'),\r\n SuperscriptExpression: requireFormula('expression/compound-exp/binary-exp/superscript'),\r\n SubscriptExpression: requireFormula('expression/compound-exp/binary-exp/subscript'),\r\n SummationExpression: requireFormula('expression/compound-exp/summation'),\r\n BracketsExpression: requireFormula('expression/compound-exp/brackets'),\r\n };\r\n}\r\n\r\nfunction installLegacyRuntime(runtimeWindow: KityWindow) {\r\n runtimeWindow.__FORMULAX_KITY_RUNTIME__ = {\r\n baseComponent: runtimeWindow.kity\r\n ? createLegacyBaseComponent(\r\n runtimeWindow.kity as { createClass: (name: string, definition: object) => unknown },\r\n )\r\n : undefined,\r\n baseUtils: legacyBaseUtils,\r\n boxType: legacyBoxType,\r\n sysconf: legacySysconf,\r\n charPosition: legacyCharPosition,\r\n commonUtils: legacyCommonUtils,\r\n eleType: legacyEleType,\r\n eventListener: legacyEventListener,\r\n groupType: legacyGroupType,\r\n inputFilter: legacyInputFilter,\r\n itemType: legacyItemType,\r\n kf: runtimeWindow.kf,\r\n kfExtDef: legacyKfExtDef,\r\n kfEvent: legacyKfEvent,\r\n kity: runtimeWindow.kity,\r\n otherPosition: legacyOtherPosition,\r\n uiDef: legacyUiDef,\r\n uiUtils: legacyUiUtils,\r\n };\r\n}\r\n\r\nexport async function ensureKityRuntime() {\r\n if (runtimePromise) {\r\n return runtimePromise;\r\n }\r\n\r\n runtimePromise = (async () => {\r\n const runtimeTotalStart = markFormulaXPerf('fx:kity-runtime:total');\r\n const runtimeWindow = window as KityWindow;\r\n\r\n runtimeWindow.kf = runtimeWindow.kf ?? {};\r\n\r\n installKityRuntime(runtimeWindow);\r\n\r\n try {\r\n const formulaImportStart = markFormulaXPerf('fx:kity-runtime:formula-import');\r\n const { installLegacyKityFormulaRuntime } = await import('./vendor/kity-formula/install');\r\n const formulaImportEnd = markFormulaXPerf('fx:kity-runtime:formula-import:end');\r\n measureFormulaXPerf('fx:kity-runtime:formula-import', formulaImportStart, formulaImportEnd);\r\n clearFormulaXPerfMarks(formulaImportStart, formulaImportEnd);\r\n\r\n const formulaInstallStart = markFormulaXPerf('fx:kity-runtime:formula-install');\r\n installLegacyKityFormulaRuntime(runtimeWindow);\r\n hydrateLegacyKf(runtimeWindow);\r\n const formulaInstallEnd = markFormulaXPerf('fx:kity-runtime:formula-install:end');\r\n measureFormulaXPerf('fx:kity-runtime:formula-install', formulaInstallStart, formulaInstallEnd);\r\n clearFormulaXPerfMarks(formulaInstallStart, formulaInstallEnd);\r\n\r\n const parserImportStart = markFormulaXPerf('fx:kity-runtime:parser-import');\r\n const { installLegacyParserRuntime } = await import('./vendor/kity-formula-parser/install');\r\n const parserImportEnd = markFormulaXPerf('fx:kity-runtime:parser-import:end');\r\n measureFormulaXPerf('fx:kity-runtime:parser-import', parserImportStart, parserImportEnd);\r\n clearFormulaXPerfMarks(parserImportStart, parserImportEnd);\r\n\r\n const parserInstallStart = markFormulaXPerf('fx:kity-runtime:parser-install');\r\n installLegacyParserRuntime(runtimeWindow);\r\n const parserInstallEnd = markFormulaXPerf('fx:kity-runtime:parser-install:end');\r\n measureFormulaXPerf('fx:kity-runtime:parser-install', parserInstallStart, parserInstallEnd);\r\n clearFormulaXPerfMarks(parserInstallStart, parserInstallEnd);\r\n\r\n installLegacyRuntime(runtimeWindow);\r\n\r\n const bootImportStart = markFormulaXPerf('fx:kity-runtime:boot-import');\r\n const { installKityEditorStart } = await import('./boot/start');\r\n const bootImportEnd = markFormulaXPerf('fx:kity-runtime:boot-import:end');\r\n measureFormulaXPerf('fx:kity-runtime:boot-import', bootImportStart, bootImportEnd);\r\n clearFormulaXPerfMarks(bootImportStart, bootImportEnd);\r\n\r\n const bootInstallStart = markFormulaXPerf('fx:kity-runtime:boot-install');\r\n installKityEditorStart(runtimeWindow);\r\n const bootInstallEnd = markFormulaXPerf('fx:kity-runtime:boot-install:end');\r\n measureFormulaXPerf('fx:kity-runtime:boot-install', bootInstallStart, bootInstallEnd);\r\n clearFormulaXPerfMarks(bootInstallStart, bootInstallEnd);\r\n } finally {\r\n const runtimeTotalEnd = markFormulaXPerf('fx:kity-runtime:total:end');\r\n measureFormulaXPerf('fx:kity-runtime:total', runtimeTotalStart, runtimeTotalEnd);\r\n clearFormulaXPerfMarks(runtimeTotalStart, runtimeTotalEnd);\r\n }\r\n })();\r\n\r\n return runtimePromise;\r\n}\r\n\r\nexport async function createKityEditor(\r\n container: HTMLElement,\r\n options: KityEditorOptions = {},\r\n): Promise<KityEditorHandle> {\r\n const createEditorStart = markFormulaXPerf('fx:create-kity-editor:total');\r\n const fontsize = options.render?.fontsize ?? 40;\n const editorHeight = normalizeCssSize(options.height, DEFAULT_EDITOR_HEIGHT);\n const locale = normalizeFormulaXLocale(options.locale ?? DEFAULT_FORMULAX_LOCALE);\n const assets = resolveEditorAssets(options.assets);\n\n try {\n legacySysconf.rootPlaceholder.content = getFormulaXRuntimeMessage('editor.placeholder.root', locale);\n\n const stylesheetInserted = ensureKityStylesheet(document, assets.styles.editor);\n if (stylesheetInserted) {\r\n const stylesheetInsertedMark = markFormulaXPerf('fx:kity-css:link-inserted');\r\n measureFormulaXPerf('fx:kity-css:link-inserted', createEditorStart, stylesheetInsertedMark);\r\n clearFormulaXPerfMarks(stylesheetInsertedMark);\r\n }\r\n\r\n setToolbarAssetUrls(assets.toolbar);\r\n\r\n await ensureKityRuntime();\r\n\r\n const runtimeReadyMark = markFormulaXPerf('fx:kity-runtime:ready-for-editor');\r\n measureFormulaXPerf('fx:kity-runtime:ready-for-editor', createEditorStart, runtimeReadyMark);\r\n clearFormulaXPerfMarks(runtimeReadyMark);\r\n\r\n const runtimeWindow = window as KityWindow;\r\n\r\n if (!runtimeWindow.kf?.EditorFactory) {\r\n throw new Error('Kity editor runtime did not initialize');\r\n }\r\n\r\n container.innerHTML = '';\r\n\r\n const host = document.createElement('div');\r\n host.className = 'kf-editor';\r\n host.style.width = '100%';\r\n host.style.height = editorHeight;\r\n\r\n container.appendChild(host);\r\n\r\n const factoryCreateStart = markFormulaXPerf('fx:kity-editor-factory:create');\r\n const factory = runtimeWindow.kf.EditorFactory.create(host, {\n render: {\n fontsize,\n },\n ui: {\n locale,\n },\n resource: {\n path: '',\n fonts: assets.fonts,\n },\r\n });\r\n const factoryCreateEnd = markFormulaXPerf('fx:kity-editor-factory:create:end');\r\n measureFormulaXPerf('fx:kity-editor-factory:create', factoryCreateStart, factoryCreateEnd);\r\n clearFormulaXPerfMarks(factoryCreateStart, factoryCreateEnd);\r\n\r\n return {\r\n ready: factory.ready.bind(factory),\r\n execCommand(name, value) {\r\n factory.ready(function execWhenReady() {\r\n this.execCommand(name, value);\r\n });\r\n },\r\n focus() {\r\n factory.ready(function focusWhenReady() {\r\n this.execCommand('focus');\r\n });\r\n },\r\n destroy() {\r\n container.innerHTML = '';\r\n },\r\n host,\r\n raw: factory,\r\n };\r\n } finally {\r\n const createEditorEnd = markFormulaXPerf('fx:create-kity-editor:total:end');\r\n measureFormulaXPerf('fx:create-kity-editor:total', createEditorStart, createEditorEnd);\r\n clearFormulaXPerfMarks(createEditorStart, createEditorEnd);\r\n }\r\n}\r\n\r\nexport async function mountKityEditor(container: HTMLElement, options: KityEditorOptions = {}) {\r\n const editor = await createKityEditor(container, options);\r\n const initialLatex = options.initialLatex ?? DEFAULT_LATEX;\r\n const shouldFocus = options.autofocus ?? true;\r\n\r\n editor.ready(function ready() {\r\n this.execCommand('render', initialLatex);\r\n\r\n if (shouldFocus) {\r\n this.execCommand('focus');\r\n }\r\n });\r\n\r\n return editor;\r\n}\r\n\r\nexport class FormulaXEditor {\r\n private readonly container: HTMLElement;\r\n private readonly options: KityEditorOptions;\r\n private readonly handlePromise: Promise<KityEditorHandle>;\r\n\r\n constructor(options: KityEditorConstructorOptions) {\r\n const { el, ...editorOptions } = options;\r\n this.container = resolveContainer(el);\r\n this.options = editorOptions;\r\n this.handlePromise = mountKityEditor(this.container, this.options);\r\n }\r\n\r\n ready(callback: Parameters<KityEditorHandle['ready']>[0]) {\r\n void this.handlePromise.then((handle) => handle.ready(callback));\r\n return this;\r\n }\r\n\r\n async execCommand(name: string, value?: string) {\r\n const handle = await this.handlePromise;\r\n handle.execCommand(name, value);\r\n return this;\r\n }\r\n\r\n async focus() {\r\n const handle = await this.handlePromise;\r\n handle.focus();\r\n return this;\r\n }\r\n\r\n async destroy() {\r\n const handle = await this.handlePromise;\r\n handle.destroy();\r\n }\r\n\r\n async getHandle() {\r\n return this.handlePromise;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n FormulaXEditor?: typeof FormulaXEditor;\r\n }\r\n}\r\n\r\nif (typeof window !== 'undefined') {\r\n window.FormulaXEditor = FormulaXEditor;\r\n}\r\n","import type {\n FormulaXTinyMceOptions,\n RequiredFormulaXTinyMceOptions,\n TinyMceEditorLike,\n TinyMceLike,\n} from './types';\nimport { DEFAULT_FORMULAX_LOCALE } from '@formulaxjs/kity-runtime';\nimport { getFormulaXEditorMessage, scheduleFormulaXEditorPreload } from '@formulaxjs/editor';\nimport { createKityFormulaRenderer } from '@formulaxjs/renderer-kity';\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 const locale = options.editor?.locale ?? DEFAULT_FORMULAX_LOCALE;\n\n return {\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 initialLatex: options.initialLatex ?? '',\n renderer: options.renderer ?? createKityFormulaRenderer({\n fontSize: options.editor?.render?.fontsize ?? 40,\n height: options.editor?.height ?? '100%',\n assets: options.editor?.assets ?? {},\n }),\n preload: options.preload ?? 'idle',\n modal: {\n title: options.modal?.title ?? getFormulaXEditorMessage('modal.title', locale),\n insertText: options.modal?.insertText ?? getFormulaXEditorMessage('modal.insert', locale),\n updateText: options.modal?.updateText ?? getFormulaXEditorMessage('modal.update', locale),\n cancelText: options.modal?.cancelText ?? getFormulaXEditorMessage('modal.cancel', locale),\n width: options.modal?.width ?? '1100px',\n height: options.modal?.height ?? 'auto',\n closeOnBackdrop: options.modal?.closeOnBackdrop ?? true,\n },\n editor: {\n height: options.editor?.height ?? '100%',\n autofocus: options.editor?.autofocus ?? true,\n locale,\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 let preloadCleanup: (() => void) | null = null;\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 preloadCleanup = scheduleFormulaXEditorPreload(\n resolved.preload,\n editor.getBody?.() ?? null,\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) => {\n const e = event as KeyboardEvent;\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\n editor.on('remove', () => {\n preloadCleanup?.();\n preloadCleanup = null;\n });\n\n return undefined;\n },\n );\r\n}\r\n","import type { FormulaXModalOpenOptions, TinyMceEditorLike } from './types';\nimport {\n clearFormulaXPerfMarks,\n markFormulaXPerf,\n measureFormulaXPerf,\n recordFormulaXPerfPoint,\n renderFormulaXEditorLoadingState,\n waitForFormulaXAnimationFrame,\n} from '@formulaxjs/editor';\nimport { ensureTinyMceStyles } from './styles';\nimport { mountFormulaXEditorInModal } from './editor-host';\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 recordFormulaXPerfPoint('fx:modal:open:start');\n const modalOpenStart = markFormulaXPerf('fx:modal:open:start:scope');\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 const modalDomReadyMark = markFormulaXPerf('fx:modal:dom-ready');\n measureFormulaXPerf('fx:modal:dom-ready', modalOpenStart, modalDomReadyMark);\n clearFormulaXPerfMarks(modalDomReadyMark);\n\n const host = root.querySelector<HTMLElement>('.fx-formula-editor-host');\n if (!host) {\n root.remove();\n clearFormulaXPerfMarks(modalOpenStart);\n throw new Error('[FormulaX] Modal editor host not found.');\n }\n\n renderFormulaXEditorLoadingState(host);\n let closed = false;\n let mounted: ReturnType<typeof mountFormulaXEditorInModal> | null = null;\n\n const mountedPromise = waitForFormulaXAnimationFrame()\n .then(() => {\n if (closed) {\n clearFormulaXPerfMarks(modalOpenStart);\n return null;\n }\n\n const mountStartMark = markFormulaXPerf('fx:modal:editor-mount-start');\n measureFormulaXPerf('fx:modal:editor-mount-start', modalOpenStart, mountStartMark);\n clearFormulaXPerfMarks(mountStartMark);\n\n const nextMounted = mountFormulaXEditorInModal(host, { initialLatex, options });\n mounted = nextMounted;\n\n const mountedMark = markFormulaXPerf('fx:modal:editor-mounted');\n measureFormulaXPerf('fx:modal:editor-mounted', modalOpenStart, mountedMark);\n clearFormulaXPerfMarks(mountedMark, modalOpenStart);\n\n queueMicrotask(() => {\n if (!closed) {\n nextMounted.root.focus();\n }\n });\n\n return nextMounted;\n })\n .catch((error) => {\n clearFormulaXPerfMarks(modalOpenStart);\n throw error;\n });\n\n const close = (): void => {\n if (closed) return;\n closed = true;\n\n mounted?.destroy();\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\n const submit = async (): Promise<void> => {\n const activeMounted = mounted ?? await mountedPromise;\n if (!activeMounted) {\n return;\n }\n\n const latex = await activeMounted.getLatex();\n const renderHtml = latex.trim()\n ? (await options.renderer.renderLatex(latex, {\n fontSize: options.editor.render?.fontsize ?? 40,\n className: options.formulaClassName,\n })).html\n : undefined;\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\n root.addEventListener('click', onClick);\n document.addEventListener('keydown', onKeydown, true);\n\n return { close };\n}\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 {\n ensureFormulaXBaseStyles,\n} from '@formulaxjs/renderer';\nimport {\n ensureFormulaXModalStyles,\n formulaXModalStyles,\n} from '@formulaxjs/editor';\n\nexport const tinymceStyles = formulaXModalStyles;\n\nexport function ensureTinyMceStyles(doc: Document = document): void {\n ensureFormulaXBaseStyles(doc);\n ensureFormulaXModalStyles(doc);\n}\n","import {\n mountFormulaXEditor,\n type FormulaXEditorOptions,\n} from '@formulaxjs/editor';\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 locale: input.options.editor.locale,\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"],"mappings":"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AK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA,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","names":["meta","listen","clearFormulaXPerfMarks","markFormulaXPerf","measureFormulaXPerf","markFormulaXPerf","measureFormulaXPerf","clearFormulaXPerfMarks"]}
|