@aquera/nile-elements 2.0.16 → 2.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/{index-f6944844.cjs.js → index-0c0c869d.cjs.js} +2 -2
- package/dist/{index-f6944844.cjs.js.map → index-0c0c869d.cjs.js.map} +1 -1
- package/dist/{index-403841c7.cjs.js → index-129ef6fb.cjs.js} +3 -3
- package/dist/{index-403841c7.cjs.js.map → index-129ef6fb.cjs.js.map} +1 -1
- package/dist/{index-1faa963c.esm.js → index-36f2a6b5.esm.js} +1 -1
- package/dist/index-4df50481.esm.js +1 -0
- package/dist/index-5d34cff1.esm.js +1 -0
- package/dist/index-7ae95edd.cjs.js +2 -0
- package/dist/{index-3ca67627.cjs.js.map → index-7ae95edd.cjs.js.map} +1 -1
- package/dist/index-7ca72b78.esm.js +1 -0
- package/dist/index-bbe23ad8.cjs.js +2 -0
- package/dist/index-bbe23ad8.cjs.js.map +1 -0
- package/dist/index-ccc6a799.cjs.js +5 -0
- package/dist/index-ccc6a799.cjs.js.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +122 -70
- package/dist/nile-auto-complete/index.cjs.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -1
- package/dist/nile-auto-complete/portal-manager.cjs.js +1 -1
- package/dist/nile-auto-complete/portal-utils.cjs.js +1 -1
- package/dist/nile-code-editor/extensionSetup.cjs.js +2 -2
- package/dist/nile-code-editor/index.cjs.js +1 -1
- package/dist/nile-code-editor/nile-code-editor.cjs.js +1 -1
- package/dist/nile-code-editor/theme.cjs.js +1 -1
- package/dist/nile-color-picker/index.cjs.js +1 -1
- package/dist/nile-color-picker/nile-color-picker.cjs.js +1 -1
- package/dist/nile-combobox/index.cjs.js +1 -1
- package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
- package/dist/nile-combobox/portal-manager.cjs.js +1 -1
- package/dist/nile-context-menu/index.cjs.js +1 -1
- package/dist/nile-context-menu/nile-context-menu.cjs.js +1 -1
- package/dist/nile-context-submenu/index.cjs.js +1 -1
- package/dist/nile-context-submenu/nile-context-submenu.cjs.js +1 -1
- package/dist/nile-detail/index.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.cjs.js +1 -1
- package/dist/nile-dropdown/index.cjs.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.cjs.js +1 -1
- package/dist/nile-dropdown/portal-manager.cjs.js +1 -1
- package/dist/nile-file-upload/index.cjs.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.cjs.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.template.cjs.js +1 -1
- package/dist/nile-floating-panel/index.cjs.js +1 -1
- package/dist/nile-floating-panel/nile-floating-panel.cjs.js +1 -1
- package/dist/nile-lite-tooltip/index.cjs.js +1 -1
- package/dist/nile-lite-tooltip/nile-lite-tooltip.cjs.js +1 -1
- package/dist/nile-markdown-editor/index.cjs.js +1 -1
- package/dist/nile-markdown-editor/nile-markdown-editor.cjs.js +1 -1
- package/dist/nile-popover/index.cjs.js +1 -1
- package/dist/nile-popover/nile-popover.cjs.js +1 -1
- package/dist/nile-popover/portal-manager.cjs.js +1 -1
- package/dist/nile-popup/index.cjs.js +1 -1
- package/dist/nile-popup/nile-popup.cjs.js +1 -1
- package/dist/nile-segmented-progress-bar/index.cjs.js +1 -1
- package/dist/nile-segmented-progress-bar/nile-segmented-progress-bar.cjs.js +1 -1
- package/dist/nile-select/index.cjs.js +1 -1
- package/dist/nile-select/nile-select.cjs.js +1 -1
- package/dist/nile-select/portal-manager.cjs.js +1 -1
- package/dist/nile-side-bar-action/index.cjs.js +1 -1
- package/dist/nile-side-bar-action/nile-side-bar-action.cjs.js +1 -1
- package/dist/nile-side-bar-action/portal-manager.cjs.js +1 -1
- package/dist/nile-tooltip/index.cjs.js +1 -1
- package/dist/nile-tooltip/nile-tooltip.cjs.js +1 -1
- package/dist/nile-virtual-select/index.cjs.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js +1 -1
- package/dist/nile-virtual-select/portal-manager.cjs.js +1 -1
- package/dist/nile-virtual-select/renderer.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/commands.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/create-state.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/email-css.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/email-css.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/email-css.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/email-render.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/email-render.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/email-render.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/html-detect.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/html-detect.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/html-detect.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/index.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/index.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/inputrules.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/keymap.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/image-view.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/image.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/link.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/max-length.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/paste.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/single-line.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js +2 -1
- package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/sanitize.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/schema.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/schema.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/schema.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/selection-state.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/serializer.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/index.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/index.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.esm.js +45 -4
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +2 -2
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.esm.js +2 -2
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.esm.js +5 -5
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-menu.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/embed-panel.esm.js +2 -2
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/find-replace.esm.js +3 -3
- package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/image-menu.esm.js +3 -3
- package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/image-panel.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/insert-menu.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/link-editor.esm.js +9 -9
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/math-panel.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +4 -4
- package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/special-chars.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/suggest-list.esm.js +23 -12
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.esm.js +7 -7
- package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/ui/table-menu.esm.js +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/create-state.d.ts +5 -0
- package/dist/src/nile-wysiwyg-editor/engine/create-state.js +2 -0
- package/dist/src/nile-wysiwyg-editor/engine/create-state.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/email-css.d.ts +14 -0
- package/dist/src/nile-wysiwyg-editor/engine/email-css.js +140 -0
- package/dist/src/nile-wysiwyg-editor/engine/email-css.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/email-fidelity.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/email-fidelity.test.js +1045 -0
- package/dist/src/nile-wysiwyg-editor/engine/email-fidelity.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/email-render.d.ts +11 -0
- package/dist/src/nile-wysiwyg-editor/engine/email-render.js +93 -0
- package/dist/src/nile-wysiwyg-editor/engine/email-render.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/html-detect.d.ts +2 -0
- package/dist/src/nile-wysiwyg-editor/engine/html-detect.js +24 -0
- package/dist/src/nile-wysiwyg-editor/engine/html-detect.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/index.d.ts +4 -1
- package/dist/src/nile-wysiwyg-editor/engine/index.js +3 -1
- package/dist/src/nile-wysiwyg-editor/engine/index.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/inputrules.d.ts +0 -5
- package/dist/src/nile-wysiwyg-editor/engine/inputrules.js +19 -0
- package/dist/src/nile-wysiwyg-editor/engine/inputrules.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js +3 -2
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/plugins/link.d.ts +4 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js +56 -1
- package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.d.ts +5 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js +27 -6
- package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js +30 -7
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.js +46 -0
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.d.ts +9 -1
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.js +730 -7
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/schema.d.ts +3 -0
- package/dist/src/nile-wysiwyg-editor/engine/schema.js +215 -34
- package/dist/src/nile-wysiwyg-editor/engine/schema.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/selection-state.js +3 -1
- package/dist/src/nile-wysiwyg-editor/engine/selection-state.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/engine/serializer.d.ts +12 -4
- package/dist/src/nile-wysiwyg-editor/engine/serializer.js +18 -8
- package/dist/src/nile-wysiwyg-editor/engine/serializer.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor-email-fidelity.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor-email-fidelity.test.js +287 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor-email-fidelity.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +45 -4
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.d.ts +23 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +113 -15
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js +213 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js +2 -2
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.js +2 -2
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js +2 -2
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +14 -3
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +2 -2
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +1 -1
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-wysiwyg-editor/engine/create-state.ts +7 -0
- package/src/nile-wysiwyg-editor/engine/email-css.ts +136 -0
- package/src/nile-wysiwyg-editor/engine/email-fidelity.test.ts +1347 -0
- package/src/nile-wysiwyg-editor/engine/email-render.ts +99 -0
- package/src/nile-wysiwyg-editor/engine/html-detect.ts +26 -0
- package/src/nile-wysiwyg-editor/engine/index.ts +10 -1
- package/src/nile-wysiwyg-editor/engine/inputrules.ts +18 -1
- package/src/nile-wysiwyg-editor/engine/plugins/image-view.ts +3 -2
- package/src/nile-wysiwyg-editor/engine/plugins/link.ts +58 -2
- package/src/nile-wysiwyg-editor/engine/plugins/paste.ts +31 -8
- package/src/nile-wysiwyg-editor/engine/plugins/tables.ts +29 -7
- package/src/nile-wysiwyg-editor/engine/pm.test.ts +73 -0
- package/src/nile-wysiwyg-editor/engine/sanitize.ts +729 -7
- package/src/nile-wysiwyg-editor/engine/schema.ts +206 -33
- package/src/nile-wysiwyg-editor/engine/selection-state.ts +3 -1
- package/src/nile-wysiwyg-editor/engine/serializer.ts +30 -8
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor-email-fidelity.test.ts +357 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +45 -4
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.ts +258 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +119 -12
- package/src/nile-wysiwyg-editor/ui/bookmark-panel.ts +2 -2
- package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/embed-menu.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/embed-panel.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/emoji-picker.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/find-replace.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/image-menu.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/image-panel.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/insert-menu.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/link-editor.ts +2 -2
- package/src/nile-wysiwyg-editor/ui/markdown-panel.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/math-panel.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/shortcut-help.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/source-view.ts +2 -2
- package/src/nile-wysiwyg-editor/ui/special-chars.ts +1 -1
- package/src/nile-wysiwyg-editor/ui/suggest-list.ts +14 -3
- package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +2 -2
- package/src/nile-wysiwyg-editor/ui/table-menu.ts +1 -1
- package/vscode-html-custom-data.json +15 -1
- package/web-test-runner.config.mjs +4 -0
- package/dist/index-3ca67627.cjs.js +0 -2
- package/dist/index-6f3fa4ab.esm.js +0 -1
- package/dist/index-7b1c9857.esm.js +0 -1
- package/dist/index-89c520e9.cjs.js +0 -5
- package/dist/index-89c520e9.cjs.js.map +0 -1
- package/dist/index-ba47645d.esm.js +0 -1
- package/dist/index-c3210a9c.cjs.js +0 -2
- package/dist/index-c3210a9c.cjs.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.cjs.js","sources":["../../../../../node_modules/prosemirror-schema-list/dist/index.js","../../../../src/nile-wysiwyg-editor/engine/schema.ts"],"sourcesContent":["import { findWrapping, ReplaceAroundStep, canSplit, liftTarget, canJoin } from 'prosemirror-transform';\nimport { NodeRange, Fragment, Slice } from 'prosemirror-model';\nimport { Selection } from 'prosemirror-state';\n\nconst olDOM = [\"ol\", 0], ulDOM = [\"ul\", 0], liDOM = [\"li\", 0];\n/**\nAn ordered list [node spec](https://prosemirror.net/docs/ref/#model.NodeSpec). Has a single\nattribute, `order`, which determines the number at which the list\nstarts counting, and defaults to 1. Represented as an `<ol>`\nelement.\n*/\nconst orderedList = {\n attrs: { order: { default: 1, validate: \"number\" } },\n parseDOM: [{ tag: \"ol\", getAttrs(dom) {\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1 };\n } }],\n toDOM(node) {\n return node.attrs.order == 1 ? olDOM : [\"ol\", { start: node.attrs.order }, 0];\n }\n};\n/**\nA bullet list node spec, represented in the DOM as `<ul>`.\n*/\nconst bulletList = {\n parseDOM: [{ tag: \"ul\" }],\n toDOM() { return ulDOM; }\n};\n/**\nA list item (`<li>`) spec.\n*/\nconst listItem = {\n parseDOM: [{ tag: \"li\" }],\n toDOM() { return liDOM; },\n defining: true\n};\nfunction add(obj, props) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n for (let prop in props)\n copy[prop] = props[prop];\n return copy;\n}\n/**\nConvenience function for adding list-related node types to a map\nspecifying the nodes for a schema. Adds\n[`orderedList`](https://prosemirror.net/docs/ref/#schema-list.orderedList) as `\"ordered_list\"`,\n[`bulletList`](https://prosemirror.net/docs/ref/#schema-list.bulletList) as `\"bullet_list\"`, and\n[`listItem`](https://prosemirror.net/docs/ref/#schema-list.listItem) as `\"list_item\"`.\n\n`itemContent` determines the content expression for the list items.\nIf you want the commands defined in this module to apply to your\nlist structure, it should have a shape like `\"paragraph block*\"` or\n`\"paragraph (ordered_list | bullet_list)*\"`. `listGroup` can be\ngiven to assign a group name to the list node types, for example\n`\"block\"`.\n*/\nfunction addListNodes(nodes, itemContent, listGroup) {\n return nodes.append({\n ordered_list: add(orderedList, { content: \"list_item+\", group: listGroup }),\n bullet_list: add(bulletList, { content: \"list_item+\", group: listGroup }),\n list_item: add(listItem, { content: itemContent })\n });\n}\n/**\nReturns a command function that wraps the selection in a list with\nthe given type an attributes. If `dispatch` is null, only return a\nvalue to indicate whether this is possible, but don't actually\nperform the change.\n*/\nfunction wrapInList(listType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to);\n if (!range)\n return false;\n let tr = dispatch ? state.tr : null;\n if (!wrapRangeInList(tr, range, listType, attrs))\n return false;\n if (dispatch)\n dispatch(tr.scrollIntoView());\n return true;\n };\n}\n/**\nTry to wrap the given node range in a list of the given type.\nReturn `true` when this is possible, `false` otherwise. When `tr`\nis non-null, the wrapping is added to that transaction. When it is\n`null`, the function only queries whether the wrapping is\npossible.\n*/\nfunction wrapRangeInList(tr, range, listType, attrs = null) {\n let doJoin = false, outerRange = range, doc = range.$from.doc;\n // This is at the top of an existing list item\n if (range.depth >= 2 && range.$from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n // Don't do anything if this is the top of the list\n if (range.$from.index(range.depth - 1) == 0)\n return false;\n let $insert = doc.resolve(range.start - 2);\n outerRange = new NodeRange($insert, $insert, range.depth);\n if (range.endIndex < range.parent.childCount)\n range = new NodeRange(range.$from, doc.resolve(range.$to.end(range.depth)), range.depth);\n doJoin = true;\n }\n let wrap = findWrapping(outerRange, listType, attrs, range);\n if (!wrap)\n return false;\n if (tr)\n doWrapInList(tr, range, wrap, doJoin, listType);\n return true;\n}\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--)\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice(content, 0, 0), wrappers.length, true));\n let found = 0;\n for (let i = 0; i < wrappers.length; i++)\n if (wrappers[i].type == listType)\n found = i + 1;\n let splitDepth = wrappers.length - found;\n let splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent;\n for (let i = range.startIndex, e = range.endIndex, first = true; i < e; i++, first = false) {\n if (!first && canSplit(tr.doc, splitPos, splitDepth)) {\n tr.split(splitPos, splitDepth);\n splitPos += 2 * splitDepth;\n }\n splitPos += parent.child(i).nodeSize;\n }\n return tr;\n}\n/**\nBuild a command that splits a non-empty textblock at the top level\nof a list item by also splitting that list item.\n*/\nfunction splitListItem(itemType, itemAttrs) {\n return function (state, dispatch) {\n let { $from, $to, node } = state.selection;\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to))\n return false;\n let grandParent = $from.node(-1);\n if (grandParent.type != itemType)\n return false;\n if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth == 3 || $from.node(-3).type != itemType ||\n $from.index(-2) != $from.node(-2).childCount - 1)\n return false;\n if (dispatch) {\n let wrap = Fragment.empty;\n let depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d--)\n wrap = Fragment.from($from.node(d).copy(wrap));\n let depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1\n : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n // Add a second list item with an empty default start node\n wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n let start = $from.before($from.depth - (depthBefore - 1));\n let tr = state.tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (node, pos) => {\n if (sel > -1)\n return false;\n if (node.isTextblock && node.content.size == 0)\n sel = pos + 1;\n });\n if (sel > -1)\n tr.setSelection(Selection.near(tr.doc.resolve(sel)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n let tr = state.tr.delete($from.pos, $to.pos);\n let types = nextType ? [itemAttrs ? { type: itemType, attrs: itemAttrs } : null, { type: nextType }] : undefined;\n if (!canSplit(tr.doc, $from.pos, 2, types))\n return false;\n if (dispatch)\n dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n return true;\n };\n}\n/**\nActs like [`splitListItem`](https://prosemirror.net/docs/ref/#schema-list.splitListItem), but\nwithout resetting the set of active marks at the cursor.\n*/\nfunction splitListItemKeepMarks(itemType, itemAttrs) {\n let split = splitListItem(itemType, itemAttrs);\n return (state, dispatch) => {\n return split(state, dispatch && (tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks)\n tr.ensureMarks(marks);\n dispatch(tr);\n }));\n };\n}\n/**\nCreate a command to lift the list item around the selection up into\na wrapping list.\n*/\nfunction liftListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n if (!dispatch)\n return true;\n if ($from.node(range.depth - 1).type == itemType) // Inside a parent list\n return liftToOuterList(state, dispatch, itemType, range);\n else // Outer list node\n return liftOutOfList(state, dispatch, range);\n };\n}\nfunction liftToOuterList(state, dispatch, itemType, range) {\n let tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth);\n if (end < endOfList) {\n // There are siblings after the lifted items, which must become\n // children of the last item\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));\n range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth);\n }\n const target = liftTarget(range);\n if (target == null)\n return false;\n tr.lift(range, target);\n let $after = tr.doc.resolve(tr.mapping.map(end, -1) - 1);\n if (canJoin(tr.doc, $after.pos) && $after.nodeBefore.type == $after.nodeAfter.type)\n tr.join($after.pos);\n dispatch(tr.scrollIntoView());\n return true;\n}\nfunction liftOutOfList(state, dispatch, range) {\n let tr = state.tr, list = range.parent;\n // Merge the list items into a single big item\n for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n pos -= list.child(i).nodeSize;\n tr.delete(pos - 1, pos + 1);\n }\n let $start = tr.doc.resolve(range.start), item = $start.nodeAfter;\n if (tr.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize)\n return false;\n let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount;\n let parent = $start.node(-1), indexBefore = $start.index(-1);\n if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))\n return false;\n let start = $start.pos, end = start + item.nodeSize;\n // Strip off the surrounding list. At the sides where we're not at\n // the end of the list, the existing list is closed. At sides where\n // this is the end, it is overwritten to its end.\n tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty)))\n .append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));\n dispatch(tr.scrollIntoView());\n return true;\n}\n/**\nCreate a command to sink the list item around the selection down\ninto an inner list.\n*/\nfunction sinkListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n let startIndex = range.startIndex;\n if (startIndex == 0)\n return false;\n let parent = range.parent, nodeBefore = parent.child(startIndex - 1);\n if (nodeBefore.type != itemType)\n return false;\n if (dispatch) {\n let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;\n let inner = Fragment.from(nestedBefore ? itemType.create() : null);\n let slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);\n let before = range.start, after = range.end;\n dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true))\n .scrollIntoView());\n }\n return true;\n };\n}\n\nexport { addListNodes, bulletList, liftListItem, listItem, orderedList, sinkListItem, splitListItem, splitListItemKeepMarks, wrapInList, wrapRangeInList };\n","import { Schema, NodeSpec, MarkSpec, Attrs, DOMOutputSpec, ParseRule } from 'prosemirror-model';\nimport { addListNodes } from 'prosemirror-schema-list';\nimport { tableNodes } from 'prosemirror-tables';\nimport OrderedMap from 'orderedmap';\nimport { EMBED_SANDBOX, EMBED_REFERRER_POLICY } from './plugins/embeds';\n\nexport type Alignment = 'left' | 'center' | 'right' | 'justify';\n\nconst ALIGN_VALUES: Alignment[] = ['left', 'center', 'right', 'justify'];\n\nfunction getAlignFromDom(dom: HTMLElement): Alignment | null {\n const value = dom.style.textAlign || dom.getAttribute('align') || '';\n return (ALIGN_VALUES as string[]).includes(value) ? (value as Alignment) : null;\n}\n\nfunction alignStyle(align: Alignment | null): string | null {\n return align ? `text-align: ${align}` : null;\n}\n\n/** Indent depth in 40px steps, like CKEditor/Google Docs. */\nexport const INDENT_STEP_PX = 40;\nexport const MAX_INDENT = 8;\n\nfunction getIndentFromDom(dom: HTMLElement): number {\n const raw = dom.style.marginInlineStart || dom.style.marginLeft || '';\n const px = parseFloat(raw);\n if (!Number.isFinite(px) || px <= 0) return 0;\n return Math.min(MAX_INDENT, Math.round(px / INDENT_STEP_PX));\n}\n\n/**\n * Line height as a unitless multiplier string ('1.5'). Percentages are\n * converted; px values pass through as-is so pasted content keeps its look.\n */\nfunction getLineHeightFromDom(dom: HTMLElement): string | null {\n const raw = dom.style.lineHeight.trim();\n if (!raw || raw === 'normal') return null;\n const num = parseFloat(raw);\n if (!Number.isFinite(num) || num <= 0) return null;\n if (raw.endsWith('%')) return String(num / 100);\n return raw;\n}\n\n/** Combined style string for align + indent + line-height textblock attrs. */\nfunction blockStyle(attrs: {\n align?: Alignment | null;\n indent?: number;\n lineHeight?: string | null;\n}): string | null {\n const parts: string[] = [];\n const align = alignStyle(attrs.align ?? null);\n if (align) parts.push(align);\n if (attrs.indent) parts.push(`margin-inline-start: ${attrs.indent * INDENT_STEP_PX}px`);\n if (attrs.lineHeight) parts.push(`line-height: ${attrs.lineHeight}`);\n return parts.length ? parts.join('; ') : null;\n}\n\n/* -------------------------------------------------------------------------\n * Author class / id passthrough\n *\n * Content elements keep the `class` and `id` an author gave them, so class/id\n * CSS (e.g. a scoped author <style> block) can target the document. Values that\n * collide with the editor's own internal names are dropped so content can never\n * impersonate or restyle the chrome; the editor's own classes (emitted in\n * toDOM) are always preserved and merged with the author's.\n * ------------------------------------------------------------------------- */\n\nconst RESERVED_NAME = /^(?:nile-wysiwyg|ProseMirror)/;\n\nexport function cleanClass(value: string | null): string | null {\n if (!value) return null;\n const kept = value.split(/\\s+/).filter(token => token && !RESERVED_NAME.test(token));\n return kept.length ? kept.join(' ') : null;\n}\n\nexport function cleanId(value: string | null): string | null {\n return value && !RESERVED_NAME.test(value) ? value : null;\n}\n\nconst HTML_ATTR_SPEC = { htmlClass: { default: null }, htmlId: { default: null } };\n\nfunction readHtmlAttrs(dom: HTMLElement): { htmlClass: string | null; htmlId: string | null } {\n return {\n htmlClass: cleanClass(dom.getAttribute('class')),\n htmlId: cleanId(dom.getAttribute('id')),\n };\n}\n\n/** Wraps a tag-based parse rule so it also captures author class/id. Rules\n * keyed by `style` (whose getAttrs receives a value string, not an element)\n * pass through untouched. */\nfunction augmentParseRule(rule: ParseRule): ParseRule {\n if (!('tag' in rule) || 'style' in rule) return rule;\n const inner = rule.getAttrs;\n return {\n ...rule,\n getAttrs(dom: HTMLElement) {\n const base = inner ? inner(dom) : null;\n if (base === false) return false;\n return { ...(base ?? {}), ...readHtmlAttrs(dom) };\n },\n } as ParseRule;\n}\n\n/** Wraps a toDOM so stored class/id are written back onto the element, merged\n * with any class the spec emits itself. Handles the `[tag]`, `[tag, attrs]`,\n * `[tag, 0]`, and `[tag, attrs, …children]` output shapes. */\nfunction augmentToDOM(\n toDOM?: (node: { attrs: Attrs }, ...rest: unknown[]) => DOMOutputSpec\n): ((node: { attrs: Attrs }, ...rest: unknown[]) => DOMOutputSpec) | undefined {\n if (!toDOM) return toDOM;\n return (node, ...rest) => {\n const out = toDOM(node, ...rest);\n const cls = node.attrs.htmlClass as string | null;\n const id = node.attrs.htmlId as string | null;\n if (!Array.isArray(out) || (!cls && !id)) return out;\n const [tag, ...tail] = out as unknown[];\n let attrs: Record<string, unknown> = {};\n let children = tail;\n if (tail.length && tail[0] && typeof tail[0] === 'object' && !Array.isArray(tail[0])) {\n attrs = { ...(tail[0] as Record<string, unknown>) };\n children = tail.slice(1);\n }\n if (cls) attrs.class = attrs.class ? `${attrs.class as string} ${cls}` : cls;\n if (id) attrs.id = id;\n return [tag, attrs, ...children] as DOMOutputSpec;\n };\n}\n\n/** Adds `htmlClass`/`htmlId` attrs plus parse/serialize support to a spec. */\nfunction withHtmlAttrs<S extends NodeSpec | MarkSpec>(spec: S): S {\n return {\n ...spec,\n attrs: { ...(spec.attrs ?? {}), ...HTML_ATTR_SPEC },\n parseDOM: spec.parseDOM?.map(augmentParseRule),\n toDOM: augmentToDOM(spec.toDOM as never) as never,\n };\n}\n\n/** Content nodes/marks that carry author class/id. Excludes structural leaves\n * (doc, text), atoms with bespoke DOM (image, embeds, mentions, math, …) and\n * style-only marks (their spans are covered by `html_span`). */\nconst HTML_ATTR_NODES = [\n 'paragraph', 'heading', 'blockquote', 'code_block',\n 'bullet_list', 'ordered_list', 'list_item',\n 'table', 'table_row', 'table_cell', 'table_header',\n];\nconst HTML_ATTR_MARKS = [\n 'link', 'bold', 'italic', 'underline', 'strike', 'code', 'subscript', 'superscript',\n];\n\n/**\n * Block nodes. `align` is modeled as an attribute on textblocks rather than a\n * wrapper node so alignment survives block-type changes (heading <-> paragraph).\n */\nconst nodes: Record<string, NodeSpec> = {\n doc: {\n content: 'block+',\n },\n\n paragraph: {\n content: 'inline*',\n group: 'block',\n attrs: {\n align: { default: null },\n indent: { default: 0 },\n lineHeight: { default: null },\n },\n parseDOM: [\n {\n tag: 'p',\n getAttrs: (dom: HTMLElement) => ({\n align: getAlignFromDom(dom),\n indent: getIndentFromDom(dom),\n lineHeight: getLineHeightFromDom(dom),\n }),\n },\n ],\n toDOM(node) {\n const style = blockStyle(node.attrs);\n return style ? ['p', { style }, 0] : ['p', 0];\n },\n },\n\n heading: {\n content: 'inline*',\n group: 'block',\n defining: true,\n attrs: {\n level: { default: 1 },\n align: { default: null },\n indent: { default: 0 },\n lineHeight: { default: null },\n },\n parseDOM: [1, 2, 3, 4, 5, 6].map(level => ({\n tag: `h${level}`,\n getAttrs: (dom: HTMLElement) => ({\n level,\n align: getAlignFromDom(dom),\n indent: getIndentFromDom(dom),\n lineHeight: getLineHeightFromDom(dom),\n }),\n })),\n toDOM(node) {\n const style = blockStyle(node.attrs);\n return style ? [`h${node.attrs.level}`, { style }, 0] : [`h${node.attrs.level}`, 0];\n },\n },\n\n blockquote: {\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM() {\n return ['blockquote', 0];\n },\n },\n\n horizontal_rule: {\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM() {\n return ['hr'];\n },\n },\n\n text: {\n group: 'inline',\n },\n\n hard_break: {\n inline: true,\n group: 'inline',\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM() {\n return ['br'];\n },\n },\n\n code_block: {\n content: 'text*',\n group: 'block',\n marks: '',\n code: true,\n defining: true,\n attrs: { language: { default: null } },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (dom: HTMLElement) => ({\n language: dom.getAttribute('data-language'),\n }),\n },\n ],\n toDOM(node) {\n const attrs: Record<string, string> = { class: 'nile-wysiwyg__code-block' };\n if (node.attrs.language) attrs['data-language'] = node.attrs.language;\n return ['pre', attrs, ['code', 0]];\n },\n },\n\n /**\n * ProseMirror's canonical inline image, extended with a `width` attr (px)\n * written by the drag-resize handles.\n */\n image: {\n inline: true,\n group: 'inline',\n draggable: true,\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null },\n width: { default: null },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (dom: HTMLElement) => {\n const styleWidth = parseFloat(dom.style.width);\n const attrWidth = parseFloat(dom.getAttribute('width') ?? '');\n const width = Number.isFinite(styleWidth)\n ? Math.round(styleWidth)\n : Number.isFinite(attrWidth)\n ? Math.round(attrWidth)\n : null;\n return {\n src: dom.getAttribute('src'),\n alt: dom.getAttribute('alt'),\n title: dom.getAttribute('title'),\n width: width && width > 0 ? width : null,\n };\n },\n },\n ],\n toDOM(node) {\n const { src, alt, title, width } = node.attrs;\n const attrs: Record<string, string> = { src };\n if (alt) attrs.alt = alt;\n if (title) attrs.title = title;\n if (width) attrs.style = `width: ${width}px`;\n return ['img', attrs];\n },\n },\n\n /**\n * Captioned image: a block figure whose inline content is the caption. The\n * image itself lives in the attrs (TipTap-style), so the node stays valid\n * ProseMirror content — a node can't mix an inline img child with a block\n * figcaption child.\n */\n figure: {\n group: 'block',\n content: 'inline*',\n defining: true,\n isolating: true,\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null },\n width: { default: null },\n align: { default: null },\n },\n parseDOM: [\n {\n tag: 'figure',\n contentElement: 'figcaption',\n getAttrs: (dom: HTMLElement) => {\n const img = dom.querySelector('img[src]') as HTMLElement | null;\n if (!img) return false;\n const styleWidth = parseFloat(img.style.width || dom.style.width);\n const align = dom.getAttribute('data-align');\n return {\n src: img.getAttribute('src'),\n alt: img.getAttribute('alt'),\n title: img.getAttribute('title'),\n width:\n Number.isFinite(styleWidth) && styleWidth > 0\n ? Math.round(styleWidth)\n : null,\n align: align === 'left' || align === 'center' || align === 'right' ? align : null,\n };\n },\n },\n ],\n toDOM(node) {\n const { src, alt, title, width, align } = node.attrs;\n const figureAttrs: Record<string, string> = { class: 'nile-wysiwyg__figure' };\n if (align) figureAttrs['data-align'] = align;\n const styles: string[] = [];\n if (width) styles.push(`width: ${width}px`);\n if (align === 'center') styles.push('margin-left: auto; margin-right: auto');\n else if (align === 'right') styles.push('margin-left: auto; margin-right: 0');\n if (styles.length) figureAttrs.style = styles.join('; ');\n const imgAttrs: Record<string, string> = { src, style: 'width: 100%' };\n if (alt) imgAttrs.alt = alt;\n if (title) imgAttrs.title = title;\n return [\n 'figure',\n figureAttrs,\n ['img', imgAttrs],\n ['figcaption', { class: 'nile-wysiwyg__figcaption' }, 0],\n ];\n },\n },\n\n /**\n * Checklists. Serialized as <ul data-task-list><li data-task-item\n * data-checked> so they survive HTML round-trips; the live checkbox is an\n * editor-only NodeView. parseDOM priority 51 beats the generic li rule.\n */\n task_list: {\n content: 'task_item+',\n group: 'block',\n parseDOM: [{ tag: 'ul[data-task-list]', priority: 51 }],\n toDOM() {\n return ['ul', { 'data-task-list': 'true', class: 'nile-wysiwyg__task-list' }, 0];\n },\n },\n\n task_item: {\n content: 'paragraph block*',\n defining: true,\n attrs: { checked: { default: false } },\n parseDOM: [\n {\n tag: 'li[data-task-item]',\n priority: 51,\n getAttrs: (dom: HTMLElement) => ({\n checked: dom.getAttribute('data-checked') === 'true',\n }),\n },\n ],\n toDOM(node) {\n return [\n 'li',\n {\n 'data-task-item': 'true',\n 'data-checked': String(node.attrs.checked),\n class: 'nile-wysiwyg__task-item',\n },\n 0,\n ];\n },\n },\n\n /**\n * Provider embeds (YouTube/Vimeo/Loom) as block atoms. The iframe sits in\n * a wrapper div for aspect-ratio styling and a click-to-select overlay.\n */\n embed: {\n group: 'block',\n atom: true,\n selectable: true,\n draggable: true,\n attrs: {\n src: {},\n provider: { default: null },\n title: { default: null },\n /** Rendered width in px (drag-resize); null = default size. */\n width: { default: null },\n /** Block alignment: 'left' | 'center' | 'right' | null. */\n align: { default: null },\n },\n parseDOM: [\n {\n tag: 'div[data-embed-provider]',\n getAttrs: (dom: HTMLElement) => {\n const iframe = dom.querySelector('iframe[src]');\n if (!iframe) return false;\n const widthAttr =\n dom.getAttribute('data-width') ?? /^(\\d+)px$/.exec(dom.style.width)?.[1];\n const width = widthAttr ? parseInt(widthAttr, 10) : NaN;\n const align = dom.getAttribute('data-align');\n return {\n src: iframe.getAttribute('src'),\n provider: dom.getAttribute('data-embed-provider'),\n title: iframe.getAttribute('title'),\n width: Number.isFinite(width) && width > 0 ? width : null,\n align: align === 'left' || align === 'center' || align === 'right' ? align : null,\n };\n },\n },\n {\n tag: 'iframe[src]',\n getAttrs: (dom: HTMLElement) => {\n const width = parseInt(dom.getAttribute('width') ?? '', 10);\n return {\n src: dom.getAttribute('src'),\n title: dom.getAttribute('title'),\n width: Number.isFinite(width) && width > 0 ? width : null,\n };\n },\n },\n ],\n toDOM(node) {\n const { src, provider, title, width, align } = node.attrs;\n const iframeAttrs: Record<string, string> = {\n src,\n frameborder: '0',\n allowfullscreen: 'true',\n allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n sandbox: EMBED_SANDBOX,\n referrerpolicy: EMBED_REFERRER_POLICY,\n };\n if (title) iframeAttrs.title = title;\n const wrapperAttrs: Record<string, string> = {\n class: 'nile-wysiwyg__embed',\n 'data-embed-provider': provider ?? 'generic',\n };\n const styles: string[] = [];\n if (width) {\n wrapperAttrs['data-width'] = String(width);\n styles.push(`width: ${width}px`, 'max-width: 100%');\n }\n if (align) {\n wrapperAttrs['data-align'] = align;\n if (align === 'center') styles.push('margin-left: auto', 'margin-right: auto');\n else if (align === 'right') styles.push('margin-left: auto', 'margin-right: 0');\n }\n if (styles.length) wrapperAttrs.style = styles.join('; ');\n return ['div', wrapperAttrs, ['iframe', iframeAttrs]];\n },\n },\n\n /**\n * Author-supplied `<style>` block, entered via the HTML source view. The CSS\n * is sanitized on the way in (see sanitizeCss) — `@import`, `expression()`\n * and external `url()` are neutralized — then stored verbatim and serialized\n * straight back to a `<style>` element. A node view renders it live in the\n * editor with a small chip so the otherwise-invisible block stays selectable.\n */\n styleBlock: {\n group: 'block',\n atom: true,\n selectable: true,\n attrs: { css: { default: '' } },\n parseDOM: [\n {\n tag: 'style',\n getAttrs: (dom: HTMLElement) => ({ css: dom.textContent ?? '' }),\n },\n ],\n toDOM(node) {\n return ['style', node.attrs.css];\n },\n },\n\n /**\n * Bookmark: a named in-text anchor (`<a id=\"…\">`) for intra-document\n * navigation. Invisible in serialized output; the editor draws a flag\n * marker via CSS so it can be selected and deleted.\n */\n bookmark: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: { id: {} },\n parseDOM: [\n {\n tag: 'a[data-bookmark]',\n priority: 60,\n getAttrs: (dom: HTMLElement) => {\n const id = dom.getAttribute('id') || dom.getAttribute('name');\n return id ? { id } : false;\n },\n },\n // Anchors without an href are bookmarks (`<a id>` / legacy `<a name>`).\n {\n tag: 'a[id]',\n getAttrs: (dom: HTMLElement) =>\n dom.hasAttribute('href') ? false : { id: dom.getAttribute('id') },\n },\n {\n tag: 'a[name]',\n getAttrs: (dom: HTMLElement) =>\n dom.hasAttribute('href') ? false : { id: dom.getAttribute('name') },\n },\n ],\n toDOM(node) {\n return ['a', { id: node.attrs.id, 'data-bookmark': 'true' }];\n },\n },\n\n /** Inline atom for @-style mentions. The label renders as `${trigger}${label}`. */\n mention: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: {\n trigger: { default: '@' },\n key: {},\n label: {},\n },\n parseDOM: [\n {\n tag: 'span[data-mention-key]',\n getAttrs: (dom: HTMLElement) => ({\n trigger: dom.getAttribute('data-mention-trigger') || '@',\n key: dom.getAttribute('data-mention-key'),\n label:\n dom.getAttribute('data-mention-label') || dom.textContent?.slice(1) || '',\n }),\n },\n ],\n toDOM(node) {\n const { trigger, key, label } = node.attrs;\n return [\n 'span',\n {\n class: 'nile-wysiwyg__mention',\n 'data-mention-trigger': trigger,\n 'data-mention-key': key,\n 'data-mention-label': label,\n },\n `${trigger}${label}`,\n ];\n },\n },\n\n /**\n * Merge field: an inline atom placeholder for mail-merge / personalization\n * (e.g. `{{first_name}}`). Stores a stable `id` and a human `label`; renders\n * the label (falling back to `{{id}}`) as a non-editable chip.\n */\n merge_field: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: { id: {}, label: { default: null } },\n parseDOM: [\n {\n tag: 'span[data-merge-field]',\n getAttrs: (dom: HTMLElement) => {\n const id = dom.getAttribute('data-merge-field');\n if (!id) return false;\n return {\n id,\n label: dom.getAttribute('data-merge-label') || dom.textContent || null,\n };\n },\n },\n ],\n toDOM(node) {\n const { id, label } = node.attrs;\n return [\n 'span',\n {\n class: 'nile-wysiwyg__merge-field',\n 'data-merge-field': id,\n 'data-merge-label': label ?? '',\n },\n label || `{{${id}}}`,\n ];\n },\n },\n\n /**\n * Math: an inline atom holding a LaTeX source string. Rendering is pluggable\n * via the editor's `mathRenderer` (KaTeX/MathJax, or MathML). Without a\n * renderer the raw LaTeX is shown in a math-styled chip. `display` chooses\n * inline vs. block presentation.\n */\n math: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: { latex: {}, display: { default: 'inline' } },\n parseDOM: [\n {\n tag: 'span[data-math]',\n getAttrs: (dom: HTMLElement) => ({\n latex: dom.getAttribute('data-math') || dom.textContent || '',\n display: dom.getAttribute('data-math-display') === 'block' ? 'block' : 'inline',\n }),\n },\n ],\n toDOM(node) {\n const { latex, display } = node.attrs;\n return [\n 'span',\n {\n class: 'nile-wysiwyg__math',\n 'data-math': latex,\n 'data-math-display': display,\n },\n latex,\n ];\n },\n },\n};\n\n/** Table nodes from prosemirror-tables, with cell background support. */\nconst tableNodeSpecs = tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom) {\n return (dom as HTMLElement).style.backgroundColor || null;\n },\n setDOMAttr(value, attrs) {\n if (value) {\n attrs.style = `${(attrs.style as string) || ''}background-color: ${value};`;\n }\n },\n },\n },\n});\n\n/**\n * The table spec extended with a `layout` attr: layout tables (structured\n * layouts, e.g. for email HTML) serialize as `role=\"presentation\"` and render\n * borderless, with dashed guides visible only while editing.\n */\nconst baseTableSpec = tableNodeSpecs.table;\nconst tableSpec: NodeSpec = {\n ...baseTableSpec,\n attrs: { ...(baseTableSpec.attrs ?? {}), layout: { default: false } },\n parseDOM: [\n {\n tag: 'table',\n getAttrs: (dom: HTMLElement) => ({\n layout:\n dom.getAttribute('role') === 'presentation' || dom.hasAttribute('data-layout'),\n }),\n },\n ],\n toDOM(node) {\n return node.attrs.layout\n ? ['table', { role: 'presentation', 'data-layout': 'true' }, ['tbody', 0]]\n : ['table', ['tbody', 0]];\n },\n};\n\n/**\n * Marks. Order matters: marks later in the map render closer to the text.\n * Each styling mark parses from both semantic tags AND inline `style=`\n * declarations so pasted Word/Google Docs content keeps its formatting.\n */\nconst marks: Record<string, MarkSpec> = {\n link: {\n attrs: {\n href: {},\n title: { default: null },\n target: { default: null },\n },\n inclusive: false,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom: HTMLElement) => ({\n href: dom.getAttribute('href'),\n title: dom.getAttribute('title'),\n target: dom.getAttribute('target'),\n }),\n },\n ],\n toDOM(mark) {\n const { href, title, target } = mark.attrs;\n const attrs: Record<string, string> = { href };\n if (title) attrs.title = title;\n if (target) {\n attrs.target = target;\n if (target === '_blank') attrs.rel = 'noopener noreferrer';\n }\n return ['a', attrs, 0];\n },\n },\n\n bold: {\n parseDOM: [\n { tag: 'strong' },\n // Google Docs wraps everything in <b style=\"font-weight: normal\">\n {\n tag: 'b',\n getAttrs: (dom: HTMLElement) => dom.style.fontWeight !== 'normal' && null,\n },\n {\n style: 'font-weight',\n getAttrs: (value: string) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null,\n },\n ],\n toDOM() {\n return ['strong', 0];\n },\n },\n\n italic: {\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style=italic' },\n ],\n toDOM() {\n return ['em', 0];\n },\n },\n\n underline: {\n parseDOM: [\n { tag: 'u' },\n {\n style: 'text-decoration',\n getAttrs: (value: string) => value.includes('underline') && null,\n },\n {\n style: 'text-decoration-line',\n getAttrs: (value: string) => value.includes('underline') && null,\n },\n ],\n toDOM() {\n return ['u', 0];\n },\n },\n\n strike: {\n parseDOM: [\n { tag: 's' },\n { tag: 'strike' },\n { tag: 'del' },\n {\n style: 'text-decoration',\n getAttrs: (value: string) => value.includes('line-through') && null,\n },\n {\n style: 'text-decoration-line',\n getAttrs: (value: string) => value.includes('line-through') && null,\n },\n ],\n toDOM() {\n return ['s', 0];\n },\n },\n\n /** Mutually exclusive vertical-shift marks (formulas, footnote refs). */\n subscript: {\n excludes: 'subscript superscript',\n parseDOM: [{ tag: 'sub' }, { style: 'vertical-align=sub' }],\n toDOM() {\n return ['sub', 0];\n },\n },\n\n superscript: {\n excludes: 'subscript superscript',\n parseDOM: [{ tag: 'sup' }, { style: 'vertical-align=super' }],\n toDOM() {\n return ['sup', 0];\n },\n },\n\n code: {\n parseDOM: [{ tag: 'code' }],\n toDOM() {\n return ['code', { class: 'nile-wysiwyg__inline-code' }, 0];\n },\n },\n\n /** Carries an author `class`/`id` on an inline `<span>` that has no other\n * meaning, so class/id CSS can target runs of text. Low priority so styled\n * spans (color/font marks) and atom spans (mention/merge/math) win. */\n html_span: {\n attrs: { htmlClass: { default: null }, htmlId: { default: null } },\n parseDOM: [\n {\n tag: 'span',\n priority: 5,\n getAttrs: (dom: HTMLElement) => {\n const htmlClass = cleanClass(dom.getAttribute('class'));\n const htmlId = cleanId(dom.getAttribute('id'));\n return htmlClass || htmlId ? { htmlClass, htmlId } : false;\n },\n },\n ],\n toDOM(mark) {\n const attrs: Record<string, string> = {};\n if (mark.attrs.htmlClass) attrs.class = mark.attrs.htmlClass;\n if (mark.attrs.htmlId) attrs.id = mark.attrs.htmlId;\n return ['span', attrs, 0];\n },\n },\n\n text_color: {\n attrs: { color: {} },\n parseDOM: [\n {\n style: 'color',\n getAttrs: (value: string) => (value ? { color: value } : false),\n },\n ],\n toDOM(mark) {\n return ['span', { style: `color: ${mark.attrs.color}` }, 0];\n },\n },\n\n bg_color: {\n attrs: { color: {} },\n parseDOM: [\n {\n style: 'background-color',\n getAttrs: (value: string) =>\n value && value !== 'transparent' ? { color: value } : false,\n },\n ],\n toDOM(mark) {\n return ['span', { style: `background-color: ${mark.attrs.color}` }, 0];\n },\n },\n\n font_family: {\n attrs: { family: {} },\n parseDOM: [\n {\n style: 'font-family',\n getAttrs: (value: string) => (value ? { family: value } : false),\n },\n ],\n toDOM(mark) {\n return ['span', { style: `font-family: ${mark.attrs.family}` }, 0];\n },\n },\n\n font_size: {\n attrs: { size: {} },\n parseDOM: [\n {\n style: 'font-size',\n getAttrs: (value: string) => (value ? { size: value } : false),\n },\n ],\n toDOM(mark) {\n return ['span', { style: `font-size: ${mark.attrs.size}` }, 0];\n },\n },\n};\n\n/** Bullet markers CSS understands; anything else falls back to default. */\nexport const BULLET_STYLES = ['disc', 'circle', 'square'] as const;\n\n/** Numbering styles, keyed by the HTML `type` attribute letter. */\nexport const ORDERED_STYLES: Record<string, string> = {\n '1': 'decimal',\n a: 'lower-alpha',\n A: 'upper-alpha',\n i: 'lower-roman',\n I: 'upper-roman',\n};\n\nconst STYLE_TO_TYPE: Record<string, string> = Object.fromEntries(\n Object.entries(ORDERED_STYLES).map(([type, style]) => [style, type])\n);\n\n/**\n * Legal-style continuous numbering (1, 1.1, 1.1.1). Not a CSS\n * list-style-type: it serializes as `data-list-style=\"multilevel\"` and is\n * rendered with CSS counters (see the editor stylesheet). Consumers rendering\n * the output need the same counter rules.\n */\nexport const MULTILEVEL_STYLE = 'multilevel';\n\n/** List specs from prosemirror-schema-list, extended with style attrs. */\nconst bulletListSpec: NodeSpec = {\n content: 'list_item+',\n group: 'block',\n attrs: { style: { default: null } },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom: HTMLElement) => {\n const style = dom.style.listStyleType;\n return {\n style: (BULLET_STYLES as readonly string[]).includes(style) ? style : null,\n };\n },\n },\n ],\n toDOM(node) {\n return node.attrs.style\n ? ['ul', { style: `list-style-type: ${node.attrs.style}` }, 0]\n : ['ul', 0];\n },\n};\n\nconst orderedListSpec: NodeSpec = {\n content: 'list_item+',\n group: 'block',\n attrs: { order: { default: 1 }, style: { default: null } },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom: HTMLElement) => {\n const type = dom.getAttribute('type') ?? '';\n const cssStyle = dom.style.listStyleType;\n const style =\n dom.getAttribute('data-list-style') === MULTILEVEL_STYLE\n ? MULTILEVEL_STYLE\n : ORDERED_STYLES[type] ??\n (Object.values(ORDERED_STYLES).includes(cssStyle) ? cssStyle : null);\n const start = Number(dom.getAttribute('start'));\n return {\n order: Number.isFinite(start) && start > 0 ? start : 1,\n style,\n };\n },\n },\n ],\n toDOM(node) {\n const attrs: Record<string, string> = {};\n if (node.attrs.order !== 1) attrs.start = String(node.attrs.order);\n if (node.attrs.style === MULTILEVEL_STYLE) {\n attrs['data-list-style'] = MULTILEVEL_STYLE;\n } else if (node.attrs.style && STYLE_TO_TYPE[node.attrs.style]) {\n attrs.type = STYLE_TO_TYPE[node.attrs.style];\n }\n return ['ol', attrs, 0];\n },\n};\n\n/** Builds the editor schema. List nodes are added via prosemirror-schema-list. */\nexport function createSchema(): Schema {\n let nodeMap = addListNodes(OrderedMap.from(nodes), 'paragraph block*', 'block')\n .update('bullet_list', bulletListSpec)\n .update('ordered_list', orderedListSpec)\n .append(tableNodeSpecs)\n .update('table', tableSpec);\n // Thread author class/id through the content nodes and marks (applied last so\n // it also wraps the list/table specs pulled in from external packages).\n for (const name of HTML_ATTR_NODES) {\n const spec = nodeMap.get(name);\n if (spec) nodeMap = nodeMap.update(name, withHtmlAttrs(spec));\n }\n let markMap = OrderedMap.from<MarkSpec>(marks);\n for (const name of HTML_ATTR_MARKS) {\n const spec = markMap.get(name);\n if (spec) markMap = markMap.update(name, withHtmlAttrs(spec));\n }\n return new Schema({ nodes: nodeMap, marks: markMap });\n}\n\n/** A shared default schema instance. */\nexport const defaultSchema = createSchema();\n"],"names":["add","obj","props","copy","prop","wrapInList","listType","attrs","state","dispatch","_o$selection","selection","range","$from","$to","blockRange","tr","arguments","length","undefined","doJoin","outerRange","doc","depth","node","type","compatibleContent","startIndex","index","$insert","resolve","start","NodeRange","endIndex","parent","childCount","end","wrap","findWrapping","wrappers","joinBefore","content","Fragment","empty","i","from","create","step","ReplaceAroundStep","Slice","found","splitDepth","splitPos","e","first","canSplit","split","child","nodeSize","doWrapInList","wrapRangeInList","scrollIntoView","splitListItem","itemType","itemAttrs","_n$selection","isBlock","sameParent","grandParent","size","indexAfter","depthBefore","d","depthAfter","append","createAndFill","before","replace","after","sel","nodesBetween","pos","isTextblock","setSelection","Selection","near","nextType","contentMatchAt","defaultType","delete","types","liftListItem","_s$selection","firstChild","endOfList","target","liftTarget","lift","$after","mapping","map","canJoin","nodeBefore","nodeAfter","join","liftToOuterList","list","$start","item","atStart","atEnd","indexBefore","canReplace","liftOutOfList","sinkListItem","_n$selection2","nestedBefore","lastChild","inner","slice","getAlignFromDom","dom","value","style","textAlign","getAttribute","ALIGN_VALUES","includes","getIndentFromDom","raw","marginInlineStart","marginLeft","px","parseFloat","Number","isFinite","Math","min","round","getLineHeightFromDom","lineHeight","trim","num","endsWith","String","blockStyle","parts","align","alignStyle","_t$align","push","indent","concat","cleanClass","kept","filter","token","RESERVED_NAME","test","cleanId","readHtmlAttrs","htmlClass","htmlId","augmentParseRule","rule","getAttrs","_objectSpread","base","withHtmlAttrs","spec","_t$attrs","HTML_ATTR_SPEC","parseDOM","toDOM","_len","rest","Array","_key","out","cls","id","isArray","_r2","_toArray","tag","tail","children","class","_export","a","olDOM","ulDOM","liDOM","orderedList","order","default","validate","hasAttribute","bulletList","listItem","defining","MAX_INDENT","HTML_ATTR_NODES","HTML_ATTR_MARKS","nodes","paragraph","group","heading","level","blockquote","horizontal_rule","text","hard_break","inline","selectable","code_block","marks","code","language","preserveWhitespace","image","draggable","src","alt","title","width","styleWidth","attrWidth","_t$attrs2","figure","isolating","contentElement","img","querySelector","_t$attrs3","figureAttrs","styles","imgAttrs","task_list","priority","task_item","checked","embed","atom","provider","iframe","widthAttr","exec","_exec","parseInt","NaN","_t$getAttribute3","_t$attrs4","iframeAttrs","frameborder","allowfullscreen","allow","sandbox","EMBED_SANDBOX","referrerpolicy","EMBED_REFERRER_POLICY","wrapperAttrs","styleBlock","css","textContent","bookmark","mention","trigger","key","label","_t$attrs5","merge_field","_t$attrs6","math","latex","display","_t$attrs7","tableNodeSpecs","tableNodes","tableGroup","cellContent","cellAttributes","background","getFromDOM","backgroundColor","setDOMAttr","baseTableSpec","table","tableSpec","_R$attrs","layout","role","link","href","inclusive","mark","_t$attrs8","rel","bold","fontWeight","italic","underline","strike","subscript","excludes","superscript","html_span","text_color","color","bg_color","font_family","family","font_size","BULLET_STYLES","ORDERED_STYLES","A","I","STYLE_TO_TYPE","Object","fromEntries","entries","_ref","_ref2","_slicedToArray","MULTILEVEL_STYLE","bulletListSpec","listStyleType","orderedListSpec","_t$getAttribute4","_L$e","cssStyle","values","defaultSchema","nodeMap","itemContent","listGroup","ordered_list","bullet_list","list_item","addListNodes","OrderedMap","update","_i2","_E","name","get","markMap","_i3","_B","Schema","createSchema"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"schema.cjs.js","sources":["../../../../../node_modules/prosemirror-schema-list/dist/index.js","../../../../../node_modules/prosemirror-keymap/dist/index.js","../../../../../node_modules/prosemirror-tables/dist/index.js","../../../../src/nile-wysiwyg-editor/engine/schema.ts"],"sourcesContent":["import { findWrapping, ReplaceAroundStep, canSplit, liftTarget, canJoin } from 'prosemirror-transform';\nimport { NodeRange, Fragment, Slice } from 'prosemirror-model';\nimport { Selection } from 'prosemirror-state';\n\nconst olDOM = [\"ol\", 0], ulDOM = [\"ul\", 0], liDOM = [\"li\", 0];\n/**\nAn ordered list [node spec](https://prosemirror.net/docs/ref/#model.NodeSpec). Has a single\nattribute, `order`, which determines the number at which the list\nstarts counting, and defaults to 1. Represented as an `<ol>`\nelement.\n*/\nconst orderedList = {\n attrs: { order: { default: 1, validate: \"number\" } },\n parseDOM: [{ tag: \"ol\", getAttrs(dom) {\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1 };\n } }],\n toDOM(node) {\n return node.attrs.order == 1 ? olDOM : [\"ol\", { start: node.attrs.order }, 0];\n }\n};\n/**\nA bullet list node spec, represented in the DOM as `<ul>`.\n*/\nconst bulletList = {\n parseDOM: [{ tag: \"ul\" }],\n toDOM() { return ulDOM; }\n};\n/**\nA list item (`<li>`) spec.\n*/\nconst listItem = {\n parseDOM: [{ tag: \"li\" }],\n toDOM() { return liDOM; },\n defining: true\n};\nfunction add(obj, props) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n for (let prop in props)\n copy[prop] = props[prop];\n return copy;\n}\n/**\nConvenience function for adding list-related node types to a map\nspecifying the nodes for a schema. Adds\n[`orderedList`](https://prosemirror.net/docs/ref/#schema-list.orderedList) as `\"ordered_list\"`,\n[`bulletList`](https://prosemirror.net/docs/ref/#schema-list.bulletList) as `\"bullet_list\"`, and\n[`listItem`](https://prosemirror.net/docs/ref/#schema-list.listItem) as `\"list_item\"`.\n\n`itemContent` determines the content expression for the list items.\nIf you want the commands defined in this module to apply to your\nlist structure, it should have a shape like `\"paragraph block*\"` or\n`\"paragraph (ordered_list | bullet_list)*\"`. `listGroup` can be\ngiven to assign a group name to the list node types, for example\n`\"block\"`.\n*/\nfunction addListNodes(nodes, itemContent, listGroup) {\n return nodes.append({\n ordered_list: add(orderedList, { content: \"list_item+\", group: listGroup }),\n bullet_list: add(bulletList, { content: \"list_item+\", group: listGroup }),\n list_item: add(listItem, { content: itemContent })\n });\n}\n/**\nReturns a command function that wraps the selection in a list with\nthe given type an attributes. If `dispatch` is null, only return a\nvalue to indicate whether this is possible, but don't actually\nperform the change.\n*/\nfunction wrapInList(listType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to);\n if (!range)\n return false;\n let tr = dispatch ? state.tr : null;\n if (!wrapRangeInList(tr, range, listType, attrs))\n return false;\n if (dispatch)\n dispatch(tr.scrollIntoView());\n return true;\n };\n}\n/**\nTry to wrap the given node range in a list of the given type.\nReturn `true` when this is possible, `false` otherwise. When `tr`\nis non-null, the wrapping is added to that transaction. When it is\n`null`, the function only queries whether the wrapping is\npossible.\n*/\nfunction wrapRangeInList(tr, range, listType, attrs = null) {\n let doJoin = false, outerRange = range, doc = range.$from.doc;\n // This is at the top of an existing list item\n if (range.depth >= 2 && range.$from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n // Don't do anything if this is the top of the list\n if (range.$from.index(range.depth - 1) == 0)\n return false;\n let $insert = doc.resolve(range.start - 2);\n outerRange = new NodeRange($insert, $insert, range.depth);\n if (range.endIndex < range.parent.childCount)\n range = new NodeRange(range.$from, doc.resolve(range.$to.end(range.depth)), range.depth);\n doJoin = true;\n }\n let wrap = findWrapping(outerRange, listType, attrs, range);\n if (!wrap)\n return false;\n if (tr)\n doWrapInList(tr, range, wrap, doJoin, listType);\n return true;\n}\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--)\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice(content, 0, 0), wrappers.length, true));\n let found = 0;\n for (let i = 0; i < wrappers.length; i++)\n if (wrappers[i].type == listType)\n found = i + 1;\n let splitDepth = wrappers.length - found;\n let splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent;\n for (let i = range.startIndex, e = range.endIndex, first = true; i < e; i++, first = false) {\n if (!first && canSplit(tr.doc, splitPos, splitDepth)) {\n tr.split(splitPos, splitDepth);\n splitPos += 2 * splitDepth;\n }\n splitPos += parent.child(i).nodeSize;\n }\n return tr;\n}\n/**\nBuild a command that splits a non-empty textblock at the top level\nof a list item by also splitting that list item.\n*/\nfunction splitListItem(itemType, itemAttrs) {\n return function (state, dispatch) {\n let { $from, $to, node } = state.selection;\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to))\n return false;\n let grandParent = $from.node(-1);\n if (grandParent.type != itemType)\n return false;\n if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth == 3 || $from.node(-3).type != itemType ||\n $from.index(-2) != $from.node(-2).childCount - 1)\n return false;\n if (dispatch) {\n let wrap = Fragment.empty;\n let depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d--)\n wrap = Fragment.from($from.node(d).copy(wrap));\n let depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1\n : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n // Add a second list item with an empty default start node\n wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n let start = $from.before($from.depth - (depthBefore - 1));\n let tr = state.tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (node, pos) => {\n if (sel > -1)\n return false;\n if (node.isTextblock && node.content.size == 0)\n sel = pos + 1;\n });\n if (sel > -1)\n tr.setSelection(Selection.near(tr.doc.resolve(sel)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n let tr = state.tr.delete($from.pos, $to.pos);\n let types = nextType ? [itemAttrs ? { type: itemType, attrs: itemAttrs } : null, { type: nextType }] : undefined;\n if (!canSplit(tr.doc, $from.pos, 2, types))\n return false;\n if (dispatch)\n dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n return true;\n };\n}\n/**\nActs like [`splitListItem`](https://prosemirror.net/docs/ref/#schema-list.splitListItem), but\nwithout resetting the set of active marks at the cursor.\n*/\nfunction splitListItemKeepMarks(itemType, itemAttrs) {\n let split = splitListItem(itemType, itemAttrs);\n return (state, dispatch) => {\n return split(state, dispatch && (tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks)\n tr.ensureMarks(marks);\n dispatch(tr);\n }));\n };\n}\n/**\nCreate a command to lift the list item around the selection up into\na wrapping list.\n*/\nfunction liftListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n if (!dispatch)\n return true;\n if ($from.node(range.depth - 1).type == itemType) // Inside a parent list\n return liftToOuterList(state, dispatch, itemType, range);\n else // Outer list node\n return liftOutOfList(state, dispatch, range);\n };\n}\nfunction liftToOuterList(state, dispatch, itemType, range) {\n let tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth);\n if (end < endOfList) {\n // There are siblings after the lifted items, which must become\n // children of the last item\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));\n range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth);\n }\n const target = liftTarget(range);\n if (target == null)\n return false;\n tr.lift(range, target);\n let $after = tr.doc.resolve(tr.mapping.map(end, -1) - 1);\n if (canJoin(tr.doc, $after.pos) && $after.nodeBefore.type == $after.nodeAfter.type)\n tr.join($after.pos);\n dispatch(tr.scrollIntoView());\n return true;\n}\nfunction liftOutOfList(state, dispatch, range) {\n let tr = state.tr, list = range.parent;\n // Merge the list items into a single big item\n for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n pos -= list.child(i).nodeSize;\n tr.delete(pos - 1, pos + 1);\n }\n let $start = tr.doc.resolve(range.start), item = $start.nodeAfter;\n if (tr.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize)\n return false;\n let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount;\n let parent = $start.node(-1), indexBefore = $start.index(-1);\n if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))\n return false;\n let start = $start.pos, end = start + item.nodeSize;\n // Strip off the surrounding list. At the sides where we're not at\n // the end of the list, the existing list is closed. At sides where\n // this is the end, it is overwritten to its end.\n tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty)))\n .append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));\n dispatch(tr.scrollIntoView());\n return true;\n}\n/**\nCreate a command to sink the list item around the selection down\ninto an inner list.\n*/\nfunction sinkListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n let startIndex = range.startIndex;\n if (startIndex == 0)\n return false;\n let parent = range.parent, nodeBefore = parent.child(startIndex - 1);\n if (nodeBefore.type != itemType)\n return false;\n if (dispatch) {\n let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;\n let inner = Fragment.from(nestedBefore ? itemType.create() : null);\n let slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);\n let before = range.start, after = range.end;\n dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true))\n .scrollIntoView());\n }\n return true;\n };\n}\n\nexport { addListNodes, bulletList, liftListItem, listItem, orderedList, sinkListItem, splitListItem, splitListItemKeepMarks, wrapInList, wrapRangeInList };\n","import { keyName, base } from 'w3c-keyname';\nimport { Plugin } from 'prosemirror-state';\n\nconst mac = typeof navigator != \"undefined\" && /Mac|iP(hone|[oa]d)/.test(navigator.platform);\nconst windows = typeof navigator != \"undefined\" && /Win/.test(navigator.platform);\nfunction normalizeKeyName(name) {\n let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];\n if (result == \"Space\")\n result = \" \";\n let alt, ctrl, shift, meta;\n for (let i = 0; i < parts.length - 1; i++) {\n let mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod))\n meta = true;\n else if (/^a(lt)?$/i.test(mod))\n alt = true;\n else if (/^(c|ctrl|control)$/i.test(mod))\n ctrl = true;\n else if (/^s(hift)?$/i.test(mod))\n shift = true;\n else if (/^mod$/i.test(mod)) {\n if (mac)\n meta = true;\n else\n ctrl = true;\n }\n else\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n if (alt)\n result = \"Alt-\" + result;\n if (ctrl)\n result = \"Ctrl-\" + result;\n if (meta)\n result = \"Meta-\" + result;\n if (shift)\n result = \"Shift-\" + result;\n return result;\n}\nfunction normalize(map) {\n let copy = Object.create(null);\n for (let prop in map)\n copy[normalizeKeyName(prop)] = map[prop];\n return copy;\n}\nfunction modifiers(name, event, shift = true) {\n if (event.altKey)\n name = \"Alt-\" + name;\n if (event.ctrlKey)\n name = \"Ctrl-\" + name;\n if (event.metaKey)\n name = \"Meta-\" + name;\n if (shift && event.shiftKey)\n name = \"Shift-\" + name;\n return name;\n}\n/**\nCreate a keymap plugin for the given set of bindings.\n\nBindings should map key names to [command](https://prosemirror.net/docs/ref/#commands)-style\nfunctions, which will be called with `(EditorState, dispatch,\nEditorView)` arguments, and should return true when they've handled\nthe key. Note that the view argument isn't part of the command\nprotocol, but can be used as an escape hatch if a binding needs to\ndirectly interact with the UI.\n\nKey names may be strings like `\"Shift-Ctrl-Enter\"`—a key\nidentifier prefixed with zero or more modifiers. Key identifiers\nare based on the strings that can appear in\n[`KeyEvent.key`](https:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\nUse lowercase letters to refer to letter keys (or uppercase letters\nif you want shift to be held). You may use `\"Space\"` as an alias\nfor the `\" \"` name.\n\nModifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n`a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n`Meta-`) are recognized. For characters that are created by holding\nshift, the `Shift-` prefix is implied, and should not be added\nexplicitly.\n\nYou can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\nother platforms.\n\nYou can add multiple keymap plugins to an editor. The order in\nwhich they appear determines their precedence (the ones early in\nthe array get to dispatch first).\n*/\nfunction keymap(bindings) {\n return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } });\n}\n/**\nGiven a set of bindings (using the same format as\n[`keymap`](https://prosemirror.net/docs/ref/#keymap.keymap)), return a [keydown\nhandler](https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown) that handles them.\n*/\nfunction keydownHandler(bindings) {\n let map = normalize(bindings);\n return function (view, event) {\n let name = keyName(event), baseName, direct = map[modifiers(name, event)];\n if (direct && direct(view.state, view.dispatch, view))\n return true;\n // A character key\n if (name.length == 1 && name != \" \") {\n if (event.shiftKey) {\n // In case the name was already modified by shift, try looking\n // it up without its shift modifier\n let noShift = map[modifiers(name, event, false)];\n if (noShift && noShift(view.state, view.dispatch, view))\n return true;\n }\n if ((event.altKey || event.metaKey || event.ctrlKey) &&\n // Ctrl-Alt may be used for AltGr on Windows\n !(windows && event.ctrlKey && event.altKey) &&\n (baseName = base[event.keyCode]) && baseName != name) {\n // Try falling back to the keyCode when there's a modifier\n // active or the character produced isn't ASCII, and our table\n // produces a different name from the the keyCode. See #668,\n // #1060, #1529.\n let fromCode = map[modifiers(baseName, event)];\n if (fromCode && fromCode(view.state, view.dispatch, view))\n return true;\n }\n }\n return false;\n };\n}\n\nexport { keydownHandler, keymap };\n","import { NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection } from \"prosemirror-state\";\nimport { Fragment, Slice } from \"prosemirror-model\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nimport { keydownHandler } from \"prosemirror-keymap\";\nimport { Transform } from \"prosemirror-transform\";\n\n//#region src/tablemap.ts\nlet readFromCache;\nlet addToCache;\nif (typeof WeakMap != \"undefined\") {\n\tlet cache = /* @__PURE__ */ new WeakMap();\n\treadFromCache = (key) => cache.get(key);\n\taddToCache = (key, value) => {\n\t\tcache.set(key, value);\n\t\treturn value;\n\t};\n} else {\n\tconst cache = [];\n\tconst cacheSize = 10;\n\tlet cachePos = 0;\n\treadFromCache = (key) => {\n\t\tfor (let i = 0; i < cache.length; i += 2) if (cache[i] == key) return cache[i + 1];\n\t};\n\taddToCache = (key, value) => {\n\t\tif (cachePos == cacheSize) cachePos = 0;\n\t\tcache[cachePos++] = key;\n\t\treturn cache[cachePos++] = value;\n\t};\n}\n/**\n* A table map describes the structure of a given table. To avoid\n* recomputing them all the time, they are cached per table node. To\n* be able to do that, positions saved in the map are relative to the\n* start of the table, rather than the start of the document.\n*\n* @public\n*/\nvar TableMap = class {\n\tconstructor(width, height, map, problems) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.map = map;\n\t\tthis.problems = problems;\n\t}\n\tfindCell(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) {\n\t\t\tconst curPos = this.map[i];\n\t\t\tif (curPos != pos) continue;\n\t\t\tconst left = i % this.width;\n\t\t\tconst top = i / this.width | 0;\n\t\t\tlet right = left + 1;\n\t\t\tlet bottom = top + 1;\n\t\t\tfor (let j = 1; right < this.width && this.map[i + j] == curPos; j++) right++;\n\t\t\tfor (let j = 1; bottom < this.height && this.map[i + this.width * j] == curPos; j++) bottom++;\n\t\t\treturn {\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\tright,\n\t\t\t\tbottom\n\t\t\t};\n\t\t}\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tcolCount(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) if (this.map[i] == pos) return i % this.width;\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tnextCell(pos, axis, dir) {\n\t\tconst { left, right, top, bottom } = this.findCell(pos);\n\t\tif (axis == \"horiz\") {\n\t\t\tif (dir < 0 ? left == 0 : right == this.width) return null;\n\t\t\treturn this.map[top * this.width + (dir < 0 ? left - 1 : right)];\n\t\t} else {\n\t\t\tif (dir < 0 ? top == 0 : bottom == this.height) return null;\n\t\t\treturn this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];\n\t\t}\n\t}\n\trectBetween(a, b) {\n\t\tconst { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a);\n\t\tconst { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b);\n\t\treturn {\n\t\t\tleft: Math.min(leftA, leftB),\n\t\t\ttop: Math.min(topA, topB),\n\t\t\tright: Math.max(rightA, rightB),\n\t\t\tbottom: Math.max(bottomA, bottomB)\n\t\t};\n\t}\n\tcellsInRect(rect) {\n\t\tconst result = [];\n\t\tconst seen = {};\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst index = row * this.width + col;\n\t\t\tconst pos = this.map[index];\n\t\t\tif (seen[pos]) continue;\n\t\t\tseen[pos] = true;\n\t\t\tif (col == rect.left && col && this.map[index - 1] == pos || row == rect.top && row && this.map[index - this.width] == pos) continue;\n\t\t\tresult.push(pos);\n\t\t}\n\t\treturn result;\n\t}\n\tpositionAt(row, col, table) {\n\t\tfor (let i = 0, rowStart = 0;; i++) {\n\t\t\tconst rowEnd = rowStart + table.child(i).nodeSize;\n\t\t\tif (i == row) {\n\t\t\t\tlet index = col + row * this.width;\n\t\t\t\tconst rowEndIndex = (row + 1) * this.width;\n\t\t\t\twhile (index < rowEndIndex && this.map[index] < rowStart) index++;\n\t\t\t\treturn index == rowEndIndex ? rowEnd - 1 : this.map[index];\n\t\t\t}\n\t\t\trowStart = rowEnd;\n\t\t}\n\t}\n\tstatic get(table) {\n\t\treturn readFromCache(table) || addToCache(table, computeMap(table));\n\t}\n};\nfunction computeMap(table) {\n\tif (table.type.spec.tableRole != \"table\") throw new RangeError(\"Not a table node: \" + table.type.name);\n\tconst width = findWidth(table), height = table.childCount;\n\tconst map = [];\n\tlet mapPos = 0;\n\tlet problems = null;\n\tconst colWidths = [];\n\tfor (let i = 0, e = width * height; i < e; i++) map[i] = 0;\n\tfor (let row = 0, pos = 0; row < height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tpos++;\n\t\tfor (let i = 0;; i++) {\n\t\t\twhile (mapPos < map.length && map[mapPos] != 0) mapPos++;\n\t\t\tif (i == rowNode.childCount) break;\n\t\t\tconst cellNode = rowNode.child(i);\n\t\t\tconst { colspan, rowspan, colwidth } = cellNode.attrs;\n\t\t\tfor (let h = 0; h < rowspan; h++) {\n\t\t\t\tif (h + row >= height) {\n\t\t\t\t\t(problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"overlong_rowspan\",\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: rowspan - h\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst start = mapPos + h * width;\n\t\t\t\tfor (let w = 0; w < colspan; w++) {\n\t\t\t\t\tif (map[start + w] == 0) map[start + w] = pos;\n\t\t\t\t\telse (problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"collision\",\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: colspan - w\n\t\t\t\t\t});\n\t\t\t\t\tconst colW = colwidth && colwidth[w];\n\t\t\t\t\tif (colW) {\n\t\t\t\t\t\tconst widthIndex = (start + w) % width * 2, prev = colWidths[widthIndex];\n\t\t\t\t\t\tif (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) {\n\t\t\t\t\t\t\tcolWidths[widthIndex] = colW;\n\t\t\t\t\t\t\tcolWidths[widthIndex + 1] = 1;\n\t\t\t\t\t\t} else if (prev == colW) colWidths[widthIndex + 1]++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmapPos += colspan;\n\t\t\tpos += cellNode.nodeSize;\n\t\t}\n\t\tconst expectedPos = (row + 1) * width;\n\t\tlet missing = 0;\n\t\twhile (mapPos < expectedPos) if (map[mapPos++] == 0) missing++;\n\t\tif (missing) (problems || (problems = [])).push({\n\t\t\ttype: \"missing\",\n\t\t\trow,\n\t\t\tn: missing\n\t\t});\n\t\tpos++;\n\t}\n\tif (width === 0 || height === 0) (problems || (problems = [])).push({ type: \"zero_sized\" });\n\tconst tableMap = new TableMap(width, height, map, problems);\n\tlet badWidths = false;\n\tfor (let i = 0; !badWidths && i < colWidths.length; i += 2) if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;\n\tif (badWidths) findBadColWidths(tableMap, colWidths, table);\n\treturn tableMap;\n}\nfunction findWidth(table) {\n\tlet width = -1;\n\tlet hasRowSpan = false;\n\tfor (let row = 0; row < table.childCount; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tlet rowWidth = 0;\n\t\tif (hasRowSpan) for (let j = 0; j < row; j++) {\n\t\t\tconst prevRow = table.child(j);\n\t\t\tfor (let i = 0; i < prevRow.childCount; i++) {\n\t\t\t\tconst cell = prevRow.child(i);\n\t\t\t\tif (j + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < rowNode.childCount; i++) {\n\t\t\tconst cell = rowNode.child(i);\n\t\t\trowWidth += cell.attrs.colspan;\n\t\t\tif (cell.attrs.rowspan > 1) hasRowSpan = true;\n\t\t}\n\t\tif (width == -1) width = rowWidth;\n\t\telse if (width != rowWidth) width = Math.max(width, rowWidth);\n\t}\n\treturn width;\n}\nfunction findBadColWidths(map, colWidths, table) {\n\tif (!map.problems) map.problems = [];\n\tconst seen = {};\n\tfor (let i = 0; i < map.map.length; i++) {\n\t\tconst pos = map.map[i];\n\t\tif (seen[pos]) continue;\n\t\tseen[pos] = true;\n\t\tconst node = table.nodeAt(pos);\n\t\tif (!node) throw new RangeError(`No cell with offset ${pos} found`);\n\t\tlet updated = null;\n\t\tconst attrs = node.attrs;\n\t\tfor (let j = 0; j < attrs.colspan; j++) {\n\t\t\tconst colWidth = colWidths[(i + j) % map.width * 2];\n\t\t\tif (colWidth != null && (!attrs.colwidth || attrs.colwidth[j] != colWidth)) (updated || (updated = freshColWidth(attrs)))[j] = colWidth;\n\t\t}\n\t\tif (updated) map.problems.unshift({\n\t\t\ttype: \"colwidth mismatch\",\n\t\t\tpos,\n\t\t\tcolwidth: updated\n\t\t});\n\t}\n}\nfunction freshColWidth(attrs) {\n\tif (attrs.colwidth) return attrs.colwidth.slice();\n\tconst result = [];\n\tfor (let i = 0; i < attrs.colspan; i++) result.push(0);\n\treturn result;\n}\n\n//#endregion\n//#region src/schema.ts\nfunction getCellAttrs(dom, extraAttrs) {\n\tif (typeof dom === \"string\") return {};\n\tconst widthAttr = dom.getAttribute(\"data-colwidth\");\n\tconst widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(\",\").map((s) => Number(s)) : null;\n\tconst colspan = Number(dom.getAttribute(\"colspan\") || 1);\n\tconst result = {\n\t\tcolspan,\n\t\trowspan: Number(dom.getAttribute(\"rowspan\") || 1),\n\t\tcolwidth: widths && widths.length == colspan ? widths : null\n\t};\n\tfor (const prop in extraAttrs) {\n\t\tconst getter = extraAttrs[prop].getFromDOM;\n\t\tconst value = getter && getter(dom);\n\t\tif (value != null) result[prop] = value;\n\t}\n\treturn result;\n}\nfunction setCellAttrs(node, extraAttrs) {\n\tconst attrs = {};\n\tif (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n\tif (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n\tif (node.attrs.colwidth) attrs[\"data-colwidth\"] = node.attrs.colwidth.join(\",\");\n\tfor (const prop in extraAttrs) {\n\t\tconst setter = extraAttrs[prop].setDOMAttr;\n\t\tif (setter) setter(node.attrs[prop], attrs);\n\t}\n\treturn attrs;\n}\nfunction validateColwidth(value) {\n\tif (value === null) return;\n\tif (!Array.isArray(value)) throw new TypeError(\"colwidth must be null or an array\");\n\tfor (const item of value) if (typeof item !== \"number\") throw new TypeError(\"colwidth must be null or an array of numbers\");\n}\n/**\n* This function creates a set of [node\n* specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n* `table`, `table_row`, and `table_cell` nodes types as used by this\n* module. The result can then be added to the set of nodes when\n* creating a schema.\n*\n* @public\n*/\nfunction tableNodes(options) {\n\tconst extraAttrs = options.cellAttributes || {};\n\tconst cellAttrs = {\n\t\tcolspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\trowspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\tcolwidth: {\n\t\t\tdefault: null,\n\t\t\tvalidate: validateColwidth\n\t\t}\n\t};\n\tfor (const prop in extraAttrs) cellAttrs[prop] = {\n\t\tdefault: extraAttrs[prop].default,\n\t\tvalidate: extraAttrs[prop].validate\n\t};\n\treturn {\n\t\ttable: {\n\t\t\tcontent: \"table_row+\",\n\t\t\ttableRole: \"table\",\n\t\t\tisolating: true,\n\t\t\tgroup: options.tableGroup,\n\t\t\tparseDOM: [{ tag: \"table\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"table\", [\"tbody\", 0]];\n\t\t\t}\n\t\t},\n\t\ttable_row: {\n\t\t\tcontent: \"(table_cell | table_header)*\",\n\t\t\ttableRole: \"row\",\n\t\t\tparseDOM: [{ tag: \"tr\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"tr\", 0];\n\t\t\t}\n\t\t},\n\t\ttable_cell: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"td\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"td\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t\ttable_header: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"header_cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"th\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"th\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t};\n}\n/**\n* @public\n*/\nfunction tableNodeTypes(schema) {\n\tlet result = schema.cached.tableNodeTypes;\n\tif (!result) {\n\t\tresult = schema.cached.tableNodeTypes = {};\n\t\tfor (const name in schema.nodes) {\n\t\t\tconst type = schema.nodes[name], role = type.spec.tableRole;\n\t\t\tif (role) result[role] = type;\n\t\t}\n\t}\n\treturn result;\n}\n\n//#endregion\n//#region src/util.ts\n/**\n* @public\n*/\nconst tableEditingKey = new PluginKey(\"selectingCells\");\n/**\n* @public\n*/\nfunction cellAround($pos) {\n\tfor (let d = $pos.depth - 1; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"row\") return $pos.node(0).resolve($pos.before(d + 1));\n\treturn null;\n}\nfunction cellWrapping($pos) {\n\tfor (let d = $pos.depth; d > 0; d--) {\n\t\tconst role = $pos.node(d).type.spec.tableRole;\n\t\tif (role === \"cell\" || role === \"header_cell\") return $pos.node(d);\n\t}\n\treturn null;\n}\n/**\n* @public\n*/\nfunction isInTable(state) {\n\tconst $head = state.selection.$head;\n\tfor (let d = $head.depth; d > 0; d--) if ($head.node(d).type.spec.tableRole == \"row\") return true;\n\treturn false;\n}\n/**\n* @internal\n*/\nfunction selectionCell(state) {\n\tconst sel = state.selection;\n\tif (\"$anchorCell\" in sel && sel.$anchorCell) return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n\telse if (\"node\" in sel && sel.node && sel.node.type.spec.tableRole == \"cell\") return sel.$anchor;\n\tconst $cell = cellAround(sel.$head) || cellNear(sel.$head);\n\tif ($cell) return $cell;\n\tthrow new RangeError(`No cell found around position ${sel.head}`);\n}\n/**\n* @public\n*/\nfunction cellNear($pos) {\n\tfor (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n\t\tconst role = after.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos);\n\t}\n\tfor (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {\n\t\tconst role = before.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos - before.nodeSize);\n\t}\n}\n/**\n* @public\n*/\nfunction pointsAtCell($pos) {\n\treturn $pos.parent.type.spec.tableRole == \"row\" && !!$pos.nodeAfter;\n}\n/**\n* @public\n*/\nfunction moveCellForward($pos) {\n\treturn $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize);\n}\n/**\n* @internal\n*/\nfunction inSameTable($cellA, $cellB) {\n\treturn $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1);\n}\n/**\n* @public\n*/\nfunction findCell($pos) {\n\treturn TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction colCount($pos) {\n\treturn TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction nextCell($pos, axis, dir) {\n\tconst table = $pos.node(-1);\n\tconst map = TableMap.get(table);\n\tconst tableStart = $pos.start(-1);\n\tconst moved = map.nextCell($pos.pos - tableStart, axis, dir);\n\treturn moved == null ? null : $pos.node(0).resolve(tableStart + moved);\n}\n/**\n* @public\n*/\nfunction removeColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan - n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tresult.colwidth.splice(pos, n);\n\t\tif (!result.colwidth.some((w) => w > 0)) result.colwidth = null;\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction addColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan + n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tfor (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0);\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction columnIsHeader(map, table, col) {\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let row = 0; row < map.height; row++) if (table.nodeAt(map.map[col + row * map.width]).type != headerCell) return false;\n\treturn true;\n}\n\n//#endregion\n//#region src/cellselection.ts\n/**\n* A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)\n* subclass that represents a cell selection spanning part of a table.\n* With the plugin enabled, these will be created when the user\n* selects across cells, and will be drawn by giving selected cells a\n* `selectedCell` CSS class.\n*\n* @public\n*/\nvar CellSelection = class CellSelection extends Selection {\n\tconstructor($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst rect = map.rectBetween($anchorCell.pos - tableStart, $headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tconst cells = map.cellsInRect(rect).filter((p) => p != $headCell.pos - tableStart);\n\t\tcells.unshift($headCell.pos - tableStart);\n\t\tconst ranges = cells.map((pos) => {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\tconst from = tableStart + pos + 1;\n\t\t\treturn new SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size));\n\t\t});\n\t\tsuper(ranges[0].$from, ranges[0].$to, ranges);\n\t\tthis.$anchorCell = $anchorCell;\n\t\tthis.$headCell = $headCell;\n\t}\n\tmap(doc, mapping) {\n\t\tconst $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n\t\tconst $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n\t\tif (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n\t\t\tconst tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);\n\t\t\tif (tableChanged && this.isRowSelection()) return CellSelection.rowSelection($anchorCell, $headCell);\n\t\t\telse if (tableChanged && this.isColSelection()) return CellSelection.colSelection($anchorCell, $headCell);\n\t\t\telse return new CellSelection($anchorCell, $headCell);\n\t\t}\n\t\treturn TextSelection.between($anchorCell, $headCell);\n\t}\n\tcontent() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst rect = map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart);\n\t\tconst seen = {};\n\t\tconst rows = [];\n\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\tconst rowContent = [];\n\t\t\tfor (let index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n\t\t\t\tconst pos = map.map[index];\n\t\t\t\tif (seen[pos]) continue;\n\t\t\t\tseen[pos] = true;\n\t\t\t\tconst cellRect = map.findCell(pos);\n\t\t\t\tlet cell = table.nodeAt(pos);\n\t\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\t\tconst extraLeft = rect.left - cellRect.left;\n\t\t\t\tconst extraRight = cellRect.right - rect.right;\n\t\t\t\tif (extraLeft > 0 || extraRight > 0) {\n\t\t\t\t\tlet attrs = cell.attrs;\n\t\t\t\t\tif (extraLeft > 0) attrs = removeColSpan(attrs, 0, extraLeft);\n\t\t\t\t\tif (extraRight > 0) attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight);\n\t\t\t\t\tif (cellRect.left < rect.left) {\n\t\t\t\t\t\tcell = cell.type.createAndFill(attrs);\n\t\t\t\t\t\tif (!cell) throw new RangeError(`Could not create cell with attrs ${JSON.stringify(attrs)}`);\n\t\t\t\t\t} else cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\tif (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t...cell.attrs,\n\t\t\t\t\t\trowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top)\n\t\t\t\t\t};\n\t\t\t\t\tif (cellRect.top < rect.top) cell = cell.type.createAndFill(attrs);\n\t\t\t\t\telse cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\trowContent.push(cell);\n\t\t\t}\n\t\t\trows.push(table.child(row).copy(Fragment.from(rowContent)));\n\t\t}\n\t\tconst fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n\t\treturn new Slice(Fragment.from(fragment), 1, 1);\n\t}\n\treplace(tr, content = Slice.empty) {\n\t\tconst mapFrom = tr.steps.length, ranges = this.ranges;\n\t\tfor (let i = 0; i < ranges.length; i++) {\n\t\t\tconst { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n\t\t\ttr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n\t\t}\n\t\tconst sel = Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1);\n\t\tif (sel) tr.setSelection(sel);\n\t}\n\treplaceWith(tr, node) {\n\t\tthis.replace(tr, new Slice(Fragment.from(node), 0, 0));\n\t}\n\tforEachCell(f) {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst cells = map.cellsInRect(map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart));\n\t\tfor (let i = 0; i < cells.length; i++) f(table.nodeAt(cells[i]), tableStart + cells[i]);\n\t}\n\tisColSelection() {\n\t\tconst anchorTop = this.$anchorCell.index(-1);\n\t\tconst headTop = this.$headCell.index(-1);\n\t\tif (Math.min(anchorTop, headTop) > 0) return false;\n\t\tconst anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan;\n\t\tconst headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan;\n\t\treturn Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount;\n\t}\n\tstatic colSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.top <= headRect.top) {\n\t\t\tif (anchorRect.top > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.left]);\n\t\t\tif (headRect.bottom < map.height) $headCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + headRect.right - 1]);\n\t\t} else {\n\t\t\tif (headRect.top > 0) $headCell = doc.resolve(tableStart + map.map[headRect.left]);\n\t\t\tif (anchorRect.bottom < map.height) $anchorCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + anchorRect.right - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\tisRowSelection() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst anchorLeft = map.colCount(this.$anchorCell.pos - tableStart);\n\t\tconst headLeft = map.colCount(this.$headCell.pos - tableStart);\n\t\tif (Math.min(anchorLeft, headLeft) > 0) return false;\n\t\tconst anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan;\n\t\tconst headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;\n\t\treturn Math.max(anchorRight, headRight) == map.width;\n\t}\n\teq(other) {\n\t\treturn other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;\n\t}\n\tstatic rowSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.left <= headRect.left) {\n\t\t\tif (anchorRect.left > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.top * map.width]);\n\t\t\tif (headRect.right < map.width) $headCell = doc.resolve(tableStart + map.map[map.width * (headRect.top + 1) - 1]);\n\t\t} else {\n\t\t\tif (headRect.left > 0) $headCell = doc.resolve(tableStart + map.map[headRect.top * map.width]);\n\t\t\tif (anchorRect.right < map.width) $anchorCell = doc.resolve(tableStart + map.map[map.width * (anchorRect.top + 1) - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\ttype: \"cell\",\n\t\t\tanchor: this.$anchorCell.pos,\n\t\t\thead: this.$headCell.pos\n\t\t};\n\t}\n\tstatic fromJSON(doc, json) {\n\t\treturn new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n\t}\n\tstatic create(doc, anchorCell, headCell = anchorCell) {\n\t\treturn new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell));\n\t}\n\tgetBookmark() {\n\t\treturn new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);\n\t}\n};\nCellSelection.prototype.visible = false;\nSelection.jsonID(\"cell\", CellSelection);\n/**\n* @public\n*/\nvar CellBookmark = class CellBookmark {\n\tconstructor(anchor, head) {\n\t\tthis.anchor = anchor;\n\t\tthis.head = head;\n\t}\n\tmap(mapping) {\n\t\treturn new CellBookmark(mapping.map(this.anchor), mapping.map(this.head));\n\t}\n\tresolve(doc) {\n\t\tconst $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);\n\t\tif ($anchorCell.parent.type.spec.tableRole == \"row\" && $headCell.parent.type.spec.tableRole == \"row\" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell);\n\t\telse return Selection.near($headCell, 1);\n\t}\n};\nfunction drawCellSelection(state) {\n\tif (!(state.selection instanceof CellSelection)) return null;\n\tconst cells = [];\n\tstate.selection.forEachCell((node, pos) => {\n\t\tcells.push(Decoration.node(pos, pos + node.nodeSize, { class: \"selectedCell\" }));\n\t});\n\treturn DecorationSet.create(state.doc, cells);\n}\nfunction isCellBoundarySelection({ $from, $to }) {\n\tif ($from.pos == $to.pos || $from.pos < $to.pos - 6) return false;\n\tlet afterFrom = $from.pos;\n\tlet beforeTo = $to.pos;\n\tlet depth = $from.depth;\n\tfor (; depth >= 0; depth--, afterFrom++) if ($from.after(depth + 1) < $from.end(depth)) break;\n\tfor (let d = $to.depth; d >= 0; d--, beforeTo--) if ($to.before(d + 1) > $to.start(d)) break;\n\treturn afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole);\n}\nfunction isTextSelectionAcrossCells({ $from, $to }) {\n\tlet fromCellBoundaryNode;\n\tlet toCellBoundaryNode;\n\tfor (let i = $from.depth; i > 0; i--) {\n\t\tconst node = $from.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\tfromCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor (let i = $to.depth; i > 0; i--) {\n\t\tconst node = $to.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\ttoCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0;\n}\nfunction normalizeSelection(state, tr, allowTableNodeSelection) {\n\tconst sel = (tr || state).selection;\n\tconst doc = (tr || state).doc;\n\tlet normalize;\n\tlet role;\n\tif (sel instanceof NodeSelection && (role = sel.node.type.spec.tableRole)) {\n\t\tif (role == \"cell\" || role == \"header_cell\") normalize = CellSelection.create(doc, sel.from);\n\t\telse if (role == \"row\") {\n\t\t\tconst $cell = doc.resolve(sel.from + 1);\n\t\t\tnormalize = CellSelection.rowSelection($cell, $cell);\n\t\t} else if (!allowTableNodeSelection) {\n\t\t\tconst map = TableMap.get(sel.node);\n\t\t\tconst start = sel.from + 1;\n\t\t\tconst lastCell = start + map.map[map.width * map.height - 1];\n\t\t\tnormalize = CellSelection.create(doc, start + 1, lastCell);\n\t\t}\n\t} else if (sel instanceof TextSelection && isCellBoundarySelection(sel)) normalize = TextSelection.create(doc, sel.from);\n\telse if (sel instanceof TextSelection && isTextSelectionAcrossCells(sel)) normalize = TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n\tif (normalize) (tr || (tr = state.tr)).setSelection(normalize);\n\treturn tr;\n}\n\n//#endregion\n//#region src/fixtables.ts\n/**\n* @public\n*/\nconst fixTablesKey = new PluginKey(\"fix-tables\");\n/**\n* Helper for iterating through the nodes in a document that changed\n* compared to the given previous document. Useful for avoiding\n* duplicate work on each transaction.\n*\n* @public\n*/\nfunction changedDescendants(old, cur, offset, f) {\n\tconst oldSize = old.childCount, curSize = cur.childCount;\n\touter: for (let i = 0, j = 0; i < curSize; i++) {\n\t\tconst child = cur.child(i);\n\t\tfor (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) if (old.child(scan) == child) {\n\t\t\tj = scan + 1;\n\t\t\toffset += child.nodeSize;\n\t\t\tcontinue outer;\n\t\t}\n\t\tf(child, offset);\n\t\tif (j < oldSize && old.child(j).sameMarkup(child)) changedDescendants(old.child(j), child, offset + 1, f);\n\t\telse child.nodesBetween(0, child.content.size, f, offset + 1);\n\t\toffset += child.nodeSize;\n\t}\n}\n/**\n* Inspect all tables in the given state's document and return a\n* transaction that fixes them, if necessary. If `oldState` was\n* provided, that is assumed to hold a previous, known-good state,\n* which will be used to avoid re-scanning unchanged parts of the\n* document.\n*\n* @public\n*/\nfunction fixTables(state, oldState) {\n\tlet tr;\n\tconst check = (node, pos) => {\n\t\tif (node.type.spec.tableRole == \"table\") tr = fixTable(state, node, pos, tr);\n\t};\n\tif (!oldState) state.doc.descendants(check);\n\telse if (oldState.doc != state.doc) changedDescendants(oldState.doc, state.doc, 0, check);\n\treturn tr;\n}\nfunction fixTable(state, table, tablePos, tr) {\n\tconst map = TableMap.get(table);\n\tif (!map.problems) return tr;\n\tif (!tr) tr = state.tr;\n\tconst mustAdd = [];\n\tfor (let i = 0; i < map.height; i++) mustAdd.push(0);\n\tfor (let i = 0; i < map.problems.length; i++) {\n\t\tconst prob = map.problems[i];\n\t\tif (prob.type == \"collision\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\tconst attrs = cell.attrs;\n\t\t\tfor (let j = 0; j < attrs.rowspan; j++) mustAdd[prob.row + j] += prob.n;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(attrs, attrs.colspan - prob.n, prob.n));\n\t\t} else if (prob.type == \"missing\") mustAdd[prob.row] += prob.n;\n\t\telse if (prob.type == \"overlong_rowspan\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - prob.n\n\t\t\t});\n\t\t} else if (prob.type == \"colwidth mismatch\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\tcolwidth: prob.colwidth\n\t\t\t});\n\t\t} else if (prob.type == \"zero_sized\") {\n\t\t\tconst pos = tr.mapping.map(tablePos);\n\t\t\ttr.delete(pos, pos + table.nodeSize);\n\t\t}\n\t}\n\tlet first, last;\n\tfor (let i = 0; i < mustAdd.length; i++) if (mustAdd[i]) {\n\t\tif (first == null) first = i;\n\t\tlast = i;\n\t}\n\tfor (let i = 0, pos = tablePos + 1; i < map.height; i++) {\n\t\tconst row = table.child(i);\n\t\tconst end = pos + row.nodeSize;\n\t\tconst add = mustAdd[i];\n\t\tif (add > 0) {\n\t\t\tlet role = \"cell\";\n\t\t\tif (row.firstChild) role = row.firstChild.type.spec.tableRole;\n\t\t\tconst nodes = [];\n\t\t\tfor (let j = 0; j < add; j++) {\n\t\t\t\tconst node = tableNodeTypes(state.schema)[role].createAndFill();\n\t\t\t\tif (node) nodes.push(node);\n\t\t\t}\n\t\t\tconst side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1;\n\t\t\ttr.insert(tr.mapping.map(side), nodes);\n\t\t}\n\t\tpos = end;\n\t}\n\treturn tr.setMeta(fixTablesKey, { fixTables: true });\n}\n\n//#endregion\n//#region src/utils/convert.ts\n/**\n* This function will transform the table node into a matrix of rows and columns\n* respecting merged cells, for example this table:\n*\n* ```\n* ┌──────┬──────┬─────────────┐\n* │ A1 │ B1 │ C1 │\n* ├──────┼──────┴──────┬──────┤\n* │ A2 │ B2 │ │\n* ├──────┼─────────────┤ D1 │\n* │ A3 │ B3 │ C3 │ │\n* └──────┴──────┴──────┴──────┘\n* ```\n*\n* will be converted to the below:\n*\n* ```javascript\n* [\n* [A1, B1, C1, null],\n* [A2, B2, null, D1],\n* [A3, B3, C3, null],\n* ]\n* ```\n* @internal\n*/\nfunction convertTableNodeToArrayOfRows(tableNode) {\n\tconst map = TableMap.get(tableNode);\n\tconst rows = [];\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst row = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cellIndex = rowIndex * colCount$1 + colIndex;\n\t\t\tconst cellPos = map.map[cellIndex];\n\t\t\tif (rowIndex > 0) {\n\t\t\t\tconst topCellIndex = cellIndex - colCount$1;\n\t\t\t\tif (cellPos === map.map[topCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (colIndex > 0) {\n\t\t\t\tconst leftCellIndex = cellIndex - 1;\n\t\t\t\tif (cellPos === map.map[leftCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\trow.push(tableNode.nodeAt(cellPos));\n\t\t}\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n/**\n* Convert an array of rows to a table node.\n*\n* @internal\n*/\nfunction convertArrayOfRowsToTableNode(tableNode, arrayOfNodes) {\n\tconst newRows = [];\n\tconst map = TableMap.get(tableNode);\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst oldRow = tableNode.child(rowIndex);\n\t\tconst newCells = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cell = arrayOfNodes[rowIndex][colIndex];\n\t\t\tif (!cell) continue;\n\t\t\tconst cellPos = map.map[rowIndex * map.width + colIndex];\n\t\t\tconst oldCell = tableNode.nodeAt(cellPos);\n\t\t\tif (!oldCell) continue;\n\t\t\tconst newCell = oldCell.type.createChecked(cell.attrs, cell.content, cell.marks);\n\t\t\tnewCells.push(newCell);\n\t\t}\n\t\tconst newRow = oldRow.type.createChecked(oldRow.attrs, newCells, oldRow.marks);\n\t\tnewRows.push(newRow);\n\t}\n\treturn tableNode.type.createChecked(tableNode.attrs, newRows, tableNode.marks);\n}\n\n//#endregion\n//#region src/utils/move-row-in-array-of-rows.ts\n/**\n* Move a row in an array of rows.\n*\n* @internal\n*/\nfunction moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, directionOverride) {\n\tconst direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1;\n\tconst rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length);\n\tconst positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0;\n\tlet target;\n\tif (directionOverride === -1 && direction === 1) target = indexesTarget[0] - 1;\n\telse if (directionOverride === 1 && direction === -1) target = indexesTarget[indexesTarget.length - 1] - positionOffset + 1;\n\telse target = direction === -1 ? indexesTarget[0] : indexesTarget[indexesTarget.length - 1] - positionOffset;\n\trows.splice(target, 0, ...rowsExtracted);\n\treturn rows;\n}\n\n//#endregion\n//#region src/utils/query.ts\n/**\n* Checks if the given object is a `CellSelection` instance.\n*\n* @internal\n*/\nfunction isCellSelection(value) {\n\treturn value instanceof CellSelection;\n}\n/**\n* Find the closest table node for a given position.\n*\n* @public\n*/\nfunction findTable($pos) {\n\treturn findParentNode((node) => node.type.spec.tableRole === \"table\", $pos);\n}\n/**\n* Try to find the anchor and head cell in the same table by using the given\n* anchor and head as hit points, or fallback to the selection's anchor and\n* head.\n*\n* @public\n*/\nfunction findCellRange(selection, anchorHit, headHit) {\n\tvar _ref, _ref2;\n\tif (anchorHit == null && headHit == null && isCellSelection(selection)) return [selection.$anchorCell, selection.$headCell];\n\tconst anchor = (_ref = anchorHit !== null && anchorHit !== void 0 ? anchorHit : headHit) !== null && _ref !== void 0 ? _ref : selection.anchor;\n\tconst head = (_ref2 = headHit !== null && headHit !== void 0 ? headHit : anchorHit) !== null && _ref2 !== void 0 ? _ref2 : selection.head;\n\tconst doc = selection.$head.doc;\n\tconst $anchorCell = findCellPos(doc, anchor);\n\tconst $headCell = findCellPos(doc, head);\n\tif ($anchorCell && $headCell && inSameTable($anchorCell, $headCell)) return [$anchorCell, $headCell];\n\treturn null;\n}\n/**\n* Try to find a resolved pos of a cell by using the given pos as a hit point.\n*\n* @public\n*/\nfunction findCellPos(doc, pos) {\n\tconst $pos = doc.resolve(pos);\n\treturn cellAround($pos) || cellNear($pos);\n}\n/**\n* Find the closest parent node that satisfies the predicate.\n*\n* @internal\n*/\nfunction findParentNode(predicate, $pos) {\n\tfor (let depth = $pos.depth; depth >= 0; depth -= 1) {\n\t\tconst node = $pos.node(depth);\n\t\tif (predicate(node)) return {\n\t\t\tnode,\n\t\t\tpos: depth === 0 ? 0 : $pos.before(depth),\n\t\t\tstart: $pos.start(depth),\n\t\t\tdepth\n\t\t};\n\t}\n\treturn null;\n}\n\n//#endregion\n//#region src/utils/get-cells.ts\n/**\n* Returns an array of cells in a column at the specified column index.\n*\n* @internal\n*/\nfunction getCellsInColumn(columnIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (columnIndex < 0 || columnIndex > map.width - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: columnIndex,\n\t\tright: columnIndex + 1,\n\t\ttop: 0,\n\t\tbottom: map.height\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n/**\n* Returns an array of cells in a row at the specified row index.\n*\n* @internal\n*/\nfunction getCellsInRow(rowIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (rowIndex < 0 || rowIndex > map.height - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: 0,\n\t\tright: map.width,\n\t\ttop: rowIndex,\n\t\tbottom: rowIndex + 1\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n\n//#endregion\n//#region src/utils/selection-range.ts\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* column at index `columnIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-column.ts#editor/editor-tables/src/utils/get-selection-range-in-column.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInColumn(tr, startColIndex, endColIndex = startColIndex) {\n\tlet startIndex = startColIndex;\n\tlet endIndex = endColIndex;\n\tfor (let i = startColIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startColIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInColumn(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedColumnCells = getCellsInColumn(startIndex, tr.selection);\n\tconst firstRowCells = getCellsInRow(0, tr.selection);\n\tif (!firstSelectedColumnCells || !firstRowCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst columnCells = getCellsInColumn(i, tr.selection);\n\t\tif (columnCells && columnCells.length > 0) {\n\t\t\tfor (let j = firstRowCells.length - 1; j >= 0; j--) if (firstRowCells[j].pos === columnCells[0].pos) {\n\t\t\t\theadCell = columnCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* row at index `rowIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-row.ts#editor/editor-tables/src/utils/get-selection-range-in-row.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInRow(tr, startRowIndex, endRowIndex = startRowIndex) {\n\tlet startIndex = startRowIndex;\n\tlet endIndex = endRowIndex;\n\tfor (let i = startRowIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startRowIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInRow(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedRowCells = getCellsInRow(startIndex, tr.selection);\n\tconst firstColumnCells = getCellsInColumn(0, tr.selection);\n\tif (!firstSelectedRowCells || !firstColumnCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedRowCells[firstSelectedRowCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst rowCells = getCellsInRow(i, tr.selection);\n\t\tif (rowCells && rowCells.length > 0) {\n\t\t\tfor (let j = firstColumnCells.length - 1; j >= 0; j--) if (firstColumnCells[j].pos === rowCells[0].pos) {\n\t\t\t\theadCell = rowCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n\n//#endregion\n//#region src/utils/transpose.ts\n/**\n* Transposes a 2D array by flipping columns to rows.\n*\n* Transposition is a familiar algebra concept where the matrix is flipped\n* along its diagonal. For more details, see:\n* https://en.wikipedia.org/wiki/Transpose\n*\n* @example\n* ```javascript\n* const arr = [\n* ['a1', 'a2', 'a3'],\n* ['b1', 'b2', 'b3'],\n* ['c1', 'c2', 'c3'],\n* ['d1', 'd2', 'd3'],\n* ];\n*\n* const result = transpose(arr);\n* result === [\n* ['a1', 'b1', 'c1', 'd1'],\n* ['a2', 'b2', 'c2', 'd2'],\n* ['a3', 'b3', 'c3', 'd3'],\n* ]\n* ```\n*/\nfunction transpose(array) {\n\treturn array[0].map((_, i) => {\n\t\treturn array.map((column) => column[i]);\n\t});\n}\n\n//#endregion\n//#region src/utils/move-column.ts\n/**\n* Move a column from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveColumn(moveColParams) {\n\tvar _getSelectionRangeInC, _getSelectionRangeInC2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveColParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginColumn = (_getSelectionRangeInC = getSelectionRangeInColumn(tr, originIndex)) === null || _getSelectionRangeInC === void 0 ? void 0 : _getSelectionRangeInC.indexes;\n\tconst indexesTargetColumn = (_getSelectionRangeInC2 = getSelectionRangeInColumn(tr, targetIndex)) === null || _getSelectionRangeInC2 === void 0 ? void 0 : _getSelectionRangeInC2.indexes;\n\tif (!indexesOriginColumn || !indexesTargetColumn) return false;\n\tif (indexesOriginColumn.includes(targetIndex)) return false;\n\tconst newTable = moveTableColumn$1(table.node, indexesOriginColumn, indexesTargetColumn, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(map.height - 1, index, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(0, index, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.colSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableColumn$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = transpose(convertTableNodeToArrayOfRows(table));\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\trows = transpose(rows);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/utils/move-row.ts\n/**\n* Move a row from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveRow(moveRowParams) {\n\tvar _getSelectionRangeInR, _getSelectionRangeInR2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveRowParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginRow = (_getSelectionRangeInR = getSelectionRangeInRow(tr, originIndex)) === null || _getSelectionRangeInR === void 0 ? void 0 : _getSelectionRangeInR.indexes;\n\tconst indexesTargetRow = (_getSelectionRangeInR2 = getSelectionRangeInRow(tr, targetIndex)) === null || _getSelectionRangeInR2 === void 0 ? void 0 : _getSelectionRangeInR2.indexes;\n\tif (!indexesOriginRow || !indexesTargetRow) return false;\n\tif (indexesOriginRow.includes(targetIndex)) return false;\n\tconst newTable = moveTableRow$1(table.node, indexesOriginRow, indexesTargetRow, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(index, map.width - 1, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(index, 0, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.rowSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableRow$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = convertTableNodeToArrayOfRows(table);\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/commands.ts\n/**\n* Helper to get the selected rectangle in a table, if any. Adds table\n* map, table node, and table start offset to the object for\n* convenience.\n*\n* @public\n*/\nfunction selectedRect(state) {\n\tconst sel = state.selection;\n\tconst $pos = selectionCell(state);\n\tconst table = $pos.node(-1);\n\tconst tableStart = $pos.start(-1);\n\tconst map = TableMap.get(table);\n\treturn {\n\t\t...sel instanceof CellSelection ? map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart) : map.findCell($pos.pos - tableStart),\n\t\ttableStart,\n\t\tmap,\n\t\ttable\n\t};\n}\n/**\n* Add a column at the given position in a table.\n*\n* @public\n*/\nfunction addColumn(tr, { map, tableStart, table }, col) {\n\tlet refColumn = col > 0 ? -1 : 0;\n\tif (columnIsHeader(map, table, col + refColumn)) refColumn = col == 0 || col == map.width ? null : 0;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = row * map.width + col;\n\t\tif (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n\t\t\tconst pos = map.map[index];\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tableStart + pos), null, addColSpan(cell.attrs, col - map.colCount(pos)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t} else {\n\t\t\tconst type = refColumn == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map.map[index + refColumn]).type;\n\t\t\tconst pos = map.positionAt(row, col, table);\n\t\t\ttr.insert(tr.mapping.map(tableStart + pos), type.createAndFill());\n\t\t}\n\t}\n\treturn tr;\n}\n/**\n* Command to add a column before the column with the selection.\n*\n* @public\n*/\nfunction addColumnBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.left));\n\t}\n\treturn true;\n}\n/**\n* Command to add a column after the column with the selection.\n*\n* @public\n*/\nfunction addColumnAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.right));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeColumn(tr, { map, table, tableStart }, col) {\n\tconst mapStart = tr.mapping.maps.length;\n\tfor (let row = 0; row < map.height;) {\n\t\tconst index = row * map.width + col;\n\t\tconst pos = map.map[index];\n\t\tconst cell = table.nodeAt(pos);\n\t\tconst attrs = cell.attrs;\n\t\tif (col > 0 && map.map[index - 1] == pos || col < map.width - 1 && map.map[index + 1] == pos) tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null, removeColSpan(attrs, col - map.colCount(pos)));\n\t\telse {\n\t\t\tconst start = tr.mapping.slice(mapStart).map(tableStart + pos);\n\t\t\ttr.delete(start, start + cell.nodeSize);\n\t\t}\n\t\trow += attrs.rowspan;\n\t}\n}\n/**\n* Command function that removes the selected columns from a table.\n*\n* @public\n*/\nfunction deleteColumn(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tconst tr = state.tr;\n\t\tif (rect.left == 0 && rect.right == rect.map.width) return false;\n\t\tfor (let i = rect.right - 1;; i--) {\n\t\t\tremoveColumn(tr, rect, i);\n\t\t\tif (i == rect.left) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction rowIsHeader(map, table, row) {\n\tvar _table$nodeAt;\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let col = 0; col < map.width; col++) if (((_table$nodeAt = table.nodeAt(map.map[col + row * map.width])) === null || _table$nodeAt === void 0 ? void 0 : _table$nodeAt.type) != headerCell) return false;\n\treturn true;\n}\n/**\n* @public\n*/\nfunction addRow(tr, { map, tableStart, table }, row) {\n\tlet rowPos = tableStart;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst cells = [];\n\tlet refRow = row > 0 ? -1 : 0;\n\tif (rowIsHeader(map, table, row + refRow)) refRow = row == 0 || row == map.height ? null : 0;\n\tfor (let col = 0, index = map.width * row; col < map.width; col++, index++) if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) {\n\t\tconst pos = map.map[index];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\ttr.setNodeMarkup(tableStart + pos, null, {\n\t\t\t...attrs,\n\t\t\trowspan: attrs.rowspan + 1\n\t\t});\n\t\tcol += attrs.colspan - 1;\n\t} else {\n\t\tvar _table$nodeAt2;\n\t\tconst type = refRow == null ? tableNodeTypes(table.type.schema).cell : (_table$nodeAt2 = table.nodeAt(map.map[index + refRow * map.width])) === null || _table$nodeAt2 === void 0 ? void 0 : _table$nodeAt2.type;\n\t\tconst node = type === null || type === void 0 ? void 0 : type.createAndFill();\n\t\tif (node) cells.push(node);\n\t}\n\ttr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n\treturn tr;\n}\n/**\n* Add a table row before the selection.\n*\n* @public\n*/\nfunction addRowBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.top));\n\t}\n\treturn true;\n}\n/**\n* Add a table row after the selection.\n*\n* @public\n*/\nfunction addRowAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.bottom));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeRow(tr, { map, table, tableStart }, row) {\n\tlet rowPos = 0;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst nextRow = rowPos + table.child(row).nodeSize;\n\tconst mapFrom = tr.mapping.maps.length;\n\ttr.delete(rowPos + tableStart, nextRow + tableStart);\n\tconst seen = /* @__PURE__ */ new Set();\n\tfor (let col = 0, index = row * map.width; col < map.width; col++, index++) {\n\t\tconst pos = map.map[index];\n\t\tif (seen.has(pos)) continue;\n\t\tseen.add(pos);\n\t\tif (row > 0 && pos == map.map[index - map.width]) {\n\t\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, {\n\t\t\t\t...attrs,\n\t\t\t\trowspan: attrs.rowspan - 1\n\t\t\t});\n\t\t\tcol += attrs.colspan - 1;\n\t\t} else if (row < map.height && pos == map.map[index + map.width]) {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst attrs = cell.attrs;\n\t\t\tconst copy = cell.type.create({\n\t\t\t\t...attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - 1\n\t\t\t}, cell.content);\n\t\t\tconst newPos = map.positionAt(row + 1, col, table);\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n\t\t\tcol += attrs.colspan - 1;\n\t\t}\n\t}\n}\n/**\n* Remove the selected rows from a table.\n*\n* @public\n*/\nfunction deleteRow(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\tif (rect.top == 0 && rect.bottom == rect.map.height) return false;\n\t\tfor (let i = rect.bottom - 1;; i--) {\n\t\t\tremoveRow(tr, rect, i);\n\t\t\tif (i == rect.top) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(rect.table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\nfunction isEmpty(cell) {\n\tconst c = cell.content;\n\treturn c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0;\n}\nfunction cellsOverlapRectangle({ width, height, map }, rect) {\n\tlet indexTop = rect.top * width + rect.left, indexLeft = indexTop;\n\tlet indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1);\n\tfor (let i = rect.top; i < rect.bottom; i++) {\n\t\tif (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] || rect.right < width && map[indexRight] == map[indexRight + 1]) return true;\n\t\tindexLeft += width;\n\t\tindexRight += width;\n\t}\n\tfor (let i = rect.left; i < rect.right; i++) {\n\t\tif (rect.top > 0 && map[indexTop] == map[indexTop - width] || rect.bottom < height && map[indexBottom] == map[indexBottom + width]) return true;\n\t\tindexTop++;\n\t\tindexBottom++;\n\t}\n\treturn false;\n}\n/**\n* Merge the selected cells into a single cell. Only available when\n* the selected cells' outline forms a rectangle.\n*\n* @public\n*/\nfunction mergeCells(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) return false;\n\tconst rect = selectedRect(state), { map } = rect;\n\tif (cellsOverlapRectangle(map, rect)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst seen = {};\n\t\tlet content = Fragment.empty;\n\t\tlet mergedPos;\n\t\tlet mergedCell;\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst cellPos = map.map[row * map.width + col];\n\t\t\tconst cell = rect.table.nodeAt(cellPos);\n\t\t\tif (seen[cellPos] || !cell) continue;\n\t\t\tseen[cellPos] = true;\n\t\t\tif (mergedPos == null) {\n\t\t\t\tmergedPos = cellPos;\n\t\t\t\tmergedCell = cell;\n\t\t\t} else {\n\t\t\t\tif (!isEmpty(cell)) content = content.append(cell.content);\n\t\t\t\tconst mapped = tr.mapping.map(cellPos + rect.tableStart);\n\t\t\t\ttr.delete(mapped, mapped + cell.nodeSize);\n\t\t\t}\n\t\t}\n\t\tif (mergedPos == null || mergedCell == null) return true;\n\t\ttr.setNodeMarkup(mergedPos + rect.tableStart, null, {\n\t\t\t...addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, rect.right - rect.left - mergedCell.attrs.colspan),\n\t\t\trowspan: rect.bottom - rect.top\n\t\t});\n\t\tif (content.size > 0) {\n\t\t\tconst end = mergedPos + 1 + mergedCell.content.size;\n\t\t\tconst start = isEmpty(mergedCell) ? mergedPos + 1 : end;\n\t\t\ttr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n\t\t}\n\t\ttr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)));\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells. Use the first cell type for the new cells.\n*\n* @public\n*/\nfunction splitCell(state, dispatch) {\n\tconst nodeTypes = tableNodeTypes(state.schema);\n\treturn splitCellWithType(({ node }) => {\n\t\treturn nodeTypes[node.type.spec.tableRole];\n\t})(state, dispatch);\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells with the cell type (th, td) returned by getType function.\n*\n* @public\n*/\nfunction splitCellWithType(getCellType) {\n\treturn (state, dispatch) => {\n\t\tconst sel = state.selection;\n\t\tlet cellNode;\n\t\tlet cellPos;\n\t\tif (!(sel instanceof CellSelection)) {\n\t\t\tvar _cellAround;\n\t\t\tcellNode = cellWrapping(sel.$from);\n\t\t\tif (!cellNode) return false;\n\t\t\tcellPos = (_cellAround = cellAround(sel.$from)) === null || _cellAround === void 0 ? void 0 : _cellAround.pos;\n\t\t} else {\n\t\t\tif (sel.$anchorCell.pos != sel.$headCell.pos) return false;\n\t\t\tcellNode = sel.$anchorCell.nodeAfter;\n\t\t\tcellPos = sel.$anchorCell.pos;\n\t\t}\n\t\tif (cellNode == null || cellPos == null) return false;\n\t\tif (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) return false;\n\t\tif (dispatch) {\n\t\t\tlet baseAttrs = cellNode.attrs;\n\t\t\tconst attrs = [];\n\t\t\tconst colwidth = baseAttrs.colwidth;\n\t\t\tif (baseAttrs.rowspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\trowspan: 1\n\t\t\t};\n\t\t\tif (baseAttrs.colspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolspan: 1\n\t\t\t};\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tfor (let i = 0; i < rect.right - rect.left; i++) attrs.push(colwidth ? {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolwidth: colwidth && colwidth[i] ? [colwidth[i]] : null\n\t\t\t} : baseAttrs);\n\t\t\tlet lastCell;\n\t\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\t\tlet pos = rect.map.positionAt(row, rect.left, rect.table);\n\t\t\t\tif (row == rect.top) pos += cellNode.nodeSize;\n\t\t\t\tfor (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n\t\t\t\t\tif (col == rect.left && row == rect.top) continue;\n\t\t\t\t\ttr.insert(lastCell = tr.mapping.map(pos + rect.tableStart, 1), getCellType({\n\t\t\t\t\t\tnode: cellNode,\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tcol\n\t\t\t\t\t}).createAndFill(attrs[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t\ttr.setNodeMarkup(cellPos, getCellType({\n\t\t\t\tnode: cellNode,\n\t\t\t\trow: rect.top,\n\t\t\t\tcol: rect.left\n\t\t\t}), attrs[0]);\n\t\t\tif (sel instanceof CellSelection) tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos), lastCell ? tr.doc.resolve(lastCell) : void 0));\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Returns a command that sets the given attribute to the given value,\n* and is only available when the currently selected cell doesn't\n* already have that attribute set to that value.\n*\n* @public\n*/\nfunction setCellAttr(name, value) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst $cell = selectionCell(state);\n\t\tif ($cell.nodeAfter.attrs[name] === value) return false;\n\t\tif (dispatch) {\n\t\t\tconst tr = state.tr;\n\t\t\tif (state.selection instanceof CellSelection) state.selection.forEachCell((node, pos) => {\n\t\t\t\tif (node.attrs[name] !== value) tr.setNodeMarkup(pos, null, {\n\t\t\t\t\t...node.attrs,\n\t\t\t\t\t[name]: value\n\t\t\t\t});\n\t\t\t});\n\t\t\telse tr.setNodeMarkup($cell.pos, null, {\n\t\t\t\t...$cell.nodeAfter.attrs,\n\t\t\t\t[name]: value\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction deprecated_toggleHeader(type) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst cells = rect.map.cellsInRect(type == \"column\" ? {\n\t\t\t\tleft: rect.left,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.right,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: rect.top,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: rect.bottom\n\t\t\t} : rect);\n\t\t\tconst nodes = cells.map((pos) => rect.table.nodeAt(pos));\n\t\t\tfor (let i = 0; i < cells.length; i++) if (nodes[i].type == types.header_cell) tr.setNodeMarkup(rect.tableStart + cells[i], types.cell, nodes[i].attrs);\n\t\t\tif (tr.steps.length === 0) for (let i = 0; i < cells.length; i++) tr.setNodeMarkup(rect.tableStart + cells[i], types.header_cell, nodes[i].attrs);\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction isHeaderEnabledByType(type, rect, types) {\n\tconst cellPositions = rect.map.cellsInRect({\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tright: type == \"row\" ? rect.map.width : 1,\n\t\tbottom: type == \"column\" ? rect.map.height : 1\n\t});\n\tfor (let i = 0; i < cellPositions.length; i++) {\n\t\tconst cell = rect.table.nodeAt(cellPositions[i]);\n\t\tif (cell && cell.type !== types.header_cell) return false;\n\t}\n\treturn true;\n}\n/**\n* Toggles between row/column header and normal cells (Only applies to first row/column).\n* For deprecated behavior pass `useDeprecatedLogic` in options with true.\n*\n* @public\n*/\nfunction toggleHeader(type, options) {\n\toptions = options || { useDeprecatedLogic: false };\n\tif (options.useDeprecatedLogic) return deprecated_toggleHeader(type);\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst isHeaderRowEnabled = isHeaderEnabledByType(\"row\", rect, types);\n\t\t\tconst isHeaderColumnEnabled = isHeaderEnabledByType(\"column\", rect, types);\n\t\t\tconst selectionStartsAt = (type === \"column\" ? isHeaderRowEnabled : type === \"row\" ? isHeaderColumnEnabled : false) ? 1 : 0;\n\t\t\tconst cellsRect = type == \"column\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: selectionStartsAt,\n\t\t\t\tright: 1,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: selectionStartsAt,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: 1\n\t\t\t} : rect;\n\t\t\tconst newType = type == \"column\" ? isHeaderColumnEnabled ? types.cell : types.header_cell : type == \"row\" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell;\n\t\t\trect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {\n\t\t\t\tconst cellPos = relativeCellPos + rect.tableStart;\n\t\t\t\tconst cell = tr.doc.nodeAt(cellPos);\n\t\t\t\tif (cell) tr.setNodeMarkup(cellPos, newType, cell.attrs);\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Toggles whether the selected row contains header cells.\n*\n* @public\n*/\nconst toggleHeaderRow = toggleHeader(\"row\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected column contains header cells.\n*\n* @public\n*/\nconst toggleHeaderColumn = toggleHeader(\"column\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected cells are header cells.\n*\n* @public\n*/\nconst toggleHeaderCell = toggleHeader(\"cell\", { useDeprecatedLogic: true });\nfunction findNextCell($cell, dir) {\n\tif (dir < 0) {\n\t\tconst before = $cell.nodeBefore;\n\t\tif (before) return $cell.pos - before.nodeSize;\n\t\tfor (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {\n\t\t\tconst rowNode = $cell.node(-1).child(row);\n\t\t\tconst lastChild = rowNode.lastChild;\n\t\t\tif (lastChild) return rowEnd - 1 - lastChild.nodeSize;\n\t\t\trowEnd -= rowNode.nodeSize;\n\t\t}\n\t} else {\n\t\tif ($cell.index() < $cell.parent.childCount - 1) return $cell.pos + $cell.nodeAfter.nodeSize;\n\t\tconst table = $cell.node(-1);\n\t\tfor (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) {\n\t\t\tconst rowNode = table.child(row);\n\t\t\tif (rowNode.childCount) return rowStart + 1;\n\t\t\trowStart += rowNode.nodeSize;\n\t\t}\n\t}\n\treturn null;\n}\n/**\n* Returns a command for selecting the next (direction=1) or previous\n* (direction=-1) cell in a table.\n*\n* @public\n*/\nfunction goToNextCell(direction) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst cell = findNextCell(selectionCell(state), direction);\n\t\tif (cell == null) return false;\n\t\tif (dispatch) {\n\t\t\tconst $cell = state.doc.resolve(cell);\n\t\t\tdispatch(state.tr.setSelection(TextSelection.between($cell, moveCellForward($cell))).scrollIntoView());\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Deletes the table around the selection, if any.\n*\n* @public\n*/\nfunction deleteTable(state, dispatch) {\n\tconst $pos = state.selection.$anchor;\n\tfor (let d = $pos.depth; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"table\") {\n\t\tif (dispatch) dispatch(state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView());\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Deletes the content of the selected cells, if they are not empty.\n*\n* @public\n*/\nfunction deleteCellSelection(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;\n\t\tsel.forEachCell((cell, pos) => {\n\t\t\tif (!cell.content.eq(baseContent)) tr.replace(tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1), new Slice(baseContent, 0, 0));\n\t\t});\n\t\tif (tr.docChanged) dispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Move a table row from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableRow(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveRow({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n/**\n* Move a table column from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableColumn(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveColumn({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n\n//#endregion\n//#region src/copypaste.ts\n/**\n* Get a rectangular area of cells from a slice, or null if the outer\n* nodes of the slice aren't table cells or rows.\n*\n* @internal\n*/\nfunction pastedCells(slice) {\n\tif (slice.size === 0) return null;\n\tlet { content, openStart, openEnd } = slice;\n\twhile (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == \"table\")) {\n\t\topenStart--;\n\t\topenEnd--;\n\t\tcontent = content.child(0).content;\n\t}\n\tconst first = content.child(0);\n\tconst role = first.type.spec.tableRole;\n\tconst schema = first.type.schema, rows = [];\n\tif (role == \"row\") for (let i = 0; i < content.childCount; i++) {\n\t\tlet cells = content.child(i).content;\n\t\tconst left = i ? 0 : Math.max(0, openStart - 1);\n\t\tconst right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);\n\t\tif (left || right) cells = fitSlice(tableNodeTypes(schema).row, new Slice(cells, left, right)).content;\n\t\trows.push(cells);\n\t}\n\telse if (role == \"cell\" || role == \"header_cell\") rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema).row, new Slice(content, openStart, openEnd)).content : content);\n\telse return null;\n\treturn ensureRectangular(schema, rows);\n}\nfunction ensureRectangular(schema, rows) {\n\tconst widths = [];\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tconst row = rows[i];\n\t\tfor (let j = row.childCount - 1; j >= 0; j--) {\n\t\t\tconst { rowspan, colspan } = row.child(j).attrs;\n\t\t\tfor (let r = i; r < i + rowspan; r++) widths[r] = (widths[r] || 0) + colspan;\n\t\t}\n\t}\n\tlet width = 0;\n\tfor (let r = 0; r < widths.length; r++) width = Math.max(width, widths[r]);\n\tfor (let r = 0; r < widths.length; r++) {\n\t\tif (r >= rows.length) rows.push(Fragment.empty);\n\t\tif (widths[r] < width) {\n\t\t\tconst empty = tableNodeTypes(schema).cell.createAndFill();\n\t\t\tconst cells = [];\n\t\t\tfor (let i = widths[r]; i < width; i++) cells.push(empty);\n\t\t\trows[r] = rows[r].append(Fragment.from(cells));\n\t\t}\n\t}\n\treturn {\n\t\theight: rows.length,\n\t\twidth,\n\t\trows\n\t};\n}\nfunction fitSlice(nodeType, slice) {\n\tconst node = nodeType.createAndFill();\n\treturn new Transform(node).replace(0, node.content.size, slice).doc;\n}\n/**\n* Clip or extend (repeat) the given set of cells to cover the given\n* width and height. Will clip rowspan/colspan cells at the edges when\n* they stick out.\n*\n* @internal\n*/\nfunction clipCells({ width, height, rows }, newWidth, newHeight) {\n\tif (width != newWidth) {\n\t\tconst added = [];\n\t\tconst newRows = [];\n\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\tconst frag = rows[row], cells = [];\n\t\t\tfor (let col = added[row] || 0, i = 0; col < newWidth; i++) {\n\t\t\t\tlet cell = frag.child(i % frag.childCount);\n\t\t\t\tif (col + cell.attrs.colspan > newWidth) cell = cell.type.createChecked(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t\tcol += cell.attrs.colspan;\n\t\t\t\tfor (let j = 1; j < cell.attrs.rowspan; j++) added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;\n\t\t\t}\n\t\t\tnewRows.push(Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\twidth = newWidth;\n\t}\n\tif (height != newHeight) {\n\t\tconst newRows = [];\n\t\tfor (let row = 0, i = 0; row < newHeight; row++, i++) {\n\t\t\tconst cells = [], source = rows[i % height];\n\t\t\tfor (let j = 0; j < source.childCount; j++) {\n\t\t\t\tlet cell = source.child(j);\n\t\t\t\tif (row + cell.attrs.rowspan > newHeight) cell = cell.type.create({\n\t\t\t\t\t...cell.attrs,\n\t\t\t\t\trowspan: Math.max(1, newHeight - cell.attrs.rowspan)\n\t\t\t\t}, cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t}\n\t\t\tnewRows.push(Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\theight = newHeight;\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\trows\n\t};\n}\nfunction growTable(tr, map, table, start, width, height, mapFrom) {\n\tconst schema = tr.doc.type.schema;\n\tconst types = tableNodeTypes(schema);\n\tlet empty;\n\tlet emptyHead;\n\tif (width > map.width) for (let row = 0, rowEnd = 0; row < map.height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\trowEnd += rowNode.nodeSize;\n\t\tconst cells = [];\n\t\tlet add;\n\t\tif (rowNode.lastChild == null || rowNode.lastChild.type == types.cell) add = empty || (empty = types.cell.createAndFill());\n\t\telse add = emptyHead || (emptyHead = types.header_cell.createAndFill());\n\t\tfor (let i = map.width; i < width; i++) cells.push(add);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);\n\t}\n\tif (height > map.height) {\n\t\tconst cells = [];\n\t\tfor (let i = 0, start$1 = (map.height - 1) * map.width; i < Math.max(map.width, width); i++) {\n\t\t\tconst header = i >= map.width ? false : table.nodeAt(map.map[start$1 + i]).type == types.header_cell;\n\t\t\tcells.push(header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill()));\n\t\t}\n\t\tconst emptyRow = types.row.create(null, Fragment.from(cells)), rows = [];\n\t\tfor (let i = map.height; i < height; i++) rows.push(emptyRow);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);\n\t}\n\treturn !!(empty || emptyHead);\n}\nfunction isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {\n\tif (top == 0 || top == map.height) return false;\n\tlet found = false;\n\tfor (let col = left; col < right; col++) {\n\t\tconst index = top * map.width + col, pos = map.map[index];\n\t\tif (map.map[index - map.width] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst { top: cellTop, left: cellLeft } = map.findCell(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: top - cellTop\n\t\t\t});\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)), cell.type.createAndFill({\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cellTop + cell.attrs.rowspan - top\n\t\t\t}));\n\t\t\tcol += cell.attrs.colspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\nfunction isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {\n\tif (left == 0 || left == map.width) return false;\n\tlet found = false;\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst index = row * map.width + left, pos = map.map[index];\n\t\tif (map.map[index - 1] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst cellLeft = map.colCount(pos);\n\t\t\tconst updatePos = tr.mapping.slice(mapFrom).map(pos + start);\n\t\t\ttr.setNodeMarkup(updatePos, null, removeColSpan(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft)));\n\t\t\ttr.insert(updatePos + cell.nodeSize, cell.type.createAndFill(removeColSpan(cell.attrs, 0, left - cellLeft)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\n/**\n* Insert the given set of cells (as returned by `pastedCells`) into a\n* table, at the position pointed at by rect.\n*\n* @internal\n*/\nfunction insertCells(state, dispatch, tableStart, rect, cells) {\n\tlet table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc;\n\tif (!table) throw new Error(\"No table found\");\n\tlet map = TableMap.get(table);\n\tconst { top, left } = rect;\n\tconst right = left + cells.width, bottom = top + cells.height;\n\tconst tr = state.tr;\n\tlet mapFrom = 0;\n\tfunction recomp() {\n\t\ttable = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;\n\t\tif (!table) throw new Error(\"No table found\");\n\t\tmap = TableMap.get(table);\n\t\tmapFrom = tr.mapping.maps.length;\n\t}\n\tif (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) recomp();\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst from = map.positionAt(row, left, table), to = map.positionAt(row, right, table);\n\t\ttr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new Slice(cells.rows[row - top], 0, 0));\n\t}\n\trecomp();\n\ttr.setSelection(new CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)), tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))));\n\tdispatch(tr);\n}\n\n//#endregion\n//#region src/input.ts\nconst handleKeyDown = keydownHandler({\n\tArrowLeft: arrow(\"horiz\", -1),\n\tArrowRight: arrow(\"horiz\", 1),\n\tArrowUp: arrow(\"vert\", -1),\n\tArrowDown: arrow(\"vert\", 1),\n\t\"Shift-ArrowLeft\": shiftArrow(\"horiz\", -1),\n\t\"Shift-ArrowRight\": shiftArrow(\"horiz\", 1),\n\t\"Shift-ArrowUp\": shiftArrow(\"vert\", -1),\n\t\"Shift-ArrowDown\": shiftArrow(\"vert\", 1),\n\tBackspace: deleteCellSelection,\n\t\"Mod-Backspace\": deleteCellSelection,\n\tDelete: deleteCellSelection,\n\t\"Mod-Delete\": deleteCellSelection\n});\nfunction maybeSetSelection(state, dispatch, selection) {\n\tif (selection.eq(state.selection)) return false;\n\tif (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView());\n\treturn true;\n}\n/**\n* @internal\n*/\nfunction arrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tif (sel instanceof CellSelection) return maybeSetSelection(state, dispatch, Selection.near(sel.$headCell, dir));\n\t\tif (axis != \"horiz\" && !sel.empty) return false;\n\t\tconst end = atEndOfCell(view, axis, dir);\n\t\tif (end == null) return false;\n\t\tif (axis == \"horiz\") return maybeSetSelection(state, dispatch, Selection.near(state.doc.resolve(sel.head + dir), dir));\n\t\telse {\n\t\t\tconst $cell = state.doc.resolve(end);\n\t\t\tconst $next = nextCell($cell, axis, dir);\n\t\t\tlet newSel;\n\t\t\tif ($next) newSel = Selection.near($next, 1);\n\t\t\telse if (dir < 0) newSel = Selection.near(state.doc.resolve($cell.before(-1)), -1);\n\t\t\telse newSel = Selection.near(state.doc.resolve($cell.after(-1)), 1);\n\t\t\treturn maybeSetSelection(state, dispatch, newSel);\n\t\t}\n\t};\n}\nfunction shiftArrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tlet cellSel;\n\t\tif (sel instanceof CellSelection) cellSel = sel;\n\t\telse {\n\t\t\tconst end = atEndOfCell(view, axis, dir);\n\t\t\tif (end == null) return false;\n\t\t\tcellSel = new CellSelection(state.doc.resolve(end));\n\t\t}\n\t\tconst $head = nextCell(cellSel.$headCell, axis, dir);\n\t\tif (!$head) return false;\n\t\treturn maybeSetSelection(state, dispatch, new CellSelection(cellSel.$anchorCell, $head));\n\t};\n}\nfunction handleTripleClick(view, pos) {\n\tconst doc = view.state.doc, $cell = cellAround(doc.resolve(pos));\n\tif (!$cell) return false;\n\tview.dispatch(view.state.tr.setSelection(new CellSelection($cell)));\n\treturn true;\n}\n/**\n* @public\n*/\nfunction handlePaste(view, _, slice) {\n\tif (!isInTable(view.state)) return false;\n\tlet cells = pastedCells(slice);\n\tconst sel = view.state.selection;\n\tif (sel instanceof CellSelection) {\n\t\tif (!cells) cells = {\n\t\t\twidth: 1,\n\t\t\theight: 1,\n\t\t\trows: [Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))]\n\t\t};\n\t\tconst table = sel.$anchorCell.node(-1);\n\t\tconst start = sel.$anchorCell.start(-1);\n\t\tconst rect = TableMap.get(table).rectBetween(sel.$anchorCell.pos - start, sel.$headCell.pos - start);\n\t\tcells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);\n\t\tinsertCells(view.state, view.dispatch, start, rect, cells);\n\t\treturn true;\n\t} else if (cells) {\n\t\tconst $cell = selectionCell(view.state);\n\t\tconst start = $cell.start(-1);\n\t\tinsertCells(view.state, view.dispatch, start, TableMap.get($cell.node(-1)).findCell($cell.pos - start), cells);\n\t\treturn true;\n\t} else return false;\n}\nfunction handleMouseDown$1(view, startEvent) {\n\tvar _cellUnderMouse;\n\tif (startEvent.button != 0) return;\n\tif (startEvent.ctrlKey || startEvent.metaKey) return;\n\tconst startDOMCell = domInCell(view, startEvent.target);\n\tlet $anchor;\n\tif (startEvent.shiftKey && view.state.selection instanceof CellSelection) {\n\t\tsetCellSelection(view.state.selection.$anchorCell, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround(view.state.selection.$anchor)) != null && ((_cellUnderMouse = cellUnderMouse(view, startEvent)) === null || _cellUnderMouse === void 0 ? void 0 : _cellUnderMouse.pos) != $anchor.pos) {\n\t\tsetCellSelection($anchor, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (!startDOMCell) return;\n\tfunction setCellSelection($anchor$1, event) {\n\t\tlet $head = cellUnderMouse(view, event);\n\t\tconst starting = tableEditingKey.getState(view.state) == null;\n\t\tif (!$head || !inSameTable($anchor$1, $head)) if (starting) $head = $anchor$1;\n\t\telse return;\n\t\tconst selection = new CellSelection($anchor$1, $head);\n\t\tif (starting || !view.state.selection.eq(selection)) {\n\t\t\tconst tr = view.state.tr.setSelection(selection);\n\t\t\tif (starting) tr.setMeta(tableEditingKey, $anchor$1.pos);\n\t\t\tview.dispatch(tr);\n\t\t}\n\t}\n\tfunction stop() {\n\t\tview.root.removeEventListener(\"mouseup\", stop);\n\t\tview.root.removeEventListener(\"dragstart\", stop);\n\t\tview.root.removeEventListener(\"mousemove\", move);\n\t\tif (tableEditingKey.getState(view.state) != null) view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));\n\t}\n\tfunction move(_event) {\n\t\tconst event = _event;\n\t\tconst anchor = tableEditingKey.getState(view.state);\n\t\tlet $anchor$1;\n\t\tif (anchor != null) $anchor$1 = view.state.doc.resolve(anchor);\n\t\telse if (domInCell(view, event.target) != startDOMCell) {\n\t\t\t$anchor$1 = cellUnderMouse(view, startEvent);\n\t\t\tif (!$anchor$1) return stop();\n\t\t}\n\t\tif ($anchor$1) setCellSelection($anchor$1, event);\n\t}\n\tview.root.addEventListener(\"mouseup\", stop);\n\tview.root.addEventListener(\"dragstart\", stop);\n\tview.root.addEventListener(\"mousemove\", move);\n}\nfunction atEndOfCell(view, axis, dir) {\n\tif (!(view.state.selection instanceof TextSelection)) return null;\n\tconst { $head } = view.state.selection;\n\tfor (let d = $head.depth - 1; d >= 0; d--) {\n\t\tconst parent = $head.node(d);\n\t\tif ((dir < 0 ? $head.index(d) : $head.indexAfter(d)) != (dir < 0 ? 0 : parent.childCount)) return null;\n\t\tif (parent.type.spec.tableRole == \"cell\" || parent.type.spec.tableRole == \"header_cell\") {\n\t\t\tconst cellPos = $head.before(d);\n\t\t\tconst dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n\t\t\treturn view.endOfTextblock(dirStr) ? cellPos : null;\n\t\t}\n\t}\n\treturn null;\n}\nfunction domInCell(view, dom) {\n\tfor (; dom && dom != view.dom; dom = dom.parentNode) if (dom.nodeName == \"TD\" || dom.nodeName == \"TH\") return dom;\n\treturn null;\n}\nfunction cellUnderMouse(view, event) {\n\tconst mousePos = view.posAtCoords({\n\t\tleft: event.clientX,\n\t\ttop: event.clientY\n\t});\n\tif (!mousePos) return null;\n\tlet { inside, pos } = mousePos;\n\treturn inside >= 0 && cellAround(view.state.doc.resolve(inside)) || cellAround(view.state.doc.resolve(pos));\n}\n\n//#endregion\n//#region src/tableview.ts\n/**\n* @public\n*/\nvar TableView = class {\n\tconstructor(node, defaultCellMinWidth) {\n\t\tthis.node = node;\n\t\tthis.defaultCellMinWidth = defaultCellMinWidth;\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.className = \"tableWrapper\";\n\t\tthis.table = this.dom.appendChild(document.createElement(\"table\"));\n\t\tthis.table.style.setProperty(\"--default-cell-min-width\", `${defaultCellMinWidth}px`);\n\t\tthis.colgroup = this.table.appendChild(document.createElement(\"colgroup\"));\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, defaultCellMinWidth);\n\t\tthis.contentDOM = this.table.appendChild(document.createElement(\"tbody\"));\n\t}\n\tupdate(node) {\n\t\tif (node.type != this.node.type) return false;\n\t\tthis.node = node;\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, this.defaultCellMinWidth);\n\t\treturn true;\n\t}\n\tignoreMutation(record) {\n\t\treturn record.type == \"attributes\" && (record.target == this.table || this.colgroup.contains(record.target));\n\t}\n};\n/**\n* @public\n*/\nfunction updateColumnsOnResize(node, colgroup, table, defaultCellMinWidth, overrideCol, overrideValue) {\n\tlet totalWidth = 0;\n\tlet fixedWidth = true;\n\tlet nextDOM = colgroup.firstChild;\n\tconst row = node.firstChild;\n\tif (!row) return;\n\tfor (let i = 0, col = 0; i < row.childCount; i++) {\n\t\tconst { colspan, colwidth } = row.child(i).attrs;\n\t\tfor (let j = 0; j < colspan; j++, col++) {\n\t\t\tconst hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j];\n\t\t\tconst cssWidth = hasWidth ? hasWidth + \"px\" : \"\";\n\t\t\ttotalWidth += hasWidth || defaultCellMinWidth;\n\t\t\tif (!hasWidth) fixedWidth = false;\n\t\t\tif (!nextDOM) {\n\t\t\t\tconst col$1 = document.createElement(\"col\");\n\t\t\t\tcol$1.style.width = cssWidth;\n\t\t\t\tcolgroup.appendChild(col$1);\n\t\t\t} else {\n\t\t\t\tif (nextDOM.style.width != cssWidth) nextDOM.style.width = cssWidth;\n\t\t\t\tnextDOM = nextDOM.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\twhile (nextDOM) {\n\t\tvar _nextDOM$parentNode;\n\t\tconst after = nextDOM.nextSibling;\n\t\t(_nextDOM$parentNode = nextDOM.parentNode) === null || _nextDOM$parentNode === void 0 || _nextDOM$parentNode.removeChild(nextDOM);\n\t\tnextDOM = after;\n\t}\n\tif (fixedWidth) {\n\t\ttable.style.width = totalWidth + \"px\";\n\t\ttable.style.minWidth = \"\";\n\t} else {\n\t\ttable.style.width = \"\";\n\t\ttable.style.minWidth = totalWidth + \"px\";\n\t}\n}\n\n//#endregion\n//#region src/columnresizing.ts\n/**\n* @public\n*/\nconst columnResizingPluginKey = new PluginKey(\"tableColumnResizing\");\n/**\n* @public\n*/\nfunction columnResizing({ handleWidth = 5, cellMinWidth = 25, defaultCellMinWidth = 100, View = TableView, lastColumnResizable = true } = {}) {\n\tconst plugin = new Plugin({\n\t\tkey: columnResizingPluginKey,\n\t\tstate: {\n\t\t\tinit(_, state) {\n\t\t\t\tvar _plugin$spec;\n\t\t\t\tconst nodeViews = (_plugin$spec = plugin.spec) === null || _plugin$spec === void 0 || (_plugin$spec = _plugin$spec.props) === null || _plugin$spec === void 0 ? void 0 : _plugin$spec.nodeViews;\n\t\t\t\tconst tableName = tableNodeTypes(state.schema).table.name;\n\t\t\t\tif (View && nodeViews) nodeViews[tableName] = (node, view) => {\n\t\t\t\t\treturn new View(node, defaultCellMinWidth, view);\n\t\t\t\t};\n\t\t\t\treturn new ResizeState(-1, false);\n\t\t\t},\n\t\t\tapply(tr, prev) {\n\t\t\t\treturn prev.apply(tr);\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tattributes: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\treturn pluginState && pluginState.activeHandle > -1 ? { class: \"resize-cursor\" } : {};\n\t\t\t},\n\t\t\thandleDOMEvents: {\n\t\t\t\tmousemove: (view, event) => {\n\t\t\t\t\thandleMouseMove(view, event, handleWidth, lastColumnResizable);\n\t\t\t\t},\n\t\t\t\tmouseleave: (view) => {\n\t\t\t\t\thandleMouseLeave(view);\n\t\t\t\t},\n\t\t\t\tmousedown: (view, event) => {\n\t\t\t\t\thandleMouseDown(view, event, cellMinWidth, defaultCellMinWidth);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdecorations: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\tif (pluginState && pluginState.activeHandle > -1) return handleDecorations(state, pluginState.activeHandle);\n\t\t\t},\n\t\t\tnodeViews: {}\n\t\t}\n\t});\n\treturn plugin;\n}\n/**\n* @public\n*/\nvar ResizeState = class ResizeState {\n\tconstructor(activeHandle, dragging) {\n\t\tthis.activeHandle = activeHandle;\n\t\tthis.dragging = dragging;\n\t}\n\tapply(tr) {\n\t\tconst state = this;\n\t\tconst action = tr.getMeta(columnResizingPluginKey);\n\t\tif (action && action.setHandle != null) return new ResizeState(action.setHandle, false);\n\t\tif (action && action.setDragging !== void 0) return new ResizeState(state.activeHandle, action.setDragging);\n\t\tif (state.activeHandle > -1 && tr.docChanged) {\n\t\t\tlet handle = tr.mapping.map(state.activeHandle, -1);\n\t\t\tif (!pointsAtCell(tr.doc.resolve(handle))) handle = -1;\n\t\t\treturn new ResizeState(handle, state.dragging);\n\t\t}\n\t\treturn state;\n\t}\n};\nfunction handleMouseMove(view, event, handleWidth, lastColumnResizable) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState) return;\n\tif (!pluginState.dragging) {\n\t\tconst target = domCellAround(event.target);\n\t\tlet cell = -1;\n\t\tif (target) {\n\t\t\tconst { left, right } = target.getBoundingClientRect();\n\t\t\tif (event.clientX - left <= handleWidth) cell = edgeCell(view, event, \"left\", handleWidth);\n\t\t\telse if (right - event.clientX <= handleWidth) cell = edgeCell(view, event, \"right\", handleWidth);\n\t\t}\n\t\tif (cell != pluginState.activeHandle) {\n\t\t\tif (!lastColumnResizable && cell !== -1) {\n\t\t\t\tconst $cell = view.state.doc.resolve(cell);\n\t\t\t\tconst table = $cell.node(-1);\n\t\t\t\tconst map = TableMap.get(table);\n\t\t\t\tconst tableStart = $cell.start(-1);\n\t\t\t\tif (map.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1 == map.width - 1) return;\n\t\t\t}\n\t\t\tupdateHandle(view, cell);\n\t\t}\n\t}\n}\nfunction handleMouseLeave(view) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging) updateHandle(view, -1);\n}\nfunction handleMouseDown(view, event, cellMinWidth, defaultCellMinWidth) {\n\tvar _view$dom$ownerDocume;\n\tif (!view.editable) return false;\n\tconst win = (_view$dom$ownerDocume = view.dom.ownerDocument.defaultView) !== null && _view$dom$ownerDocume !== void 0 ? _view$dom$ownerDocume : window;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging) return false;\n\tconst cell = view.state.doc.nodeAt(pluginState.activeHandle);\n\tconst width = currentColWidth(view, pluginState.activeHandle, cell.attrs);\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: {\n\t\tstartX: event.clientX,\n\t\tstartWidth: width\n\t} }));\n\tfunction finish(event$1) {\n\t\twin.removeEventListener(\"mouseup\", finish);\n\t\twin.removeEventListener(\"mousemove\", move);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (pluginState$1 === null || pluginState$1 === void 0 ? void 0 : pluginState$1.dragging) {\n\t\t\tupdateColumnWidth(view, pluginState$1.activeHandle, draggedWidth(pluginState$1.dragging, event$1, cellMinWidth));\n\t\t\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null }));\n\t\t}\n\t}\n\tfunction move(event$1) {\n\t\tif (!event$1.which) return finish(event$1);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (!pluginState$1) return;\n\t\tif (pluginState$1.dragging) {\n\t\t\tconst dragged = draggedWidth(pluginState$1.dragging, event$1, cellMinWidth);\n\t\t\tdisplayColumnWidth(view, pluginState$1.activeHandle, dragged, defaultCellMinWidth);\n\t\t}\n\t}\n\tdisplayColumnWidth(view, pluginState.activeHandle, width, defaultCellMinWidth);\n\twin.addEventListener(\"mouseup\", finish);\n\twin.addEventListener(\"mousemove\", move);\n\tevent.preventDefault();\n\treturn true;\n}\nfunction currentColWidth(view, cellPos, { colspan, colwidth }) {\n\tconst width = colwidth && colwidth[colwidth.length - 1];\n\tif (width) return width;\n\tconst dom = view.domAtPos(cellPos);\n\tlet domWidth = dom.node.childNodes[dom.offset].offsetWidth, parts = colspan;\n\tif (colwidth) {\n\t\tfor (let i = 0; i < colspan; i++) if (colwidth[i]) {\n\t\t\tdomWidth -= colwidth[i];\n\t\t\tparts--;\n\t\t}\n\t}\n\treturn domWidth / parts;\n}\nfunction domCellAround(target) {\n\twhile (target && target.nodeName != \"TD\" && target.nodeName != \"TH\") target = target.classList && target.classList.contains(\"ProseMirror\") ? null : target.parentNode;\n\treturn target;\n}\nfunction edgeCell(view, event, side, handleWidth) {\n\tconst offset = side == \"right\" ? -handleWidth : handleWidth;\n\tconst found = view.posAtCoords({\n\t\tleft: event.clientX + offset,\n\t\ttop: event.clientY\n\t});\n\tif (!found) return -1;\n\tconst { pos } = found;\n\tconst $cell = cellAround(view.state.doc.resolve(pos));\n\tif (!$cell) return -1;\n\tif (side == \"right\") return $cell.pos;\n\tconst map = TableMap.get($cell.node(-1)), start = $cell.start(-1);\n\tconst index = map.map.indexOf($cell.pos - start);\n\treturn index % map.width == 0 ? -1 : start + map.map[index - 1];\n}\nfunction draggedWidth(dragging, event, resizeMinWidth) {\n\tconst offset = event.clientX - dragging.startX;\n\treturn Math.max(resizeMinWidth, dragging.startWidth + offset);\n}\nfunction updateHandle(view, value) {\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value }));\n}\nfunction updateColumnWidth(view, cell, width) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tconst tr = view.state.tr;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst mapIndex = row * map.width + col;\n\t\tif (row && map.map[mapIndex] == map.map[mapIndex - map.width]) continue;\n\t\tconst pos = map.map[mapIndex];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\tconst index = attrs.colspan == 1 ? 0 : col - map.colCount(pos);\n\t\tif (attrs.colwidth && attrs.colwidth[index] == width) continue;\n\t\tconst colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan);\n\t\tcolwidth[index] = width;\n\t\ttr.setNodeMarkup(start + pos, null, {\n\t\t\t...attrs,\n\t\t\tcolwidth\n\t\t});\n\t}\n\tif (tr.docChanged) view.dispatch(tr);\n}\nfunction displayColumnWidth(view, cell, width, defaultCellMinWidth) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), start = $cell.start(-1);\n\tconst col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tlet dom = view.domAtPos($cell.start(-1)).node;\n\twhile (dom && dom.nodeName != \"TABLE\") dom = dom.parentNode;\n\tif (!dom) return;\n\tupdateColumnsOnResize(table, dom.firstChild, dom, defaultCellMinWidth, col, width);\n}\nfunction zeroes(n) {\n\treturn Array(n).fill(0);\n}\nfunction handleDecorations(state, cell) {\n\tconst decorations = [];\n\tconst $cell = state.doc.resolve(cell);\n\tconst table = $cell.node(-1);\n\tif (!table) return DecorationSet.empty;\n\tconst map = TableMap.get(table);\n\tconst start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = col + row * map.width;\n\t\tif ((col == map.width - 1 || map.map[index] != map.map[index + 1]) && (row == 0 || map.map[index] != map.map[index - map.width])) {\n\t\t\tvar _columnResizingPlugin;\n\t\t\tconst cellPos = map.map[index];\n\t\t\tconst pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1;\n\t\t\tconst dom = document.createElement(\"div\");\n\t\t\tdom.className = \"column-resize-handle\";\n\t\t\tif ((_columnResizingPlugin = columnResizingPluginKey.getState(state)) === null || _columnResizingPlugin === void 0 ? void 0 : _columnResizingPlugin.dragging) decorations.push(Decoration.node(start + cellPos, start + cellPos + table.nodeAt(cellPos).nodeSize, { class: \"column-resize-dragging\" }));\n\t\t\tdecorations.push(Decoration.widget(pos, dom));\n\t\t}\n\t}\n\treturn DecorationSet.create(state.doc, decorations);\n}\n\n//#endregion\n//#region src/index.ts\n/**\n* Creates a [plugin](http://prosemirror.net/docs/ref/#state.Plugin)\n* that, when added to an editor, enables cell-selection, handles\n* cell-based copy/paste, and makes sure tables stay well-formed (each\n* row has the same width, and cells don't overlap).\n*\n* You should probably put this plugin near the end of your array of\n* plugins, since it handles mouse and arrow key events in tables\n* rather broadly, and other plugins, like the gap cursor or the\n* column-width dragging plugin, might want to get a turn first to\n* perform more specific behavior.\n*\n* @public\n*/\nfunction tableEditing({ allowTableNodeSelection = false } = {}) {\n\treturn new Plugin({\n\t\tkey: tableEditingKey,\n\t\tstate: {\n\t\t\tinit() {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tapply(tr, cur) {\n\t\t\t\tconst set = tr.getMeta(tableEditingKey);\n\t\t\t\tif (set != null) return set == -1 ? null : set;\n\t\t\t\tif (cur == null || !tr.docChanged) return cur;\n\t\t\t\tconst { deleted, pos } = tr.mapping.mapResult(cur);\n\t\t\t\treturn deleted ? null : pos;\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tdecorations: drawCellSelection,\n\t\t\thandleDOMEvents: { mousedown: handleMouseDown$1 },\n\t\t\tcreateSelectionBetween(view) {\n\t\t\t\treturn tableEditingKey.getState(view.state) != null ? view.state.selection : null;\n\t\t\t},\n\t\t\thandleTripleClick,\n\t\t\thandleKeyDown,\n\t\t\thandlePaste\n\t\t},\n\t\tappendTransaction(_, oldState, state) {\n\t\t\treturn normalizeSelection(state, fixTables(state, oldState), allowTableNodeSelection);\n\t\t}\n\t});\n}\n\n//#endregion\nexport { CellBookmark, CellSelection, ResizeState, TableMap, TableView, clipCells as __clipCells, insertCells as __insertCells, pastedCells as __pastedCells, addColSpan, addColumn, addColumnAfter, addColumnBefore, addRow, addRowAfter, addRowBefore, cellAround, cellNear, colCount, columnIsHeader, columnResizing, columnResizingPluginKey, deleteCellSelection, deleteColumn, deleteRow, deleteTable, findCell, findCellPos, findCellRange, findTable, fixTables, fixTablesKey, goToNextCell, handlePaste, inSameTable, isInTable, mergeCells, moveCellForward, moveTableColumn, moveTableRow, nextCell, pointsAtCell, removeColSpan, removeColumn, removeRow, rowIsHeader, selectedRect, selectionCell, setCellAttr, splitCell, splitCellWithType, tableEditing, tableEditingKey, tableNodeTypes, tableNodes, toggleHeader, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, updateColumnsOnResize };\n//# sourceMappingURL=index.js.map","import { Schema, NodeSpec, MarkSpec, Attrs, DOMOutputSpec, ParseRule } from 'prosemirror-model';\nimport { addListNodes } from 'prosemirror-schema-list';\nimport { tableNodes } from 'prosemirror-tables';\nimport OrderedMap from 'orderedmap';\nimport { EMBED_SANDBOX, EMBED_REFERRER_POLICY } from './plugins/embeds';\nimport { sanitizeExtraStyleForWrite } from './email-css';\nimport { sanitizeTableTextStyleForWrite } from './sanitize';\n\nexport type Alignment = 'left' | 'center' | 'right' | 'justify';\n\nconst ALIGN_VALUES: Alignment[] = ['left', 'center', 'right', 'justify'];\n\n/** Keywords a cell's `text-align` attr may hold (email-fidelity). */\nconst CELL_ALIGN_KEYWORDS = new Set(['left', 'center', 'right', 'justify', 'start', 'end']);\n\nfunction getAlignFromDom(dom: HTMLElement): Alignment | null {\n const value = dom.style.textAlign || dom.getAttribute('align') || '';\n return (ALIGN_VALUES as string[]).includes(value) ? (value as Alignment) : null;\n}\n\nfunction alignStyle(align: Alignment | null): string | null {\n return align ? `text-align: ${align}` : null;\n}\n\n/** Image/figure width: a number is px, a `<n>%` string a percentage. */\nconst IMAGE_PERCENT = /^(\\d{1,3}(?:\\.\\d{1,2})?)%$/;\n\nexport function imageWidthCss(width: number | string | null): string | null {\n if (typeof width === 'number') return width > 0 ? `${width}px` : null;\n if (typeof width === 'string') {\n const match = IMAGE_PERCENT.exec(width.trim());\n if (match) {\n const n = parseFloat(match[1]);\n if (n > 0 && n <= 100) return width.trim();\n }\n }\n return null;\n}\n\n/** Reads an img/figure width: a valid `<n>%` keeps the string, else px rounds. */\nfunction imageWidthFromDom(styleWidth: string, attrWidth?: string): number | string | null {\n const trimmed = styleWidth.trim();\n // A percentage style width is kept only in range; an out-of-range/invalid one\n // (e.g. '150%') is dropped rather than silently reinterpreted as px.\n if (trimmed.endsWith('%')) {\n const match = IMAGE_PERCENT.exec(trimmed);\n if (match) {\n const n = parseFloat(match[1]);\n if (n > 0 && n <= 100) return trimmed;\n }\n return null;\n }\n const sw = parseFloat(styleWidth);\n const aw = parseFloat(attrWidth ?? '');\n const px = Number.isFinite(sw) ? Math.round(sw) : Number.isFinite(aw) ? Math.round(aw) : null;\n return px && px > 0 ? px : null;\n}\n\n/** Indent depth in 40px steps, like CKEditor/Google Docs. */\nexport const INDENT_STEP_PX = 40;\nexport const MAX_INDENT = 8;\n\nfunction getIndentFromDom(dom: HTMLElement): number {\n const raw = dom.style.marginInlineStart || dom.style.marginLeft || '';\n const px = parseFloat(raw);\n if (!Number.isFinite(px) || px <= 0) return 0;\n return Math.min(MAX_INDENT, Math.round(px / INDENT_STEP_PX));\n}\n\n/**\n * Line height as a unitless multiplier string ('1.5'). Percentages are\n * converted; px values pass through as-is so pasted content keeps its look.\n */\nfunction getLineHeightFromDom(dom: HTMLElement): string | null {\n const raw = dom.style.lineHeight.trim();\n if (!raw || raw === 'normal') return null;\n const num = parseFloat(raw);\n if (!Number.isFinite(num) || num <= 0) return null;\n if (raw.endsWith('%')) return String(num / 100);\n return raw;\n}\n\n/** Fidelity block margin, stored as a ready-to-emit declaration string. */\nfunction getMarginFromDom(dom: HTMLElement): string | null {\n const s = dom.style;\n if (s.margin) return `margin: ${s.margin}`;\n const parts: string[] = [];\n if (s.marginTop) parts.push(`margin-top: ${s.marginTop}`);\n if (s.marginBottom) parts.push(`margin-bottom: ${s.marginBottom}`);\n return parts.length ? parts.join('; ') : null;\n}\n\n/** Combined style string for margin + align + indent + line-height textblock attrs. */\nfunction blockStyle(attrs: {\n align?: Alignment | null;\n indent?: number;\n lineHeight?: string | null;\n margin?: string | null;\n extraStyle?: string | null;\n}): string | null {\n const parts: string[] = [];\n if (attrs.margin) parts.push(attrs.margin);\n const align = alignStyle(attrs.align ?? null);\n if (align) parts.push(align);\n if (attrs.indent) parts.push(`margin-inline-start: ${attrs.indent * INDENT_STEP_PX}px`);\n if (attrs.lineHeight) parts.push(`line-height: ${attrs.lineHeight}`);\n // Per-app extension declarations, re-validated against the permanent denylist\n // + value grammar (the singleton schema can't see the per-app allowlist).\n if (attrs.extraStyle) {\n const safe = sanitizeExtraStyleForWrite(attrs.extraStyle);\n if (safe) parts.push(safe);\n }\n return parts.length ? parts.join('; ') : null;\n}\n\n/* -------------------------------------------------------------------------\n * Author class / id passthrough\n *\n * Content elements keep the `class` and `id` an author gave them, so class/id\n * CSS (e.g. a scoped author <style> block) can target the document. Values that\n * collide with the editor's own internal names are dropped so content can never\n * impersonate or restyle the chrome; the editor's own classes (emitted in\n * toDOM) are always preserved and merged with the author's.\n * ------------------------------------------------------------------------- */\n\nconst RESERVED_NAME = /^(?:nile-wysiwyg|ProseMirror)/;\n\nexport function cleanClass(value: string | null): string | null {\n if (!value) return null;\n const kept = value.split(/\\s+/).filter(token => token && !RESERVED_NAME.test(token));\n return kept.length ? kept.join(' ') : null;\n}\n\nexport function cleanId(value: string | null): string | null {\n return value && !RESERVED_NAME.test(value) ? value : null;\n}\n\nconst HTML_ATTR_SPEC = { htmlClass: { default: null }, htmlId: { default: null } };\n\nfunction readHtmlAttrs(dom: HTMLElement): { htmlClass: string | null; htmlId: string | null } {\n return {\n htmlClass: cleanClass(dom.getAttribute('class')),\n htmlId: cleanId(dom.getAttribute('id')),\n };\n}\n\n/** Wraps a tag-based parse rule so it also captures author class/id. Rules\n * keyed by `style` (whose getAttrs receives a value string, not an element)\n * pass through untouched. */\nfunction augmentParseRule(rule: ParseRule): ParseRule {\n if (!('tag' in rule) || 'style' in rule) return rule;\n const inner = rule.getAttrs;\n return {\n ...rule,\n getAttrs(dom: HTMLElement) {\n const base = inner ? inner(dom) : null;\n if (base === false) return false;\n return { ...(base ?? {}), ...readHtmlAttrs(dom) };\n },\n } as ParseRule;\n}\n\n/** Wraps a toDOM so stored class/id are written back onto the element, merged\n * with any class the spec emits itself. Handles the `[tag]`, `[tag, attrs]`,\n * `[tag, 0]`, and `[tag, attrs, …children]` output shapes. */\nfunction augmentToDOM(\n toDOM?: (node: { attrs: Attrs }, ...rest: unknown[]) => DOMOutputSpec\n): ((node: { attrs: Attrs }, ...rest: unknown[]) => DOMOutputSpec) | undefined {\n if (!toDOM) return toDOM;\n return (node, ...rest) => {\n const out = toDOM(node, ...rest);\n const cls = node.attrs.htmlClass as string | null;\n const id = node.attrs.htmlId as string | null;\n if (!Array.isArray(out) || (!cls && !id)) return out;\n const [tag, ...tail] = out as unknown[];\n let attrs: Record<string, unknown> = {};\n let children = tail;\n if (tail.length && tail[0] && typeof tail[0] === 'object' && !Array.isArray(tail[0])) {\n attrs = { ...(tail[0] as Record<string, unknown>) };\n children = tail.slice(1);\n }\n if (cls) attrs.class = attrs.class ? `${attrs.class as string} ${cls}` : cls;\n if (id) attrs.id = id;\n return [tag, attrs, ...children] as DOMOutputSpec;\n };\n}\n\n/** Adds `htmlClass`/`htmlId` attrs plus parse/serialize support to a spec. */\nfunction withHtmlAttrs<S extends NodeSpec | MarkSpec>(spec: S): S {\n return {\n ...spec,\n attrs: { ...(spec.attrs ?? {}), ...HTML_ATTR_SPEC },\n parseDOM: spec.parseDOM?.map(augmentParseRule),\n toDOM: augmentToDOM(spec.toDOM as never) as never,\n };\n}\n\n/** Content nodes/marks that carry author class/id. Excludes structural leaves\n * (doc, text), atoms with bespoke DOM (image, embeds, mentions, math, …) and\n * style-only marks (their spans are covered by `html_span`). */\nconst HTML_ATTR_NODES = [\n 'paragraph', 'heading', 'blockquote', 'code_block',\n 'bullet_list', 'ordered_list', 'list_item',\n 'table', 'table_row', 'table_cell', 'table_header',\n];\nconst HTML_ATTR_MARKS = [\n 'link', 'bold', 'italic', 'underline', 'strike', 'code', 'subscript', 'superscript',\n];\n\n/**\n * Block nodes. `align` is modeled as an attribute on textblocks rather than a\n * wrapper node so alignment survives block-type changes (heading <-> paragraph).\n */\nconst nodes: Record<string, NodeSpec> = {\n doc: {\n content: 'block+',\n },\n\n paragraph: {\n content: 'inline*',\n group: 'block',\n attrs: {\n align: { default: null },\n indent: { default: 0 },\n lineHeight: { default: null },\n margin: { default: null },\n extraStyle: { default: null },\n },\n parseDOM: [\n {\n tag: 'p',\n getAttrs: (dom: HTMLElement) => ({\n align: getAlignFromDom(dom),\n indent: getIndentFromDom(dom),\n lineHeight: getLineHeightFromDom(dom),\n margin: getMarginFromDom(dom),\n extraStyle: dom.getAttribute('data-extra-style'),\n }),\n },\n ],\n toDOM(node) {\n const style = blockStyle(node.attrs);\n return style ? ['p', { style }, 0] : ['p', 0];\n },\n },\n\n heading: {\n content: 'inline*',\n group: 'block',\n defining: true,\n attrs: {\n level: { default: 1 },\n align: { default: null },\n indent: { default: 0 },\n lineHeight: { default: null },\n margin: { default: null },\n extraStyle: { default: null },\n },\n parseDOM: [1, 2, 3, 4, 5, 6].map(level => ({\n tag: `h${level}`,\n getAttrs: (dom: HTMLElement) => ({\n level,\n align: getAlignFromDom(dom),\n indent: getIndentFromDom(dom),\n lineHeight: getLineHeightFromDom(dom),\n margin: getMarginFromDom(dom),\n extraStyle: dom.getAttribute('data-extra-style'),\n }),\n })),\n toDOM(node) {\n const style = blockStyle(node.attrs);\n return style ? [`h${node.attrs.level}`, { style }, 0] : [`h${node.attrs.level}`, 0];\n },\n },\n\n blockquote: {\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM() {\n return ['blockquote', 0];\n },\n },\n\n horizontal_rule: {\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM() {\n return ['hr'];\n },\n },\n\n text: {\n group: 'inline',\n },\n\n hard_break: {\n inline: true,\n group: 'inline',\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM() {\n return ['br'];\n },\n },\n\n code_block: {\n content: 'text*',\n group: 'block',\n marks: '',\n code: true,\n defining: true,\n attrs: { language: { default: null } },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (dom: HTMLElement) => ({\n language: dom.getAttribute('data-language'),\n }),\n },\n ],\n toDOM(node) {\n const attrs: Record<string, string> = { class: 'nile-wysiwyg__code-block' };\n if (node.attrs.language) attrs['data-language'] = node.attrs.language;\n return ['pre', attrs, ['code', 0]];\n },\n },\n\n /** Inline image with a `width` attr (px number or `<n>%`). */\n image: {\n inline: true,\n group: 'inline',\n draggable: true,\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null },\n width: { default: null },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (dom: HTMLElement) => ({\n src: dom.getAttribute('src'),\n alt: dom.getAttribute('alt'),\n title: dom.getAttribute('title'),\n width: imageWidthFromDom(dom.style.width, dom.getAttribute('width') ?? ''),\n }),\n },\n ],\n toDOM(node) {\n const { src, alt, title, width } = node.attrs;\n const attrs: Record<string, string> = { src };\n if (alt) attrs.alt = alt;\n if (title) attrs.title = title;\n const css = imageWidthCss(width);\n if (css) attrs.style = `width: ${css}`;\n return ['img', attrs];\n },\n },\n\n /**\n * Captioned image: a block figure whose inline content is the caption. The\n * image itself lives in the attrs (TipTap-style), so the node stays valid\n * ProseMirror content — a node can't mix an inline img child with a block\n * figcaption child.\n */\n figure: {\n group: 'block',\n content: 'inline*',\n defining: true,\n isolating: true,\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null },\n width: { default: null },\n align: { default: null },\n },\n parseDOM: [\n {\n tag: 'figure',\n contentElement: 'figcaption',\n getAttrs: (dom: HTMLElement) => {\n const img = dom.querySelector('img[src]') as HTMLElement | null;\n if (!img) return false;\n const align = dom.getAttribute('data-align');\n return {\n src: img.getAttribute('src'),\n alt: img.getAttribute('alt'),\n title: img.getAttribute('title'),\n width: imageWidthFromDom(img.style.width || dom.style.width),\n align: align === 'left' || align === 'center' || align === 'right' ? align : null,\n };\n },\n },\n ],\n toDOM(node) {\n const { src, alt, title, width, align } = node.attrs;\n const figureAttrs: Record<string, string> = { class: 'nile-wysiwyg__figure' };\n if (align) figureAttrs['data-align'] = align;\n const styles: string[] = [];\n const widthCss = imageWidthCss(width);\n if (widthCss) styles.push(`width: ${widthCss}`);\n if (align === 'center') styles.push('margin-left: auto; margin-right: auto');\n else if (align === 'right') styles.push('margin-left: auto; margin-right: 0');\n if (styles.length) figureAttrs.style = styles.join('; ');\n const imgAttrs: Record<string, string> = { src, style: 'width: 100%' };\n if (alt) imgAttrs.alt = alt;\n if (title) imgAttrs.title = title;\n return [\n 'figure',\n figureAttrs,\n ['img', imgAttrs],\n ['figcaption', { class: 'nile-wysiwyg__figcaption' }, 0],\n ];\n },\n },\n\n /**\n * Checklists. Serialized as <ul data-task-list><li data-task-item\n * data-checked> so they survive HTML round-trips; the live checkbox is an\n * editor-only NodeView. parseDOM priority 51 beats the generic li rule.\n */\n task_list: {\n content: 'task_item+',\n group: 'block',\n parseDOM: [{ tag: 'ul[data-task-list]', priority: 51 }],\n toDOM() {\n return ['ul', { 'data-task-list': 'true', class: 'nile-wysiwyg__task-list' }, 0];\n },\n },\n\n task_item: {\n content: 'paragraph block*',\n defining: true,\n attrs: { checked: { default: false } },\n parseDOM: [\n {\n tag: 'li[data-task-item]',\n priority: 51,\n getAttrs: (dom: HTMLElement) => ({\n checked: dom.getAttribute('data-checked') === 'true',\n }),\n },\n ],\n toDOM(node) {\n return [\n 'li',\n {\n 'data-task-item': 'true',\n 'data-checked': String(node.attrs.checked),\n class: 'nile-wysiwyg__task-item',\n },\n 0,\n ];\n },\n },\n\n /**\n * Provider embeds (YouTube/Vimeo/Loom) as block atoms. The iframe sits in\n * a wrapper div for aspect-ratio styling and a click-to-select overlay.\n */\n embed: {\n group: 'block',\n atom: true,\n selectable: true,\n draggable: true,\n attrs: {\n src: {},\n provider: { default: null },\n title: { default: null },\n /** Rendered width in px (drag-resize); null = default size. */\n width: { default: null },\n /** Block alignment: 'left' | 'center' | 'right' | null. */\n align: { default: null },\n },\n parseDOM: [\n {\n tag: 'div[data-embed-provider]',\n getAttrs: (dom: HTMLElement) => {\n const iframe = dom.querySelector('iframe[src]');\n if (!iframe) return false;\n const widthAttr =\n dom.getAttribute('data-width') ?? /^(\\d+)px$/.exec(dom.style.width)?.[1];\n const width = widthAttr ? parseInt(widthAttr, 10) : NaN;\n const align = dom.getAttribute('data-align');\n return {\n src: iframe.getAttribute('src'),\n provider: dom.getAttribute('data-embed-provider'),\n title: iframe.getAttribute('title'),\n width: Number.isFinite(width) && width > 0 ? width : null,\n align: align === 'left' || align === 'center' || align === 'right' ? align : null,\n };\n },\n },\n {\n tag: 'iframe[src]',\n getAttrs: (dom: HTMLElement) => {\n const width = parseInt(dom.getAttribute('width') ?? '', 10);\n return {\n src: dom.getAttribute('src'),\n title: dom.getAttribute('title'),\n width: Number.isFinite(width) && width > 0 ? width : null,\n };\n },\n },\n ],\n toDOM(node) {\n const { src, provider, title, width, align } = node.attrs;\n const iframeAttrs: Record<string, string> = {\n src,\n frameborder: '0',\n allowfullscreen: 'true',\n allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n sandbox: EMBED_SANDBOX,\n referrerpolicy: EMBED_REFERRER_POLICY,\n };\n if (title) iframeAttrs.title = title;\n const wrapperAttrs: Record<string, string> = {\n class: 'nile-wysiwyg__embed',\n 'data-embed-provider': provider ?? 'generic',\n };\n const styles: string[] = [];\n if (width) {\n wrapperAttrs['data-width'] = String(width);\n styles.push(`width: ${width}px`, 'max-width: 100%');\n }\n if (align) {\n wrapperAttrs['data-align'] = align;\n if (align === 'center') styles.push('margin-left: auto', 'margin-right: auto');\n else if (align === 'right') styles.push('margin-left: auto', 'margin-right: 0');\n }\n if (styles.length) wrapperAttrs.style = styles.join('; ');\n return ['div', wrapperAttrs, ['iframe', iframeAttrs]];\n },\n },\n\n /**\n * Author-supplied `<style>` block, entered via the HTML source view. The CSS\n * is sanitized on the way in (see sanitizeCss) — `@import`, `expression()`\n * and external `url()` are neutralized — then stored verbatim and serialized\n * straight back to a `<style>` element. A node view renders it live in the\n * editor with a small chip so the otherwise-invisible block stays selectable.\n */\n styleBlock: {\n group: 'block',\n atom: true,\n selectable: true,\n attrs: { css: { default: '' } },\n parseDOM: [\n {\n tag: 'style',\n getAttrs: (dom: HTMLElement) => ({ css: dom.textContent ?? '' }),\n },\n ],\n toDOM(node) {\n return ['style', node.attrs.css];\n },\n },\n\n /**\n * Bookmark: a named in-text anchor (`<a id=\"…\">`) for intra-document\n * navigation. Invisible in serialized output; the editor draws a flag\n * marker via CSS so it can be selected and deleted.\n */\n bookmark: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: { id: {} },\n parseDOM: [\n {\n tag: 'a[data-bookmark]',\n priority: 60,\n getAttrs: (dom: HTMLElement) => {\n const id = dom.getAttribute('id') || dom.getAttribute('name');\n return id ? { id } : false;\n },\n },\n // Anchors without an href are bookmarks (`<a id>` / legacy `<a name>`).\n {\n tag: 'a[id]',\n getAttrs: (dom: HTMLElement) =>\n dom.hasAttribute('href') ? false : { id: dom.getAttribute('id') },\n },\n {\n tag: 'a[name]',\n getAttrs: (dom: HTMLElement) =>\n dom.hasAttribute('href') ? false : { id: dom.getAttribute('name') },\n },\n ],\n toDOM(node) {\n return ['a', { id: node.attrs.id, 'data-bookmark': 'true' }];\n },\n },\n\n /** Inline atom for @-style mentions. The label renders as `${trigger}${label}`. */\n mention: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: {\n trigger: { default: '@' },\n key: {},\n label: {},\n },\n parseDOM: [\n {\n tag: 'span[data-mention-key]',\n getAttrs: (dom: HTMLElement) => ({\n trigger: dom.getAttribute('data-mention-trigger') || '@',\n key: dom.getAttribute('data-mention-key'),\n label:\n dom.getAttribute('data-mention-label') || dom.textContent?.slice(1) || '',\n }),\n },\n ],\n toDOM(node) {\n const { trigger, key, label } = node.attrs;\n return [\n 'span',\n {\n class: 'nile-wysiwyg__mention',\n 'data-mention-trigger': trigger,\n 'data-mention-key': key,\n 'data-mention-label': label,\n },\n `${trigger}${label}`,\n ];\n },\n },\n\n /**\n * Merge field: an inline atom placeholder for mail-merge / personalization\n * (e.g. `{{first_name}}`). Stores a stable `id` and a human `label`; renders\n * the label (falling back to `{{id}}`) as a non-editable chip.\n */\n merge_field: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: { id: {}, label: { default: null } },\n parseDOM: [\n {\n tag: 'span[data-merge-field]',\n getAttrs: (dom: HTMLElement) => {\n const id = dom.getAttribute('data-merge-field');\n if (!id) return false;\n return {\n id,\n label: dom.getAttribute('data-merge-label') || dom.textContent || null,\n };\n },\n },\n ],\n toDOM(node) {\n const { id, label } = node.attrs;\n return [\n 'span',\n {\n class: 'nile-wysiwyg__merge-field',\n 'data-merge-field': id,\n 'data-merge-label': label ?? '',\n },\n label || `{{${id}}}`,\n ];\n },\n },\n\n /**\n * Math: an inline atom holding a LaTeX source string. Rendering is pluggable\n * via the editor's `mathRenderer` (KaTeX/MathJax, or MathML). Without a\n * renderer the raw LaTeX is shown in a math-styled chip. `display` chooses\n * inline vs. block presentation.\n */\n math: {\n inline: true,\n group: 'inline',\n atom: true,\n selectable: true,\n attrs: { latex: {}, display: { default: 'inline' } },\n parseDOM: [\n {\n tag: 'span[data-math]',\n getAttrs: (dom: HTMLElement) => ({\n latex: dom.getAttribute('data-math') || dom.textContent || '',\n display: dom.getAttribute('data-math-display') === 'block' ? 'block' : 'inline',\n }),\n },\n ],\n toDOM(node) {\n const { latex, display } = node.attrs;\n return [\n 'span',\n {\n class: 'nile-wysiwyg__math',\n 'data-math': latex,\n 'data-math-display': display,\n },\n latex,\n ];\n },\n },\n};\n\n/** A cell attr that reads and writes one inline-style declaration. */\nfunction cellStyleAttr(cssName: string) {\n return {\n default: null,\n getFromDOM(dom: HTMLElement) {\n return dom.style.getPropertyValue(cssName) || null;\n },\n setDOMAttr(value: unknown, attrs: Record<string, unknown>) {\n if (value) attrs.style = `${(attrs.style as string) || ''}${cssName}: ${value};`;\n },\n };\n}\n\n/** Table nodes from prosemirror-tables, with cell background + email-layout support. */\nconst tableNodeSpecs = tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom) {\n // Fidelity stashes the cell background on a data-attr (so it never\n // becomes a bg mark); legacy/non-fidelity content keeps it in the style.\n return (\n (dom as HTMLElement).getAttribute('data-cell-bg') ||\n (dom as HTMLElement).style.backgroundColor ||\n null\n );\n },\n setDOMAttr(value, attrs) {\n if (value) {\n attrs.style = `${(attrs.style as string) || ''}background-color: ${value};`;\n }\n },\n },\n // Padding is read per side so partial shorthands round-trip.\n paddingTop: cellStyleAttr('padding-top'),\n paddingRight: cellStyleAttr('padding-right'),\n paddingBottom: cellStyleAttr('padding-bottom'),\n paddingLeft: cellStyleAttr('padding-left'),\n width: cellStyleAttr('width'),\n valign: cellStyleAttr('vertical-align'),\n borderTop: cellStyleAttr('border-top'),\n borderRight: cellStyleAttr('border-right'),\n borderBottom: cellStyleAttr('border-bottom'),\n borderLeft: cellStyleAttr('border-left'),\n borderRadius: cellStyleAttr('border-radius'),\n // Cell text colour/font, carried on a data-attr so it inherits through the\n // cell's style instead of spawning a span on every text run.\n textStyle: {\n default: null,\n getFromDOM(dom: HTMLElement) {\n return dom.getAttribute('data-cell-text-style') || null;\n },\n setDOMAttr(value: unknown, attrs: Record<string, unknown>) {\n const safe = sanitizeTableTextStyleForWrite(value as string);\n if (safe) attrs.style = `${(attrs.style as string) || ''}${safe};`;\n },\n },\n // Cell text-align, carried on data-cell-align (never the live style) so\n // flag-off output is unchanged; validated against the keyword set on write.\n textAlign: {\n default: null,\n getFromDOM(dom: HTMLElement) {\n return dom.getAttribute('data-cell-align') || null;\n },\n setDOMAttr(value: unknown, attrs: Record<string, unknown>) {\n const v = String(value ?? '').toLowerCase();\n if (CELL_ALIGN_KEYWORDS.has(v)) {\n attrs.style = `${(attrs.style as string) || ''}text-align: ${v};`;\n }\n },\n },\n // Per-app extension declarations, re-validated on write-back.\n extraStyle: {\n default: null,\n getFromDOM(dom: HTMLElement) {\n return dom.getAttribute('data-extra-style') || null;\n },\n setDOMAttr(value: unknown, attrs: Record<string, unknown>) {\n const safe = sanitizeExtraStyleForWrite(value as string);\n if (safe) attrs.style = `${(attrs.style as string) || ''}${safe};`;\n },\n },\n },\n});\n\n/**\n * The table spec extended with a `layout` attr: layout tables (structured\n * layouts, e.g. for email HTML) serialize as `role=\"presentation\"` and render\n * borderless, with dashed guides visible only while editing.\n */\nconst baseTableSpec = tableNodeSpecs.table;\n\n/** Inline styles for a table's fidelity attrs; shared by toDOM and the live TableView. */\nexport function tableStyles(attrs: Record<string, unknown>): string[] {\n const { width, maxWidth, background, border, align, textStyle, extraStyle } = attrs;\n const styles: string[] = [];\n if (width) styles.push(`width: ${width}`);\n if (maxWidth) styles.push(`max-width: ${maxWidth}`);\n if (background) styles.push(`background-color: ${background}`);\n if (border) styles.push(`border: ${border}`);\n if (align === 'center') styles.push('margin-left: auto', 'margin-right: auto');\n // Table-level font/colour/line-height, re-validated on write-back (same\n // validators as the sanitizer) so cells/paragraphs inherit it through CSS.\n if (textStyle) {\n const safe = sanitizeTableTextStyleForWrite(textStyle as string);\n if (safe) styles.push(safe);\n }\n // Per-app extension declarations, re-validated against the permanent denylist\n // + value grammar on write-back (the singleton schema can't see the allowlist).\n if (extraStyle) {\n const safe = sanitizeExtraStyleForWrite(extraStyle as string);\n if (safe) styles.push(safe);\n }\n return styles;\n}\nconst tableSpec: NodeSpec = {\n ...baseTableSpec,\n attrs: {\n ...(baseTableSpec.attrs ?? {}),\n layout: { default: false },\n width: { default: null },\n maxWidth: { default: null },\n background: { default: null },\n border: { default: null },\n align: { default: null },\n textStyle: { default: null },\n extraStyle: { default: null },\n },\n parseDOM: [\n {\n tag: 'table',\n getAttrs: (dom: HTMLElement) => ({\n layout:\n dom.getAttribute('role') === 'presentation' || dom.hasAttribute('data-layout'),\n width: dom.style.width || null,\n maxWidth: dom.style.maxWidth || null,\n extraStyle: dom.getAttribute('data-extra-style') || null,\n // Table font/colour comes only from the fidelity data-attr (so flag-off\n // tables keep today's no-table-text-style behaviour).\n textStyle: dom.getAttribute('data-table-text-style') || null,\n // Table background comes only from the fidelity data-attr.\n background: dom.getAttribute('data-table-bg') || null,\n border: dom.style.border || null,\n // Centring comes from the fidelity data-attr (email `align=\"center\"`) or\n // from auto side margins written back by toDOM.\n align:\n dom.getAttribute('data-table-align') === 'center' ||\n (dom.style.marginLeft === 'auto' && dom.style.marginRight === 'auto')\n ? 'center'\n : null,\n }),\n },\n ],\n toDOM(node) {\n const styles = tableStyles(node.attrs);\n const attrs: Record<string, string> = node.attrs.layout\n ? { role: 'presentation', 'data-layout': 'true' }\n : {};\n if (styles.length) attrs.style = styles.join('; ');\n return ['table', attrs, ['tbody', 0]];\n },\n};\n\n/**\n * Marks. Order matters: marks later in the map render closer to the text.\n * Each styling mark parses from both semantic tags AND inline `style=`\n * declarations so pasted Word/Google Docs content keeps its formatting.\n */\nconst marks: Record<string, MarkSpec> = {\n link: {\n attrs: {\n href: {},\n title: { default: null },\n target: { default: null },\n },\n inclusive: false,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom: HTMLElement) => ({\n href: dom.getAttribute('href'),\n title: dom.getAttribute('title'),\n target: dom.getAttribute('target'),\n }),\n },\n ],\n toDOM(mark) {\n const { href, title, target } = mark.attrs;\n const attrs: Record<string, string> = { href };\n if (title) attrs.title = title;\n if (target) {\n attrs.target = target;\n if (target === '_blank') attrs.rel = 'noopener noreferrer';\n }\n return ['a', attrs, 0];\n },\n },\n\n bold: {\n parseDOM: [\n { tag: 'strong' },\n // Google Docs wraps everything in <b style=\"font-weight: normal\">\n {\n tag: 'b',\n getAttrs: (dom: HTMLElement) => dom.style.fontWeight !== 'normal' && null,\n },\n {\n style: 'font-weight',\n getAttrs: (value: string) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null,\n },\n ],\n toDOM() {\n return ['strong', 0];\n },\n },\n\n italic: {\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style=italic' },\n ],\n toDOM() {\n return ['em', 0];\n },\n },\n\n underline: {\n parseDOM: [\n { tag: 'u' },\n {\n style: 'text-decoration',\n getAttrs: (value: string) => value.includes('underline') && null,\n },\n {\n style: 'text-decoration-line',\n getAttrs: (value: string) => value.includes('underline') && null,\n },\n ],\n toDOM() {\n return ['u', 0];\n },\n },\n\n strike: {\n parseDOM: [\n { tag: 's' },\n { tag: 'strike' },\n { tag: 'del' },\n {\n style: 'text-decoration',\n getAttrs: (value: string) => value.includes('line-through') && null,\n },\n {\n style: 'text-decoration-line',\n getAttrs: (value: string) => value.includes('line-through') && null,\n },\n ],\n toDOM() {\n return ['s', 0];\n },\n },\n\n /** Mutually exclusive vertical-shift marks (formulas, footnote refs). */\n subscript: {\n excludes: 'subscript superscript',\n parseDOM: [{ tag: 'sub' }, { style: 'vertical-align=sub' }],\n toDOM() {\n return ['sub', 0];\n },\n },\n\n superscript: {\n excludes: 'subscript superscript',\n parseDOM: [{ tag: 'sup' }, { style: 'vertical-align=super' }],\n toDOM() {\n return ['sup', 0];\n },\n },\n\n code: {\n parseDOM: [{ tag: 'code' }],\n toDOM() {\n return ['code', { class: 'nile-wysiwyg__inline-code' }, 0];\n },\n },\n\n /** Carries an author `class`/`id` on an inline `<span>` that has no other\n * meaning, so class/id CSS can target runs of text. Low priority so styled\n * spans (color/font marks) and atom spans (mention/merge/math) win. */\n html_span: {\n attrs: { htmlClass: { default: null }, htmlId: { default: null } },\n parseDOM: [\n {\n tag: 'span',\n priority: 5,\n getAttrs: (dom: HTMLElement) => {\n const htmlClass = cleanClass(dom.getAttribute('class'));\n const htmlId = cleanId(dom.getAttribute('id'));\n return htmlClass || htmlId ? { htmlClass, htmlId } : false;\n },\n },\n ],\n toDOM(mark) {\n const attrs: Record<string, string> = {};\n if (mark.attrs.htmlClass) attrs.class = mark.attrs.htmlClass;\n if (mark.attrs.htmlId) attrs.id = mark.attrs.htmlId;\n return ['span', attrs, 0];\n },\n },\n\n text_color: {\n attrs: { color: {} },\n parseDOM: [\n {\n style: 'color',\n getAttrs: (value: string) => (value ? { color: value } : false),\n },\n ],\n toDOM(mark) {\n return ['span', { style: `color: ${mark.attrs.color}` }, 0];\n },\n },\n\n bg_color: {\n attrs: { color: {} },\n parseDOM: [\n {\n style: 'background-color',\n getAttrs: (value: string) =>\n value && value !== 'transparent' ? { color: value } : false,\n },\n ],\n toDOM(mark) {\n return ['span', { style: `background-color: ${mark.attrs.color}` }, 0];\n },\n },\n\n font_family: {\n attrs: { family: {} },\n parseDOM: [\n {\n style: 'font-family',\n getAttrs: (value: string) => (value ? { family: value } : false),\n },\n ],\n toDOM(mark) {\n return ['span', { style: `font-family: ${mark.attrs.family}` }, 0];\n },\n },\n\n font_size: {\n attrs: { size: {} },\n parseDOM: [\n {\n style: 'font-size',\n getAttrs: (value: string) => (value ? { size: value } : false),\n },\n ],\n toDOM(mark) {\n return ['span', { style: `font-size: ${mark.attrs.size}` }, 0];\n },\n },\n};\n\n/** Bullet markers CSS understands; anything else falls back to default. */\nexport const BULLET_STYLES = ['disc', 'circle', 'square'] as const;\n\n/** Numbering styles, keyed by the HTML `type` attribute letter. */\nexport const ORDERED_STYLES: Record<string, string> = {\n '1': 'decimal',\n a: 'lower-alpha',\n A: 'upper-alpha',\n i: 'lower-roman',\n I: 'upper-roman',\n};\n\nconst STYLE_TO_TYPE: Record<string, string> = Object.fromEntries(\n Object.entries(ORDERED_STYLES).map(([type, style]) => [style, type])\n);\n\n/**\n * Legal-style continuous numbering (1, 1.1, 1.1.1). Not a CSS\n * list-style-type: it serializes as `data-list-style=\"multilevel\"` and is\n * rendered with CSS counters (see the editor stylesheet). Consumers rendering\n * the output need the same counter rules.\n */\nexport const MULTILEVEL_STYLE = 'multilevel';\n\n/** List specs from prosemirror-schema-list, extended with style attrs. */\nconst bulletListSpec: NodeSpec = {\n content: 'list_item+',\n group: 'block',\n attrs: { style: { default: null } },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom: HTMLElement) => {\n const style = dom.style.listStyleType;\n return {\n style: (BULLET_STYLES as readonly string[]).includes(style) ? style : null,\n };\n },\n },\n ],\n toDOM(node) {\n return node.attrs.style\n ? ['ul', { style: `list-style-type: ${node.attrs.style}` }, 0]\n : ['ul', 0];\n },\n};\n\nconst orderedListSpec: NodeSpec = {\n content: 'list_item+',\n group: 'block',\n attrs: { order: { default: 1 }, style: { default: null } },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom: HTMLElement) => {\n const type = dom.getAttribute('type') ?? '';\n const cssStyle = dom.style.listStyleType;\n const style =\n dom.getAttribute('data-list-style') === MULTILEVEL_STYLE\n ? MULTILEVEL_STYLE\n : ORDERED_STYLES[type] ??\n (Object.values(ORDERED_STYLES).includes(cssStyle) ? cssStyle : null);\n const start = Number(dom.getAttribute('start'));\n return {\n order: Number.isFinite(start) && start > 0 ? start : 1,\n style,\n };\n },\n },\n ],\n toDOM(node) {\n const attrs: Record<string, string> = {};\n if (node.attrs.order !== 1) attrs.start = String(node.attrs.order);\n if (node.attrs.style === MULTILEVEL_STYLE) {\n attrs['data-list-style'] = MULTILEVEL_STYLE;\n } else if (node.attrs.style && STYLE_TO_TYPE[node.attrs.style]) {\n attrs.type = STYLE_TO_TYPE[node.attrs.style];\n }\n return ['ol', attrs, 0];\n },\n};\n\n/** Builds the editor schema. List nodes are added via prosemirror-schema-list. */\nexport function createSchema(): Schema {\n let nodeMap = addListNodes(OrderedMap.from(nodes), 'paragraph block*', 'block')\n .update('bullet_list', bulletListSpec)\n .update('ordered_list', orderedListSpec)\n .append(tableNodeSpecs)\n .update('table', tableSpec);\n // Thread author class/id through the content nodes and marks (applied last so\n // it also wraps the list/table specs pulled in from external packages).\n for (const name of HTML_ATTR_NODES) {\n const spec = nodeMap.get(name);\n if (spec) nodeMap = nodeMap.update(name, withHtmlAttrs(spec));\n }\n let markMap = OrderedMap.from<MarkSpec>(marks);\n for (const name of HTML_ATTR_MARKS) {\n const spec = markMap.get(name);\n if (spec) markMap = markMap.update(name, withHtmlAttrs(spec));\n }\n return new Schema({ nodes: nodeMap, marks: markMap });\n}\n\n/** A shared default schema instance. */\nexport const defaultSchema = createSchema();\n"],"names":["add","obj","props","copy","prop","wrapInList","listType","attrs","arguments","length","undefined","state","dispatch","_i$selection","selection","$from","$to","range","blockRange","tr","doJoin","outerRange","doc","depth","node","type","compatibleContent","startIndex","index","$insert","resolve","start","NodeRange","endIndex","parent","childCount","end","wrap","findWrapping","wrappers","joinBefore","content","Fragment","empty","i","from","create","step","ReplaceAroundStep","Slice","found","splitDepth","splitPos","e","first","canSplit","split","child","nodeSize","doWrapInList","wrapRangeInList","scrollIntoView","splitListItem","itemType","itemAttrs","_l$selection","isBlock","sameParent","grandParent","size","indexAfter","depthBefore","d","depthAfter","append","createAndFill","before","replace","after","sel","nodesBetween","pos","isTextblock","setSelection","Selection","near","nextType","contentMatchAt","defaultType","types","liftListItem","_l$selection2","firstChild","endOfList","target","liftTarget","lift","$after","mapping","map","canJoin","nodeBefore","nodeAfter","join","liftToOuterList","list","delete","$start","item","atStart","atEnd","indexBefore","canReplace","liftOutOfList","sinkListItem","_r$selection","nestedBefore","lastChild","inner","slice","normalizeKeyName","name","alt","ctrl","shift","meta","parts","result","mod","test","Error","mac","modifiers","event","altKey","ctrlKey","metaKey","shiftKey","keymap","bindings","Plugin","handleKeyDown","keydownHandler","Object","normalize","view","baseName","keyName","direct","noShift","windows","base","keyCode","fromCode","freshColWidth","colwidth","colspan","push","getCellAttrs","dom","extraAttrs","widthAttr","getAttribute","widths","s","Number","rowspan","getter","getFromDOM","value","setCellAttrs","setter","setDOMAttr","validateColwidth","Array","isArray","TypeError","_iterator","_createForOfIteratorHelper","_step","n","done","err","f","tableNodeTypes","schema","cached","nodes","role","spec","tableRole","cellAround","$pos","isInTable","$head","selectionCell","$anchorCell","$headCell","$anchor","$cell","cellNear","RangeError","head","pointsAtCell","inSameTable","$cellA","$cellB","nextCell","axis","dir","table","TableMap","get","tableStart","moved","removeColSpan","_objectSpread","splice","some","w","addColSpan","drawCellSelection","CellSelection","cells","forEachCell","Decoration","class","DecorationSet","changedDescendants","old","cur","offset","oldSize","curSize","outer","j","scan","Math","min","sameMarkup","fixTables","oldState","check","tablePos","problems","mustAdd","height","prob","cell","nodeAt","row","setNodeMarkup","last","side","insert","setMeta","fixTablesKey","fixTable","descendants","selectedRect","rectBetween","findCell","addColumn","col","refColumn","headerCell","header_cell","width","columnIsHeader","colCount","positionAt","addColumnBefore","rect","left","addColumnAfter","right","removeColumn","mapStart","maps","deleteColumn","addRow","rowPos","refRow","_table$nodeAt","_table$nodeAt2","addRowBefore","top","addRowAfter","bottom","removeRow","nextRow","mapFrom","seen","Set","has","newPos","deleteRow","isEmpty","c","mergeCells","_ref5","indexTop","indexLeft","indexBottom","indexRight","cellsOverlapRectangle","mergedPos","mergedCell","cellPos","mapped","replaceWith","splitCell","nodeTypes","getCellType","cellNode","_cellAround","cellWrapping","baseAttrs","lastCell","isHeaderEnabledByType","cellPositions","cellsInRect","toggleHeader","options","useDeprecatedLogic","steps","deprecated_toggleHeader","isHeaderRowEnabled","isHeaderColumnEnabled","selectionStartsAt","cellsRect","newType","forEach","relativeCellPos","deleteTable","deleteCellSelection","baseContent","eq","docChanged","pastedCells","openStart","openEnd","rows","max","fitSlice","_e25$child$attrs","r","ensureRectangular","nodeType","Transform","isolateHorizontal","cellTop","cellLeft","isolateVertical","updatePos","insertCells","recomp","emptyHead","rowEnd","rowNode","start$1","header","emptyRow","to","maybeSetSelection","arrow","atEndOfCell","$next","newSel","shiftArrow","cellSel","handleTripleClick","handlePaste","_","_ref7","newWidth","newHeight","added","newRows","frag","createChecked","source","clipCells","handleMouseDown$1","startEvent","_cellUnderMouse","button","startDOMCell","domInCell","setCellSelection","preventDefault","cellUnderMouse","$anchor$1","starting","tableEditingKey","getState","stop","root","removeEventListener","move","_event","anchor","addEventListener","TextSelection","dirStr","endOfTextblock","parentNode","nodeName","mousePos","posAtCoords","clientX","clientY","inside","updateColumnsOnResize","colgroup","defaultCellMinWidth","overrideCol","overrideValue","totalWidth","fixedWidth","nextDOM","_u$child$attrs","hasWidth","cssWidth","style","nextSibling","col$1","document","createElement","appendChild","_nextDOM$parentNode","removeChild","minWidth","columnResizing","_ref8","_ref8$handleWidth","handleWidth","cellMinWidth","View","TableView","lastColumnResizable","plugin","key","columnResizingPluginKey","init","_plugin$spec","nodeViews","tableName","ResizeState","apply","prev","attributes","pluginState","activeHandle","handleDOMEvents","mousemove","editable","dragging","classList","contains","domCellAround","_o27$getBoundingClien","getBoundingClientRect","edgeCell","updateHandle","handleMouseMove","mouseleave","handleMouseLeave","mousedown","_view$dom$ownerDocume","win","ownerDocument","defaultView","window","domAtPos","domWidth","childNodes","offsetWidth","currentColWidth","finish","event$1","pluginState$1","mapIndex","zeroes","updateColumnWidth","draggedWidth","setDragging","which","dragged","displayColumnWidth","startX","startWidth","handleMouseDown","decorations","_columnResizingPlugin","className","widget","handleDecorations","indexOf","resizeMinWidth","setHandle","fill","tableEditing","_ref10","_ref10$allowTableNode","allowTableNodeSelection","set","getMeta","_t$mapping$mapResult","mapResult","deleted","createSelectionBetween","appendTransaction","NodeSelection","rowSelection","_ref11","afterFrom","beforeTo","isCellBoundarySelection","_ref12","fromCellBoundaryNode","toCellBoundaryNode","parentOffset","isTextSelectionAcrossCells","normalizeSelection","getAlignFromDom","textAlign","ALIGN_VALUES","includes","imageWidthCss","match","IMAGE_PERCENT","exec","trim","parseFloat","imageWidthFromDom","styleWidth","attrWidth","trimmed","endsWith","sw","aw","px","isFinite","round","getIndentFromDom","raw","marginInlineStart","marginLeft","getLineHeightFromDom","lineHeight","num","String","getMarginFromDom","margin","concat","marginTop","marginBottom","blockStyle","align","alignStyle","indent","extraStyle","safe","sanitizeExtraStyleForWrite","cleanClass","kept","filter","token","RESERVED_NAME","cleanId","readHtmlAttrs","htmlClass","htmlId","augmentParseRule","rule","getAttrs","withHtmlAttrs","_t$attrs","HTML_ATTR_SPEC","parseDOM","toDOM","_len","rest","_key","out","cls","id","_r32","_toArray","tag","tail","children","cellStyleAttr","cssName","default","getPropertyValue","tableStyles","maxWidth","background","border","textStyle","styles","sanitizeTableTextStyleForWrite","_export","a","olDOM","ulDOM","liDOM","orderedList","order","validate","hasAttribute","bulletList","listItem","defining","navigator","platform","WeakMap","cache","readFromCache","addToCache","H","cacheSize","cachePos","P","this","_createClass","curPos","_this$findCell","b","_this$findCell2","leftA","rightA","topA","bottomA","leftB","rightB","topB","bottomB","rowStart","rowEndIndex","hasRowSpan","rowWidth","prevRow","findWidth","mapPos","colWidths","h","colW","widthIndex","expectedPos","missing","tableMap","badWidths","updated","colWidth","unshift","findBadColWidths","computeMap","PluginKey","_this","_classCallCheck","p","ranges","SelectionRange","super","_inherits","_c3","tableChanged","isRowSelection","isColSelection","colSelection","between","rowContent","cellRect","extraLeft","extraRight","JSON","stringify","fragment","_l$_o","findFrom","anchorTop","headTop","anchorBottom","headBottom","anchorLeft","headLeft","anchorRight","headRight","other","toJSON","getBookmark","CellBookmark","anchorRect","headRect","fromJSON","json","anchorCell","headCell","prototype","visible","jsonID","t","toggleHeaderRow","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Backspace","Delete","Jt","setProperty","contentDOM","update","ignoreMutation","record","action","handle","CELL_ALIGN_KEYWORDS","MAX_INDENT","HTML_ATTR_NODES","HTML_ATTR_MARKS","paragraph","group","heading","level","blockquote","horizontal_rule","text","hard_break","inline","selectable","code_block","marks","code","language","preserveWhitespace","image","draggable","src","title","_t$getAttribute","_t$attrs2","css","figure","isolating","contentElement","img","querySelector","_t$attrs3","figureAttrs","widthCss","imgAttrs","task_list","priority","task_item","checked","embed","atom","provider","iframe","_t$getAttribute2","_exec","parseInt","NaN","_t$getAttribute3","_t$attrs4","iframeAttrs","frameborder","allowfullscreen","allow","sandbox","EMBED_SANDBOX","referrerpolicy","EMBED_REFERRER_POLICY","wrapperAttrs","styleBlock","textContent","_t$textContent","bookmark","mention","trigger","label","_t$textContent2","_t$attrs5","merge_field","_t$attrs6","math","latex","display","_t$attrs7","tableNodeSpecs","cellAttributes","cellAttrs","tableGroup","table_row","table_cell","cellContent","table_header","tableNodes","backgroundColor","paddingTop","paddingRight","paddingBottom","paddingLeft","valign","borderTop","borderRight","borderBottom","borderLeft","borderRadius","v","toLowerCase","baseTableSpec","tableSpec","_$e$attrs","layout","marginRight","link","href","inclusive","mark","_t$attrs8","rel","bold","fontWeight","italic","underline","strike","subscript","excludes","superscript","html_span","text_color","color","bg_color","font_family","family","font_size","BULLET_STYLES","ORDERED_STYLES","A","I","STYLE_TO_TYPE","fromEntries","entries","_ref13","_ref14","_slicedToArray","MULTILEVEL_STYLE","bulletListSpec","listStyleType","orderedListSpec","_t$getAttribute4","_Ne$e","cssStyle","values","defaultSchema","nodeMap","itemContent","listGroup","ordered_list","bullet_list","list_item","addListNodes","OrderedMap","_i26","_Me","markMap","_i27","_De","Schema","createSchema"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|