@aquera/nile-elements 1.9.5 → 1.9.7
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 +9 -0
- package/dist/index-178e1e57.cjs.js +2 -0
- package/dist/index-178e1e57.cjs.js.map +1 -0
- package/dist/index-1faa963c.esm.js +1 -0
- package/dist/index-249de90a.esm.js +1 -0
- package/dist/index-353172ed.esm.js +1 -0
- package/dist/index-6f3fa4ab.esm.js +1 -0
- package/dist/index-89c520e9.cjs.js +5 -0
- package/dist/index-89c520e9.cjs.js.map +1 -0
- package/dist/index-920675c4.esm.js +1 -0
- package/dist/index-b387a9f4.cjs.js +2 -0
- package/dist/index-b387a9f4.cjs.js.map +1 -0
- package/dist/index-cc1385e0.cjs.js +2 -0
- package/dist/index-cc1385e0.cjs.js.map +1 -0
- package/dist/index-dedc38a6.esm.js +1 -0
- package/dist/index-df196058.cjs.js +2 -0
- package/dist/index-df196058.cjs.js.map +1 -0
- package/dist/index-f956f56d.cjs.js +7 -0
- package/dist/index-f956f56d.cjs.js.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +3802 -664
- package/dist/internal/glyph.cjs.js +2 -0
- package/dist/internal/glyph.cjs.js.map +1 -0
- package/dist/internal/glyph.esm.js +5 -0
- 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-chip/nile-chip.css.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.css.cjs.js.map +1 -1
- package/dist/nile-chip/nile-chip.css.esm.js +8 -1
- package/dist/nile-code-editor/extensionSetup.cjs.js +7 -7
- package/dist/nile-code-editor/extensionSetup.cjs.js.map +1 -1
- package/dist/nile-code-editor/extensionSetup.esm.js +1 -1
- package/dist/nile-code-editor/index.cjs.js +1 -1
- package/dist/nile-code-editor/index.esm.js +1 -1
- package/dist/nile-code-editor/nile-code-editor.cjs.js +2 -2
- package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
- package/dist/nile-code-editor/nile-code-editor.esm.js +4 -4
- 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/index.esm.js +1 -1
- package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
- package/dist/nile-combobox/nile-combobox.esm.js +1 -1
- package/dist/nile-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/index.esm.js +1 -1
- package/dist/nile-detail/nile-detail.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.esm.js +1 -1
- package/dist/nile-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-hero/nile-hero.cjs.js +1 -1
- package/dist/nile-hero/nile-hero.cjs.js.map +1 -1
- package/dist/nile-hero/nile-hero.css.cjs.js +1 -1
- package/dist/nile-hero/nile-hero.css.cjs.js.map +1 -1
- package/dist/nile-hero/nile-hero.css.esm.js +14 -14
- package/dist/nile-hero/nile-hero.esm.js +1 -1
- package/dist/nile-hero-header/nile-hero-header.cjs.js +1 -1
- package/dist/nile-hero-header/nile-hero-header.cjs.js.map +1 -1
- package/dist/nile-hero-header/nile-hero-header.css.cjs.js +1 -1
- package/dist/nile-hero-header/nile-hero-header.css.cjs.js.map +1 -1
- package/dist/nile-hero-header/nile-hero-header.css.esm.js +11 -11
- package/dist/nile-hero-header/nile-hero-header.esm.js +3 -3
- 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-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-rich-text-editor/index.cjs.js +1 -1
- package/dist/nile-rich-text-editor/index.esm.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.esm.js +70 -0
- package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
- package/dist/nile-rich-text-editor/nile-rte-image.cjs.js +3 -0
- package/dist/nile-rich-text-editor/nile-rte-image.cjs.js.map +1 -0
- package/dist/nile-rich-text-editor/nile-rte-image.esm.js +96 -0
- 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-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/emoji.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/emoji.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/emoji.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/commands.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/create-state.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/export.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/export.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/export.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/index.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/index.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/index.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/inputrules.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/keymap.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/markdown-parse.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/markdown-parse.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/markdown-parse.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/markdown.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/markdown.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/markdown.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/office-paste.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/office-paste.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/office-paste.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image-view.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/link.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/math-view.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/max-length.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/paste.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/single-line.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/task-list.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/task-list.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/task-list.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/sanitize.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/schema.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/schema.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/schema.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/selection-state.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/serializer.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/index.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/index.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/index.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.esm.js +780 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +97 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.esm.js +244 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.esm.js +137 -0
- package/dist/nile-wysiwyg-editor/types.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/types.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/types.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.esm.js +97 -0
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.esm.js +67 -0
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +65 -0
- package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/embed-menu.esm.js +64 -0
- package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/embed-panel.esm.js +68 -0
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.esm.js +96 -0
- package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/find-replace.esm.js +112 -0
- package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/image-menu.esm.js +64 -0
- package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/image-panel.esm.js +171 -0
- package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/insert-menu.esm.js +90 -0
- package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/link-editor.esm.js +114 -0
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.esm.js +80 -0
- package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/math-panel.esm.js +92 -0
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.esm.js +147 -0
- package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +79 -0
- package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/special-chars.esm.js +96 -0
- package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/suggest-list.esm.js +67 -0
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.esm.js +100 -0
- package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/table-menu.esm.js +58 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.js +19 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal/glyph.d.ts +6 -0
- package/dist/src/internal/glyph.js +13 -0
- package/dist/src/internal/glyph.js.map +1 -0
- package/dist/src/nile-chip/nile-chip.css.js +8 -1
- package/dist/src/nile-chip/nile-chip.css.js.map +1 -1
- package/dist/src/nile-code-editor/nile-code-editor.js +3 -3
- package/dist/src/nile-code-editor/nile-code-editor.js.map +1 -1
- package/dist/src/nile-hero/nile-hero.css.js +12 -12
- package/dist/src/nile-hero/nile-hero.css.js.map +1 -1
- package/dist/src/nile-hero/nile-hero.js +1 -1
- package/dist/src/nile-hero/nile-hero.js.map +1 -1
- package/dist/src/nile-hero-header/nile-hero-header.css.js +9 -9
- package/dist/src/nile-hero-header/nile-hero-header.css.js.map +1 -1
- package/dist/src/nile-hero-header/nile-hero-header.js +1 -1
- package/dist/src/nile-hero-header/nile-hero-header.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +70 -0
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.d.ts +3 -0
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +81 -3
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rte-image.d.ts +87 -0
- package/dist/src/nile-rich-text-editor/nile-rte-image.js +1073 -0
- package/dist/src/nile-rich-text-editor/nile-rte-image.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/emoji.d.ts +5 -0
- package/dist/src/nile-wysiwyg-editor/emoji.js +138 -0
- package/dist/src/nile-wysiwyg-editor/emoji.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/commands.d.ts +69 -0
- package/dist/src/nile-wysiwyg-editor/engine/commands.js +863 -0
- package/dist/src/nile-wysiwyg-editor/engine/commands.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/create-state.d.ts +35 -0
- package/dist/src/nile-wysiwyg-editor/engine/create-state.js +67 -0
- package/dist/src/nile-wysiwyg-editor/engine/create-state.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.d.ts +38 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.js +208 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.test.js +96 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/index.d.ts +37 -0
- package/dist/src/nile-wysiwyg-editor/engine/index.js +29 -0
- package/dist/src/nile-wysiwyg-editor/engine/index.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/inputrules.d.ts +12 -0
- package/dist/src/nile-wysiwyg-editor/engine/inputrules.js +144 -0
- package/dist/src/nile-wysiwyg-editor/engine/inputrules.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/keymap.d.ts +15 -0
- package/dist/src/nile-wysiwyg-editor/engine/keymap.js +94 -0
- package/dist/src/nile-wysiwyg-editor/engine/keymap.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.d.ts +22 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.js +287 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.test.js +106 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown.d.ts +10 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown.js +162 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/office-paste.d.ts +13 -0
- package/dist/src/nile-wysiwyg-editor/engine/office-paste.js +182 -0
- package/dist/src/nile-wysiwyg-editor/engine/office-paste.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/code-highlight.d.ts +10 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/code-highlight.js +165 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/code-highlight.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.d.ts +17 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js +69 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.d.ts +17 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js +96 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/find-replace.d.ts +26 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/find-replace.js +123 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/find-replace.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/format-painter.d.ts +28 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/format-painter.js +72 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/format-painter.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.d.ts +41 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js +176 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image.d.ts +15 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image.js +64 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/link.d.ts +11 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js +42 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.d.ts +18 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js +46 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/max-length.d.ts +7 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/max-length.js +26 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/max-length.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.d.ts +31 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js +55 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/placeholder.d.ts +7 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/placeholder.js +25 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/placeholder.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/single-line.d.ts +10 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/single-line.js +48 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/single-line.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/suggestions.d.ts +29 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/suggestions.js +87 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/suggestions.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.d.ts +8 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js +11 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/task-list.d.ts +16 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/task-list.js +49 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/task-list.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.js +883 -0
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/productivity.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/productivity.test.js +129 -0
- package/dist/src/nile-wysiwyg-editor/engine/productivity.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.d.ts +13 -0
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.js +155 -0
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/schema.d.ts +20 -0
- package/dist/src/nile-wysiwyg-editor/engine/schema.js +823 -0
- package/dist/src/nile-wysiwyg-editor/engine/schema.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/selection-state.d.ts +70 -0
- package/dist/src/nile-wysiwyg-editor/engine/selection-state.js +138 -0
- package/dist/src/nile-wysiwyg-editor/engine/selection-state.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/serializer.d.ts +18 -0
- package/dist/src/nile-wysiwyg-editor/engine/serializer.js +63 -0
- package/dist/src/nile-wysiwyg-editor/engine/serializer.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/index.d.ts +3 -0
- package/dist/src/nile-wysiwyg-editor/index.js +3 -0
- package/dist/src/nile-wysiwyg-editor/index.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +782 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.d.ts +364 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +2038 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js +636 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js +2 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.d.ts +6 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js +251 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.d.ts +41 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js +700 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/types.d.ts +49 -0
- package/dist/src/nile-wysiwyg-editor/types.js +8 -0
- package/dist/src/nile-wysiwyg-editor/types.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.d.ts +20 -0
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js +159 -0
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.d.ts +21 -0
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +125 -0
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.d.ts +18 -0
- package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js +107 -0
- package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.d.ts +19 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js +123 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.d.ts +27 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +146 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.d.ts +21 -0
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js +154 -0
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.d.ts +26 -0
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.js +178 -0
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.d.ts +18 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.js +129 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.d.ts +56 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.js +349 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.d.ts +25 -0
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js +142 -0
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.d.ts +30 -0
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.js +189 -0
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.d.ts +24 -0
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js +144 -0
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.d.ts +31 -0
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +172 -0
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.d.ts +30 -0
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js +296 -0
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/source-view.d.ts +19 -0
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js +120 -0
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.d.ts +20 -0
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.js +199 -0
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.d.ts +31 -0
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +133 -0
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.d.ts +23 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +177 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.d.ts +16 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +101 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -0
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -2
- package/src/index.ts +57 -1
- package/src/internal/glyph.ts +13 -0
- package/src/nile-chip/nile-chip.css.ts +8 -1
- package/src/nile-code-editor/nile-code-editor.ts +3 -3
- package/src/nile-hero/nile-hero.css.ts +12 -12
- package/src/nile-hero/nile-hero.ts +1 -1
- package/src/nile-hero-header/nile-hero-header.css.ts +9 -9
- package/src/nile-hero-header/nile-hero-header.ts +1 -1
- package/src/nile-rich-text-editor/nile-rich-text-editor.css.ts +70 -0
- package/src/nile-rich-text-editor/nile-rich-text-editor.ts +89 -3
- package/src/nile-rich-text-editor/nile-rte-image.ts +1132 -0
- package/src/nile-wysiwyg-editor/emoji.ts +137 -0
- package/src/nile-wysiwyg-editor/engine/commands.ts +1035 -0
- package/src/nile-wysiwyg-editor/engine/create-state.ts +117 -0
- package/src/nile-wysiwyg-editor/engine/export.test.ts +113 -0
- package/src/nile-wysiwyg-editor/engine/export.ts +242 -0
- package/src/nile-wysiwyg-editor/engine/index.ts +69 -0
- package/src/nile-wysiwyg-editor/engine/inputrules.ts +169 -0
- package/src/nile-wysiwyg-editor/engine/keymap.ts +146 -0
- package/src/nile-wysiwyg-editor/engine/markdown-parse.test.ts +148 -0
- package/src/nile-wysiwyg-editor/engine/markdown-parse.ts +337 -0
- package/src/nile-wysiwyg-editor/engine/markdown.ts +165 -0
- package/src/nile-wysiwyg-editor/engine/office-paste.ts +199 -0
- package/src/nile-wysiwyg-editor/engine/plugins/code-highlight.ts +173 -0
- package/src/nile-wysiwyg-editor/engine/plugins/embed-view.ts +85 -0
- package/src/nile-wysiwyg-editor/engine/plugins/embeds.ts +99 -0
- package/src/nile-wysiwyg-editor/engine/plugins/find-replace.ts +155 -0
- package/src/nile-wysiwyg-editor/engine/plugins/format-painter.ts +80 -0
- package/src/nile-wysiwyg-editor/engine/plugins/image-view.ts +220 -0
- package/src/nile-wysiwyg-editor/engine/plugins/image.ts +80 -0
- package/src/nile-wysiwyg-editor/engine/plugins/link.ts +42 -0
- package/src/nile-wysiwyg-editor/engine/plugins/math-view.ts +56 -0
- package/src/nile-wysiwyg-editor/engine/plugins/max-length.ts +24 -0
- package/src/nile-wysiwyg-editor/engine/plugins/paste.ts +74 -0
- package/src/nile-wysiwyg-editor/engine/plugins/placeholder.ts +24 -0
- package/src/nile-wysiwyg-editor/engine/plugins/single-line.ts +47 -0
- package/src/nile-wysiwyg-editor/engine/plugins/suggestions.ts +110 -0
- package/src/nile-wysiwyg-editor/engine/plugins/tables.ts +12 -0
- package/src/nile-wysiwyg-editor/engine/plugins/task-list.ts +65 -0
- package/src/nile-wysiwyg-editor/engine/pm.test.ts +1088 -0
- package/src/nile-wysiwyg-editor/engine/productivity.test.ts +163 -0
- package/src/nile-wysiwyg-editor/engine/sanitize.ts +156 -0
- package/src/nile-wysiwyg-editor/engine/schema.ts +859 -0
- package/src/nile-wysiwyg-editor/engine/selection-state.ts +210 -0
- package/src/nile-wysiwyg-editor/engine/serializer.ts +78 -0
- package/src/nile-wysiwyg-editor/index.ts +3 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +782 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.ts +750 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +2155 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.ts +1 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts +251 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.ts +772 -0
- package/src/nile-wysiwyg-editor/types.ts +83 -0
- package/src/nile-wysiwyg-editor/ui/bookmark-panel.ts +155 -0
- package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +135 -0
- package/src/nile-wysiwyg-editor/ui/code-block-menu.ts +105 -0
- package/src/nile-wysiwyg-editor/ui/embed-menu.ts +133 -0
- package/src/nile-wysiwyg-editor/ui/embed-panel.ts +143 -0
- package/src/nile-wysiwyg-editor/ui/emoji-picker.ts +152 -0
- package/src/nile-wysiwyg-editor/ui/find-replace.ts +174 -0
- package/src/nile-wysiwyg-editor/ui/image-menu.ts +140 -0
- package/src/nile-wysiwyg-editor/ui/image-panel.ts +337 -0
- package/src/nile-wysiwyg-editor/ui/insert-menu.ts +142 -0
- package/src/nile-wysiwyg-editor/ui/link-editor.ts +180 -0
- package/src/nile-wysiwyg-editor/ui/markdown-panel.ts +143 -0
- package/src/nile-wysiwyg-editor/ui/math-panel.ts +169 -0
- package/src/nile-wysiwyg-editor/ui/shortcut-help.ts +311 -0
- package/src/nile-wysiwyg-editor/ui/source-view.ts +119 -0
- package/src/nile-wysiwyg-editor/ui/special-chars.ts +209 -0
- package/src/nile-wysiwyg-editor/ui/suggest-list.ts +138 -0
- package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +173 -0
- package/src/nile-wysiwyg-editor/ui/table-menu.ts +109 -0
- package/vscode-html-custom-data.json +491 -1
- package/web-dev-server.config.mjs +6 -2
- package/dist/index-5fef1a0d.esm.js +0 -1
- package/dist/index-8f38fae3.cjs.js +0 -2
- package/dist/index-8f38fae3.cjs.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nile-wysiwyg-editor.cjs.js","sources":["../../../src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts"],"sourcesContent":["import { html, TemplateResult, CSSResultArray, PropertyValues, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { EditorView } from 'prosemirror-view';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { Node as PMNode } from 'prosemirror-model';\n\nimport NileElement from '../internal/nile-element';\nimport { styles } from './nile-wysiwyg-editor.css';\nimport {\n defaultSchema,\n createEditorState,\n computeToolbarState,\n htmlToDoc,\n htmlToSlice,\n docToHtml,\n docToText,\n docToMarkdown,\n markdownToHtml,\n docToJson,\n jsonToDoc,\n isDocEmpty,\n sanitizeHtml,\n getCommand,\n getMarkRange,\n flattenToSingleParagraph,\n imageUploadKey,\n findUploadPos,\n countWords,\n TaskItemView,\n ImageView,\n FigureView,\n EmbedView,\n MathView,\n isOfficeHtml,\n cleanOfficeHtml,\n toInlineStyledHtml,\n buildWordDocument,\n buildPrintDocument,\n isFormatPainterArmed,\n armFormatPainter,\n disarmFormatPainter,\n applyFormatPainter,\n getFindState,\n searchTr,\n findStepTr,\n clearFindTr,\n replaceActiveTr,\n replaceAllTr,\n} from './engine';\nimport type { ToolbarState } from './engine/selection-state';\nimport type { CommandAttrs, CommandName } from './engine/commands';\nimport { selectedImageInfo } from './engine/commands';\nimport type { MathRenderer } from './engine/plugins/math-view';\nimport type { SuggestionMatch } from './engine/plugins/suggestions';\nimport type {\n WysiwygChangeDetail,\n WysiwygCommandDetail,\n MentionsConfig,\n SnippetConfig,\n MergeFieldConfig,\n TemplateConfig,\n} from './types';\nimport { DEFAULT_TOOLBAR } from './types';\nimport { EMOJI } from './emoji';\n\nimport './nile-wysiwyg-toolbar/nile-wysiwyg-toolbar';\nimport './ui/link-editor';\nimport './ui/bubble-menu';\nimport './ui/image-panel';\nimport './ui/table-menu';\nimport './ui/suggest-list';\nimport './ui/find-replace';\nimport './ui/source-view';\nimport './ui/embed-panel';\nimport './ui/bookmark-panel';\nimport './ui/code-block-menu';\nimport './ui/shortcut-help';\nimport './ui/image-menu';\nimport './ui/embed-menu';\nimport './ui/special-chars';\nimport './ui/emoji-picker';\nimport './ui/insert-menu';\nimport './ui/math-panel';\nimport './ui/markdown-panel';\nimport type { NileWysiwygLinkEditor } from './ui/link-editor';\nimport type { NileWysiwygBubbleMenu } from './ui/bubble-menu';\nimport type { NileWysiwygImagePanel } from './ui/image-panel';\nimport type { NileWysiwygTableMenu } from './ui/table-menu';\nimport type { NileWysiwygSuggestList, SuggestItem } from './ui/suggest-list';\nimport type { NileWysiwygFindBar } from './ui/find-replace';\nimport type { NileWysiwygSourceView } from './ui/source-view';\nimport type { NileWysiwygEmbedPanel } from './ui/embed-panel';\nimport type { NileWysiwygBookmarkPanel } from './ui/bookmark-panel';\nimport type { NileWysiwygCodeMenu } from './ui/code-block-menu';\nimport type { NileWysiwygShortcutHelp } from './ui/shortcut-help';\nimport type { NileWysiwygImageMenu } from './ui/image-menu';\nimport type { NileWysiwygEmbedMenu } from './ui/embed-menu';\nimport type { NileWysiwygSpecialChars } from './ui/special-chars';\nimport type { NileWysiwygEmojiPicker } from './ui/emoji-picker';\nimport type { NileWysiwygInsertMenu } from './ui/insert-menu';\nimport type { NileWysiwygMathPanel } from './ui/math-panel';\nimport type { NileWysiwygMarkdownPanel } from './ui/markdown-panel';\n\ninterface SlashItem extends SuggestItem {\n command: CommandName | 'openImage' | 'openEmbed' | 'openBookmark';\n attrs?: CommandAttrs;\n}\n\nconst SLASH_ITEMS: SlashItem[] = [\n { key: 'heading1', label: 'Heading 1', hint: '#', command: 'heading', attrs: { level: 1 } },\n { key: 'heading2', label: 'Heading 2', hint: '##', command: 'heading', attrs: { level: 2 } },\n { key: 'heading3', label: 'Heading 3', hint: '###', command: 'heading', attrs: { level: 3 } },\n { key: 'bulletList', label: 'Bulleted list', hint: '-', command: 'bulletList' },\n { key: 'orderedList', label: 'Numbered list', hint: '1.', command: 'orderedList' },\n { key: 'taskList', label: 'Checklist', hint: '[ ]', command: 'taskList' },\n { key: 'blockquote', label: 'Blockquote', hint: '>', command: 'blockquote' },\n { key: 'codeBlock', label: 'Code block', hint: '```', command: 'codeBlock' },\n { key: 'table', label: 'Table', hint: '3×3', command: 'insertTable', attrs: { rows: 3, cols: 3 } },\n { key: 'image', label: 'Image', command: 'openImage' },\n { key: 'embed', label: 'Video embed', hint: 'YouTube…', command: 'openEmbed' },\n { key: 'bookmark', label: 'Bookmark (anchor)', command: 'openBookmark' },\n { key: 'horizontalRule', label: 'Divider', hint: '---', command: 'horizontalRule' },\n];\n\nlet uploadCounter = 0;\n\nfunction readFileAsDataURL(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n}\n\nconst CHANGE_DEBOUNCE_MS = 250;\n\n/**\n * WYSIWYG rich text editor powered by ProseMirror.\n *\n * Requires evergreen browsers: selection inside shadow DOM relies on\n * `Selection.getComposedRanges()` (Safari 17+, recent Firefox) or Chrome's\n * `shadowRoot.getSelection()`.\n *\n * @tag nile-wysiwyg-editor\n *\n * @event nile-change - Debounced content change. detail: { value, json, content }\n * @event nile-input - Every document change. detail: { value, json, content }\n * @event nile-focus - Editor gained focus.\n * @event nile-blur - Editor lost focus.\n * @event nile-selection-change - detail: ToolbarState snapshot.\n * @event nile-image-upload-request - Cancelable. detail: { file, insert(src, alt) }.\n * Call preventDefault() and use insert() to fully own the upload.\n * @event nile-image-upload-error - detail: { file, error } when uploadHandler rejects.\n * @event nile-mention-query - detail: { trigger, query, provide(items) } for async sources.\n * @event nile-mention-select - detail: { trigger, key, label } when a mention is inserted.\n * @event nile-word-count - detail: { words, characters } on every document change.\n * @event nile-autosave - detail: { value, json, content } on the autosave interval.\n *\n * @csspart base - Outer container.\n * @csspart toolbar - The toolbar element.\n * @csspart surface - The scrollable editing surface.\n */\n@customElement('nile-wysiwyg-editor')\nexport class NileWysiwygEditor extends NileElement {\n static formAssociated = true;\n\n /** Document content as HTML. Not reflected to the attribute. */\n @property({ type: String }) value = '';\n\n @property({ type: String }) placeholder = '';\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Toolbar config string; `\"none\"` hides the toolbar. */\n @property({ type: String }) toolbar = DEFAULT_TOOLBAR;\n\n /** Shows a balloon toolbar over text selections. */\n @property({ type: Boolean, attribute: 'bubble-menu' }) bubbleMenu = false;\n\n /** Sanitizes incoming HTML (value, paste, insertHTML). Leave on. */\n @property({ type: Boolean }) sanitize = true;\n\n /** Constrains content to a single paragraph. */\n @property({ type: Boolean, attribute: 'singleline' }) singleLine = false;\n\n /** Form field name. */\n @property({ type: String }) name = '';\n\n @property({ type: Boolean, reflect: true }) required = false;\n\n /**\n * Async image upload handler. When set, pasted/dropped/picked image files\n * are uploaded through it (an \"Uploading…\" placeholder shows meanwhile)\n * and the returned src is inserted.\n */\n @property({ attribute: false }) uploadHandler?: (\n file: File\n ) => Promise<{ src: string; alt?: string }>;\n\n /**\n * Fallback when no uploadHandler is set and no nile-image-upload-request\n * listener takes over: embed image files as base64 data URLs.\n */\n @property({ attribute: false }) allowBase64Images = true;\n\n /**\n * Shows an \"Upload from computer\" button in the Insert Image dialog. Off by\n * default (URL-only, like the RTE's default); files can always be added via\n * drag & drop or paste regardless.\n */\n @property({ type: Boolean, attribute: 'upload-from-computer' })\n uploadFromComputer = false;\n\n /** Max upload size (bytes) shown/enforced by the image dialog. Default 2 MB. */\n @property({ type: Number, attribute: 'image-max-file-size' })\n imageMaxFileSize = 2 * 1024 * 1024;\n\n /**\n * Mention config: trigger character → items, same shape and JSON attribute\n * format as nile-rich-text-editor. For async sources, configure the\n * trigger with an empty array and listen to nile-mention-query.\n */\n @property({\n attribute: 'mentions',\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trigger of Object.keys(parsed)) {\n const items = parsed[trigger];\n if (Array.isArray(items)) {\n out[trigger] = items\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch {\n return {};\n }\n },\n toAttribute: (value: MentionsConfig) => JSON.stringify(value),\n },\n })\n mentions: MentionsConfig = {};\n\n /** Disables the \"/\" command menu. */\n @property({ type: Boolean, attribute: 'no-slash-commands' }) noSlashCommands = false;\n\n /** Disables the \":\" emoji picker. */\n @property({ type: Boolean, attribute: 'no-emoji' }) noEmoji = false;\n\n /** Maximum character count; further input is rejected. 0 = unlimited. */\n @property({ type: Number, attribute: 'maxlength' }) maxLength = 0;\n\n /** Always show the word/character counter footer (implied by maxlength). */\n @property({ type: Boolean, attribute: 'show-counter' }) showCounter = false;\n\n /** Keeps the toolbar pinned to the viewport while scrolling long content. */\n @property({ type: Boolean, attribute: 'sticky-toolbar', reflect: true })\n stickyToolbar = false;\n\n /** Reusable snippets surfaced in the \"/\" menu (JSON attribute). */\n @property({\n attribute: 'snippets',\n converter: {\n fromAttribute: (value: string): SnippetConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(\n s =>\n s &&\n typeof s.key === 'string' &&\n typeof s.label === 'string' &&\n typeof s.html === 'string'\n )\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: SnippetConfig[]) => JSON.stringify(value),\n },\n })\n snippets: SnippetConfig[] = [];\n\n /** Merge fields offered in the merge-field picker (JSON attribute). */\n @property({\n attribute: 'merge-fields',\n converter: {\n fromAttribute: (value: string): MergeFieldConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(f => f && typeof f.id === 'string' && typeof f.label === 'string')\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: MergeFieldConfig[]) => JSON.stringify(value),\n },\n })\n mergeFields: MergeFieldConfig[] = [];\n\n /** Content templates offered in the template picker (JSON attribute). */\n @property({\n attribute: 'templates',\n converter: {\n fromAttribute: (value: string): TemplateConfig[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed)\n ? parsed.filter(t => t && typeof t.label === 'string' && typeof t.html === 'string')\n : [];\n } catch {\n return [];\n }\n },\n toAttribute: (value: TemplateConfig[]) => JSON.stringify(value),\n },\n })\n templates: TemplateConfig[] = [];\n\n /**\n * Renders a math node's LaTeX to HTML (KaTeX/MathJax/MathML). When unset,\n * the raw LaTeX is shown. Same trust level as uploadHandler — output is\n * inserted as HTML.\n */\n @property({ attribute: false }) mathRenderer?: MathRenderer;\n\n /** Emit nile-autosave every N ms while the document has changed. 0 = off. */\n @property({ type: Number, attribute: 'autosave-interval' }) autosaveInterval = 0;\n\n /** When on, every paste drops formatting and inserts plain text. */\n @property({ type: Boolean, attribute: 'paste-as-plain-text', reflect: true })\n pasteAsPlainText = false;\n\n /** Disables Markdown detection on plain-text pastes. */\n @property({ type: Boolean, attribute: 'no-markdown-paste' })\n noMarkdownPaste = false;\n\n /** Disables typography autocorrect (smart quotes, dashes, (c) → ©). */\n @property({ type: Boolean, attribute: 'no-text-transform' })\n noTextTransform = false;\n\n /** Expands the editor to fill the viewport. Esc exits. */\n @property({ type: Boolean, reflect: true }) fullscreen = false;\n\n /** Outlines block boundaries (paragraphs, headings, lists…) while editing. */\n @property({ type: Boolean, attribute: 'show-blocks', reflect: true })\n showBlocks = false;\n\n @state() private toolbarState?: ToolbarState;\n\n @state() private hasFocus = false;\n\n @state() private sourceMode = false;\n\n @state() private counter = { words: 0, characters: 0 };\n\n /** Which list the shared insert-menu is showing, if open. */\n @state() private insertMenuMode: 'template' | 'merge' | null = null;\n\n @query('.nile-wysiwyg') private baseEl!: HTMLElement;\n\n @query('nile-wysiwyg-toolbar') private toolbarEl?: HTMLElement;\n\n @query('.nile-wysiwyg__surface') private surfaceEl!: HTMLElement;\n\n @query('nile-wysiwyg-link-editor') private linkEditorEl!: NileWysiwygLinkEditor;\n\n @query('nile-wysiwyg-bubble-menu') private bubbleMenuEl!: NileWysiwygBubbleMenu;\n\n @query('nile-wysiwyg-image-panel') private imagePanelEl!: NileWysiwygImagePanel;\n\n @query('nile-wysiwyg-table-menu') private tableMenuEl!: NileWysiwygTableMenu;\n\n @query('nile-wysiwyg-suggest-list') private suggestListEl!: NileWysiwygSuggestList;\n\n @query('nile-wysiwyg-find-bar') private findBarEl!: NileWysiwygFindBar;\n\n @query('nile-wysiwyg-source-view') private sourceViewEl?: NileWysiwygSourceView;\n\n @query('nile-wysiwyg-embed-panel') private embedPanelEl!: NileWysiwygEmbedPanel;\n\n @query('nile-wysiwyg-bookmark-panel') private bookmarkPanelEl!: NileWysiwygBookmarkPanel;\n\n @query('nile-wysiwyg-code-menu') private codeMenuEl!: NileWysiwygCodeMenu;\n\n @query('nile-wysiwyg-shortcut-help') private shortcutHelpEl!: NileWysiwygShortcutHelp;\n\n @query('nile-wysiwyg-image-menu') private imageMenuEl!: NileWysiwygImageMenu;\n\n @query('nile-wysiwyg-embed-menu') private embedMenuEl!: NileWysiwygEmbedMenu;\n\n @query('nile-wysiwyg-special-chars') private specialCharsEl!: NileWysiwygSpecialChars;\n\n @query('nile-wysiwyg-emoji-picker') private emojiPickerEl!: NileWysiwygEmojiPicker;\n\n @query('nile-wysiwyg-insert-menu') private insertMenuEl!: NileWysiwygInsertMenu;\n\n @query('nile-wysiwyg-math-panel') private mathPanelEl!: NileWysiwygMathPanel;\n\n @query('nile-wysiwyg-markdown-panel') private markdownPanelEl!: NileWysiwygMarkdownPanel;\n\n private view?: EditorView;\n\n private mentionMatch: SuggestionMatch | null = null;\n\n private slashMatch: SuggestionMatch | null = null;\n\n private emojiMatch: SuggestionMatch | null = null;\n\n private activeSuggestSource: 'mention' | 'slash' | 'emoji' | null = null;\n\n private suggestDismissed: string | null = null;\n\n private mentionQueryToken = '';\n\n private autosaveTimer?: ReturnType<typeof setInterval>;\n\n private lastAutosaveValue = '';\n\n private internals?: ElementInternals;\n\n private defaultValue = '';\n\n private syncingValue = false;\n\n private changeTimer?: ReturnType<typeof setTimeout>;\n\n private pendingChange = false;\n\n /** Body overflow value before fullscreen locked it; null = not locked. */\n private previousBodyOverflow: string | null = null;\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n constructor() {\n super();\n if (typeof this.attachInternals === 'function') {\n this.internals = this.attachInternals();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n // Remount after a disconnect/reconnect (e.g. host moved in the DOM).\n if (this.hasUpdated && !this.view) {\n this.updateComplete.then(() => this.mountView());\n }\n // Close floating panels when the user clicks anywhere outside them.\n document.addEventListener('pointerdown', this.onOutsidePointerDown, true);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('pointerdown', this.onOutsidePointerDown, true);\n if (this.changeTimer) clearTimeout(this.changeTimer);\n if (this.autosaveTimer) clearInterval(this.autosaveTimer);\n if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n this.view?.destroy();\n this.view = undefined;\n }\n\n protected firstUpdated(): void {\n this.defaultValue = this.value;\n this.mountView();\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('value') && this.view && !this.syncingValue) {\n const current = docToHtml(this.view.state.doc);\n if (current !== this.value) this.setContent(this.value);\n }\n this.syncingValue = false;\n\n if ((changed.has('disabled') || changed.has('readonly')) && this.view) {\n this.view.setProps({});\n }\n if (changed.has('placeholder') && this.view) {\n // Decorations are recomputed on any transaction.\n this.view.dispatch(this.view.state.tr);\n }\n if (changed.has('required')) this.updateValidity();\n if (changed.has('autosaveInterval')) this.restartAutosave();\n if (\n (changed.has('pasteAsPlainText') ||\n changed.has('fullscreen') ||\n changed.has('showBlocks')) &&\n this.view\n ) {\n this.toolbarState = this.snapshotToolbar(this.view.state);\n }\n // Input rules are baked into the state at build time; rebuild in place\n // (same doc, fresh plugins) when the autocorrect toggle changes.\n if (changed.has('noTextTransform') && this.view && !changed.has('value')) {\n this.view.updateState(this.buildState(this.view.state.doc));\n }\n // Lock page scrolling while fullscreen covers the viewport.\n if (changed.has('fullscreen')) {\n if (this.fullscreen) {\n if (this.previousBodyOverflow === null) {\n this.previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n } else if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n }\n\n private restartAutosave(): void {\n if (this.autosaveTimer) clearInterval(this.autosaveTimer);\n this.autosaveTimer = undefined;\n if (this.autosaveInterval > 0) {\n this.lastAutosaveValue = this.value;\n this.autosaveTimer = setInterval(() => {\n if (!this.view || this.value === this.lastAutosaveValue) return;\n this.lastAutosaveValue = this.value;\n this.emit('nile-autosave', this.buildChangeDetail(this.view.state.doc));\n }, this.autosaveInterval);\n }\n }\n\n // ------------------------------------------------------------------ view\n\n private buildState(doc?: PMNode): EditorState {\n return createEditorState({\n schema: defaultSchema,\n doc,\n getPlaceholder: () => this.placeholder,\n singleLine: this.singleLine,\n onLinkShortcut: () => this.openLinkEditor(),\n onFindShortcut: () => this.openFindBar(),\n onShortcutHelp: () => this.openShortcutHelp(),\n onImageFiles: (files, pos) => {\n for (const file of files) this.insertImageFile(file, pos);\n },\n mentions: {\n getTriggers: () => Object.keys(this.mentions),\n onChange: match => {\n this.mentionMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'mention'),\n },\n slashCommands: {\n onChange: match => {\n this.slashMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'slash'),\n },\n emoji: {\n onChange: match => {\n this.emojiMatch = match;\n this.updateSuggestList();\n },\n onKeyDown: event => this.handleSuggestKey(event, 'emoji'),\n },\n getMaxLength: () => this.maxLength,\n getForcePlainText: () => this.pasteAsPlainText,\n getMarkdownPaste: () => !this.noMarkdownPaste,\n getSanitize: () => this.sanitize,\n textTransform: !this.noTextTransform,\n });\n }\n\n /**\n * ToolbarState snapshot augmented with host-only flags the pure\n * computeToolbarState can't know about (e.g. the paste-as-plain-text toggle).\n */\n private snapshotToolbar(state: EditorState): ToolbarState {\n return {\n ...computeToolbarState(state),\n pasteAsPlainText: this.pasteAsPlainText,\n fullscreen: this.fullscreen,\n showBlocks: this.showBlocks,\n formatPainter: isFormatPainterArmed(state),\n };\n }\n\n private mountView(): void {\n if (this.view || !this.surfaceEl) return;\n let doc = this.value\n ? htmlToDoc(defaultSchema, this.value, this.sanitize)\n : undefined;\n if (doc && this.singleLine) doc = flattenToSingleParagraph(doc);\n\n this.view = new EditorView(this.surfaceEl, {\n state: this.buildState(doc),\n dispatchTransaction: tr => this.handleTransaction(tr),\n editable: () => !this.disabled && !this.readonly,\n transformPastedHTML: pasted => {\n // Word/Google Docs clipboard HTML gets normalized (real lists, no\n // mso noise) before the sanitizer clamps it to the schema.\n const cleaned = isOfficeHtml(pasted) ? cleanOfficeHtml(pasted) : pasted;\n return this.sanitize ? sanitizeHtml(cleaned) : cleaned;\n },\n handleDOMEvents: {\n mousedown: () => {\n // Clicking into the document dismisses the never-focused popovers\n // (they take no focus, so blur can't close them).\n this.closeSpecialChars(false);\n this.closeInsertMenu(false);\n return false;\n },\n focus: () => {\n this.hasFocus = true;\n this.updateOverlays();\n this.emit('nile-focus');\n return false;\n },\n blur: (_view, event) => {\n // Focus moving into the editor's own chrome (language picker,\n // panels) is not a blur — closing overlays here would dismiss\n // the control the user just clicked.\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && (this.shadowRoot?.contains(related) || this.contains(related))) {\n return false;\n }\n this.hasFocus = false;\n this.flushChange();\n this.updateOverlays();\n this.closeSuggestList();\n this.closeSpecialChars(false);\n this.emit('nile-blur');\n return false;\n },\n },\n attributes: {\n role: 'textbox',\n 'aria-multiline': this.singleLine ? 'false' : 'true',\n },\n nodeViews: {\n task_item: (node, view, getPos) =>\n new TaskItemView(node, view, getPos as () => number | undefined),\n image: (node, view, getPos) =>\n new ImageView(node, view, getPos as () => number | undefined),\n figure: (node, view, getPos) =>\n new FigureView(node, view, getPos as () => number | undefined),\n embed: (node, view, getPos) =>\n new EmbedView(node, view, getPos as () => number | undefined),\n math: node => new MathView(node, this.mathRenderer),\n },\n });\n\n this.toolbarState = this.snapshotToolbar(this.view.state);\n this.counter = countWords(this.view.state.doc);\n this.syncFormValue(this.view.state.doc);\n }\n\n private handleTransaction(tr: Transaction): void {\n if (!this.view) return;\n const newState = this.view.state.apply(tr);\n this.view.updateState(newState);\n\n // Format painter: once armed, the next non-empty selection the user makes\n // receives the copied formatting, then the painter disarms.\n if (tr.selectionSet && !newState.selection.empty && isFormatPainterArmed(newState)) {\n const applyTr = applyFormatPainter(newState);\n if (applyTr) {\n this.view.dispatch(applyTr);\n return;\n }\n }\n\n this.toolbarState = this.snapshotToolbar(newState);\n this.emit('nile-selection-change', this.toolbarState);\n this.updateOverlays();\n\n if (this.findBarEl?.open) {\n const find = getFindState(newState);\n this.findBarEl.matchCount = find.matches.length;\n this.findBarEl.activeIndex = find.activeIndex;\n }\n\n if (tr.docChanged) {\n const detail = this.buildChangeDetail(newState.doc);\n this.syncingValue = true;\n this.value = detail.value;\n this.syncFormValue(newState.doc);\n this.emit('nile-input', detail);\n this.counter = countWords(newState.doc);\n this.emit('nile-word-count', this.counter);\n this.scheduleChange();\n }\n }\n\n private buildChangeDetail(doc: PMNode): WysiwygChangeDetail {\n const value = isDocEmpty(doc) ? '' : docToHtml(doc);\n return { value, json: docToJson(doc), content: value };\n }\n\n private scheduleChange(): void {\n this.pendingChange = true;\n if (this.changeTimer) clearTimeout(this.changeTimer);\n this.changeTimer = setTimeout(() => this.flushChange(), CHANGE_DEBOUNCE_MS);\n }\n\n private flushChange(): void {\n if (!this.pendingChange || !this.view) return;\n this.pendingChange = false;\n if (this.changeTimer) clearTimeout(this.changeTimer);\n this.emit('nile-change', this.buildChangeDetail(this.view.state.doc));\n }\n\n // ------------------------------------------------------------------ form\n\n private syncFormValue(doc: PMNode): void {\n if (!this.internals) return;\n const value = isDocEmpty(doc) ? '' : docToHtml(doc);\n this.internals.setFormValue(value === '' ? null : value);\n this.updateValidity();\n }\n\n private updateValidity(): void {\n if (!this.internals) return;\n const empty = this.view ? isDocEmpty(this.view.state.doc) : this.value === '';\n if (this.required && empty) {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please fill out this field.',\n this.surfaceEl ?? undefined\n );\n } else {\n this.internals.setValidity({});\n }\n }\n\n formResetCallback(): void {\n this.setContent(this.defaultValue);\n }\n\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public checkValidity(): boolean {\n return this.internals ? this.internals.checkValidity() : true;\n }\n\n public reportValidity(): boolean {\n return this.internals ? this.internals.reportValidity() : true;\n }\n\n // -------------------------------------------------------------- overlays\n\n /** Positions an overlay element near a doc position (default: selection). */\n private positionOverlay(\n el: HTMLElement,\n placement: 'above' | 'below',\n pos?: number\n ): void {\n if (!this.view || !this.baseEl) return;\n const from = pos ?? this.view.state.selection.from;\n const coords = this.view.coordsAtPos(from);\n const baseRect = this.baseEl.getBoundingClientRect();\n const left = Math.max(\n 4,\n Math.min(coords.left - baseRect.left, baseRect.width - el.offsetWidth - 4)\n );\n el.style.left = `${left}px`;\n if (placement === 'above') {\n el.style.top = `${Math.max(4, coords.top - baseRect.top - el.offsetHeight - 8)}px`;\n } else {\n el.style.top = `${coords.bottom - baseRect.top + 6}px`;\n }\n }\n\n /** Positions a floating panel directly below a toolbar/anchor element. */\n private positionOverlayBelowAnchor(el: HTMLElement, anchor: HTMLElement): void {\n if (!this.baseEl) return;\n const baseRect = this.baseEl.getBoundingClientRect();\n const anchorRect = anchor.getBoundingClientRect();\n const left = Math.max(\n 4,\n Math.min(anchorRect.left - baseRect.left, baseRect.width - el.offsetWidth - 4)\n );\n // Clear any CSS-pinned `right` (e.g. the find bar) so `left` wins.\n el.style.right = 'auto';\n el.style.left = `${left}px`;\n el.style.top = `${anchorRect.bottom - baseRect.top + 6}px`;\n }\n\n /** Finds a toolbar button by its aria-label, to anchor a panel below it. */\n private toolbarButton(label: string): HTMLElement | null {\n return (\n (this.toolbarEl?.shadowRoot?.querySelector(\n `button[aria-label=\"${label}\"]`\n ) as HTMLElement | null) ?? null\n );\n }\n\n private updateOverlays(): void {\n if (!this.bubbleMenuEl) return;\n const panelOpen =\n this.linkEditorEl?.open ||\n this.imagePanelEl?.open ||\n this.embedPanelEl?.open ||\n this.bookmarkPanelEl?.open ||\n this.emojiPickerEl?.open;\n const show =\n this.bubbleMenu &&\n this.hasFocus &&\n !!this.toolbarState &&\n !this.toolbarState.selectionEmpty &&\n !this.toolbarState.imageSelected &&\n !this.toolbarState.embedSelected &&\n !panelOpen;\n this.bubbleMenuEl.open = show;\n if (show) {\n this.bubbleMenuEl.toolbarState = this.toolbarState;\n this.bubbleMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.bubbleMenuEl, 'above')\n );\n }\n\n if (this.tableMenuEl) {\n const showTable =\n this.hasFocus && !!this.toolbarState && this.toolbarState.inTable && !panelOpen;\n this.tableMenuEl.open = showTable;\n if (showTable) {\n this.tableMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.tableMenuEl, 'below')\n );\n }\n }\n\n if (this.codeMenuEl) {\n const showCode =\n this.hasFocus && !!this.toolbarState && this.toolbarState.inCodeBlock && !panelOpen;\n this.codeMenuEl.open = showCode;\n if (showCode) {\n this.codeMenuEl.language = this.toolbarState!.codeBlockLanguage ?? '';\n this.codeMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.codeMenuEl, 'above')\n );\n }\n }\n\n if (this.imageMenuEl) {\n const showImage =\n this.hasFocus && !!this.toolbarState && this.toolbarState.imageSelected && !panelOpen;\n this.imageMenuEl.open = showImage;\n if (showImage) {\n this.imageMenuEl.toolbarState = this.toolbarState;\n this.imageMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.imageMenuEl, 'above')\n );\n }\n }\n\n if (this.embedMenuEl) {\n const showEmbed =\n this.hasFocus && !!this.toolbarState && this.toolbarState.embedSelected && !panelOpen;\n this.embedMenuEl.open = showEmbed;\n if (showEmbed) {\n this.embedMenuEl.toolbarState = this.toolbarState;\n this.embedMenuEl.updateComplete.then(() =>\n this.positionOverlay(this.embedMenuEl, 'above')\n );\n }\n }\n }\n\n // -------------------------------------------------------- special chars\n\n private openSpecialChars(): void {\n if (!this.view || !this.specialCharsEl || this.disabled || this.readonly) return;\n this.specialCharsEl.open = true;\n this.specialCharsEl.updateComplete.then(() =>\n this.positionOverlay(this.specialCharsEl, 'below')\n );\n }\n\n private closeSpecialChars(refocus = true): void {\n if (this.specialCharsEl) this.specialCharsEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private insertSpecialChar(char: string): void {\n if (!this.view) return;\n this.view.dispatch(this.view.state.tr.insertText(char).scrollIntoView());\n this.view.focus();\n }\n\n // ------------------------------------------------ templates & merge fields\n\n private openInsertMenu(mode: 'template' | 'merge'): void {\n if (!this.view || !this.insertMenuEl || this.disabled || this.readonly) return;\n this.insertMenuMode = mode;\n const menu = this.insertMenuEl;\n if (mode === 'merge') {\n menu.heading = 'Merge field';\n menu.emptyText = 'No merge fields configured.';\n menu.items = this.mergeFields.map(f => ({ label: f.label, description: `{{${f.id}}}` }));\n } else {\n menu.heading = 'Template';\n menu.emptyText = 'No templates configured.';\n menu.items = this.templates.map(t => ({ label: t.label, description: t.description }));\n }\n menu.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n menu.updateComplete.then(() => this.positionOverlay(menu, 'below'));\n }\n\n private closeInsertMenu(refocus = true): void {\n if (this.insertMenuEl) this.insertMenuEl.open = false;\n this.insertMenuMode = null;\n if (refocus) this.view?.focus();\n }\n\n private handleInsertSelect(index: number): void {\n const mode = this.insertMenuMode;\n this.closeInsertMenu();\n if (!this.view) return;\n if (mode === 'merge') {\n const field = this.mergeFields[index];\n if (field) this.execCommand('insertMergeField', { id: field.id, label: field.label });\n } else if (mode === 'template') {\n const template = this.templates[index];\n if (template) this.insertHTML(template.html);\n }\n }\n\n /** Inserts a merge-field placeholder at the selection. */\n public insertMergeField(id: string, label?: string): void {\n this.execCommand('insertMergeField', { id, label: label ?? null });\n }\n\n /** Changes the case of the selected text. */\n public changeCase(mode: 'upper' | 'lower' | 'title' | 'sentence'): void {\n this.execCommand('changeCase', { textCase: mode });\n }\n\n // ---------------------------------------------------------------- math\n\n private openMathPanel(): void {\n if (!this.view || !this.mathPanelEl || this.disabled || this.readonly) return;\n this.mathPanelEl.reset();\n this.mathPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.mathPanelEl.updateComplete.then(() => {\n const anchor = this.toolbarButton('Insert math (LaTeX)');\n if (anchor) this.positionOverlayBelowAnchor(this.mathPanelEl, anchor);\n else this.positionOverlay(this.mathPanelEl, 'below');\n this.mathPanelEl.focusInput();\n });\n }\n\n private closeMathPanel(refocus = true): void {\n if (this.mathPanelEl) this.mathPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private openMarkdownPanel(): void {\n if (!this.view || !this.markdownPanelEl || this.disabled || this.readonly) return;\n this.markdownPanelEl.reset();\n this.markdownPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.markdownPanelEl.updateComplete.then(() => {\n const anchor = this.toolbarButton('Insert from Markdown');\n if (anchor) this.positionOverlayBelowAnchor(this.markdownPanelEl, anchor);\n else this.positionOverlay(this.markdownPanelEl, 'below');\n this.markdownPanelEl.focusInput();\n });\n }\n\n private closeMarkdownPanel(refocus = true): void {\n if (this.markdownPanelEl) this.markdownPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private applyMath(latex: string, display: 'inline' | 'block'): void {\n this.closeMathPanel();\n this.execCommand('insertMath', { latex, mathDisplay: display });\n }\n\n /** Inserts a math formula (LaTeX) at the selection. */\n public insertMath(latex: string, display: 'inline' | 'block' = 'inline'): void {\n this.execCommand('insertMath', { latex, mathDisplay: display });\n }\n\n // ----------------------------------------------------------------- emoji\n\n private openEmojiPicker(): void {\n if (!this.view || !this.emojiPickerEl || this.disabled || this.readonly) return;\n this.emojiPickerEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.emojiPickerEl.updateComplete.then(() => {\n this.positionOverlay(this.emojiPickerEl, 'below');\n this.emojiPickerEl.focusInput();\n });\n }\n\n private closeEmojiPicker(refocus = true): void {\n if (this.emojiPickerEl) this.emojiPickerEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // ---------------------------------------------------------------- embeds\n\n private openEmbedPanel(): void {\n if (!this.view || !this.embedPanelEl || this.disabled || this.readonly) return;\n this.embedPanelEl.reset();\n this.embedPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.embedPanelEl.updateComplete.then(() => {\n // Anchor below the embed toolbar button when available.\n const anchor = this.toolbarButton('Embed video (YouTube, Vimeo, Loom)');\n if (anchor) this.positionOverlayBelowAnchor(this.embedPanelEl, anchor);\n else this.positionOverlay(this.embedPanelEl, 'below');\n this.embedPanelEl.focusInput();\n });\n }\n\n private closeEmbedPanel(refocus = true): void {\n if (this.embedPanelEl) this.embedPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // -------------------------------------------------------------- bookmarks\n\n private openBookmarkPanel(): void {\n if (!this.view || !this.bookmarkPanelEl || this.disabled || this.readonly) return;\n this.bookmarkPanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.bookmarkPanelEl.updateComplete.then(() => {\n this.positionOverlay(this.bookmarkPanelEl, 'below');\n this.bookmarkPanelEl.focusInput();\n });\n }\n\n private closeBookmarkPanel(refocus = true): void {\n if (this.bookmarkPanelEl) this.bookmarkPanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n // ---------------------------------------------------------------- images\n\n private openImagePanel(): void {\n if (!this.view || !this.imagePanelEl || this.disabled || this.readonly) return;\n // Editing an already-selected image/figure pre-fills the fields (and shows\n // Remove); otherwise open a blank insert panel.\n const info = selectedImageInfo(this.view.state);\n if (info) {\n this.imagePanelEl.prefill({\n src: info.node.attrs.src,\n alt: info.node.attrs.alt ?? '',\n caption: info.isFigure ? info.node.textContent : '',\n });\n } else {\n this.imagePanelEl.reset();\n }\n this.imagePanelEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n if (this.tableMenuEl) this.tableMenuEl.open = false;\n this.imagePanelEl.updateComplete.then(() => {\n // Anchor below the image toolbar button when it's available; otherwise\n // fall back to positioning at the cursor.\n const anchor = this.toolbarButton('Insert image');\n if (anchor) this.positionOverlayBelowAnchor(this.imagePanelEl, anchor);\n else this.positionOverlay(this.imagePanelEl, 'below');\n this.imagePanelEl.focusInput();\n });\n }\n\n private closeImagePanel(refocus = true): void {\n if (this.imagePanelEl) this.imagePanelEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private insertImageAt(\n src: string,\n alt: string | null,\n pos: number | null,\n caption: string | null = null\n ): void {\n if (!this.view) return;\n if (pos !== null) {\n const $pos = this.view.state.doc.resolve(\n Math.min(pos, this.view.state.doc.content.size)\n );\n this.view.dispatch(this.view.state.tr.setSelection(TextSelection.near($pos)));\n }\n this.execCommand('insertImage', { src, alt, caption });\n }\n\n /**\n * Routes an image file through the upload pipeline: a cancelable\n * `nile-image-upload-request` first, then `uploadHandler` (with an\n * uploading placeholder), then the base64 fallback.\n */\n public async insertImageFile(\n file: File,\n pos: number | null = null,\n meta?: { alt?: string | null; caption?: string | null }\n ): Promise<void> {\n if (!this.view) return;\n const metaAlt = meta?.alt ?? null;\n const metaCaption = meta?.caption ?? null;\n\n const request = this.emit(\n 'nile-image-upload-request',\n {\n file,\n insert: (src: string, alt?: string) =>\n this.insertImageAt(src, alt ?? metaAlt, pos, metaCaption),\n },\n true,\n true,\n true\n );\n if (request.defaultPrevented) return;\n\n if (this.uploadHandler) {\n uploadCounter += 1;\n const id = `nile-upload-${uploadCounter}`;\n const at = pos ?? this.view.state.selection.from;\n this.view.dispatch(this.view.state.tr.setMeta(imageUploadKey, { add: { id, pos: at } }));\n try {\n const { src, alt } = await this.uploadHandler(file);\n const mappedPos = this.view ? findUploadPos(this.view.state, id) : null;\n this.view?.dispatch(this.view.state.tr.setMeta(imageUploadKey, { remove: { id } }));\n this.insertImageAt(src, metaAlt ?? alt ?? null, mappedPos, metaCaption);\n } catch (error) {\n this.view?.dispatch(this.view.state.tr.setMeta(imageUploadKey, { remove: { id } }));\n this.emit('nile-image-upload-error', { file, error });\n }\n return;\n }\n\n if (this.allowBase64Images) {\n const src = await readFileAsDataURL(file);\n this.insertImageAt(src, metaAlt, pos, metaCaption);\n }\n }\n\n // ---------------------------------------------------- mentions & slash\n\n private dismissKeyFor(\n source: 'mention' | 'slash' | 'emoji',\n match: SuggestionMatch\n ): string {\n return `${source}:${match.trigger}:${match.from}`;\n }\n\n private handleSuggestKey(\n event: KeyboardEvent,\n source: 'mention' | 'slash' | 'emoji'\n ): boolean {\n if (this.activeSuggestSource !== source || !this.suggestListEl?.open) return false;\n switch (event.key) {\n case 'ArrowDown':\n this.suggestListEl.next();\n return true;\n case 'ArrowUp':\n this.suggestListEl.prev();\n return true;\n case 'Enter':\n case 'Tab':\n return this.suggestListEl.selectCurrent();\n case 'Escape': {\n const match =\n source === 'mention'\n ? this.mentionMatch\n : source === 'slash'\n ? this.slashMatch\n : this.emojiMatch;\n if (match) this.suggestDismissed = this.dismissKeyFor(source, match);\n this.closeSuggestList();\n return true;\n }\n default:\n return false;\n }\n }\n\n private closeSuggestList(): void {\n if (this.suggestListEl) this.suggestListEl.open = false;\n this.activeSuggestSource = null;\n }\n\n private updateSuggestList(): void {\n if (!this.suggestListEl || !this.view) return;\n const mention = this.mentionMatch?.active ? this.mentionMatch : null;\n const slash =\n !this.noSlashCommands && this.slashMatch?.active ? this.slashMatch : null;\n const emoji = !this.noEmoji && this.emojiMatch?.active ? this.emojiMatch : null;\n const source: 'mention' | 'slash' | 'emoji' | null = mention\n ? 'mention'\n : slash\n ? 'slash'\n : emoji\n ? 'emoji'\n : null;\n const match = mention ?? slash ?? emoji;\n\n if (!source || !match || this.disabled || this.readonly) {\n this.closeSuggestList();\n return;\n }\n if (this.suggestDismissed === this.dismissKeyFor(source, match)) return;\n this.suggestDismissed = null;\n\n if (source === 'mention') {\n const all = this.mentions[match.trigger] ?? [];\n const query = match.query.toLowerCase();\n this.suggestListEl.items = all.filter(item =>\n item.label.toLowerCase().includes(query)\n );\n // Async override: listeners may provide items for this exact query.\n const token = `${match.trigger} ${match.query}`;\n this.mentionQueryToken = token;\n this.emit('nile-mention-query', {\n trigger: match.trigger,\n query: match.query,\n provide: (items: { key: string; label: string }[]) => {\n if (this.mentionQueryToken !== token || !Array.isArray(items)) return;\n this.suggestListEl.items = items\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n },\n });\n } else if (source === 'slash') {\n const query = match.query.toLowerCase();\n const snippetItems: SuggestItem[] = this.snippets.map(s => ({\n key: `snippet:${s.key}`,\n label: s.label,\n hint: 'snippet',\n }));\n this.suggestListEl.items = [...SLASH_ITEMS, ...snippetItems].filter(item =>\n item.label.toLowerCase().includes(query)\n );\n } else {\n const query = match.query.toLowerCase();\n this.suggestListEl.items = EMOJI.filter(e => e.name.includes(query))\n .slice(0, 12)\n .map(e => ({ key: e.name, label: `${e.char} ${e.name}` }));\n if (this.suggestListEl.items.length === 0) {\n this.closeSuggestList();\n return;\n }\n }\n\n this.activeSuggestSource = source;\n this.suggestListEl.resetActive();\n this.suggestListEl.open = true;\n this.suggestListEl.updateComplete.then(() =>\n this.positionOverlay(this.suggestListEl, 'below', match.from)\n );\n }\n\n private handleSuggestSelect(item: SuggestItem): void {\n if (!this.view) return;\n if (this.activeSuggestSource === 'mention' && this.mentionMatch?.active) {\n const match = this.mentionMatch;\n const { state } = this.view;\n const mention = state.schema.nodes.mention.create({\n trigger: match.trigger,\n key: item.key,\n label: item.label,\n });\n this.view.dispatch(\n state.tr.replaceWith(match.from, match.to, [mention, state.schema.text(' ')])\n );\n this.view.focus();\n this.emit('nile-mention-select', {\n trigger: match.trigger,\n key: item.key,\n label: item.label,\n });\n } else if (this.activeSuggestSource === 'slash' && this.slashMatch?.active) {\n const match = this.slashMatch;\n this.view.dispatch(this.view.state.tr.delete(match.from, match.to));\n this.closeSuggestList();\n if (item.key.startsWith('snippet:')) {\n const snippet = this.snippets.find(s => `snippet:${s.key}` === item.key);\n if (snippet) this.insertHTML(snippet.html);\n return;\n }\n const slashItem = SLASH_ITEMS.find(s => s.key === item.key);\n if (!slashItem) return;\n if (slashItem.command === 'openImage') this.openImagePanel();\n else if (slashItem.command === 'openEmbed') this.openEmbedPanel();\n else if (slashItem.command === 'openBookmark') this.openBookmarkPanel();\n else this.execCommand(slashItem.command, slashItem.attrs);\n } else if (this.activeSuggestSource === 'emoji' && this.emojiMatch?.active) {\n const match = this.emojiMatch;\n const emoji = EMOJI.find(e => e.name === item.key);\n if (emoji) {\n this.view.dispatch(\n this.view.state.tr.insertText(emoji.char, match.from, match.to)\n );\n this.view.focus();\n }\n }\n this.closeSuggestList();\n }\n\n // ---------------------------------------------------------- find & replace\n\n /** Opens the find & replace bar (also bound to Mod-f inside the editor). */\n public openFindBar(): void {\n if (!this.findBarEl || this.sourceMode) return;\n this.findBarEl.open = true;\n const find = this.view ? getFindState(this.view.state) : null;\n this.findBarEl.matchCount = find?.matches.length ?? 0;\n this.findBarEl.activeIndex = find?.activeIndex ?? 0;\n this.findBarEl.updateComplete.then(() => {\n // Anchor below the Find & replace toolbar button when present; otherwise\n // fall back to the CSS-pinned top-right position.\n const anchor = this.toolbarButton('Find & replace (Ctrl+F)');\n if (anchor) this.positionOverlayBelowAnchor(this.findBarEl, anchor);\n this.findBarEl.focusInput();\n });\n }\n\n public closeFindBar(): void {\n if (this.view) this.view.dispatch(clearFindTr(this.view.state));\n if (this.findBarEl) this.findBarEl.open = false;\n this.view?.focus();\n }\n\n public find(query: string): number {\n if (!this.view) return 0;\n this.view.dispatch(searchTr(this.view.state, query));\n this.scrollToActiveMatch();\n return getFindState(this.view.state).matches.length;\n }\n\n public findNext(): void {\n if (!this.view) return;\n this.view.dispatch(findStepTr(this.view.state, 'next'));\n this.scrollToActiveMatch();\n }\n\n public findPrev(): void {\n if (!this.view) return;\n this.view.dispatch(findStepTr(this.view.state, 'prev'));\n this.scrollToActiveMatch();\n }\n\n public replace(replacement: string): void {\n if (!this.view) return;\n const tr = replaceActiveTr(this.view.state, replacement);\n if (tr) this.view.dispatch(tr);\n }\n\n public replaceAll(replacement: string): void {\n if (!this.view) return;\n const tr = replaceAllTr(this.view.state, replacement);\n if (tr) this.view.dispatch(tr);\n }\n\n private scrollToActiveMatch(): void {\n if (!this.view) return;\n const find = getFindState(this.view.state);\n const match = find.matches[find.activeIndex];\n if (!match) return;\n this.view.dispatch(\n this.view.state.tr\n .setSelection(TextSelection.create(this.view.state.doc, match.from, match.to))\n .scrollIntoView()\n );\n }\n\n // -------------------------------------------------------------- source view\n\n /** Toggles raw-HTML source editing. Content re-sanitizes on the way back. */\n public toggleSourceView(): void {\n if (this.sourceMode) {\n this.applySourceView(this.sourceViewEl?.textarea?.value ?? null);\n } else {\n this.sourceMode = true;\n this.updateComplete.then(() => {\n if (this.sourceViewEl) {\n this.sourceViewEl.value = this.getHTML();\n this.sourceViewEl.focusInput();\n }\n });\n }\n }\n\n private applySourceView(htmlContent: string | null): void {\n this.sourceMode = false;\n if (htmlContent !== null) this.setContent(htmlContent, true);\n this.updateComplete.then(() => this.view?.focus());\n }\n\n /** Word and character counts for the current document. */\n public getWordCount(): { words: number; characters: number } {\n return this.view ? countWords(this.view.state.doc) : { words: 0, characters: 0 };\n }\n\n /**\n * Arms the format painter (copies the formatting at the selection) or, if\n * already armed, disarms it. Once armed, the next non-empty selection the\n * user makes receives the copied formatting.\n */\n public toggleFormatPainter(): void {\n if (!this.view) return;\n const tr = isFormatPainterArmed(this.view.state)\n ? disarmFormatPainter(this.view.state)\n : armFormatPainter(this.view.state);\n if (tr) this.view.dispatch(tr);\n this.view.focus();\n }\n\n // ---------------------------------------------------------- export & import\n\n /** The live, styled content element used as the source for exports. */\n private get contentRoot(): HTMLElement | null {\n return (this.view?.dom as HTMLElement | undefined) ?? null;\n }\n\n /** Sanitizes `this.name` (or a fallback) into a safe download basename. */\n private exportFilename(extension: string): string {\n const base =\n (this.name || 'document').replace(/[^\\w.-]+/g, '-').replace(/^-+|-+$/g, '') || 'document';\n return `${base}.${extension}`;\n }\n\n private downloadBlob(content: string, mime: string, filename: string): void {\n const blob = new Blob([content], { type: mime });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = filename;\n anchor.style.display = 'none';\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n // Revoke after the click so the download has a chance to start.\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n\n /**\n * The document as HTML with every style folded into inline `style`\n * attributes — the form email clients (which strip `<style>` blocks and\n * classes) can render. Returns the string; does not download.\n */\n public getInlineStyledHTML(): string {\n const root = this.contentRoot;\n if (!this.view || !root || isDocEmpty(this.view.state.doc)) return '';\n return toInlineStyledHtml(root);\n }\n\n /** Downloads the document as an inline-styled, email-ready `.html` file. */\n public exportInlineHtml(filename?: string): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const doc = `<!DOCTYPE html>\\n<html><head><meta charset=\"utf-8\"></head><body>${body}</body></html>`;\n this.downloadBlob(doc, 'text/html;charset=utf-8', filename ?? this.exportFilename('html'));\n }\n\n /** Downloads the document as a Word-openable `.doc` file. */\n public exportToWord(filename?: string): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const doc = buildWordDocument(body, this.name || 'Document');\n this.downloadBlob(doc, 'application/msword', filename ?? this.exportFilename('doc'));\n }\n\n /**\n * Opens the browser print dialog with a self-contained, print-tuned copy of\n * the document (\"Save as PDF\"). Honours page breaks, embedded images and the\n * base font; optional running header/footer text.\n */\n public exportToPdf(\n options: { header?: string; footer?: string; fontFamily?: string } = {}\n ): void {\n const body = this.getInlineStyledHTML();\n if (!body) return;\n const source = buildPrintDocument(body, { title: this.name || 'Document', ...options });\n\n const frame = document.createElement('iframe');\n frame.setAttribute('aria-hidden', 'true');\n Object.assign(frame.style, {\n position: 'fixed',\n right: '0',\n bottom: '0',\n width: '0',\n height: '0',\n border: '0',\n });\n document.body.appendChild(frame);\n\n const cleanup = (): void => {\n // Delay removal so the browser's print job keeps its document alive.\n setTimeout(() => frame.remove(), 1000);\n };\n\n frame.onload = (): void => {\n const win = frame.contentWindow;\n if (!win) {\n cleanup();\n return;\n }\n win.focus();\n win.addEventListener('afterprint', cleanup, { once: true });\n win.print();\n };\n\n const fdoc = frame.contentDocument;\n if (!fdoc) {\n frame.remove();\n return;\n }\n fdoc.open();\n fdoc.write(source);\n fdoc.close();\n }\n\n /**\n * Imports Word / Google-Docs HTML: normalizes the proprietary markup to\n * clean semantic HTML, then replaces the document. Fidelity note: comments\n * and track-changes are not preserved — the editor has no model for them,\n * and binary `.docx`/`.doc` files are not parsed (export as \"Web Page\" /\n * HTML first, or paste directly, which is handled automatically).\n */\n public importFromWord(html: string, emitChange = true): void {\n if (!html) return;\n const cleaned = isOfficeHtml(html) ? cleanOfficeHtml(html) : html;\n this.setContent(cleaned, emitChange);\n }\n\n /** Opens a file picker for an HTML export and imports it (toolbar action). */\n private importFromWordFile(): void {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.htm,.html,text/html';\n input.style.display = 'none';\n input.addEventListener('change', () => {\n const file = input.files?.[0];\n input.remove();\n if (!file) return;\n file.text().then(text => this.importFromWord(text));\n });\n document.body.appendChild(input);\n input.click();\n }\n\n // -------------------------------------------------------- shortcut help\n\n /** Opens the keyboard shortcut reference (also bound to Mod-/). */\n public openShortcutHelp(): void {\n if (!this.shortcutHelpEl) return;\n this.shortcutHelpEl.open = true;\n this.shortcutHelpEl.focusPanel();\n }\n\n public closeShortcutHelp(): void {\n if (this.shortcutHelpEl) this.shortcutHelpEl.open = false;\n this.view?.focus();\n }\n\n // ------------------------------------------------------------ fullscreen\n\n /** Toggles distraction-free fullscreen mode. Esc exits. */\n public toggleFullscreen(): void {\n this.fullscreen = !this.fullscreen;\n this.view?.focus();\n }\n\n private openLinkEditor(): void {\n if (!this.view || !this.linkEditorEl || this.disabled || this.readonly) return;\n const ts = this.toolbarState ?? computeToolbarState(this.view.state);\n this.linkEditorEl.href = ts.linkHref ?? '';\n this.linkEditorEl.text = '';\n this.linkEditorEl.allowText = ts.selectionEmpty && !ts.linkActive;\n this.linkEditorEl.canRemove = ts.linkActive;\n this.linkEditorEl.open = true;\n if (this.bubbleMenuEl) this.bubbleMenuEl.open = false;\n this.linkEditorEl.updateComplete.then(() => {\n this.positionOverlay(this.linkEditorEl, 'below');\n this.linkEditorEl.focusInput();\n });\n }\n\n private closeLinkEditor(refocus = true): void {\n if (this.linkEditorEl) this.linkEditorEl.open = false;\n if (refocus) this.view?.focus();\n }\n\n private applyLink(href: string, text: string): void {\n if (!this.view) return;\n const { state } = this.view;\n const linkType = state.schema.marks.link;\n if (state.selection.empty && !getMarkRange(state.selection.$from, linkType)) {\n const label = text || href;\n const node = state.schema.text(label, [linkType.create({ href })]);\n this.view.dispatch(state.tr.replaceSelectionWith(node, false).scrollIntoView());\n } else {\n this.execCommand('link', { href });\n }\n this.closeLinkEditor();\n }\n\n // ---------------------------------------------------------------- public\n\n /** The underlying ProseMirror EditorView. Advanced escape hatch. */\n public get pmView(): EditorView | undefined {\n return this.view;\n }\n\n /** Document as ProseMirror JSON. */\n public get json(): Record<string, unknown> | null {\n return this.view ? docToJson(this.view.state.doc) : null;\n }\n\n public set json(value: Record<string, unknown> | null) {\n if (value) this.setContent(value);\n }\n\n public override focus(): void {\n this.view?.focus();\n }\n\n public override blur(): void {\n (this.view?.dom as HTMLElement | undefined)?.blur();\n }\n\n public getHTML(): string {\n return this.view && !isDocEmpty(this.view.state.doc)\n ? docToHtml(this.view.state.doc)\n : '';\n }\n\n public getJSON(): Record<string, unknown> | null {\n return this.json;\n }\n\n public getText(): string {\n return this.view ? docToText(this.view.state.doc) : '';\n }\n\n /**\n * Document as Markdown. Best-effort: structural nodes and Markdown-native\n * marks are converted; color/font marks are dropped to plain text. Use\n * getHTML() when a loss-free representation is required.\n */\n public getMarkdown(): string {\n return this.view && !isDocEmpty(this.view.state.doc)\n ? docToMarkdown(this.view.state.doc)\n : '';\n }\n\n /**\n * Replaces the document with parsed Markdown. Covers the same subset as\n * getMarkdown(): headings, lists, code fences, tables, quotes and the\n * inline marks. The parsed HTML flows through the schema and sanitizer.\n */\n public setMarkdown(markdown: string, emitChange = false): void {\n this.setContent(markdownToHtml(markdown), emitChange);\n }\n\n /** Parses and inserts Markdown at the current selection. */\n public insertMarkdown(markdown: string): void {\n this.insertHTML(markdownToHtml(markdown));\n }\n\n /** Replaces the document. Accepts an HTML string or ProseMirror JSON. */\n public setContent(content: string | Record<string, unknown>, emitChange = false): void {\n if (!this.view) {\n if (typeof content === 'string') this.value = content;\n return;\n }\n let doc =\n typeof content === 'string'\n ? htmlToDoc(defaultSchema, content, this.sanitize)\n : jsonToDoc(defaultSchema, content);\n if (this.singleLine) doc = flattenToSingleParagraph(doc);\n this.view.updateState(this.buildState(doc));\n this.toolbarState = this.snapshotToolbar(this.view.state);\n this.syncingValue = true;\n this.value = isDocEmpty(doc) ? '' : docToHtml(doc);\n this.syncFormValue(doc);\n if (emitChange) {\n this.emit('nile-input', this.buildChangeDetail(doc));\n this.emit('nile-change', this.buildChangeDetail(doc));\n }\n }\n\n public clear(): void {\n this.setContent('');\n }\n\n /** Parses and inserts HTML at the current selection. */\n public insertHTML(htmlContent: string): void {\n if (!this.view) return;\n const slice = htmlToSlice(defaultSchema, htmlContent, this.sanitize);\n this.view.dispatch(this.view.state.tr.replaceSelection(slice).scrollIntoView());\n this.view.focus();\n }\n\n /** Runs a named editor command. Returns whether the command applied. */\n public execCommand(name: string, attrs?: CommandAttrs): boolean {\n if (!this.view) return false;\n const command = getCommand(this.view.state, name as CommandName, attrs);\n if (!command) return false;\n const applied = command(this.view.state, this.view.dispatch, this.view);\n this.view.focus();\n return applied;\n }\n\n /** True when the given mark/block command is active at the selection. */\n public isCommandActive(name: string): boolean {\n const ts = this.toolbarState;\n if (!ts) return false;\n switch (name) {\n case 'bold':\n return ts.bold;\n case 'italic':\n return ts.italic;\n case 'underline':\n return ts.underline;\n case 'strike':\n return ts.strike;\n case 'code':\n return ts.code;\n case 'link':\n return ts.linkActive;\n case 'bulletList':\n return ts.inBulletList;\n case 'orderedList':\n return ts.inOrderedList;\n case 'blockquote':\n return ts.inBlockquote;\n default:\n return false;\n }\n }\n\n // ---------------------------------------------------------------- render\n\n private handleCommand(event: CustomEvent<WysiwygCommandDetail>): void {\n event.stopPropagation();\n const { name, attrs } = event.detail;\n if (name === 'openLink') {\n this.openLinkEditor();\n return;\n }\n if (name === 'openImage') {\n this.openImagePanel();\n return;\n }\n if (name === 'openEmbed') {\n this.openEmbedPanel();\n return;\n }\n if (name === 'openBookmark') {\n this.openBookmarkPanel();\n return;\n }\n if (name === 'toggleShowBlocks') {\n this.showBlocks = !this.showBlocks;\n this.view?.focus();\n return;\n }\n if (name === 'toggleSource') {\n this.toggleSourceView();\n return;\n }\n if (name === 'togglePastePlainText') {\n this.pasteAsPlainText = !this.pasteAsPlainText;\n this.view?.focus();\n return;\n }\n if (name === 'toggleFullscreen') {\n this.toggleFullscreen();\n return;\n }\n if (name === 'openShortcutHelp') {\n this.openShortcutHelp();\n return;\n }\n if (name === 'openSpecialChars') {\n this.openSpecialChars();\n return;\n }\n if (name === 'openEmoji') {\n this.openEmojiPicker();\n return;\n }\n if (name === 'openFind') {\n this.openFindBar();\n return;\n }\n if (name === 'exportPdf') {\n this.exportToPdf();\n return;\n }\n if (name === 'exportWord') {\n this.exportToWord();\n return;\n }\n if (name === 'exportInlineHtml') {\n this.exportInlineHtml();\n return;\n }\n if (name === 'importWord') {\n this.importFromWordFile();\n return;\n }\n if (name === 'toggleFormatPainter') {\n this.toggleFormatPainter();\n return;\n }\n if (name === 'openMergeField') {\n this.openInsertMenu('merge');\n return;\n }\n if (name === 'openTemplate') {\n this.openInsertMenu('template');\n return;\n }\n if (name === 'openMarkdown') {\n this.openMarkdownPanel();\n return;\n }\n if (name === 'openMath') {\n this.openMathPanel();\n return;\n }\n this.execCommand(name, attrs);\n }\n\n private handleBaseKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n // The special-chars panel never takes focus, so its Esc lands here.\n if (this.specialCharsEl?.open) {\n this.closeSpecialChars();\n return;\n }\n // Esc exits fullscreen — but only when nothing else claimed it (panels\n // stopPropagation, ProseMirror handlers preventDefault).\n if (!this.fullscreen) return;\n const panelOpen =\n this.linkEditorEl?.open ||\n this.imagePanelEl?.open ||\n this.embedPanelEl?.open ||\n this.bookmarkPanelEl?.open ||\n this.emojiPickerEl?.open ||\n this.findBarEl?.open ||\n this.shortcutHelpEl?.open ||\n this.suggestListEl?.open;\n if (!panelOpen) this.fullscreen = false;\n }\n\n private handleChromeFocusOut(event: FocusEvent): void {\n // Focus left the widget entirely (e.g. clicked the page) while it was\n // parked on chrome like the language picker: close the overlays.\n const related = event.relatedTarget as Node | null;\n if (related && (this.shadowRoot?.contains(related) || this.contains(related))) return;\n if (this.view?.hasFocus()) return;\n this.hasFocus = false;\n this.updateOverlays();\n }\n\n /** The floating insert panels that should dismiss on outside interaction. */\n private get floatingPanels(): Array<{ open: boolean } | undefined> {\n return [\n this.linkEditorEl,\n this.imagePanelEl,\n this.embedPanelEl,\n this.bookmarkPanelEl,\n this.specialCharsEl,\n this.emojiPickerEl,\n this.insertMenuEl,\n this.mathPanelEl,\n this.markdownPanelEl,\n ];\n }\n\n /** Closes every open insert panel. `refocus` returns focus to the editor. */\n private closeAllPanels(refocus = true): void {\n if (this.linkEditorEl?.open) this.closeLinkEditor(refocus);\n if (this.imagePanelEl?.open) this.closeImagePanel(refocus);\n if (this.embedPanelEl?.open) this.closeEmbedPanel(refocus);\n if (this.bookmarkPanelEl?.open) this.closeBookmarkPanel(refocus);\n if (this.specialCharsEl?.open) this.closeSpecialChars(refocus);\n if (this.emojiPickerEl?.open) this.closeEmojiPicker(refocus);\n if (this.insertMenuEl?.open) this.closeInsertMenu(refocus);\n if (this.mathPanelEl?.open) this.closeMathPanel(refocus);\n if (this.markdownPanelEl?.open) this.closeMarkdownPanel(refocus);\n }\n\n /**\n * Closes any open insert panel when the pointer goes down outside of it —\n * whether elsewhere in the editor (e.g. the content area) or off the widget.\n */\n private onOutsidePointerDown = (event: Event): void => {\n const openPanels = this.floatingPanels.filter(\n (p): p is HTMLElement & { open: boolean } => !!p && (p as { open: boolean }).open\n );\n if (!openPanels.length) return;\n const path = event.composedPath();\n // Click landed inside an open panel — leave it be.\n if (openPanels.some(panel => path.includes(panel))) return;\n // Refocus the editor only when the click stayed within the widget.\n const insideWidget =\n path.includes(this) || (!!this.shadowRoot && path.includes(this.shadowRoot));\n this.closeAllPanels(insideWidget);\n };\n\n public render(): TemplateResult {\n const showToolbar = this.toolbar !== 'none' && !this.readonly && !this.sourceMode;\n return html`\n <div\n class=\"nile-wysiwyg ${this.showBlocks ? 'nile-wysiwyg--show-blocks' : ''}\"\n part=\"base\"\n @wysiwyg-command=${this.handleCommand}\n @focusout=${this.handleChromeFocusOut}\n @keydown=${this.handleBaseKeydown}\n >\n ${showToolbar\n ? html`\n <nile-wysiwyg-toolbar\n part=\"toolbar\"\n exportparts=\"button, select, color\"\n config=${this.toolbar}\n ?disabled=${this.disabled}\n .toolbarState=${this.toolbarState}\n ></nile-wysiwyg-toolbar>\n `\n : nothing}\n ${this.sourceMode\n ? html`\n <nile-wysiwyg-source-view\n @wysiwyg-source-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applySourceView(e.detail.html);\n }}\n @wysiwyg-source-cancel=${(e: Event) => {\n e.stopPropagation();\n this.applySourceView(null);\n }}\n ></nile-wysiwyg-source-view>\n `\n : nothing}\n <div\n class=\"nile-wysiwyg__surface\"\n part=\"surface\"\n style=${this.sourceMode ? 'display: none' : ''}\n ></div>\n ${(this.maxLength > 0 || this.showCounter) && !this.sourceMode\n ? html`\n <div\n class=\"nile-wysiwyg__counter ${this.maxLength > 0 &&\n this.counter.characters >= this.maxLength\n ? 'over'\n : ''}\"\n part=\"counter\"\n >\n ${this.maxLength > 0\n ? `${this.counter.characters} / ${this.maxLength}`\n : `${this.counter.words} words · ${this.counter.characters} characters`}\n </div>\n `\n : nothing}\n <nile-wysiwyg-shortcut-help\n @wysiwyg-shortcut-help-close=${(e: Event) => {\n e.stopPropagation();\n this.closeShortcutHelp();\n }}\n ></nile-wysiwyg-shortcut-help>\n <nile-wysiwyg-bubble-menu></nile-wysiwyg-bubble-menu>\n <nile-wysiwyg-table-menu></nile-wysiwyg-table-menu>\n <nile-wysiwyg-code-menu></nile-wysiwyg-code-menu>\n <nile-wysiwyg-image-menu></nile-wysiwyg-image-menu>\n <nile-wysiwyg-embed-menu></nile-wysiwyg-embed-menu>\n <nile-wysiwyg-special-chars\n @wysiwyg-char-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.insertSpecialChar(e.detail.char);\n }}\n @wysiwyg-char-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeSpecialChars();\n }}\n ></nile-wysiwyg-special-chars>\n <nile-wysiwyg-emoji-picker\n @wysiwyg-emoji-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeEmojiPicker();\n this.insertSpecialChar(e.detail.char);\n }}\n @wysiwyg-emoji-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeEmojiPicker();\n }}\n ></nile-wysiwyg-emoji-picker>\n <nile-wysiwyg-insert-menu\n @wysiwyg-insert-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.handleInsertSelect(e.detail.index);\n }}\n @wysiwyg-insert-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeInsertMenu();\n }}\n ></nile-wysiwyg-insert-menu>\n <nile-wysiwyg-math-panel\n @wysiwyg-math-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applyMath(e.detail.latex, e.detail.display);\n }}\n @wysiwyg-math-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeMathPanel();\n }}\n ></nile-wysiwyg-math-panel>\n <nile-wysiwyg-markdown-panel\n @wysiwyg-markdown-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeMarkdownPanel();\n this.insertMarkdown(e.detail.markdown);\n }}\n @wysiwyg-markdown-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeMarkdownPanel();\n }}\n ></nile-wysiwyg-markdown-panel>\n <nile-wysiwyg-embed-panel\n @wysiwyg-embed-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeEmbedPanel();\n this.execCommand('insertEmbed', {\n src: e.detail.src,\n provider: e.detail.provider,\n });\n }}\n @wysiwyg-embed-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeEmbedPanel();\n }}\n ></nile-wysiwyg-embed-panel>\n <nile-wysiwyg-bookmark-panel\n @wysiwyg-bookmark-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeBookmarkPanel();\n this.execCommand('insertBookmark', { id: e.detail.id });\n }}\n @wysiwyg-bookmark-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeBookmarkPanel();\n }}\n ></nile-wysiwyg-bookmark-panel>\n <nile-wysiwyg-suggest-list\n @wysiwyg-suggest-select=${(e: CustomEvent) => {\n e.stopPropagation();\n this.handleSuggestSelect(e.detail.item);\n }}\n ></nile-wysiwyg-suggest-list>\n <nile-wysiwyg-find-bar\n @wysiwyg-find=${(e: CustomEvent) => {\n e.stopPropagation();\n this.find(e.detail.query);\n }}\n @wysiwyg-find-step=${(e: CustomEvent) => {\n e.stopPropagation();\n if (e.detail.direction === 'prev') this.findPrev();\n else this.findNext();\n }}\n @wysiwyg-replace=${(e: CustomEvent) => {\n e.stopPropagation();\n this.replace(e.detail.value);\n }}\n @wysiwyg-replace-all=${(e: CustomEvent) => {\n e.stopPropagation();\n this.replaceAll(e.detail.value);\n }}\n @wysiwyg-find-close=${(e: Event) => {\n e.stopPropagation();\n this.closeFindBar();\n }}\n ></nile-wysiwyg-find-bar>\n <nile-wysiwyg-image-panel\n ?upload-from-computer=${this.uploadFromComputer}\n .maxFileSize=${this.imageMaxFileSize}\n @wysiwyg-image-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n const editing = this.imagePanelEl?.editing;\n this.closeImagePanel();\n this.execCommand(editing ? 'updateImage' : 'insertImage', {\n src: e.detail.src,\n alt: e.detail.alt || null,\n caption: e.detail.caption || null,\n });\n }}\n @wysiwyg-image-file=${(e: CustomEvent) => {\n e.stopPropagation();\n this.closeImagePanel();\n this.insertImageFile(e.detail.file, null, {\n alt: e.detail.alt || null,\n caption: e.detail.caption || null,\n });\n }}\n @wysiwyg-image-remove=${(e: Event) => {\n e.stopPropagation();\n this.closeImagePanel();\n this.execCommand('deleteImage');\n }}\n @wysiwyg-image-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeImagePanel();\n }}\n ></nile-wysiwyg-image-panel>\n <nile-wysiwyg-link-editor\n @wysiwyg-link-apply=${(e: CustomEvent) => {\n e.stopPropagation();\n this.applyLink(e.detail.href, e.detail.text);\n }}\n @wysiwyg-link-remove=${(e: Event) => {\n e.stopPropagation();\n this.execCommand('unlink');\n this.closeLinkEditor();\n }}\n @wysiwyg-link-cancel=${(e: Event) => {\n e.stopPropagation();\n this.closeLinkEditor();\n }}\n ></nile-wysiwyg-link-editor>\n </div>\n `;\n }\n}\n\nexport default NileWysiwygEditor;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-editor': NileWysiwygEditor;\n }\n}\n"],"names":["SLASH_ITEMS","key","label","hint","command","attrs","level","rows","cols","uploadCounter","_export","NileWysiwygEditor","si","super","this","value","placeholder","disabled","readonly","toolbar","DEFAULT_TOOLBAR","bubbleMenu","sanitize","singleLine","name","required","allowBase64Images","uploadFromComputer","imageMaxFileSize","mentions","noSlashCommands","noEmoji","maxLength","showCounter","stickyToolbar","snippets","mergeFields","templates","autosaveInterval","pasteAsPlainText","noMarkdownPaste","noTextTransform","fullscreen","showBlocks","hasFocus","sourceMode","counter","words","characters","insertMenuMode","mentionMatch","slashMatch","emojiMatch","activeSuggestSource","suggestDismissed","mentionQueryToken","lastAutosaveValue","defaultValue","syncingValue","pendingChange","previousBodyOverflow","onOutsidePointerDown","event","openPanels","floatingPanels","filter","p","open","length","path","composedPath","some","panel","includes","insideWidget","shadowRoot","closeAllPanels","attachInternals","internals","_this","_inherits","_j","_createClass","connectedCallback","hasUpdated","view","updateComplete","then","mountView","document","addEventListener","disconnectedCallback","removeEventListener","changeTimer","clearTimeout","autosaveTimer","clearInterval","body","style","overflow","destroy","undefined","firstUpdated","updated","changed","has","docToHtml","state","doc","setContent","setProps","dispatch","tr","updateValidity","restartAutosave","toolbarState","snapshotToolbar","updateState","buildState","setInterval","emit","buildChangeDetail","createEditorState","schema","defaultSchema","getPlaceholder","onLinkShortcut","openLinkEditor","onFindShortcut","openFindBar","onShortcutHelp","openShortcutHelp","onImageFiles","files","pos","_iterator","_createForOfIteratorHelper","s","_step","n","done","file","insertImageFile","err","e","f","getTriggers","Object","keys","onChange","match","updateSuggestList","onKeyDown","handleSuggestKey","slashCommands","emoji","getMaxLength","getForcePlainText","getMarkdownPaste","getSanitize","textTransform","_objectSpread","computeToolbarState","formatPainter","isFormatPainterArmed","surfaceEl","htmlToDoc","flattenToSingleParagraph","EditorView","dispatchTransaction","handleTransaction","editable","transformPastedHTML","pasted","cleaned","isOfficeHtml","cleanOfficeHtml","sanitizeHtml","handleDOMEvents","mousedown","closeSpecialChars","closeInsertMenu","focus","updateOverlays","blur","_view","related","relatedTarget","contains","flushChange","closeSuggestList","attributes","role","nodeViews","task_item","node","getPos","TaskItemView","image","ImageView","figure","FigureView","embed","EmbedView","math","MathView","mathRenderer","countWords","syncFormValue","newState","apply","selectionSet","selection","empty","applyTr","applyFormatPainter","findBarEl","find","getFindState","matchCount","matches","activeIndex","docChanged","detail","scheduleChange","isDocEmpty","json","docToJson","content","setTimeout","setFormValue","_this$surfaceEl","setValidity","valueMissing","formResetCallback","formDisabledCallback","checkValidity","reportValidity","positionOverlay","el","placement","baseEl","from","coords","coordsAtPos","baseRect","getBoundingClientRect","left","Math","max","min","width","offsetWidth","top","offsetHeight","bottom","positionOverlayBelowAnchor","anchor","anchorRect","right","concat","toolbarButton","_this$toolbarEl$shado","_this$toolbarEl","toolbarEl","querySelector","bubbleMenuEl","panelOpen","linkEditorEl","imagePanelEl","embedPanelEl","bookmarkPanelEl","emojiPickerEl","show","selectionEmpty","imageSelected","embedSelected","tableMenuEl","showTable","inTable","codeMenuEl","_this$toolbarState$co","showCode","inCodeBlock","language","codeBlockLanguage","imageMenuEl","showImage","embedMenuEl","showEmbed","openSpecialChars","specialCharsEl","refocus","insertSpecialChar","char","insertText","scrollIntoView","openInsertMenu","mode","insertMenuEl","menu","heading","emptyText","items","map","description","id","t","handleInsertSelect","index","field","execCommand","template","insertHTML","html","insertMergeField","changeCase","textCase","openMathPanel","mathPanelEl","reset","focusInput","closeMathPanel","openMarkdownPanel","markdownPanelEl","closeMarkdownPanel","applyMath","latex","display","mathDisplay","insertMath","arguments","openEmojiPicker","closeEmojiPicker","openEmbedPanel","closeEmbedPanel","openBookmarkPanel","closeBookmarkPanel","_this$view8","openImagePanel","info","selectedImageInfo","prefill","src","alt","_i$node$attrs$alt","caption","isFigure","textContent","closeImagePanel","_this$view9","insertImageAt","$pos","resolve","size","setSelection","TextSelection","near","_insertImageFile","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_args","meta","_context2","next","abrupt","metaAlt","_n$alt","metaCaption","insert","defaultPrevented","uploadHandler","at","setMeta","imageUploadKey","add","prev","mappedPos","findUploadPos","remove","_ref","t0","error","Promise","reject","reader","FileReader","onload","result","onerror","readAsDataURL","readFileAsDataURL","stop","dismissKeyFor","source","trigger","suggestListEl","selectCurrent","mention","active","slash","_this$mentions$t$trig","all","query","toLowerCase","item","token","provide","Array","isArray","i","snippetItems","EMOJI","slice","resetActive","handleSuggestSelect","_this$mentionMatch2","_this$slashMatch2","_this$emojiMatch2","nodes","create","replaceWith","to","text","startsWith","snippet","slashItem","closeFindBar","clearFindTr","_this$view12","searchTr","scrollToActiveMatch","findNext","findStepTr","findPrev","replace","replacement","replaceActiveTr","replaceAll","replaceAllTr","toggleSourceView","applySourceView","sourceViewEl","textarea","getHTML","htmlContent","_this20$view","getWordCount","toggleFormatPainter","disarmFormatPainter","armFormatPainter","get","_this$view$dom","_this$view13","dom","exportFilename","extension","downloadBlob","mime","filename","blob","Blob","type","url","URL","createObjectURL","createElement","href","download","appendChild","click","revokeObjectURL","getInlineStyledHTML","root","contentRoot","toInlineStyledHtml","exportInlineHtml","exportToWord","buildWordDocument","exportToPdf","options","buildPrintDocument","title","frame","setAttribute","assign","position","height","border","cleanup","win","contentWindow","once","print","fdoc","contentDocument","write","close","importFromWord","emitChange","importFromWordFile","input","accept","_i$files","shortcutHelpEl","focusPanel","closeShortcutHelp","toggleFullscreen","_this$toolbarState","_i$linkHref","_this22","ts","linkHref","allowText","linkActive","canRemove","closeLinkEditor","applyLink","linkType","marks","link","getMarkRange","$from","replaceSelectionWith","pmView","set","getJSON","getText","docToText","getMarkdown","docToMarkdown","setMarkdown","markdown","markdownToHtml","insertMarkdown","jsonToDoc","clear","htmlToSlice","replaceSelection","getCommand","applied","isCommandActive","bold","italic","underline","strike","code","inBulletList","inOrderedList","inBlockquote","handleCommand","stopPropagation","_i$detail","_this$view19","_this$view20","handleBaseKeydown","_this$specialCharsEl","handleChromeFocusOut","render","showToolbar","_templateObject","_taggedTemplateLiteral","_templateObject2","nothing","_templateObject3","_templateObject4","provider","direction","editing","styles","NileElement","formAssociated","__decorate","property","String","prototype","Boolean","reflect","attribute","Number","converter","fromAttribute","parsed","JSON","parse","out","_i9","_Object$keys","_unused","toAttribute","stringify","_unused2","_unused3","_unused4","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
System.register(["lit"],function(_export,_context){"use strict";var r,_templateObject,e;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}return{setters:[function(_lit){r=_lit.css;}],execute:function execute(){_export("s",e=r(_templateObject||(_templateObject=_taggedTemplateLiteral(["\n :host {\n display: block;\n font-family: var(\n --nile-wysiwyg-font-family,\n var(\n --nile-font-family-sans-serif,\n var(--ng-font-family-body, system-ui, -apple-system, sans-serif)\n )\n );\n }\n\n .nile-wysiwyg {\n position: relative;\n display: flex;\n flex-direction: column;\n border: 1px solid\n var(\n --nile-wysiwyg-border-color,\n var(--nile-colors-neutral-400, var(--ng-colors-border-neutral, #d0d5dd))\n );\n border-radius: var(\n --nile-wysiwyg-radius,\n var(--nile-radius-radius-xl, var(--ng-radius-md, 8px))\n );\n background: var(\n --nile-wysiwyg-bg,\n var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff))\n );\n box-sizing: border-box;\n }\n\n /* --- Fullscreen (distraction-free) mode --- */\n :host([fullscreen]) {\n position: fixed;\n inset: 0;\n z-index: var(--nile-wysiwyg-fullscreen-z-index, 1000);\n background: var(\n --nile-wysiwyg-bg,\n var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff))\n );\n }\n\n :host([fullscreen]) .nile-wysiwyg {\n height: 100%;\n border: none;\n border-radius: 0;\n }\n\n :host([fullscreen]) .nile-wysiwyg__surface {\n max-height: none;\n }\n\n :host([disabled]) .nile-wysiwyg {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled, #98a2b3));\n background: var(\n --nile-wysiwyg-disabled-bg,\n var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle, #f2f4f7))\n );\n cursor: not-allowed;\n pointer-events: none;\n }\n\n :host([disabled]) .ProseMirror {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle, #f2f4f7));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled, #98a2b3));\n }\n\n .nile-wysiwyg__surface {\n flex: 1;\n overflow-y: auto;\n max-height: var(--nile-wysiwyg-max-height, none);\n }\n\n /* --- ProseMirror base rules (inlined from prosemirror-view/style) --- */\n .ProseMirror {\n position: relative;\n word-wrap: break-word;\n white-space: pre-wrap;\n white-space: break-spaces;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n outline: none;\n padding: var(--nile-wysiwyg-content-padding, 12px);\n min-height: var(--nile-wysiwyg-min-height, 160px);\n font-size: var(--nile-wysiwyg-font-size, inherit);\n line-height: var(--nile-wysiwyg-line-height, inherit);\n tab-size: 4;\n -moz-tab-size: 4;\n word-break: break-word;\n color: var(\n --nile-wysiwyg-color,\n var(--nile-colors-dark-900, var(--ng-colors-text-primary, #101828))\n );\n box-sizing: border-box;\n border-radius: 0 0 var(--nile-wysiwyg-radius, var(--nile-radius-radius-xl, 8px))\n var(--nile-wysiwyg-radius, var(--nile-radius-radius-xl, 8px));\n }\n\n .ProseMirror pre {\n white-space: pre-wrap;\n }\n\n .ProseMirror li {\n position: relative;\n }\n\n .ProseMirror-hideselection *::selection {\n background: transparent;\n }\n\n .ProseMirror-hideselection {\n caret-color: transparent;\n }\n\n .ProseMirror-selectednode {\n outline: 2px solid\n var(--nile-wysiwyg-focus-border-color, var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb)));\n }\n\n /* Gap cursor (inlined from prosemirror-gapcursor/style) */\n .ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n }\n\n .ProseMirror-gapcursor:after {\n content: '';\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid currentColor;\n animation: nile-wysiwyg-cursor-blink 1.1s steps(2, start) infinite;\n }\n\n @keyframes nile-wysiwyg-cursor-blink {\n to {\n visibility: hidden;\n }\n }\n\n .ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n }\n\n /* --- Placeholder (legacy: neutral-500 at 0.7 opacity) --- */\n .nile-wysiwyg__empty::before {\n content: attr(data-placeholder);\n float: left;\n height: 0;\n pointer-events: none;\n user-select: none;\n opacity: 0.7;\n color: var(\n --nile-wysiwyg-placeholder-color,\n var(--nile-colors-neutral-500, var(--ng-colors-text-secondary, #98a2b3))\n );\n }\n\n /* --- Document content typography --- */\n .ProseMirror > :first-child {\n margin-top: 0;\n }\n\n .ProseMirror > :last-child {\n margin-bottom: 0;\n }\n\n /* Legacy nile-rich-text-editor typography */\n .ProseMirror p {\n margin: 1em 0;\n }\n\n .ProseMirror h1,\n .ProseMirror h2,\n .ProseMirror h3,\n .ProseMirror h4,\n .ProseMirror h5,\n .ProseMirror h6 {\n font-weight: bold;\n }\n\n .ProseMirror h1 {\n font-size: 2em;\n margin: 0.67em 0;\n }\n .ProseMirror h2 {\n font-size: 1.5em;\n margin: 0.83em 0;\n }\n .ProseMirror h3 {\n font-size: 1.17em;\n margin: 1em 0;\n }\n .ProseMirror h4 {\n font-size: 1em;\n margin: 1.33em 0;\n }\n .ProseMirror h5 {\n font-size: 0.83em;\n margin: 1.67em 0;\n }\n .ProseMirror h6 {\n font-size: 0.67em;\n margin: 2.33em 0;\n }\n\n .ProseMirror blockquote {\n margin: 0.5em 0;\n padding: 0.25em 0 0.25em 1em;\n border-left: 3px solid\n var(\n --nile-wysiwyg-blockquote-border,\n var(--nile-colors-neutral-300, #d0d5dd)\n );\n color: var(--nile-wysiwyg-blockquote-color, var(--nile-colors-neutral-600, #475467));\n }\n\n .ProseMirror ul,\n .ProseMirror ol {\n list-style-position: outside;\n padding-inline-start: 24px;\n }\n\n .ProseMirror hr {\n border: none;\n border-top: 1px solid var(--nile-wysiwyg-border-color, #d0d5dd);\n margin: 1em 0;\n }\n\n /* Legacy: brand color, no underline */\n .ProseMirror a {\n color: var(\n --nile-wysiwyg-link-color,\n var(--nile-colors-primary-600, var(--ng-colors-text-brand-tertiary-600, #2563eb))\n );\n text-decoration: none;\n cursor: pointer;\n }\n\n .ProseMirror code.nile-wysiwyg__inline-code {\n font-family: var(--nile-wysiwyg-code-font, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 0.9em;\n background: var(--nile-wysiwyg-code-bg, var(--nile-colors-neutral-100, #f2f4f7));\n border-radius: 4px;\n padding: 0.1em 0.35em;\n }\n\n /* --- Code blocks --- */\n .ProseMirror pre.nile-wysiwyg__code-block {\n font-family: var(--nile-wysiwyg-code-font, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 0.9em;\n background: var(--nile-wysiwyg-code-bg, var(--nile-colors-neutral-100, #f2f4f7));\n border: 1px solid var(--nile-colors-neutral-200, #eaecf0);\n border-radius: 6px;\n padding: 12px 14px;\n margin: 0.5em 0;\n overflow-x: auto;\n }\n\n /* --- Tables (rules required by prosemirror-tables) --- */\n .ProseMirror .tableWrapper {\n overflow-x: auto;\n margin: 0.5em 0;\n }\n\n .ProseMirror table {\n border-collapse: collapse;\n table-layout: fixed;\n width: 100%;\n overflow: hidden;\n }\n\n .ProseMirror td,\n .ProseMirror th {\n vertical-align: top;\n box-sizing: border-box;\n position: relative;\n border: 1px solid var(--nile-wysiwyg-table-border, var(--nile-colors-neutral-300, #d0d5dd));\n padding: 6px 8px;\n min-width: 1em;\n }\n\n .ProseMirror th {\n background: var(--nile-wysiwyg-table-header-bg, var(--nile-colors-neutral-50, #f9fafb));\n font-weight: 600;\n text-align: left;\n }\n\n .ProseMirror td > :last-child,\n .ProseMirror th > :last-child {\n margin-bottom: 0;\n }\n\n .ProseMirror .column-resize-handle {\n position: absolute;\n right: -2px;\n top: 0;\n bottom: 0;\n width: 4px;\n z-index: 20;\n background-color: var(--nile-colors-primary-300, #b692f6);\n pointer-events: none;\n }\n\n .ProseMirror.resize-cursor {\n cursor: ew-resize;\n cursor: col-resize;\n }\n\n /* --- Layout tables (role=\"presentation\"): borderless output, dashed\n guides while editing so the structure stays visible. --- */\n .ProseMirror table[data-layout] td,\n .ProseMirror table[data-layout] th {\n border: 1px dashed var(--nile-colors-neutral-300, #e4e7ec);\n background: transparent;\n font-weight: inherit;\n text-align: inherit;\n }\n\n /* --- Bookmarks: invisible anchors get a flag marker while editing --- */\n .ProseMirror a[data-bookmark] {\n display: inline-block;\n vertical-align: baseline;\n cursor: default;\n text-decoration: none;\n }\n\n .ProseMirror a[data-bookmark]::after {\n content: '\u2691';\n font-size: 12px;\n line-height: 1;\n padding: 0 1px;\n color: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n .ProseMirror .selectedCell:after {\n z-index: 2;\n position: absolute;\n content: '';\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background: var(--nile-wysiwyg-cell-selection, rgba(127, 86, 217, 0.12));\n pointer-events: none;\n }\n\n /* --- Images (ProseMirror's standard inline image node) --- */\n .ProseMirror img {\n max-width: 100%;\n height: auto;\n border-radius: 4px;\n }\n\n /* --- Image resize handles --- */\n .ProseMirror .nile-wysiwyg__image-resizer {\n position: relative;\n display: inline-block;\n line-height: 0;\n max-width: 100%;\n }\n\n .ProseMirror .nile-wysiwyg__resize-handle {\n display: none;\n position: absolute;\n width: 9px;\n height: 9px;\n background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n border: 1.5px solid #ffffff;\n border-radius: 2px;\n z-index: 2;\n }\n\n .ProseMirror .nile-wysiwyg__image-resizer--selected .nile-wysiwyg__resize-handle {\n display: block;\n }\n\n .ProseMirror .nile-wysiwyg__image-resizer--selected img {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n .ProseMirror .nile-wysiwyg__resize-handle--nw { top: -5px; left: -5px; cursor: nwse-resize; }\n .ProseMirror .nile-wysiwyg__resize-handle--ne { top: -5px; right: -5px; cursor: nesw-resize; }\n .ProseMirror .nile-wysiwyg__resize-handle--sw { bottom: -5px; left: -5px; cursor: nesw-resize; }\n .ProseMirror .nile-wysiwyg__resize-handle--se { bottom: -5px; right: -5px; cursor: nwse-resize; }\n\n /* --- Captioned figures --- */\n .ProseMirror figure.nile-wysiwyg__figure {\n margin: 0.75em 0;\n max-width: 100%;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure[data-align='center'] {\n margin-left: auto;\n margin-right: auto;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure[data-align='right'] {\n margin-left: auto;\n margin-right: 0;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure img {\n width: 100%;\n display: block;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure .nile-wysiwyg__image-resizer {\n display: block;\n }\n\n .ProseMirror .nile-wysiwyg__figcaption {\n font-size: 0.85em;\n color: var(--nile-colors-neutral-500, #667085);\n text-align: center;\n padding: 4px 8px;\n line-height: 1.4;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure--empty-caption .nile-wysiwyg__figcaption::before {\n content: 'Add a caption\u2026';\n float: left;\n width: 100%;\n pointer-events: none;\n color: var(--nile-colors-neutral-400, #98a2b3);\n margin-bottom: -1.4em;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure--selected {\n border-radius: 4px;\n }\n\n /* --- Embeds --- */\n .ProseMirror div.nile-wysiwyg__embed {\n position: relative;\n aspect-ratio: 16 / 9;\n /* Default size; an inline width from drag-resize overrides it, capped by\n max-width. overflow stays visible so the resize handles aren't clipped\n (rounding lives on the iframe). */\n width: min(640px, 100%);\n max-width: 100%;\n margin: 0.75em 0;\n border-radius: 8px;\n background: var(--nile-colors-neutral-100, #f2f4f7);\n }\n\n .ProseMirror div.nile-wysiwyg__embed iframe {\n width: 100%;\n height: 100%;\n border: 0;\n display: block;\n border-radius: 8px;\n /* Editing mode: the first click selects the node instead of hitting the\n iframe; once selected (or in readonly) the video is interactive. */\n pointer-events: none;\n }\n\n .ProseMirror div.nile-wysiwyg__embed.ProseMirror-selectednode iframe,\n :host([readonly]) .ProseMirror div.nile-wysiwyg__embed iframe {\n pointer-events: auto;\n }\n\n .ProseMirror div.nile-wysiwyg__embed.ProseMirror-selectednode {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n .ProseMirror div.nile-wysiwyg__embed.ProseMirror-selectednode .nile-wysiwyg__resize-handle {\n display: block;\n }\n\n /* A live resize drag must not lose mousemove to the embedded document. */\n .ProseMirror div.nile-wysiwyg__embed.nile-wysiwyg__resizing iframe {\n pointer-events: none !important;\n }\n\n /* --- Code highlighting (compact light theme for hljs tokens) --- */\n .ProseMirror .hljs-comment,\n .ProseMirror .hljs-quote {\n color: #a0a1a7;\n font-style: italic;\n }\n\n .ProseMirror .hljs-keyword,\n .ProseMirror .hljs-selector-tag,\n .ProseMirror .hljs-formula,\n .ProseMirror .hljs-doctag {\n color: #a626a4;\n }\n\n .ProseMirror .hljs-section,\n .ProseMirror .hljs-name,\n .ProseMirror .hljs-selector-id,\n .ProseMirror .hljs-selector-class,\n .ProseMirror .hljs-deletion,\n .ProseMirror .hljs-subst,\n .ProseMirror .hljs-tag {\n color: #e45649;\n }\n\n .ProseMirror .hljs-literal,\n .ProseMirror .hljs-built_in,\n .ProseMirror .hljs-bullet {\n color: #0184bb;\n }\n\n .ProseMirror .hljs-string,\n .ProseMirror .hljs-regexp,\n .ProseMirror .hljs-addition,\n .ProseMirror .hljs-attribute,\n .ProseMirror .hljs-meta .hljs-string {\n color: #50a14f;\n }\n\n .ProseMirror .hljs-attr,\n .ProseMirror .hljs-variable,\n .ProseMirror .hljs-template-variable,\n .ProseMirror .hljs-type,\n .ProseMirror .hljs-selector-attr,\n .ProseMirror .hljs-selector-pseudo,\n .ProseMirror .hljs-number {\n color: #986801;\n }\n\n .ProseMirror .hljs-symbol,\n .ProseMirror .hljs-meta,\n .ProseMirror .hljs-link,\n .ProseMirror .hljs-operator,\n .ProseMirror .hljs-title,\n .ProseMirror .hljs-title.class_,\n .ProseMirror .hljs-title.function_ {\n color: #4078f2;\n }\n\n .ProseMirror .hljs-emphasis {\n font-style: italic;\n }\n\n .ProseMirror .hljs-strong {\n font-weight: bold;\n }\n\n /* --- Checklists --- */\n .ProseMirror ul.nile-wysiwyg__task-list {\n list-style: none;\n padding-inline-start: 4px;\n }\n\n .ProseMirror li.nile-wysiwyg__task-item {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n\n .ProseMirror li.nile-wysiwyg__task-item > input[type='checkbox'] {\n /* Center on the first text line: (1 line box - checkbox height) / 2. */\n margin: calc((1em * 1.45 - 14px) / 2) 0 0;\n width: 14px;\n height: 14px;\n flex: none;\n cursor: pointer;\n accent-color: var(--nile-colors-primary-600, #2563eb);\n }\n\n .ProseMirror li.nile-wysiwyg__task-item > .nile-wysiwyg__task-content {\n flex: 1;\n min-width: 0;\n }\n\n /* The content's paragraph margins (legacy 1em) push text below the\n checkbox \u2014 strip them at the edges of each item. */\n .ProseMirror li.nile-wysiwyg__task-item > .nile-wysiwyg__task-content > :first-child {\n margin-top: 0;\n }\n\n .ProseMirror li.nile-wysiwyg__task-item > .nile-wysiwyg__task-content > :last-child {\n margin-bottom: 0;\n }\n\n .ProseMirror ul.nile-wysiwyg__task-list > li + li {\n margin-top: 0.35em;\n }\n\n .ProseMirror li.nile-wysiwyg__task-item[data-checked='true'] > .nile-wysiwyg__task-content {\n color: var(--nile-colors-neutral-500, #98a2b3);\n text-decoration: line-through;\n }\n\n /* --- Counter footer --- */\n .nile-wysiwyg__counter {\n padding: 4px 12px 6px;\n text-align: right;\n font-size: 12px;\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-secondary, #98a2b3));\n border-top: 1px solid var(--nile-colors-neutral-200, #eaecf0);\n }\n\n .nile-wysiwyg__counter.over {\n color: var(--nile-colors-error-600, #d92d20);\n font-weight: 600;\n }\n\n /* --- Sticky toolbar --- */\n :host([sticky-toolbar]) nile-wysiwyg-toolbar {\n position: sticky;\n top: var(--nile-wysiwyg-sticky-top, 0);\n z-index: 12;\n }\n\n /* --- Mentions & suggestions --- */\n .ProseMirror span.nile-wysiwyg__mention {\n display: inline-block;\n padding: 0 4px;\n border-radius: 4px;\n background: var(--nile-wysiwyg-mention-bg, var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff)));\n color: var(--nile-wysiwyg-mention-color, var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700, #1d4ed8)));\n font-weight: 500;\n white-space: nowrap;\n }\n\n .ProseMirror span.nile-wysiwyg__mention.ProseMirror-selectednode {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n /* --- Merge fields --- */\n .ProseMirror span.nile-wysiwyg__merge-field {\n display: inline-block;\n padding: 0 4px;\n border-radius: 4px;\n background: var(--nile-wysiwyg-merge-bg, var(--nile-colors-neutral-100, #f2f4f7));\n color: var(--nile-wysiwyg-merge-color, var(--nile-colors-neutral-700, #344054));\n border: 1px dashed var(--nile-colors-neutral-400, #d0d5dd);\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 0.9em;\n white-space: nowrap;\n }\n\n .ProseMirror span.nile-wysiwyg__merge-field.ProseMirror-selectednode {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n /* --- Math --- */\n .ProseMirror span.nile-wysiwyg__math {\n display: inline-block;\n padding: 0 2px;\n font-family: \"Cambria Math\", \"Latin Modern Math\", serif;\n }\n\n .ProseMirror span.nile-wysiwyg__math--block {\n display: block;\n text-align: center;\n margin: 8px 0;\n }\n\n .ProseMirror span.nile-wysiwyg__math.ProseMirror-selectednode {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n border-radius: 3px;\n }\n\n /* Format painter armed: hint the next selection will be painted. */\n .ProseMirror.nile-wysiwyg--painting {\n cursor: cell;\n }\n\n .ProseMirror .nile-wysiwyg__suggestion {\n background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff));\n border-radius: 3px;\n }\n\n /* --- Find & replace highlights --- */\n .ProseMirror .nile-wysiwyg__find-match {\n background: var(--nile-wysiwyg-find-bg, rgba(255, 214, 102, 0.45));\n border-radius: 2px;\n }\n\n .ProseMirror .nile-wysiwyg__find-active {\n background: var(--nile-wysiwyg-find-active-bg, rgba(255, 170, 0, 0.65));\n }\n\n /* --- Upload placeholder --- */\n .nile-wysiwyg__upload-placeholder {\n display: inline-block;\n padding: 6px 12px;\n border: 1px dashed var(--nile-colors-neutral-400, #d0d5dd);\n border-radius: 6px;\n background: var(--nile-colors-neutral-50, #f9fafb);\n color: var(--nile-colors-neutral-600, #475467);\n font-size: 0.85em;\n }\n\n /* --- Multi-level (legal) ordered lists: 1 / 1.1 / 1.1.1 numbering.\n Serialized output carries data-list-style=\"multilevel\"; consumers\n rendering it outside the editor need these same counter rules. --- */\n .ProseMirror ol[data-list-style='multilevel'],\n .ProseMirror ol[data-list-style='multilevel'] ol {\n list-style: none;\n counter-reset: nile-multilevel;\n }\n\n .ProseMirror ol[data-list-style='multilevel'] > li,\n .ProseMirror ol[data-list-style='multilevel'] ol > li {\n counter-increment: nile-multilevel;\n }\n\n /* The number sits inside the item's first paragraph so it shares a line. */\n .ProseMirror ol[data-list-style='multilevel'] > li > p:first-child::before,\n .ProseMirror ol[data-list-style='multilevel'] ol > li > p:first-child::before {\n content: counters(nile-multilevel, '.') '. ';\n font-variant-numeric: tabular-nums;\n }\n\n /* --- Show blocks: dashed outlines + tag labels while editing --- */\n .nile-wysiwyg--show-blocks .ProseMirror p,\n .nile-wysiwyg--show-blocks .ProseMirror h1,\n .nile-wysiwyg--show-blocks .ProseMirror h2,\n .nile-wysiwyg--show-blocks .ProseMirror h3,\n .nile-wysiwyg--show-blocks .ProseMirror h4,\n .nile-wysiwyg--show-blocks .ProseMirror h5,\n .nile-wysiwyg--show-blocks .ProseMirror h6,\n .nile-wysiwyg--show-blocks .ProseMirror blockquote,\n .nile-wysiwyg--show-blocks .ProseMirror pre,\n .nile-wysiwyg--show-blocks .ProseMirror figure,\n .nile-wysiwyg--show-blocks .ProseMirror ul,\n .nile-wysiwyg--show-blocks .ProseMirror ol,\n .nile-wysiwyg--show-blocks .ProseMirror li,\n .nile-wysiwyg--show-blocks .ProseMirror table {\n outline: 1px dashed var(--nile-wysiwyg-block-outline, var(--nile-colors-neutral-400, #d0d5dd));\n outline-offset: -1px;\n }\n\n .nile-wysiwyg--show-blocks .ProseMirror p,\n .nile-wysiwyg--show-blocks .ProseMirror h1,\n .nile-wysiwyg--show-blocks .ProseMirror h2,\n .nile-wysiwyg--show-blocks .ProseMirror h3,\n .nile-wysiwyg--show-blocks .ProseMirror h4,\n .nile-wysiwyg--show-blocks .ProseMirror h5,\n .nile-wysiwyg--show-blocks .ProseMirror h6,\n .nile-wysiwyg--show-blocks .ProseMirror blockquote,\n .nile-wysiwyg--show-blocks .ProseMirror pre {\n position: relative;\n }\n\n .nile-wysiwyg--show-blocks .ProseMirror p::after,\n .nile-wysiwyg--show-blocks .ProseMirror h1::after,\n .nile-wysiwyg--show-blocks .ProseMirror h2::after,\n .nile-wysiwyg--show-blocks .ProseMirror h3::after,\n .nile-wysiwyg--show-blocks .ProseMirror h4::after,\n .nile-wysiwyg--show-blocks .ProseMirror h5::after,\n .nile-wysiwyg--show-blocks .ProseMirror h6::after,\n .nile-wysiwyg--show-blocks .ProseMirror blockquote::after,\n .nile-wysiwyg--show-blocks .ProseMirror pre::after {\n position: absolute;\n top: 0;\n left: 0;\n padding: 0 3px;\n font-family: system-ui, sans-serif;\n font-size: 9px;\n font-weight: 600;\n font-style: normal;\n line-height: 14px;\n letter-spacing: 0.5px;\n color: var(--nile-colors-neutral-500, #667085);\n background: var(--nile-colors-neutral-100, #f2f4f7);\n border-radius: 0 0 4px 0;\n pointer-events: none;\n }\n\n .nile-wysiwyg--show-blocks .ProseMirror p::after { content: 'P'; }\n .nile-wysiwyg--show-blocks .ProseMirror h1::after { content: 'H1'; }\n .nile-wysiwyg--show-blocks .ProseMirror h2::after { content: 'H2'; }\n .nile-wysiwyg--show-blocks .ProseMirror h3::after { content: 'H3'; }\n .nile-wysiwyg--show-blocks .ProseMirror h4::after { content: 'H4'; }\n .nile-wysiwyg--show-blocks .ProseMirror h5::after { content: 'H5'; }\n .nile-wysiwyg--show-blocks .ProseMirror h6::after { content: 'H6'; }\n .nile-wysiwyg--show-blocks .ProseMirror blockquote::after { content: 'QUOTE'; }\n .nile-wysiwyg--show-blocks .ProseMirror pre::after { content: 'PRE'; }\n"]))));}};});
|
|
2
|
+
//# sourceMappingURL=nile-wysiwyg-editor.css.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nile-wysiwyg-editor.css.cjs.js","sources":["../../../src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`\n :host {\n display: block;\n font-family: var(\n --nile-wysiwyg-font-family,\n var(\n --nile-font-family-sans-serif,\n var(--ng-font-family-body, system-ui, -apple-system, sans-serif)\n )\n );\n }\n\n .nile-wysiwyg {\n position: relative;\n display: flex;\n flex-direction: column;\n border: 1px solid\n var(\n --nile-wysiwyg-border-color,\n var(--nile-colors-neutral-400, var(--ng-colors-border-neutral, #d0d5dd))\n );\n border-radius: var(\n --nile-wysiwyg-radius,\n var(--nile-radius-radius-xl, var(--ng-radius-md, 8px))\n );\n background: var(\n --nile-wysiwyg-bg,\n var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff))\n );\n box-sizing: border-box;\n }\n\n /* --- Fullscreen (distraction-free) mode --- */\n :host([fullscreen]) {\n position: fixed;\n inset: 0;\n z-index: var(--nile-wysiwyg-fullscreen-z-index, 1000);\n background: var(\n --nile-wysiwyg-bg,\n var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff))\n );\n }\n\n :host([fullscreen]) .nile-wysiwyg {\n height: 100%;\n border: none;\n border-radius: 0;\n }\n\n :host([fullscreen]) .nile-wysiwyg__surface {\n max-height: none;\n }\n\n :host([disabled]) .nile-wysiwyg {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled, #98a2b3));\n background: var(\n --nile-wysiwyg-disabled-bg,\n var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle, #f2f4f7))\n );\n cursor: not-allowed;\n pointer-events: none;\n }\n\n :host([disabled]) .ProseMirror {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle, #f2f4f7));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled, #98a2b3));\n }\n\n .nile-wysiwyg__surface {\n flex: 1;\n overflow-y: auto;\n max-height: var(--nile-wysiwyg-max-height, none);\n }\n\n /* --- ProseMirror base rules (inlined from prosemirror-view/style) --- */\n .ProseMirror {\n position: relative;\n word-wrap: break-word;\n white-space: pre-wrap;\n white-space: break-spaces;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n outline: none;\n padding: var(--nile-wysiwyg-content-padding, 12px);\n min-height: var(--nile-wysiwyg-min-height, 160px);\n font-size: var(--nile-wysiwyg-font-size, inherit);\n line-height: var(--nile-wysiwyg-line-height, inherit);\n tab-size: 4;\n -moz-tab-size: 4;\n word-break: break-word;\n color: var(\n --nile-wysiwyg-color,\n var(--nile-colors-dark-900, var(--ng-colors-text-primary, #101828))\n );\n box-sizing: border-box;\n border-radius: 0 0 var(--nile-wysiwyg-radius, var(--nile-radius-radius-xl, 8px))\n var(--nile-wysiwyg-radius, var(--nile-radius-radius-xl, 8px));\n }\n\n .ProseMirror pre {\n white-space: pre-wrap;\n }\n\n .ProseMirror li {\n position: relative;\n }\n\n .ProseMirror-hideselection *::selection {\n background: transparent;\n }\n\n .ProseMirror-hideselection {\n caret-color: transparent;\n }\n\n .ProseMirror-selectednode {\n outline: 2px solid\n var(--nile-wysiwyg-focus-border-color, var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb)));\n }\n\n /* Gap cursor (inlined from prosemirror-gapcursor/style) */\n .ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n }\n\n .ProseMirror-gapcursor:after {\n content: '';\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid currentColor;\n animation: nile-wysiwyg-cursor-blink 1.1s steps(2, start) infinite;\n }\n\n @keyframes nile-wysiwyg-cursor-blink {\n to {\n visibility: hidden;\n }\n }\n\n .ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n }\n\n /* --- Placeholder (legacy: neutral-500 at 0.7 opacity) --- */\n .nile-wysiwyg__empty::before {\n content: attr(data-placeholder);\n float: left;\n height: 0;\n pointer-events: none;\n user-select: none;\n opacity: 0.7;\n color: var(\n --nile-wysiwyg-placeholder-color,\n var(--nile-colors-neutral-500, var(--ng-colors-text-secondary, #98a2b3))\n );\n }\n\n /* --- Document content typography --- */\n .ProseMirror > :first-child {\n margin-top: 0;\n }\n\n .ProseMirror > :last-child {\n margin-bottom: 0;\n }\n\n /* Legacy nile-rich-text-editor typography */\n .ProseMirror p {\n margin: 1em 0;\n }\n\n .ProseMirror h1,\n .ProseMirror h2,\n .ProseMirror h3,\n .ProseMirror h4,\n .ProseMirror h5,\n .ProseMirror h6 {\n font-weight: bold;\n }\n\n .ProseMirror h1 {\n font-size: 2em;\n margin: 0.67em 0;\n }\n .ProseMirror h2 {\n font-size: 1.5em;\n margin: 0.83em 0;\n }\n .ProseMirror h3 {\n font-size: 1.17em;\n margin: 1em 0;\n }\n .ProseMirror h4 {\n font-size: 1em;\n margin: 1.33em 0;\n }\n .ProseMirror h5 {\n font-size: 0.83em;\n margin: 1.67em 0;\n }\n .ProseMirror h6 {\n font-size: 0.67em;\n margin: 2.33em 0;\n }\n\n .ProseMirror blockquote {\n margin: 0.5em 0;\n padding: 0.25em 0 0.25em 1em;\n border-left: 3px solid\n var(\n --nile-wysiwyg-blockquote-border,\n var(--nile-colors-neutral-300, #d0d5dd)\n );\n color: var(--nile-wysiwyg-blockquote-color, var(--nile-colors-neutral-600, #475467));\n }\n\n .ProseMirror ul,\n .ProseMirror ol {\n list-style-position: outside;\n padding-inline-start: 24px;\n }\n\n .ProseMirror hr {\n border: none;\n border-top: 1px solid var(--nile-wysiwyg-border-color, #d0d5dd);\n margin: 1em 0;\n }\n\n /* Legacy: brand color, no underline */\n .ProseMirror a {\n color: var(\n --nile-wysiwyg-link-color,\n var(--nile-colors-primary-600, var(--ng-colors-text-brand-tertiary-600, #2563eb))\n );\n text-decoration: none;\n cursor: pointer;\n }\n\n .ProseMirror code.nile-wysiwyg__inline-code {\n font-family: var(--nile-wysiwyg-code-font, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 0.9em;\n background: var(--nile-wysiwyg-code-bg, var(--nile-colors-neutral-100, #f2f4f7));\n border-radius: 4px;\n padding: 0.1em 0.35em;\n }\n\n /* --- Code blocks --- */\n .ProseMirror pre.nile-wysiwyg__code-block {\n font-family: var(--nile-wysiwyg-code-font, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 0.9em;\n background: var(--nile-wysiwyg-code-bg, var(--nile-colors-neutral-100, #f2f4f7));\n border: 1px solid var(--nile-colors-neutral-200, #eaecf0);\n border-radius: 6px;\n padding: 12px 14px;\n margin: 0.5em 0;\n overflow-x: auto;\n }\n\n /* --- Tables (rules required by prosemirror-tables) --- */\n .ProseMirror .tableWrapper {\n overflow-x: auto;\n margin: 0.5em 0;\n }\n\n .ProseMirror table {\n border-collapse: collapse;\n table-layout: fixed;\n width: 100%;\n overflow: hidden;\n }\n\n .ProseMirror td,\n .ProseMirror th {\n vertical-align: top;\n box-sizing: border-box;\n position: relative;\n border: 1px solid var(--nile-wysiwyg-table-border, var(--nile-colors-neutral-300, #d0d5dd));\n padding: 6px 8px;\n min-width: 1em;\n }\n\n .ProseMirror th {\n background: var(--nile-wysiwyg-table-header-bg, var(--nile-colors-neutral-50, #f9fafb));\n font-weight: 600;\n text-align: left;\n }\n\n .ProseMirror td > :last-child,\n .ProseMirror th > :last-child {\n margin-bottom: 0;\n }\n\n .ProseMirror .column-resize-handle {\n position: absolute;\n right: -2px;\n top: 0;\n bottom: 0;\n width: 4px;\n z-index: 20;\n background-color: var(--nile-colors-primary-300, #b692f6);\n pointer-events: none;\n }\n\n .ProseMirror.resize-cursor {\n cursor: ew-resize;\n cursor: col-resize;\n }\n\n /* --- Layout tables (role=\"presentation\"): borderless output, dashed\n guides while editing so the structure stays visible. --- */\n .ProseMirror table[data-layout] td,\n .ProseMirror table[data-layout] th {\n border: 1px dashed var(--nile-colors-neutral-300, #e4e7ec);\n background: transparent;\n font-weight: inherit;\n text-align: inherit;\n }\n\n /* --- Bookmarks: invisible anchors get a flag marker while editing --- */\n .ProseMirror a[data-bookmark] {\n display: inline-block;\n vertical-align: baseline;\n cursor: default;\n text-decoration: none;\n }\n\n .ProseMirror a[data-bookmark]::after {\n content: '⚑';\n font-size: 12px;\n line-height: 1;\n padding: 0 1px;\n color: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n .ProseMirror .selectedCell:after {\n z-index: 2;\n position: absolute;\n content: '';\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background: var(--nile-wysiwyg-cell-selection, rgba(127, 86, 217, 0.12));\n pointer-events: none;\n }\n\n /* --- Images (ProseMirror's standard inline image node) --- */\n .ProseMirror img {\n max-width: 100%;\n height: auto;\n border-radius: 4px;\n }\n\n /* --- Image resize handles --- */\n .ProseMirror .nile-wysiwyg__image-resizer {\n position: relative;\n display: inline-block;\n line-height: 0;\n max-width: 100%;\n }\n\n .ProseMirror .nile-wysiwyg__resize-handle {\n display: none;\n position: absolute;\n width: 9px;\n height: 9px;\n background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n border: 1.5px solid #ffffff;\n border-radius: 2px;\n z-index: 2;\n }\n\n .ProseMirror .nile-wysiwyg__image-resizer--selected .nile-wysiwyg__resize-handle {\n display: block;\n }\n\n .ProseMirror .nile-wysiwyg__image-resizer--selected img {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n .ProseMirror .nile-wysiwyg__resize-handle--nw { top: -5px; left: -5px; cursor: nwse-resize; }\n .ProseMirror .nile-wysiwyg__resize-handle--ne { top: -5px; right: -5px; cursor: nesw-resize; }\n .ProseMirror .nile-wysiwyg__resize-handle--sw { bottom: -5px; left: -5px; cursor: nesw-resize; }\n .ProseMirror .nile-wysiwyg__resize-handle--se { bottom: -5px; right: -5px; cursor: nwse-resize; }\n\n /* --- Captioned figures --- */\n .ProseMirror figure.nile-wysiwyg__figure {\n margin: 0.75em 0;\n max-width: 100%;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure[data-align='center'] {\n margin-left: auto;\n margin-right: auto;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure[data-align='right'] {\n margin-left: auto;\n margin-right: 0;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure img {\n width: 100%;\n display: block;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure .nile-wysiwyg__image-resizer {\n display: block;\n }\n\n .ProseMirror .nile-wysiwyg__figcaption {\n font-size: 0.85em;\n color: var(--nile-colors-neutral-500, #667085);\n text-align: center;\n padding: 4px 8px;\n line-height: 1.4;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure--empty-caption .nile-wysiwyg__figcaption::before {\n content: 'Add a caption…';\n float: left;\n width: 100%;\n pointer-events: none;\n color: var(--nile-colors-neutral-400, #98a2b3);\n margin-bottom: -1.4em;\n }\n\n .ProseMirror figure.nile-wysiwyg__figure--selected {\n border-radius: 4px;\n }\n\n /* --- Embeds --- */\n .ProseMirror div.nile-wysiwyg__embed {\n position: relative;\n aspect-ratio: 16 / 9;\n /* Default size; an inline width from drag-resize overrides it, capped by\n max-width. overflow stays visible so the resize handles aren't clipped\n (rounding lives on the iframe). */\n width: min(640px, 100%);\n max-width: 100%;\n margin: 0.75em 0;\n border-radius: 8px;\n background: var(--nile-colors-neutral-100, #f2f4f7);\n }\n\n .ProseMirror div.nile-wysiwyg__embed iframe {\n width: 100%;\n height: 100%;\n border: 0;\n display: block;\n border-radius: 8px;\n /* Editing mode: the first click selects the node instead of hitting the\n iframe; once selected (or in readonly) the video is interactive. */\n pointer-events: none;\n }\n\n .ProseMirror div.nile-wysiwyg__embed.ProseMirror-selectednode iframe,\n :host([readonly]) .ProseMirror div.nile-wysiwyg__embed iframe {\n pointer-events: auto;\n }\n\n .ProseMirror div.nile-wysiwyg__embed.ProseMirror-selectednode {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n .ProseMirror div.nile-wysiwyg__embed.ProseMirror-selectednode .nile-wysiwyg__resize-handle {\n display: block;\n }\n\n /* A live resize drag must not lose mousemove to the embedded document. */\n .ProseMirror div.nile-wysiwyg__embed.nile-wysiwyg__resizing iframe {\n pointer-events: none !important;\n }\n\n /* --- Code highlighting (compact light theme for hljs tokens) --- */\n .ProseMirror .hljs-comment,\n .ProseMirror .hljs-quote {\n color: #a0a1a7;\n font-style: italic;\n }\n\n .ProseMirror .hljs-keyword,\n .ProseMirror .hljs-selector-tag,\n .ProseMirror .hljs-formula,\n .ProseMirror .hljs-doctag {\n color: #a626a4;\n }\n\n .ProseMirror .hljs-section,\n .ProseMirror .hljs-name,\n .ProseMirror .hljs-selector-id,\n .ProseMirror .hljs-selector-class,\n .ProseMirror .hljs-deletion,\n .ProseMirror .hljs-subst,\n .ProseMirror .hljs-tag {\n color: #e45649;\n }\n\n .ProseMirror .hljs-literal,\n .ProseMirror .hljs-built_in,\n .ProseMirror .hljs-bullet {\n color: #0184bb;\n }\n\n .ProseMirror .hljs-string,\n .ProseMirror .hljs-regexp,\n .ProseMirror .hljs-addition,\n .ProseMirror .hljs-attribute,\n .ProseMirror .hljs-meta .hljs-string {\n color: #50a14f;\n }\n\n .ProseMirror .hljs-attr,\n .ProseMirror .hljs-variable,\n .ProseMirror .hljs-template-variable,\n .ProseMirror .hljs-type,\n .ProseMirror .hljs-selector-attr,\n .ProseMirror .hljs-selector-pseudo,\n .ProseMirror .hljs-number {\n color: #986801;\n }\n\n .ProseMirror .hljs-symbol,\n .ProseMirror .hljs-meta,\n .ProseMirror .hljs-link,\n .ProseMirror .hljs-operator,\n .ProseMirror .hljs-title,\n .ProseMirror .hljs-title.class_,\n .ProseMirror .hljs-title.function_ {\n color: #4078f2;\n }\n\n .ProseMirror .hljs-emphasis {\n font-style: italic;\n }\n\n .ProseMirror .hljs-strong {\n font-weight: bold;\n }\n\n /* --- Checklists --- */\n .ProseMirror ul.nile-wysiwyg__task-list {\n list-style: none;\n padding-inline-start: 4px;\n }\n\n .ProseMirror li.nile-wysiwyg__task-item {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n\n .ProseMirror li.nile-wysiwyg__task-item > input[type='checkbox'] {\n /* Center on the first text line: (1 line box - checkbox height) / 2. */\n margin: calc((1em * 1.45 - 14px) / 2) 0 0;\n width: 14px;\n height: 14px;\n flex: none;\n cursor: pointer;\n accent-color: var(--nile-colors-primary-600, #2563eb);\n }\n\n .ProseMirror li.nile-wysiwyg__task-item > .nile-wysiwyg__task-content {\n flex: 1;\n min-width: 0;\n }\n\n /* The content's paragraph margins (legacy 1em) push text below the\n checkbox — strip them at the edges of each item. */\n .ProseMirror li.nile-wysiwyg__task-item > .nile-wysiwyg__task-content > :first-child {\n margin-top: 0;\n }\n\n .ProseMirror li.nile-wysiwyg__task-item > .nile-wysiwyg__task-content > :last-child {\n margin-bottom: 0;\n }\n\n .ProseMirror ul.nile-wysiwyg__task-list > li + li {\n margin-top: 0.35em;\n }\n\n .ProseMirror li.nile-wysiwyg__task-item[data-checked='true'] > .nile-wysiwyg__task-content {\n color: var(--nile-colors-neutral-500, #98a2b3);\n text-decoration: line-through;\n }\n\n /* --- Counter footer --- */\n .nile-wysiwyg__counter {\n padding: 4px 12px 6px;\n text-align: right;\n font-size: 12px;\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-secondary, #98a2b3));\n border-top: 1px solid var(--nile-colors-neutral-200, #eaecf0);\n }\n\n .nile-wysiwyg__counter.over {\n color: var(--nile-colors-error-600, #d92d20);\n font-weight: 600;\n }\n\n /* --- Sticky toolbar --- */\n :host([sticky-toolbar]) nile-wysiwyg-toolbar {\n position: sticky;\n top: var(--nile-wysiwyg-sticky-top, 0);\n z-index: 12;\n }\n\n /* --- Mentions & suggestions --- */\n .ProseMirror span.nile-wysiwyg__mention {\n display: inline-block;\n padding: 0 4px;\n border-radius: 4px;\n background: var(--nile-wysiwyg-mention-bg, var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff)));\n color: var(--nile-wysiwyg-mention-color, var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700, #1d4ed8)));\n font-weight: 500;\n white-space: nowrap;\n }\n\n .ProseMirror span.nile-wysiwyg__mention.ProseMirror-selectednode {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n /* --- Merge fields --- */\n .ProseMirror span.nile-wysiwyg__merge-field {\n display: inline-block;\n padding: 0 4px;\n border-radius: 4px;\n background: var(--nile-wysiwyg-merge-bg, var(--nile-colors-neutral-100, #f2f4f7));\n color: var(--nile-wysiwyg-merge-color, var(--nile-colors-neutral-700, #344054));\n border: 1px dashed var(--nile-colors-neutral-400, #d0d5dd);\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 0.9em;\n white-space: nowrap;\n }\n\n .ProseMirror span.nile-wysiwyg__merge-field.ProseMirror-selectednode {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n /* --- Math --- */\n .ProseMirror span.nile-wysiwyg__math {\n display: inline-block;\n padding: 0 2px;\n font-family: \"Cambria Math\", \"Latin Modern Math\", serif;\n }\n\n .ProseMirror span.nile-wysiwyg__math--block {\n display: block;\n text-align: center;\n margin: 8px 0;\n }\n\n .ProseMirror span.nile-wysiwyg__math.ProseMirror-selectednode {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n border-radius: 3px;\n }\n\n /* Format painter armed: hint the next selection will be painted. */\n .ProseMirror.nile-wysiwyg--painting {\n cursor: cell;\n }\n\n .ProseMirror .nile-wysiwyg__suggestion {\n background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff));\n border-radius: 3px;\n }\n\n /* --- Find & replace highlights --- */\n .ProseMirror .nile-wysiwyg__find-match {\n background: var(--nile-wysiwyg-find-bg, rgba(255, 214, 102, 0.45));\n border-radius: 2px;\n }\n\n .ProseMirror .nile-wysiwyg__find-active {\n background: var(--nile-wysiwyg-find-active-bg, rgba(255, 170, 0, 0.65));\n }\n\n /* --- Upload placeholder --- */\n .nile-wysiwyg__upload-placeholder {\n display: inline-block;\n padding: 6px 12px;\n border: 1px dashed var(--nile-colors-neutral-400, #d0d5dd);\n border-radius: 6px;\n background: var(--nile-colors-neutral-50, #f9fafb);\n color: var(--nile-colors-neutral-600, #475467);\n font-size: 0.85em;\n }\n\n /* --- Multi-level (legal) ordered lists: 1 / 1.1 / 1.1.1 numbering.\n Serialized output carries data-list-style=\"multilevel\"; consumers\n rendering it outside the editor need these same counter rules. --- */\n .ProseMirror ol[data-list-style='multilevel'],\n .ProseMirror ol[data-list-style='multilevel'] ol {\n list-style: none;\n counter-reset: nile-multilevel;\n }\n\n .ProseMirror ol[data-list-style='multilevel'] > li,\n .ProseMirror ol[data-list-style='multilevel'] ol > li {\n counter-increment: nile-multilevel;\n }\n\n /* The number sits inside the item's first paragraph so it shares a line. */\n .ProseMirror ol[data-list-style='multilevel'] > li > p:first-child::before,\n .ProseMirror ol[data-list-style='multilevel'] ol > li > p:first-child::before {\n content: counters(nile-multilevel, '.') '. ';\n font-variant-numeric: tabular-nums;\n }\n\n /* --- Show blocks: dashed outlines + tag labels while editing --- */\n .nile-wysiwyg--show-blocks .ProseMirror p,\n .nile-wysiwyg--show-blocks .ProseMirror h1,\n .nile-wysiwyg--show-blocks .ProseMirror h2,\n .nile-wysiwyg--show-blocks .ProseMirror h3,\n .nile-wysiwyg--show-blocks .ProseMirror h4,\n .nile-wysiwyg--show-blocks .ProseMirror h5,\n .nile-wysiwyg--show-blocks .ProseMirror h6,\n .nile-wysiwyg--show-blocks .ProseMirror blockquote,\n .nile-wysiwyg--show-blocks .ProseMirror pre,\n .nile-wysiwyg--show-blocks .ProseMirror figure,\n .nile-wysiwyg--show-blocks .ProseMirror ul,\n .nile-wysiwyg--show-blocks .ProseMirror ol,\n .nile-wysiwyg--show-blocks .ProseMirror li,\n .nile-wysiwyg--show-blocks .ProseMirror table {\n outline: 1px dashed var(--nile-wysiwyg-block-outline, var(--nile-colors-neutral-400, #d0d5dd));\n outline-offset: -1px;\n }\n\n .nile-wysiwyg--show-blocks .ProseMirror p,\n .nile-wysiwyg--show-blocks .ProseMirror h1,\n .nile-wysiwyg--show-blocks .ProseMirror h2,\n .nile-wysiwyg--show-blocks .ProseMirror h3,\n .nile-wysiwyg--show-blocks .ProseMirror h4,\n .nile-wysiwyg--show-blocks .ProseMirror h5,\n .nile-wysiwyg--show-blocks .ProseMirror h6,\n .nile-wysiwyg--show-blocks .ProseMirror blockquote,\n .nile-wysiwyg--show-blocks .ProseMirror pre {\n position: relative;\n }\n\n .nile-wysiwyg--show-blocks .ProseMirror p::after,\n .nile-wysiwyg--show-blocks .ProseMirror h1::after,\n .nile-wysiwyg--show-blocks .ProseMirror h2::after,\n .nile-wysiwyg--show-blocks .ProseMirror h3::after,\n .nile-wysiwyg--show-blocks .ProseMirror h4::after,\n .nile-wysiwyg--show-blocks .ProseMirror h5::after,\n .nile-wysiwyg--show-blocks .ProseMirror h6::after,\n .nile-wysiwyg--show-blocks .ProseMirror blockquote::after,\n .nile-wysiwyg--show-blocks .ProseMirror pre::after {\n position: absolute;\n top: 0;\n left: 0;\n padding: 0 3px;\n font-family: system-ui, sans-serif;\n font-size: 9px;\n font-weight: 600;\n font-style: normal;\n line-height: 14px;\n letter-spacing: 0.5px;\n color: var(--nile-colors-neutral-500, #667085);\n background: var(--nile-colors-neutral-100, #f2f4f7);\n border-radius: 0 0 4px 0;\n pointer-events: none;\n }\n\n .nile-wysiwyg--show-blocks .ProseMirror p::after { content: 'P'; }\n .nile-wysiwyg--show-blocks .ProseMirror h1::after { content: 'H1'; }\n .nile-wysiwyg--show-blocks .ProseMirror h2::after { content: 'H2'; }\n .nile-wysiwyg--show-blocks .ProseMirror h3::after { content: 'H3'; }\n .nile-wysiwyg--show-blocks .ProseMirror h4::after { content: 'H4'; }\n .nile-wysiwyg--show-blocks .ProseMirror h5::after { content: 'H5'; }\n .nile-wysiwyg--show-blocks .ProseMirror h6::after { content: 'H6'; }\n .nile-wysiwyg--show-blocks .ProseMirror blockquote::after { content: 'QUOTE'; }\n .nile-wysiwyg--show-blocks .ProseMirror pre::after { content: 'PRE'; }\n`;\n"],"names":["styles","css","_templateObject","_taggedTemplateLiteral"],"mappings":"oTAEaA,CAAAA,CAASC,CAAG,CAAAC,eAAA,GAAAA,eAAA,CAAAC,sBAAA"}
|