@notectl/core 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +12 -10
  2. package/dist/chunks/{AttrRegistry-Ckj9eCHj.mjs → AttrRegistry-iNpjvcSG.mjs} +2 -2
  3. package/dist/chunks/{AttrRegistry-Ckj9eCHj.mjs.map → AttrRegistry-iNpjvcSG.mjs.map} +1 -1
  4. package/dist/chunks/AttributedMarkCommands-BY1BSYWM.mjs +2 -0
  5. package/dist/chunks/{AttributedMarkCommands-x7h4Xy7V.mjs.map → AttributedMarkCommands-BY1BSYWM.mjs.map} +1 -1
  6. package/dist/chunks/BlockInsertion-BJFhE0jA.mjs +2 -0
  7. package/dist/chunks/BlockInsertion-BJFhE0jA.mjs.map +1 -0
  8. package/dist/chunks/{ColorPickerPopup-CDUvkgcK.mjs → ColorPickerPopup-D6XjShhv.mjs} +2 -2
  9. package/dist/chunks/{ColorPickerPopup-CDUvkgcK.mjs.map → ColorPickerPopup-D6XjShhv.mjs.map} +1 -1
  10. package/dist/chunks/CommandHelpers-M6mPS6Ww.mjs +2 -0
  11. package/dist/chunks/CommandHelpers-M6mPS6Ww.mjs.map +1 -0
  12. package/dist/chunks/Commands-D_gMCnVa.mjs +2 -0
  13. package/dist/chunks/Commands-D_gMCnVa.mjs.map +1 -0
  14. package/dist/chunks/Document-3pNX7ear.mjs +2 -0
  15. package/dist/chunks/{Document-HC8s50qJ.mjs.map → Document-3pNX7ear.mjs.map} +1 -1
  16. package/dist/chunks/{DocumentParser-w70-Axud.mjs → DocumentParser-LvzDQOd1.mjs} +2 -2
  17. package/dist/chunks/{DocumentParser-w70-Axud.mjs.map → DocumentParser-LvzDQOd1.mjs.map} +1 -1
  18. package/dist/chunks/{HeadingPlugin-B-LF-AMM.mjs → HeadingPlugin-BmkeUXj8.mjs} +2 -2
  19. package/dist/chunks/{HeadingPlugin-B-LF-AMM.mjs.map → HeadingPlugin-BmkeUXj8.mjs.map} +1 -1
  20. package/dist/chunks/MarkCommands-CeCa4WSC.mjs +2 -0
  21. package/dist/chunks/{MarkCommands-CTuVDqnn.mjs.map → MarkCommands-CeCa4WSC.mjs.map} +1 -1
  22. package/dist/chunks/NavigationQueries-11qe4j9x.mjs +2 -0
  23. package/dist/chunks/NavigationQueries-11qe4j9x.mjs.map +1 -0
  24. package/dist/chunks/NodeResolver-z0ReCR34.mjs +2 -0
  25. package/dist/chunks/NodeResolver-z0ReCR34.mjs.map +1 -0
  26. package/dist/chunks/NodeSelectionCommands-CXrOcPtG.mjs +2 -0
  27. package/dist/chunks/NodeSelectionCommands-CXrOcPtG.mjs.map +1 -0
  28. package/dist/chunks/NotectlEditor-BJD7-FFx.mjs +4 -0
  29. package/dist/chunks/NotectlEditor-BJD7-FFx.mjs.map +1 -0
  30. package/dist/chunks/PopupManager-0b_Q0m7K.mjs +2 -0
  31. package/dist/chunks/PopupManager-0b_Q0m7K.mjs.map +1 -0
  32. package/dist/chunks/{RangeIterator-CprUbOWv.mjs → RangeIterator-XFN5FaYf.mjs} +2 -2
  33. package/dist/chunks/{RangeIterator-CprUbOWv.mjs.map → RangeIterator-XFN5FaYf.mjs.map} +1 -1
  34. package/dist/chunks/SelectionTransactions-DzIZxcuN.mjs +2 -0
  35. package/dist/chunks/{SelectionTransactions-DB3YDIEa.mjs.map → SelectionTransactions-DzIZxcuN.mjs.map} +1 -1
  36. package/dist/chunks/{TextDirectionLocale-BraFI9JF.mjs → TextDirectionLocale-CKz0ZrH_.mjs} +2 -2
  37. package/dist/chunks/{TextDirectionLocale-BraFI9JF.mjs.map → TextDirectionLocale-CKz0ZrH_.mjs.map} +1 -1
  38. package/dist/chunks/index-C-L4awHz.mjs +2 -0
  39. package/dist/chunks/index-C-L4awHz.mjs.map +1 -0
  40. package/dist/chunks/{index-D3BZFsAD.mjs → index-Cs9iqxhF.mjs} +2 -2
  41. package/dist/chunks/{index-D3BZFsAD.mjs.map → index-Cs9iqxhF.mjs.map} +1 -1
  42. package/dist/commands/BlockInsertion.d.ts.map +1 -1
  43. package/dist/commands/CommandHelpers.d.ts +13 -2
  44. package/dist/commands/CommandHelpers.d.ts.map +1 -1
  45. package/dist/commands/NodeSelectionCommands.d.ts +3 -8
  46. package/dist/commands/NodeSelectionCommands.d.ts.map +1 -1
  47. package/dist/editor/ContentSerializer.d.ts.map +1 -1
  48. package/dist/editor/EditorConfig.d.ts +50 -0
  49. package/dist/editor/EditorConfig.d.ts.map +1 -0
  50. package/dist/editor/EditorConfigController.d.ts +1 -1
  51. package/dist/editor/EditorConfigController.d.ts.map +1 -1
  52. package/dist/editor/EditorDOM.d.ts.map +1 -1
  53. package/dist/editor/EditorInitializer.d.ts +37 -0
  54. package/dist/editor/EditorInitializer.d.ts.map +1 -0
  55. package/dist/editor/EditorLifecycleCoordinator.d.ts +6 -1
  56. package/dist/editor/EditorLifecycleCoordinator.d.ts.map +1 -1
  57. package/dist/editor/NotectlEditor.d.ts +13 -51
  58. package/dist/editor/NotectlEditor.d.ts.map +1 -1
  59. package/dist/editor/PluginBootstrapper.d.ts +1 -1
  60. package/dist/editor/PluginBootstrapper.d.ts.map +1 -1
  61. package/dist/full.mjs +1 -1
  62. package/dist/html.mjs +1 -1
  63. package/dist/input/ClipboardHandler.d.ts +5 -0
  64. package/dist/input/ClipboardHandler.d.ts.map +1 -1
  65. package/dist/input/HTMLParser.d.ts +9 -5
  66. package/dist/input/HTMLParser.d.ts.map +1 -1
  67. package/dist/input/InputHandler.d.ts +1 -0
  68. package/dist/input/InputHandler.d.ts.map +1 -1
  69. package/dist/input/PasteHTMLHandler.d.ts +25 -0
  70. package/dist/input/PasteHTMLHandler.d.ts.map +1 -0
  71. package/dist/input/PasteHandler.d.ts +2 -27
  72. package/dist/input/PasteHandler.d.ts.map +1 -1
  73. package/dist/input/PasteRichBlockHandler.d.ts +23 -0
  74. package/dist/input/PasteRichBlockHandler.d.ts.map +1 -0
  75. package/dist/input/SelectionDocument.d.ts +10 -0
  76. package/dist/input/SelectionDocument.d.ts.map +1 -0
  77. package/dist/model/RichBlockData.d.ts +12 -2
  78. package/dist/model/RichBlockData.d.ts.map +1 -1
  79. package/dist/notectl-core.mjs +1 -1
  80. package/dist/notectl-core.umd.js +1 -1
  81. package/dist/notectl-core.umd.js.map +1 -1
  82. package/dist/plugins/PluginContextFactory.d.ts +73 -0
  83. package/dist/plugins/PluginContextFactory.d.ts.map +1 -0
  84. package/dist/plugins/PluginManager.d.ts +5 -0
  85. package/dist/plugins/PluginManager.d.ts.map +1 -1
  86. package/dist/plugins/blockquote.mjs +1 -1
  87. package/dist/plugins/caret-navigation.mjs +1 -1
  88. package/dist/plugins/code-block.mjs +1 -1
  89. package/dist/plugins/font-size.mjs +1 -1
  90. package/dist/plugins/font.mjs +1 -1
  91. package/dist/plugins/gap-cursor.mjs +1 -1
  92. package/dist/plugins/hard-break.mjs +1 -1
  93. package/dist/plugins/heading.mjs +1 -1
  94. package/dist/plugins/highlight.mjs +1 -1
  95. package/dist/plugins/horizontal-rule.mjs +1 -1
  96. package/dist/plugins/image/ImageCommands.d.ts.map +1 -1
  97. package/dist/plugins/image.mjs +1 -1
  98. package/dist/plugins/image.mjs.map +1 -1
  99. package/dist/plugins/link.mjs +1 -1
  100. package/dist/plugins/list.mjs +1 -1
  101. package/dist/plugins/print.mjs +1 -1
  102. package/dist/plugins/shared/PopupManager.d.ts.map +1 -1
  103. package/dist/plugins/shared.mjs +1 -1
  104. package/dist/plugins/smart-paste.mjs +1 -1
  105. package/dist/plugins/strikethrough.mjs +1 -1
  106. package/dist/plugins/super-sub.mjs +1 -1
  107. package/dist/plugins/table/TableCommands.d.ts +1 -0
  108. package/dist/plugins/table/TableCommands.d.ts.map +1 -1
  109. package/dist/plugins/table/TableContextMenu.d.ts.map +1 -1
  110. package/dist/plugins/table/TableSelection.d.ts.map +1 -1
  111. package/dist/plugins/table.mjs +1 -1
  112. package/dist/plugins/table.mjs.map +1 -1
  113. package/dist/plugins/text-color.mjs +1 -1
  114. package/dist/plugins/text-direction-advanced.mjs +1 -1
  115. package/dist/plugins/text-direction.mjs +1 -1
  116. package/dist/plugins/text-formatting.mjs +1 -1
  117. package/dist/plugins/toolbar/ToolbarOverflowController.d.ts +2 -0
  118. package/dist/plugins/toolbar/ToolbarOverflowController.d.ts.map +1 -1
  119. package/dist/plugins/toolbar.mjs +1 -1
  120. package/dist/plugins/toolbar.mjs.map +1 -1
  121. package/dist/presets/full.mjs +1 -1
  122. package/dist/state/StepInversion.d.ts.map +1 -1
  123. package/dist/view/EditorView.d.ts +8 -58
  124. package/dist/view/EditorView.d.ts.map +1 -1
  125. package/dist/view/EditorViewEvents.d.ts +54 -0
  126. package/dist/view/EditorViewEvents.d.ts.map +1 -0
  127. package/dist/view/EditorViewNavigation.d.ts +47 -0
  128. package/dist/view/EditorViewNavigation.d.ts.map +1 -0
  129. package/dist/view/SelectionSync.d.ts.map +1 -1
  130. package/package.json +2 -2
  131. package/dist/chunks/AttributedMarkCommands-x7h4Xy7V.mjs +0 -2
  132. package/dist/chunks/BlockInsertion-zPxm6oa_.mjs +0 -2
  133. package/dist/chunks/BlockInsertion-zPxm6oa_.mjs.map +0 -1
  134. package/dist/chunks/Commands-DwXBBVGR.mjs +0 -2
  135. package/dist/chunks/Commands-DwXBBVGR.mjs.map +0 -1
  136. package/dist/chunks/Document-HC8s50qJ.mjs +0 -2
  137. package/dist/chunks/MarkCommands-CTuVDqnn.mjs +0 -2
  138. package/dist/chunks/NavigationQueries-DCOv4Ca5.mjs +0 -2
  139. package/dist/chunks/NavigationQueries-DCOv4Ca5.mjs.map +0 -1
  140. package/dist/chunks/NotectlEditor-DBBJkPCW.mjs +0 -3
  141. package/dist/chunks/NotectlEditor-DBBJkPCW.mjs.map +0 -1
  142. package/dist/chunks/PopupManager-Du3dYnsJ.mjs +0 -2
  143. package/dist/chunks/PopupManager-Du3dYnsJ.mjs.map +0 -1
  144. package/dist/chunks/SelectionTransactions-DB3YDIEa.mjs +0 -2
  145. package/dist/chunks/index-CVwf0cdH.mjs +0 -2
  146. package/dist/chunks/index-CVwf0cdH.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-D3BZFsAD.mjs","sources":["../../src/view/GapCursorNavigation.ts","../../src/plugins/gap-cursor/GapCursorLocale.ts","../../src/plugins/gap-cursor/GapCursorPlugin.ts"],"sourcesContent":["import { getBlockLength } from '../model/Document.js';\nimport { isGapCursor } from '../model/Selection.js';\nimport type { BlockId } from '../model/TypeBrands.js';\nimport { getTextDirection } from '../platform/Platform.js';\nimport type { EditorState } from '../state/EditorState.js';\nimport { isVoidBlock } from '../state/NavigationQueries.js';\nimport { moveTx, nodeSelTx } from '../state/SelectionTransactions.js';\nimport type { Transaction } from '../state/Transaction.js';\n\nexport type GapCursorDirection = 'left' | 'right' | 'up' | 'down';\n\n/**\n * Navigates from a GapCursor position.\n *\n * - Arrow toward the adjacent void block -> NodeSelection of that block.\n * - Arrow away from the void block -> find next block: void -> NodeSelection,\n * text -> TextSelection, document boundary -> no-op.\n */\nexport function navigateFromGapCursor(\n\tstate: EditorState,\n\tdirection: GapCursorDirection,\n\tcontainer?: HTMLElement,\n): Transaction | null {\n\tconst sel = state.selection;\n\tif (!isGapCursor(sel)) return null;\n\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst blockIdx: number = blockOrder.indexOf(sel.blockId);\n\tif (blockIdx < 0) return null;\n\n\t// Resolve effective horizontal direction for RTL blocks\n\tconst effectiveDir: GapCursorDirection = resolveEffectiveDirection(\n\t\tdirection,\n\t\tsel.blockId,\n\t\tcontainer,\n\t);\n\n\tconst towardVoid: boolean =\n\t\t(sel.side === 'before' && (effectiveDir === 'right' || effectiveDir === 'down')) ||\n\t\t(sel.side === 'after' && (effectiveDir === 'left' || effectiveDir === 'up'));\n\n\tif (towardVoid) return nodeSelTx(state, sel.blockId);\n\n\t// Moving away from the void block - find the neighbor in the other direction\n\tconst awayIdx: number = sel.side === 'before' ? blockIdx - 1 : blockIdx + 1;\n\tif (awayIdx < 0 || awayIdx >= blockOrder.length) return null;\n\n\tconst targetId: BlockId | undefined = blockOrder[awayIdx];\n\tif (!targetId) return null;\n\n\tif (isVoidBlock(state, targetId)) return nodeSelTx(state, targetId);\n\n\t// Text block: place cursor at start or end\n\tconst targetBlock = state.getBlock(targetId);\n\tif (!targetBlock) return null;\n\n\tconst targetOffset: number =\n\t\teffectiveDir === 'left' || effectiveDir === 'up' ? getBlockLength(targetBlock) : 0;\n\treturn moveTx(state, targetId, targetOffset);\n}\n\n/**\n * Resolves the effective navigation direction by flipping left/right\n * when the block is RTL. Vertical directions are unaffected.\n */\nfunction resolveEffectiveDirection(\n\tdirection: GapCursorDirection,\n\tblockId: BlockId,\n\tcontainer?: HTMLElement,\n): GapCursorDirection {\n\tif (!container) return direction;\n\tif (direction !== 'left' && direction !== 'right') return direction;\n\n\tconst blockEl: Element | null = container.querySelector(`[data-block-id=\"${blockId}\"]`);\n\tif (!(blockEl instanceof HTMLElement)) return direction;\n\n\tconst isRtl: boolean = getTextDirection(blockEl) === 'rtl';\n\tif (!isRtl) return direction;\n\n\treturn direction === 'left' ? 'right' : 'left';\n}\n","/** Locale interface and default English locale for the GapCursorPlugin. */\n\n// --- Locale Interface ---\n\nexport interface GapCursorLocale {\n\treadonly gapCursorActive: string;\n}\n\n// --- Default English Locale ---\n\nexport const GAP_CURSOR_LOCALE_EN: GapCursorLocale = {\n\tgapCursorActive: 'Gap cursor active. Type to insert new paragraph.',\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: GapCursorLocale }>> =\n\timport.meta.glob<{ default: GapCursorLocale }>('./locales/*.ts', { eager: false });\n\nexport async function loadGapCursorLocale(lang: string): Promise<GapCursorLocale> {\n\tif (lang === 'en') return GAP_CURSOR_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return GAP_CURSOR_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn GAP_CURSOR_LOCALE_EN;\n\t}\n}\n","/**\n * GapCursorPlugin: renders a virtual cursor at boundaries of void blocks\n * where no native browser caret can exist (e.g. between two HRs or at\n * the document edge adjacent to a void block).\n */\n\nimport { isGapCursor } from '../../model/Selection.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport { navigateFromGapCursor } from '../../view/GapCursorNavigation.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { resolveLocale } from '../shared/PluginHelpers.js';\nimport {\n\tGAP_CURSOR_LOCALE_EN,\n\ttype GapCursorLocale,\n\tloadGapCursorLocale,\n} from './GapCursorLocale.js';\n\nconst GAP_CURSOR_CSS = `\n.notectl-gap-cursor--before,\n.notectl-gap-cursor--after {\n\tposition: relative;\n}\n.notectl-gap-cursor--before::before {\n\tcontent: '';\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tinset-inline-start: 0;\n\twidth: 100%;\n\theight: 1px;\n\tbackground: currentColor;\n\ttransform: translateY(-50%);\n\tpointer-events: none;\n\tz-index: 1;\n\tanimation: notectl-gap-blink 1.1s step-end infinite;\n}\n.notectl-gap-cursor--after::after {\n\tcontent: '';\n\tdisplay: block;\n\tposition: absolute;\n\tbottom: 0;\n\tinset-inline-start: 0;\n\twidth: 100%;\n\theight: 1px;\n\tbackground: currentColor;\n\ttransform: translateY(50%);\n\tpointer-events: none;\n\tz-index: 1;\n\tanimation: notectl-gap-blink 1.1s step-end infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n\t.notectl-gap-cursor--before::before,\n\t.notectl-gap-cursor--after::after {\n\t\tanimation: none;\n\t}\n}\n@keyframes notectl-gap-blink {\n\t50% { opacity: 0; }\n}\n`;\n\nexport class GapCursorPlugin implements Plugin {\n\treadonly id = 'gap-cursor';\n\treadonly name = 'Gap Cursor';\n\treadonly priority = 5;\n\n\tprivate context: PluginContext | null = null;\n\tprivate activeCursorBlockId: BlockId | null = null;\n\tprivate activeCursorSide: 'before' | 'after' | null = null;\n\tprivate locale: GapCursorLocale = GAP_CURSOR_LOCALE_EN;\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tthis.locale = await resolveLocale(\n\t\t\tcontext,\n\t\t\tundefined,\n\t\t\tGAP_CURSOR_LOCALE_EN,\n\t\t\tloadGapCursorLocale,\n\t\t);\n\n\t\tthis.context = context;\n\n\t\tcontext.registerStyleSheet(GAP_CURSOR_CSS);\n\n\t\tconst directions: Record<string, 'left' | 'right' | 'up' | 'down'> = {\n\t\t\tArrowLeft: 'left',\n\t\t\tArrowRight: 'right',\n\t\t\tArrowUp: 'up',\n\t\t\tArrowDown: 'down',\n\t\t};\n\n\t\tconst keymap: Record<string, () => boolean> = {};\n\t\tfor (const [key, dir] of Object.entries(directions)) {\n\t\t\tkeymap[key] = (): boolean => {\n\t\t\t\tconst state: EditorState = context.getState();\n\t\t\t\tif (!isGapCursor(state.selection)) return false;\n\n\t\t\t\tconst container: HTMLElement = context.getContainer();\n\t\t\t\tconst tr: Transaction | null = navigateFromGapCursor(state, dir, container);\n\t\t\t\tif (tr) {\n\t\t\t\t\tcontext.dispatch(tr);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\tcontext.registerKeymap(keymap, { priority: 'navigation' });\n\t}\n\n\tonReady(): void {\n\t\tif (!this.context) return;\n\t\tthis.syncCursorClass(this.context.getState());\n\t}\n\n\tonStateChange(oldState: EditorState, newState: EditorState, _tr: Transaction): void {\n\t\tif (!this.context) return;\n\n\t\tthis.syncCursorClass(newState);\n\n\t\tif (!isGapCursor(oldState.selection) && isGapCursor(newState.selection)) {\n\t\t\tthis.context.announce(this.locale.gapCursorActive);\n\t\t}\n\t}\n\n\tdestroy(): void {\n\t\tthis.clearCursorClass();\n\t\tthis.context = null;\n\t}\n\n\tprivate syncCursorClass(state: EditorState): void {\n\t\tthis.clearCursorClass();\n\t\tif (!isGapCursor(state.selection) || !this.context) return;\n\n\t\tconst className: string =\n\t\t\tstate.selection.side === 'before'\n\t\t\t\t? 'notectl-gap-cursor--before'\n\t\t\t\t: 'notectl-gap-cursor--after';\n\n\t\tconst blockEl: Element | null = this.context\n\t\t\t.getContainer()\n\t\t\t.querySelector(`[data-block-id=\"${state.selection.blockId}\"]`);\n\t\tif (!(blockEl instanceof HTMLElement)) return;\n\n\t\tblockEl.classList.add(className);\n\t\tthis.activeCursorBlockId = state.selection.blockId;\n\t\tthis.activeCursorSide = state.selection.side;\n\t}\n\n\tprivate clearCursorClass(): void {\n\t\tif (!this.context || !this.activeCursorBlockId || !this.activeCursorSide) return;\n\n\t\tconst blockEl: Element | null = this.context\n\t\t\t.getContainer()\n\t\t\t.querySelector(`[data-block-id=\"${this.activeCursorBlockId}\"]`);\n\t\tif (blockEl instanceof HTMLElement) {\n\t\t\tblockEl.classList.remove('notectl-gap-cursor--before', 'notectl-gap-cursor--after');\n\t\t}\n\n\t\tthis.activeCursorBlockId = null;\n\t\tthis.activeCursorSide = null;\n\t}\n}\n"],"names":["navigateFromGapCursor","state","direction","container","sel","selection","isGapCursor","blockOrder","getBlockOrder","blockIdx","indexOf","blockId","effectiveDir","blockEl","querySelector","HTMLElement","getTextDirection","resolveEffectiveDirection","side","nodeSelTx","awayIdx","length","targetId","isVoidBlock","targetBlock","getBlock","targetOffset","getBlockLength","moveTx","GAP_CURSOR_LOCALE_EN","gapCursorActive","localeModules","assign","import","async","loadGapCursorLocale","lang","loader","default","GapCursorPlugin","id","name","priority","context","activeCursorBlockId","activeCursorSide","locale","init","this","resolveLocale","registerStyleSheet","directions","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","keymap","key","dir","Object","entries","getState","getContainer","tr","dispatch","registerKeymap","onReady","syncCursorClass","onStateChange","oldState","newState","_tr","announce","destroy","clearCursorClass","className","classList","add","remove"],"mappings":"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"}
1
+ {"version":3,"file":"index-Cs9iqxhF.mjs","sources":["../../src/view/GapCursorNavigation.ts","../../src/plugins/gap-cursor/GapCursorLocale.ts","../../src/plugins/gap-cursor/GapCursorPlugin.ts"],"sourcesContent":["import { getBlockLength } from '../model/Document.js';\nimport { isGapCursor } from '../model/Selection.js';\nimport type { BlockId } from '../model/TypeBrands.js';\nimport { getTextDirection } from '../platform/Platform.js';\nimport type { EditorState } from '../state/EditorState.js';\nimport { isVoidBlock } from '../state/NavigationQueries.js';\nimport { moveTx, nodeSelTx } from '../state/SelectionTransactions.js';\nimport type { Transaction } from '../state/Transaction.js';\n\nexport type GapCursorDirection = 'left' | 'right' | 'up' | 'down';\n\n/**\n * Navigates from a GapCursor position.\n *\n * - Arrow toward the adjacent void block -> NodeSelection of that block.\n * - Arrow away from the void block -> find next block: void -> NodeSelection,\n * text -> TextSelection, document boundary -> no-op.\n */\nexport function navigateFromGapCursor(\n\tstate: EditorState,\n\tdirection: GapCursorDirection,\n\tcontainer?: HTMLElement,\n): Transaction | null {\n\tconst sel = state.selection;\n\tif (!isGapCursor(sel)) return null;\n\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst blockIdx: number = blockOrder.indexOf(sel.blockId);\n\tif (blockIdx < 0) return null;\n\n\t// Resolve effective horizontal direction for RTL blocks\n\tconst effectiveDir: GapCursorDirection = resolveEffectiveDirection(\n\t\tdirection,\n\t\tsel.blockId,\n\t\tcontainer,\n\t);\n\n\tconst towardVoid: boolean =\n\t\t(sel.side === 'before' && (effectiveDir === 'right' || effectiveDir === 'down')) ||\n\t\t(sel.side === 'after' && (effectiveDir === 'left' || effectiveDir === 'up'));\n\n\tif (towardVoid) return nodeSelTx(state, sel.blockId);\n\n\t// Moving away from the void block - find the neighbor in the other direction\n\tconst awayIdx: number = sel.side === 'before' ? blockIdx - 1 : blockIdx + 1;\n\tif (awayIdx < 0 || awayIdx >= blockOrder.length) return null;\n\n\tconst targetId: BlockId | undefined = blockOrder[awayIdx];\n\tif (!targetId) return null;\n\n\tif (isVoidBlock(state, targetId)) return nodeSelTx(state, targetId);\n\n\t// Text block: place cursor at start or end\n\tconst targetBlock = state.getBlock(targetId);\n\tif (!targetBlock) return null;\n\n\tconst targetOffset: number =\n\t\teffectiveDir === 'left' || effectiveDir === 'up' ? getBlockLength(targetBlock) : 0;\n\treturn moveTx(state, targetId, targetOffset);\n}\n\n/**\n * Resolves the effective navigation direction by flipping left/right\n * when the block is RTL. Vertical directions are unaffected.\n */\nfunction resolveEffectiveDirection(\n\tdirection: GapCursorDirection,\n\tblockId: BlockId,\n\tcontainer?: HTMLElement,\n): GapCursorDirection {\n\tif (!container) return direction;\n\tif (direction !== 'left' && direction !== 'right') return direction;\n\n\tconst blockEl: Element | null = container.querySelector(`[data-block-id=\"${blockId}\"]`);\n\tif (!(blockEl instanceof HTMLElement)) return direction;\n\n\tconst isRtl: boolean = getTextDirection(blockEl) === 'rtl';\n\tif (!isRtl) return direction;\n\n\treturn direction === 'left' ? 'right' : 'left';\n}\n","/** Locale interface and default English locale for the GapCursorPlugin. */\n\n// --- Locale Interface ---\n\nexport interface GapCursorLocale {\n\treadonly gapCursorActive: string;\n}\n\n// --- Default English Locale ---\n\nexport const GAP_CURSOR_LOCALE_EN: GapCursorLocale = {\n\tgapCursorActive: 'Gap cursor active. Type to insert new paragraph.',\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: GapCursorLocale }>> =\n\timport.meta.glob<{ default: GapCursorLocale }>('./locales/*.ts', { eager: false });\n\nexport async function loadGapCursorLocale(lang: string): Promise<GapCursorLocale> {\n\tif (lang === 'en') return GAP_CURSOR_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return GAP_CURSOR_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn GAP_CURSOR_LOCALE_EN;\n\t}\n}\n","/**\n * GapCursorPlugin: renders a virtual cursor at boundaries of void blocks\n * where no native browser caret can exist (e.g. between two HRs or at\n * the document edge adjacent to a void block).\n */\n\nimport { isGapCursor } from '../../model/Selection.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport { navigateFromGapCursor } from '../../view/GapCursorNavigation.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { resolveLocale } from '../shared/PluginHelpers.js';\nimport {\n\tGAP_CURSOR_LOCALE_EN,\n\ttype GapCursorLocale,\n\tloadGapCursorLocale,\n} from './GapCursorLocale.js';\n\nconst GAP_CURSOR_CSS = `\n.notectl-gap-cursor--before,\n.notectl-gap-cursor--after {\n\tposition: relative;\n}\n.notectl-gap-cursor--before::before {\n\tcontent: '';\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tinset-inline-start: 0;\n\twidth: 100%;\n\theight: 1px;\n\tbackground: currentColor;\n\ttransform: translateY(-50%);\n\tpointer-events: none;\n\tz-index: 1;\n\tanimation: notectl-gap-blink 1.1s step-end infinite;\n}\n.notectl-gap-cursor--after::after {\n\tcontent: '';\n\tdisplay: block;\n\tposition: absolute;\n\tbottom: 0;\n\tinset-inline-start: 0;\n\twidth: 100%;\n\theight: 1px;\n\tbackground: currentColor;\n\ttransform: translateY(50%);\n\tpointer-events: none;\n\tz-index: 1;\n\tanimation: notectl-gap-blink 1.1s step-end infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n\t.notectl-gap-cursor--before::before,\n\t.notectl-gap-cursor--after::after {\n\t\tanimation: none;\n\t}\n}\n@keyframes notectl-gap-blink {\n\t50% { opacity: 0; }\n}\n`;\n\nexport class GapCursorPlugin implements Plugin {\n\treadonly id = 'gap-cursor';\n\treadonly name = 'Gap Cursor';\n\treadonly priority = 5;\n\n\tprivate context: PluginContext | null = null;\n\tprivate activeCursorBlockId: BlockId | null = null;\n\tprivate activeCursorSide: 'before' | 'after' | null = null;\n\tprivate locale: GapCursorLocale = GAP_CURSOR_LOCALE_EN;\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tthis.locale = await resolveLocale(\n\t\t\tcontext,\n\t\t\tundefined,\n\t\t\tGAP_CURSOR_LOCALE_EN,\n\t\t\tloadGapCursorLocale,\n\t\t);\n\n\t\tthis.context = context;\n\n\t\tcontext.registerStyleSheet(GAP_CURSOR_CSS);\n\n\t\tconst directions: Record<string, 'left' | 'right' | 'up' | 'down'> = {\n\t\t\tArrowLeft: 'left',\n\t\t\tArrowRight: 'right',\n\t\t\tArrowUp: 'up',\n\t\t\tArrowDown: 'down',\n\t\t};\n\n\t\tconst keymap: Record<string, () => boolean> = {};\n\t\tfor (const [key, dir] of Object.entries(directions)) {\n\t\t\tkeymap[key] = (): boolean => {\n\t\t\t\tconst state: EditorState = context.getState();\n\t\t\t\tif (!isGapCursor(state.selection)) return false;\n\n\t\t\t\tconst container: HTMLElement = context.getContainer();\n\t\t\t\tconst tr: Transaction | null = navigateFromGapCursor(state, dir, container);\n\t\t\t\tif (tr) {\n\t\t\t\t\tcontext.dispatch(tr);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\tcontext.registerKeymap(keymap, { priority: 'navigation' });\n\t}\n\n\tonReady(): void {\n\t\tif (!this.context) return;\n\t\tthis.syncCursorClass(this.context.getState());\n\t}\n\n\tonStateChange(oldState: EditorState, newState: EditorState, _tr: Transaction): void {\n\t\tif (!this.context) return;\n\n\t\tthis.syncCursorClass(newState);\n\n\t\tif (!isGapCursor(oldState.selection) && isGapCursor(newState.selection)) {\n\t\t\tthis.context.announce(this.locale.gapCursorActive);\n\t\t}\n\t}\n\n\tdestroy(): void {\n\t\tthis.clearCursorClass();\n\t\tthis.context = null;\n\t}\n\n\tprivate syncCursorClass(state: EditorState): void {\n\t\tthis.clearCursorClass();\n\t\tif (!isGapCursor(state.selection) || !this.context) return;\n\n\t\tconst className: string =\n\t\t\tstate.selection.side === 'before'\n\t\t\t\t? 'notectl-gap-cursor--before'\n\t\t\t\t: 'notectl-gap-cursor--after';\n\n\t\tconst blockEl: Element | null = this.context\n\t\t\t.getContainer()\n\t\t\t.querySelector(`[data-block-id=\"${state.selection.blockId}\"]`);\n\t\tif (!(blockEl instanceof HTMLElement)) return;\n\n\t\tblockEl.classList.add(className);\n\t\tthis.activeCursorBlockId = state.selection.blockId;\n\t\tthis.activeCursorSide = state.selection.side;\n\t}\n\n\tprivate clearCursorClass(): void {\n\t\tif (!this.context || !this.activeCursorBlockId || !this.activeCursorSide) return;\n\n\t\tconst blockEl: Element | null = this.context\n\t\t\t.getContainer()\n\t\t\t.querySelector(`[data-block-id=\"${this.activeCursorBlockId}\"]`);\n\t\tif (blockEl instanceof HTMLElement) {\n\t\t\tblockEl.classList.remove('notectl-gap-cursor--before', 'notectl-gap-cursor--after');\n\t\t}\n\n\t\tthis.activeCursorBlockId = null;\n\t\tthis.activeCursorSide = null;\n\t}\n}\n"],"names":["navigateFromGapCursor","state","direction","container","sel","selection","isGapCursor","blockOrder","getBlockOrder","blockIdx","indexOf","blockId","effectiveDir","blockEl","querySelector","HTMLElement","getTextDirection","resolveEffectiveDirection","side","nodeSelTx","awayIdx","length","targetId","isVoidBlock","targetBlock","getBlock","targetOffset","getBlockLength","moveTx","GAP_CURSOR_LOCALE_EN","gapCursorActive","localeModules","assign","import","async","loadGapCursorLocale","lang","loader","default","GapCursorPlugin","id","name","priority","context","activeCursorBlockId","activeCursorSide","locale","init","this","resolveLocale","registerStyleSheet","directions","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","keymap","key","dir","Object","entries","getState","getContainer","tr","dispatch","registerKeymap","onReady","syncCursorClass","onStateChange","oldState","newState","_tr","announce","destroy","clearCursorClass","className","classList","add","remove"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BlockInsertion.d.ts","sourceRoot":"","sources":["../../src/commands/BlockInsertion.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEN,KAAK,SAAS,EASd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,wBAAwB,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,OAAO,EACtB,cAAc,CAAC,EAAE,cAAc,GAC7B,gBAAgB,GAAG,SAAS,CAU9B;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,OAAO,EACf,cAAc,CAAC,EAAE,cAAc,GAC7B,gBAAgB,GAAG,SAAS,CAa9B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAY/F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAIxE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,kBAAkB,EAC3B,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,eAAe,EAC1B,cAAc,CAAC,EAAE,cAAc,GAC7B,OAAO,CAmCT;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,CAQhF;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAQ5F;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,GACvD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,CAmBvD;AAiBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,aAAa,EAClB,cAAc,CAAC,EAAE,cAAc,GAC7B,aAAa,GAAG,SAAS,CAY3B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,aAAa,GAAG,SAAS,CAS3E"}
1
+ {"version":3,"file":"BlockInsertion.d.ts","sourceRoot":"","sources":["../../src/commands/BlockInsertion.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEN,KAAK,SAAS,EAWd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,wBAAwB,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,OAAO,EACtB,cAAc,CAAC,EAAE,cAAc,GAC7B,gBAAgB,GAAG,SAAS,CAU9B;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,OAAO,EACf,cAAc,CAAC,EAAE,cAAc,GAC7B,gBAAgB,GAAG,SAAS,CAa9B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAY/F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAIxE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,kBAAkB,EAC3B,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,eAAe,EAC1B,cAAc,CAAC,EAAE,cAAc,GAC7B,OAAO,CAmCT;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,CAQhF;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAQ5F;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,GACvD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,CAmBvD;AAiBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,aAAa,EAClB,cAAc,CAAC,EAAE,cAAc,GAC7B,aAAa,GAAG,SAAS,CAmB3B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,aAAa,GAAG,SAAS,CAY3E"}
@@ -1,5 +1,5 @@
1
- import { BlockNode, ChildNode } from '../model/Document.js';
2
- import { Selection } from '../model/Selection.js';
1
+ import { BlockNode, ChildNode, Document } from '../model/Document.js';
2
+ import { EditorSelection, Selection } from '../model/Selection.js';
3
3
  import { BlockId } from '../model/TypeBrands.js';
4
4
  import { EditorState } from '../state/EditorState.js';
5
5
  /** The resolved insert position within a single block. */
@@ -22,4 +22,15 @@ export declare function resolveInsertPoint(sel: Selection, blockOrder: readonly
22
22
  export declare function extractParentPath(path: readonly string[] | undefined): BlockId[];
23
23
  /** Finds the index of a block by ID within a sibling list. */
24
24
  export declare function findSiblingIndex(siblings: readonly ChildNode[], targetId: BlockId): number;
25
+ /** Finds the first leaf block ID in a subtree. */
26
+ export declare function findFirstLeafBlockId(node: BlockNode): BlockId;
27
+ /** Finds the last leaf block ID in a subtree. */
28
+ export declare function findLastLeafBlockId(node: BlockNode): BlockId;
29
+ /**
30
+ * Resolves a valid editor selection at the start or end of a block subtree.
31
+ * Void blocks become NodeSelections; text-capable blocks resolve to leaf cursors.
32
+ */
33
+ export declare function createSelectionForBlockBoundary(state: EditorState, blockId: BlockId, boundary: 'start' | 'end'): EditorSelection | null;
34
+ /** Returns the root-level block IDs in document order. */
35
+ export declare function getRootBlockIds(doc: Document): readonly BlockId[];
25
36
  //# sourceMappingURL=CommandHelpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandHelpers.d.ts","sourceRoot":"","sources":["../../src/commands/CommandHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAC1B,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,SAAS,OAAO,EAAE,GAC5B,SAAS,SAAS,EAAE,CAMtB;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE,GAAG,WAAW,CAM9F;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAEhF;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE1F"}
1
+ {"version":3,"file":"CommandHelpers.d.ts","sourceRoot":"","sources":["../../src/commands/CommandHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAc3E,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAC1B,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,SAAS,OAAO,EAAE,GAC5B,SAAS,SAAS,EAAE,CAMtB;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE,GAAG,WAAW,CAM9F;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAEhF;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE1F;AAED,kDAAkD;AAClD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAS7D;AAED,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAW5D;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC9C,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,GAAG,KAAK,GACvB,eAAe,GAAG,IAAI,CAgBxB;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,OAAO,EAAE,CAEjE"}
@@ -1,11 +1,10 @@
1
- import { BlockNode } from '../model/Document.js';
2
1
  import { NodeSelection } from '../model/Selection.js';
3
- import { BlockId } from '../model/TypeBrands.js';
4
2
  import { EditorState } from '../state/EditorState.js';
5
3
  import { Transaction } from '../state/Transaction.js';
4
+ export { findFirstLeafBlockId, findLastLeafBlockId } from './CommandHelpers.js';
6
5
  /**
7
- * Deletes the void block targeted by a NodeSelection and places cursor
8
- * on the adjacent block. If it's the only block, replaces with empty paragraph.
6
+ * Deletes the selected block and places cursor on a valid adjacent position.
7
+ * If it is the only child in its parent, replaces it with an empty paragraph.
9
8
  */
10
9
  export declare function deleteNodeSelection(state: EditorState, sel: NodeSelection): Transaction | null;
11
10
  /** Inserts a new paragraph after a NodeSelection-targeted void block. */
@@ -19,8 +18,4 @@ export declare function insertTextAfterNodeSelection(state: EditorState, sel: No
19
18
  * @param isRtl — When true, flips left/right to account for RTL block direction.
20
19
  */
21
20
  export declare function navigateArrowIntoVoid(state: EditorState, direction: 'left' | 'right' | 'up' | 'down', isRtl?: boolean): Transaction | null;
22
- /** Finds the first leaf (deepest-first-child) block ID in a subtree. */
23
- export declare function findFirstLeafBlockId(node: BlockNode): BlockId;
24
- /** Finds the last leaf (deepest-last-child) block ID in a subtree. */
25
- export declare function findLastLeafBlockId(node: BlockNode): BlockId;
26
21
  //# sourceMappingURL=NodeSelectionCommands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeSelectionCommands.d.ts","sourceRoot":"","sources":["../../src/commands/NodeSelectionCommands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAgD,MAAM,sBAAsB,CAAC;AAEpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAS3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAQ3D;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,GAAG,WAAW,GAAG,IAAI,CA2C9F;AAED,yEAAyE;AACzE,wBAAgB,iCAAiC,CAChD,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,aAAa,GAChB,WAAW,GAAG,IAAI,CAepB;AAED,iFAAiF;AACjF,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,GAAG,OAAO,GACvB,WAAW,CAeb;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,EAC3C,KAAK,CAAC,EAAE,OAAO,GACb,WAAW,GAAG,IAAI,CAsBpB;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAS7D;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAc5D"}
1
+ {"version":3,"file":"NodeSelectionCommands.d.ts","sourceRoot":"","sources":["../../src/commands/NodeSelectionCommands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAU3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAS3D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,GAAG,WAAW,GAAG,IAAI,CA2C9F;AAED,yEAAyE;AACzE,wBAAgB,iCAAiC,CAChD,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,aAAa,GAChB,WAAW,GAAG,IAAI,CAepB;AAED,iFAAiF;AACjF,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,GAAG,OAAO,GACvB,WAAW,CAeb;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,EAC3C,KAAK,CAAC,EAAE,OAAO,GACb,WAAW,GAAG,IAAI,CAsBpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ContentSerializer.d.ts","sourceRoot":"","sources":["../../src/editor/ContentSerializer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,KAAK,QAAQ,EAMb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,KAAK,EACX,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,CAE1D;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAC5B,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GACxC,IAAI,CASN;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,GAAG,QAAQ,CAK1F;AA6BD,6DAA6D;AAC7D,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAgBpC;AAED,kGAAkG;AAClG,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,EAC1C,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAExD;AAED,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAOhE"}
1
+ {"version":3,"file":"ContentSerializer.d.ts","sourceRoot":"","sources":["../../src/editor/ContentSerializer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,KAAK,QAAQ,EAMb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EACX,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,CAE1D;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAC5B,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GACxC,IAAI,CAQN;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,GAAG,QAAQ,CAK1F;AA6BD,6DAA6D;AAC7D,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAgBpC;AAED,kGAAkG;AAClG,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,EAC1C,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAExD;AAED,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAOhE"}
@@ -0,0 +1,50 @@
1
+ import { Locale } from '../i18n/Locale.js';
2
+ import { PaperSize } from '../model/PaperSize.js';
3
+ import { Plugin } from '../plugins/Plugin.js';
4
+ import { TextFormattingConfig } from '../plugins/text-formatting/TextFormattingPlugin.js';
5
+ import { ToolbarOverflowBehavior } from '../plugins/toolbar/ToolbarOverflowBehavior.js';
6
+ import { Theme, ThemePreset } from './theme/ThemeTokens.js';
7
+ /**
8
+ * Expanded toolbar configuration for `createEditor`.
9
+ * Allows specifying both the plugin layout and overflow behavior.
10
+ */
11
+ export interface ToolbarConfig {
12
+ /**
13
+ * Plugin groups defining toolbar layout. Each inner array is a visual group;
14
+ * separators are rendered between groups. Order = array order.
15
+ */
16
+ readonly groups: ReadonlyArray<ReadonlyArray<Plugin>>;
17
+ /**
18
+ * Controls responsive overflow behavior when items exceed available width.
19
+ * Defaults to `ToolbarOverflowBehavior.BurgerMenu`.
20
+ */
21
+ readonly overflow?: ToolbarOverflowBehavior;
22
+ }
23
+ export interface NotectlEditorConfig {
24
+ /** Controls which inline marks are enabled. Used to auto-configure TextFormattingPlugin. */
25
+ features?: Partial<TextFormattingConfig>;
26
+ plugins?: readonly Plugin[];
27
+ /**
28
+ * Toolbar configuration. Accepts either:
29
+ * - A shorthand array of plugin groups: `[[BoldPlugin, ItalicPlugin], [HeadingPlugin]]`
30
+ * - A full config object: `{ groups: [...], overflow: ToolbarOverflowBehavior.Flow }`
31
+ *
32
+ * When set, a ToolbarPlugin is created internally — do not add one to `plugins`.
33
+ */
34
+ toolbar?: ReadonlyArray<ReadonlyArray<Plugin>> | ToolbarConfig;
35
+ placeholder?: string;
36
+ readonly?: boolean;
37
+ autofocus?: boolean;
38
+ maxHistoryDepth?: number;
39
+ /** Theme preset or custom Theme object. Defaults to ThemePreset.Light. */
40
+ theme?: ThemePreset | Theme;
41
+ /** Optional nonce for fallback runtime `<style>` elements when strict mode cannot use adopted sheets. */
42
+ styleNonce?: string;
43
+ /** Paper size for WYSIWYG page layout. When set, content renders at exact paper width. */
44
+ paperSize?: PaperSize;
45
+ /** Document-level text direction. When set, applies `dir` on the content element. */
46
+ dir?: 'ltr' | 'rtl';
47
+ /** Editor locale. Defaults to Locale.BROWSER (auto-detect from navigator.language). */
48
+ locale?: Locale;
49
+ }
50
+ //# sourceMappingURL=EditorConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorConfig.d.ts","sourceRoot":"","sources":["../../src/editor/EditorConfig.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AAC7F,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IACnC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAC5B,yGAAyG;IACzG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,qFAAqF;IACrF,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -1,7 +1,7 @@
1
1
  import { PaperSize } from '../model/PaperSize.js';
2
2
  import { PluginManager } from '../plugins/PluginManager.js';
3
+ import { NotectlEditorConfig } from './EditorConfig.js';
3
4
  import { EditorThemeController } from './EditorThemeController.js';
4
- import { NotectlEditorConfig } from './NotectlEditor.js';
5
5
  import { Theme, ThemePreset } from './theme/ThemeTokens.js';
6
6
  /** External dependencies the config controller needs to apply changes. */
7
7
  export interface ConfigControllerDeps {
@@ -1 +1 @@
1
- {"version":3,"file":"EditorConfigController.d.ts","sourceRoot":"","sources":["../../src/editor/EditorConfigController.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjE,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,cAAc,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,KAAK,IAAI,CAAC;CAC/D;AAED,qBAAa,sBAAsB;IAClC,OAAO,CAAC,MAAM,CAA2B;IAEzC,kCAAkC;IAClC,SAAS,IAAI,mBAAmB;IAIhC,qDAAqD;IACrD,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAI5C,uDAAuD;IACvD,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAIxD,8DAA8D;IAC9D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAkCvF,+CAA+C;IAC/C,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAoB3F,kDAAkD;IAClD,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,eAAe,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI;IAK3F,yCAAyC;IACzC,QAAQ,IAAI,WAAW,GAAG,KAAK;IAI/B,+CAA+C;IAC/C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,mDAAmD;IACnD,YAAY,IAAI,SAAS,GAAG,SAAS;IAMrC,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,QAAQ;CAchB"}
1
+ {"version":3,"file":"EditorConfigController.d.ts","sourceRoot":"","sources":["../../src/editor/EditorConfigController.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,KAAK,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjE,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,cAAc,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,KAAK,IAAI,CAAC;CAC/D;AAED,qBAAa,sBAAsB;IAClC,OAAO,CAAC,MAAM,CAA2B;IAEzC,kCAAkC;IAClC,SAAS,IAAI,mBAAmB;IAIhC,qDAAqD;IACrD,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAI5C,uDAAuD;IACvD,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAIxD,8DAA8D;IAC9D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAsCvF,+CAA+C;IAC/C,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAoB3F,kDAAkD;IAClD,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,eAAe,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI;IAK3F,yCAAyC;IACzC,QAAQ,IAAI,WAAW,GAAG,KAAK;IAI/B,+CAA+C;IAC/C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,mDAAmD;IACnD,YAAY,IAAI,SAAS,GAAG,SAAS;IAMrC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,QAAQ;CAchB"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditorDOM.d.ts","sourceRoot":"","sources":["../../src/editor/EditorDOM.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExE,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CAChC;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CA4C1E"}
1
+ {"version":3,"file":"EditorDOM.d.ts","sourceRoot":"","sources":["../../src/editor/EditorDOM.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExE,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CAChC;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CA8C1E"}
@@ -0,0 +1,37 @@
1
+ import { InputManager } from '../input/InputManager.js';
2
+ import { Plugin } from '../plugins/Plugin.js';
3
+ import { PluginManager } from '../plugins/PluginManager.js';
4
+ import { EditorView } from '../view/EditorView.js';
5
+ import { NotectlEditorConfig } from './EditorConfig.js';
6
+ import { EditorConfigController } from './EditorConfigController.js';
7
+ import { EditorDOMElements } from './EditorDOM.js';
8
+ import { EditorEventEmitter } from './EditorEventEmitter.js';
9
+ import { EditorStyleCoordinator } from './EditorStyleCoordinator.js';
10
+ import { EditorThemeController } from './EditorThemeController.js';
11
+ import { PaperLayoutController } from './PaperLayoutController.js';
12
+ /** Dependencies provided by the NotectlEditor host element. */
13
+ export interface InitializerDeps {
14
+ readonly shadow: ShadowRoot;
15
+ readonly config: NotectlEditorConfig;
16
+ /** Resolved dir from the host element's attribute (fallback when config.dir is unset). */
17
+ readonly hostDir: 'ltr' | 'rtl' | undefined;
18
+ readonly configController: EditorConfigController;
19
+ readonly styleCoordinator: EditorStyleCoordinator;
20
+ readonly events: EditorEventEmitter;
21
+ readonly preInitPlugins: readonly Plugin[];
22
+ isCancelled?(): boolean;
23
+ }
24
+ /** Components created during initialization, returned to the editor for storage. */
25
+ export interface InitResult {
26
+ readonly view: EditorView;
27
+ readonly inputManager: InputManager;
28
+ readonly pluginManager: PluginManager;
29
+ readonly domElements: EditorDOMElements;
30
+ readonly themeController: EditorThemeController;
31
+ readonly paperLayout: PaperLayoutController | null;
32
+ /** Nulls closure-captured references to prevent stale dispatches after destroy. */
33
+ readonly release: () => void;
34
+ }
35
+ /** Performs the full editor initialization sequence. Returns null if setup fails. */
36
+ export declare function initializeEditor(deps: InitializerDeps): Promise<InitResult | null>;
37
+ //# sourceMappingURL=EditorInitializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorInitializer.d.ts","sourceRoot":"","sources":["../../src/editor/EditorInitializer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAM5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAInE,+DAA+D;AAC/D,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,0FAA0F;IAC1F,QAAQ,CAAC,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,WAAW,CAAC,IAAI,OAAO,CAAC;CACxB;AAED,oFAAoF;AACpF,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnD,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,qFAAqF;AACrF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAgNxF"}
@@ -1,7 +1,8 @@
1
1
  import { Plugin } from '../plugins/Plugin.js';
2
2
  export declare class EditorLifecycleCoordinator {
3
- private initialized;
3
+ private state;
4
4
  private readyPromiseResolve;
5
+ private readyPromiseReject;
5
6
  private readyPromise;
6
7
  private preInitPlugins;
7
8
  constructor();
@@ -13,10 +14,14 @@ export declare class EditorLifecycleCoordinator {
13
14
  whenReady(): Promise<void>;
14
15
  /** Resolves the ready promise. */
15
16
  resolveReady(): void;
17
+ /** Rejects the current ready promise and allows a later retry. */
18
+ failReady(reason: unknown): void;
16
19
  /** Registers a plugin before initialization. Throws if already initialized. */
17
20
  registerPreInitPlugin(plugin: Plugin): void;
18
21
  /** Returns and clears the pre-init plugins list. */
19
22
  consumePreInitPlugins(): Plugin[];
23
+ /** Restores previously consumed pre-init plugins for a retry attempt. */
24
+ restorePreInitPlugins(plugins: readonly Plugin[]): void;
20
25
  /** Resets all lifecycle state, including a fresh ready promise. */
21
26
  reset(): void;
22
27
  private createReadyPromise;
@@ -1 +1 @@
1
- {"version":3,"file":"EditorLifecycleCoordinator.d.ts","sourceRoot":"","sources":["../../src/editor/EditorLifecycleCoordinator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,qBAAa,0BAA0B;IACtC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAgB;;IAMtC,uDAAuD;IACvD,aAAa,IAAI,OAAO;IAIxB,6EAA6E;IAC7E,eAAe,IAAI,OAAO;IAM1B,gEAAgE;IAChE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,kCAAkC;IAClC,YAAY,IAAI,IAAI;IAIpB,+EAA+E;IAC/E,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS3C,oDAAoD;IACpD,qBAAqB,IAAI,MAAM,EAAE;IAMjC,mEAAmE;IACnE,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,kBAAkB;CAK1B"}
1
+ {"version":3,"file":"EditorLifecycleCoordinator.d.ts","sourceRoot":"","sources":["../../src/editor/EditorLifecycleCoordinator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAInD,qBAAa,0BAA0B;IACtC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAgB;;IAMtC,uDAAuD;IACvD,aAAa,IAAI,OAAO;IAIxB,6EAA6E;IAC7E,eAAe,IAAI,OAAO;IAS1B,gEAAgE;IAChE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,kCAAkC;IAClC,YAAY,IAAI,IAAI;IAQpB,kEAAkE;IAClE,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAQhC,+EAA+E;IAC/E,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS3C,oDAAoD;IACpD,qBAAqB,IAAI,MAAM,EAAE;IAMjC,yEAAyE;IACzE,qBAAqB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAKvD,mEAAmE;IACnE,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,kBAAkB;CAS1B"}
@@ -1,57 +1,12 @@
1
- import { Locale } from '../i18n/Locale.js';
2
1
  import { Document } from '../model/Document.js';
3
2
  import { PaperSize } from '../model/PaperSize.js';
4
3
  import { EventKey, Plugin, PluginConfig, PluginEventCallback, ServiceKey } from '../plugins/Plugin.js';
5
- import { TextFormattingConfig } from '../plugins/text-formatting/TextFormattingPlugin.js';
6
- import { ToolbarOverflowBehavior } from '../plugins/toolbar/ToolbarOverflowBehavior.js';
7
4
  import { ContentCSSResult, ContentHTMLOptions, SetContentHTMLOptions } from '../serialization/index.js';
8
5
  import { EditorState } from '../state/EditorState.js';
9
6
  import { Transaction } from '../state/Transaction.js';
10
7
  import { EditorEventMap } from './EditorEventEmitter.js';
11
8
  import { Theme, ThemePreset } from './theme/ThemeTokens.js';
12
- /**
13
- * Expanded toolbar configuration for `createEditor`.
14
- * Allows specifying both the plugin layout and overflow behavior.
15
- */
16
- export interface ToolbarConfig {
17
- /**
18
- * Plugin groups defining toolbar layout. Each inner array is a visual group;
19
- * separators are rendered between groups. Order = array order.
20
- */
21
- readonly groups: ReadonlyArray<ReadonlyArray<Plugin>>;
22
- /**
23
- * Controls responsive overflow behavior when items exceed available width.
24
- * Defaults to `ToolbarOverflowBehavior.BurgerMenu`.
25
- */
26
- readonly overflow?: ToolbarOverflowBehavior;
27
- }
28
- export interface NotectlEditorConfig {
29
- /** Controls which inline marks are enabled. Used to auto-configure TextFormattingPlugin. */
30
- features?: Partial<TextFormattingConfig>;
31
- plugins?: readonly Plugin[];
32
- /**
33
- * Toolbar configuration. Accepts either:
34
- * - A shorthand array of plugin groups: `[[BoldPlugin, ItalicPlugin], [HeadingPlugin]]`
35
- * - A full config object: `{ groups: [...], overflow: ToolbarOverflowBehavior.Flow }`
36
- *
37
- * When set, a ToolbarPlugin is created internally — do not add one to `plugins`.
38
- */
39
- toolbar?: ReadonlyArray<ReadonlyArray<Plugin>> | ToolbarConfig;
40
- placeholder?: string;
41
- readonly?: boolean;
42
- autofocus?: boolean;
43
- maxHistoryDepth?: number;
44
- /** Theme preset or custom Theme object. Defaults to ThemePreset.Light. */
45
- theme?: ThemePreset | Theme;
46
- /** Optional nonce for fallback runtime `<style>` elements when strict mode cannot use adopted sheets. */
47
- styleNonce?: string;
48
- /** Paper size for WYSIWYG page layout. When set, content renders at exact paper width. */
49
- paperSize?: PaperSize;
50
- /** Document-level text direction. When set, applies `dir` on the content element. */
51
- dir?: 'ltr' | 'rtl';
52
- /** Editor locale. Defaults to Locale.BROWSER (auto-detect from navigator.language). */
53
- locale?: Locale;
54
- }
9
+ export type { NotectlEditorConfig, ToolbarConfig } from './EditorConfig.js';
55
10
  export type { StateChangeEvent } from './EditorEventEmitter.js';
56
11
  export type { EditorEventMap } from './EditorEventEmitter.js';
57
12
  export declare class NotectlEditor extends HTMLElement {
@@ -65,6 +20,12 @@ export declare class NotectlEditor extends HTMLElement {
65
20
  private readonly styleCoordinator;
66
21
  private themeController;
67
22
  private paperLayout;
23
+ private pendingInitPromise;
24
+ private cancelPendingInit;
25
+ private autoInitToken;
26
+ private autoInitQueued;
27
+ private initVersion;
28
+ private releaseInit;
68
29
  constructor();
69
30
  static get observedAttributes(): string[];
70
31
  connectedCallback(): void;
@@ -73,7 +34,7 @@ export declare class NotectlEditor extends HTMLElement {
73
34
  /** Registers a plugin before initialization. */
74
35
  registerPlugin(plugin: Plugin): void;
75
36
  /** Initializes the editor with the given config. */
76
- init(config?: NotectlEditorConfig): Promise<void>;
37
+ init(config?: import('./EditorConfig.js').NotectlEditorConfig): Promise<void>;
77
38
  /** Returns whether the editor is in read-only mode. */
78
39
  get isReadOnly(): boolean;
79
40
  /** Returns the document as JSON. */
@@ -132,7 +93,7 @@ export declare class NotectlEditor extends HTMLElement {
132
93
  /** Waits for the editor to be ready. */
133
94
  whenReady(): Promise<void>;
134
95
  /** Updates configuration at runtime. */
135
- configure(config: Partial<NotectlEditorConfig>): void;
96
+ configure(config: Partial<import('./EditorConfig.js').NotectlEditorConfig>): void;
136
97
  /** Changes the theme at runtime. */
137
98
  setTheme(theme: ThemePreset | Theme): void;
138
99
  /** Returns the current theme setting. */
@@ -142,11 +103,12 @@ export declare class NotectlEditor extends HTMLElement {
142
103
  /** Cleans up the editor. Awaiting ensures async plugin teardown completes. */
143
104
  destroy(): Promise<void>;
144
105
  private getConfigDeps;
106
+ private scheduleAutoInit;
107
+ private cancelAutoInit;
145
108
  private applyPaperSize;
146
- private onStateChange;
147
- private updateEmptyState;
148
109
  private replaceState;
110
+ private assertInitialized;
149
111
  }
150
112
  /** Factory function to create and configure a NotectlEditor instance. */
151
- export declare function createEditor(config?: NotectlEditorConfig): Promise<NotectlEditor>;
113
+ export declare function createEditor(config?: import('./EditorConfig.js').NotectlEditorConfig): Promise<NotectlEditor>;
152
114
  //# sourceMappingURL=NotectlEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NotectlEditor.d.ts","sourceRoot":"","sources":["../../src/editor/NotectlEditor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotectlEditor.d.ts","sourceRoot":"","sources":["../../src/editor/NotectlEditor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EACX,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACX,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAY3D,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAMlF,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5E,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBAAa,aAAc,SAAQ,WAAW;IAC7C,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgC;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgC;IACjE,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,kBAAkB,CACpB;IACN,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAA6B;;IAOhD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAQ5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI/F,gDAAgD;IAChD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC,oDAAoD;IAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DnF,uDAAuD;IACvD,IAAI,UAAU,IAAI,OAAO,CAExB;IAID,oCAAoC;IACpC,OAAO,IAAI,QAAQ;IAKnB,mCAAmC;IACnC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAK5B,6DAA6D;IACvD,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IACjC,cAAc,CAAC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9D,cAAc,CACnB,OAAO,EAAE,kBAAkB,GAAG;QAAE,OAAO,EAAE,SAAS,CAAA;KAAE,GAClD,OAAO,CAAC,gBAAgB,CAAC;IAM5B,kGAAkG;IAC5F,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlF,kCAAkC;IAClC,OAAO,IAAI,MAAM;IAKjB,oEAAoE;IACpE,OAAO,IAAI,OAAO;IAOlB,QAAQ,CAAC,QAAQ;;;;;;;MAiBf;IAEF,gDAAgD;IAChD,GAAG,IAAI;QACN,UAAU,EAAE,MAAM,OAAO,CAAC;QAC1B,YAAY,EAAE,MAAM,OAAO,CAAC;QAC5B,eAAe,EAAE,MAAM,OAAO,CAAC;QAC/B,IAAI,EAAE,MAAM,OAAO,CAAC;QACpB,IAAI,EAAE,MAAM,OAAO,CAAC;QACpB,SAAS,EAAE,MAAM,OAAO,CAAC;KACzB;IAaD,uDAAuD;IACvD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,uDAAuD;IACvD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,sCAAsC;IACtC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAI7D,wDAAwD;IACxD,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;IAIhD,qEAAqE;IACrE,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAMhF,wCAAwC;IACxC,QAAQ,IAAI,WAAW;IAKvB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAgB/B,mCAAmC;IACnC,EAAE,CAAC,CAAC,SAAS,MAAM,cAAc,EAChC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAC5C,IAAI;IAIP,iCAAiC;IACjC,GAAG,CAAC,CAAC,SAAS,MAAM,cAAc,EACjC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAC5C,IAAI;IAMP,wCAAwC;IACxC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,wCAAwC;IACxC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,mBAAmB,EAAE,mBAAmB,CAAC,GAAG,IAAI;IAMjF,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,GAAG,IAAI;IAI1C,yCAAyC;IACzC,QAAQ,IAAI,WAAW,GAAG,KAAK;IAM/B,iFAAiF;IACjF,YAAY,IAAI,SAAS,GAAG,SAAS;IAIrC,8EAA8E;IAC9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BxB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,iBAAiB;CAKzB;AAOD,yEAAyE;AACzE,wBAAsB,YAAY,CACjC,MAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,mBAAmB,GACtD,OAAO,CAAC,aAAa,CAAC,CAIxB"}
@@ -1,7 +1,7 @@
1
1
  import { Plugin } from '../plugins/Plugin.js';
2
2
  import { PluginManager } from '../plugins/PluginManager.js';
3
3
  import { TextFormattingConfig } from '../plugins/text-formatting/TextFormattingPlugin.js';
4
- import { ToolbarConfig } from './NotectlEditor.js';
4
+ import { ToolbarConfig } from './EditorConfig.js';
5
5
  type ToolbarInput = ReadonlyArray<ReadonlyArray<Plugin>> | ToolbarConfig;
6
6
  /**
7
7
  * Processes the declarative `toolbar` config: registers a ToolbarPlugin
@@ -1 +1 @@
1
- {"version":3,"file":"PluginBootstrapper.d.ts","sourceRoot":"","sources":["../../src/editor/PluginBootstrapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,EACN,KAAK,oBAAoB,EAEzB,MAAM,oDAAoD,CAAC;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,KAAK,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC;AAMzE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAsB/F;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,EAAE,EAAE,aAAa,EACjB,QAAQ,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACtC,IAAI,CAIN"}
1
+ {"version":3,"file":"PluginBootstrapper.d.ts","sourceRoot":"","sources":["../../src/editor/PluginBootstrapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,EACN,KAAK,oBAAoB,EAEzB,MAAM,oDAAoD,CAAC;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,KAAK,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC;AAMzE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAsB/F;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,EAAE,EAAE,aAAa,EACjB,QAAQ,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACtC,IAAI,CAIN"}
package/dist/full.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{b as a,c as s,a as e,d as o,e as r,g as t,f as i,h as n,i as m,j as l,k as c,l as d,m as p,n as g,o as u,p as k,q as f,r as T}from"./chunks/Document-HC8s50qJ.mjs";import{J as h,K as S,e as C,a as j,b as v,c as P,d as B,f as y,g as A,h as E,i as N,j as x,k as I,l as L,m as D,n as R,o as M,p as b,L as w,q as _,r as G,s as H,t as F,u as O,v as V,w as z,x as K,y as W,z as X,A as q,B as U,C as Q,D as Y,E as Z,F as J,G as $,H as aa,I as sa}from"./chunks/index-CVwf0cdH.mjs";import{c as ea,a as oa,b as ra,d as ta,e as ia,i as na,f as ma,g as la,h as ca,j as da,s as pa,k as ga}from"./chunks/Selection-DhbizDM4.mjs";import{d as ua,i as ka,a as fa,s as Ta,t as ha,b as Sa,c as Ca,e as ja}from"./chunks/MarkCommands-CTuVDqnn.mjs";import{b as va,c as Pa,i as Ba,m as ya,n as Aa,p as Ea}from"./chunks/TypeBrands-Bp_Z_o5Y.mjs";import{i as Na,a as xa,b as Ia}from"./chunks/AttrRegistry-Ckj9eCHj.mjs";import{c as La}from"./chunks/DomUtils-CznMAZZg.mjs";import{e as Da,a as Ra,f as Ma}from"./chunks/HTMLUtils-Cxy99Ak2.mjs";import{C as ba,a as wa,b as _a,D as Ga,E as Ha,c as Fa,F as Oa,H as Va,I as za,d as Ka,K as Wa,L as Xa,e as qa,N as Ua,f as Qa,P as Ya,S as Za,T as Ja,g as $a,h as as,i as ss,j as es,k as os,l as rs,m as ts,n as is,o as ns,p as ms,q as ls,r as cs,s as ds,t as ps,u as gs,v as us,w as ks,x as fs,y as Ts,z as hs,A as Ss,B as Cs}from"./chunks/NotectlEditor-DBBJkPCW.mjs";import{c as js,f as vs,a as Ps,b as Bs,i as ys,d as As,e as Es,r as Ns,g as xs,s as Is,w as Ls}from"./chunks/NavigationQueries-DCOv4Ca5.mjs";import{e as Ds,m as Rs,n as Ms}from"./chunks/SelectionTransactions-DB3YDIEa.mjs";import{d as bs,a as ws,b as _s,c as Gs,i as Hs,e as Fs,m as Os,n as Vs,s as zs,f as Ks}from"./chunks/Commands-DwXBBVGR.mjs";import{g as Ws,i as Xs,a as qs,b as Us,c as Qs}from"./chunks/Platform-CU6itXZo.mjs";import{E as Ys,L as Zs,a as Js,S as $s,c as ae,g as se,b as ee}from"./chunks/PluginHelpers-CdPR0MuT.mjs";import{D as oe,i as re,n as te,w as ie}from"./chunks/Decoration-D49mFXrH.mjs";import{A as ne,B as me,P as le,a as ce,b as de,e as pe,c as ge,g as ue,d as ke,i as fe}from"./chunks/PrintTypes-DukwDSWS.mjs";import{createMinimalPreset as Te}from"./presets/minimal.mjs";import{createFullPreset as he}from"./presets/full.mjs";import{FIRA_CODE as Se,FIRA_SANS as Ce,STARTER_FONTS as je}from"./fonts.mjs";import{TEXT_FORMATTING_LOCALE_EN as ve,TextFormattingPlugin as Pe,loadTextFormattingLocale as Be}from"./plugins/text-formatting.mjs";import{H as ye,a as Ae,l as Ee}from"./chunks/HeadingPlugin-B-LF-AMM.mjs";import{B as Ne}from"./chunks/BlockTypePickerRegistry-DcSE6IXB.mjs";import{TOOLBAR_LOCALE_EN as xe,ToolbarOverflowBehavior as Ie,ToolbarPlugin as Le,ToolbarRegistry as De,ToolbarServiceKey as Re,loadToolbarLocale as Me}from"./plugins/toolbar.mjs";import{g as be,i as we,r as _e}from"./chunks/ColorGrid-CpkbKfXg.mjs";import{a as Ge,g as He,i as Fe,r as Oe,b as Ve}from"./chunks/ColorPickerPopup-CDUvkgcK.mjs";import{i as ze,a as Ke,b as We,c as Xe,r as qe}from"./chunks/ColorValidation-DCSKq9B2.mjs";import{a as Ue,f as Qe,n as Ye}from"./chunks/KeyboardNav-DsYhKKuV.mjs";import{attachGridKeyboard as Ze,attachListboxKeyboard as Je,attachMenuKeyboard as $e}from"./plugins/shared.mjs";import{P as ao,a as so}from"./chunks/PopupManager-Du3dYnsJ.mjs";import{a as eo,p as oo}from"./chunks/PopupPositioning-DtvqMSop.mjs";import{f as ro}from"./chunks/ShortcutFormatting-BLKS0Gys.mjs";import{X as to,a as io}from"./chunks/XmlPatterns-DxQXGjP8.mjs";import{TablePlugin as no,TableSelectionServiceKey as mo}from"./plugins/table.mjs";import{DEFAULT_IMAGE_KEYMAP as lo,IMAGE_LOCALE_EN as co,IMAGE_UPLOAD_SERVICE as po,ImagePlugin as go,loadImageLocale as uo}from"./plugins/image.mjs";import{CODE_BLOCK_LOCALE_EN as ko,CODE_BLOCK_SERVICE_KEY as fo,CodeBlockPlugin as To,JSON_LANGUAGE as ho,RegexTokenizer as So,SYNTAX_HIGHLIGHTER_SERVICE_KEY as Co,XML_LANGUAGE as jo,loadCodeBlockLocale as vo}from"./plugins/code-block.mjs";import{LINK_LOCALE_EN as Po,LinkPlugin as Bo,loadLinkLocale as yo}from"./plugins/link.mjs";import{LIST_LOCALE_EN as Ao,ListPlugin as Eo,loadListLocale as No}from"./plugins/list.mjs";import{BLOCKQUOTE_LOCALE_EN as xo,BlockquotePlugin as Io,loadBlockquoteLocale as Lo}from"./plugins/blockquote.mjs";import{STRIKETHROUGH_LOCALE_EN as Do,StrikethroughPlugin as Ro,loadStrikethroughLocale as Mo}from"./plugins/strikethrough.mjs";import{TEXT_COLOR_LOCALE_EN as bo,TextColorPlugin as wo,loadTextColorLocale as _o}from"./plugins/text-color.mjs";import{HORIZONTAL_RULE_LOCALE_EN as Go,HorizontalRulePlugin as Ho,loadHorizontalRuleLocale as Fo}from"./plugins/horizontal-rule.mjs";import{ALIGNMENT_ICONS as Oo,ALIGNMENT_LOCALE_EN as Vo,AlignmentPlugin as zo,loadAlignmentLocale as Ko}from"./plugins/alignment.mjs";import{FONT_LOCALE_EN as Wo,FontPlugin as Xo,loadFontLocale as qo}from"./plugins/font.mjs";import{FONT_SIZE_LOCALE_EN as Uo,FontSizePlugin as Qo,loadFontSizeLocale as Yo}from"./plugins/font-size.mjs";import{HIGHLIGHT_LOCALE_EN as Zo,HighlightPlugin as Jo,loadHighlightLocale as $o}from"./plugins/highlight.mjs";import{SUPER_SUB_LOCALE_EN as ar,SuperSubPlugin as sr,loadSuperSubLocale as er}from"./plugins/super-sub.mjs";import{HardBreakPlugin as or}from"./plugins/hard-break.mjs";import{G as rr,n as tr}from"./chunks/index-D3BZFsAD.mjs";import{PRINT_LOCALE_EN as ir,PrintPlugin as nr,loadPrintLocale as mr}from"./plugins/print.mjs";import{JsonDetector as lr,SMART_PASTE_LOCALE_EN as cr,SMART_PASTE_SERVICE_KEY as dr,SmartPastePlugin as pr,XmlDetector as gr,loadSmartPasteLocale as ur}from"./plugins/smart-paste.mjs";import{DIRECTION_ICONS as kr,TextDirectionPlugin as fr}from"./plugins/text-direction.mjs";import{T as Tr,d as hr,f as Sr,g as Cr,l as jr}from"./chunks/TextDirectionLocale-BraFI9JF.mjs";import{TextDirectionAdvancedPlugin as vr}from"./plugins/text-direction-advanced.mjs";import{V as Pr,a as Br,p as yr,s as Ar,b as Er}from"./chunks/DocumentParser-w70-Axud.mjs";import{a as Nr,g as xr,i as Ir,r as Lr}from"./chunks/AttributedMarkCommands-x7h4Xy7V.mjs";import{f as Dr}from"./chunks/RangeIterator-CprUbOWv.mjs";export{ne as AFTER_PRINT,Oo as ALIGNMENT_ICONS,Vo as ALIGNMENT_LOCALE_EN,zo as AlignmentPlugin,me as BEFORE_PRINT,xo as BLOCKQUOTE_LOCALE_EN,Ne as BlockTypePickerRegistry,Io as BlockquotePlugin,h as CARET_NAVIGATION_LOCALE_EN,ko as CODE_BLOCK_LOCALE_EN,fo as CODE_BLOCK_SERVICE_KEY,S as CaretNavigationPlugin,ba as ClipboardHandler,To as CodeBlockPlugin,wa as CompositionTracker,_a as CursorWrapper,Ga as DARK_THEME,lo as DEFAULT_IMAGE_KEYMAP,kr as DIRECTION_ICONS,oe as DecorationSet,Ha as EditorState,Fa as EventBus,Ys as EventKey,Se as FIRA_CODE,Ce as FIRA_SANS,Wo as FONT_LOCALE_EN,Uo as FONT_SIZE_LOCALE_EN,Oa as FileHandlerRegistry,Xo as FontPlugin,Qo as FontSizePlugin,rr as GapCursorPlugin,ye as HEADING_LOCALE_EN,Zo as HIGHLIGHT_LOCALE_EN,Go as HORIZONTAL_RULE_LOCALE_EN,or as HardBreakPlugin,Ae as HeadingPlugin,Jo as HighlightPlugin,Va as HistoryManager,Ho as HorizontalRulePlugin,co as IMAGE_LOCALE_EN,po as IMAGE_UPLOAD_SERVICE,go as ImagePlugin,za as InputManager,Ka as InputRuleRegistry,ho as JSON_LANGUAGE,lr as JsonDetector,Wa as KeymapRegistry,Xa as LIGHT_THEME,Po as LINK_LOCALE_EN,Ao as LIST_LOCALE_EN,Bo as LinkPlugin,Eo as ListPlugin,qa as Locale,Zs as LocaleService,Js as LocaleServiceKey,Ua as NodeViewRegistry,Qa as NotectlEditor,le as PAPER_MARGIN_HORIZONTAL_PX,ce as PAPER_MARGIN_TOP_PX,de as PAPER_VIEWPORT_PADDING_PX,ir as PRINT_LOCALE_EN,pe as PRINT_SERVICE_KEY,ge as PaperSize,Ya as PluginManager,ao as PopupManager,so as PopupServiceKey,nr as PrintPlugin,So as RegexTokenizer,cr as SMART_PASTE_LOCALE_EN,dr as SMART_PASTE_SERVICE_KEY,je as STARTER_FONTS,Do as STRIKETHROUGH_LOCALE_EN,ar as SUPER_SUB_LOCALE_EN,Co as SYNTAX_HIGHLIGHTER_SERVICE_KEY,Za as SchemaRegistry,$s as ServiceKey,pr as SmartPastePlugin,Ro as StrikethroughPlugin,sr as SuperSubPlugin,bo as TEXT_COLOR_LOCALE_EN,Tr as TEXT_DIRECTION_LOCALE_EN,ve as TEXT_FORMATTING_LOCALE_EN,xe as TOOLBAR_LOCALE_EN,no as TablePlugin,mo as TableSelectionServiceKey,wo as TextColorPlugin,vr as TextDirectionAdvancedPlugin,fr as TextDirectionPlugin,Pe as TextFormattingPlugin,Ja as ThemePreset,Ie as ToolbarOverflowBehavior,Le as ToolbarPlugin,De as ToolbarRegistry,Re as ToolbarServiceKey,$a as TransactionBuilder,Pr as VALID_ALIGNMENTS,Br as VALID_DIRECTIONS,to as XML_ATTRS,jo as XML_LANGUAGE,io as XML_TAG_NAME,gr as XmlDetector,as as adoptContentStyles,eo as appendToRoot,Nr as applyAttributedMark,Ge as applyColorMark,Ue as applyRovingTabindex,ss as applyStep,Ze as attachGridKeyboard,Je as attachListboxKeyboard,$e as attachMenuKeyboard,va as blockId,a as blockOffsetToTextOffset,es as canContain,js as canCrossBlockBoundary,ae as capitalize,Pa as commandName,La as createBlockElement,s as createBlockNode,ea as createCollapsedSelection,e as createDocument,os as createEditor,he as createFullPreset,oa as createGapCursor,o as createInlineNode,Te as createMinimalPreset,ra as createNodeSelection,ta as createPosition,ia as createSelection,r as createTextNode,rs as createTheme,ts as createThemeStyleSheet,ua as defaultSchema,is as deleteBackward,bs as deleteBackwardAtGap,ns as deleteForward,ws as deleteForwardAtGap,_s as deleteNodeSelection,Gs as deleteSelectionCommand,hr as detectTextDirection,C as endOfTextblock,Da as escapeAttr,Ra as escapeHTML,j as extendCharacterBackward,v as extendCharacterForward,P as extendLineDown,B as extendLineUp,y as extendToBlockEnd,A as extendToBlockStart,E as extendToDocumentEnd,N as extendToDocumentStart,x as extendToLineEnd,I as extendToLineStart,Ds as extendTx,L as extendWordBackward,D as extendWordForward,Qe as findNextDropdownItem,vs as findNode,Ps as findNodePath,Bs as findNodeWithPath,Sr as findSiblingDirection,R as findWordBoundaryBackward,M as findWordBoundaryForward,Dr as forEachBlockInRange,Ma as formatHTML,ro as formatShortcut,ms as generateThemeCSS,He as getActiveColor,t as getBlockChildren,Cr as getBlockDir,i as getBlockLength,n as getBlockMarksAtOffset,m as getBlockText,ls as getBlockTypeLabel,b as getCaretRectFromSelection,be as getColorName,l as getContentAtOffset,c as getInlineChildren,xr as getMarkAttrAtSelection,ue as getPaperCSSSize,ke as getPaperDimensions,se as getSelectedBlock,ee as getSelectedBlockId,d as getTextChildren,Ws as getTextDirection,p as hasMark,cs as injectContentStyles,re as inlineDecoration,Ba as inlineType,Hs as insertHardBreakCommand,Fs as insertTextCommand,ds as invertStep,ps as invertTransaction,gs as isAllowedInReadonly,Ir as isAttributedMarkActive,g as isBlockNode,na as isCollapsed,Fe as isColorMarkActive,Xs as isFirefox,ma as isForward,la as isGapCursor,u as isInlineNode,Na as isInlineNodeOfType,ys as isInsideIsolating,As as isIsolatingBlock,k as isLeafBlock,we as isLightColor,qs as isMac,ka as isMarkActive,fa as isMarkAllowed,xa as isMarkOfType,Ia as isNodeOfType,ca as isNodeSelection,Us as isRtlContext,us as isSelectionOnlyTransaction,f as isTextNode,da as isTextSelection,ze as isValidCSSColor,Ke as isValidCSSFontFamily,We as isValidCSSFontSize,Xe as isValidHexColor,fe as isValidPaperSize,Es as isVoidBlock,Qs as isWebKit,Ko as loadAlignmentLocale,Lo as loadBlockquoteLocale,w as loadCaretNavigationLocale,vo as loadCodeBlockLocale,qo as loadFontLocale,Yo as loadFontSizeLocale,Ee as loadHeadingLocale,$o as loadHighlightLocale,Fo as loadHorizontalRuleLocale,uo as loadImageLocale,yo as loadLinkLocale,No as loadListLocale,mr as loadPrintLocale,ur as loadSmartPasteLocale,Mo as loadStrikethroughLocale,er as loadSuperSubLocale,_o as loadTextColorLocale,jr as loadTextDirectionLocale,Be as loadTextFormattingLocale,Me as loadToolbarLocale,T as markSetsEqual,ya as markType,Os as mergeBlockBackward,_ as moveCharacterBackward,G as moveCharacterForward,H as moveLineDown,F as moveLineUp,O as moveToBlockEnd,V as moveToBlockStart,z as moveToDocumentEnd,K as moveToDocumentStart,W as moveToLineEnd,X as moveToLineStart,Rs as moveTx,q as moveWordBackward,U as moveWordForward,Q as navigateAcrossBlocks,Vs as navigateArrowIntoVoid,tr as navigateFromGapCursor,Ye as navigateGrid,Y as navigateVerticalWithGoalColumn,Z as nextGraphemeSize,te as nodeDecoration,Ms as nodeSelTx,Aa as nodeType,ks as normalizeKeyDescriptor,yr as parseHTMLToDocument,Ea as pluginId,oo as positionPopup,J as prevGraphemeSize,fs as registerBuiltinSpecs,Ts as removeAdoptedStyles,Lr as removeAttributedMark,Oe as removeColorMark,hs as removeContentStyles,_e as renderColorGrid,Ve as renderColorPickerPopup,qe as resolveColors,Ns as resolveNodeByPath,xs as resolveParentByPath,Ss as resolveTheme,Ta as schemaFromRegistry,zs as selectAll,pa as selectionRange,ga as selectionsEqual,Ar as serializeDocumentToCSS,Er as serializeDocumentToHTML,Is as sharesParent,$ as skipInlineNode,Ks as splitBlockCommand,ha as toggleBold,Sa as toggleItalic,Ca as toggleMark,ja as toggleUnderline,Cs as validateContent,aa as viewExtend,sa as viewMove,Ls as walkNodes,ie as widgetDecoration};
1
+ import{b as a,c as s,a as e,d as o,e as r,g as t,f as i,h as n,i as m,j as l,k as c,l as d,m as p,n as g,o as u,p as k,q as f,r as T}from"./chunks/Document-3pNX7ear.mjs";import{J as h,K as S,e as C,a as j,b as v,c as P,d as B,f as N,g as y,h as A,i as E,j as x,k as I,l as L,m as D,n as R,o as b,p as M,L as w,q as _,r as G,s as H,t as F,u as O,v as V,w as z,x as K,y as W,z as X,A as q,B as U,C as Q,D as Y,E as Z,F as J,G as $,H as aa,I as sa}from"./chunks/index-C-L4awHz.mjs";import{c as ea,a as oa,b as ra,d as ta,e as ia,i as na,f as ma,g as la,h as ca,j as da,s as pa,k as ga}from"./chunks/Selection-DhbizDM4.mjs";import{d as ua,i as ka,a as fa,s as Ta,t as ha,b as Sa,c as Ca,e as ja}from"./chunks/MarkCommands-CeCa4WSC.mjs";import{b as va,c as Pa,i as Ba,m as Na,n as ya,p as Aa}from"./chunks/TypeBrands-Bp_Z_o5Y.mjs";import{i as Ea,a as xa,b as Ia}from"./chunks/AttrRegistry-iNpjvcSG.mjs";import{c as La}from"./chunks/DomUtils-CznMAZZg.mjs";import{e as Da,a as Ra,f as ba}from"./chunks/HTMLUtils-Cxy99Ak2.mjs";import{C as Ma,a as wa,b as _a,D as Ga,E as Ha,c as Fa,F as Oa,H as Va,I as za,d as Ka,K as Wa,L as Xa,e as qa,N as Ua,f as Qa,P as Ya,S as Za,T as Ja,g as $a,h as as,i as ss,j as es,k as os,l as rs,m as ts,n as is,o as ns,p as ms,q as ls,r as cs,s as ds,t as ps,u as gs,v as us,w as ks,x as fs,y as Ts,z as hs,A as Ss,B as Cs}from"./chunks/NotectlEditor-BJD7-FFx.mjs";import{f as js,a as vs,b as Ps,r as Bs,c as Ns,w as ys}from"./chunks/NodeResolver-z0ReCR34.mjs";import{e as As,m as Es,n as xs}from"./chunks/SelectionTransactions-DzIZxcuN.mjs";import{d as Is,a as Ls,b as Ds,i as Rs,c as bs,m as Ms,s as ws,e as _s}from"./chunks/Commands-D_gMCnVa.mjs";import{g as Gs,i as Hs,a as Fs,b as Os,c as Vs}from"./chunks/Platform-CU6itXZo.mjs";import{E as zs,L as Ks,a as Ws,S as Xs,c as qs,g as Us,b as Qs}from"./chunks/PluginHelpers-CdPR0MuT.mjs";import{D as Ys,i as Zs,n as Js,w as $s}from"./chunks/Decoration-D49mFXrH.mjs";import{A as ae,B as se,P as ee,a as oe,b as re,e as te,c as ie,g as ne,d as me,i as le}from"./chunks/PrintTypes-DukwDSWS.mjs";import{createMinimalPreset as ce}from"./presets/minimal.mjs";import{createFullPreset as de}from"./presets/full.mjs";import{FIRA_CODE as pe,FIRA_SANS as ge,STARTER_FONTS as ue}from"./fonts.mjs";import{TEXT_FORMATTING_LOCALE_EN as ke,TextFormattingPlugin as fe,loadTextFormattingLocale as Te}from"./plugins/text-formatting.mjs";import{H as he,a as Se,l as Ce}from"./chunks/HeadingPlugin-BmkeUXj8.mjs";import{B as je}from"./chunks/BlockTypePickerRegistry-DcSE6IXB.mjs";import{TOOLBAR_LOCALE_EN as ve,ToolbarOverflowBehavior as Pe,ToolbarPlugin as Be,ToolbarRegistry as Ne,ToolbarServiceKey as ye,loadToolbarLocale as Ae}from"./plugins/toolbar.mjs";import{g as Ee,i as xe,r as Ie}from"./chunks/ColorGrid-CpkbKfXg.mjs";import{a as Le,g as De,i as Re,r as be,b as Me}from"./chunks/ColorPickerPopup-D6XjShhv.mjs";import{i as we,a as _e,b as Ge,c as He,r as Fe}from"./chunks/ColorValidation-DCSKq9B2.mjs";import{a as Oe,f as Ve,n as ze}from"./chunks/KeyboardNav-DsYhKKuV.mjs";import{attachGridKeyboard as Ke,attachListboxKeyboard as We,attachMenuKeyboard as Xe}from"./plugins/shared.mjs";import{P as qe,a as Ue}from"./chunks/PopupManager-0b_Q0m7K.mjs";import{a as Qe,p as Ye}from"./chunks/PopupPositioning-DtvqMSop.mjs";import{f as Ze}from"./chunks/ShortcutFormatting-BLKS0Gys.mjs";import{X as Je,a as $e}from"./chunks/XmlPatterns-DxQXGjP8.mjs";import{TablePlugin as ao,TableSelectionServiceKey as so}from"./plugins/table.mjs";import{DEFAULT_IMAGE_KEYMAP as eo,IMAGE_LOCALE_EN as oo,IMAGE_UPLOAD_SERVICE as ro,ImagePlugin as to,loadImageLocale as io}from"./plugins/image.mjs";import{CODE_BLOCK_LOCALE_EN as no,CODE_BLOCK_SERVICE_KEY as mo,CodeBlockPlugin as lo,JSON_LANGUAGE as co,RegexTokenizer as po,SYNTAX_HIGHLIGHTER_SERVICE_KEY as go,XML_LANGUAGE as uo,loadCodeBlockLocale as ko}from"./plugins/code-block.mjs";import{LINK_LOCALE_EN as fo,LinkPlugin as To,loadLinkLocale as ho}from"./plugins/link.mjs";import{LIST_LOCALE_EN as So,ListPlugin as Co,loadListLocale as jo}from"./plugins/list.mjs";import{BLOCKQUOTE_LOCALE_EN as vo,BlockquotePlugin as Po,loadBlockquoteLocale as Bo}from"./plugins/blockquote.mjs";import{STRIKETHROUGH_LOCALE_EN as No,StrikethroughPlugin as yo,loadStrikethroughLocale as Ao}from"./plugins/strikethrough.mjs";import{TEXT_COLOR_LOCALE_EN as Eo,TextColorPlugin as xo,loadTextColorLocale as Io}from"./plugins/text-color.mjs";import{HORIZONTAL_RULE_LOCALE_EN as Lo,HorizontalRulePlugin as Do,loadHorizontalRuleLocale as Ro}from"./plugins/horizontal-rule.mjs";import{ALIGNMENT_ICONS as bo,ALIGNMENT_LOCALE_EN as Mo,AlignmentPlugin as wo,loadAlignmentLocale as _o}from"./plugins/alignment.mjs";import{FONT_LOCALE_EN as Go,FontPlugin as Ho,loadFontLocale as Fo}from"./plugins/font.mjs";import{FONT_SIZE_LOCALE_EN as Oo,FontSizePlugin as Vo,loadFontSizeLocale as zo}from"./plugins/font-size.mjs";import{HIGHLIGHT_LOCALE_EN as Ko,HighlightPlugin as Wo,loadHighlightLocale as Xo}from"./plugins/highlight.mjs";import{SUPER_SUB_LOCALE_EN as qo,SuperSubPlugin as Uo,loadSuperSubLocale as Qo}from"./plugins/super-sub.mjs";import{HardBreakPlugin as Yo}from"./plugins/hard-break.mjs";import{G as Zo,n as Jo}from"./chunks/index-Cs9iqxhF.mjs";import{PRINT_LOCALE_EN as $o,PrintPlugin as ar,loadPrintLocale as sr}from"./plugins/print.mjs";import{JsonDetector as er,SMART_PASTE_LOCALE_EN as or,SMART_PASTE_SERVICE_KEY as rr,SmartPastePlugin as tr,XmlDetector as ir,loadSmartPasteLocale as nr}from"./plugins/smart-paste.mjs";import{DIRECTION_ICONS as mr,TextDirectionPlugin as lr}from"./plugins/text-direction.mjs";import{T as cr,d as dr,f as pr,g as gr,l as ur}from"./chunks/TextDirectionLocale-CKz0ZrH_.mjs";import{TextDirectionAdvancedPlugin as kr}from"./plugins/text-direction-advanced.mjs";import{V as fr,a as Tr,p as hr,s as Sr,b as Cr}from"./chunks/DocumentParser-LvzDQOd1.mjs";import{a as jr,g as vr,i as Pr,r as Br}from"./chunks/AttributedMarkCommands-BY1BSYWM.mjs";import{c as Nr,i as yr,a as Ar,b as Er,s as xr}from"./chunks/NavigationQueries-11qe4j9x.mjs";import{d as Ir,n as Lr}from"./chunks/NodeSelectionCommands-CXrOcPtG.mjs";import{f as Dr}from"./chunks/RangeIterator-XFN5FaYf.mjs";export{ae as AFTER_PRINT,bo as ALIGNMENT_ICONS,Mo as ALIGNMENT_LOCALE_EN,wo as AlignmentPlugin,se as BEFORE_PRINT,vo as BLOCKQUOTE_LOCALE_EN,je as BlockTypePickerRegistry,Po as BlockquotePlugin,h as CARET_NAVIGATION_LOCALE_EN,no as CODE_BLOCK_LOCALE_EN,mo as CODE_BLOCK_SERVICE_KEY,S as CaretNavigationPlugin,Ma as ClipboardHandler,lo as CodeBlockPlugin,wa as CompositionTracker,_a as CursorWrapper,Ga as DARK_THEME,eo as DEFAULT_IMAGE_KEYMAP,mr as DIRECTION_ICONS,Ys as DecorationSet,Ha as EditorState,Fa as EventBus,zs as EventKey,pe as FIRA_CODE,ge as FIRA_SANS,Go as FONT_LOCALE_EN,Oo as FONT_SIZE_LOCALE_EN,Oa as FileHandlerRegistry,Ho as FontPlugin,Vo as FontSizePlugin,Zo as GapCursorPlugin,he as HEADING_LOCALE_EN,Ko as HIGHLIGHT_LOCALE_EN,Lo as HORIZONTAL_RULE_LOCALE_EN,Yo as HardBreakPlugin,Se as HeadingPlugin,Wo as HighlightPlugin,Va as HistoryManager,Do as HorizontalRulePlugin,oo as IMAGE_LOCALE_EN,ro as IMAGE_UPLOAD_SERVICE,to as ImagePlugin,za as InputManager,Ka as InputRuleRegistry,co as JSON_LANGUAGE,er as JsonDetector,Wa as KeymapRegistry,Xa as LIGHT_THEME,fo as LINK_LOCALE_EN,So as LIST_LOCALE_EN,To as LinkPlugin,Co as ListPlugin,qa as Locale,Ks as LocaleService,Ws as LocaleServiceKey,Ua as NodeViewRegistry,Qa as NotectlEditor,ee as PAPER_MARGIN_HORIZONTAL_PX,oe as PAPER_MARGIN_TOP_PX,re as PAPER_VIEWPORT_PADDING_PX,$o as PRINT_LOCALE_EN,te as PRINT_SERVICE_KEY,ie as PaperSize,Ya as PluginManager,qe as PopupManager,Ue as PopupServiceKey,ar as PrintPlugin,po as RegexTokenizer,or as SMART_PASTE_LOCALE_EN,rr as SMART_PASTE_SERVICE_KEY,ue as STARTER_FONTS,No as STRIKETHROUGH_LOCALE_EN,qo as SUPER_SUB_LOCALE_EN,go as SYNTAX_HIGHLIGHTER_SERVICE_KEY,Za as SchemaRegistry,Xs as ServiceKey,tr as SmartPastePlugin,yo as StrikethroughPlugin,Uo as SuperSubPlugin,Eo as TEXT_COLOR_LOCALE_EN,cr as TEXT_DIRECTION_LOCALE_EN,ke as TEXT_FORMATTING_LOCALE_EN,ve as TOOLBAR_LOCALE_EN,ao as TablePlugin,so as TableSelectionServiceKey,xo as TextColorPlugin,kr as TextDirectionAdvancedPlugin,lr as TextDirectionPlugin,fe as TextFormattingPlugin,Ja as ThemePreset,Pe as ToolbarOverflowBehavior,Be as ToolbarPlugin,Ne as ToolbarRegistry,ye as ToolbarServiceKey,$a as TransactionBuilder,fr as VALID_ALIGNMENTS,Tr as VALID_DIRECTIONS,Je as XML_ATTRS,uo as XML_LANGUAGE,$e as XML_TAG_NAME,ir as XmlDetector,as as adoptContentStyles,Qe as appendToRoot,jr as applyAttributedMark,Le as applyColorMark,Oe as applyRovingTabindex,ss as applyStep,Ke as attachGridKeyboard,We as attachListboxKeyboard,Xe as attachMenuKeyboard,va as blockId,a as blockOffsetToTextOffset,es as canContain,Nr as canCrossBlockBoundary,qs as capitalize,Pa as commandName,La as createBlockElement,s as createBlockNode,ea as createCollapsedSelection,e as createDocument,os as createEditor,de as createFullPreset,oa as createGapCursor,o as createInlineNode,ce as createMinimalPreset,ra as createNodeSelection,ta as createPosition,ia as createSelection,r as createTextNode,rs as createTheme,ts as createThemeStyleSheet,ua as defaultSchema,is as deleteBackward,Is as deleteBackwardAtGap,ns as deleteForward,Ls as deleteForwardAtGap,Ir as deleteNodeSelection,Ds as deleteSelectionCommand,dr as detectTextDirection,C as endOfTextblock,Da as escapeAttr,Ra as escapeHTML,j as extendCharacterBackward,v as extendCharacterForward,P as extendLineDown,B as extendLineUp,N as extendToBlockEnd,y as extendToBlockStart,A as extendToDocumentEnd,E as extendToDocumentStart,x as extendToLineEnd,I as extendToLineStart,As as extendTx,L as extendWordBackward,D as extendWordForward,Ve as findNextDropdownItem,js as findNode,vs as findNodePath,Ps as findNodeWithPath,pr as findSiblingDirection,R as findWordBoundaryBackward,b as findWordBoundaryForward,Dr as forEachBlockInRange,ba as formatHTML,Ze as formatShortcut,ms as generateThemeCSS,De as getActiveColor,t as getBlockChildren,gr as getBlockDir,i as getBlockLength,n as getBlockMarksAtOffset,m as getBlockText,ls as getBlockTypeLabel,M as getCaretRectFromSelection,Ee as getColorName,l as getContentAtOffset,c as getInlineChildren,vr as getMarkAttrAtSelection,ne as getPaperCSSSize,me as getPaperDimensions,Us as getSelectedBlock,Qs as getSelectedBlockId,d as getTextChildren,Gs as getTextDirection,p as hasMark,cs as injectContentStyles,Zs as inlineDecoration,Ba as inlineType,Rs as insertHardBreakCommand,bs as insertTextCommand,ds as invertStep,ps as invertTransaction,gs as isAllowedInReadonly,Pr as isAttributedMarkActive,g as isBlockNode,na as isCollapsed,Re as isColorMarkActive,Hs as isFirefox,ma as isForward,la as isGapCursor,u as isInlineNode,Ea as isInlineNodeOfType,yr as isInsideIsolating,Ar as isIsolatingBlock,k as isLeafBlock,xe as isLightColor,Fs as isMac,ka as isMarkActive,fa as isMarkAllowed,xa as isMarkOfType,Ia as isNodeOfType,ca as isNodeSelection,Os as isRtlContext,us as isSelectionOnlyTransaction,f as isTextNode,da as isTextSelection,we as isValidCSSColor,_e as isValidCSSFontFamily,Ge as isValidCSSFontSize,He as isValidHexColor,le as isValidPaperSize,Er as isVoidBlock,Vs as isWebKit,_o as loadAlignmentLocale,Bo as loadBlockquoteLocale,w as loadCaretNavigationLocale,ko as loadCodeBlockLocale,Fo as loadFontLocale,zo as loadFontSizeLocale,Ce as loadHeadingLocale,Xo as loadHighlightLocale,Ro as loadHorizontalRuleLocale,io as loadImageLocale,ho as loadLinkLocale,jo as loadListLocale,sr as loadPrintLocale,nr as loadSmartPasteLocale,Ao as loadStrikethroughLocale,Qo as loadSuperSubLocale,Io as loadTextColorLocale,ur as loadTextDirectionLocale,Te as loadTextFormattingLocale,Ae as loadToolbarLocale,T as markSetsEqual,Na as markType,Ms as mergeBlockBackward,_ as moveCharacterBackward,G as moveCharacterForward,H as moveLineDown,F as moveLineUp,O as moveToBlockEnd,V as moveToBlockStart,z as moveToDocumentEnd,K as moveToDocumentStart,W as moveToLineEnd,X as moveToLineStart,Es as moveTx,q as moveWordBackward,U as moveWordForward,Q as navigateAcrossBlocks,Lr as navigateArrowIntoVoid,Jo as navigateFromGapCursor,ze as navigateGrid,Y as navigateVerticalWithGoalColumn,Z as nextGraphemeSize,Js as nodeDecoration,xs as nodeSelTx,ya as nodeType,ks as normalizeKeyDescriptor,hr as parseHTMLToDocument,Aa as pluginId,Ye as positionPopup,J as prevGraphemeSize,fs as registerBuiltinSpecs,Ts as removeAdoptedStyles,Br as removeAttributedMark,be as removeColorMark,hs as removeContentStyles,Ie as renderColorGrid,Me as renderColorPickerPopup,Fe as resolveColors,Bs as resolveNodeByPath,Ns as resolveParentByPath,Ss as resolveTheme,Ta as schemaFromRegistry,ws as selectAll,pa as selectionRange,ga as selectionsEqual,Sr as serializeDocumentToCSS,Cr as serializeDocumentToHTML,xr as sharesParent,$ as skipInlineNode,_s as splitBlockCommand,ha as toggleBold,Sa as toggleItalic,Ca as toggleMark,ja as toggleUnderline,Cs as validateContent,aa as viewExtend,sa as viewMove,ys as walkNodes,$s as widgetDecoration};
2
2
  //# sourceMappingURL=full.mjs.map
package/dist/html.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{V as e,a as s,p as o,s as a,b as r}from"./chunks/DocumentParser-w70-Axud.mjs";export{e as VALID_ALIGNMENTS,s as VALID_DIRECTIONS,o as parseHTMLToDocument,a as serializeDocumentToCSS,r as serializeDocumentToHTML};
1
+ import{V as e,a as s,p as o,s as a,b as r}from"./chunks/DocumentParser-LvzDQOd1.mjs";export{e as VALID_ALIGNMENTS,s as VALID_DIRECTIONS,o as parseHTMLToDocument,a as serializeDocumentToCSS,r as serializeDocumentToHTML};
2
2
  //# sourceMappingURL=html.mjs.map
@@ -30,6 +30,10 @@ export declare class ClipboardHandler {
30
30
  private selectionRequiresDocumentSerializer;
31
31
  /** Returns the text selection if the state has one, undefined otherwise. */
32
32
  private getTextSelection;
33
+ /** Extracts plain text for a block range, ignoring InlineNodes in text/plain output. */
34
+ private extractPlainTextForRange;
35
+ /** Joins rich text segments into the plain-text form stored on the clipboard. */
36
+ private plainTextFromSegments;
33
37
  /**
34
38
  * Serializes a selection that includes composite blocks (tables) to clipboard.
35
39
  * Uses serializeDocumentToHTML for HTML to preserve table structure.
@@ -40,6 +44,7 @@ export declare class ClipboardHandler {
40
44
  private serializeBlockRangeToHTML;
41
45
  /** Extracts inline text segments with marks for a block range. */
42
46
  private extractSegmentsForRange;
47
+ private containsInlineSegments;
43
48
  /**
44
49
  * Serializes multi-block content to clipboard HTML using proper block-level tags.
45
50
  * Groups consecutive list_items into <ul>/<ol> wrappers.
@@ -1 +1 @@
1
- {"version":3,"file":"ClipboardHandler.d.ts","sourceRoot":"","sources":["../../src/input/ClipboardHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAejE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIhE,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;CACpC;AAKD,qBAAa,gBAAgB;IAU3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IATzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAa;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;gBAGtC,OAAO,EAAE,WAAW,EACrC,OAAO,EAAE,uBAAuB;IAcjC,OAAO,CAAC,MAAM;IAwBd,OAAO,CAAC,KAAK;IA+Bb,OAAO,CAAC,6BAA6B;IA0BrC,OAAO,CAAC,6BAA6B;IAiFrC;;;;OAIG;IACH,OAAO,CAAC,mCAAmC;IAgC3C,4EAA4E;IAC5E,OAAO,CAAC,gBAAgB;IAMxB;;;;OAIG;IACH,OAAO,CAAC,kCAAkC;IA2C1C,6EAA6E;IAC7E,OAAO,CAAC,yBAAyB;IAuCjC,kEAAkE;IAClE,OAAO,CAAC,uBAAuB;IAqC/B;;;;OAIG;IACH,OAAO,CAAC,8BAA8B;IA4DtC,OAAO,IAAI,IAAI;CAIf"}
1
+ {"version":3,"file":"ClipboardHandler.d.ts","sourceRoot":"","sources":["../../src/input/ClipboardHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAejE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIhE,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;CACpC;AAKD,qBAAa,gBAAgB;IAU3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IATzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAa;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;gBAGtC,OAAO,EAAE,WAAW,EACrC,OAAO,EAAE,uBAAuB;IAcjC,OAAO,CAAC,MAAM;IAwBd,OAAO,CAAC,KAAK;IA+Bb,OAAO,CAAC,6BAA6B;IA0BrC,OAAO,CAAC,6BAA6B;IA6ErC;;;;OAIG;IACH,OAAO,CAAC,mCAAmC;IAgC3C,4EAA4E;IAC5E,OAAO,CAAC,gBAAgB;IAMxB,wFAAwF;IACxF,OAAO,CAAC,wBAAwB;IAIhC,iFAAiF;IACjF,OAAO,CAAC,qBAAqB;IAI7B;;;;OAIG;IACH,OAAO,CAAC,kCAAkC;IAkC1C,6EAA6E;IAC7E,OAAO,CAAC,yBAAyB;IAuCjC,kEAAkE;IAClE,OAAO,CAAC,uBAAuB;IA2C/B,OAAO,CAAC,sBAAsB;IAI9B;;;;OAIG;IACH,OAAO,CAAC,8BAA8B;IA4DtC,OAAO,IAAI,IAAI;CAIf"}