@aquera/nile-elements 2.0.0 → 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.
- package/README.md +11 -0
- package/demo/nxtgen-dark.css +2 -2
- package/dist/{index-ccff99d6.esm.js → index-0fe57384.esm.js} +1 -1
- package/dist/index-f6944844.cjs.js +2 -0
- package/dist/{index-e43755f5.cjs.js.map → index-f6944844.cjs.js.map} +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1127 -741
- package/dist/nile-code-editor/extensionSetup.cjs.js +1 -1
- package/dist/nile-code-editor/extensionSetup.esm.js +1 -1
- package/dist/nile-code-editor/index.cjs.js +1 -1
- package/dist/nile-code-editor/index.esm.js +1 -1
- package/dist/nile-code-editor/nile-code-editor.cjs.js +2 -2
- package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
- package/dist/nile-code-editor/nile-code-editor.css.cjs.js +1 -1
- package/dist/nile-code-editor/nile-code-editor.css.cjs.js.map +1 -1
- package/dist/nile-code-editor/nile-code-editor.css.esm.js +2 -2
- package/dist/nile-code-editor/nile-code-editor.esm.js +4 -4
- package/dist/nile-code-editor/theme.cjs.js +1 -1
- package/dist/nile-code-editor/theme.cjs.js.map +1 -1
- package/dist/nile-code-editor/theme.esm.js +1 -1
- package/dist/nile-combobox/nile-combobox.css.cjs.js +1 -1
- package/dist/nile-combobox/nile-combobox.css.cjs.js.map +1 -1
- package/dist/nile-combobox/nile-combobox.css.esm.js +1 -1
- package/dist/nile-detail/nile-detail.css.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.css.cjs.js.map +1 -1
- package/dist/nile-detail/nile-detail.css.esm.js +1 -1
- package/dist/nile-side-bar-footer/nile-side-bar-footer.css.cjs.js +1 -1
- package/dist/nile-side-bar-footer/nile-side-bar-footer.css.cjs.js.map +1 -1
- package/dist/nile-side-bar-footer/nile-side-bar-footer.css.esm.js +3 -3
- package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.css.cjs.js +1 -1
- package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.css.cjs.js.map +1 -1
- package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.css.esm.js +13 -7
- package/dist/nile-timestamp-builder/index.cjs.js +2 -0
- package/dist/nile-timestamp-builder/index.cjs.js.map +1 -0
- package/dist/nile-timestamp-builder/index.esm.js +1 -0
- package/dist/nile-timestamp-builder/nile-timestamp-builder-utils.cjs.js +2 -0
- package/dist/nile-timestamp-builder/nile-timestamp-builder-utils.cjs.js.map +1 -0
- package/dist/nile-timestamp-builder/nile-timestamp-builder-utils.esm.js +1 -0
- package/dist/nile-timestamp-builder/nile-timestamp-builder.cjs.js +2 -0
- package/dist/nile-timestamp-builder/nile-timestamp-builder.cjs.js.map +1 -0
- package/dist/nile-timestamp-builder/nile-timestamp-builder.css.cjs.js +2 -0
- package/dist/nile-timestamp-builder/nile-timestamp-builder.css.cjs.js.map +1 -0
- package/dist/nile-timestamp-builder/nile-timestamp-builder.css.esm.js +195 -0
- package/dist/nile-timestamp-builder/nile-timestamp-builder.esm.js +154 -0
- package/dist/nile-timestamp-builder/timezones.cjs.js +2 -0
- package/dist/nile-timestamp-builder/timezones.cjs.js.map +1 -0
- package/dist/nile-timestamp-builder/timezones.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.esm.js +91 -58
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.esm.js +19 -19
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.esm.js +14 -14
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.esm.js +13 -13
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +12 -12
- package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-menu.esm.js +10 -10
- package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-panel.esm.js +4 -4
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.esm.js +11 -11
- package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/find-replace.esm.js +9 -9
- package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/image-menu.esm.js +11 -11
- package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/image-panel.esm.js +6 -6
- package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/insert-menu.esm.js +14 -14
- package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/link-editor.esm.js +16 -16
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.esm.js +8 -8
- package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/math-panel.esm.js +4 -4
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.esm.js +16 -16
- package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +29 -29
- package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/special-chars.esm.js +8 -8
- package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/suggest-list.esm.js +9 -9
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.esm.js +23 -23
- package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/table-menu.esm.js +7 -7
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/nile-code-editor/nile-code-editor.css.js +2 -2
- package/dist/src/nile-code-editor/nile-code-editor.css.js.map +1 -1
- package/dist/src/nile-code-editor/nile-code-editor.d.ts +15 -0
- package/dist/src/nile-code-editor/nile-code-editor.js +65 -6
- package/dist/src/nile-code-editor/nile-code-editor.js.map +1 -1
- package/dist/src/nile-code-editor/theme.d.ts +6 -117
- package/dist/src/nile-code-editor/theme.js +100 -147
- package/dist/src/nile-code-editor/theme.js.map +1 -1
- package/dist/src/nile-combobox/nile-combobox.css.js +1 -1
- package/dist/src/nile-combobox/nile-combobox.css.js.map +1 -1
- package/dist/src/nile-detail/nile-detail.css.js +1 -1
- package/dist/src/nile-detail/nile-detail.css.js.map +1 -1
- package/dist/src/nile-side-bar-footer/nile-side-bar-footer.css.js +3 -3
- package/dist/src/nile-side-bar-footer/nile-side-bar-footer.css.js.map +1 -1
- package/dist/src/nile-side-bar-footer-item/nile-side-bar-footer-item.css.js +11 -5
- package/dist/src/nile-side-bar-footer-item/nile-side-bar-footer-item.css.js.map +1 -1
- package/dist/src/nile-timestamp-builder/index.d.ts +1 -0
- package/dist/src/nile-timestamp-builder/index.js +2 -0
- package/dist/src/nile-timestamp-builder/index.js.map +1 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder-utils.d.ts +54 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder-utils.js +254 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder-utils.js.map +1 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder.css.d.ts +7 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder.css.js +203 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder.css.js.map +1 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder.d.ts +94 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder.js +578 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder.js.map +1 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder.test.d.ts +1 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder.test.js +890 -0
- package/dist/src/nile-timestamp-builder/nile-timestamp-builder.test.js.map +1 -0
- package/dist/src/nile-timestamp-builder/timezones.d.ts +8 -0
- package/dist/src/nile-timestamp-builder/timezones.js +357 -0
- package/dist/src/nile-timestamp-builder/timezones.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +91 -58
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.d.ts +2 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +23 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js +19 -19
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js +10 -10
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +7 -7
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js +5 -5
- package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js +6 -6
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +4 -4
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js +6 -6
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.js +7 -7
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.js +6 -6
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.js +6 -6
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js +7 -7
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.js +9 -9
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js +8 -8
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +4 -4
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js +9 -9
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js +24 -24
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.js +4 -4
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +7 -7
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +16 -16
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +4 -4
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -1
- package/dist/src/version.js +2 -2
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/nile-code-editor/nile-code-editor.css.ts +2 -2
- package/src/nile-code-editor/nile-code-editor.ts +68 -5
- package/src/nile-code-editor/theme.ts +129 -162
- package/src/nile-combobox/nile-combobox.css.ts +1 -1
- package/src/nile-detail/nile-detail.css.ts +1 -1
- package/src/nile-side-bar-footer/nile-side-bar-footer.css.ts +3 -3
- package/src/nile-side-bar-footer-item/nile-side-bar-footer-item.css.ts +11 -5
- package/src/nile-timestamp-builder/index.ts +1 -0
- package/src/nile-timestamp-builder/nile-timestamp-builder-utils.ts +321 -0
- package/src/nile-timestamp-builder/nile-timestamp-builder.css.ts +204 -0
- package/src/nile-timestamp-builder/nile-timestamp-builder.test.ts +1089 -0
- package/src/nile-timestamp-builder/nile-timestamp-builder.ts +625 -0
- package/src/nile-timestamp-builder/timezones.ts +356 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +91 -58
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +21 -1
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts +19 -19
- package/src/nile-wysiwyg-editor/ui/bookmark-panel.ts +10 -10
- package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +7 -7
- package/src/nile-wysiwyg-editor/ui/code-block-menu.ts +5 -5
- package/src/nile-wysiwyg-editor/ui/embed-menu.ts +6 -6
- package/src/nile-wysiwyg-editor/ui/embed-panel.ts +4 -4
- package/src/nile-wysiwyg-editor/ui/emoji-picker.ts +6 -6
- package/src/nile-wysiwyg-editor/ui/find-replace.ts +7 -7
- package/src/nile-wysiwyg-editor/ui/image-menu.ts +6 -6
- package/src/nile-wysiwyg-editor/ui/image-panel.ts +6 -6
- package/src/nile-wysiwyg-editor/ui/insert-menu.ts +7 -7
- package/src/nile-wysiwyg-editor/ui/link-editor.ts +9 -9
- package/src/nile-wysiwyg-editor/ui/markdown-panel.ts +8 -8
- package/src/nile-wysiwyg-editor/ui/math-panel.ts +4 -4
- package/src/nile-wysiwyg-editor/ui/shortcut-help.ts +9 -9
- package/src/nile-wysiwyg-editor/ui/source-view.ts +24 -24
- package/src/nile-wysiwyg-editor/ui/special-chars.ts +4 -4
- package/src/nile-wysiwyg-editor/ui/suggest-list.ts +7 -7
- package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +16 -16
- package/src/nile-wysiwyg-editor/ui/table-menu.ts +4 -4
- package/vscode-html-custom-data.json +94 -2
- package/dist/index-e43755f5.cjs.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-wysiwyg-editor.cjs.js","sources":["../../../src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts"],"sourcesContent":["import { html, TemplateResult, CSSResultArray, PropertyValues, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { EditorView } from 'prosemirror-view';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { Node as PMNode } from 'prosemirror-model';\n\nimport NileElement from '../internal/nile-element';\nimport { styles } from './nile-wysiwyg-editor.css';\nimport {\n defaultSchema,\n createEditorState,\n computeToolbarState,\n htmlToDoc,\n htmlToSlice,\n docToHtml,\n docToText,\n docToMarkdown,\n markdownToHtml,\n docToJson,\n jsonToDoc,\n isDocEmpty,\n sanitizeHtml,\n getCommand,\n getMarkRange,\n flattenToSingleParagraph,\n imageUploadKey,\n findUploadPos,\n countWords,\n TaskItemView,\n ImageView,\n FigureView,\n EmbedView,\n StyleBlockView,\n MathView,\n isOfficeHtml,\n cleanOfficeHtml,\n toInlineStyledHtml,\n buildWordDocument,\n buildPrintDocument,\n isFormatPainterArmed,\n armFormatPainter,\n disarmFormatPainter,\n applyFormatPainter,\n getFindState,\n searchTr,\n findStepTr,\n clearFindTr,\n replaceActiveTr,\n replaceAllTr,\n} from './engine';\nimport type { ToolbarState } from './engine/selection-state';\nimport type { CommandAttrs, CommandName } from './engine/commands';\nimport { selectedImageInfo } from './engine/commands';\nimport type { MathRenderer } from './engine/plugins/math-view';\nimport type { SuggestionMatch } from './engine/plugins/suggestions';\nimport type {\n WysiwygChangeDetail,\n WysiwygCommandDetail,\n MentionsConfig,\n SnippetConfig,\n MergeFieldConfig,\n TemplateConfig,\n} from './types';\nimport { DEFAULT_TOOLBAR } from './types';\nimport { EMOJI } from './emoji';\n\nimport './nile-wysiwyg-toolbar/nile-wysiwyg-toolbar';\nimport './nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item';\nimport type { AuthoredToolbarItem } from './nile-wysiwyg-toolbar/nile-wysiwyg-toolbar';\nimport './ui/link-editor';\nimport './ui/bubble-menu';\nimport './ui/bubble-item';\nimport './ui/image-panel';\nimport './ui/table-menu';\nimport './ui/suggest-list';\nimport './ui/find-replace';\nimport './ui/source-view';\nimport './ui/embed-panel';\nimport './ui/bookmark-panel';\nimport './ui/code-block-menu';\nimport './ui/shortcut-help';\nimport './ui/image-menu';\nimport './ui/embed-menu';\nimport './ui/special-chars';\nimport './ui/emoji-picker';\nimport './ui/insert-menu';\nimport './ui/math-panel';\nimport './ui/markdown-panel';\nimport type { NileWysiwygLinkEditor } from './ui/link-editor';\nimport type { NileWysiwygBubbleMenu } from './ui/bubble-menu';\nimport type { NileWysiwygImagePanel } from './ui/image-panel';\nimport type { NileWysiwygTableMenu } from './ui/table-menu';\nimport type { NileWysiwygSuggestList, SuggestItem } from './ui/suggest-list';\nimport type { NileWysiwygFindBar } from './ui/find-replace';\nimport type { NileWysiwygSourceView } from './ui/source-view';\nimport type { NileWysiwygEmbedPanel } from './ui/embed-panel';\nimport type { NileWysiwygBookmarkPanel } from './ui/bookmark-panel';\nimport type { NileWysiwygCodeMenu } from './ui/code-block-menu';\nimport type { NileWysiwygShortcutHelp } from './ui/shortcut-help';\nimport type { NileWysiwygImageMenu } from './ui/image-menu';\nimport type { NileWysiwygEmbedMenu } from './ui/embed-menu';\nimport type { NileWysiwygSpecialChars } from './ui/special-chars';\nimport type { NileWysiwygEmojiPicker } from './ui/emoji-picker';\nimport type { NileWysiwygInsertMenu } from './ui/insert-menu';\nimport type { NileWysiwygMathPanel } from './ui/math-panel';\nimport type { NileWysiwygMarkdownPanel } from './ui/markdown-panel';\n\ninterface SlashItem extends SuggestItem {\n command: CommandName | 'openImage' | 'openEmbed' | 'openBookmark';\n attrs?: CommandAttrs;\n}\n\nconst SLASH_ITEMS: SlashItem[] = [\n { key: 'heading1', label: 'Heading 1', hint: '#', command: 'heading', attrs: { level: 1 } },\n { key: 'heading2', label: 'Heading 2', hint: '##', command: 'heading', attrs: { level: 2 } },\n { key: 'heading3', label: 'Heading 3', hint: '###', command: 'heading', attrs: { level: 3 } },\n { key: 'bulletList', label: 'Bulleted list', hint: '-', command: 'bulletList' },\n { key: 'orderedList', label: 'Numbered list', hint: '1.', command: 'orderedList' },\n { key: 'taskList', label: 'Checklist', hint: '[ ]', command: 'taskList' },\n { key: 'blockquote', label: 'Blockquote', hint: '>', command: 'blockquote' },\n { key: 'codeBlock', label: 'Code block', hint: '```', command: 'codeBlock' },\n { key: 'table', label: 'Table', hint: '3×3', command: 'insertTable', attrs: { rows: 3, cols: 3 } },\n { key: 'image', label: 'Image', command: 'openImage' },\n { key: 'embed', label: 'Video embed', hint: 'YouTube…', command: 'openEmbed' },\n { key: 'bookmark', label: 'Bookmark (anchor)', command: 'openBookmark' },\n { key: 'horizontalRule', label: 'Divider', hint: '---', command: 'horizontalRule' },\n];\n\nlet uploadCounter = 0;\n\nfunction readFileAsDataURL(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n}\n\nconst CHANGE_DEBOUNCE_MS = 250;\n\n/**\n * WYSIWYG rich text editor powered by ProseMirror.\n *\n * Requires evergreen browsers: selection inside shadow DOM relies on\n * `Selection.getComposedRanges()` (Safari 17+, recent Firefox) or Chrome's\n * `shadowRoot.getSelection()`.\n *\n * @tag nile-wysiwyg-editor\n *\n * @event nile-change - Debounced content change. detail: { value, json, content }\n * @event nile-input - Every document change. detail: { value, json, content }\n * @event nile-focus - Editor gained focus.\n * @event nile-blur - Editor lost focus.\n * @event nile-selection-change - detail: ToolbarState snapshot.\n * @event nile-image-upload-request - Cancelable. detail: { file, insert(src, alt) }.\n * Call preventDefault() and use insert() to fully own the upload.\n * @event nile-image-upload-error - detail: { file, error } when uploadHandler rejects.\n * @event nile-mention-query - detail: { trigger, query, provide(items) } for async sources.\n * @event nile-mention-select - detail: { trigger, key, label } when a mention is inserted.\n * @event nile-word-count - detail: { words, characters } on every document change.\n * @event nile-autosave - detail: { value, json, content } on the autosave interval.\n *\n * @csspart base - Outer container.\n * @csspart toolbar - The toolbar element.\n * @csspart surface - The scrollable editing surface.\n */\n@customElement('nile-wysiwyg-editor')\nexport class NileWysiwygEditor extends NileElement {\n static formAssociated = true;\n\n /** Document content as HTML. Not reflected to the attribute. */\n @property({ type: String }) value = '';\n\n @property({ type: String }) placeholder = '';\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Toolbar config string; `\"none\"` hides the toolbar. */\n @property({ type: String }) toolbar = DEFAULT_TOOLBAR;\n\n /**\n * Toolbar built from authored `<nile-wysiwyg-toolbar-item>` light-DOM\n * children. When present it takes precedence over the `toolbar` string.\n */\n @state() private authoredToolbar?: AuthoredToolbarItem[];\n\n /**\n * Bubble menu built from authored `<nile-wysiwyg-bubble-item>` light-DOM\n * children. When present it replaces the built-in bold/italic/underline/\n * strike/link set.\n */\n @state() private authoredBubble?: AuthoredToolbarItem[];\n\n /** Watches authored toolbar/bubble children so edits re-render them. */\n private toolbarObserver?: MutationObserver;\n\n /** Shows a balloon toolbar over text selections. */\n @property({ type: Boolean, attribute: 'bubble-menu' }) bubbleMenu = false;\n\n /** Sanitizes incoming HTML (value, paste, insertHTML). Leave on. */\n @property({ type: Boolean }) sanitize = true;\n\n /** Constrains content to a single paragraph. */\n @property({ type: Boolean, attribute: 'singleline' }) singleLine = false;\n\n /** Form field name. */\n @property({ type: String }) name = '';\n\n @property({ type: Boolean, reflect: true }) required = false;\n\n /**\n * Async image upload handler. When set, pasted/dropped/picked image files\n * are uploaded through it (an \"Uploading…\" placeholder shows meanwhile)\n * and the returned src is inserted.\n */\n @property({ attribute: false }) uploadHandler?: (\n file: File\n ) => Promise<{ src: string; alt?: string }>;\n\n /**\n * Fallback when no uploadHandler is set and no nile-image-upload-request\n * listener takes over: embed image files as base64 data URLs.\n */\n @property({ attribute: false }) allowBase64Images = true;\n\n /**\n * Shows an \"Upload from computer\" button in the Insert Image dialog. Off by\n * default (URL-only, like the RTE's default); files can always be added via\n * drag & drop or paste regardless.\n */\n @property({ type: Boolean, attribute: 'upload-from-computer' })\n uploadFromComputer = false;\n\n /** Max upload size (bytes) shown/enforced by the image dialog. Default 2 MB. */\n @property({ type: Number, attribute: 'image-max-file-size' })\n imageMaxFileSize = 2 * 1024 * 1024;\n\n /**\n * Mention config: trigger character → items, same shape and JSON attribute\n * format as nile-rich-text-editor. For async sources, configure the\n * trigger with an empty array and listen to nile-mention-query.\n */\n @property({\n attribute: 'mentions',\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trigger of Object.keys(parsed)) {\n const items = parsed[trigger];\n if (Array.isArray(items)) {\n out[trigger] = items\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch {\n return {};\n }\n },\n toAttribute: (value: MentionsConfig) => JSON.stringify(value),\n },\n })\n mentions: MentionsConfig = {};\n\n /** Disables the \"/\" command menu. */\n @property({ type: Boolean, attribute: 'no-slash-commands' }) noSlashCommands = false;\n\n /** Disables the \":\" emoji picker. */\n @property({ type: Boolean, attribute: 'no-emoji' }) noEmoji = false;\n\n /** Maximum character count; further input is rejected. 0 = unlimited. */\n @property({ type: Number, attribute: 'maxlength' }) maxLength = 0;\n\n /** Always show the word/character counter footer (implied by maxlength). */\n @property({ type: Boolean, attribute: 'show-counter' }) showCounter = false;\n\n /** Keeps the toolbar pinned to the viewport while scrolling long content. */\n @property({ type: Boolean, attribute: 'sticky-toolbar', reflect: true })\n stickyToolbar = false;\n\n /** Reusable snippets surfaced in the \"/\" menu (JSON attribute). */\n @property({\n attribute: 'snippets',\n converter: {\n fromAttribute: (value: string): SnippetConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(\n s =>\n s &&\n typeof s.key === 'string' &&\n typeof s.label === 'string' &&\n typeof s.html === 'string'\n )\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: SnippetConfig[]) => JSON.stringify(value),\n },\n })\n snippets: SnippetConfig[] = [];\n\n /** Merge fields offered in the merge-field picker (JSON attribute). */\n @property({\n attribute: 'merge-fields',\n converter: {\n fromAttribute: (value: string): MergeFieldConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(f => f && typeof f.id === 'string' && typeof f.label === 'string')\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: MergeFieldConfig[]) => JSON.stringify(value),\n },\n })\n mergeFields: MergeFieldConfig[] = [];\n\n /** Content templates offered in the template picker (JSON attribute). */\n @property({\n attribute: 'templates',\n converter: {\n fromAttribute: (value: string): TemplateConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(t => t && typeof t.label === 'string' && typeof t.html === 'string')\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: TemplateConfig[]) => JSON.stringify(value),\n },\n })\n templates: TemplateConfig[] = [];\n\n /**\n * Renders a math node's LaTeX to HTML (KaTeX/MathJax/MathML). When unset,\n * the raw LaTeX is shown. Same trust level as uploadHandler — output is\n * inserted as HTML.\n */\n @property({ attribute: false }) mathRenderer?: MathRenderer;\n\n /** Emit nile-autosave every N ms while the document has changed. 0 = off. */\n @property({ type: Number, attribute: 'autosave-interval' }) autosaveInterval = 0;\n\n /** When on, every paste drops formatting and inserts plain text. */\n @property({ type: Boolean, attribute: 'paste-as-plain-text', reflect: true })\n pasteAsPlainText = false;\n\n /** Disables Markdown detection on plain-text pastes. */\n @property({ type: Boolean, attribute: 'no-markdown-paste' })\n noMarkdownPaste = false;\n\n /** Disables typography autocorrect (smart quotes, dashes, (c) → ©). */\n @property({ type: Boolean, attribute: 'no-text-transform' })\n noTextTransform = false;\n\n /** Expands the editor to fill the viewport. Esc exits. */\n @property({ type: Boolean, reflect: true }) fullscreen = false;\n\n /** Outlines block boundaries (paragraphs, headings, lists…) while editing. */\n @property({ type: Boolean, attribute: 'show-blocks', reflect: true })\n showBlocks = false;\n\n @state() private toolbarState?: ToolbarState;\n\n @state() private hasFocus = false;\n\n @state() private sourceMode = false;\n\n @state() private counter = { words: 0, characters: 0 };\n\n /** Which list the shared insert-menu is showing, if open. */\n @state() private insertMenuMode: 'template' | 'merge' | null = null;\n\n @query('.nile-wysiwyg') private baseEl!: HTMLElement;\n\n @query('nile-wysiwyg-toolbar') private toolbarEl?: HTMLElement;\n\n @query('.nile-wysiwyg__surface') private surfaceEl!: HTMLElement;\n\n @query('nile-wysiwyg-link-editor') private linkEditorEl!: NileWysiwygLinkEditor;\n\n @query('nile-wysiwyg-bubble-menu') private bubbleMenuEl!: NileWysiwygBubbleMenu;\n\n @query('nile-wysiwyg-image-panel') private imagePanelEl!: NileWysiwygImagePanel;\n\n @query('nile-wysiwyg-table-menu') private tableMenuEl!: NileWysiwygTableMenu;\n\n @query('nile-wysiwyg-suggest-list') private suggestListEl!: NileWysiwygSuggestList;\n\n @query('nile-wysiwyg-find-bar') private findBarEl!: NileWysiwygFindBar;\n\n @query('nile-wysiwyg-source-view') private sourceViewEl?: NileWysiwygSourceView;\n\n @query('nile-wysiwyg-embed-panel') private embedPanelEl!: NileWysiwygEmbedPanel;\n\n @query('nile-wysiwyg-bookmark-panel') private bookmarkPanelEl!: NileWysiwygBookmarkPanel;\n\n @query('nile-wysiwyg-code-menu') private codeMenuEl!: NileWysiwygCodeMenu;\n\n @query('nile-wysiwyg-shortcut-help') private shortcutHelpEl!: NileWysiwygShortcutHelp;\n\n @query('nile-wysiwyg-image-menu') private imageMenuEl!: NileWysiwygImageMenu;\n\n @query('nile-wysiwyg-embed-menu') private embedMenuEl!: NileWysiwygEmbedMenu;\n\n @query('nile-wysiwyg-special-chars') private specialCharsEl!: NileWysiwygSpecialChars;\n\n @query('nile-wysiwyg-emoji-picker') private emojiPickerEl!: NileWysiwygEmojiPicker;\n\n @query('nile-wysiwyg-insert-menu') private insertMenuEl!: NileWysiwygInsertMenu;\n\n @query('nile-wysiwyg-math-panel') private mathPanelEl!: NileWysiwygMathPanel;\n\n @query('nile-wysiwyg-markdown-panel') private markdownPanelEl!: NileWysiwygMarkdownPanel;\n\n private view?: EditorView;\n\n private mentionMatch: SuggestionMatch | null = null;\n\n private slashMatch: SuggestionMatch | null = null;\n\n private emojiMatch: SuggestionMatch | null = null;\n\n private activeSuggestSource: 'mention' | 'slash' | 'emoji' | null = null;\n\n private suggestDismissed: string | null = null;\n\n private mentionQueryToken = '';\n\n private autosaveTimer?: ReturnType<typeof setInterval>;\n\n private lastAutosaveValue = '';\n\n private internals?: ElementInternals;\n\n private defaultValue = '';\n\n private syncingValue = false;\n\n private changeTimer?: ReturnType<typeof setTimeout>;\n\n private pendingChange = false;\n\n /** Body overflow value before fullscreen locked it; null = not locked. */\n private previousBodyOverflow: string | null = null;\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n constructor() {\n super();\n if (typeof this.attachInternals === 'function') {\n this.internals = this.attachInternals();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n // Remount after a disconnect/reconnect (e.g. host moved in the DOM).\n if (this.hasUpdated && !this.view) {\n this.updateComplete.then(() => this.mountView());\n }\n // Close floating panels when the user clicks anywhere outside them.\n document.addEventListener('pointerdown', this.onOutsidePointerDown, true);\n // Format painter applies on pointer release so a drag-selection is painted\n // whole, not on the first mid-drag selection change.\n document.addEventListener('mouseup', this.onPainterPointerUp);\n\n // Discover an author-supplied toolbar / bubble menu (light-DOM\n // <nile-wysiwyg-toolbar-item> / <nile-wysiwyg-bubble-item> children) and\n // keep them in sync as they change.\n this.syncAuthoredToolbar();\n this.syncAuthoredBubble();\n if (!this.toolbarObserver) {\n this.toolbarObserver = new MutationObserver(() => {\n this.syncAuthoredToolbar();\n this.syncAuthoredBubble();\n });\n }\n this.toolbarObserver.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['name', 'label', 'icon', 'divider', 'overflow'],\n });\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('pointerdown', this.onOutsidePointerDown, true);\n document.removeEventListener('mouseup', this.onPainterPointerUp);\n this.toolbarObserver?.disconnect();\n if (this.changeTimer) clearTimeout(this.changeTimer);\n if (this.autosaveTimer) clearInterval(this.autosaveTimer);\n if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n this.view?.destroy();\n this.view = undefined;\n }\n\n protected firstUpdated(): void {\n this.defaultValue = this.value;\n // Re-read now that light-DOM children are guaranteed parsed (the initial\n // connectedCallback read can run mid-parse before children exist).\n this.syncAuthoredToolbar();\n this.syncAuthoredBubble();\n this.mountView();\n }\n\n /**\n * Reads `<nile-wysiwyg-toolbar-item>` children into a structured toolbar and\n * stores it on {@link authoredToolbar}. Absent items clear the override\n * (falling back to the `toolbar` string). No-ops when nothing changed to\n * avoid needless re-renders.\n */\n private syncAuthoredToolbar(): void {\n const nodes = this.querySelectorAll('nile-wysiwyg-toolbar-item');\n const next: AuthoredToolbarItem[] | undefined = nodes.length\n ? Array.from(nodes)\n .map(el => ({\n name: el.hasAttribute('divider') ? '|' : el.getAttribute('name') || '',\n label: el.getAttribute('label') || undefined,\n icon: el.getAttribute('icon') || undefined,\n overflow: el.hasAttribute('overflow') || undefined,\n }))\n .filter(item => item.name)\n : undefined;\n if (JSON.stringify(next) !== JSON.stringify(this.authoredToolbar)) {\n this.authoredToolbar = next;\n }\n }\n\n /**\n * Reads `<nile-wysiwyg-bubble-item>` children into a structured bubble-menu\n * item list stored on {@link authoredBubble}. Absent items clear the override\n * (falling back to the built-in default). No-ops when nothing changed.\n */\n private syncAuthoredBubble(): void {\n const nodes = this.querySelectorAll('nile-wysiwyg-bubble-item');\n const next: AuthoredToolbarItem[] | undefined = nodes.length\n ? Array.from(nodes)\n .map(el => ({\n name: el.hasAttribute('divider') ? '|' : el.getAttribute('name') || '',\n label: el.getAttribute('label') || undefined,\n icon: el.getAttribute('icon') || undefined,\n }))\n .filter(item => item.name)\n : undefined;\n if (JSON.stringify(next) !== JSON.stringify(this.authoredBubble)) {\n this.authoredBubble = next;\n }\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('value') && this.view && !this.syncingValue) {\n const current = docToHtml(this.view.state.doc);\n if (current !== this.value) this.setContent(this.value);\n }\n this.syncingValue = false;\n\n if ((changed.has('disabled') || changed.has('readonly')) && this.view) {\n this.view.setProps({});\n }\n if (changed.has('placeholder') && this.view) {\n // Decorations are recomputed on any transaction.\n this.view.dispatch(this.view.state.tr);\n }\n if (changed.has('required')) this.updateValidity();\n if (changed.has('autosaveInterval')) this.restartAutosave();\n if (\n (changed.has('pasteAsPlainText') ||\n changed.has('fullscreen') ||\n changed.has('showBlocks')) &&\n this.view\n ) {\n this.toolbarState = this.snapshotToolbar(this.view.state);\n }\n // Input rules are baked into the state at build time; rebuild in place\n // (same doc, fresh plugins) when the autocorrect toggle changes.\n if (changed.has('noTextTransform') && this.view && !changed.has('value')) {\n this.view.updateState(this.buildState(this.view.state.doc));\n }\n // Lock page scrolling while fullscreen covers the viewport.\n if (changed.has('fullscreen')) {\n if (this.fullscreen) {\n if (this.previousBodyOverflow === null) {\n this.previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n } else if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n }\n\n private restartAutosave(): void {\n if (this.autosaveTimer) clearInterval(this.autosaveTimer);\n this.autosaveTimer = undefined;\n if (this.autosaveInterval > 0) {\n this.lastAutosaveValue = this.value;\n this.autosaveTimer = setInterval(() => {\n if (!this.view || this.value === this.lastAutosaveValue) return;\n this.lastAutosaveValue = this.value;\n this.emit('nile-autosave', this.buildChangeDetail(this.view.state.doc));\n }, this.autosaveInterval);\n }\n }\n\n // ------------------------------------------------------------------ view\n\n private buildState(doc?: PMNode): EditorState {\n return createEditorState({\n schema: defaultSchema,\n doc,\n getPlaceholder: () => this.placeholder,\n singleLine: this.singleLine,\n onLinkShortcut: () => this.openLinkEditor(),\n onFindShortcut: () => this.openFindBar(),\n onShortcutHelp: () => this.openShortcutHelp(),\n onImageFiles: (files, pos) => {\n for (const file of files) this.insertImageFile(file, pos);\n },\n mentions: {\n getTriggers: () => Object.keys(this.mentions),\n onChange: match => {\n this.mentionMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'mention'),\n },\n slashCommands: {\n onChange: match => {\n this.slashMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'slash'),\n },\n emoji: {\n onChange: match => {\n this.emojiMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'emoji'),\n },\n getMaxLength: () => this.maxLength,\n getForcePlainText: () => this.pasteAsPlainText,\n getMarkdownPaste: () => !this.noMarkdownPaste,\n getSanitize: () => this.sanitize,\n textTransform: !this.noTextTransform,\n });\n }\n\n /**\n * ToolbarState snapshot augmented with host-only flags the pure\n * computeToolbarState can't know about (e.g. the paste-as-plain-text toggle).\n */\n private snapshotToolbar(state: EditorState): ToolbarState {\n return {\n ...computeToolbarState(state),\n pasteAsPlainText: this.pasteAsPlainText,\n fullscreen: this.fullscreen,\n showBlocks: this.showBlocks,\n formatPainter: isFormatPainterArmed(state),\n };\n }\n\n private mountView(): void {\n if (this.view || !this.surfaceEl) return;\n let doc = this.value\n ? htmlToDoc(defaultSchema, this.value, this.sanitize)\n : undefined;\n if (doc && this.singleLine) doc = flattenToSingleParagraph(doc);\n\n this.view = new EditorView(this.surfaceEl, {\n state: this.buildState(doc),\n dispatchTransaction: tr => this.handleTransaction(tr),\n editable: () => !this.disabled && !this.readonly,\n transformPastedHTML: pasted => {\n // Word/Google Docs clipboard HTML gets normalized (real lists, no\n // mso noise) before the sanitizer clamps it to the schema.\n const cleaned = isOfficeHtml(pasted) ? cleanOfficeHtml(pasted) : pasted;\n return this.sanitize ? sanitizeHtml(cleaned) : cleaned;\n },\n handleDOMEvents: {\n mousedown: () => {\n // Clicking into the document dismisses the never-focused popovers\n // (they take no focus, so blur can't close them).\n this.closeSpecialChars(false);\n this.closeInsertMenu(false);\n return false;\n },\n focus: () => {\n this.hasFocus = true;\n this.updateOverlays();\n this.emit('nile-focus');\n return false;\n },\n blur: (_view, event) => {\n // Focus moving into the editor's own chrome (language picker,\n // panels) is not a blur — closing overlays here would dismiss\n // the control the user just clicked.\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && (this.shadowRoot?.contains(related) || this.contains(related))) {\n return false;\n }\n this.hasFocus = false;\n this.flushChange();\n this.updateOverlays();\n this.closeSuggestList();\n this.closeSpecialChars(false);\n this.emit('nile-blur');\n return false;\n },\n },\n attributes: {\n role: 'textbox',\n 'aria-multiline': this.singleLine ? 'false' : 'true',\n },\n nodeViews: {\n task_item: (node, view, getPos) =>\n new TaskItemView(node, view, getPos as () => number | undefined),\n image: (node, view, getPos) =>\n new ImageView(node, view, getPos as () => number | undefined),\n figure: (node, view, getPos) =>\n new FigureView(node, view, getPos as () => number | undefined),\n embed: (node, view, getPos) =>\n new EmbedView(node, view, getPos as () => number | undefined),\n styleBlock: node => new StyleBlockView(node),\n math: node => new MathView(node, this.mathRenderer),\n },\n });\n\n this.view.dom.addEventListener('mousedown', this.onPainterPointerDown);\n\n this.toolbarState = this.snapshotToolbar(this.view.state);\n this.counter = countWords(this.view.state.doc);\n this.syncFormValue(this.view.state.doc);\n }\n\n /**\n * True while a drag-selection is in progress with the format painter armed.\n * Suppresses the mid-drag auto-apply in {@link handleTransaction} so the\n * copied formatting lands on the final, complete selection (on mouse-up).\n */\n private painterDragActive = false;\n\n private onPainterPointerDown = (): void => {\n if (this.view && isFormatPainterArmed(this.view.state)) {\n this.painterDragActive = true;\n }\n };\n\n private onPainterPointerUp = (): void => {\n if (!this.painterDragActive) return;\n this.painterDragActive = false;\n // Defer a frame so ProseMirror has synced the final DOM selection.\n requestAnimationFrame(() => {\n if (!this.view) return;\n if (this.view.state.selection.empty || !isFormatPainterArmed(this.view.state)) return;\n const applyTr = applyFormatPainter(this.view.state);\n if (applyTr) this.view.dispatch(applyTr);\n });\n };\n\n private handleTransaction(tr: Transaction): void {\n if (!this.view) return;\n const newState = this.view.state.apply(tr);\n this.view.updateState(newState);\n\n // Format painter: once armed, the next non-empty selection the user makes\n // receives the copied formatting, then the painter disarms. While a pointer\n // drag is building the selection we defer to the mouse-up handler\n // (onPainterPointerUp) so the whole range is painted, not just the first\n // mid-drag character. Single-shot selections (double-click, Shift+End,\n // programmatic) still apply here.\n if (\n tr.selectionSet &&\n !newState.selection.empty &&\n isFormatPainterArmed(newState) &&\n !this.painterDragActive\n ) {\n const applyTr = applyFormatPainter(newState);\n if (applyTr) {\n this.view.dispatch(applyTr);\n return;\n }\n }\n\n this.toolbarState = this.snapshotToolbar(newState);\n this.emit('nile-selection-change', this.toolbarState);\n this.updateOverlays();\n\n if (this.findBarEl?.open) {\n const find = getFindState(newState);\n this.findBarEl.matchCount = find.matches.length;\n this.findBarEl.activeIndex = find.activeIndex;\n }\n\n if (tr.docChanged) {\n const detail = this.buildChangeDetail(newState.doc);\n this.syncingValue = true;\n this.value = detail.value;\n this.syncFormValue(newState.doc);\n this.emit('nile-input', detail);\n this.counter = countWords(newState.doc);\n this.emit('nile-word-count', this.counter);\n this.scheduleChange();\n }\n }\n\n private buildChangeDetail(doc: PMNode): WysiwygChangeDetail {\n const value = isDocEmpty(doc) ? '' : docToHtml(doc);\n return { value, json: docToJson(doc), content: value };\n }\n\n private scheduleChange(): void {\n this.pendingChange = true;\n if (this.changeTimer) clearTimeout(this.changeTimer);\n this.changeTimer = setTimeout(() => this.flushChange(), CHANGE_DEBOUNCE_MS);\n }\n\n private flushChange(): void {\n if (!this.pendingChange || !this.view) return;\n this.pendingChange = false;\n if (this.changeTimer) clearTimeout(this.changeTimer);\n this.emit('nile-change', this.buildChangeDetail(this.view.state.doc));\n }\n\n // ------------------------------------------------------------------ form\n\n private syncFormValue(doc: PMNode): void {\n if (!this.internals) return;\n const value = isDocEmpty(doc) ? '' : docToHtml(doc);\n this.internals.setFormValue(value === '' ? null : value);\n this.updateValidity();\n }\n\n private updateValidity(): void {\n if (!this.internals) return;\n const empty = this.view ? isDocEmpty(this.view.state.doc) : this.value === '';\n if (this.required && empty) {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please fill out this field.',\n this.surfaceEl ?? undefined\n );\n } else {\n this.internals.setValidity({});\n }\n }\n\n formResetCallback(): void {\n this.setContent(this.defaultValue);\n }\n\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public checkValidity(): boolean {\n return this.internals ? this.internals.checkValidity() : true;\n }\n\n public reportValidity(): boolean {\n return this.internals ? this.internals.reportValidity() : true;\n }\n\n // -------------------------------------------------------------- overlays\n\n /** Positions an overlay element near a doc position (default: selection). */\n private positionOverlay(\n el: HTMLElement,\n placement: 'above' | 'below',\n pos?: number\n ): void {\n if (!this.view || !this.baseEl) return;\n const from = pos ?? this.view.state.selection.from;\n const coords = this.view.coordsAtPos(from);\n const baseRect = this.baseEl.getBoundingClientRect();\n const left = Math.max(\n 4,\n Math.min(coords.left - baseRect.left, baseRect.width - el.offsetWidth - 4)\n );\n el.style.left = `${left}px`;\n if (placement === 'above') {\n el.style.top = `${Math.max(4, coords.top - baseRect.top - el.offsetHeight - 8)}px`;\n } else {\n el.style.top = `${coords.bottom - baseRect.top + 6}px`;\n }\n }\n\n /** Positions a floating panel directly below a toolbar/anchor element. */\n private positionOverlayBelowAnchor(el: HTMLElement, anchor: HTMLElement): void {\n if (!this.baseEl) return;\n const baseRect = this.baseEl.getBoundingClientRect();\n const anchorRect = anchor.getBoundingClientRect();\n const left = Math.max(\n 4,\n Math.min(anchorRect.left - baseRect.left, baseRect.width - el.offsetWidth - 4)\n );\n // Clear any CSS-pinned `right` (e.g. the find bar) so `left` wins.\n el.style.right = 'auto';\n el.style.left = `${left}px`;\n el.style.top = `${anchorRect.bottom - baseRect.top + 6}px`;\n }\n\n /** Finds a toolbar button by its aria-label, to anchor a panel below it. */\n private toolbarButton(label: string): HTMLElement | null {\n return (\n (this.toolbarEl?.shadowRoot?.querySelector(\n `button[aria-label=\"${label}\"]`\n ) as HTMLElement | null) ?? null\n );\n }\n\n private updateOverlays(): void {\n if (!this.bubbleMenuEl) return;\n const panelOpen =\n this.linkEditorEl?.open ||\n this.imagePanelEl?.open ||\n this.embedPanelEl?.open ||\n this.bookmarkPanelEl?.open ||\n this.emojiPickerEl?.open;\n const show =\n this.bubbleMenu &&\n this.hasFocus &&\n !!this.toolbarState &&\n !this.toolbarState.selectionEmpty &&\n !this.toolbarState.imageSelected &&\n !this.toolbarState.embedSelected &&\n !panelOpen;\n this.bubbleMenuEl.open = show;\n if (show) {\n this.bubbleMenuEl.toolbarState = this.toolbarState;\n this.bubbleMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.bubbleMenuEl, 'above')\n );\n }\n\n if (this.tableMenuEl) {\n const showTable =\n this.hasFocus && !!this.toolbarState && this.toolbarState.inTable && !panelOpen;\n this.tableMenuEl.open = showTable;\n if (showTable) {\n this.tableMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.tableMenuEl, 'below')\n );\n }\n }\n\n if (this.codeMenuEl) {\n const showCode =\n this.hasFocus && !!this.toolbarState && this.toolbarState.inCodeBlock && !panelOpen;\n this.codeMenuEl.open = showCode;\n if (showCode) {\n this.codeMenuEl.language = this.toolbarState!.codeBlockLanguage ?? '';\n this.codeMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.codeMenuEl, 'above')\n );\n }\n }\n\n if (this.imageMenuEl) {\n const showImage =\n this.hasFocus && !!this.toolbarState && this.toolbarState.imageSelected && !panelOpen;\n this.imageMenuEl.open = showImage;\n if (showImage) {\n this.imageMenuEl.toolbarState = this.toolbarState;\n this.imageMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.imageMenuEl, 'above')\n );\n }\n }\n\n if (this.embedMenuEl) {\n const showEmbed =\n this.hasFocus && !!this.toolbarState && this.toolbarState.embedSelected && !panelOpen;\n this.embedMenuEl.open = showEmbed;\n if (showEmbed) {\n this.embedMenuEl.toolbarState = this.toolbarState;\n this.embedMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.embedMenuEl, 'above')\n );\n }\n }\n }\n\n // -------------------------------------------------------- special chars\n\n private openSpecialChars(): void {\n if (!this.view || !this.specialCharsEl || this.disabled || this.readonly) return;\n this.specialCharsEl.open = true;\n this.specialCharsEl.updateComplete.then(() =>\n this.positionOverlay(this.specialCharsEl, 'below')\n );\n }\n\n private closeSpecialChars(refocus = true): void {\n if (this.specialCharsEl) this.specialCharsEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private insertSpecialChar(char: string): void {\n if (!this.view) return;\n this.view.dispatch(this.view.state.tr.insertText(char).scrollIntoView());\n this.view.focus();\n }\n\n // ------------------------------------------------ templates & merge fields\n\n private openInsertMenu(mode: 'template' | 'merge'): void {\n if (!this.view || !this.insertMenuEl || this.disabled || this.readonly) return;\n this.insertMenuMode = mode;\n const menu = this.insertMenuEl;\n if (mode === 'merge') {\n menu.heading = 'Merge field';\n menu.emptyText = 'No merge fields configured.';\n menu.items = this.mergeFields.map(f => ({ label: f.label, description: `{{${f.id}}}` }));\n } else {\n menu.heading = 'Template';\n menu.emptyText = 'No templates configured.';\n menu.items = this.templates.map(t => ({ label: t.label, description: t.description }));\n }\n menu.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n menu.updateComplete.then(() => this.positionOverlay(menu, 'below'));\n }\n\n private closeInsertMenu(refocus = true): void {\n if (this.insertMenuEl) this.insertMenuEl.open = false;\n this.insertMenuMode = null;\n if (refocus) this.view?.focus();\n }\n\n private handleInsertSelect(index: number): void {\n const mode = this.insertMenuMode;\n this.closeInsertMenu();\n if (!this.view) return;\n if (mode === 'merge') {\n const field = this.mergeFields[index];\n if (field) this.execCommand('insertMergeField', { id: field.id, label: field.label });\n } else if (mode === 'template') {\n const template = this.templates[index];\n if (template) this.insertHTML(template.html);\n }\n }\n\n /** Inserts a merge-field placeholder at the selection. */\n public insertMergeField(id: string, label?: string): void {\n this.execCommand('insertMergeField', { id, label: label ?? null });\n }\n\n /** Changes the case of the selected text. */\n public changeCase(mode: 'upper' | 'lower' | 'title' | 'sentence'): void {\n this.execCommand('changeCase', { textCase: mode });\n }\n\n // ---------------------------------------------------------------- math\n\n private openMathPanel(): void {\n if (!this.view || !this.mathPanelEl || this.disabled || this.readonly) return;\n this.mathPanelEl.reset();\n this.mathPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.mathPanelEl.updateComplete.then(() => {\n const anchor = this.toolbarButton('Insert math (LaTeX)');\n if (anchor) this.positionOverlayBelowAnchor(this.mathPanelEl, anchor);\n else this.positionOverlay(this.mathPanelEl, 'below');\n this.mathPanelEl.focusInput();\n });\n }\n\n private closeMathPanel(refocus = true): void {\n if (this.mathPanelEl) this.mathPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private openMarkdownPanel(): void {\n if (!this.view || !this.markdownPanelEl || this.disabled || this.readonly) return;\n this.markdownPanelEl.reset();\n this.markdownPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.markdownPanelEl.updateComplete.then(() => {\n const anchor = this.toolbarButton('Insert from Markdown');\n if (anchor) this.positionOverlayBelowAnchor(this.markdownPanelEl, anchor);\n else this.positionOverlay(this.markdownPanelEl, 'below');\n this.markdownPanelEl.focusInput();\n });\n }\n\n private closeMarkdownPanel(refocus = true): void {\n if (this.markdownPanelEl) this.markdownPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private applyMath(latex: string, display: 'inline' | 'block'): void {\n this.closeMathPanel();\n this.execCommand('insertMath', { latex, mathDisplay: display });\n }\n\n /** Inserts a math formula (LaTeX) at the selection. */\n public insertMath(latex: string, display: 'inline' | 'block' = 'inline'): void {\n this.execCommand('insertMath', { latex, mathDisplay: display });\n }\n\n // ----------------------------------------------------------------- emoji\n\n private openEmojiPicker(): void {\n if (!this.view || !this.emojiPickerEl || this.disabled || this.readonly) return;\n this.emojiPickerEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.emojiPickerEl.updateComplete.then(() => {\n this.positionOverlay(this.emojiPickerEl, 'below');\n this.emojiPickerEl.focusInput();\n });\n }\n\n private closeEmojiPicker(refocus = true): void {\n if (this.emojiPickerEl) this.emojiPickerEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // ---------------------------------------------------------------- embeds\n\n private openEmbedPanel(): void {\n if (!this.view || !this.embedPanelEl || this.disabled || this.readonly) return;\n this.embedPanelEl.reset();\n this.embedPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.embedPanelEl.updateComplete.then(() => {\n // Anchor below the embed toolbar button when available.\n const anchor = this.toolbarButton('Embed video (YouTube, Vimeo, Loom)');\n if (anchor) this.positionOverlayBelowAnchor(this.embedPanelEl, anchor);\n else this.positionOverlay(this.embedPanelEl, 'below');\n this.embedPanelEl.focusInput();\n });\n }\n\n private closeEmbedPanel(refocus = true): void {\n if (this.embedPanelEl) this.embedPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // -------------------------------------------------------------- bookmarks\n\n private openBookmarkPanel(): void {\n if (!this.view || !this.bookmarkPanelEl || this.disabled || this.readonly) return;\n this.bookmarkPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.bookmarkPanelEl.updateComplete.then(() => {\n this.positionOverlay(this.bookmarkPanelEl, 'below');\n this.bookmarkPanelEl.focusInput();\n });\n }\n\n private closeBookmarkPanel(refocus = true): void {\n if (this.bookmarkPanelEl) this.bookmarkPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // ---------------------------------------------------------------- images\n\n private openImagePanel(): void {\n if (!this.view || !this.imagePanelEl || this.disabled || this.readonly) return;\n // Editing an already-selected image/figure pre-fills the fields (and shows\n // Remove); otherwise open a blank insert panel.\n const info = selectedImageInfo(this.view.state);\n if (info) {\n this.imagePanelEl.prefill({\n src: info.node.attrs.src,\n alt: info.node.attrs.alt ?? '',\n caption: info.isFigure ? info.node.textContent : '',\n });\n } else {\n this.imagePanelEl.reset();\n }\n this.imagePanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.imagePanelEl.updateComplete.then(() => {\n // Anchor below the image toolbar button when it's available; otherwise\n // fall back to positioning at the cursor.\n const anchor = this.toolbarButton('Insert image');\n if (anchor) this.positionOverlayBelowAnchor(this.imagePanelEl, anchor);\n else this.positionOverlay(this.imagePanelEl, 'below');\n this.imagePanelEl.focusInput();\n });\n }\n\n private closeImagePanel(refocus = true): void {\n if (this.imagePanelEl) this.imagePanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private insertImageAt(\n src: string,\n alt: string | null,\n pos: number | null,\n caption: string | null = null\n ): void {\n if (!this.view) return;\n if (pos !== null) {\n const $pos = this.view.state.doc.resolve(\n Math.min(pos, this.view.state.doc.content.size)\n );\n this.view.dispatch(this.view.state.tr.setSelection(TextSelection.near($pos)));\n }\n this.execCommand('insertImage', { src, alt, caption });\n }\n\n /**\n * Routes an image file through the upload pipeline: a cancelable\n * `nile-image-upload-request` first, then `uploadHandler` (with an\n * uploading placeholder), then the base64 fallback.\n */\n public async insertImageFile(\n file: File,\n pos: number | null = null,\n meta?: { alt?: string | null; caption?: string | null }\n ): Promise<void> {\n if (!this.view) return;\n const metaAlt = meta?.alt ?? null;\n const metaCaption = meta?.caption ?? null;\n\n const request = this.emit(\n 'nile-image-upload-request',\n {\n file,\n insert: (src: string, alt?: string) =>\n this.insertImageAt(src, alt ?? metaAlt, pos, metaCaption),\n },\n true,\n true,\n true\n );\n if (request.defaultPrevented) return;\n\n if (this.uploadHandler) {\n uploadCounter += 1;\n const id = `nile-upload-${uploadCounter}`;\n const at = pos ?? this.view.state.selection.from;\n this.view.dispatch(this.view.state.tr.setMeta(imageUploadKey, { add: { id, pos: at } }));\n try {\n const { src, alt } = await this.uploadHandler(file);\n const mappedPos = this.view ? findUploadPos(this.view.state, id) : null;\n this.view?.dispatch(this.view.state.tr.setMeta(imageUploadKey, { remove: { id } }));\n this.insertImageAt(src, metaAlt ?? alt ?? null, mappedPos, metaCaption);\n } catch (error) {\n this.view?.dispatch(this.view.state.tr.setMeta(imageUploadKey, { remove: { id } }));\n this.emit('nile-image-upload-error', { file, error });\n }\n return;\n }\n\n if (this.allowBase64Images) {\n const src = await readFileAsDataURL(file);\n this.insertImageAt(src, metaAlt, pos, metaCaption);\n }\n }\n\n // ---------------------------------------------------- mentions & slash\n\n private dismissKeyFor(\n source: 'mention' | 'slash' | 'emoji',\n match: SuggestionMatch\n ): string {\n return `${source}:${match.trigger}:${match.from}`;\n }\n\n private handleSuggestKey(\n event: KeyboardEvent,\n source: 'mention' | 'slash' | 'emoji'\n ): boolean {\n if (this.activeSuggestSource !== source || !this.suggestListEl?.open) return false;\n switch (event.key) {\n case 'ArrowDown':\n this.suggestListEl.next();\n return true;\n case 'ArrowUp':\n this.suggestListEl.prev();\n return true;\n case 'Enter':\n case 'Tab':\n return this.suggestListEl.selectCurrent();\n case 'Escape': {\n const match =\n source === 'mention'\n ? this.mentionMatch\n : source === 'slash'\n ? this.slashMatch\n : this.emojiMatch;\n if (match) this.suggestDismissed = this.dismissKeyFor(source, match);\n this.closeSuggestList();\n return true;\n }\n default:\n return false;\n }\n }\n\n private closeSuggestList(): void {\n if (this.suggestListEl) this.suggestListEl.open = false;\n this.activeSuggestSource = null;\n }\n\n private updateSuggestList(): void {\n if (!this.suggestListEl || !this.view) return;\n const mention = this.mentionMatch?.active ? this.mentionMatch : null;\n const slash =\n !this.noSlashCommands && this.slashMatch?.active ? this.slashMatch : null;\n const emoji = !this.noEmoji && this.emojiMatch?.active ? this.emojiMatch : null;\n const source: 'mention' | 'slash' | 'emoji' | null = mention\n ? 'mention'\n : slash\n ? 'slash'\n : emoji\n ? 'emoji'\n : null;\n const match = mention ?? slash ?? emoji;\n\n if (!source || !match || this.disabled || this.readonly) {\n this.closeSuggestList();\n return;\n }\n if (this.suggestDismissed === this.dismissKeyFor(source, match)) return;\n this.suggestDismissed = null;\n\n if (source === 'mention') {\n const all = this.mentions[match.trigger] ?? [];\n const query = match.query.toLowerCase();\n this.suggestListEl.items = all.filter(item =>\n item.label.toLowerCase().includes(query)\n );\n // Async override: listeners may provide items for this exact query.\n const token = `${match.trigger} ${match.query}`;\n this.mentionQueryToken = token;\n this.emit('nile-mention-query', {\n trigger: match.trigger,\n query: match.query,\n provide: (items: { key: string; label: string }[]) => {\n if (this.mentionQueryToken !== token || !Array.isArray(items)) return;\n this.suggestListEl.items = items\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n },\n });\n } else if (source === 'slash') {\n const query = match.query.toLowerCase();\n const snippetItems: SuggestItem[] = this.snippets.map(s => ({\n key: `snippet:${s.key}`,\n label: s.label,\n hint: 'snippet',\n }));\n this.suggestListEl.items = [...SLASH_ITEMS, ...snippetItems].filter(item =>\n item.label.toLowerCase().includes(query)\n );\n } else {\n const query = match.query.toLowerCase();\n this.suggestListEl.items = EMOJI.filter(e => e.name.includes(query))\n .slice(0, 12)\n .map(e => ({ key: e.name, label: `${e.char} ${e.name}` }));\n if (this.suggestListEl.items.length === 0) {\n this.closeSuggestList();\n return;\n }\n }\n\n this.activeSuggestSource = source;\n this.suggestListEl.resetActive();\n this.suggestListEl.open = true;\n this.suggestListEl.updateComplete.then(() =>\n this.positionOverlay(this.suggestListEl, 'below', match.from)\n );\n }\n\n private handleSuggestSelect(item: SuggestItem): void {\n if (!this.view) return;\n if (this.activeSuggestSource === 'mention' && this.mentionMatch?.active) {\n const match = this.mentionMatch;\n const { state } = this.view;\n const mention = state.schema.nodes.mention.create({\n trigger: match.trigger,\n key: item.key,\n label: item.label,\n });\n this.view.dispatch(\n state.tr.replaceWith(match.from, match.to, [mention, state.schema.text(' ')])\n );\n this.view.focus();\n this.emit('nile-mention-select', {\n trigger: match.trigger,\n key: item.key,\n label: item.label,\n });\n } else if (this.activeSuggestSource === 'slash' && this.slashMatch?.active) {\n const match = this.slashMatch;\n this.view.dispatch(this.view.state.tr.delete(match.from, match.to));\n this.closeSuggestList();\n if (item.key.startsWith('snippet:')) {\n const snippet = this.snippets.find(s => `snippet:${s.key}` === item.key);\n if (snippet) this.insertHTML(snippet.html);\n return;\n }\n const slashItem = SLASH_ITEMS.find(s => s.key === item.key);\n if (!slashItem) return;\n if (slashItem.command === 'openImage') this.openImagePanel();\n else if (slashItem.command === 'openEmbed') this.openEmbedPanel();\n else if (slashItem.command === 'openBookmark') this.openBookmarkPanel();\n else this.execCommand(slashItem.command, slashItem.attrs);\n } else if (this.activeSuggestSource === 'emoji' && this.emojiMatch?.active) {\n const match = this.emojiMatch;\n const emoji = EMOJI.find(e => e.name === item.key);\n if (emoji) {\n this.view.dispatch(\n this.view.state.tr.insertText(emoji.char, match.from, match.to)\n );\n this.view.focus();\n }\n }\n this.closeSuggestList();\n }\n\n // ---------------------------------------------------------- find & replace\n\n /** Opens the find & replace bar (also bound to Mod-f inside the editor). */\n public openFindBar(): void {\n if (!this.findBarEl || this.sourceMode) return;\n this.findBarEl.open = true;\n const find = this.view ? getFindState(this.view.state) : null;\n this.findBarEl.matchCount = find?.matches.length ?? 0;\n this.findBarEl.activeIndex = find?.activeIndex ?? 0;\n this.findBarEl.updateComplete.then(() => {\n // Anchor below the Find & replace toolbar button when present; otherwise\n // fall back to the CSS-pinned top-right position.\n const anchor = this.toolbarButton('Find & replace (Ctrl+F)');\n if (anchor) this.positionOverlayBelowAnchor(this.findBarEl, anchor);\n this.findBarEl.focusInput();\n });\n }\n\n public closeFindBar(): void {\n if (this.view) this.view.dispatch(clearFindTr(this.view.state));\n if (this.findBarEl) this.findBarEl.open = false;\n this.view?.focus();\n }\n\n public find(query: string): number {\n if (!this.view) return 0;\n this.view.dispatch(searchTr(this.view.state, query));\n this.scrollToActiveMatch();\n return getFindState(this.view.state).matches.length;\n }\n\n public findNext(): void {\n if (!this.view) return;\n this.view.dispatch(findStepTr(this.view.state, 'next'));\n this.scrollToActiveMatch();\n }\n\n public findPrev(): void {\n if (!this.view) return;\n this.view.dispatch(findStepTr(this.view.state, 'prev'));\n this.scrollToActiveMatch();\n }\n\n public replace(replacement: string): void {\n if (!this.view) return;\n const tr = replaceActiveTr(this.view.state, replacement);\n if (tr) this.view.dispatch(tr);\n }\n\n public replaceAll(replacement: string): void {\n if (!this.view) return;\n const tr = replaceAllTr(this.view.state, replacement);\n if (tr) this.view.dispatch(tr);\n }\n\n private scrollToActiveMatch(): void {\n if (!this.view) return;\n const find = getFindState(this.view.state);\n const match = find.matches[find.activeIndex];\n if (!match) return;\n this.view.dispatch(\n this.view.state.tr\n .setSelection(TextSelection.create(this.view.state.doc, match.from, match.to))\n .scrollIntoView()\n );\n }\n\n // -------------------------------------------------------------- source view\n\n /** Toggles raw-HTML source editing. Content re-sanitizes on the way back. */\n public toggleSourceView(): void {\n if (this.sourceMode) {\n this.applySourceView(this.sourceViewEl?.currentValue ?? null);\n } else {\n this.sourceMode = true;\n this.updateComplete.then(() => {\n if (this.sourceViewEl) {\n this.sourceViewEl.value = this.getHTML();\n this.sourceViewEl.focusInput();\n }\n });\n }\n }\n\n private applySourceView(htmlContent: string | null): void {\n this.sourceMode = false;\n if (htmlContent !== null) this.setContent(htmlContent, true);\n this.updateComplete.then(() => this.view?.focus());\n }\n\n /** Word and character counts for the current document. */\n public getWordCount(): { words: number; characters: number } {\n return this.view ? countWords(this.view.state.doc) : { words: 0, characters: 0 };\n }\n\n /**\n * Arms the format painter (copies the formatting at the selection) or, if\n * already armed, disarms it. Once armed, the next non-empty selection the\n * user makes receives the copied formatting.\n */\n public toggleFormatPainter(): void {\n if (!this.view) return;\n const tr = isFormatPainterArmed(this.view.state)\n ? disarmFormatPainter(this.view.state)\n : armFormatPainter(this.view.state);\n if (tr) this.view.dispatch(tr);\n this.view.focus();\n }\n\n // ---------------------------------------------------------- export & import\n\n /** The live, styled content element used as the source for exports. */\n private get contentRoot(): HTMLElement | null {\n return (this.view?.dom as HTMLElement | undefined) ?? null;\n }\n\n /** Sanitizes `this.name` (or a fallback) into a safe download basename. */\n private exportFilename(extension: string): string {\n const base =\n (this.name || 'document').replace(/[^\\w.-]+/g, '-').replace(/^-+|-+$/g, '') || 'document';\n return `${base}.${extension}`;\n }\n\n private downloadBlob(content: string, mime: string, filename: string): void {\n const blob = new Blob([content], { type: mime });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = filename;\n anchor.style.display = 'none';\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n // Revoke after the click so the download has a chance to start.\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n\n /**\n * The document as HTML with every style folded into inline `style`\n * attributes — the form email clients (which strip `<style>` blocks and\n * classes) can render. Returns the string; does not download.\n */\n public getInlineStyledHTML(): string {\n const root = this.contentRoot;\n if (!this.view || !root || isDocEmpty(this.view.state.doc)) return '';\n return toInlineStyledHtml(root);\n }\n\n /** Downloads the document as an inline-styled, email-ready `.html` file. */\n public exportInlineHtml(filename?: string): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const doc = `<!DOCTYPE html>\\n<html><head><meta charset=\"utf-8\"></head><body>${body}</body></html>`;\n this.downloadBlob(doc, 'text/html;charset=utf-8', filename ?? this.exportFilename('html'));\n }\n\n /** Downloads the document as a Word-openable `.doc` file. */\n public exportToWord(filename?: string): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const doc = buildWordDocument(body, this.name || 'Document');\n this.downloadBlob(doc, 'application/msword', filename ?? this.exportFilename('doc'));\n }\n\n /**\n * Opens the browser print dialog with a self-contained, print-tuned copy of\n * the document (\"Save as PDF\"). Honours page breaks, embedded images and the\n * base font; optional running header/footer text.\n */\n public exportToPdf(\n options: { header?: string; footer?: string; fontFamily?: string } = {}\n ): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const source = buildPrintDocument(body, { title: this.name || 'Document', ...options });\n\n const frame = document.createElement('iframe');\n frame.setAttribute('aria-hidden', 'true');\n Object.assign(frame.style, {\n position: 'fixed',\n right: '0',\n bottom: '0',\n width: '0',\n height: '0',\n border: '0',\n });\n document.body.appendChild(frame);\n\n const cleanup = (): void => {\n // Delay removal so the browser's print job keeps its document alive.\n setTimeout(() => frame.remove(), 1000);\n };\n\n frame.onload = (): void => {\n const win = frame.contentWindow;\n if (!win) {\n cleanup();\n return;\n }\n win.focus();\n win.addEventListener('afterprint', cleanup, { once: true });\n win.print();\n };\n\n const fdoc = frame.contentDocument;\n if (!fdoc) {\n frame.remove();\n return;\n }\n fdoc.open();\n fdoc.write(source);\n fdoc.close();\n }\n\n /**\n * Imports Word / Google-Docs HTML: normalizes the proprietary markup to\n * clean semantic HTML, then replaces the document. Fidelity note: comments\n * and track-changes are not preserved — the editor has no model for them,\n * and binary `.docx`/`.doc` files are not parsed (export as \"Web Page\" /\n * HTML first, or paste directly, which is handled automatically).\n */\n public importFromWord(html: string, emitChange = true): void {\n if (!html) return;\n const cleaned = isOfficeHtml(html) ? cleanOfficeHtml(html) : html;\n this.setContent(cleaned, emitChange);\n }\n\n /** Opens a file picker for an HTML export and imports it (toolbar action). */\n private importFromWordFile(): void {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.htm,.html,text/html';\n input.style.display = 'none';\n input.addEventListener('change', () => {\n const file = input.files?.[0];\n input.remove();\n if (!file) return;\n file.text().then(text => this.importFromWord(text));\n });\n document.body.appendChild(input);\n input.click();\n }\n\n // -------------------------------------------------------- shortcut help\n\n /** Opens the keyboard shortcut reference (also bound to Mod-/). */\n public openShortcutHelp(): void {\n if (!this.shortcutHelpEl) return;\n this.shortcutHelpEl.open = true;\n this.shortcutHelpEl.focusPanel();\n }\n\n public closeShortcutHelp(): void {\n if (this.shortcutHelpEl) this.shortcutHelpEl.open = false;\n this.view?.focus();\n }\n\n // ------------------------------------------------------------ fullscreen\n\n /** Toggles distraction-free fullscreen mode. Esc exits. */\n public toggleFullscreen(): void {\n this.fullscreen = !this.fullscreen;\n this.view?.focus();\n }\n\n private openLinkEditor(): void {\n if (!this.view || !this.linkEditorEl || this.disabled || this.readonly) return;\n const ts = this.toolbarState ?? computeToolbarState(this.view.state);\n this.linkEditorEl.href = ts.linkHref ?? '';\n this.linkEditorEl.text = '';\n this.linkEditorEl.allowText = ts.selectionEmpty && !ts.linkActive;\n this.linkEditorEl.canRemove = ts.linkActive;\n this.linkEditorEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n this.linkEditorEl.updateComplete.then(() => {\n this.positionOverlay(this.linkEditorEl, 'below');\n this.linkEditorEl.focusInput();\n });\n }\n\n private closeLinkEditor(refocus = true): void {\n if (this.linkEditorEl) this.linkEditorEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private applyLink(href: string, text: string): void {\n if (!this.view) return;\n const { state } = this.view;\n const linkType = state.schema.marks.link;\n if (state.selection.empty && !getMarkRange(state.selection.$from, linkType)) {\n const label = text || href;\n const node = state.schema.text(label, [linkType.create({ href })]);\n this.view.dispatch(state.tr.replaceSelectionWith(node, false).scrollIntoView());\n } else {\n this.execCommand('link', { href });\n }\n this.closeLinkEditor();\n }\n\n // ---------------------------------------------------------------- public\n\n /** The underlying ProseMirror EditorView. Advanced escape hatch. */\n public get pmView(): EditorView | undefined {\n return this.view;\n }\n\n /** Document as ProseMirror JSON. */\n public get json(): Record<string, unknown> | null {\n return this.view ? docToJson(this.view.state.doc) : null;\n }\n\n public set json(value: Record<string, unknown> | null) {\n if (value) this.setContent(value);\n }\n\n public override focus(): void {\n this.view?.focus();\n }\n\n public override blur(): void {\n (this.view?.dom as HTMLElement | undefined)?.blur();\n }\n\n public getHTML(): string {\n return this.view && !isDocEmpty(this.view.state.doc)\n ? docToHtml(this.view.state.doc)\n : '';\n }\n\n public getJSON(): Record<string, unknown> | null {\n return this.json;\n }\n\n public getText(): string {\n return this.view ? docToText(this.view.state.doc) : '';\n }\n\n /**\n * Document as Markdown. Best-effort: structural nodes and Markdown-native\n * marks are converted; color/font marks are dropped to plain text. Use\n * getHTML() when a loss-free representation is required.\n */\n public getMarkdown(): string {\n return this.view && !isDocEmpty(this.view.state.doc)\n ? docToMarkdown(this.view.state.doc)\n : '';\n }\n\n /**\n * Replaces the document with parsed Markdown. Covers the same subset as\n * getMarkdown(): headings, lists, code fences, tables, quotes and the\n * inline marks. The parsed HTML flows through the schema and sanitizer.\n */\n public setMarkdown(markdown: string, emitChange = false): void {\n this.setContent(markdownToHtml(markdown), emitChange);\n }\n\n /** Parses and inserts Markdown at the current selection. */\n public insertMarkdown(markdown: string): void {\n this.insertHTML(markdownToHtml(markdown));\n }\n\n /** Replaces the document. Accepts an HTML string or ProseMirror JSON. */\n public setContent(content: string | Record<string, unknown>, emitChange = false): void {\n if (!this.view) {\n if (typeof content === 'string') this.value = content;\n return;\n }\n let doc =\n typeof content === 'string'\n ? htmlToDoc(defaultSchema, content, this.sanitize)\n : jsonToDoc(defaultSchema, content);\n if (this.singleLine) doc = flattenToSingleParagraph(doc);\n this.view.updateState(this.buildState(doc));\n this.toolbarState = this.snapshotToolbar(this.view.state);\n this.syncingValue = true;\n this.value = isDocEmpty(doc) ? '' : docToHtml(doc);\n this.syncFormValue(doc);\n if (emitChange) {\n this.emit('nile-input', this.buildChangeDetail(doc));\n this.emit('nile-change', this.buildChangeDetail(doc));\n }\n }\n\n public clear(): void {\n this.setContent('');\n }\n\n /** Parses and inserts HTML at the current selection. */\n public insertHTML(htmlContent: string): void {\n if (!this.view) return;\n const slice = htmlToSlice(defaultSchema, htmlContent, this.sanitize);\n this.view.dispatch(this.view.state.tr.replaceSelection(slice).scrollIntoView());\n this.view.focus();\n }\n\n /** Runs a named editor command. Returns whether the command applied. */\n public execCommand(name: string, attrs?: CommandAttrs): boolean {\n if (!this.view) return false;\n const command = getCommand(this.view.state, name as CommandName, attrs);\n if (!command) return false;\n const applied = command(this.view.state, this.view.dispatch, this.view);\n this.view.focus();\n return applied;\n }\n\n /** True when the given mark/block command is active at the selection. */\n public isCommandActive(name: string): boolean {\n const ts = this.toolbarState;\n if (!ts) return false;\n switch (name) {\n case 'bold':\n return ts.bold;\n case 'italic':\n return ts.italic;\n case 'underline':\n return ts.underline;\n case 'strike':\n return ts.strike;\n case 'code':\n return ts.code;\n case 'link':\n return ts.linkActive;\n case 'bulletList':\n return ts.inBulletList;\n case 'orderedList':\n return ts.inOrderedList;\n case 'blockquote':\n return ts.inBlockquote;\n default:\n return false;\n }\n }\n\n // ---------------------------------------------------------------- render\n\n private handleCommand(event: CustomEvent<WysiwygCommandDetail>): void {\n event.stopPropagation();\n const { name, attrs } = event.detail;\n if (name === 'openLink') {\n this.openLinkEditor();\n return;\n }\n if (name === 'openImage') {\n this.openImagePanel();\n return;\n }\n if (name === 'openEmbed') {\n this.openEmbedPanel();\n return;\n }\n if (name === 'openBookmark') {\n this.openBookmarkPanel();\n return;\n }\n if (name === 'toggleShowBlocks') {\n this.showBlocks = !this.showBlocks;\n this.view?.focus();\n return;\n }\n if (name === 'toggleSource') {\n this.toggleSourceView();\n return;\n }\n if (name === 'togglePastePlainText') {\n this.pasteAsPlainText = !this.pasteAsPlainText;\n this.view?.focus();\n return;\n }\n if (name === 'toggleFullscreen') {\n this.toggleFullscreen();\n return;\n }\n if (name === 'openShortcutHelp') {\n this.openShortcutHelp();\n return;\n }\n if (name === 'openSpecialChars') {\n this.openSpecialChars();\n return;\n }\n if (name === 'openEmoji') {\n this.openEmojiPicker();\n return;\n }\n if (name === 'openFind') {\n this.openFindBar();\n return;\n }\n if (name === 'exportPdf') {\n this.exportToPdf();\n return;\n }\n if (name === 'exportWord') {\n this.exportToWord();\n return;\n }\n if (name === 'exportInlineHtml') {\n this.exportInlineHtml();\n return;\n }\n if (name === 'importWord') {\n this.importFromWordFile();\n return;\n }\n if (name === 'toggleFormatPainter') {\n this.toggleFormatPainter();\n return;\n }\n if (name === 'openMergeField') {\n this.openInsertMenu('merge');\n return;\n }\n if (name === 'openTemplate') {\n this.openInsertMenu('template');\n return;\n }\n if (name === 'openMarkdown') {\n this.openMarkdownPanel();\n return;\n }\n if (name === 'openMath') {\n this.openMathPanel();\n return;\n }\n this.execCommand(name, attrs);\n }\n\n private handleBaseKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n // The special-chars panel never takes focus, so its Esc lands here.\n if (this.specialCharsEl?.open) {\n this.closeSpecialChars();\n return;\n }\n // Esc exits fullscreen — but only when nothing else claimed it (panels\n // stopPropagation, ProseMirror handlers preventDefault).\n if (!this.fullscreen) return;\n const panelOpen =\n this.linkEditorEl?.open ||\n this.imagePanelEl?.open ||\n this.embedPanelEl?.open ||\n this.bookmarkPanelEl?.open ||\n this.emojiPickerEl?.open ||\n this.findBarEl?.open ||\n this.shortcutHelpEl?.open ||\n this.suggestListEl?.open;\n if (!panelOpen) this.fullscreen = false;\n }\n\n private handleChromeFocusOut(event: FocusEvent): void {\n // Focus left the widget entirely (e.g. clicked the page) while it was\n // parked on chrome like the language picker: close the overlays.\n const related = event.relatedTarget as Node | null;\n if (related && (this.shadowRoot?.contains(related) || this.contains(related))) return;\n if (this.view?.hasFocus()) return;\n this.hasFocus = false;\n this.updateOverlays();\n }\n\n /** The floating insert panels that should dismiss on outside interaction. */\n private get floatingPanels(): Array<{ open: boolean } | undefined> {\n return [\n this.linkEditorEl,\n this.imagePanelEl,\n this.embedPanelEl,\n this.bookmarkPanelEl,\n this.specialCharsEl,\n this.emojiPickerEl,\n this.insertMenuEl,\n this.mathPanelEl,\n this.markdownPanelEl,\n ];\n }\n\n /** Closes every open insert panel. `refocus` returns focus to the editor. */\n private closeAllPanels(refocus = true): void {\n if (this.linkEditorEl?.open) this.closeLinkEditor(refocus);\n if (this.imagePanelEl?.open) this.closeImagePanel(refocus);\n if (this.embedPanelEl?.open) this.closeEmbedPanel(refocus);\n if (this.bookmarkPanelEl?.open) this.closeBookmarkPanel(refocus);\n if (this.specialCharsEl?.open) this.closeSpecialChars(refocus);\n if (this.emojiPickerEl?.open) this.closeEmojiPicker(refocus);\n if (this.insertMenuEl?.open) this.closeInsertMenu(refocus);\n if (this.mathPanelEl?.open) this.closeMathPanel(refocus);\n if (this.markdownPanelEl?.open) this.closeMarkdownPanel(refocus);\n }\n\n /**\n * Closes any open insert panel when the pointer goes down outside of it —\n * whether elsewhere in the editor (e.g. the content area) or off the widget.\n */\n private onOutsidePointerDown = (event: Event): void => {\n const openPanels = this.floatingPanels.filter(\n (p): p is HTMLElement & { open: boolean } => !!p && (p as { open: boolean }).open\n );\n if (!openPanels.length) return;\n const path = event.composedPath();\n // Click landed inside an open panel — leave it be.\n if (openPanels.some(panel => path.includes(panel))) return;\n // Refocus the editor only when the click stayed within the widget.\n const insideWidget =\n path.includes(this) || (!!this.shadowRoot && path.includes(this.shadowRoot));\n this.closeAllPanels(insideWidget);\n };\n\n public render(): TemplateResult {\n const hasAuthoredToolbar = (this.authoredToolbar?.length ?? 0) > 0;\n // Keep the toolbar mounted in source mode too, so the main menu stays put\n // above the split source/preview view instead of being replaced by it. It\n // is disabled there — formatting commands would target the hidden rich-text\n // view — and the source view's own Cancel/Done bar handles exiting.\n const showToolbar =\n (this.toolbar !== 'none' || hasAuthoredToolbar) && !this.readonly;\n return html`\n <div\n class=\"nile-wysiwyg ${this.showBlocks ? 'nile-wysiwyg--show-blocks' : ''}\"\n part=\"base\"\n @wysiwyg-command=${this.handleCommand}\n @focusout=${this.handleChromeFocusOut}\n @keydown=${this.handleBaseKeydown}\n >\n ${showToolbar\n ? html`\n <nile-wysiwyg-toolbar\n part=\"toolbar\"\n exportparts=\"button, select, color, overflow, overflow-panel\"\n config=${this.toolbar}\n .items=${this.authoredToolbar}\n ?disabled=${this.disabled || this.sourceMode}\n .toolbarState=${this.toolbarState}\n ></nile-wysiwyg-toolbar>\n `\n : nothing}\n ${this.sourceMode\n ? html`\n <nile-wysiwyg-source-view\n @wysiwyg-source-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applySourceView(e.detail.html);\n }}\n @wysiwyg-source-cancel=${(e: Event) => {\n e.stopPropagation();\n this.applySourceView(null);\n }}\n ></nile-wysiwyg-source-view>\n `\n : nothing}\n <div\n class=\"nile-wysiwyg__surface\"\n part=\"surface\"\n style=${this.sourceMode ? 'display: none' : ''}\n ></div>\n ${(this.maxLength > 0 || this.showCounter) && !this.sourceMode\n ? html`\n <div\n class=\"nile-wysiwyg__counter ${this.maxLength > 0 &&\n this.counter.characters >= this.maxLength\n ? 'over'\n : ''}\"\n part=\"counter\"\n >\n ${this.maxLength > 0\n ? `${this.counter.characters} / ${this.maxLength}`\n : `${this.counter.words} words · ${this.counter.characters} characters`}\n </div>\n `\n : nothing}\n <nile-wysiwyg-shortcut-help\n @wysiwyg-shortcut-help-close=${(e: Event) => {\n e.stopPropagation();\n this.closeShortcutHelp();\n }}\n ></nile-wysiwyg-shortcut-help>\n <nile-wysiwyg-bubble-menu .items=${this.authoredBubble}></nile-wysiwyg-bubble-menu>\n <nile-wysiwyg-table-menu></nile-wysiwyg-table-menu>\n <nile-wysiwyg-code-menu></nile-wysiwyg-code-menu>\n <nile-wysiwyg-image-menu></nile-wysiwyg-image-menu>\n <nile-wysiwyg-embed-menu></nile-wysiwyg-embed-menu>\n <nile-wysiwyg-special-chars\n @wysiwyg-char-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.insertSpecialChar(e.detail.char);\n }}\n @wysiwyg-char-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeSpecialChars();\n }}\n ></nile-wysiwyg-special-chars>\n <nile-wysiwyg-emoji-picker\n @wysiwyg-emoji-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeEmojiPicker();\n this.insertSpecialChar(e.detail.char);\n }}\n @wysiwyg-emoji-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeEmojiPicker();\n }}\n ></nile-wysiwyg-emoji-picker>\n <nile-wysiwyg-insert-menu\n @wysiwyg-insert-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.handleInsertSelect(e.detail.index);\n }}\n @wysiwyg-insert-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeInsertMenu();\n }}\n ></nile-wysiwyg-insert-menu>\n <nile-wysiwyg-math-panel\n @wysiwyg-math-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applyMath(e.detail.latex, e.detail.display);\n }}\n @wysiwyg-math-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeMathPanel();\n }}\n ></nile-wysiwyg-math-panel>\n <nile-wysiwyg-markdown-panel\n @wysiwyg-markdown-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeMarkdownPanel();\n this.insertMarkdown(e.detail.markdown);\n }}\n @wysiwyg-markdown-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeMarkdownPanel();\n }}\n ></nile-wysiwyg-markdown-panel>\n <nile-wysiwyg-embed-panel\n @wysiwyg-embed-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeEmbedPanel();\n this.execCommand('insertEmbed', {\n src: e.detail.src,\n provider: e.detail.provider,\n });\n }}\n @wysiwyg-embed-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeEmbedPanel();\n }}\n ></nile-wysiwyg-embed-panel>\n <nile-wysiwyg-bookmark-panel\n @wysiwyg-bookmark-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeBookmarkPanel();\n this.execCommand('insertBookmark', { id: e.detail.id });\n }}\n @wysiwyg-bookmark-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeBookmarkPanel();\n }}\n ></nile-wysiwyg-bookmark-panel>\n <nile-wysiwyg-suggest-list\n @wysiwyg-suggest-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.handleSuggestSelect(e.detail.item);\n }}\n ></nile-wysiwyg-suggest-list>\n <nile-wysiwyg-find-bar\n @wysiwyg-find=${(e: CustomEvent) => {\n e.stopPropagation();\n this.find(e.detail.query);\n }}\n @wysiwyg-find-step=${(e: CustomEvent) => {\n e.stopPropagation();\n if (e.detail.direction === 'prev') this.findPrev();\n else this.findNext();\n }}\n @wysiwyg-replace=${(e: CustomEvent) => {\n e.stopPropagation();\n this.replace(e.detail.value);\n }}\n @wysiwyg-replace-all=${(e: CustomEvent) => {\n e.stopPropagation();\n this.replaceAll(e.detail.value);\n }}\n @wysiwyg-find-close=${(e: Event) => {\n e.stopPropagation();\n this.closeFindBar();\n }}\n ></nile-wysiwyg-find-bar>\n <nile-wysiwyg-image-panel\n ?upload-from-computer=${this.uploadFromComputer}\n .maxFileSize=${this.imageMaxFileSize}\n @wysiwyg-image-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n const editing = this.imagePanelEl?.editing;\n this.closeImagePanel();\n this.execCommand(editing ? 'updateImage' : 'insertImage', {\n src: e.detail.src,\n alt: e.detail.alt || null,\n caption: e.detail.caption || null,\n });\n }}\n @wysiwyg-image-file=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeImagePanel();\n this.insertImageFile(e.detail.file, null, {\n alt: e.detail.alt || null,\n caption: e.detail.caption || null,\n });\n }}\n @wysiwyg-image-remove=${(e: Event) => {\n e.stopPropagation();\n this.closeImagePanel();\n this.execCommand('deleteImage');\n }}\n @wysiwyg-image-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeImagePanel();\n }}\n ></nile-wysiwyg-image-panel>\n <nile-wysiwyg-link-editor\n @wysiwyg-link-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applyLink(e.detail.href, e.detail.text);\n }}\n @wysiwyg-link-remove=${(e: Event) => {\n e.stopPropagation();\n this.execCommand('unlink');\n this.closeLinkEditor();\n }}\n @wysiwyg-link-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeLinkEditor();\n }}\n ></nile-wysiwyg-link-editor>\n </div>\n `;\n }\n}\n\nexport default NileWysiwygEditor;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-editor': NileWysiwygEditor;\n }\n}\n"],"names":["SLASH_ITEMS","key","label","hint","command","attrs","level","rows","cols","uploadCounter","NileWysiwygEditor","ni","super","this","value","placeholder","disabled","readonly","toolbar","DEFAULT_TOOLBAR","bubbleMenu","sanitize","singleLine","name","required","allowBase64Images","uploadFromComputer","imageMaxFileSize","mentions","noSlashCommands","noEmoji","maxLength","showCounter","stickyToolbar","snippets","mergeFields","templates","autosaveInterval","pasteAsPlainText","noMarkdownPaste","noTextTransform","fullscreen","showBlocks","hasFocus","sourceMode","counter","words","characters","insertMenuMode","mentionMatch","slashMatch","emojiMatch","activeSuggestSource","suggestDismissed","mentionQueryToken","lastAutosaveValue","defaultValue","syncingValue","pendingChange","previousBodyOverflow","painterDragActive","onPainterPointerDown","view","isFormatPainterArmed","state","onPainterPointerUp","requestAnimationFrame","selection","empty","applyTr","applyFormatPainter","dispatch","onOutsidePointerDown","event","openPanels","floatingPanels","filter","p","open","length","path","composedPath","some","panel","includes","insideWidget","shadowRoot","closeAllPanels","attachInternals","internals","_this","_inherits","_j","_createClass","connectedCallback","hasUpdated","updateComplete","then","mountView","document","addEventListener","syncAuthoredToolbar","syncAuthoredBubble","toolbarObserver","MutationObserver","observe","childList","subtree","attributes","attributeFilter","disconnectedCallback","removeEventListener","disconnect","changeTimer","clearTimeout","autosaveTimer","clearInterval","body","style","overflow","_this$view","destroy","undefined","firstUpdated","nodes","querySelectorAll","next","Array","from","map","el","hasAttribute","getAttribute","icon","item","JSON","stringify","authoredToolbar","authoredBubble","updated","changed","has","docToHtml","doc","setContent","setProps","tr","updateValidity","restartAutosave","toolbarState","snapshotToolbar","updateState","buildState","setInterval","emit","buildChangeDetail","createEditorState","schema","defaultSchema","getPlaceholder","onLinkShortcut","openLinkEditor","onFindShortcut","openFindBar","onShortcutHelp","openShortcutHelp","onImageFiles","files","pos","_iterator","s","_step","n","done","file","insertImageFile","err","e","f","getTriggers","Object","keys","onChange","match","updateSuggestList","onKeyDown","handleSuggestKey","slashCommands","emoji","getMaxLength","getForcePlainText","getMarkdownPaste","getSanitize","textTransform","_objectSpread","computeToolbarState","formatPainter","_this5","surfaceEl","htmlToDoc","flattenToSingleParagraph","EditorView","dispatchTransaction","handleTransaction","editable","transformPastedHTML","pasted","cleaned","isOfficeHtml","cleanOfficeHtml","sanitizeHtml","handleDOMEvents","mousedown","closeSpecialChars","closeInsertMenu","focus","updateOverlays","blur","_view","related","relatedTarget","contains","flushChange","closeSuggestList","role","nodeViews","task_item","node","getPos","TaskItemView","image","ImageView","figure","FigureView","embed","EmbedView","styleBlock","StyleBlockView","math","MathView","mathRenderer","dom","countWords","syncFormValue","_this$findBarEl","newState","apply","selectionSet","findBarEl","find","getFindState","matchCount","matches","activeIndex","docChanged","detail","scheduleChange","isDocEmpty","json","docToJson","content","setTimeout","setFormValue","_this$surfaceEl","setValidity","valueMissing","formResetCallback","formDisabledCallback","checkValidity","reportValidity","positionOverlay","placement","baseEl","coords","coordsAtPos","baseRect","getBoundingClientRect","left","Math","max","min","width","offsetWidth","top","offsetHeight","bottom","positionOverlayBelowAnchor","anchor","anchorRect","right","toolbarButton","_this$toolbarEl$shado","_this$toolbarEl","toolbarEl","querySelector","bubbleMenuEl","panelOpen","linkEditorEl","imagePanelEl","embedPanelEl","bookmarkPanelEl","emojiPickerEl","show","selectionEmpty","imageSelected","embedSelected","tableMenuEl","showTable","inTable","codeMenuEl","_this$toolbarState$co","showCode","inCodeBlock","language","codeBlockLanguage","imageMenuEl","showImage","embedMenuEl","showEmbed","openSpecialChars","specialCharsEl","refocus","insertSpecialChar","char","insertText","scrollIntoView","openInsertMenu","mode","insertMenuEl","menu","heading","emptyText","items","description","id","t","handleInsertSelect","index","field","execCommand","template","insertHTML","html","insertMergeField","changeCase","textCase","openMathPanel","mathPanelEl","reset","focusInput","closeMathPanel","openMarkdownPanel","markdownPanelEl","closeMarkdownPanel","applyMath","latex","display","mathDisplay","insertMath","arguments","openEmojiPicker","closeEmojiPicker","_this$view6","openEmbedPanel","closeEmbedPanel","openBookmarkPanel","closeBookmarkPanel","openImagePanel","info","selectedImageInfo","prefill","src","alt","caption","isFigure","textContent","closeImagePanel","insertImageAt","$pos","resolve","size","setSelection","TextSelection","near","_insertImageFile","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_args","meta","_context2","abrupt","metaAlt","_n$alt","metaCaption","insert","defaultPrevented","uploadHandler","concat","at","setMeta","imageUploadKey","add","prev","mappedPos","findUploadPos","remove","t0","error","Promise","reject","reader","FileReader","onload","result","onerror","readAsDataURL","readFileAsDataURL","stop","dismissKeyFor","source","trigger","suggestListEl","selectCurrent","mention","active","slash","_this$mentions$t$trig","all","query","toLowerCase","token","provide","isArray","i","snippetItems","EMOJI","slice","resetActive","handleSuggestSelect","_this$mentionMatch2","_this$slashMatch2","_this$emojiMatch2","create","replaceWith","to","text","delete","startsWith","snippet","slashItem","_i$matches$length","_i$activeIndex","_this18","closeFindBar","clearFindTr","searchTr","scrollToActiveMatch","findNext","findStepTr","findPrev","replace","replacement","replaceActiveTr","replaceAll","replaceAllTr","toggleSourceView","applySourceView","sourceViewEl","currentValue","_this$sourceViewEl$cu","getHTML","htmlContent","_this20$view","getWordCount","toggleFormatPainter","disarmFormatPainter","armFormatPainter","get","contentRoot","_this$view$dom","_this$view13","exportFilename","extension","downloadBlob","mime","filename","blob","Blob","type","url","URL","createObjectURL","createElement","href","download","appendChild","click","revokeObjectURL","getInlineStyledHTML","root","toInlineStyledHtml","exportInlineHtml","exportToWord","buildWordDocument","exportToPdf","options","buildPrintDocument","title","frame","setAttribute","assign","position","height","border","cleanup","win","contentWindow","once","print","fdoc","contentDocument","write","close","importFromWord","emitChange","importFromWordFile","input","accept","_i$files","shortcutHelpEl","focusPanel","closeShortcutHelp","_this$view14","toggleFullscreen","ts","linkHref","allowText","linkActive","canRemove","closeLinkEditor","applyLink","linkType","marks","link","getMarkRange","$from","replaceSelectionWith","set","getJSON","getText","docToText","getMarkdown","docToMarkdown","setMarkdown","markdown","markdownToHtml","insertMarkdown","jsonToDoc","clear","htmlToSlice","replaceSelection","getCommand","applied","isCommandActive","bold","italic","underline","strike","code","inBulletList","inOrderedList","inBlockquote","handleCommand","stopPropagation","_i$detail","_this$view19","_this$view20","handleBaseKeydown","_this$specialCharsEl","_this$linkEditorEl2","_this$imagePanelEl2","_this$embedPanelEl2","_this$bookmarkPanelEl2","_this$emojiPickerEl2","_this$findBarEl2","_this$shortcutHelpEl","_this$suggestListEl2","handleChromeFocusOut","_this$shadowRoot","_this$view21","_this$linkEditorEl3","_this$imagePanelEl3","_this$embedPanelEl3","_this$bookmarkPanelEl3","_this$specialCharsEl2","_this$emojiPickerEl3","_this$insertMenuEl","_this$mathPanelEl","_this$markdownPanelEl","render","_this$authoredToolbar","_this$authoredToolbar2","_this23","hasAuthoredToolbar","showToolbar","_templateObject","_taggedTemplateLiteral","_templateObject2","nothing","_templateObject3","_templateObject4","provider","direction","editing","styles","NileElement","formAssociated","__decorate","property","String","prototype","Boolean","reflect","attribute","Number","converter","fromAttribute","parsed","parse","out","_i9","_Object$keys","_unused","toAttribute","_unused2","_unused3","_unused4","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nile-wysiwyg-editor.cjs.js","sources":["../../../src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts"],"sourcesContent":["import { html, TemplateResult, CSSResultArray, PropertyValues, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { EditorView } from 'prosemirror-view';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { Node as PMNode } from 'prosemirror-model';\n\nimport NileElement from '../internal/nile-element';\nimport { styles } from './nile-wysiwyg-editor.css';\nimport {\n defaultSchema,\n createEditorState,\n computeToolbarState,\n htmlToDoc,\n htmlToSlice,\n docToHtml,\n docToText,\n docToMarkdown,\n markdownToHtml,\n docToJson,\n jsonToDoc,\n isDocEmpty,\n sanitizeHtml,\n getCommand,\n getMarkRange,\n flattenToSingleParagraph,\n imageUploadKey,\n findUploadPos,\n countWords,\n TaskItemView,\n ImageView,\n FigureView,\n EmbedView,\n StyleBlockView,\n MathView,\n isOfficeHtml,\n cleanOfficeHtml,\n toInlineStyledHtml,\n buildWordDocument,\n buildPrintDocument,\n isFormatPainterArmed,\n armFormatPainter,\n disarmFormatPainter,\n applyFormatPainter,\n getFindState,\n searchTr,\n findStepTr,\n clearFindTr,\n replaceActiveTr,\n replaceAllTr,\n} from './engine';\nimport type { ToolbarState } from './engine/selection-state';\nimport type { CommandAttrs, CommandName } from './engine/commands';\nimport { selectedImageInfo } from './engine/commands';\nimport type { MathRenderer } from './engine/plugins/math-view';\nimport type { SuggestionMatch } from './engine/plugins/suggestions';\nimport type {\n WysiwygChangeDetail,\n WysiwygCommandDetail,\n MentionsConfig,\n SnippetConfig,\n MergeFieldConfig,\n TemplateConfig,\n} from './types';\nimport { DEFAULT_TOOLBAR } from './types';\nimport { EMOJI } from './emoji';\n\nimport './nile-wysiwyg-toolbar/nile-wysiwyg-toolbar';\nimport './nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item';\nimport type { AuthoredToolbarItem } from './nile-wysiwyg-toolbar/nile-wysiwyg-toolbar';\nimport './ui/link-editor';\nimport './ui/bubble-menu';\nimport './ui/bubble-item';\nimport './ui/image-panel';\nimport './ui/table-menu';\nimport './ui/suggest-list';\nimport './ui/find-replace';\nimport './ui/source-view';\nimport './ui/embed-panel';\nimport './ui/bookmark-panel';\nimport './ui/code-block-menu';\nimport './ui/shortcut-help';\nimport './ui/image-menu';\nimport './ui/embed-menu';\nimport './ui/special-chars';\nimport './ui/emoji-picker';\nimport './ui/insert-menu';\nimport './ui/math-panel';\nimport './ui/markdown-panel';\nimport type { NileWysiwygLinkEditor } from './ui/link-editor';\nimport type { NileWysiwygBubbleMenu } from './ui/bubble-menu';\nimport type { NileWysiwygImagePanel } from './ui/image-panel';\nimport type { NileWysiwygTableMenu } from './ui/table-menu';\nimport type { NileWysiwygSuggestList, SuggestItem } from './ui/suggest-list';\nimport type { NileWysiwygFindBar } from './ui/find-replace';\nimport type { NileWysiwygSourceView } from './ui/source-view';\nimport type { NileWysiwygEmbedPanel } from './ui/embed-panel';\nimport type { NileWysiwygBookmarkPanel } from './ui/bookmark-panel';\nimport type { NileWysiwygCodeMenu } from './ui/code-block-menu';\nimport type { NileWysiwygShortcutHelp } from './ui/shortcut-help';\nimport type { NileWysiwygImageMenu } from './ui/image-menu';\nimport type { NileWysiwygEmbedMenu } from './ui/embed-menu';\nimport type { NileWysiwygSpecialChars } from './ui/special-chars';\nimport type { NileWysiwygEmojiPicker } from './ui/emoji-picker';\nimport type { NileWysiwygInsertMenu } from './ui/insert-menu';\nimport type { NileWysiwygMathPanel } from './ui/math-panel';\nimport type { NileWysiwygMarkdownPanel } from './ui/markdown-panel';\n\ninterface SlashItem extends SuggestItem {\n command: CommandName | 'openImage' | 'openEmbed' | 'openBookmark';\n attrs?: CommandAttrs;\n}\n\nconst SLASH_ITEMS: SlashItem[] = [\n { key: 'heading1', label: 'Heading 1', hint: '#', command: 'heading', attrs: { level: 1 } },\n { key: 'heading2', label: 'Heading 2', hint: '##', command: 'heading', attrs: { level: 2 } },\n { key: 'heading3', label: 'Heading 3', hint: '###', command: 'heading', attrs: { level: 3 } },\n { key: 'bulletList', label: 'Bulleted list', hint: '-', command: 'bulletList' },\n { key: 'orderedList', label: 'Numbered list', hint: '1.', command: 'orderedList' },\n { key: 'taskList', label: 'Checklist', hint: '[ ]', command: 'taskList' },\n { key: 'blockquote', label: 'Blockquote', hint: '>', command: 'blockquote' },\n { key: 'codeBlock', label: 'Code block', hint: '```', command: 'codeBlock' },\n { key: 'table', label: 'Table', hint: '3×3', command: 'insertTable', attrs: { rows: 3, cols: 3 } },\n { key: 'image', label: 'Image', command: 'openImage' },\n { key: 'embed', label: 'Video embed', hint: 'YouTube…', command: 'openEmbed' },\n { key: 'bookmark', label: 'Bookmark (anchor)', command: 'openBookmark' },\n { key: 'horizontalRule', label: 'Divider', hint: '---', command: 'horizontalRule' },\n];\n\nlet uploadCounter = 0;\n\nfunction readFileAsDataURL(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n}\n\nconst CHANGE_DEBOUNCE_MS = 250;\n\n/**\n * WYSIWYG rich text editor powered by ProseMirror.\n *\n * Requires evergreen browsers: selection inside shadow DOM relies on\n * `Selection.getComposedRanges()` (Safari 17+, recent Firefox) or Chrome's\n * `shadowRoot.getSelection()`.\n *\n * @tag nile-wysiwyg-editor\n *\n * @event nile-change - Debounced content change. detail: { value, json, content }\n * @event nile-input - Every document change. detail: { value, json, content }\n * @event nile-focus - Editor gained focus.\n * @event nile-blur - Editor lost focus.\n * @event nile-selection-change - detail: ToolbarState snapshot.\n * @event nile-image-upload-request - Cancelable. detail: { file, insert(src, alt) }.\n * Call preventDefault() and use insert() to fully own the upload.\n * @event nile-image-upload-error - detail: { file, error } when uploadHandler rejects.\n * @event nile-mention-query - detail: { trigger, query, provide(items) } for async sources.\n * @event nile-mention-select - detail: { trigger, key, label } when a mention is inserted.\n * @event nile-word-count - detail: { words, characters } on every document change.\n * @event nile-autosave - detail: { value, json, content } on the autosave interval.\n *\n * @csspart base - Outer container.\n * @csspart toolbar - The toolbar element.\n * @csspart surface - The scrollable editing surface.\n */\n@customElement('nile-wysiwyg-editor')\nexport class NileWysiwygEditor extends NileElement {\n static formAssociated = true;\n\n /** Document content as HTML. Not reflected to the attribute. */\n @property({ type: String }) value = '';\n\n @property({ type: String }) placeholder = '';\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Toolbar config string; `\"none\"` hides the toolbar. */\n @property({ type: String }) toolbar = DEFAULT_TOOLBAR;\n\n /**\n * Toolbar built from authored `<nile-wysiwyg-toolbar-item>` light-DOM\n * children. When present it takes precedence over the `toolbar` string.\n */\n @state() private authoredToolbar?: AuthoredToolbarItem[];\n\n /**\n * Bubble menu built from authored `<nile-wysiwyg-bubble-item>` light-DOM\n * children. When present it replaces the built-in bold/italic/underline/\n * strike/link set.\n */\n @state() private authoredBubble?: AuthoredToolbarItem[];\n\n /** Watches authored toolbar/bubble children so edits re-render them. */\n private toolbarObserver?: MutationObserver;\n\n /** Shows a balloon toolbar over text selections. */\n @property({ type: Boolean, attribute: 'bubble-menu' }) bubbleMenu = false;\n\n /** Sanitizes incoming HTML (value, paste, insertHTML). Leave on. */\n @property({ type: Boolean }) sanitize = true;\n\n /** Constrains content to a single paragraph. */\n @property({ type: Boolean, attribute: 'singleline' }) singleLine = false;\n\n /** Form field name. */\n @property({ type: String }) name = '';\n\n @property({ type: Boolean, reflect: true }) required = false;\n\n /**\n * Async image upload handler. When set, pasted/dropped/picked image files\n * are uploaded through it (an \"Uploading…\" placeholder shows meanwhile)\n * and the returned src is inserted.\n */\n @property({ attribute: false }) uploadHandler?: (\n file: File\n ) => Promise<{ src: string; alt?: string }>;\n\n /**\n * Fallback when no uploadHandler is set and no nile-image-upload-request\n * listener takes over: embed image files as base64 data URLs.\n */\n @property({ attribute: false }) allowBase64Images = true;\n\n /**\n * Shows an \"Upload from computer\" button in the Insert Image dialog. Off by\n * default (URL-only, like the RTE's default); files can always be added via\n * drag & drop or paste regardless.\n */\n @property({ type: Boolean, attribute: 'upload-from-computer' })\n uploadFromComputer = false;\n\n /** Max upload size (bytes) shown/enforced by the image dialog. Default 2 MB. */\n @property({ type: Number, attribute: 'image-max-file-size' })\n imageMaxFileSize = 2 * 1024 * 1024;\n\n /**\n * Mention config: trigger character → items, same shape and JSON attribute\n * format as nile-rich-text-editor. For async sources, configure the\n * trigger with an empty array and listen to nile-mention-query.\n */\n @property({\n attribute: 'mentions',\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trigger of Object.keys(parsed)) {\n const items = parsed[trigger];\n if (Array.isArray(items)) {\n out[trigger] = items\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch {\n return {};\n }\n },\n toAttribute: (value: MentionsConfig) => JSON.stringify(value),\n },\n })\n mentions: MentionsConfig = {};\n\n /** Disables the \"/\" command menu. */\n @property({ type: Boolean, attribute: 'no-slash-commands' }) noSlashCommands = false;\n\n /** Disables the \":\" emoji picker. */\n @property({ type: Boolean, attribute: 'no-emoji' }) noEmoji = false;\n\n /** Maximum character count; further input is rejected. 0 = unlimited. */\n @property({ type: Number, attribute: 'maxlength' }) maxLength = 0;\n\n /** Always show the word/character counter footer (implied by maxlength). */\n @property({ type: Boolean, attribute: 'show-counter' }) showCounter = false;\n\n /** Keeps the toolbar pinned to the viewport while scrolling long content. */\n @property({ type: Boolean, attribute: 'sticky-toolbar', reflect: true })\n stickyToolbar = false;\n\n /** Reusable snippets surfaced in the \"/\" menu (JSON attribute). */\n @property({\n attribute: 'snippets',\n converter: {\n fromAttribute: (value: string): SnippetConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(\n s =>\n s &&\n typeof s.key === 'string' &&\n typeof s.label === 'string' &&\n typeof s.html === 'string'\n )\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: SnippetConfig[]) => JSON.stringify(value),\n },\n })\n snippets: SnippetConfig[] = [];\n\n /** Merge fields offered in the merge-field picker (JSON attribute). */\n @property({\n attribute: 'merge-fields',\n converter: {\n fromAttribute: (value: string): MergeFieldConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(f => f && typeof f.id === 'string' && typeof f.label === 'string')\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: MergeFieldConfig[]) => JSON.stringify(value),\n },\n })\n mergeFields: MergeFieldConfig[] = [];\n\n /** Content templates offered in the template picker (JSON attribute). */\n @property({\n attribute: 'templates',\n converter: {\n fromAttribute: (value: string): TemplateConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(t => t && typeof t.label === 'string' && typeof t.html === 'string')\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: TemplateConfig[]) => JSON.stringify(value),\n },\n })\n templates: TemplateConfig[] = [];\n\n /**\n * Renders a math node's LaTeX to HTML (KaTeX/MathJax/MathML). When unset,\n * the raw LaTeX is shown. Same trust level as uploadHandler — output is\n * inserted as HTML.\n */\n @property({ attribute: false }) mathRenderer?: MathRenderer;\n\n /** Emit nile-autosave every N ms while the document has changed. 0 = off. */\n @property({ type: Number, attribute: 'autosave-interval' }) autosaveInterval = 0;\n\n /** When on, every paste drops formatting and inserts plain text. */\n @property({ type: Boolean, attribute: 'paste-as-plain-text', reflect: true })\n pasteAsPlainText = false;\n\n /** Disables Markdown detection on plain-text pastes. */\n @property({ type: Boolean, attribute: 'no-markdown-paste' })\n noMarkdownPaste = false;\n\n /** Disables typography autocorrect (smart quotes, dashes, (c) → ©). */\n @property({ type: Boolean, attribute: 'no-text-transform' })\n noTextTransform = false;\n\n /** Expands the editor to fill the viewport. Esc exits. */\n @property({ type: Boolean, reflect: true }) fullscreen = false;\n\n /** Outlines block boundaries (paragraphs, headings, lists…) while editing. */\n @property({ type: Boolean, attribute: 'show-blocks', reflect: true })\n showBlocks = false;\n\n @state() private toolbarState?: ToolbarState;\n\n @state() private hasFocus = false;\n\n @state() private sourceMode = false;\n\n @state() private counter = { words: 0, characters: 0 };\n\n /** Which list the shared insert-menu is showing, if open. */\n @state() private insertMenuMode: 'template' | 'merge' | null = null;\n\n @query('.nile-wysiwyg') private baseEl!: HTMLElement;\n\n @query('nile-wysiwyg-toolbar') private toolbarEl?: HTMLElement;\n\n @query('.nile-wysiwyg__surface') private surfaceEl!: HTMLElement;\n\n @query('nile-wysiwyg-link-editor') private linkEditorEl!: NileWysiwygLinkEditor;\n\n @query('nile-wysiwyg-bubble-menu') private bubbleMenuEl!: NileWysiwygBubbleMenu;\n\n @query('nile-wysiwyg-image-panel') private imagePanelEl!: NileWysiwygImagePanel;\n\n @query('nile-wysiwyg-table-menu') private tableMenuEl!: NileWysiwygTableMenu;\n\n @query('nile-wysiwyg-suggest-list') private suggestListEl!: NileWysiwygSuggestList;\n\n @query('nile-wysiwyg-find-bar') private findBarEl!: NileWysiwygFindBar;\n\n @query('nile-wysiwyg-source-view') private sourceViewEl?: NileWysiwygSourceView;\n\n @query('nile-wysiwyg-embed-panel') private embedPanelEl!: NileWysiwygEmbedPanel;\n\n @query('nile-wysiwyg-bookmark-panel') private bookmarkPanelEl!: NileWysiwygBookmarkPanel;\n\n @query('nile-wysiwyg-code-menu') private codeMenuEl!: NileWysiwygCodeMenu;\n\n @query('nile-wysiwyg-shortcut-help') private shortcutHelpEl!: NileWysiwygShortcutHelp;\n\n @query('nile-wysiwyg-image-menu') private imageMenuEl!: NileWysiwygImageMenu;\n\n @query('nile-wysiwyg-embed-menu') private embedMenuEl!: NileWysiwygEmbedMenu;\n\n @query('nile-wysiwyg-special-chars') private specialCharsEl!: NileWysiwygSpecialChars;\n\n @query('nile-wysiwyg-emoji-picker') private emojiPickerEl!: NileWysiwygEmojiPicker;\n\n @query('nile-wysiwyg-insert-menu') private insertMenuEl!: NileWysiwygInsertMenu;\n\n @query('nile-wysiwyg-math-panel') private mathPanelEl!: NileWysiwygMathPanel;\n\n @query('nile-wysiwyg-markdown-panel') private markdownPanelEl!: NileWysiwygMarkdownPanel;\n\n private view?: EditorView;\n\n private mentionMatch: SuggestionMatch | null = null;\n\n private slashMatch: SuggestionMatch | null = null;\n\n private emojiMatch: SuggestionMatch | null = null;\n\n private activeSuggestSource: 'mention' | 'slash' | 'emoji' | null = null;\n\n private suggestDismissed: string | null = null;\n\n private mentionQueryToken = '';\n\n private autosaveTimer?: ReturnType<typeof setInterval>;\n\n private lastAutosaveValue = '';\n\n private internals?: ElementInternals;\n\n private defaultValue = '';\n\n private syncingValue = false;\n\n private changeTimer?: ReturnType<typeof setTimeout>;\n\n private pendingChange = false;\n\n /** Body overflow value before fullscreen locked it; null = not locked. */\n private previousBodyOverflow: string | null = null;\n private readonly onAnyScroll = (): void => {\n if (!this.bubbleMenuEl) return;\n [\n this.bubbleMenuEl,\n this.tableMenuEl,\n this.codeMenuEl,\n this.imageMenuEl,\n this.embedMenuEl,\n ].forEach(menu => {\n if (menu?.open) menu.open = false;\n });\n };\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n constructor() {\n super();\n if (typeof this.attachInternals === 'function') {\n this.internals = this.attachInternals();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n // Remount after a disconnect/reconnect (e.g. host moved in the DOM).\n if (this.hasUpdated && !this.view) {\n this.updateComplete.then(() => this.mountView());\n }\n // Close floating panels when the user clicks anywhere outside them.\n document.addEventListener('pointerdown', this.onOutsidePointerDown, true);\n // Format painter applies on pointer release so a drag-selection is painted\n // whole, not on the first mid-drag selection change.\n document.addEventListener('mouseup', this.onPainterPointerUp);\n // Floating menus can't track their anchor through a scroll, so dismiss them.\n document.addEventListener('scroll', this.onAnyScroll, {\n capture: true,\n passive: true,\n });\n\n // Discover an author-supplied toolbar / bubble menu (light-DOM\n // <nile-wysiwyg-toolbar-item> / <nile-wysiwyg-bubble-item> children) and\n // keep them in sync as they change.\n this.syncAuthoredToolbar();\n this.syncAuthoredBubble();\n if (!this.toolbarObserver) {\n this.toolbarObserver = new MutationObserver(() => {\n this.syncAuthoredToolbar();\n this.syncAuthoredBubble();\n });\n }\n this.toolbarObserver.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['name', 'label', 'icon', 'divider', 'overflow'],\n });\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('pointerdown', this.onOutsidePointerDown, true);\n document.removeEventListener('mouseup', this.onPainterPointerUp);\n document.removeEventListener('scroll', this.onAnyScroll, { capture: true });\n this.surfaceEl?.removeEventListener('scroll', this.onAnyScroll);\n this.toolbarObserver?.disconnect();\n if (this.changeTimer) clearTimeout(this.changeTimer);\n if (this.autosaveTimer) clearInterval(this.autosaveTimer);\n if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n this.view?.destroy();\n this.view = undefined;\n }\n\n protected firstUpdated(): void {\n this.defaultValue = this.value;\n // Re-read now that light-DOM children are guaranteed parsed (the initial\n // connectedCallback read can run mid-parse before children exist).\n this.syncAuthoredToolbar();\n this.syncAuthoredBubble();\n this.mountView();\n }\n\n /**\n * Reads `<nile-wysiwyg-toolbar-item>` children into a structured toolbar and\n * stores it on {@link authoredToolbar}. Absent items clear the override\n * (falling back to the `toolbar` string). No-ops when nothing changed to\n * avoid needless re-renders.\n */\n private syncAuthoredToolbar(): void {\n const nodes = this.querySelectorAll('nile-wysiwyg-toolbar-item');\n const next: AuthoredToolbarItem[] | undefined = nodes.length\n ? Array.from(nodes)\n .map(el => ({\n name: el.hasAttribute('divider') ? '|' : el.getAttribute('name') || '',\n label: el.getAttribute('label') || undefined,\n icon: el.getAttribute('icon') || undefined,\n overflow: el.hasAttribute('overflow') || undefined,\n }))\n .filter(item => item.name)\n : undefined;\n if (JSON.stringify(next) !== JSON.stringify(this.authoredToolbar)) {\n this.authoredToolbar = next;\n }\n }\n\n /**\n * Reads `<nile-wysiwyg-bubble-item>` children into a structured bubble-menu\n * item list stored on {@link authoredBubble}. Absent items clear the override\n * (falling back to the built-in default). No-ops when nothing changed.\n */\n private syncAuthoredBubble(): void {\n const nodes = this.querySelectorAll('nile-wysiwyg-bubble-item');\n const next: AuthoredToolbarItem[] | undefined = nodes.length\n ? Array.from(nodes)\n .map(el => ({\n name: el.hasAttribute('divider') ? '|' : el.getAttribute('name') || '',\n label: el.getAttribute('label') || undefined,\n icon: el.getAttribute('icon') || undefined,\n }))\n .filter(item => item.name)\n : undefined;\n if (JSON.stringify(next) !== JSON.stringify(this.authoredBubble)) {\n this.authoredBubble = next;\n }\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('value') && this.view && !this.syncingValue) {\n const current = docToHtml(this.view.state.doc);\n if (current !== this.value) this.setContent(this.value);\n }\n this.syncingValue = false;\n\n if ((changed.has('disabled') || changed.has('readonly')) && this.view) {\n this.view.setProps({});\n }\n if (changed.has('placeholder') && this.view) {\n // Decorations are recomputed on any transaction.\n this.view.dispatch(this.view.state.tr);\n }\n if (changed.has('required')) this.updateValidity();\n if (changed.has('autosaveInterval')) this.restartAutosave();\n if (\n (changed.has('pasteAsPlainText') ||\n changed.has('fullscreen') ||\n changed.has('showBlocks')) &&\n this.view\n ) {\n this.toolbarState = this.snapshotToolbar(this.view.state);\n }\n // Input rules are baked into the state at build time; rebuild in place\n // (same doc, fresh plugins) when the autocorrect toggle changes.\n if (changed.has('noTextTransform') && this.view && !changed.has('value')) {\n this.view.updateState(this.buildState(this.view.state.doc));\n }\n // Lock page scrolling while fullscreen covers the viewport.\n if (changed.has('fullscreen')) {\n if (this.fullscreen) {\n if (this.previousBodyOverflow === null) {\n this.previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n } else if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n }\n\n private restartAutosave(): void {\n if (this.autosaveTimer) clearInterval(this.autosaveTimer);\n this.autosaveTimer = undefined;\n if (this.autosaveInterval > 0) {\n this.lastAutosaveValue = this.value;\n this.autosaveTimer = setInterval(() => {\n if (!this.view || this.value === this.lastAutosaveValue) return;\n this.lastAutosaveValue = this.value;\n this.emit('nile-autosave', this.buildChangeDetail(this.view.state.doc));\n }, this.autosaveInterval);\n }\n }\n\n // ------------------------------------------------------------------ view\n\n private buildState(doc?: PMNode): EditorState {\n return createEditorState({\n schema: defaultSchema,\n doc,\n getPlaceholder: () => this.placeholder,\n singleLine: this.singleLine,\n onLinkShortcut: () => this.openLinkEditor(),\n onFindShortcut: () => this.openFindBar(),\n onShortcutHelp: () => this.openShortcutHelp(),\n onImageFiles: (files, pos) => {\n for (const file of files) this.insertImageFile(file, pos);\n },\n mentions: {\n getTriggers: () => Object.keys(this.mentions),\n onChange: match => {\n this.mentionMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'mention'),\n },\n slashCommands: {\n onChange: match => {\n this.slashMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'slash'),\n },\n emoji: {\n onChange: match => {\n this.emojiMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'emoji'),\n },\n getMaxLength: () => this.maxLength,\n getForcePlainText: () => this.pasteAsPlainText,\n getMarkdownPaste: () => !this.noMarkdownPaste,\n getSanitize: () => this.sanitize,\n textTransform: !this.noTextTransform,\n });\n }\n\n /**\n * ToolbarState snapshot augmented with host-only flags the pure\n * computeToolbarState can't know about (e.g. the paste-as-plain-text toggle).\n */\n private snapshotToolbar(state: EditorState): ToolbarState {\n return {\n ...computeToolbarState(state),\n pasteAsPlainText: this.pasteAsPlainText,\n fullscreen: this.fullscreen,\n showBlocks: this.showBlocks,\n formatPainter: isFormatPainterArmed(state),\n };\n }\n\n private mountView(): void {\n if (this.view || !this.surfaceEl) return;\n let doc = this.value\n ? htmlToDoc(defaultSchema, this.value, this.sanitize)\n : undefined;\n if (doc && this.singleLine) doc = flattenToSingleParagraph(doc);\n\n this.view = new EditorView(this.surfaceEl, {\n state: this.buildState(doc),\n dispatchTransaction: tr => this.handleTransaction(tr),\n editable: () => !this.disabled && !this.readonly,\n transformPastedHTML: pasted => {\n // Word/Google Docs clipboard HTML gets normalized (real lists, no\n // mso noise) before the sanitizer clamps it to the schema.\n const cleaned = isOfficeHtml(pasted) ? cleanOfficeHtml(pasted) : pasted;\n return this.sanitize ? sanitizeHtml(cleaned) : cleaned;\n },\n handleDOMEvents: {\n mousedown: () => {\n // Clicking into the document dismisses the never-focused popovers\n // (they take no focus, so blur can't close them).\n this.closeSpecialChars(false);\n this.closeInsertMenu(false);\n return false;\n },\n focus: () => {\n this.hasFocus = true;\n this.updateOverlays();\n this.emit('nile-focus');\n return false;\n },\n blur: (_view, event) => {\n // Focus moving into the editor's own chrome (language picker,\n // panels) is not a blur — closing overlays here would dismiss\n // the control the user just clicked.\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && (this.shadowRoot?.contains(related) || this.contains(related))) {\n return false;\n }\n this.hasFocus = false;\n this.flushChange();\n this.updateOverlays();\n this.closeSuggestList();\n this.closeSpecialChars(false);\n this.emit('nile-blur');\n return false;\n },\n },\n attributes: {\n role: 'textbox',\n 'aria-multiline': this.singleLine ? 'false' : 'true',\n },\n nodeViews: {\n task_item: (node, view, getPos) =>\n new TaskItemView(node, view, getPos as () => number | undefined),\n image: (node, view, getPos) =>\n new ImageView(node, view, getPos as () => number | undefined),\n figure: (node, view, getPos) =>\n new FigureView(node, view, getPos as () => number | undefined),\n embed: (node, view, getPos) =>\n new EmbedView(node, view, getPos as () => number | undefined),\n styleBlock: node => new StyleBlockView(node),\n math: node => new MathView(node, this.mathRenderer),\n },\n });\n\n this.view.dom.addEventListener('mousedown', this.onPainterPointerDown);\n this.surfaceEl.addEventListener('scroll', this.onAnyScroll, { passive: true });\n\n this.toolbarState = this.snapshotToolbar(this.view.state);\n this.counter = countWords(this.view.state.doc);\n this.syncFormValue(this.view.state.doc);\n }\n\n /**\n * True while a drag-selection is in progress with the format painter armed.\n * Suppresses the mid-drag auto-apply in {@link handleTransaction} so the\n * copied formatting lands on the final, complete selection (on mouse-up).\n */\n private painterDragActive = false;\n\n private onPainterPointerDown = (): void => {\n if (this.view && isFormatPainterArmed(this.view.state)) {\n this.painterDragActive = true;\n }\n };\n\n private onPainterPointerUp = (): void => {\n if (!this.painterDragActive) return;\n this.painterDragActive = false;\n // Defer a frame so ProseMirror has synced the final DOM selection.\n requestAnimationFrame(() => {\n if (!this.view) return;\n if (this.view.state.selection.empty || !isFormatPainterArmed(this.view.state)) return;\n const applyTr = applyFormatPainter(this.view.state);\n if (applyTr) this.view.dispatch(applyTr);\n });\n };\n\n private handleTransaction(tr: Transaction): void {\n if (!this.view) return;\n const newState = this.view.state.apply(tr);\n this.view.updateState(newState);\n\n // Format painter: once armed, the next non-empty selection the user makes\n // receives the copied formatting, then the painter disarms. While a pointer\n // drag is building the selection we defer to the mouse-up handler\n // (onPainterPointerUp) so the whole range is painted, not just the first\n // mid-drag character. Single-shot selections (double-click, Shift+End,\n // programmatic) still apply here.\n if (\n tr.selectionSet &&\n !newState.selection.empty &&\n isFormatPainterArmed(newState) &&\n !this.painterDragActive\n ) {\n const applyTr = applyFormatPainter(newState);\n if (applyTr) {\n this.view.dispatch(applyTr);\n return;\n }\n }\n\n this.toolbarState = this.snapshotToolbar(newState);\n this.emit('nile-selection-change', this.toolbarState);\n this.updateOverlays();\n\n if (this.findBarEl?.open) {\n const find = getFindState(newState);\n this.findBarEl.matchCount = find.matches.length;\n this.findBarEl.activeIndex = find.activeIndex;\n }\n\n if (tr.docChanged) {\n const detail = this.buildChangeDetail(newState.doc);\n this.syncingValue = true;\n this.value = detail.value;\n this.syncFormValue(newState.doc);\n this.emit('nile-input', detail);\n this.counter = countWords(newState.doc);\n this.emit('nile-word-count', this.counter);\n this.scheduleChange();\n }\n }\n\n private buildChangeDetail(doc: PMNode): WysiwygChangeDetail {\n const value = isDocEmpty(doc) ? '' : docToHtml(doc);\n return { value, json: docToJson(doc), content: value };\n }\n\n private scheduleChange(): void {\n this.pendingChange = true;\n if (this.changeTimer) clearTimeout(this.changeTimer);\n this.changeTimer = setTimeout(() => this.flushChange(), CHANGE_DEBOUNCE_MS);\n }\n\n private flushChange(): void {\n if (!this.pendingChange || !this.view) return;\n this.pendingChange = false;\n if (this.changeTimer) clearTimeout(this.changeTimer);\n this.emit('nile-change', this.buildChangeDetail(this.view.state.doc));\n }\n\n // ------------------------------------------------------------------ form\n\n private syncFormValue(doc: PMNode): void {\n if (!this.internals) return;\n const value = isDocEmpty(doc) ? '' : docToHtml(doc);\n this.internals.setFormValue(value === '' ? null : value);\n this.updateValidity();\n }\n\n private updateValidity(): void {\n if (!this.internals) return;\n const empty = this.view ? isDocEmpty(this.view.state.doc) : this.value === '';\n if (this.required && empty) {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please fill out this field.',\n this.surfaceEl ?? undefined\n );\n } else {\n this.internals.setValidity({});\n }\n }\n\n formResetCallback(): void {\n this.setContent(this.defaultValue);\n }\n\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public checkValidity(): boolean {\n return this.internals ? this.internals.checkValidity() : true;\n }\n\n public reportValidity(): boolean {\n return this.internals ? this.internals.reportValidity() : true;\n }\n\n // -------------------------------------------------------------- overlays\n\n /** Positions an overlay element near a doc position (default: selection). */\n private positionOverlay(\n el: HTMLElement,\n placement: 'above' | 'below',\n pos?: number\n ): void {\n if (!this.view || !this.baseEl) return;\n const from = pos ?? this.view.state.selection.from;\n const coords = this.view.coordsAtPos(from);\n const baseRect = this.baseEl.getBoundingClientRect();\n const left = Math.max(\n 4,\n Math.min(coords.left - baseRect.left, baseRect.width - el.offsetWidth - 4)\n );\n el.style.left = `${left}px`;\n if (placement === 'above') {\n el.style.top = `${Math.max(4, coords.top - baseRect.top - el.offsetHeight - 8)}px`;\n } else {\n el.style.top = `${coords.bottom - baseRect.top + 6}px`;\n }\n }\n\n /** Positions a floating panel directly below a toolbar/anchor element. */\n private positionOverlayBelowAnchor(el: HTMLElement, anchor: HTMLElement): void {\n if (!this.baseEl) return;\n const baseRect = this.baseEl.getBoundingClientRect();\n const anchorRect = anchor.getBoundingClientRect();\n const left = Math.max(\n 4,\n Math.min(anchorRect.left - baseRect.left, baseRect.width - el.offsetWidth - 4)\n );\n // Clear any CSS-pinned `right` (e.g. the find bar) so `left` wins.\n el.style.right = 'auto';\n el.style.left = `${left}px`;\n el.style.top = `${anchorRect.bottom - baseRect.top + 6}px`;\n }\n\n /** Finds a toolbar button by its aria-label, to anchor a panel below it. */\n private toolbarButton(label: string): HTMLElement | null {\n return (\n (this.toolbarEl?.shadowRoot?.querySelector(\n `button[aria-label=\"${label}\"]`\n ) as HTMLElement | null) ?? null\n );\n }\n\n private updateOverlays(): void {\n if (!this.bubbleMenuEl) return;\n const panelOpen =\n this.linkEditorEl?.open ||\n this.imagePanelEl?.open ||\n this.embedPanelEl?.open ||\n this.bookmarkPanelEl?.open ||\n this.emojiPickerEl?.open;\n const show =\n this.bubbleMenu &&\n this.hasFocus &&\n !!this.toolbarState &&\n !this.toolbarState.selectionEmpty &&\n !this.toolbarState.imageSelected &&\n !this.toolbarState.embedSelected &&\n !panelOpen;\n this.bubbleMenuEl.open = show;\n if (show) {\n this.bubbleMenuEl.toolbarState = this.toolbarState;\n this.bubbleMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.bubbleMenuEl, 'above')\n );\n }\n\n if (this.tableMenuEl) {\n const showTable =\n this.hasFocus && !!this.toolbarState && this.toolbarState.inTable && !panelOpen;\n this.tableMenuEl.open = showTable;\n if (showTable) {\n this.tableMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.tableMenuEl, 'below')\n );\n }\n }\n\n if (this.codeMenuEl) {\n const showCode =\n this.hasFocus && !!this.toolbarState && this.toolbarState.inCodeBlock && !panelOpen;\n this.codeMenuEl.open = showCode;\n if (showCode) {\n this.codeMenuEl.language = this.toolbarState!.codeBlockLanguage ?? '';\n this.codeMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.codeMenuEl, 'above')\n );\n }\n }\n\n if (this.imageMenuEl) {\n const showImage =\n this.hasFocus && !!this.toolbarState && this.toolbarState.imageSelected && !panelOpen;\n this.imageMenuEl.open = showImage;\n if (showImage) {\n this.imageMenuEl.toolbarState = this.toolbarState;\n this.imageMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.imageMenuEl, 'above')\n );\n }\n }\n\n if (this.embedMenuEl) {\n const showEmbed =\n this.hasFocus && !!this.toolbarState && this.toolbarState.embedSelected && !panelOpen;\n this.embedMenuEl.open = showEmbed;\n if (showEmbed) {\n this.embedMenuEl.toolbarState = this.toolbarState;\n this.embedMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.embedMenuEl, 'above')\n );\n }\n }\n }\n\n // -------------------------------------------------------- special chars\n\n private openSpecialChars(): void {\n if (!this.view || !this.specialCharsEl || this.disabled || this.readonly) return;\n this.specialCharsEl.open = true;\n this.specialCharsEl.updateComplete.then(() =>\n this.positionOverlay(this.specialCharsEl, 'below')\n );\n }\n\n private closeSpecialChars(refocus = true): void {\n if (this.specialCharsEl) this.specialCharsEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private insertSpecialChar(char: string): void {\n if (!this.view) return;\n this.view.dispatch(this.view.state.tr.insertText(char).scrollIntoView());\n this.view.focus();\n }\n\n // ------------------------------------------------ templates & merge fields\n\n private openInsertMenu(mode: 'template' | 'merge'): void {\n if (!this.view || !this.insertMenuEl || this.disabled || this.readonly) return;\n this.insertMenuMode = mode;\n const menu = this.insertMenuEl;\n if (mode === 'merge') {\n menu.heading = 'Merge field';\n menu.emptyText = 'No merge fields configured.';\n menu.items = this.mergeFields.map(f => ({ label: f.label, description: `{{${f.id}}}` }));\n } else {\n menu.heading = 'Template';\n menu.emptyText = 'No templates configured.';\n menu.items = this.templates.map(t => ({ label: t.label, description: t.description }));\n }\n menu.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n menu.updateComplete.then(() => this.positionOverlay(menu, 'below'));\n }\n\n private closeInsertMenu(refocus = true): void {\n if (this.insertMenuEl) this.insertMenuEl.open = false;\n this.insertMenuMode = null;\n if (refocus) this.view?.focus();\n }\n\n private handleInsertSelect(index: number): void {\n const mode = this.insertMenuMode;\n this.closeInsertMenu();\n if (!this.view) return;\n if (mode === 'merge') {\n const field = this.mergeFields[index];\n if (field) this.execCommand('insertMergeField', { id: field.id, label: field.label });\n } else if (mode === 'template') {\n const template = this.templates[index];\n if (template) this.insertHTML(template.html);\n }\n }\n\n /** Inserts a merge-field placeholder at the selection. */\n public insertMergeField(id: string, label?: string): void {\n this.execCommand('insertMergeField', { id, label: label ?? null });\n }\n\n /** Changes the case of the selected text. */\n public changeCase(mode: 'upper' | 'lower' | 'title' | 'sentence'): void {\n this.execCommand('changeCase', { textCase: mode });\n }\n\n // ---------------------------------------------------------------- math\n\n private openMathPanel(): void {\n if (!this.view || !this.mathPanelEl || this.disabled || this.readonly) return;\n this.mathPanelEl.reset();\n this.mathPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.mathPanelEl.updateComplete.then(() => {\n const anchor = this.toolbarButton('Insert math (LaTeX)');\n if (anchor) this.positionOverlayBelowAnchor(this.mathPanelEl, anchor);\n else this.positionOverlay(this.mathPanelEl, 'below');\n this.mathPanelEl.focusInput();\n });\n }\n\n private closeMathPanel(refocus = true): void {\n if (this.mathPanelEl) this.mathPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private openMarkdownPanel(): void {\n if (!this.view || !this.markdownPanelEl || this.disabled || this.readonly) return;\n this.markdownPanelEl.reset();\n this.markdownPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.markdownPanelEl.updateComplete.then(() => {\n const anchor = this.toolbarButton('Insert from Markdown');\n if (anchor) this.positionOverlayBelowAnchor(this.markdownPanelEl, anchor);\n else this.positionOverlay(this.markdownPanelEl, 'below');\n this.markdownPanelEl.focusInput();\n });\n }\n\n private closeMarkdownPanel(refocus = true): void {\n if (this.markdownPanelEl) this.markdownPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private applyMath(latex: string, display: 'inline' | 'block'): void {\n this.closeMathPanel();\n this.execCommand('insertMath', { latex, mathDisplay: display });\n }\n\n /** Inserts a math formula (LaTeX) at the selection. */\n public insertMath(latex: string, display: 'inline' | 'block' = 'inline'): void {\n this.execCommand('insertMath', { latex, mathDisplay: display });\n }\n\n // ----------------------------------------------------------------- emoji\n\n private openEmojiPicker(): void {\n if (!this.view || !this.emojiPickerEl || this.disabled || this.readonly) return;\n this.emojiPickerEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.emojiPickerEl.updateComplete.then(() => {\n this.positionOverlay(this.emojiPickerEl, 'below');\n this.emojiPickerEl.focusInput();\n });\n }\n\n private closeEmojiPicker(refocus = true): void {\n if (this.emojiPickerEl) this.emojiPickerEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // ---------------------------------------------------------------- embeds\n\n private openEmbedPanel(): void {\n if (!this.view || !this.embedPanelEl || this.disabled || this.readonly) return;\n this.embedPanelEl.reset();\n this.embedPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.embedPanelEl.updateComplete.then(() => {\n // Anchor below the embed toolbar button when available.\n const anchor = this.toolbarButton('Embed video (YouTube, Vimeo, Loom)');\n if (anchor) this.positionOverlayBelowAnchor(this.embedPanelEl, anchor);\n else this.positionOverlay(this.embedPanelEl, 'below');\n this.embedPanelEl.focusInput();\n });\n }\n\n private closeEmbedPanel(refocus = true): void {\n if (this.embedPanelEl) this.embedPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // -------------------------------------------------------------- bookmarks\n\n private openBookmarkPanel(): void {\n if (!this.view || !this.bookmarkPanelEl || this.disabled || this.readonly) return;\n this.bookmarkPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.bookmarkPanelEl.updateComplete.then(() => {\n this.positionOverlay(this.bookmarkPanelEl, 'below');\n this.bookmarkPanelEl.focusInput();\n });\n }\n\n private closeBookmarkPanel(refocus = true): void {\n if (this.bookmarkPanelEl) this.bookmarkPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // ---------------------------------------------------------------- images\n\n private openImagePanel(): void {\n if (!this.view || !this.imagePanelEl || this.disabled || this.readonly) return;\n // Editing an already-selected image/figure pre-fills the fields (and shows\n // Remove); otherwise open a blank insert panel.\n const info = selectedImageInfo(this.view.state);\n if (info) {\n this.imagePanelEl.prefill({\n src: info.node.attrs.src,\n alt: info.node.attrs.alt ?? '',\n caption: info.isFigure ? info.node.textContent : '',\n });\n } else {\n this.imagePanelEl.reset();\n }\n this.imagePanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.imagePanelEl.updateComplete.then(() => {\n // Anchor below the image toolbar button when it's available; otherwise\n // fall back to positioning at the cursor.\n const anchor = this.toolbarButton('Insert image');\n if (anchor) this.positionOverlayBelowAnchor(this.imagePanelEl, anchor);\n else this.positionOverlay(this.imagePanelEl, 'below');\n this.imagePanelEl.focusInput();\n });\n }\n\n private closeImagePanel(refocus = true): void {\n if (this.imagePanelEl) this.imagePanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private insertImageAt(\n src: string,\n alt: string | null,\n pos: number | null,\n caption: string | null = null\n ): void {\n if (!this.view) return;\n if (pos !== null) {\n const $pos = this.view.state.doc.resolve(\n Math.min(pos, this.view.state.doc.content.size)\n );\n this.view.dispatch(this.view.state.tr.setSelection(TextSelection.near($pos)));\n }\n this.execCommand('insertImage', { src, alt, caption });\n }\n\n /**\n * Routes an image file through the upload pipeline: a cancelable\n * `nile-image-upload-request` first, then `uploadHandler` (with an\n * uploading placeholder), then the base64 fallback.\n */\n public async insertImageFile(\n file: File,\n pos: number | null = null,\n meta?: { alt?: string | null; caption?: string | null }\n ): Promise<void> {\n if (!this.view) return;\n const metaAlt = meta?.alt ?? null;\n const metaCaption = meta?.caption ?? null;\n\n const request = this.emit(\n 'nile-image-upload-request',\n {\n file,\n insert: (src: string, alt?: string) =>\n this.insertImageAt(src, alt ?? metaAlt, pos, metaCaption),\n },\n true,\n true,\n true\n );\n if (request.defaultPrevented) return;\n\n if (this.uploadHandler) {\n uploadCounter += 1;\n const id = `nile-upload-${uploadCounter}`;\n const at = pos ?? this.view.state.selection.from;\n this.view.dispatch(this.view.state.tr.setMeta(imageUploadKey, { add: { id, pos: at } }));\n try {\n const { src, alt } = await this.uploadHandler(file);\n const mappedPos = this.view ? findUploadPos(this.view.state, id) : null;\n this.view?.dispatch(this.view.state.tr.setMeta(imageUploadKey, { remove: { id } }));\n this.insertImageAt(src, metaAlt ?? alt ?? null, mappedPos, metaCaption);\n } catch (error) {\n this.view?.dispatch(this.view.state.tr.setMeta(imageUploadKey, { remove: { id } }));\n this.emit('nile-image-upload-error', { file, error });\n }\n return;\n }\n\n if (this.allowBase64Images) {\n const src = await readFileAsDataURL(file);\n this.insertImageAt(src, metaAlt, pos, metaCaption);\n }\n }\n\n // ---------------------------------------------------- mentions & slash\n\n private dismissKeyFor(\n source: 'mention' | 'slash' | 'emoji',\n match: SuggestionMatch\n ): string {\n return `${source}:${match.trigger}:${match.from}`;\n }\n\n private handleSuggestKey(\n event: KeyboardEvent,\n source: 'mention' | 'slash' | 'emoji'\n ): boolean {\n if (this.activeSuggestSource !== source || !this.suggestListEl?.open) return false;\n switch (event.key) {\n case 'ArrowDown':\n this.suggestListEl.next();\n return true;\n case 'ArrowUp':\n this.suggestListEl.prev();\n return true;\n case 'Enter':\n case 'Tab':\n return this.suggestListEl.selectCurrent();\n case 'Escape': {\n const match =\n source === 'mention'\n ? this.mentionMatch\n : source === 'slash'\n ? this.slashMatch\n : this.emojiMatch;\n if (match) this.suggestDismissed = this.dismissKeyFor(source, match);\n this.closeSuggestList();\n return true;\n }\n default:\n return false;\n }\n }\n\n private closeSuggestList(): void {\n if (this.suggestListEl) this.suggestListEl.open = false;\n this.activeSuggestSource = null;\n }\n\n private updateSuggestList(): void {\n if (!this.suggestListEl || !this.view) return;\n const mention = this.mentionMatch?.active ? this.mentionMatch : null;\n const slash =\n !this.noSlashCommands && this.slashMatch?.active ? this.slashMatch : null;\n const emoji = !this.noEmoji && this.emojiMatch?.active ? this.emojiMatch : null;\n const source: 'mention' | 'slash' | 'emoji' | null = mention\n ? 'mention'\n : slash\n ? 'slash'\n : emoji\n ? 'emoji'\n : null;\n const match = mention ?? slash ?? emoji;\n\n if (!source || !match || this.disabled || this.readonly) {\n this.closeSuggestList();\n return;\n }\n if (this.suggestDismissed === this.dismissKeyFor(source, match)) return;\n this.suggestDismissed = null;\n\n if (source === 'mention') {\n const all = this.mentions[match.trigger] ?? [];\n const query = match.query.toLowerCase();\n this.suggestListEl.items = all.filter(item =>\n item.label.toLowerCase().includes(query)\n );\n // Async override: listeners may provide items for this exact query.\n const token = `${match.trigger} ${match.query}`;\n this.mentionQueryToken = token;\n this.emit('nile-mention-query', {\n trigger: match.trigger,\n query: match.query,\n provide: (items: { key: string; label: string }[]) => {\n if (this.mentionQueryToken !== token || !Array.isArray(items)) return;\n this.suggestListEl.items = items\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n },\n });\n } else if (source === 'slash') {\n const query = match.query.toLowerCase();\n const snippetItems: SuggestItem[] = this.snippets.map(s => ({\n key: `snippet:${s.key}`,\n label: s.label,\n hint: 'snippet',\n }));\n this.suggestListEl.items = [...SLASH_ITEMS, ...snippetItems].filter(item =>\n item.label.toLowerCase().includes(query)\n );\n } else {\n const query = match.query.toLowerCase();\n this.suggestListEl.items = EMOJI.filter(e => e.name.includes(query))\n .slice(0, 12)\n .map(e => ({ key: e.name, label: `${e.char} ${e.name}` }));\n if (this.suggestListEl.items.length === 0) {\n this.closeSuggestList();\n return;\n }\n }\n\n this.activeSuggestSource = source;\n this.suggestListEl.resetActive();\n this.suggestListEl.open = true;\n this.suggestListEl.updateComplete.then(() =>\n this.positionOverlay(this.suggestListEl, 'below', match.from)\n );\n }\n\n private handleSuggestSelect(item: SuggestItem): void {\n if (!this.view) return;\n if (this.activeSuggestSource === 'mention' && this.mentionMatch?.active) {\n const match = this.mentionMatch;\n const { state } = this.view;\n const mention = state.schema.nodes.mention.create({\n trigger: match.trigger,\n key: item.key,\n label: item.label,\n });\n this.view.dispatch(\n state.tr.replaceWith(match.from, match.to, [mention, state.schema.text(' ')])\n );\n this.view.focus();\n this.emit('nile-mention-select', {\n trigger: match.trigger,\n key: item.key,\n label: item.label,\n });\n } else if (this.activeSuggestSource === 'slash' && this.slashMatch?.active) {\n const match = this.slashMatch;\n this.view.dispatch(this.view.state.tr.delete(match.from, match.to));\n this.closeSuggestList();\n if (item.key.startsWith('snippet:')) {\n const snippet = this.snippets.find(s => `snippet:${s.key}` === item.key);\n if (snippet) this.insertHTML(snippet.html);\n return;\n }\n const slashItem = SLASH_ITEMS.find(s => s.key === item.key);\n if (!slashItem) return;\n if (slashItem.command === 'openImage') this.openImagePanel();\n else if (slashItem.command === 'openEmbed') this.openEmbedPanel();\n else if (slashItem.command === 'openBookmark') this.openBookmarkPanel();\n else this.execCommand(slashItem.command, slashItem.attrs);\n } else if (this.activeSuggestSource === 'emoji' && this.emojiMatch?.active) {\n const match = this.emojiMatch;\n const emoji = EMOJI.find(e => e.name === item.key);\n if (emoji) {\n this.view.dispatch(\n this.view.state.tr.insertText(emoji.char, match.from, match.to)\n );\n this.view.focus();\n }\n }\n this.closeSuggestList();\n }\n\n // ---------------------------------------------------------- find & replace\n\n /** Opens the find & replace bar (also bound to Mod-f inside the editor). */\n public openFindBar(): void {\n if (!this.findBarEl || this.sourceMode) return;\n this.findBarEl.open = true;\n const find = this.view ? getFindState(this.view.state) : null;\n this.findBarEl.matchCount = find?.matches.length ?? 0;\n this.findBarEl.activeIndex = find?.activeIndex ?? 0;\n this.findBarEl.updateComplete.then(() => {\n // Anchor below the Find & replace toolbar button when present; otherwise\n // fall back to the CSS-pinned top-right position.\n const anchor = this.toolbarButton('Find & replace (Ctrl+F)');\n if (anchor) this.positionOverlayBelowAnchor(this.findBarEl, anchor);\n this.findBarEl.focusInput();\n });\n }\n\n public closeFindBar(): void {\n if (this.view) this.view.dispatch(clearFindTr(this.view.state));\n if (this.findBarEl) this.findBarEl.open = false;\n this.view?.focus();\n }\n\n public find(query: string): number {\n if (!this.view) return 0;\n this.view.dispatch(searchTr(this.view.state, query));\n this.scrollToActiveMatch();\n return getFindState(this.view.state).matches.length;\n }\n\n public findNext(): void {\n if (!this.view) return;\n this.view.dispatch(findStepTr(this.view.state, 'next'));\n this.scrollToActiveMatch();\n }\n\n public findPrev(): void {\n if (!this.view) return;\n this.view.dispatch(findStepTr(this.view.state, 'prev'));\n this.scrollToActiveMatch();\n }\n\n public replace(replacement: string): void {\n if (!this.view) return;\n const tr = replaceActiveTr(this.view.state, replacement);\n if (tr) this.view.dispatch(tr);\n }\n\n public replaceAll(replacement: string): void {\n if (!this.view) return;\n const tr = replaceAllTr(this.view.state, replacement);\n if (tr) this.view.dispatch(tr);\n }\n\n private scrollToActiveMatch(): void {\n if (!this.view) return;\n const find = getFindState(this.view.state);\n const match = find.matches[find.activeIndex];\n if (!match) return;\n this.view.dispatch(\n this.view.state.tr\n .setSelection(TextSelection.create(this.view.state.doc, match.from, match.to))\n .scrollIntoView()\n );\n }\n\n // -------------------------------------------------------------- source view\n\n /** Toggles raw-HTML source editing. Content re-sanitizes on the way back. */\n public toggleSourceView(): void {\n if (this.sourceMode) {\n this.applySourceView(this.sourceViewEl?.currentValue ?? null);\n } else {\n this.sourceMode = true;\n this.updateComplete.then(() => {\n if (this.sourceViewEl) {\n this.sourceViewEl.value = this.getHTML();\n this.sourceViewEl.focusInput();\n }\n });\n }\n }\n\n private applySourceView(htmlContent: string | null): void {\n this.sourceMode = false;\n if (htmlContent !== null) this.setContent(htmlContent, true);\n this.updateComplete.then(() => this.view?.focus());\n }\n\n /** Word and character counts for the current document. */\n public getWordCount(): { words: number; characters: number } {\n return this.view ? countWords(this.view.state.doc) : { words: 0, characters: 0 };\n }\n\n /**\n * Arms the format painter (copies the formatting at the selection) or, if\n * already armed, disarms it. Once armed, the next non-empty selection the\n * user makes receives the copied formatting.\n */\n public toggleFormatPainter(): void {\n if (!this.view) return;\n const tr = isFormatPainterArmed(this.view.state)\n ? disarmFormatPainter(this.view.state)\n : armFormatPainter(this.view.state);\n if (tr) this.view.dispatch(tr);\n this.view.focus();\n }\n\n // ---------------------------------------------------------- export & import\n\n /** The live, styled content element used as the source for exports. */\n private get contentRoot(): HTMLElement | null {\n return (this.view?.dom as HTMLElement | undefined) ?? null;\n }\n\n /** Sanitizes `this.name` (or a fallback) into a safe download basename. */\n private exportFilename(extension: string): string {\n const base =\n (this.name || 'document').replace(/[^\\w.-]+/g, '-').replace(/^-+|-+$/g, '') || 'document';\n return `${base}.${extension}`;\n }\n\n private downloadBlob(content: string, mime: string, filename: string): void {\n const blob = new Blob([content], { type: mime });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = filename;\n anchor.style.display = 'none';\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n // Revoke after the click so the download has a chance to start.\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n\n /**\n * The document as HTML with every style folded into inline `style`\n * attributes — the form email clients (which strip `<style>` blocks and\n * classes) can render. Returns the string; does not download.\n */\n public getInlineStyledHTML(): string {\n const root = this.contentRoot;\n if (!this.view || !root || isDocEmpty(this.view.state.doc)) return '';\n return toInlineStyledHtml(root);\n }\n\n /** Downloads the document as an inline-styled, email-ready `.html` file. */\n public exportInlineHtml(filename?: string): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const doc = `<!DOCTYPE html>\\n<html><head><meta charset=\"utf-8\"></head><body>${body}</body></html>`;\n this.downloadBlob(doc, 'text/html;charset=utf-8', filename ?? this.exportFilename('html'));\n }\n\n /** Downloads the document as a Word-openable `.doc` file. */\n public exportToWord(filename?: string): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const doc = buildWordDocument(body, this.name || 'Document');\n this.downloadBlob(doc, 'application/msword', filename ?? this.exportFilename('doc'));\n }\n\n /**\n * Opens the browser print dialog with a self-contained, print-tuned copy of\n * the document (\"Save as PDF\"). Honours page breaks, embedded images and the\n * base font; optional running header/footer text.\n */\n public exportToPdf(\n options: { header?: string; footer?: string; fontFamily?: string } = {}\n ): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const source = buildPrintDocument(body, { title: this.name || 'Document', ...options });\n\n const frame = document.createElement('iframe');\n frame.setAttribute('aria-hidden', 'true');\n Object.assign(frame.style, {\n position: 'fixed',\n right: '0',\n bottom: '0',\n width: '0',\n height: '0',\n border: '0',\n });\n document.body.appendChild(frame);\n\n const cleanup = (): void => {\n // Delay removal so the browser's print job keeps its document alive.\n setTimeout(() => frame.remove(), 1000);\n };\n\n frame.onload = (): void => {\n const win = frame.contentWindow;\n if (!win) {\n cleanup();\n return;\n }\n win.focus();\n win.addEventListener('afterprint', cleanup, { once: true });\n win.print();\n };\n\n const fdoc = frame.contentDocument;\n if (!fdoc) {\n frame.remove();\n return;\n }\n fdoc.open();\n fdoc.write(source);\n fdoc.close();\n }\n\n /**\n * Imports Word / Google-Docs HTML: normalizes the proprietary markup to\n * clean semantic HTML, then replaces the document. Fidelity note: comments\n * and track-changes are not preserved — the editor has no model for them,\n * and binary `.docx`/`.doc` files are not parsed (export as \"Web Page\" /\n * HTML first, or paste directly, which is handled automatically).\n */\n public importFromWord(html: string, emitChange = true): void {\n if (!html) return;\n const cleaned = isOfficeHtml(html) ? cleanOfficeHtml(html) : html;\n this.setContent(cleaned, emitChange);\n }\n\n /** Opens a file picker for an HTML export and imports it (toolbar action). */\n private importFromWordFile(): void {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.htm,.html,text/html';\n input.style.display = 'none';\n input.addEventListener('change', () => {\n const file = input.files?.[0];\n input.remove();\n if (!file) return;\n file.text().then(text => this.importFromWord(text));\n });\n document.body.appendChild(input);\n input.click();\n }\n\n // -------------------------------------------------------- shortcut help\n\n /** Opens the keyboard shortcut reference (also bound to Mod-/). */\n public openShortcutHelp(): void {\n if (!this.shortcutHelpEl) return;\n this.shortcutHelpEl.open = true;\n this.shortcutHelpEl.focusPanel();\n }\n\n public closeShortcutHelp(): void {\n if (this.shortcutHelpEl) this.shortcutHelpEl.open = false;\n this.view?.focus();\n }\n\n // ------------------------------------------------------------ fullscreen\n\n /** Toggles distraction-free fullscreen mode. Esc exits. */\n public toggleFullscreen(): void {\n this.fullscreen = !this.fullscreen;\n this.view?.focus();\n }\n\n private openLinkEditor(): void {\n if (!this.view || !this.linkEditorEl || this.disabled || this.readonly) return;\n const ts = this.toolbarState ?? computeToolbarState(this.view.state);\n this.linkEditorEl.href = ts.linkHref ?? '';\n this.linkEditorEl.text = '';\n this.linkEditorEl.allowText = ts.selectionEmpty && !ts.linkActive;\n this.linkEditorEl.canRemove = ts.linkActive;\n this.linkEditorEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n this.linkEditorEl.updateComplete.then(() => {\n this.positionOverlay(this.linkEditorEl, 'below');\n this.linkEditorEl.focusInput();\n });\n }\n\n private closeLinkEditor(refocus = true): void {\n if (this.linkEditorEl) this.linkEditorEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private applyLink(href: string, text: string): void {\n if (!this.view) return;\n const { state } = this.view;\n const linkType = state.schema.marks.link;\n if (state.selection.empty && !getMarkRange(state.selection.$from, linkType)) {\n const label = text || href;\n const node = state.schema.text(label, [linkType.create({ href })]);\n this.view.dispatch(state.tr.replaceSelectionWith(node, false).scrollIntoView());\n } else {\n this.execCommand('link', { href });\n }\n this.closeLinkEditor();\n }\n\n // ---------------------------------------------------------------- public\n\n /** The underlying ProseMirror EditorView. Advanced escape hatch. */\n public get pmView(): EditorView | undefined {\n return this.view;\n }\n\n /** Document as ProseMirror JSON. */\n public get json(): Record<string, unknown> | null {\n return this.view ? docToJson(this.view.state.doc) : null;\n }\n\n public set json(value: Record<string, unknown> | null) {\n if (value) this.setContent(value);\n }\n\n public override focus(): void {\n this.view?.focus();\n }\n\n public override blur(): void {\n (this.view?.dom as HTMLElement | undefined)?.blur();\n }\n\n public getHTML(): string {\n return this.view && !isDocEmpty(this.view.state.doc)\n ? docToHtml(this.view.state.doc)\n : '';\n }\n\n public getJSON(): Record<string, unknown> | null {\n return this.json;\n }\n\n public getText(): string {\n return this.view ? docToText(this.view.state.doc) : '';\n }\n\n /**\n * Document as Markdown. Best-effort: structural nodes and Markdown-native\n * marks are converted; color/font marks are dropped to plain text. Use\n * getHTML() when a loss-free representation is required.\n */\n public getMarkdown(): string {\n return this.view && !isDocEmpty(this.view.state.doc)\n ? docToMarkdown(this.view.state.doc)\n : '';\n }\n\n /**\n * Replaces the document with parsed Markdown. Covers the same subset as\n * getMarkdown(): headings, lists, code fences, tables, quotes and the\n * inline marks. The parsed HTML flows through the schema and sanitizer.\n */\n public setMarkdown(markdown: string, emitChange = false): void {\n this.setContent(markdownToHtml(markdown), emitChange);\n }\n\n /** Parses and inserts Markdown at the current selection. */\n public insertMarkdown(markdown: string): void {\n this.insertHTML(markdownToHtml(markdown));\n }\n\n /** Replaces the document. Accepts an HTML string or ProseMirror JSON. */\n public setContent(content: string | Record<string, unknown>, emitChange = false): void {\n if (!this.view) {\n if (typeof content === 'string') this.value = content;\n return;\n }\n let doc =\n typeof content === 'string'\n ? htmlToDoc(defaultSchema, content, this.sanitize)\n : jsonToDoc(defaultSchema, content);\n if (this.singleLine) doc = flattenToSingleParagraph(doc);\n this.view.updateState(this.buildState(doc));\n this.toolbarState = this.snapshotToolbar(this.view.state);\n this.syncingValue = true;\n this.value = isDocEmpty(doc) ? '' : docToHtml(doc);\n this.syncFormValue(doc);\n if (emitChange) {\n this.emit('nile-input', this.buildChangeDetail(doc));\n this.emit('nile-change', this.buildChangeDetail(doc));\n }\n }\n\n public clear(): void {\n this.setContent('');\n }\n\n /** Parses and inserts HTML at the current selection. */\n public insertHTML(htmlContent: string): void {\n if (!this.view) return;\n const slice = htmlToSlice(defaultSchema, htmlContent, this.sanitize);\n this.view.dispatch(this.view.state.tr.replaceSelection(slice).scrollIntoView());\n this.view.focus();\n }\n\n /** Runs a named editor command. Returns whether the command applied. */\n public execCommand(name: string, attrs?: CommandAttrs): boolean {\n if (!this.view) return false;\n const command = getCommand(this.view.state, name as CommandName, attrs);\n if (!command) return false;\n const applied = command(this.view.state, this.view.dispatch, this.view);\n this.view.focus();\n return applied;\n }\n\n /** True when the given mark/block command is active at the selection. */\n public isCommandActive(name: string): boolean {\n const ts = this.toolbarState;\n if (!ts) return false;\n switch (name) {\n case 'bold':\n return ts.bold;\n case 'italic':\n return ts.italic;\n case 'underline':\n return ts.underline;\n case 'strike':\n return ts.strike;\n case 'code':\n return ts.code;\n case 'link':\n return ts.linkActive;\n case 'bulletList':\n return ts.inBulletList;\n case 'orderedList':\n return ts.inOrderedList;\n case 'blockquote':\n return ts.inBlockquote;\n default:\n return false;\n }\n }\n\n // ---------------------------------------------------------------- render\n\n private handleCommand(event: CustomEvent<WysiwygCommandDetail>): void {\n event.stopPropagation();\n const { name, attrs } = event.detail;\n if (name === 'openLink') {\n this.openLinkEditor();\n return;\n }\n if (name === 'openImage') {\n this.openImagePanel();\n return;\n }\n if (name === 'openEmbed') {\n this.openEmbedPanel();\n return;\n }\n if (name === 'openBookmark') {\n this.openBookmarkPanel();\n return;\n }\n if (name === 'toggleShowBlocks') {\n this.showBlocks = !this.showBlocks;\n this.view?.focus();\n return;\n }\n if (name === 'toggleSource') {\n this.toggleSourceView();\n return;\n }\n if (name === 'togglePastePlainText') {\n this.pasteAsPlainText = !this.pasteAsPlainText;\n this.view?.focus();\n return;\n }\n if (name === 'toggleFullscreen') {\n this.toggleFullscreen();\n return;\n }\n if (name === 'openShortcutHelp') {\n this.openShortcutHelp();\n return;\n }\n if (name === 'openSpecialChars') {\n this.openSpecialChars();\n return;\n }\n if (name === 'openEmoji') {\n this.openEmojiPicker();\n return;\n }\n if (name === 'openFind') {\n this.openFindBar();\n return;\n }\n if (name === 'exportPdf') {\n this.exportToPdf();\n return;\n }\n if (name === 'exportWord') {\n this.exportToWord();\n return;\n }\n if (name === 'exportInlineHtml') {\n this.exportInlineHtml();\n return;\n }\n if (name === 'importWord') {\n this.importFromWordFile();\n return;\n }\n if (name === 'toggleFormatPainter') {\n this.toggleFormatPainter();\n return;\n }\n if (name === 'openMergeField') {\n this.openInsertMenu('merge');\n return;\n }\n if (name === 'openTemplate') {\n this.openInsertMenu('template');\n return;\n }\n if (name === 'openMarkdown') {\n this.openMarkdownPanel();\n return;\n }\n if (name === 'openMath') {\n this.openMathPanel();\n return;\n }\n this.execCommand(name, attrs);\n }\n\n private handleBaseKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n // The special-chars panel never takes focus, so its Esc lands here.\n if (this.specialCharsEl?.open) {\n this.closeSpecialChars();\n return;\n }\n // Esc exits fullscreen — but only when nothing else claimed it (panels\n // stopPropagation, ProseMirror handlers preventDefault).\n if (!this.fullscreen) return;\n const panelOpen =\n this.linkEditorEl?.open ||\n this.imagePanelEl?.open ||\n this.embedPanelEl?.open ||\n this.bookmarkPanelEl?.open ||\n this.emojiPickerEl?.open ||\n this.findBarEl?.open ||\n this.shortcutHelpEl?.open ||\n this.suggestListEl?.open;\n if (!panelOpen) this.fullscreen = false;\n }\n\n private handleChromeFocusOut(event: FocusEvent): void {\n // Focus left the widget entirely (e.g. clicked the page) while it was\n // parked on chrome like the language picker: close the overlays.\n const related = event.relatedTarget as Node | null;\n if (related && (this.shadowRoot?.contains(related) || this.contains(related))) return;\n if (this.view?.hasFocus()) return;\n this.hasFocus = false;\n this.updateOverlays();\n }\n\n /** The floating insert panels that should dismiss on outside interaction. */\n private get floatingPanels(): Array<{ open: boolean } | undefined> {\n return [\n this.linkEditorEl,\n this.imagePanelEl,\n this.embedPanelEl,\n this.bookmarkPanelEl,\n this.specialCharsEl,\n this.emojiPickerEl,\n this.insertMenuEl,\n this.mathPanelEl,\n this.markdownPanelEl,\n ];\n }\n\n /** Closes every open insert panel. `refocus` returns focus to the editor. */\n private closeAllPanels(refocus = true): void {\n if (this.linkEditorEl?.open) this.closeLinkEditor(refocus);\n if (this.imagePanelEl?.open) this.closeImagePanel(refocus);\n if (this.embedPanelEl?.open) this.closeEmbedPanel(refocus);\n if (this.bookmarkPanelEl?.open) this.closeBookmarkPanel(refocus);\n if (this.specialCharsEl?.open) this.closeSpecialChars(refocus);\n if (this.emojiPickerEl?.open) this.closeEmojiPicker(refocus);\n if (this.insertMenuEl?.open) this.closeInsertMenu(refocus);\n if (this.mathPanelEl?.open) this.closeMathPanel(refocus);\n if (this.markdownPanelEl?.open) this.closeMarkdownPanel(refocus);\n }\n\n /**\n * Closes any open insert panel when the pointer goes down outside of it —\n * whether elsewhere in the editor (e.g. the content area) or off the widget.\n */\n private onOutsidePointerDown = (event: Event): void => {\n const openPanels = this.floatingPanels.filter(\n (p): p is HTMLElement & { open: boolean } => !!p && (p as { open: boolean }).open\n );\n if (!openPanels.length) return;\n const path = event.composedPath();\n // Click landed inside an open panel — leave it be.\n if (openPanels.some(panel => path.includes(panel))) return;\n // Refocus the editor only when the click stayed within the widget.\n const insideWidget =\n path.includes(this) || (!!this.shadowRoot && path.includes(this.shadowRoot));\n this.closeAllPanels(insideWidget);\n };\n\n public render(): TemplateResult {\n const hasAuthoredToolbar = (this.authoredToolbar?.length ?? 0) > 0;\n // Keep the toolbar mounted in source mode too, so the main menu stays put\n // above the split source/preview view instead of being replaced by it. It\n // is disabled there — formatting commands would target the hidden rich-text\n // view — and the source view's own Cancel/Done bar handles exiting.\n const showToolbar =\n (this.toolbar !== 'none' || hasAuthoredToolbar) && !this.readonly;\n return html`\n <div\n class=\"nile-wysiwyg ${this.showBlocks ? 'nile-wysiwyg--show-blocks' : ''}\"\n part=\"base\"\n @wysiwyg-command=${this.handleCommand}\n @focusout=${this.handleChromeFocusOut}\n @keydown=${this.handleBaseKeydown}\n >\n ${showToolbar\n ? html`\n <nile-wysiwyg-toolbar\n part=\"toolbar\"\n exportparts=\"button, select, color, overflow, overflow-panel\"\n config=${this.toolbar}\n .items=${this.authoredToolbar}\n ?disabled=${this.disabled || this.sourceMode}\n .toolbarState=${this.toolbarState}\n ></nile-wysiwyg-toolbar>\n `\n : nothing}\n ${this.sourceMode\n ? html`\n <nile-wysiwyg-source-view\n @wysiwyg-source-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applySourceView(e.detail.html);\n }}\n @wysiwyg-source-cancel=${(e: Event) => {\n e.stopPropagation();\n this.applySourceView(null);\n }}\n ></nile-wysiwyg-source-view>\n `\n : nothing}\n <div\n class=\"nile-wysiwyg__surface\"\n part=\"surface\"\n style=${this.sourceMode ? 'display: none' : ''}\n ></div>\n ${(this.maxLength > 0 || this.showCounter) && !this.sourceMode\n ? html`\n <div\n class=\"nile-wysiwyg__counter ${this.maxLength > 0 &&\n this.counter.characters >= this.maxLength\n ? 'over'\n : ''}\"\n part=\"counter\"\n >\n ${this.maxLength > 0\n ? `${this.counter.characters} / ${this.maxLength}`\n : `${this.counter.words} words · ${this.counter.characters} characters`}\n </div>\n `\n : nothing}\n <nile-wysiwyg-shortcut-help\n @wysiwyg-shortcut-help-close=${(e: Event) => {\n e.stopPropagation();\n this.closeShortcutHelp();\n }}\n ></nile-wysiwyg-shortcut-help>\n <nile-wysiwyg-bubble-menu .items=${this.authoredBubble}></nile-wysiwyg-bubble-menu>\n <nile-wysiwyg-table-menu></nile-wysiwyg-table-menu>\n <nile-wysiwyg-code-menu></nile-wysiwyg-code-menu>\n <nile-wysiwyg-image-menu></nile-wysiwyg-image-menu>\n <nile-wysiwyg-embed-menu></nile-wysiwyg-embed-menu>\n <nile-wysiwyg-special-chars\n @wysiwyg-char-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.insertSpecialChar(e.detail.char);\n }}\n @wysiwyg-char-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeSpecialChars();\n }}\n ></nile-wysiwyg-special-chars>\n <nile-wysiwyg-emoji-picker\n @wysiwyg-emoji-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeEmojiPicker();\n this.insertSpecialChar(e.detail.char);\n }}\n @wysiwyg-emoji-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeEmojiPicker();\n }}\n ></nile-wysiwyg-emoji-picker>\n <nile-wysiwyg-insert-menu\n @wysiwyg-insert-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.handleInsertSelect(e.detail.index);\n }}\n @wysiwyg-insert-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeInsertMenu();\n }}\n ></nile-wysiwyg-insert-menu>\n <nile-wysiwyg-math-panel\n @wysiwyg-math-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applyMath(e.detail.latex, e.detail.display);\n }}\n @wysiwyg-math-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeMathPanel();\n }}\n ></nile-wysiwyg-math-panel>\n <nile-wysiwyg-markdown-panel\n @wysiwyg-markdown-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeMarkdownPanel();\n this.insertMarkdown(e.detail.markdown);\n }}\n @wysiwyg-markdown-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeMarkdownPanel();\n }}\n ></nile-wysiwyg-markdown-panel>\n <nile-wysiwyg-embed-panel\n @wysiwyg-embed-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeEmbedPanel();\n this.execCommand('insertEmbed', {\n src: e.detail.src,\n provider: e.detail.provider,\n });\n }}\n @wysiwyg-embed-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeEmbedPanel();\n }}\n ></nile-wysiwyg-embed-panel>\n <nile-wysiwyg-bookmark-panel\n @wysiwyg-bookmark-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeBookmarkPanel();\n this.execCommand('insertBookmark', { id: e.detail.id });\n }}\n @wysiwyg-bookmark-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeBookmarkPanel();\n }}\n ></nile-wysiwyg-bookmark-panel>\n <nile-wysiwyg-suggest-list\n @wysiwyg-suggest-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.handleSuggestSelect(e.detail.item);\n }}\n ></nile-wysiwyg-suggest-list>\n <nile-wysiwyg-find-bar\n @wysiwyg-find=${(e: CustomEvent) => {\n e.stopPropagation();\n this.find(e.detail.query);\n }}\n @wysiwyg-find-step=${(e: CustomEvent) => {\n e.stopPropagation();\n if (e.detail.direction === 'prev') this.findPrev();\n else this.findNext();\n }}\n @wysiwyg-replace=${(e: CustomEvent) => {\n e.stopPropagation();\n this.replace(e.detail.value);\n }}\n @wysiwyg-replace-all=${(e: CustomEvent) => {\n e.stopPropagation();\n this.replaceAll(e.detail.value);\n }}\n @wysiwyg-find-close=${(e: Event) => {\n e.stopPropagation();\n this.closeFindBar();\n }}\n ></nile-wysiwyg-find-bar>\n <nile-wysiwyg-image-panel\n ?upload-from-computer=${this.uploadFromComputer}\n .maxFileSize=${this.imageMaxFileSize}\n @wysiwyg-image-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n const editing = this.imagePanelEl?.editing;\n this.closeImagePanel();\n this.execCommand(editing ? 'updateImage' : 'insertImage', {\n src: e.detail.src,\n alt: e.detail.alt || null,\n caption: e.detail.caption || null,\n });\n }}\n @wysiwyg-image-file=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeImagePanel();\n this.insertImageFile(e.detail.file, null, {\n alt: e.detail.alt || null,\n caption: e.detail.caption || null,\n });\n }}\n @wysiwyg-image-remove=${(e: Event) => {\n e.stopPropagation();\n this.closeImagePanel();\n this.execCommand('deleteImage');\n }}\n @wysiwyg-image-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeImagePanel();\n }}\n ></nile-wysiwyg-image-panel>\n <nile-wysiwyg-link-editor\n @wysiwyg-link-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applyLink(e.detail.href, e.detail.text);\n }}\n @wysiwyg-link-remove=${(e: Event) => {\n e.stopPropagation();\n this.execCommand('unlink');\n this.closeLinkEditor();\n }}\n @wysiwyg-link-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeLinkEditor();\n }}\n ></nile-wysiwyg-link-editor>\n </div>\n `;\n }\n}\n\nexport default NileWysiwygEditor;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-editor': NileWysiwygEditor;\n }\n}\n"],"names":["SLASH_ITEMS","key","label","hint","command","attrs","level","rows","cols","uploadCounter","_export","NileWysiwygEditor","_j","ni","super","this","value","placeholder","disabled","readonly","toolbar","DEFAULT_TOOLBAR","bubbleMenu","sanitize","singleLine","name","required","allowBase64Images","uploadFromComputer","imageMaxFileSize","mentions","noSlashCommands","noEmoji","maxLength","showCounter","stickyToolbar","snippets","mergeFields","templates","autosaveInterval","pasteAsPlainText","noMarkdownPaste","noTextTransform","fullscreen","showBlocks","hasFocus","sourceMode","counter","words","characters","insertMenuMode","mentionMatch","slashMatch","emojiMatch","activeSuggestSource","suggestDismissed","mentionQueryToken","lastAutosaveValue","defaultValue","syncingValue","pendingChange","previousBodyOverflow","onAnyScroll","bubbleMenuEl","tableMenuEl","codeMenuEl","imageMenuEl","embedMenuEl","forEach","menu","open","painterDragActive","onPainterPointerDown","view","isFormatPainterArmed","state","onPainterPointerUp","requestAnimationFrame","selection","empty","applyTr","applyFormatPainter","dispatch","onOutsidePointerDown","event","openPanels","floatingPanels","filter","p","length","path","composedPath","some","panel","includes","insideWidget","shadowRoot","closeAllPanels","attachInternals","internals","_this","_inherits","_createClass","connectedCallback","hasUpdated","updateComplete","then","mountView","document","addEventListener","capture","passive","syncAuthoredToolbar","syncAuthoredBubble","toolbarObserver","MutationObserver","observe","childList","subtree","attributes","attributeFilter","disconnectedCallback","removeEventListener","_this$surfaceEl","surfaceEl","disconnect","changeTimer","clearTimeout","autosaveTimer","clearInterval","body","style","overflow","destroy","undefined","firstUpdated","nodes","querySelectorAll","next","Array","from","map","el","hasAttribute","getAttribute","icon","item","JSON","stringify","authoredToolbar","authoredBubble","updated","changed","has","docToHtml","doc","setContent","setProps","tr","updateValidity","restartAutosave","toolbarState","snapshotToolbar","updateState","buildState","setInterval","emit","buildChangeDetail","createEditorState","schema","defaultSchema","getPlaceholder","onLinkShortcut","openLinkEditor","onFindShortcut","openFindBar","onShortcutHelp","openShortcutHelp","onImageFiles","files","pos","_iterator","_createForOfIteratorHelper","s","_step","n","done","file","insertImageFile","err","e","f","getTriggers","Object","keys","onChange","match","updateSuggestList","onKeyDown","handleSuggestKey","slashCommands","emoji","getMaxLength","getForcePlainText","getMarkdownPaste","getSanitize","textTransform","_objectSpread","computeToolbarState","formatPainter","htmlToDoc","flattenToSingleParagraph","EditorView","dispatchTransaction","handleTransaction","editable","transformPastedHTML","pasted","cleaned","isOfficeHtml","cleanOfficeHtml","sanitizeHtml","handleDOMEvents","mousedown","closeSpecialChars","closeInsertMenu","focus","updateOverlays","blur","_view","_this5$shadowRoot","related","relatedTarget","contains","flushChange","closeSuggestList","role","nodeViews","task_item","node","getPos","TaskItemView","image","ImageView","figure","FigureView","embed","EmbedView","styleBlock","StyleBlockView","math","MathView","mathRenderer","dom","countWords","syncFormValue","newState","apply","selectionSet","findBarEl","find","getFindState","matchCount","matches","activeIndex","docChanged","detail","scheduleChange","isDocEmpty","json","docToJson","content","setTimeout","setFormValue","_this$surfaceEl2","setValidity","valueMissing","formResetCallback","formDisabledCallback","checkValidity","reportValidity","positionOverlay","placement","baseEl","coords","coordsAtPos","baseRect","getBoundingClientRect","left","Math","max","min","width","offsetWidth","top","offsetHeight","bottom","positionOverlayBelowAnchor","anchor","anchorRect","right","toolbarButton","_this$toolbarEl$shado","_this$toolbarEl","toolbarEl","querySelector","_this$linkEditorEl","_this$imagePanelEl","_this$embedPanelEl","_this$bookmarkPanelEl","_this$emojiPickerEl","_this7","panelOpen","linkEditorEl","imagePanelEl","embedPanelEl","bookmarkPanelEl","emojiPickerEl","show","selectionEmpty","imageSelected","embedSelected","showTable","inTable","_this$toolbarState$co","showCode","inCodeBlock","language","codeBlockLanguage","showImage","showEmbed","openSpecialChars","specialCharsEl","_this$view2","refocus","arguments","insertSpecialChar","char","insertText","scrollIntoView","openInsertMenu","mode","_this9","insertMenuEl","heading","emptyText","items","description","id","t","handleInsertSelect","index","field","execCommand","template","insertHTML","html","insertMergeField","changeCase","textCase","openMathPanel","mathPanelEl","reset","focusInput","closeMathPanel","_this$view4","openMarkdownPanel","markdownPanelEl","closeMarkdownPanel","applyMath","latex","display","mathDisplay","insertMath","openEmojiPicker","closeEmojiPicker","openEmbedPanel","closeEmbedPanel","openBookmarkPanel","closeBookmarkPanel","_this$view8","openImagePanel","_i$node$attrs$alt","_this15","info","selectedImageInfo","prefill","src","alt","caption","isFigure","textContent","closeImagePanel","_this$view9","insertImageAt","$pos","resolve","size","setSelection","TextSelection","near","_insertImageFile","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_args","meta","_context2","abrupt","metaAlt","metaCaption","_n$caption","insert","defaultPrevented","uploadHandler","at","setMeta","imageUploadKey","add","prev","mappedPos","findUploadPos","remove","_ref","t0","error","Promise","reject","reader","FileReader","onload","result","onerror","readAsDataURL","readFileAsDataURL","stop","dismissKeyFor","source","concat","trigger","suggestListEl","selectCurrent","mention","active","slash","_this$mentions$t$trig","all","query","toLowerCase","token","provide","isArray","i","snippetItems","EMOJI","slice","resetActive","handleSuggestSelect","_this$mentionMatch2","_this$slashMatch2","_this$emojiMatch2","create","replaceWith","to","text","startsWith","snippet","slashItem","_i$matches$length","_i$activeIndex","_this18","closeFindBar","clearFindTr","_this$view12","searchTr","scrollToActiveMatch","findNext","findStepTr","findPrev","replace","replacement","replaceActiveTr","replaceAll","replaceAllTr","toggleSourceView","applySourceView","sourceViewEl","currentValue","getHTML","htmlContent","_this20$view","getWordCount","toggleFormatPainter","disarmFormatPainter","armFormatPainter","get","_this$view$dom","_this$view13","exportFilename","extension","downloadBlob","mime","filename","blob","Blob","type","url","URL","createObjectURL","createElement","href","download","appendChild","click","revokeObjectURL","getInlineStyledHTML","root","contentRoot","toInlineStyledHtml","exportInlineHtml","exportToWord","buildWordDocument","exportToPdf","options","buildPrintDocument","title","frame","setAttribute","assign","position","height","border","cleanup","win","contentWindow","once","print","fdoc","contentDocument","write","close","importFromWord","emitChange","importFromWordFile","input","accept","_i$files","shortcutHelpEl","focusPanel","closeShortcutHelp","toggleFullscreen","_this$toolbarState","_i$linkHref","_this22","ts","linkHref","allowText","linkActive","canRemove","closeLinkEditor","applyLink","linkType","marks","link","getMarkRange","$from","replaceSelectionWith","set","getJSON","getText","docToText","getMarkdown","docToMarkdown","setMarkdown","markdown","markdownToHtml","insertMarkdown","jsonToDoc","clear","htmlToSlice","replaceSelection","getCommand","applied","isCommandActive","bold","italic","underline","strike","code","inBulletList","inOrderedList","inBlockquote","handleCommand","stopPropagation","_i$detail","_this$view19","_this$view20","handleBaseKeydown","_this$specialCharsEl","handleChromeFocusOut","render","hasAuthoredToolbar","_this$authoredToolbar","showToolbar","_templateObject","_taggedTemplateLiteral","_templateObject2","nothing","_templateObject3","_templateObject4","provider","direction","editing","styles","NileElement","formAssociated","__decorate","property","String","prototype","Boolean","reflect","attribute","Number","converter","fromAttribute","parsed","parse","out","_i9","_Object$keys","_unused","toAttribute","_unused2","_unused3","_unused4","customElement"],"mappings":"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"}
|