@dxos/react-ui-editor 0.8.4-main.fd6878d → 0.8.4-main.fffef41
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/dist/lib/browser/{chunk-22UMM3QJ.mjs → chunk-HL3YF6WC.mjs} +2 -2
- package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +7471 -5897
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node-esm/{chunk-YXYQPV6R.mjs → chunk-YJZGD3LY.mjs} +2 -2
- package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +7471 -5897
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/components/Editor/Editor.d.ts +37 -15
- package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
- package/dist/types/src/components/Editor/Editor.stories.d.ts +20 -0
- package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
- package/dist/types/src/components/EditorContent/EditorContent.d.ts +29 -0
- package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -0
- package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +26 -0
- package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +1 -0
- package/dist/types/src/components/EditorContent/controller.d.ts +10 -0
- package/dist/types/src/components/EditorContent/controller.d.ts.map +1 -0
- package/dist/types/src/components/EditorContent/index.d.ts +3 -0
- package/dist/types/src/components/EditorContent/index.d.ts.map +1 -0
- package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +36 -0
- package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
- package/dist/types/src/components/EditorMenuProvider/index.d.ts +7 -0
- package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
- package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
- package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
- package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
- package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
- package/dist/types/src/components/EditorMenuProvider/popover.d.ts +47 -0
- package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
- package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
- package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
- package/dist/types/src/components/EditorMenuProvider/util.d.ts +8 -0
- package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +1 -0
- package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
- package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
- package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
- package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
- package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +26 -2
- package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/actions.d.ts +39 -0
- package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -0
- package/dist/types/src/components/EditorToolbar/blocks.d.ts +3 -3
- package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/formatting.d.ts +3 -3
- package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/headings.d.ts +3 -3
- package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/index.d.ts +2 -1
- package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +11 -0
- package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -0
- package/dist/types/src/components/EditorToolbar/view-mode.d.ts +3 -3
- package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +4 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/defaults.d.ts.map +1 -1
- package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +17 -0
- package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +1 -0
- package/dist/types/src/extensions/autocomplete/index.d.ts +5 -0
- package/dist/types/src/extensions/autocomplete/index.d.ts.map +1 -0
- package/dist/types/src/extensions/autocomplete/match.d.ts +13 -0
- package/dist/types/src/extensions/autocomplete/match.d.ts.map +1 -0
- package/dist/types/src/extensions/autocomplete/placeholder.d.ts +20 -0
- package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +1 -0
- package/dist/types/src/extensions/autocomplete/typeahead.d.ts +10 -0
- package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +1 -0
- package/dist/types/src/extensions/automerge/automerge.d.ts +1 -1
- package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.stories.d.ts +10 -19
- package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/sync.d.ts +3 -3
- package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/update-automerge.d.ts +1 -1
- package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
- package/dist/types/src/extensions/autoscroll.d.ts +20 -0
- package/dist/types/src/extensions/autoscroll.d.ts.map +1 -0
- package/dist/types/src/extensions/awareness/awareness-provider.d.ts +1 -1
- package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +1 -1
- package/dist/types/src/extensions/blocks.d.ts +2 -0
- package/dist/types/src/extensions/blocks.d.ts.map +1 -0
- package/dist/types/src/extensions/bookmarks.d.ts +12 -0
- package/dist/types/src/extensions/bookmarks.d.ts.map +1 -0
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.d.ts +11 -11
- package/dist/types/src/extensions/factories.d.ts.map +1 -1
- package/dist/types/src/extensions/focus.d.ts.map +1 -1
- package/dist/types/src/extensions/folding.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +10 -1
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/json.d.ts +1 -1
- package/dist/types/src/extensions/json.d.ts.map +1 -1
- package/dist/types/src/extensions/listener.d.ts +8 -6
- package/dist/types/src/extensions/listener.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/bundle.d.ts +8 -2
- package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/changes.d.ts +1 -1
- package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts +9 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts +1 -3
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
- package/dist/types/src/extensions/modal.d.ts +7 -0
- package/dist/types/src/extensions/modal.d.ts.map +1 -0
- package/dist/types/src/extensions/modes.d.ts +1 -1
- package/dist/types/src/extensions/modes.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/menu.d.ts +8 -0
- package/dist/types/src/extensions/outliner/menu.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner/outliner.d.ts +1 -1
- package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/tree.d.ts +1 -1
- package/dist/types/src/extensions/outliner/tree.d.ts.map +1 -1
- package/dist/types/src/extensions/preview/preview.d.ts +8 -8
- package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
- package/dist/types/src/extensions/replacer.d.ts +21 -0
- package/dist/types/src/extensions/replacer.d.ts.map +1 -0
- package/dist/types/src/extensions/replacer.test.d.ts +2 -0
- package/dist/types/src/extensions/replacer.test.d.ts.map +1 -0
- package/dist/types/src/extensions/scrolling.d.ts +78 -0
- package/dist/types/src/extensions/scrolling.d.ts.map +1 -0
- package/dist/types/src/extensions/state.d.ts +2 -0
- package/dist/types/src/extensions/state.d.ts.map +1 -0
- package/dist/types/src/extensions/submit.d.ts +10 -0
- package/dist/types/src/extensions/submit.d.ts.map +1 -0
- package/dist/types/src/extensions/tab.d.ts +4 -0
- package/dist/types/src/extensions/tab.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/extended-markdown.d.ts +10 -0
- package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +2 -0
- package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/index.d.ts +4 -0
- package/dist/types/src/extensions/tags/index.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/streamer.d.ts +12 -0
- package/dist/types/src/extensions/tags/streamer.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/xml-tags.d.ts +97 -0
- package/dist/types/src/extensions/tags/xml-tags.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/xml-util.d.ts +10 -0
- package/dist/types/src/extensions/tags/xml-util.d.ts.map +1 -0
- package/dist/types/src/hooks/useTextEditor.d.ts +5 -9
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/stories/CommandDialog.stories.d.ts +14 -0
- package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Comments.stories.d.ts +21 -10
- package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/stories/EditorToolbar.stories.d.ts +39 -3
- package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Experimental.stories.d.ts +22 -13
- package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Markdown.stories.d.ts +32 -43
- package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Outliner.stories.d.ts +15 -21
- package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Popover.stories.d.ts +20 -0
- package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Preview.stories.d.ts +22 -7
- package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Tags.stories.d.ts +16 -0
- package/dist/types/src/stories/Tags.stories.d.ts.map +1 -0
- package/dist/types/src/stories/TextEditor.stories.d.ts +37 -52
- package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
- package/dist/types/src/stories/components/EditorStory.d.ts +8 -9
- package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
- package/dist/types/src/stories/components/util.d.ts.map +1 -1
- package/dist/types/src/styles/theme.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -1
- package/dist/types/src/types/types.d.ts +2 -2
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util/debug.d.ts +5 -1
- package/dist/types/src/util/debug.d.ts.map +1 -1
- package/dist/types/src/util/decorations.d.ts +4 -0
- package/dist/types/src/util/decorations.d.ts.map +1 -0
- package/dist/types/src/util/dom.d.ts +2 -12
- package/dist/types/src/util/dom.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +1 -0
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/react.d.ts +1 -1
- package/dist/types/src/util/react.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +70 -68
- package/src/components/Editor/Editor.stories.tsx +89 -0
- package/src/components/Editor/Editor.tsx +160 -25
- package/src/components/EditorContent/EditorContent.stories.tsx +70 -0
- package/src/components/EditorContent/EditorContent.tsx +70 -0
- package/src/components/EditorContent/controller.ts +50 -0
- package/src/components/EditorContent/index.ts +6 -0
- package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +233 -0
- package/src/components/EditorMenuProvider/index.ts +11 -0
- package/src/components/EditorMenuProvider/menu-presets.ts +123 -0
- package/src/components/EditorMenuProvider/menu.ts +71 -0
- package/src/components/EditorMenuProvider/popover.ts +287 -0
- package/src/components/EditorMenuProvider/useEditorMenu.ts +175 -0
- package/src/components/EditorMenuProvider/util.ts +31 -0
- package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +82 -0
- package/src/components/EditorPreviewProvider/index.ts +5 -0
- package/src/components/EditorToolbar/EditorToolbar.tsx +116 -96
- package/src/components/EditorToolbar/actions.ts +86 -0
- package/src/components/EditorToolbar/blocks.ts +20 -23
- package/src/components/EditorToolbar/formatting.ts +21 -24
- package/src/components/EditorToolbar/headings.ts +16 -9
- package/src/components/EditorToolbar/image.ts +9 -5
- package/src/components/EditorToolbar/index.ts +3 -7
- package/src/components/EditorToolbar/search.ts +9 -5
- package/src/components/EditorToolbar/useEditorToolbar.ts +20 -0
- package/src/components/EditorToolbar/view-mode.ts +11 -6
- package/src/components/index.ts +8 -2
- package/src/defaults.ts +5 -2
- package/src/extensions/autocomplete/autocomplete.ts +151 -0
- package/src/extensions/autocomplete/index.ts +8 -0
- package/src/extensions/autocomplete/match.ts +46 -0
- package/src/extensions/{command → autocomplete}/placeholder.ts +21 -17
- package/src/extensions/{command → autocomplete}/typeahead.ts +6 -48
- package/src/extensions/automerge/automerge.stories.tsx +28 -21
- package/src/extensions/automerge/automerge.ts +28 -9
- package/src/extensions/automerge/cursor.ts +1 -1
- package/src/extensions/automerge/sync.ts +8 -4
- package/src/extensions/automerge/update-automerge.ts +1 -1
- package/src/extensions/autoscroll.ts +163 -0
- package/src/extensions/awareness/awareness-provider.ts +2 -2
- package/src/extensions/blocks.ts +131 -0
- package/src/extensions/bookmarks.ts +75 -0
- package/src/extensions/comments.ts +13 -8
- package/src/extensions/factories.ts +50 -32
- package/src/extensions/focus.ts +5 -4
- package/src/extensions/folding.tsx +3 -6
- package/src/extensions/hashtag.tsx +2 -2
- package/src/extensions/index.ts +10 -1
- package/src/extensions/json.ts +1 -1
- package/src/extensions/listener.ts +14 -20
- package/src/extensions/markdown/bundle.ts +39 -5
- package/src/extensions/markdown/decorate.ts +26 -17
- package/src/extensions/markdown/formatting.ts +8 -10
- package/src/extensions/markdown/highlight.ts +1 -1
- package/src/extensions/markdown/image.ts +5 -6
- package/src/extensions/markdown/link.ts +3 -0
- package/src/extensions/markdown/table.ts +13 -7
- package/src/extensions/modal.ts +24 -0
- package/src/extensions/modes.ts +2 -2
- package/src/extensions/{command/floating-menu.ts → outliner/menu.ts} +16 -21
- package/src/extensions/outliner/outliner.test.ts +1 -1
- package/src/extensions/outliner/outliner.ts +5 -5
- package/src/extensions/outliner/tree.test.ts +1 -1
- package/src/extensions/outliner/tree.ts +1 -1
- package/src/extensions/preview/index.ts +1 -1
- package/src/extensions/preview/preview.ts +69 -69
- package/src/extensions/replacer.test.ts +75 -0
- package/src/extensions/replacer.ts +93 -0
- package/src/extensions/scrolling.ts +189 -0
- package/src/extensions/selection.ts +3 -3
- package/src/extensions/state.ts +7 -0
- package/src/extensions/submit.ts +62 -0
- package/src/extensions/tab.ts +29 -0
- package/src/extensions/tags/extended-markdown.test.ts +262 -0
- package/src/extensions/tags/extended-markdown.ts +78 -0
- package/src/extensions/tags/index.ts +7 -0
- package/src/extensions/tags/streamer.ts +243 -0
- package/src/extensions/tags/xml-tags.ts +500 -0
- package/src/extensions/tags/xml-util.ts +94 -0
- package/src/extensions/typewriter.ts +1 -1
- package/src/hooks/useTextEditor.ts +31 -43
- package/src/stories/CommandDialog.stories.tsx +83 -0
- package/src/stories/Comments.stories.tsx +15 -13
- package/src/stories/EditorToolbar.stories.tsx +18 -17
- package/src/stories/Experimental.stories.tsx +15 -12
- package/src/stories/Markdown.stories.tsx +24 -21
- package/src/stories/Outliner.stories.tsx +50 -39
- package/src/stories/Popover.stories.tsx +162 -0
- package/src/stories/Preview.stories.tsx +52 -46
- package/src/stories/Tags.stories.tsx +95 -0
- package/src/stories/TextEditor.stories.tsx +30 -50
- package/src/stories/components/EditorStory.tsx +32 -20
- package/src/stories/components/util.tsx +40 -8
- package/src/styles/markdown.ts +1 -1
- package/src/styles/theme.ts +16 -13
- package/src/translations.ts +1 -1
- package/src/types/types.ts +1 -1
- package/src/util/debug.ts +7 -2
- package/src/util/decorations.ts +21 -0
- package/src/util/dom.ts +5 -27
- package/src/util/index.ts +1 -0
- package/src/util/react.tsx +1 -1
- package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
- package/dist/lib/browser/testing/index.mjs +0 -6
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
- package/dist/lib/node-esm/testing/index.mjs +0 -8
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/types/src/components/EditorToolbar/lists.d.ts +0 -19
- package/dist/types/src/components/EditorToolbar/lists.d.ts.map +0 -1
- package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
- package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
- package/dist/types/src/components/Popover/CommandMenu.d.ts +0 -34
- package/dist/types/src/components/Popover/CommandMenu.d.ts.map +0 -1
- package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +0 -21
- package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +0 -1
- package/dist/types/src/components/Popover/RefPopover.d.ts +0 -34
- package/dist/types/src/components/Popover/RefPopover.d.ts.map +0 -1
- package/dist/types/src/components/Popover/index.d.ts +0 -4
- package/dist/types/src/components/Popover/index.d.ts.map +0 -1
- package/dist/types/src/extensions/autocomplete.d.ts +0 -13
- package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
- package/dist/types/src/extensions/command/action.d.ts +0 -17
- package/dist/types/src/extensions/command/action.d.ts.map +0 -1
- package/dist/types/src/extensions/command/command-menu.d.ts +0 -20
- package/dist/types/src/extensions/command/command-menu.d.ts.map +0 -1
- package/dist/types/src/extensions/command/command.d.ts +0 -6
- package/dist/types/src/extensions/command/command.d.ts.map +0 -1
- package/dist/types/src/extensions/command/floating-menu.d.ts +0 -7
- package/dist/types/src/extensions/command/floating-menu.d.ts.map +0 -1
- package/dist/types/src/extensions/command/hint.d.ts +0 -24
- package/dist/types/src/extensions/command/hint.d.ts.map +0 -1
- package/dist/types/src/extensions/command/index.d.ts +0 -7
- package/dist/types/src/extensions/command/index.d.ts.map +0 -1
- package/dist/types/src/extensions/command/placeholder.d.ts +0 -10
- package/dist/types/src/extensions/command/placeholder.d.ts.map +0 -1
- package/dist/types/src/extensions/command/state.d.ts +0 -16
- package/dist/types/src/extensions/command/state.d.ts.map +0 -1
- package/dist/types/src/extensions/command/typeahead.d.ts +0 -22
- package/dist/types/src/extensions/command/typeahead.d.ts.map +0 -1
- package/dist/types/src/extensions/command/useCommandMenu.d.ts +0 -26
- package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +0 -1
- package/dist/types/src/stories/Command.stories.d.ts +0 -7
- package/dist/types/src/stories/Command.stories.d.ts.map +0 -1
- package/dist/types/src/stories/CommandMenu.stories.d.ts +0 -13
- package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
- package/dist/types/src/testing/index.d.ts +0 -2
- package/dist/types/src/testing/index.d.ts.map +0 -1
- package/dist/types/src/testing/util.d.ts +0 -3
- package/dist/types/src/testing/util.d.ts.map +0 -1
- package/src/components/EditorToolbar/lists.ts +0 -60
- package/src/components/EditorToolbar/util.ts +0 -65
- package/src/components/Popover/CommandMenu.tsx +0 -279
- package/src/components/Popover/RefDropdownMenu.tsx +0 -85
- package/src/components/Popover/RefPopover.tsx +0 -99
- package/src/components/Popover/index.ts +0 -7
- package/src/extensions/autocomplete.ts +0 -69
- package/src/extensions/command/action.ts +0 -56
- package/src/extensions/command/command-menu.ts +0 -211
- package/src/extensions/command/command.ts +0 -34
- package/src/extensions/command/hint.ts +0 -103
- package/src/extensions/command/index.ts +0 -10
- package/src/extensions/command/state.ts +0 -90
- package/src/extensions/command/useCommandMenu.ts +0 -119
- package/src/stories/Command.stories.tsx +0 -98
- package/src/stories/CommandMenu.stories.tsx +0 -160
- package/src/testing/index.ts +0 -5
- package/src/testing/util.ts +0 -7
package/src/extensions/index.ts
CHANGED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
export * from './annotations';
|
|
6
6
|
export * from './autocomplete';
|
|
7
|
+
export * from './autoscroll';
|
|
7
8
|
export * from './automerge';
|
|
8
9
|
export * from './awareness';
|
|
9
10
|
export * from './blast';
|
|
10
|
-
export * from './
|
|
11
|
+
export * from './blocks';
|
|
12
|
+
export * from './bookmarks';
|
|
11
13
|
export * from './comments';
|
|
12
14
|
export * from './debug';
|
|
13
15
|
export * from './dnd';
|
|
@@ -19,8 +21,15 @@ export * from './json';
|
|
|
19
21
|
export * from './listener';
|
|
20
22
|
export * from './markdown';
|
|
21
23
|
export * from './mention';
|
|
24
|
+
export * from './modal';
|
|
22
25
|
export * from './modes';
|
|
23
26
|
export * from './outliner';
|
|
24
27
|
export * from './preview';
|
|
28
|
+
export * from './replacer';
|
|
25
29
|
export * from './selection';
|
|
30
|
+
export * from './scrolling';
|
|
31
|
+
export * from './state';
|
|
32
|
+
export * from './submit';
|
|
33
|
+
export * from './tab';
|
|
34
|
+
export * from './tags';
|
|
26
35
|
export * from './typewriter';
|
package/src/extensions/json.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { type LintSource, linter } from '@codemirror/lint';
|
|
|
7
7
|
import { type Extension } from '@codemirror/state';
|
|
8
8
|
import Ajv, { type ValidateFunction } from 'ajv';
|
|
9
9
|
|
|
10
|
-
import { type JsonSchemaType } from '@dxos/echo
|
|
10
|
+
import { type JsonSchemaType } from '@dxos/echo/internal';
|
|
11
11
|
|
|
12
12
|
export type JsonExtensionsOptions = {
|
|
13
13
|
schema?: JsonSchemaType;
|
|
@@ -5,34 +5,28 @@
|
|
|
5
5
|
import { type Extension } from '@codemirror/state';
|
|
6
6
|
import { EditorView } from '@codemirror/view';
|
|
7
7
|
|
|
8
|
+
import { isNonNullable } from '@dxos/util';
|
|
9
|
+
|
|
8
10
|
import { documentId } from './selection';
|
|
9
11
|
|
|
10
12
|
export type ListenerOptions = {
|
|
11
|
-
onFocus?: (focusing: boolean) => void;
|
|
12
|
-
onChange?: (
|
|
13
|
+
onFocus?: (event: { id: string; focusing: boolean }) => void;
|
|
14
|
+
onChange?: (event: { id: string; text: string }) => void;
|
|
13
15
|
};
|
|
14
16
|
|
|
15
|
-
/**
|
|
16
|
-
* Event listener.
|
|
17
|
-
* @deprecated Use EditorView.updateListener and listen for specific update events.
|
|
18
|
-
*/
|
|
19
17
|
export const listener = ({ onFocus, onChange }: ListenerOptions): Extension => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
EditorView.focusChangeEffect.of((_, focusing) => {
|
|
25
|
-
onFocus(focusing);
|
|
18
|
+
return [
|
|
19
|
+
onFocus &&
|
|
20
|
+
EditorView.focusChangeEffect.of((state, focusing) => {
|
|
21
|
+
onFocus({ id: state.facet(documentId), focusing });
|
|
26
22
|
return null;
|
|
27
23
|
}),
|
|
28
|
-
);
|
|
29
24
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
onChange &&
|
|
26
|
+
EditorView.updateListener.of(({ state, docChanged }) => {
|
|
27
|
+
if (docChanged) {
|
|
28
|
+
onChange({ id: state.facet(documentId), text: state.doc.toString() });
|
|
29
|
+
}
|
|
34
30
|
}),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return extensions;
|
|
31
|
+
].filter(isNonNullable);
|
|
38
32
|
};
|
|
@@ -4,20 +4,23 @@
|
|
|
4
4
|
|
|
5
5
|
import { completionKeymap } from '@codemirror/autocomplete';
|
|
6
6
|
import { defaultKeymap, indentWithTab } from '@codemirror/commands';
|
|
7
|
+
import { jsonLanguage } from '@codemirror/lang-json';
|
|
7
8
|
import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
|
|
8
|
-
import {
|
|
9
|
+
import { xml } from '@codemirror/lang-xml';
|
|
10
|
+
import { LanguageDescription, syntaxHighlighting } from '@codemirror/language';
|
|
9
11
|
import { languages } from '@codemirror/language-data';
|
|
10
12
|
import { type Extension } from '@codemirror/state';
|
|
11
13
|
import { keymap } from '@codemirror/view';
|
|
14
|
+
import { type MarkdownConfig } from '@lezer/markdown';
|
|
12
15
|
|
|
13
|
-
import {
|
|
14
|
-
import { isNotFalsy } from '@dxos/util';
|
|
16
|
+
import { isTruthy } from '@dxos/util';
|
|
15
17
|
|
|
16
18
|
import { markdownHighlightStyle, markdownTagsExtensions } from './highlight';
|
|
17
19
|
|
|
18
20
|
export type MarkdownBundleOptions = {
|
|
19
|
-
|
|
21
|
+
extensions?: MarkdownConfig[];
|
|
20
22
|
indentWithTab?: boolean;
|
|
23
|
+
setextHeading?: boolean;
|
|
21
24
|
};
|
|
22
25
|
|
|
23
26
|
/**
|
|
@@ -42,6 +45,7 @@ export const createMarkdownExtensions = (options: MarkdownBundleOptions = {}): E
|
|
|
42
45
|
base: markdownLanguage,
|
|
43
46
|
|
|
44
47
|
// Languages for syntax highlighting fenced code blocks.
|
|
48
|
+
defaultCodeLanguage: jsonLanguage,
|
|
45
49
|
codeLanguages: languages,
|
|
46
50
|
|
|
47
51
|
// Don't complete HTML tags.
|
|
@@ -51,6 +55,7 @@ export const createMarkdownExtensions = (options: MarkdownBundleOptions = {}): E
|
|
|
51
55
|
extensions: [
|
|
52
56
|
// GFM provided by default.
|
|
53
57
|
markdownTagsExtensions,
|
|
58
|
+
...(options.extensions ?? defaultExtensions()),
|
|
54
59
|
],
|
|
55
60
|
}),
|
|
56
61
|
|
|
@@ -64,8 +69,37 @@ export const createMarkdownExtensions = (options: MarkdownBundleOptions = {}): E
|
|
|
64
69
|
|
|
65
70
|
// https://codemirror.net/docs/ref/#commands.defaultKeymap
|
|
66
71
|
...defaultKeymap,
|
|
72
|
+
|
|
73
|
+
// TODO(burdon): Remove?
|
|
67
74
|
...completionKeymap,
|
|
68
|
-
].filter(
|
|
75
|
+
].filter(isTruthy),
|
|
69
76
|
),
|
|
70
77
|
];
|
|
71
78
|
};
|
|
79
|
+
|
|
80
|
+
const xmlLanguageDesc = LanguageDescription.of({
|
|
81
|
+
name: 'xml',
|
|
82
|
+
alias: ['html', 'xhtml'],
|
|
83
|
+
extensions: ['xml', 'xhtml'],
|
|
84
|
+
load: async () => xml(),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Default customizations.
|
|
89
|
+
* https://github.com/lezer-parser/markdown/blob/main/src/markdown.ts
|
|
90
|
+
*/
|
|
91
|
+
export const defaultExtensions = (): MarkdownConfig[] => [noSetExtHeading, noHtml];
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Remove SetextHeading (e.g., headings created from "---").
|
|
95
|
+
*/
|
|
96
|
+
const noSetExtHeading: MarkdownConfig = {
|
|
97
|
+
remove: ['SetextHeading'],
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Remove HTML and XML parsing.
|
|
102
|
+
*/
|
|
103
|
+
const noHtml: MarkdownConfig = {
|
|
104
|
+
// remove: ['HTMLBlock', 'HTMLTag'],
|
|
105
|
+
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { syntaxTree } from '@codemirror/language';
|
|
6
|
-
import { type EditorState, RangeSetBuilder, StateEffect } from '@codemirror/state';
|
|
6
|
+
import { type EditorState, Prec, RangeSetBuilder, StateEffect } from '@codemirror/state';
|
|
7
7
|
import { Decoration, type DecorationSet, EditorView, ViewPlugin, type ViewUpdate, WidgetType } from '@codemirror/view';
|
|
8
8
|
import { type SyntaxNodeRef } from '@lezer/common';
|
|
9
9
|
|
|
@@ -52,12 +52,12 @@ class LinkButton extends WidgetType {
|
|
|
52
52
|
super();
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
override eq(other: this)
|
|
55
|
+
override eq(other: this) {
|
|
56
56
|
return this.url === other.url;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// TODO(burdon): Create icon and link directly without react?
|
|
60
|
-
override toDOM(view: EditorView)
|
|
60
|
+
override toDOM(view: EditorView) {
|
|
61
61
|
const el = document.createElement('span');
|
|
62
62
|
this.render(el, { url: this.url }, view);
|
|
63
63
|
return el;
|
|
@@ -69,11 +69,15 @@ class CheckboxWidget extends WidgetType {
|
|
|
69
69
|
super();
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
override eq(other: this)
|
|
72
|
+
override eq(other: this) {
|
|
73
73
|
return this._checked === other._checked;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
override
|
|
76
|
+
override ignoreEvent() {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
override toDOM(view: EditorView) {
|
|
77
81
|
const input = document.createElement('input');
|
|
78
82
|
input.className = 'cm-task-checkbox dx-checkbox';
|
|
79
83
|
input.type = 'checkbox';
|
|
@@ -105,10 +109,6 @@ class CheckboxWidget extends WidgetType {
|
|
|
105
109
|
span.appendChild(input);
|
|
106
110
|
return span;
|
|
107
111
|
}
|
|
108
|
-
|
|
109
|
-
override ignoreEvent(): boolean {
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
class TextWidget extends WidgetType {
|
|
@@ -234,7 +234,7 @@ const buildDecorations = (view: EditorView, options: DecorateOptions, focus: boo
|
|
|
234
234
|
const mark = node.node.firstChild!;
|
|
235
235
|
if (mark?.name === 'HeaderMark') {
|
|
236
236
|
const { from, to = 6 } = options.numberedHeadings ?? {};
|
|
237
|
-
const text =
|
|
237
|
+
const text = state.sliceDoc(node.from, node.to);
|
|
238
238
|
const len = text.match(/[#\s]+/)![0].length;
|
|
239
239
|
if (!from || level < from || level > to) {
|
|
240
240
|
atomicDeco.add(mark.from, mark.from + len, hide);
|
|
@@ -427,6 +427,9 @@ const buildDecorations = (view: EditorView, options: DecorateOptions, focus: boo
|
|
|
427
427
|
const editing = editingRange(state, node, focus);
|
|
428
428
|
if (urlNode && marks.length >= 2) {
|
|
429
429
|
const url = state.sliceDoc(urlNode.from, urlNode.to);
|
|
430
|
+
if (options.skip?.({ name: 'Link', url })) {
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
430
433
|
if (!editing) {
|
|
431
434
|
atomicDeco.add(node.from, marks[0].to, hide);
|
|
432
435
|
}
|
|
@@ -444,6 +447,7 @@ const buildDecorations = (view: EditorView, options: DecorateOptions, focus: boo
|
|
|
444
447
|
},
|
|
445
448
|
}),
|
|
446
449
|
);
|
|
450
|
+
|
|
447
451
|
if (!editing) {
|
|
448
452
|
atomicDeco.add(
|
|
449
453
|
marks[1].from,
|
|
@@ -494,15 +498,15 @@ const buildDecorations = (view: EditorView, options: DecorateOptions, focus: boo
|
|
|
494
498
|
tree.iterate({
|
|
495
499
|
from,
|
|
496
500
|
to,
|
|
497
|
-
enter: wrapWithCatch(enterNode),
|
|
498
|
-
leave: wrapWithCatch(leaveNode),
|
|
501
|
+
enter: wrapWithCatch(enterNode, 'decorate.enter'),
|
|
502
|
+
leave: wrapWithCatch(leaveNode, 'decorate.leave'),
|
|
499
503
|
});
|
|
500
504
|
}
|
|
501
505
|
} else {
|
|
502
506
|
// NOTE: If line numbering then we must iterate from the start of document.
|
|
503
507
|
tree.iterate({
|
|
504
|
-
enter: wrapWithCatch(enterNode),
|
|
505
|
-
leave: wrapWithCatch(leaveNode),
|
|
508
|
+
enter: wrapWithCatch(enterNode, 'decorate.enter'),
|
|
509
|
+
leave: wrapWithCatch(leaveNode, 'decorate.leave'),
|
|
506
510
|
});
|
|
507
511
|
}
|
|
508
512
|
|
|
@@ -514,15 +518,20 @@ const buildDecorations = (view: EditorView, options: DecorateOptions, focus: boo
|
|
|
514
518
|
|
|
515
519
|
const forceUpdate = StateEffect.define<null>();
|
|
516
520
|
|
|
521
|
+
export type NodeData = { name: 'Link'; url: string } | { name: 'Image'; url: string };
|
|
522
|
+
|
|
517
523
|
export interface DecorateOptions {
|
|
518
524
|
/**
|
|
519
525
|
* Prevents triggering decorations as the cursor moves through the document.
|
|
520
526
|
*/
|
|
521
527
|
selectionChangeDelay?: number;
|
|
522
528
|
numberedHeadings?: { from: number; to?: number };
|
|
523
|
-
renderLinkButton?: RenderCallback<{ url: string }>;
|
|
524
529
|
// TODO(burdon): Additional padding for each line.
|
|
525
530
|
listPaddingLeft?: number;
|
|
531
|
+
// TODO(burdon): Use consistently.
|
|
532
|
+
skip?: (node: NodeData) => boolean;
|
|
533
|
+
// TODO(burdon): Remove.
|
|
534
|
+
renderLinkButton?: RenderCallback<{ url: string }>;
|
|
526
535
|
}
|
|
527
536
|
|
|
528
537
|
export const decorateMarkdown = (options: DecorateOptions = {}) => {
|
|
@@ -578,9 +587,9 @@ export const decorateMarkdown = (options: DecorateOptions = {}) => {
|
|
|
578
587
|
},
|
|
579
588
|
{
|
|
580
589
|
provide: (plugin) => [
|
|
581
|
-
EditorView.
|
|
590
|
+
Prec.low(EditorView.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration.none)),
|
|
582
591
|
EditorView.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration.none),
|
|
583
|
-
EditorView.
|
|
592
|
+
EditorView.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration.none),
|
|
584
593
|
],
|
|
585
594
|
},
|
|
586
595
|
),
|
|
@@ -15,12 +15,8 @@ import {
|
|
|
15
15
|
} from '@codemirror/state';
|
|
16
16
|
import { EditorView, type ViewUpdate, keymap } from '@codemirror/view';
|
|
17
17
|
import { type SyntaxNode, type SyntaxNodeRef } from '@lezer/common';
|
|
18
|
-
import { useCallback, useMemo } from 'react';
|
|
19
18
|
|
|
20
19
|
import { debounceAndThrottle } from '@dxos/async';
|
|
21
|
-
import { type Live } from '@dxos/live-object';
|
|
22
|
-
|
|
23
|
-
import { type EditorToolbarState } from '../../components';
|
|
24
20
|
|
|
25
21
|
// Markdown refs:
|
|
26
22
|
// https://github.github.com/gfm
|
|
@@ -1251,17 +1247,19 @@ export const getFormatting = (state: EditorState): Formatting => {
|
|
|
1251
1247
|
/**
|
|
1252
1248
|
* Hook provides an extension to compute the current formatting state.
|
|
1253
1249
|
*/
|
|
1254
|
-
export const
|
|
1255
|
-
|
|
1250
|
+
export const formattingListener = (stateProvider: () => Formatting | undefined, delay = 100): Extension => {
|
|
1251
|
+
return EditorView.updateListener.of(
|
|
1256
1252
|
debounceAndThrottle((update: ViewUpdate) => {
|
|
1257
1253
|
if (update.docChanged || update.selectionSet) {
|
|
1254
|
+
const state = stateProvider();
|
|
1255
|
+
if (!state) {
|
|
1256
|
+
return;
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1258
1259
|
Object.entries(getFormatting(update.state)).forEach(([key, active]) => {
|
|
1259
1260
|
state[key as keyof Formatting] = active as any;
|
|
1260
1261
|
});
|
|
1261
1262
|
}
|
|
1262
|
-
},
|
|
1263
|
-
[state],
|
|
1263
|
+
}, delay),
|
|
1264
1264
|
);
|
|
1265
|
-
|
|
1266
|
-
return useMemo(() => EditorView.updateListener.of(handleUpdate), [handleUpdate]);
|
|
1267
1265
|
};
|
|
@@ -17,8 +17,7 @@ export const image = (_options: ImageOptions = {}): Extension => {
|
|
|
17
17
|
return [
|
|
18
18
|
StateField.define<DecorationSet>({
|
|
19
19
|
create: (state) => {
|
|
20
|
-
|
|
21
|
-
return Decoration.set(buildDecorations(0, state.doc.length, state));
|
|
20
|
+
return Decoration.set(buildDecorations(state, 0, state.doc.length));
|
|
22
21
|
},
|
|
23
22
|
update: (value: DecorationSet, tr: Transaction) => {
|
|
24
23
|
if (!tr.docChanged && !tr.selection) {
|
|
@@ -43,7 +42,7 @@ export const image = (_options: ImageOptions = {}): Extension => {
|
|
|
43
42
|
filterFrom: from,
|
|
44
43
|
filterTo: to,
|
|
45
44
|
filter: () => false,
|
|
46
|
-
add: buildDecorations(from, to
|
|
45
|
+
add: buildDecorations(tr.state, from, to),
|
|
47
46
|
});
|
|
48
47
|
},
|
|
49
48
|
provide: (field) => EditorView.decorations.from(field),
|
|
@@ -51,7 +50,7 @@ export const image = (_options: ImageOptions = {}): Extension => {
|
|
|
51
50
|
];
|
|
52
51
|
};
|
|
53
52
|
|
|
54
|
-
const buildDecorations = (
|
|
53
|
+
const buildDecorations = (state: EditorState, from: number, to: number) => {
|
|
55
54
|
const decorations: Range<Decoration>[] = [];
|
|
56
55
|
const cursor = state.selection.main.head;
|
|
57
56
|
syntaxTree(state).iterate({
|
|
@@ -99,11 +98,11 @@ class ImageWidget extends WidgetType {
|
|
|
99
98
|
super();
|
|
100
99
|
}
|
|
101
100
|
|
|
102
|
-
override eq(other: this)
|
|
101
|
+
override eq(other: this) {
|
|
103
102
|
return this._url === other._url;
|
|
104
103
|
}
|
|
105
104
|
|
|
106
|
-
override toDOM(view: EditorView)
|
|
105
|
+
override toDOM(view: EditorView) {
|
|
107
106
|
const img = document.createElement('img');
|
|
108
107
|
img.setAttribute('src', this._url);
|
|
109
108
|
img.setAttribute('class', 'cm-image');
|
|
@@ -94,7 +94,13 @@ const update = (state: EditorState, _options: TableOptions) => {
|
|
|
94
94
|
} else {
|
|
95
95
|
// Add class for styling.
|
|
96
96
|
// TODO(burdon): Apply to each line?
|
|
97
|
-
builder.add(
|
|
97
|
+
builder.add(
|
|
98
|
+
table.from,
|
|
99
|
+
table.to,
|
|
100
|
+
Decoration.mark({
|
|
101
|
+
class: 'cm-table',
|
|
102
|
+
}),
|
|
103
|
+
);
|
|
98
104
|
}
|
|
99
105
|
});
|
|
100
106
|
|
|
@@ -106,14 +112,18 @@ class TableWidget extends WidgetType {
|
|
|
106
112
|
super();
|
|
107
113
|
}
|
|
108
114
|
|
|
109
|
-
override eq(other: this)
|
|
115
|
+
override eq(other: this) {
|
|
110
116
|
return (
|
|
111
117
|
this._table.header?.join() === other._table.header?.join() &&
|
|
112
118
|
this._table.rows?.join() === other._table.rows?.join()
|
|
113
119
|
);
|
|
114
120
|
}
|
|
115
121
|
|
|
116
|
-
override
|
|
122
|
+
override ignoreEvent(e: Event): boolean {
|
|
123
|
+
return !/^mouse/.test(e.type);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
override toDOM(_view: EditorView) {
|
|
117
127
|
const div = document.createElement('div');
|
|
118
128
|
const table = div.appendChild(document.createElement('table'));
|
|
119
129
|
|
|
@@ -137,8 +147,4 @@ class TableWidget extends WidgetType {
|
|
|
137
147
|
|
|
138
148
|
return div;
|
|
139
149
|
}
|
|
140
|
-
|
|
141
|
-
override ignoreEvent(e: Event): boolean {
|
|
142
|
-
return !/^mouse/.test(e.type);
|
|
143
|
-
}
|
|
144
150
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { StateEffect, StateField } from '@codemirror/state';
|
|
6
|
+
|
|
7
|
+
export const modalStateEffect = StateEffect.define<boolean>();
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Determines if a modal dialog (e.g., popover) is active.
|
|
11
|
+
*/
|
|
12
|
+
export const modalStateField = StateField.define<boolean>({
|
|
13
|
+
create: () => false,
|
|
14
|
+
update: (value, tr) => {
|
|
15
|
+
let newValue = value;
|
|
16
|
+
for (const effect of tr.effects) {
|
|
17
|
+
if (effect.is(modalStateEffect)) {
|
|
18
|
+
newValue = effect.value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return newValue;
|
|
23
|
+
},
|
|
24
|
+
});
|
package/src/extensions/modes.ts
CHANGED
|
@@ -11,7 +11,7 @@ import { singleValueFacet } from '../util';
|
|
|
11
11
|
|
|
12
12
|
export type EditorInputConfig = {
|
|
13
13
|
type?: string;
|
|
14
|
-
|
|
14
|
+
ignoreEscape?: boolean;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
export const editorInputMode = singleValueFacet<EditorInputConfig>({});
|
|
@@ -26,7 +26,7 @@ export const InputModeExtensions: { [mode: string]: Extension } = {
|
|
|
26
26
|
vim: [
|
|
27
27
|
// https://github.com/replit/codemirror-vim
|
|
28
28
|
vim(),
|
|
29
|
-
editorInputMode.of({ type: 'vim',
|
|
29
|
+
editorInputMode.of({ type: 'vim', ignoreEscape: true }),
|
|
30
30
|
keymap.of([
|
|
31
31
|
{
|
|
32
32
|
key: 'Alt-Escape',
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { type Extension } from '@codemirror/state';
|
|
5
6
|
import { EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';
|
|
6
7
|
|
|
7
8
|
import { type CleanupFn, addEventListener } from '@dxos/async';
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export type FloatingMenuOptions = {
|
|
10
|
+
export type MenuOptions = {
|
|
12
11
|
icon?: string;
|
|
13
12
|
height?: number;
|
|
14
13
|
padding?: number;
|
|
15
14
|
};
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
// TODO(burdon): Replace with popover.
|
|
17
|
+
export const menu = (options: MenuOptions = {}): Extension => [
|
|
18
18
|
ViewPlugin.fromClass(
|
|
19
19
|
class {
|
|
20
20
|
view: EditorView;
|
|
@@ -34,12 +34,10 @@ export const floatingMenu = (options: FloatingMenuOptions = {}) => [
|
|
|
34
34
|
{
|
|
35
35
|
const icon = document.createElement('dx-icon');
|
|
36
36
|
icon.setAttribute('icon', options.icon ?? 'ph--dots-three-vertical--regular');
|
|
37
|
-
const button = document.createElement('button');
|
|
38
|
-
button.appendChild(icon);
|
|
39
37
|
|
|
40
|
-
this.tag = document.createElement('dx-
|
|
41
|
-
this.tag.classList.add('cm-
|
|
42
|
-
this.tag.appendChild(
|
|
38
|
+
this.tag = document.createElement('dx-anchor');
|
|
39
|
+
this.tag.classList.add('cm-popover-trigger');
|
|
40
|
+
this.tag.appendChild(icon);
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
container.appendChild(this.tag);
|
|
@@ -65,12 +63,12 @@ export const floatingMenu = (options: FloatingMenuOptions = {}) => [
|
|
|
65
63
|
}
|
|
66
64
|
|
|
67
65
|
// TODO(burdon): Timer to fade in/out.
|
|
68
|
-
if (update.transactions.some((tr) => tr.effects.some((effect) => effect.is(openEffect)))) {
|
|
66
|
+
/*if (update.transactions.some((tr) => tr.effects.some((effect) => effect.is(openEffect)))) {
|
|
69
67
|
this.tag.style.display = 'none';
|
|
70
68
|
this.tag.classList.add('opacity-10');
|
|
71
69
|
} else if (update.transactions.some((tr) => tr.effects.some((effect) => effect.is(closeEffect)))) {
|
|
72
|
-
this.tag.style.display = '
|
|
73
|
-
} else if (
|
|
70
|
+
this.tag.style.display = '';
|
|
71
|
+
} else */ if (
|
|
74
72
|
update.docChanged ||
|
|
75
73
|
update.focusChanged ||
|
|
76
74
|
update.geometryChanged ||
|
|
@@ -99,7 +97,7 @@ export const floatingMenu = (options: FloatingMenuOptions = {}) => [
|
|
|
99
97
|
|
|
100
98
|
this.tag.style.top = `${offsetTop}px`;
|
|
101
99
|
this.tag.style.left = `${offsetLeft}px`;
|
|
102
|
-
this.tag.style.display = '
|
|
100
|
+
this.tag.style.display = '';
|
|
103
101
|
}
|
|
104
102
|
|
|
105
103
|
scheduleUpdate() {
|
|
@@ -113,21 +111,18 @@ export const floatingMenu = (options: FloatingMenuOptions = {}) => [
|
|
|
113
111
|
),
|
|
114
112
|
|
|
115
113
|
EditorView.theme({
|
|
116
|
-
'.cm-
|
|
114
|
+
'.cm-popover-trigger': {
|
|
117
115
|
position: 'fixed',
|
|
118
116
|
padding: '0',
|
|
119
117
|
border: 'none',
|
|
120
118
|
opacity: '0',
|
|
121
|
-
},
|
|
122
|
-
'[data-has-focus] & .cm-ref-tag': {
|
|
123
|
-
opacity: '1',
|
|
124
|
-
},
|
|
125
|
-
'.cm-ref-tag button': {
|
|
126
119
|
display: 'grid',
|
|
127
|
-
|
|
128
|
-
justifyContent: 'center',
|
|
120
|
+
placeContent: 'center',
|
|
129
121
|
width: '2rem',
|
|
130
122
|
height: '2rem',
|
|
131
123
|
},
|
|
124
|
+
'&:focus-within .cm-popover-trigger': {
|
|
125
|
+
opacity: '1',
|
|
126
|
+
},
|
|
132
127
|
}),
|
|
133
128
|
];
|
|
@@ -6,7 +6,7 @@ import { EditorSelection, EditorState } from '@codemirror/state';
|
|
|
6
6
|
import { EditorView } from '@codemirror/view';
|
|
7
7
|
import { describe, test } from 'vitest';
|
|
8
8
|
|
|
9
|
-
import { str } from '../../
|
|
9
|
+
import { str } from '../../util';
|
|
10
10
|
import { createMarkdownExtensions } from '../markdown';
|
|
11
11
|
|
|
12
12
|
import { indentItemLess, indentItemMore, moveItemDown, moveItemUp } from './commands';
|
|
@@ -7,11 +7,11 @@ import { Decoration, type DecorationSet, EditorView, ViewPlugin, type ViewUpdate
|
|
|
7
7
|
|
|
8
8
|
import { mx } from '@dxos/react-ui-theme';
|
|
9
9
|
|
|
10
|
-
import { floatingMenu } from '../command';
|
|
11
10
|
import { decorateMarkdown } from '../markdown';
|
|
12
11
|
|
|
13
12
|
import { commands } from './commands';
|
|
14
13
|
import { editor } from './editor';
|
|
14
|
+
import { menu } from './menu';
|
|
15
15
|
import { selectionCompartment, selectionEquals, selectionFacet } from './selection';
|
|
16
16
|
import { outlinerTree, treeFacet } from './tree';
|
|
17
17
|
|
|
@@ -38,7 +38,7 @@ export type OutlinerProps = {};
|
|
|
38
38
|
* - Constrains editor to outline structure.
|
|
39
39
|
* - Supports smart cut-and-paste.
|
|
40
40
|
*/
|
|
41
|
-
export const outliner = (
|
|
41
|
+
export const outliner = (_options: OutlinerProps = {}): Extension => [
|
|
42
42
|
// Commands.
|
|
43
43
|
Prec.highest(commands()),
|
|
44
44
|
|
|
@@ -52,7 +52,7 @@ export const outliner = (options: OutlinerProps = {}): Extension => [
|
|
|
52
52
|
editor(),
|
|
53
53
|
|
|
54
54
|
// Floating menu.
|
|
55
|
-
|
|
55
|
+
menu(),
|
|
56
56
|
|
|
57
57
|
// Line decorations.
|
|
58
58
|
decorations(),
|
|
@@ -157,9 +157,9 @@ const decorations = () => [
|
|
|
157
157
|
},
|
|
158
158
|
|
|
159
159
|
'.cm-list-item-focused': {
|
|
160
|
-
borderColor: 'var(--dx-
|
|
160
|
+
borderColor: 'var(--dx-neutralFocusIndicator)',
|
|
161
161
|
},
|
|
162
|
-
'
|
|
162
|
+
'&:focus-within .cm-list-item-selected': {
|
|
163
163
|
borderColor: 'var(--dx-separator)',
|
|
164
164
|
},
|
|
165
165
|
}),
|
|
@@ -6,8 +6,8 @@ import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
|
|
|
6
6
|
import { EditorState } from '@codemirror/state';
|
|
7
7
|
import { beforeEach, describe, test } from 'vitest';
|
|
8
8
|
|
|
9
|
-
import { str } from '../../testing';
|
|
10
9
|
import { type Range } from '../../types';
|
|
10
|
+
import { str } from '../../util';
|
|
11
11
|
|
|
12
12
|
import { type Item, listItemToString, outlinerTree, treeFacet } from './tree';
|
|
13
13
|
|
|
@@ -195,7 +195,7 @@ export type TreeOptions = {};
|
|
|
195
195
|
* This adds overhead relative to the markdown AST, but allows for efficient traversal of the list items.
|
|
196
196
|
* NOTE: Requires markdown parser to be enabled.
|
|
197
197
|
*/
|
|
198
|
-
export const outlinerTree = (
|
|
198
|
+
export const outlinerTree = (_options: TreeOptions = {}): Extension => {
|
|
199
199
|
const buildTree = (state: EditorState): Tree => {
|
|
200
200
|
let tree: Tree | undefined;
|
|
201
201
|
let parent: Item | undefined;
|