@aquera/nile-elements 1.9.6 → 1.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/index-178e1e57.cjs.js +2 -0
- package/dist/index-178e1e57.cjs.js.map +1 -0
- package/dist/index-1faa963c.esm.js +1 -0
- package/dist/index-249de90a.esm.js +1 -0
- package/dist/index-353172ed.esm.js +1 -0
- package/dist/index-6f3fa4ab.esm.js +1 -0
- package/dist/index-89c520e9.cjs.js +5 -0
- package/dist/index-89c520e9.cjs.js.map +1 -0
- package/dist/index-920675c4.esm.js +1 -0
- package/dist/index-b387a9f4.cjs.js +2 -0
- package/dist/index-b387a9f4.cjs.js.map +1 -0
- package/dist/index-cc1385e0.cjs.js +2 -0
- package/dist/index-cc1385e0.cjs.js.map +1 -0
- package/dist/index-dedc38a6.esm.js +1 -0
- package/dist/index-df196058.cjs.js +2 -0
- package/dist/index-df196058.cjs.js.map +1 -0
- package/dist/index-f956f56d.cjs.js +7 -0
- package/dist/index-f956f56d.cjs.js.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +3595 -629
- package/dist/internal/glyph.cjs.js +2 -0
- package/dist/internal/glyph.cjs.js.map +1 -0
- package/dist/internal/glyph.esm.js +5 -0
- package/dist/nile-auto-complete/index.cjs.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -1
- package/dist/nile-auto-complete/portal-manager.cjs.js +1 -1
- package/dist/nile-auto-complete/portal-utils.cjs.js +1 -1
- package/dist/nile-code-editor/extensionSetup.cjs.js +7 -7
- package/dist/nile-code-editor/extensionSetup.cjs.js.map +1 -1
- package/dist/nile-code-editor/extensionSetup.esm.js +1 -1
- package/dist/nile-code-editor/index.cjs.js +1 -1
- package/dist/nile-code-editor/index.esm.js +1 -1
- package/dist/nile-code-editor/nile-code-editor.cjs.js +2 -2
- package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
- package/dist/nile-code-editor/nile-code-editor.esm.js +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/index.esm.js +1 -1
- package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
- package/dist/nile-combobox/nile-combobox.esm.js +1 -1
- package/dist/nile-combobox/portal-manager.cjs.js +1 -1
- package/dist/nile-context-menu/index.cjs.js +1 -1
- package/dist/nile-context-menu/nile-context-menu.cjs.js +1 -1
- package/dist/nile-context-submenu/index.cjs.js +1 -1
- package/dist/nile-context-submenu/nile-context-submenu.cjs.js +1 -1
- package/dist/nile-detail/index.cjs.js +1 -1
- package/dist/nile-detail/index.esm.js +1 -1
- package/dist/nile-detail/nile-detail.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.esm.js +1 -1
- package/dist/nile-dropdown/index.cjs.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.cjs.js +1 -1
- package/dist/nile-dropdown/portal-manager.cjs.js +1 -1
- package/dist/nile-file-upload/index.cjs.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.cjs.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.template.cjs.js +1 -1
- package/dist/nile-floating-panel/index.cjs.js +1 -1
- package/dist/nile-floating-panel/nile-floating-panel.cjs.js +1 -1
- package/dist/nile-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-select/index.cjs.js +1 -1
- package/dist/nile-select/nile-select.cjs.js +1 -1
- package/dist/nile-select/portal-manager.cjs.js +1 -1
- package/dist/nile-side-bar-action/index.cjs.js +1 -1
- package/dist/nile-side-bar-action/nile-side-bar-action.cjs.js +1 -1
- package/dist/nile-side-bar-action/portal-manager.cjs.js +1 -1
- package/dist/nile-tooltip/index.cjs.js +1 -1
- package/dist/nile-tooltip/nile-tooltip.cjs.js +1 -1
- package/dist/nile-virtual-select/index.cjs.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js +1 -1
- package/dist/nile-virtual-select/portal-manager.cjs.js +1 -1
- package/dist/nile-virtual-select/renderer.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/emoji.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/emoji.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/emoji.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/commands.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/create-state.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/export.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/export.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/export.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/index.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/index.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/index.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/inputrules.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/keymap.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/markdown-parse.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/markdown-parse.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/markdown-parse.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/markdown.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/markdown.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/markdown.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/office-paste.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/office-paste.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/office-paste.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/embeds.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/find-replace.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/format-painter.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image-view.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image-view.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/image.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/link.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/link.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/math-view.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/max-length.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/max-length.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/paste.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/paste.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/placeholder.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/single-line.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/single-line.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/suggestions.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/tables.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/task-list.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/task-list.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/plugins/task-list.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/sanitize.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/schema.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/schema.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/schema.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/selection-state.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/engine/serializer.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/engine/serializer.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/index.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/index.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/index.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.esm.js +780 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +97 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.esm.js +244 -0
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.esm.js +137 -0
- package/dist/nile-wysiwyg-editor/types.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/types.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/types.esm.js +1 -0
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/bookmark-panel.esm.js +97 -0
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/bubble-menu.esm.js +67 -0
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +65 -0
- package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/embed-menu.esm.js +64 -0
- package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/embed-panel.esm.js +68 -0
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/emoji-picker.esm.js +96 -0
- package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/find-replace.esm.js +112 -0
- package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/image-menu.esm.js +64 -0
- package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/image-panel.esm.js +171 -0
- package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/insert-menu.esm.js +90 -0
- package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/link-editor.esm.js +114 -0
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/markdown-panel.esm.js +80 -0
- package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/math-panel.esm.js +92 -0
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/shortcut-help.esm.js +147 -0
- package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +79 -0
- package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/special-chars.esm.js +96 -0
- package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/suggest-list.esm.js +67 -0
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/table-grid-picker.esm.js +100 -0
- package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js +2 -0
- package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js.map +1 -0
- package/dist/nile-wysiwyg-editor/ui/table-menu.esm.js +58 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.js +19 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal/glyph.d.ts +6 -0
- package/dist/src/internal/glyph.js +13 -0
- package/dist/src/internal/glyph.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/emoji.d.ts +5 -0
- package/dist/src/nile-wysiwyg-editor/emoji.js +138 -0
- package/dist/src/nile-wysiwyg-editor/emoji.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/commands.d.ts +69 -0
- package/dist/src/nile-wysiwyg-editor/engine/commands.js +863 -0
- package/dist/src/nile-wysiwyg-editor/engine/commands.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/create-state.d.ts +35 -0
- package/dist/src/nile-wysiwyg-editor/engine/create-state.js +67 -0
- package/dist/src/nile-wysiwyg-editor/engine/create-state.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.d.ts +38 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.js +208 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.test.js +96 -0
- package/dist/src/nile-wysiwyg-editor/engine/export.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/index.d.ts +37 -0
- package/dist/src/nile-wysiwyg-editor/engine/index.js +29 -0
- package/dist/src/nile-wysiwyg-editor/engine/index.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/inputrules.d.ts +12 -0
- package/dist/src/nile-wysiwyg-editor/engine/inputrules.js +144 -0
- package/dist/src/nile-wysiwyg-editor/engine/inputrules.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/keymap.d.ts +15 -0
- package/dist/src/nile-wysiwyg-editor/engine/keymap.js +94 -0
- package/dist/src/nile-wysiwyg-editor/engine/keymap.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.d.ts +22 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.js +287 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.test.js +106 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown-parse.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown.d.ts +10 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown.js +162 -0
- package/dist/src/nile-wysiwyg-editor/engine/markdown.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/office-paste.d.ts +13 -0
- package/dist/src/nile-wysiwyg-editor/engine/office-paste.js +182 -0
- package/dist/src/nile-wysiwyg-editor/engine/office-paste.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/code-highlight.d.ts +10 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/code-highlight.js +165 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/code-highlight.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.d.ts +17 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js +69 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.d.ts +17 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js +96 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/find-replace.d.ts +26 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/find-replace.js +123 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/find-replace.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/format-painter.d.ts +28 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/format-painter.js +72 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/format-painter.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.d.ts +41 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js +176 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image-view.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image.d.ts +15 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image.js +64 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/image.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/link.d.ts +11 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js +42 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/link.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.d.ts +18 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js +46 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/max-length.d.ts +7 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/max-length.js +26 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/max-length.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.d.ts +31 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js +55 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/paste.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/placeholder.d.ts +7 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/placeholder.js +25 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/placeholder.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/single-line.d.ts +10 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/single-line.js +48 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/single-line.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/suggestions.d.ts +29 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/suggestions.js +87 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/suggestions.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.d.ts +8 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js +11 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/task-list.d.ts +16 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/task-list.js +49 -0
- package/dist/src/nile-wysiwyg-editor/engine/plugins/task-list.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.js +883 -0
- package/dist/src/nile-wysiwyg-editor/engine/pm.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/productivity.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/productivity.test.js +129 -0
- package/dist/src/nile-wysiwyg-editor/engine/productivity.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.d.ts +13 -0
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.js +155 -0
- package/dist/src/nile-wysiwyg-editor/engine/sanitize.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/schema.d.ts +20 -0
- package/dist/src/nile-wysiwyg-editor/engine/schema.js +823 -0
- package/dist/src/nile-wysiwyg-editor/engine/schema.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/selection-state.d.ts +70 -0
- package/dist/src/nile-wysiwyg-editor/engine/selection-state.js +138 -0
- package/dist/src/nile-wysiwyg-editor/engine/selection-state.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/engine/serializer.d.ts +18 -0
- package/dist/src/nile-wysiwyg-editor/engine/serializer.js +63 -0
- package/dist/src/nile-wysiwyg-editor/engine/serializer.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/index.d.ts +3 -0
- package/dist/src/nile-wysiwyg-editor/index.js +3 -0
- package/dist/src/nile-wysiwyg-editor/index.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +782 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.d.ts +364 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +2038 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js +636 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.d.ts +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js +2 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.d.ts +6 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js +251 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.d.ts +41 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js +700 -0
- package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/types.d.ts +49 -0
- package/dist/src/nile-wysiwyg-editor/types.js +8 -0
- package/dist/src/nile-wysiwyg-editor/types.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.d.ts +20 -0
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js +159 -0
- package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.d.ts +21 -0
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +125 -0
- package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.d.ts +18 -0
- package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js +107 -0
- package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.d.ts +19 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js +123 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.d.ts +27 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +146 -0
- package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.d.ts +21 -0
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js +154 -0
- package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.d.ts +26 -0
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.js +178 -0
- package/dist/src/nile-wysiwyg-editor/ui/find-replace.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.d.ts +18 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.js +129 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.d.ts +56 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.js +349 -0
- package/dist/src/nile-wysiwyg-editor/ui/image-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.d.ts +25 -0
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js +142 -0
- package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.d.ts +30 -0
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.js +189 -0
- package/dist/src/nile-wysiwyg-editor/ui/link-editor.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.d.ts +24 -0
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js +144 -0
- package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.d.ts +31 -0
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +172 -0
- package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.d.ts +30 -0
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js +296 -0
- package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/source-view.d.ts +19 -0
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js +120 -0
- package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.d.ts +20 -0
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.js +199 -0
- package/dist/src/nile-wysiwyg-editor/ui/special-chars.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.d.ts +31 -0
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +133 -0
- package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.d.ts +23 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +177 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.d.ts +16 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +101 -0
- package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -0
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -2
- package/src/index.ts +57 -1
- package/src/internal/glyph.ts +13 -0
- package/src/nile-wysiwyg-editor/emoji.ts +137 -0
- package/src/nile-wysiwyg-editor/engine/commands.ts +1035 -0
- package/src/nile-wysiwyg-editor/engine/create-state.ts +117 -0
- package/src/nile-wysiwyg-editor/engine/export.test.ts +113 -0
- package/src/nile-wysiwyg-editor/engine/export.ts +242 -0
- package/src/nile-wysiwyg-editor/engine/index.ts +69 -0
- package/src/nile-wysiwyg-editor/engine/inputrules.ts +169 -0
- package/src/nile-wysiwyg-editor/engine/keymap.ts +146 -0
- package/src/nile-wysiwyg-editor/engine/markdown-parse.test.ts +148 -0
- package/src/nile-wysiwyg-editor/engine/markdown-parse.ts +337 -0
- package/src/nile-wysiwyg-editor/engine/markdown.ts +165 -0
- package/src/nile-wysiwyg-editor/engine/office-paste.ts +199 -0
- package/src/nile-wysiwyg-editor/engine/plugins/code-highlight.ts +173 -0
- package/src/nile-wysiwyg-editor/engine/plugins/embed-view.ts +85 -0
- package/src/nile-wysiwyg-editor/engine/plugins/embeds.ts +99 -0
- package/src/nile-wysiwyg-editor/engine/plugins/find-replace.ts +155 -0
- package/src/nile-wysiwyg-editor/engine/plugins/format-painter.ts +80 -0
- package/src/nile-wysiwyg-editor/engine/plugins/image-view.ts +220 -0
- package/src/nile-wysiwyg-editor/engine/plugins/image.ts +80 -0
- package/src/nile-wysiwyg-editor/engine/plugins/link.ts +42 -0
- package/src/nile-wysiwyg-editor/engine/plugins/math-view.ts +56 -0
- package/src/nile-wysiwyg-editor/engine/plugins/max-length.ts +24 -0
- package/src/nile-wysiwyg-editor/engine/plugins/paste.ts +74 -0
- package/src/nile-wysiwyg-editor/engine/plugins/placeholder.ts +24 -0
- package/src/nile-wysiwyg-editor/engine/plugins/single-line.ts +47 -0
- package/src/nile-wysiwyg-editor/engine/plugins/suggestions.ts +110 -0
- package/src/nile-wysiwyg-editor/engine/plugins/tables.ts +12 -0
- package/src/nile-wysiwyg-editor/engine/plugins/task-list.ts +65 -0
- package/src/nile-wysiwyg-editor/engine/pm.test.ts +1088 -0
- package/src/nile-wysiwyg-editor/engine/productivity.test.ts +163 -0
- package/src/nile-wysiwyg-editor/engine/sanitize.ts +156 -0
- package/src/nile-wysiwyg-editor/engine/schema.ts +859 -0
- package/src/nile-wysiwyg-editor/engine/selection-state.ts +210 -0
- package/src/nile-wysiwyg-editor/engine/serializer.ts +78 -0
- package/src/nile-wysiwyg-editor/index.ts +3 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +782 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.ts +750 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +2155 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.ts +1 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts +251 -0
- package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.ts +772 -0
- package/src/nile-wysiwyg-editor/types.ts +83 -0
- package/src/nile-wysiwyg-editor/ui/bookmark-panel.ts +155 -0
- package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +135 -0
- package/src/nile-wysiwyg-editor/ui/code-block-menu.ts +105 -0
- package/src/nile-wysiwyg-editor/ui/embed-menu.ts +133 -0
- package/src/nile-wysiwyg-editor/ui/embed-panel.ts +143 -0
- package/src/nile-wysiwyg-editor/ui/emoji-picker.ts +152 -0
- package/src/nile-wysiwyg-editor/ui/find-replace.ts +174 -0
- package/src/nile-wysiwyg-editor/ui/image-menu.ts +140 -0
- package/src/nile-wysiwyg-editor/ui/image-panel.ts +337 -0
- package/src/nile-wysiwyg-editor/ui/insert-menu.ts +142 -0
- package/src/nile-wysiwyg-editor/ui/link-editor.ts +180 -0
- package/src/nile-wysiwyg-editor/ui/markdown-panel.ts +143 -0
- package/src/nile-wysiwyg-editor/ui/math-panel.ts +169 -0
- package/src/nile-wysiwyg-editor/ui/shortcut-help.ts +311 -0
- package/src/nile-wysiwyg-editor/ui/source-view.ts +119 -0
- package/src/nile-wysiwyg-editor/ui/special-chars.ts +209 -0
- package/src/nile-wysiwyg-editor/ui/suggest-list.ts +138 -0
- package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +173 -0
- package/src/nile-wysiwyg-editor/ui/table-menu.ts +109 -0
- package/vscode-html-custom-data.json +450 -0
- package/web-dev-server.config.mjs +6 -2
- package/dist/index-5fef1a0d.esm.js +0 -1
- package/dist/index-8f38fae3.cjs.js +0 -2
- package/dist/index-8f38fae3.cjs.js.map +0 -1
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import {
|
|
2
|
+
inputRules,
|
|
3
|
+
wrappingInputRule,
|
|
4
|
+
textblockTypeInputRule,
|
|
5
|
+
InputRule,
|
|
6
|
+
} from 'prosemirror-inputrules';
|
|
7
|
+
import { MarkType, Schema } from 'prosemirror-model';
|
|
8
|
+
import { Plugin } from 'prosemirror-state';
|
|
9
|
+
|
|
10
|
+
function escapeRegex(text: string): string {
|
|
11
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** True when the cursor sits in code (block or mark) — no autocorrect there. */
|
|
15
|
+
function isInCodeContext(state: import('prosemirror-state').EditorState): boolean {
|
|
16
|
+
const { $from } = state.selection;
|
|
17
|
+
if ($from.parent.type.spec.code) return true;
|
|
18
|
+
const code = state.schema.marks.code;
|
|
19
|
+
return !!(code && code.isInSet(state.storedMarks || $from.marks()));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* String-replacement rule (the library stringHandler plus a code-context
|
|
24
|
+
* guard): when the regex has a capture group, only the group is replaced and
|
|
25
|
+
* the surrounding matched text is preserved.
|
|
26
|
+
*/
|
|
27
|
+
function replaceRule(regexp: RegExp, replacement: string): InputRule {
|
|
28
|
+
return new InputRule(regexp, (state, match, start, end) => {
|
|
29
|
+
if (isInCodeContext(state)) return null;
|
|
30
|
+
let insert = replacement;
|
|
31
|
+
let from = start;
|
|
32
|
+
if (match.length > 1 && match[1] !== undefined) {
|
|
33
|
+
const offset = match[0].lastIndexOf(match[1]);
|
|
34
|
+
insert += match[0].slice(offset + match[1].length);
|
|
35
|
+
from += offset;
|
|
36
|
+
const cutOff = from - end;
|
|
37
|
+
if (cutOff > 0) {
|
|
38
|
+
insert = match[0].slice(offset - cutOff, offset) + insert;
|
|
39
|
+
from = end;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return state.tr.insertText(insert, from, end);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* CKEditor-style text transformations: symbols, fractions, dashes, ellipsis
|
|
48
|
+
* and smart quotes. All skipped inside code and revertable with Backspace.
|
|
49
|
+
*/
|
|
50
|
+
function textTransformRules(): InputRule[] {
|
|
51
|
+
return [
|
|
52
|
+
// Symbols.
|
|
53
|
+
replaceRule(/\(c\)$/i, '©'),
|
|
54
|
+
replaceRule(/\(r\)$/i, '®'),
|
|
55
|
+
replaceRule(/\(tm\)$/i, '™'),
|
|
56
|
+
// Fractions (word-bounded, completed by a space).
|
|
57
|
+
replaceRule(/(?:^|\s)(1\/2)\s$/, '½'),
|
|
58
|
+
replaceRule(/(?:^|\s)(1\/4)\s$/, '¼'),
|
|
59
|
+
replaceRule(/(?:^|\s)(3\/4)\s$/, '¾'),
|
|
60
|
+
// Dashes: " --- " → em, " -- " → en. The em rule can't be shadowed by
|
|
61
|
+
// the en rule because the en rule requires whitespace before "--".
|
|
62
|
+
replaceRule(/\s(---)\s$/, '—'),
|
|
63
|
+
replaceRule(/\s(--)\s$/, '–'),
|
|
64
|
+
// Ellipsis.
|
|
65
|
+
replaceRule(/\.\.\.$/, '…'),
|
|
66
|
+
// Smart quotes: opening after start/space/bracket, closing elsewhere.
|
|
67
|
+
replaceRule(/(?:^|[\s{[(<'"‘“])(")$/, '“'),
|
|
68
|
+
replaceRule(/"$/, '”'),
|
|
69
|
+
replaceRule(/(?:^|[\s{[(<'"‘“])(')$/, '‘'),
|
|
70
|
+
replaceRule(/'$/, '’'),
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface InputRulesOptions {
|
|
75
|
+
/** Include the autocorrect/typography rules. Defaults to true. */
|
|
76
|
+
textTransform?: boolean;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Markdown mark shortcut: typing `<delim>text<delim>` applies the mark and
|
|
81
|
+
* strips the delimiters. The matched range (delimiters and all) is replaced
|
|
82
|
+
* with the marked content, so the final typed delimiter never lands.
|
|
83
|
+
*/
|
|
84
|
+
function markInputRule(delim: string, markType: MarkType): InputRule {
|
|
85
|
+
const escaped = escapeRegex(delim);
|
|
86
|
+
const inner = escapeRegex(delim[0]);
|
|
87
|
+
const regexp = new RegExp(
|
|
88
|
+
`(?:^|\\s)${escaped}([^${inner}\\s](?:[^${inner}]*[^${inner}\\s])?)${escaped}$`
|
|
89
|
+
);
|
|
90
|
+
return new InputRule(regexp, (state, match, start, end) => {
|
|
91
|
+
const content = match[1];
|
|
92
|
+
const delimStart = start + match[0].indexOf(delim);
|
|
93
|
+
const tr = state.tr;
|
|
94
|
+
tr.delete(delimStart, end);
|
|
95
|
+
tr.insertText(content, delimStart);
|
|
96
|
+
tr.addMark(delimStart, delimStart + content.length, markType.create());
|
|
97
|
+
tr.removeStoredMark(markType);
|
|
98
|
+
return tr;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Autolink: typing a space after a bare URL (`https://…`, `http://…` or
|
|
104
|
+
* `www.…`) converts it into a link. Trailing punctuation stays outside the
|
|
105
|
+
* link, code spans and existing links are left alone, and Backspace
|
|
106
|
+
* (undoInputRule) reverts the conversion like any other input rule.
|
|
107
|
+
*/
|
|
108
|
+
function linkifyRule(schema: Schema): InputRule {
|
|
109
|
+
const linkType = schema.marks.link;
|
|
110
|
+
const regexp = /(?:^|\s)((?:https?:\/\/|www\.)[^\s]*[^\s.,:;!?'")\]}])\s$/i;
|
|
111
|
+
return new InputRule(regexp, (state, match, start, end) => {
|
|
112
|
+
const url = match[1];
|
|
113
|
+
const urlStart = start + match[0].indexOf(url);
|
|
114
|
+
const urlEnd = urlStart + url.length;
|
|
115
|
+
if (state.doc.rangeHasMark(urlStart, urlEnd, linkType)) return null;
|
|
116
|
+
if (state.doc.rangeHasMark(urlStart, urlEnd, schema.marks.code)) return null;
|
|
117
|
+
const href = /^www\./i.test(url) ? `https://${url}` : url;
|
|
118
|
+
const tr = state.tr;
|
|
119
|
+
tr.addMark(urlStart, urlEnd, linkType.create({ href }));
|
|
120
|
+
tr.removeStoredMark(linkType);
|
|
121
|
+
tr.insertText(' ', end);
|
|
122
|
+
return tr;
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Markdown-style typing shortcuts: block rules plus inline mark rules
|
|
128
|
+
* (**bold**, *italic*, `code`, ~~strike~~), and (unless disabled) the
|
|
129
|
+
* typography autocorrect rules.
|
|
130
|
+
*/
|
|
131
|
+
export function buildInputRules(schema: Schema, options: InputRulesOptions = {}): Plugin {
|
|
132
|
+
const transforms = options.textTransform === false ? [] : textTransformRules();
|
|
133
|
+
return inputRules({
|
|
134
|
+
rules: [
|
|
135
|
+
...transforms,
|
|
136
|
+
// "# " … "###### " → heading
|
|
137
|
+
textblockTypeInputRule(
|
|
138
|
+
new RegExp('^(#{1,6})\\s$'),
|
|
139
|
+
schema.nodes.heading,
|
|
140
|
+
match => ({ level: match[1].length })
|
|
141
|
+
),
|
|
142
|
+
// "> " → blockquote
|
|
143
|
+
wrappingInputRule(/^\s*>\s$/, schema.nodes.blockquote),
|
|
144
|
+
// "- " or "* " → bullet list
|
|
145
|
+
wrappingInputRule(/^\s*([-*])\s$/, schema.nodes.bullet_list),
|
|
146
|
+
// "1. " → ordered list
|
|
147
|
+
wrappingInputRule(
|
|
148
|
+
/^(\d+)\.\s$/,
|
|
149
|
+
schema.nodes.ordered_list,
|
|
150
|
+
match => ({ order: +match[1] }),
|
|
151
|
+
(match, node) => node.childCount + node.attrs.order === +match[1]
|
|
152
|
+
),
|
|
153
|
+
// "```" → code block
|
|
154
|
+
textblockTypeInputRule(/^```$/, schema.nodes.code_block),
|
|
155
|
+
// "[] " or "[ ] " → checklist
|
|
156
|
+
wrappingInputRule(/^\s*\[[ ]?\]\s$/, schema.nodes.task_list),
|
|
157
|
+
// Inline marks. Bold before italic so '**' is never read as italic;
|
|
158
|
+
// strike (~~) before subscript (~) so a double tilde is never a single.
|
|
159
|
+
markInputRule('**', schema.marks.bold),
|
|
160
|
+
markInputRule('*', schema.marks.italic),
|
|
161
|
+
markInputRule('~~', schema.marks.strike),
|
|
162
|
+
markInputRule('~', schema.marks.subscript),
|
|
163
|
+
markInputRule('^', schema.marks.superscript),
|
|
164
|
+
markInputRule('`', schema.marks.code),
|
|
165
|
+
// Bare URL + space → link.
|
|
166
|
+
linkifyRule(schema),
|
|
167
|
+
],
|
|
168
|
+
});
|
|
169
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { keymap } from 'prosemirror-keymap';
|
|
2
|
+
import { baseKeymap, chainCommands, exitCode } from 'prosemirror-commands';
|
|
3
|
+
import { undo, redo } from 'prosemirror-history';
|
|
4
|
+
import { undoInputRule } from 'prosemirror-inputrules';
|
|
5
|
+
import {
|
|
6
|
+
splitListItem,
|
|
7
|
+
liftListItem,
|
|
8
|
+
sinkListItem,
|
|
9
|
+
} from 'prosemirror-schema-list';
|
|
10
|
+
import { Command, Plugin } from 'prosemirror-state';
|
|
11
|
+
import { Schema } from 'prosemirror-model';
|
|
12
|
+
import { getCommand } from './commands';
|
|
13
|
+
import { plainTextSlice } from './plugins/paste';
|
|
14
|
+
|
|
15
|
+
const isMac =
|
|
16
|
+
typeof navigator !== 'undefined' && /Mac|iP(hone|[oa]d)/.test(navigator.platform);
|
|
17
|
+
|
|
18
|
+
export interface KeymapOptions {
|
|
19
|
+
/** Invoked on Mod-k so the host can open its link editor UI. */
|
|
20
|
+
onLinkShortcut?: () => void;
|
|
21
|
+
/** Invoked on Mod-f so the host can open its find & replace bar. */
|
|
22
|
+
onFindShortcut?: () => void;
|
|
23
|
+
/** Invoked on Mod-/ so the host can open its shortcut help dialog. */
|
|
24
|
+
onShortcutHelp?: () => void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Editor keymap. Returned as two plugins: feature bindings first, then the
|
|
29
|
+
* ProseMirror base keymap as fallback.
|
|
30
|
+
*/
|
|
31
|
+
export function buildKeymapPlugins(schema: Schema, options: KeymapOptions = {}): Plugin[] {
|
|
32
|
+
const keys: Record<string, Command> = {};
|
|
33
|
+
|
|
34
|
+
keys['Mod-z'] = undo;
|
|
35
|
+
keys['Shift-Mod-z'] = redo;
|
|
36
|
+
if (!isMac) keys['Mod-y'] = redo;
|
|
37
|
+
keys['Backspace'] = undoInputRule;
|
|
38
|
+
|
|
39
|
+
keys['Mod-b'] = (state, dispatch, view) =>
|
|
40
|
+
getCommand(state, 'bold')!(state, dispatch, view);
|
|
41
|
+
keys['Mod-i'] = (state, dispatch, view) =>
|
|
42
|
+
getCommand(state, 'italic')!(state, dispatch, view);
|
|
43
|
+
keys['Mod-u'] = (state, dispatch, view) =>
|
|
44
|
+
getCommand(state, 'underline')!(state, dispatch, view);
|
|
45
|
+
keys['Shift-Mod-x'] = (state, dispatch, view) =>
|
|
46
|
+
getCommand(state, 'strike')!(state, dispatch, view);
|
|
47
|
+
// Google Docs convention: Ctrl+, subscript, Ctrl+. superscript.
|
|
48
|
+
keys['Mod-,'] = (state, dispatch, view) =>
|
|
49
|
+
getCommand(state, 'subscript')!(state, dispatch, view);
|
|
50
|
+
keys['Mod-.'] = (state, dispatch, view) =>
|
|
51
|
+
getCommand(state, 'superscript')!(state, dispatch, view);
|
|
52
|
+
|
|
53
|
+
// Paste without formatting. Reads the clipboard directly so the result is
|
|
54
|
+
// plain text regardless of the persistent toggle; falls back to the
|
|
55
|
+
// browser default when the async Clipboard API is unavailable.
|
|
56
|
+
keys['Shift-Mod-v'] = (_state, _dispatch, view) => {
|
|
57
|
+
if (!view || typeof navigator === 'undefined' || !navigator.clipboard?.readText) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
navigator.clipboard
|
|
61
|
+
.readText()
|
|
62
|
+
.then(text => {
|
|
63
|
+
if (!text || !view) return;
|
|
64
|
+
const slice = plainTextSlice(view.state.schema, text);
|
|
65
|
+
view.dispatch(view.state.tr.replaceSelection(slice).scrollIntoView());
|
|
66
|
+
})
|
|
67
|
+
.catch(() => {
|
|
68
|
+
/* clipboard denied — silently no-op */
|
|
69
|
+
});
|
|
70
|
+
return true;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
keys['Shift-Ctrl-0'] = (state, dispatch, view) =>
|
|
74
|
+
getCommand(state, 'paragraph')!(state, dispatch, view);
|
|
75
|
+
for (let level = 1; level <= 6; level += 1) {
|
|
76
|
+
keys[`Shift-Ctrl-${level}`] = (state, dispatch, view) =>
|
|
77
|
+
getCommand(state, 'heading', { level })!(state, dispatch, view);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
keys['Shift-Mod-7'] = (state, dispatch, view) =>
|
|
81
|
+
getCommand(state, 'orderedList')!(state, dispatch, view);
|
|
82
|
+
keys['Shift-Mod-8'] = (state, dispatch, view) =>
|
|
83
|
+
getCommand(state, 'bulletList')!(state, dispatch, view);
|
|
84
|
+
keys['Shift-Mod-9'] = (state, dispatch, view) =>
|
|
85
|
+
getCommand(state, 'blockquote')!(state, dispatch, view);
|
|
86
|
+
keys['Mod-Alt-c'] = (state, dispatch, view) =>
|
|
87
|
+
getCommand(state, 'codeBlock')!(state, dispatch, view);
|
|
88
|
+
|
|
89
|
+
// Google Docs convention: Mod-] / Mod-[ indent and outdent.
|
|
90
|
+
keys['Mod-]'] = (state, dispatch, view) =>
|
|
91
|
+
getCommand(state, 'indent')!(state, dispatch, view);
|
|
92
|
+
keys['Mod-['] = (state, dispatch, view) =>
|
|
93
|
+
getCommand(state, 'outdent')!(state, dispatch, view);
|
|
94
|
+
|
|
95
|
+
// New task items always start unchecked.
|
|
96
|
+
keys['Enter'] = chainCommands(
|
|
97
|
+
splitListItem(schema.nodes.task_item, { checked: false }),
|
|
98
|
+
splitListItem(schema.nodes.list_item)
|
|
99
|
+
);
|
|
100
|
+
keys['Tab'] = chainCommands(
|
|
101
|
+
sinkListItem(schema.nodes.task_item),
|
|
102
|
+
sinkListItem(schema.nodes.list_item)
|
|
103
|
+
);
|
|
104
|
+
keys['Shift-Tab'] = chainCommands(
|
|
105
|
+
liftListItem(schema.nodes.task_item),
|
|
106
|
+
liftListItem(schema.nodes.list_item)
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
// Hard break; exitCode first so breaks escape code marks cleanly.
|
|
110
|
+
const br: Command = chainCommands(exitCode, (state, dispatch) => {
|
|
111
|
+
if (dispatch) {
|
|
112
|
+
dispatch(
|
|
113
|
+
state.tr.replaceSelectionWith(schema.nodes.hard_break.create()).scrollIntoView()
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
});
|
|
118
|
+
keys['Shift-Enter'] = br;
|
|
119
|
+
keys['Mod-Enter'] = br;
|
|
120
|
+
|
|
121
|
+
if (options.onLinkShortcut) {
|
|
122
|
+
const open = options.onLinkShortcut;
|
|
123
|
+
keys['Mod-k'] = () => {
|
|
124
|
+
open();
|
|
125
|
+
return true;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (options.onFindShortcut) {
|
|
130
|
+
const openFind = options.onFindShortcut;
|
|
131
|
+
keys['Mod-f'] = () => {
|
|
132
|
+
openFind();
|
|
133
|
+
return true;
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (options.onShortcutHelp) {
|
|
138
|
+
const openHelp = options.onShortcutHelp;
|
|
139
|
+
keys['Mod-/'] = () => {
|
|
140
|
+
openHelp();
|
|
141
|
+
return true;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return [keymap(keys), keymap(baseKeymap)];
|
|
146
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { expect } from '@open-wc/testing';
|
|
2
|
+
import { markdownToHtml, looksLikeMarkdown, inlineToHtml } from './markdown-parse';
|
|
3
|
+
import { defaultSchema, htmlToDoc, docToMarkdown } from './index';
|
|
4
|
+
|
|
5
|
+
describe('markdown-parse', () => {
|
|
6
|
+
describe('markdownToHtml — blocks', () => {
|
|
7
|
+
it('parses headings', () => {
|
|
8
|
+
expect(markdownToHtml('# One')).to.equal('<h1>One</h1>');
|
|
9
|
+
expect(markdownToHtml('### Three')).to.equal('<h3>Three</h3>');
|
|
10
|
+
expect(markdownToHtml('## Trailing ##')).to.equal('<h2>Trailing</h2>');
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('parses paragraphs and hard breaks', () => {
|
|
14
|
+
expect(markdownToHtml('one\ntwo\n\nthree')).to.equal(
|
|
15
|
+
'<p>one<br>two</p><p>three</p>'
|
|
16
|
+
);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('parses blockquotes with lazy continuation', () => {
|
|
20
|
+
expect(markdownToHtml('> quoted\ncontinues')).to.equal(
|
|
21
|
+
'<blockquote><p>quoted<br>continues</p></blockquote>'
|
|
22
|
+
);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('parses fenced code blocks with language', () => {
|
|
26
|
+
expect(markdownToHtml('```js\nconst a = 1 < 2;\n```')).to.equal(
|
|
27
|
+
'<pre data-language="js"><code>const a = 1 < 2;</code></pre>'
|
|
28
|
+
);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('keeps markdown syntax literal inside code fences', () => {
|
|
32
|
+
expect(markdownToHtml('```\n# not a heading\n**not bold**\n```')).to.equal(
|
|
33
|
+
'<pre><code># not a heading\n**not bold**</code></pre>'
|
|
34
|
+
);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('parses horizontal rules but not list dashes', () => {
|
|
38
|
+
expect(markdownToHtml('---')).to.equal('<hr>');
|
|
39
|
+
expect(markdownToHtml('- item')).to.equal('<ul><li><p>item</p></li></ul>');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('parses nested bullet lists', () => {
|
|
43
|
+
expect(markdownToHtml('- a\n - b')).to.equal(
|
|
44
|
+
'<ul><li><p>a</p><ul><li><p>b</p></li></ul></li></ul>'
|
|
45
|
+
);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('parses ordered lists with a start offset', () => {
|
|
49
|
+
expect(markdownToHtml('3. three\n4. four')).to.equal(
|
|
50
|
+
'<ol start="3"><li><p>three</p></li><li><p>four</p></li></ol>'
|
|
51
|
+
);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('splits sibling lists when the marker type changes', () => {
|
|
55
|
+
expect(markdownToHtml('- a\n1. b')).to.equal(
|
|
56
|
+
'<ul><li><p>a</p></li></ul><ol><li><p>b</p></li></ol>'
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('parses task lists without converting plain neighbours', () => {
|
|
61
|
+
expect(markdownToHtml('- plain\n- [x] done')).to.equal(
|
|
62
|
+
'<ul><li><p>plain</p></li></ul>' +
|
|
63
|
+
'<ul data-task-list="true"><li data-task-item="true" data-checked="true"><p>done</p></li></ul>'
|
|
64
|
+
);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('parses GFM tables with header cells', () => {
|
|
68
|
+
expect(markdownToHtml('| A | B |\n| - | - |\n| 1 | 2 |')).to.equal(
|
|
69
|
+
'<table><tr><th><p>A</p></th><th><p>B</p></th></tr>' +
|
|
70
|
+
'<tr><td><p>1</p></td><td><p>2</p></td></tr></table>'
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
describe('inlineToHtml — marks', () => {
|
|
76
|
+
it('converts the inline marks', () => {
|
|
77
|
+
expect(inlineToHtml('**b** *i* ~~s~~ `c`')).to.equal(
|
|
78
|
+
'<strong>b</strong> <em>i</em> <s>s</s> <code>c</code>'
|
|
79
|
+
);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('converts links and images', () => {
|
|
83
|
+
expect(inlineToHtml('[x](https://a.b)')).to.equal('<a href="https://a.b">x</a>');
|
|
84
|
+
expect(inlineToHtml('')).to.equal(
|
|
85
|
+
'<img src="https://a.b/i.png" alt="y">'
|
|
86
|
+
);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('escapes HTML in text and keeps code spans literal', () => {
|
|
90
|
+
expect(inlineToHtml('<b>hi</b>')).to.equal('<b>hi</b>');
|
|
91
|
+
expect(inlineToHtml('`*literal*`')).to.equal('<code>*literal*</code>');
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it('honors backslash escapes', () => {
|
|
95
|
+
expect(inlineToHtml('\\*not italic\\*')).to.equal('*not italic*');
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('does not read mid-word underscores as emphasis', () => {
|
|
99
|
+
expect(inlineToHtml('snake_case_name')).to.equal('snake_case_name');
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe('round-trip with docToMarkdown', () => {
|
|
104
|
+
it('survives a structural round-trip', () => {
|
|
105
|
+
const source = [
|
|
106
|
+
'# Title',
|
|
107
|
+
'',
|
|
108
|
+
'Some **bold** and *italic* text.',
|
|
109
|
+
'',
|
|
110
|
+
'- one',
|
|
111
|
+
'- two',
|
|
112
|
+
'',
|
|
113
|
+
'```js',
|
|
114
|
+
'const x = 1;',
|
|
115
|
+
'```',
|
|
116
|
+
].join('\n');
|
|
117
|
+
const doc = htmlToDoc(defaultSchema, markdownToHtml(source));
|
|
118
|
+
expect(docToMarkdown(doc).trim()).to.equal(source);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('round-trips task lists', () => {
|
|
122
|
+
const source = '- [ ] todo\n- [x] done';
|
|
123
|
+
const doc = htmlToDoc(defaultSchema, markdownToHtml(source));
|
|
124
|
+
expect(docToMarkdown(doc).trim()).to.equal(source);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
describe('looksLikeMarkdown', () => {
|
|
129
|
+
it('detects block constructs', () => {
|
|
130
|
+
expect(looksLikeMarkdown('# Heading')).to.be.true;
|
|
131
|
+
expect(looksLikeMarkdown('- a list item')).to.be.true;
|
|
132
|
+
expect(looksLikeMarkdown('1. ordered')).to.be.true;
|
|
133
|
+
expect(looksLikeMarkdown('> quote')).to.be.true;
|
|
134
|
+
expect(looksLikeMarkdown('```\ncode\n```')).to.be.true;
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('detects unambiguous inline constructs', () => {
|
|
138
|
+
expect(looksLikeMarkdown('some **bold** text')).to.be.true;
|
|
139
|
+
expect(looksLikeMarkdown('a [link](https://x.y) here')).to.be.true;
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('rejects plain text and HTML', () => {
|
|
143
|
+
expect(looksLikeMarkdown('just a sentence.')).to.be.false;
|
|
144
|
+
expect(looksLikeMarkdown('2 * 3 = 6 and 4 - 2 = 2')).to.be.false;
|
|
145
|
+
expect(looksLikeMarkdown('<p>markup</p>')).to.be.false;
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
});
|