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