@aquera/nile-elements 1.9.8 → 1.9.10
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 +7 -0
- package/dist/{index-df196058.cjs.js → index-50880eb7.cjs.js} +2 -2
- package/dist/index-50880eb7.cjs.js.map +1 -0
- package/dist/index-6832c52b.cjs.js +2 -0
- package/dist/index-6832c52b.cjs.js.map +1 -0
- package/dist/index-747d1880.cjs.js +2 -0
- package/dist/index-747d1880.cjs.js.map +1 -0
- package/dist/{index-249de90a.esm.js → index-7b1c9857.esm.js} +1 -1
- package/dist/index-a487d8b4.esm.js +1 -0
- package/dist/index-ba47645d.esm.js +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1589 -1277
- package/dist/katex-44476ab4.esm.js +1 -0
- package/dist/katex-f4186f87.cjs.js +2 -0
- package/dist/katex-f4186f87.cjs.js.map +1 -0
- package/dist/nile-checkbox/nile-checkbox.cjs.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.cjs.js.map +1 -1
- package/dist/nile-checkbox/nile-checkbox.esm.js +1 -1
- package/dist/nile-color-picker/index.cjs.js +1 -1
- package/dist/nile-color-picker/index.esm.js +1 -1
- package/dist/nile-color-picker/nile-color-picker.cjs.js +1 -1
- package/dist/nile-color-picker/nile-color-picker.cjs.js.map +1 -1
- package/dist/nile-color-picker/nile-color-picker.esm.js +1 -1
- package/dist/nile-combobox/index.cjs.js +1 -1
- package/dist/nile-combobox/index.esm.js +1 -1
- package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
- package/dist/nile-combobox/nile-combobox.esm.js +1 -1
- package/dist/nile-detail/index.cjs.js +1 -1
- package/dist/nile-detail/index.esm.js +1 -1
- package/dist/nile-detail/nile-detail.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.esm.js +1 -1
- package/dist/nile-nav-tab/nile-nav-tab.cjs.js +1 -1
- package/dist/nile-nav-tab/nile-nav-tab.cjs.js.map +1 -1
- package/dist/nile-nav-tab/nile-nav-tab.css.cjs.js +1 -1
- package/dist/nile-nav-tab/nile-nav-tab.css.cjs.js.map +1 -1
- package/dist/nile-nav-tab/nile-nav-tab.css.esm.js +11 -0
- package/dist/nile-nav-tab/nile-nav-tab.esm.js +1 -1
- package/dist/nile-nav-tab-group/nile-nav-tab-group.css.cjs.js +1 -1
- package/dist/nile-nav-tab-group/nile-nav-tab-group.css.cjs.js.map +1 -1
- package/dist/nile-nav-tab-group/nile-nav-tab-group.css.esm.js +1 -2
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/commands.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/create-state.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/index.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/index.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/keymap.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/image.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/math-view.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/style-block-view.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/style-block-view.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/style-block-view.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/sanitize.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/schema.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/schema.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/schema.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/selection-state.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/index.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/index.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/math/katex-renderer.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/math/katex-renderer.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/math/katex-renderer.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 +22 -3
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +7 -6
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js.map +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 +33 -54
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.esm.js +83 -95
- package/dist/nile-wysiwyg-editor/types.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/types.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/types.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/bubble-item.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/bubble-item.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/bubble-item.esm.js +1 -0
- 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 +23 -15
- 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 +3 -3
- 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 +2 -2
- 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 +0 -3
- package/dist/nile-wysiwyg-editor/ui/preview.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/preview.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/preview.esm.js +8 -0
- 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 +225 -24
- 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 +115 -13
- 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 +13 -12
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/nile-checkbox/nile-checkbox.js +1 -0
- package/dist/src/nile-checkbox/nile-checkbox.js.map +1 -1
- package/dist/src/nile-color-picker/nile-color-picker.d.ts +1 -0
- package/dist/src/nile-color-picker/nile-color-picker.js +1 -0
- package/dist/src/nile-color-picker/nile-color-picker.js.map +1 -1
- package/dist/src/nile-nav-tab/nile-nav-tab.css.js +11 -0
- package/dist/src/nile-nav-tab/nile-nav-tab.css.js.map +1 -1
- package/dist/src/nile-nav-tab/nile-nav-tab.d.ts +2 -0
- package/dist/src/nile-nav-tab/nile-nav-tab.js +13 -0
- package/dist/src/nile-nav-tab/nile-nav-tab.js.map +1 -1
- package/dist/src/nile-nav-tab-group/nile-nav-tab-group.css.js +1 -2
- package/dist/src/nile-nav-tab-group/nile-nav-tab-group.css.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/index.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/index.js +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/index.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js +3 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.d.ts +19 -4
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js +23 -18
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.d.ts +8 -3
- package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js +41 -4
- package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/plugins/style-block-view.d.ts +17 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/style-block-view.js +174 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/style-block-view.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js +33 -2
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.js +49 -8
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.d.ts +12 -0
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.js +76 -8
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/schema.d.ts +2 -0
- package/dist/src/nile-wysiwyg-editor/engine/schema.js +154 -2
- package/dist/src/nile-wysiwyg-editor/engine/schema.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/index.d.ts +5 -0
- package/dist/src/nile-wysiwyg-editor/index.js +3 -0
- package/dist/src/nile-wysiwyg-editor/index.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/math/katex-renderer.d.ts +38 -0
- package/dist/src/nile-wysiwyg-editor/math/katex-renderer.js +40 -0
- package/dist/src/nile-wysiwyg-editor/math/katex-renderer.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +22 -3
- 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 +36 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +125 -8
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js +5 -2
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.d.ts +2 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.d.ts +55 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.js +79 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js +33 -54
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.d.ts +50 -2
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js +158 -102
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/types.d.ts +4 -2
- package/dist/src/nile-wysiwyg-editor/types.js +2 -2
- package/dist/src/nile-wysiwyg-editor/types.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/bubble-item.d.ts +48 -0
- package/dist/src/nile-wysiwyg-editor/ui/bubble-item.js +69 -0
- package/dist/src/nile-wysiwyg-editor/ui/bubble-item.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.d.ts +17 -2
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +128 -35
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.d.ts +2 -1
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +4 -3
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +0 -3
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/preview.d.ts +20 -0
- package/dist/src/nile-wysiwyg-editor/ui/preview.js +44 -0
- package/dist/src/nile-wysiwyg-editor/ui/preview.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/source-view.d.ts +35 -3
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js +337 -24
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +9 -0
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.d.ts +13 -2
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +166 -10
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +10 -8
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/xml-25c4108a.esm.js +1 -0
- package/dist/xml-90fd974e.cjs.js +2 -0
- package/dist/xml-90fd974e.cjs.js.map +1 -0
- package/package.json +2 -1
- package/rollup.config.js +1 -0
- package/src/index.ts +8 -0
- package/src/nile-checkbox/nile-checkbox.ts +1 -0
- package/src/nile-color-picker/nile-color-picker.ts +1 -0
- package/src/nile-nav-tab/nile-nav-tab.css.ts +11 -0
- package/src/nile-nav-tab/nile-nav-tab.ts +17 -0
- package/src/nile-nav-tab-group/nile-nav-tab-group.css.ts +1 -2
- package/src/nile-wysiwyg-editor/engine/index.ts +1 -0
- package/src/nile-wysiwyg-editor/engine/plugins/embed-view.ts +3 -0
- package/src/nile-wysiwyg-editor/engine/plugins/embeds.ts +26 -20
- package/src/nile-wysiwyg-editor/engine/plugins/math-view.ts +45 -4
- package/src/nile-wysiwyg-editor/engine/plugins/style-block-view.ts +178 -0
- package/src/nile-wysiwyg-editor/engine/plugins/tables.ts +34 -2
- package/src/nile-wysiwyg-editor/engine/pm.test.ts +58 -8
- package/src/nile-wysiwyg-editor/engine/sanitize.ts +71 -8
- package/src/nile-wysiwyg-editor/engine/schema.ts +158 -7
- package/src/nile-wysiwyg-editor/index.ts +5 -0
- package/src/nile-wysiwyg-editor/math/katex-renderer.ts +59 -0
- package/src/nile-wysiwyg-editor/math/katex.d.ts +17 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +22 -3
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.ts +5 -2
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +142 -7
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.ts +2 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.ts +68 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts +33 -54
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.ts +202 -108
- package/src/nile-wysiwyg-editor/types.ts +6 -4
- package/src/nile-wysiwyg-editor/ui/bubble-item.ts +60 -0
- package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +147 -40
- package/src/nile-wysiwyg-editor/ui/embed-panel.ts +4 -3
- package/src/nile-wysiwyg-editor/ui/math-panel.ts +0 -3
- package/src/nile-wysiwyg-editor/ui/preview.ts +42 -0
- package/src/nile-wysiwyg-editor/ui/source-view.ts +339 -31
- package/src/nile-wysiwyg-editor/ui/suggest-list.ts +10 -0
- package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +160 -10
- package/src/nile-wysiwyg-editor/ui/table-menu.ts +10 -8
- package/vscode-html-custom-data.json +75 -6
- package/dist/index-353172ed.esm.js +0 -1
- package/dist/index-b387a9f4.cjs.js +0 -2
- package/dist/index-b387a9f4.cjs.js.map +0 -1
- package/dist/index-cc1385e0.cjs.js +0 -2
- package/dist/index-cc1385e0.cjs.js.map +0 -1
- package/dist/index-dedc38a6.esm.js +0 -1
- package/dist/index-df196058.cjs.js.map +0 -1
|
@@ -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 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 './ui/link-editor';\nimport './ui/bubble-menu';\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 /** 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 }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('pointerdown', this.onOutsidePointerDown, true);\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 this.mountView();\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 math: node => new MathView(node, this.mathRenderer),\n },\n });\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 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.\n if (tr.selectionSet && !newState.selection.empty && isFormatPainterArmed(newState)) {\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?.textarea?.value ?? 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 showToolbar = this.toolbar !== 'none' && !this.readonly && !this.sourceMode;\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\"\n config=${this.toolbar}\n ?disabled=${this.disabled}\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></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","si","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","onOutsidePointerDown","event","openPanels","floatingPanels","filter","p","open","length","path","composedPath","some","panel","includes","insideWidget","shadowRoot","closeAllPanels","attachInternals","internals","_this","_inherits","_j","_createClass","connectedCallback","hasUpdated","view","updateComplete","then","mountView","document","addEventListener","disconnectedCallback","removeEventListener","changeTimer","clearTimeout","autosaveTimer","clearInterval","body","style","overflow","destroy","undefined","firstUpdated","updated","changed","has","docToHtml","state","doc","setContent","setProps","dispatch","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","isFormatPainterArmed","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","attributes","role","nodeViews","task_item","node","getPos","TaskItemView","image","ImageView","figure","FigureView","embed","EmbedView","math","MathView","mathRenderer","countWords","syncFormValue","newState","apply","selectionSet","selection","empty","applyTr","applyFormatPainter","findBarEl","find","getFindState","matchCount","matches","activeIndex","docChanged","detail","scheduleChange","isDocEmpty","json","docToJson","content","setTimeout","setFormValue","_this$surfaceEl","setValidity","valueMissing","formResetCallback","formDisabledCallback","checkValidity","reportValidity","positionOverlay","el","placement","baseEl","from","coords","coordsAtPos","baseRect","getBoundingClientRect","left","Math","max","min","width","offsetWidth","top","offsetHeight","bottom","positionOverlayBelowAnchor","anchor","anchorRect","right","concat","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","map","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","openEmbedPanel","closeEmbedPanel","openBookmarkPanel","closeBookmarkPanel","_this$view8","openImagePanel","info","selectedImageInfo","prefill","src","alt","_i$node$attrs$alt","caption","isFigure","textContent","closeImagePanel","_this$view9","insertImageAt","$pos","resolve","size","setSelection","TextSelection","near","_insertImageFile","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_args","meta","_context2","next","abrupt","metaAlt","_n$alt","metaCaption","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","trigger","suggestListEl","selectCurrent","mention","active","slash","_this$mentions$t$trig","all","query","toLowerCase","item","token","provide","Array","isArray","i","snippetItems","EMOJI","slice","resetActive","handleSuggestSelect","_this$mentionMatch2","_this$slashMatch2","_this$emojiMatch2","nodes","create","replaceWith","to","text","startsWith","snippet","slashItem","closeFindBar","clearFindTr","_this$view12","searchTr","scrollToActiveMatch","findNext","findStepTr","findPrev","replace","replacement","replaceActiveTr","replaceAll","replaceAllTr","toggleSourceView","applySourceView","sourceViewEl","textarea","getHTML","htmlContent","_this20$view","getWordCount","toggleFormatPainter","disarmFormatPainter","armFormatPainter","get","_this$view$dom","_this$view13","dom","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","pmView","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","showToolbar","_templateObject","_taggedTemplateLiteral","_templateObject2","nothing","_templateObject3","_templateObject4","provider","direction","editing","styles","NileElement","formAssociated","__decorate","property","String","prototype","Boolean","reflect","attribute","Number","converter","fromAttribute","parsed","JSON","parse","out","_i9","_Object$keys","_unused","toAttribute","stringify","_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\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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"}
|