@dxos/ui-editor 0.10.0 → 0.11.0
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/chunk-diff.mjs +935 -0
- package/dist/lib/chunk-diff.mjs.map +1 -0
- package/dist/lib/headless.mjs +2 -0
- package/dist/lib/index.mjs +9937 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/types.mjs +18 -0
- package/dist/lib/types.mjs.map +1 -0
- package/dist/types/src/extensions/{bookmarks.d.ts → behavior/bookmarks.d.ts} +3 -0
- package/dist/types/src/extensions/behavior/bookmarks.d.ts.map +1 -0
- package/dist/types/src/extensions/behavior/dnd.d.ts.map +1 -0
- package/dist/types/src/extensions/behavior/index.d.ts +6 -0
- package/dist/types/src/extensions/behavior/index.d.ts.map +1 -0
- package/dist/types/src/extensions/{listener.d.ts → behavior/listener.d.ts} +3 -0
- package/dist/types/src/extensions/behavior/listener.d.ts.map +1 -0
- package/dist/types/src/extensions/{spacing.d.ts → behavior/spacing.d.ts} +3 -0
- package/dist/types/src/extensions/behavior/spacing.d.ts.map +1 -0
- package/dist/types/src/extensions/behavior/submit.d.ts.map +1 -0
- package/dist/types/src/extensions/collab/automerge/automerge.d.ts.map +1 -0
- package/dist/types/src/extensions/collab/automerge/automerge.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{automerge → collab/automerge}/cursor.d.ts +1 -1
- package/dist/types/src/extensions/collab/automerge/cursor.d.ts.map +1 -0
- package/dist/types/src/extensions/{automerge → collab/automerge}/defs.d.ts +3 -1
- package/dist/types/src/extensions/collab/automerge/defs.d.ts.map +1 -0
- package/dist/types/src/extensions/collab/automerge/index.d.ts +3 -0
- package/dist/types/src/extensions/collab/automerge/index.d.ts.map +1 -0
- package/dist/types/src/extensions/collab/automerge/sync.d.ts.map +1 -0
- package/dist/types/src/extensions/{automerge → collab/automerge}/update-automerge.d.ts +4 -0
- package/dist/types/src/extensions/collab/automerge/update-automerge.d.ts.map +1 -0
- package/dist/types/src/extensions/{automerge → collab/automerge}/update-codemirror.d.ts +4 -0
- package/dist/types/src/extensions/collab/automerge/update-codemirror.d.ts.map +1 -0
- package/dist/types/src/extensions/collab/awareness/awareness-provider.d.ts.map +1 -0
- package/dist/types/src/extensions/{awareness → collab/awareness}/awareness.d.ts +4 -1
- package/dist/types/src/extensions/collab/awareness/awareness.d.ts.map +1 -0
- package/dist/types/src/extensions/collab/awareness/index.d.ts.map +1 -0
- package/dist/types/src/extensions/collab/index.d.ts +3 -0
- package/dist/types/src/extensions/collab/index.d.ts.map +1 -0
- package/dist/types/src/extensions/completion/autocomplete.d.ts.map +1 -0
- package/dist/types/src/extensions/{autocomplete → completion}/index.d.ts +1 -0
- package/dist/types/src/extensions/completion/index.d.ts.map +1 -0
- package/dist/types/src/extensions/{autocomplete → completion}/match.d.ts +2 -2
- package/dist/types/src/extensions/completion/match.d.ts.map +1 -0
- package/dist/types/src/extensions/{mention.d.ts → completion/mention.d.ts} +3 -0
- package/dist/types/src/extensions/completion/mention.d.ts.map +1 -0
- package/dist/types/src/extensions/completion/placeholder.d.ts.map +1 -0
- package/dist/types/src/extensions/{autocomplete → completion}/typeahead.d.ts +2 -2
- package/dist/types/src/extensions/completion/typeahead.d.ts.map +1 -0
- package/dist/types/src/extensions/{factories.d.ts → core/factories.d.ts} +23 -2
- package/dist/types/src/extensions/core/factories.d.ts.map +1 -0
- package/dist/types/src/extensions/core/factories.test.d.ts.map +1 -0
- package/dist/types/src/extensions/core/index.d.ts +3 -0
- package/dist/types/src/extensions/core/index.d.ts.map +1 -0
- package/dist/types/src/extensions/{modes.d.ts → core/modes.d.ts} +3 -0
- package/dist/types/src/extensions/core/modes.d.ts.map +1 -0
- package/dist/types/src/extensions/{debug.d.ts → debug/debug.d.ts} +3 -0
- package/dist/types/src/extensions/debug/debug.d.ts.map +1 -0
- package/dist/types/src/extensions/debug/index.d.ts +2 -0
- package/dist/types/src/extensions/debug/index.d.ts.map +1 -0
- package/dist/types/src/extensions/{annotations.d.ts → decoration/annotations.d.ts} +1 -1
- package/dist/types/src/extensions/decoration/annotations.d.ts.map +1 -0
- package/dist/types/src/extensions/decoration/assistant.d.ts +27 -0
- package/dist/types/src/extensions/decoration/assistant.d.ts.map +1 -0
- package/dist/types/src/extensions/decoration/fader.d.ts.map +1 -0
- package/dist/types/src/extensions/decoration/hashtag.d.ts +6 -0
- package/dist/types/src/extensions/decoration/hashtag.d.ts.map +1 -0
- package/dist/types/src/extensions/decoration/index.d.ts +8 -0
- package/dist/types/src/extensions/decoration/index.d.ts.map +1 -0
- package/dist/types/src/extensions/decoration/marker.d.ts.map +1 -0
- package/dist/types/src/extensions/{pos.d.ts → decoration/pos.d.ts} +40 -14
- package/dist/types/src/extensions/decoration/pos.d.ts.map +1 -0
- package/dist/types/src/extensions/decoration/pos.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{replacer.d.ts → decoration/replacer.d.ts} +8 -8
- package/dist/types/src/extensions/decoration/replacer.d.ts.map +1 -0
- package/dist/types/src/extensions/decoration/replacer.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{blast.d.ts → demo/blast.d.ts} +3 -0
- package/dist/types/src/extensions/demo/blast.d.ts.map +1 -0
- package/dist/types/src/extensions/demo/index.d.ts +3 -0
- package/dist/types/src/extensions/demo/index.d.ts.map +1 -0
- package/dist/types/src/extensions/demo/snippets.d.ts.map +1 -0
- package/dist/types/src/extensions/index.d.ts +10 -33
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/language/index.d.ts +5 -0
- package/dist/types/src/extensions/language/index.d.ts.map +1 -0
- package/dist/types/src/extensions/language/json/index.d.ts +2 -0
- package/dist/types/src/extensions/language/json/index.d.ts.map +1 -0
- package/dist/types/src/extensions/language/json/json.d.ts +12 -0
- package/dist/types/src/extensions/language/json/json.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/action.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/bundle.d.ts.map +1 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/changes.d.ts +1 -1
- package/dist/types/src/extensions/language/markdown/changes.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/changes.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/debug.d.ts +3 -0
- package/dist/types/src/extensions/language/markdown/debug.d.ts.map +1 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/decorate.d.ts +5 -1
- package/dist/types/src/extensions/language/markdown/decorate.d.ts.map +1 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/formatting.d.ts +11 -2
- package/dist/types/src/extensions/language/markdown/formatting.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/formatting.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/highlight.d.ts +16 -12
- package/dist/types/src/extensions/language/markdown/highlight.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/image.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/image.test.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/index.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/link.d.ts +25 -0
- package/dist/types/src/extensions/language/markdown/link.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/link.test.d.ts +2 -0
- package/dist/types/src/extensions/language/markdown/link.test.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/parser.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/styles.d.ts +3 -0
- package/dist/types/src/extensions/language/markdown/styles.d.ts.map +1 -0
- package/dist/types/src/extensions/language/markdown/table.d.ts.map +1 -0
- package/dist/types/src/extensions/language/mermaid/index.d.ts +2 -0
- package/dist/types/src/extensions/language/mermaid/index.d.ts.map +1 -0
- package/dist/types/src/extensions/language/mermaid/mermaid.d.ts +18 -0
- package/dist/types/src/extensions/language/mermaid/mermaid.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/extended-markdown.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/extended-markdown.test.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/index.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/stub.d.ts +76 -0
- package/dist/types/src/extensions/language/xml/stub.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/widgets/anchor.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/widgets/index.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/xml-block-decoration.d.ts +48 -0
- package/dist/types/src/extensions/language/xml/xml-block-decoration.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/xml-formatting.d.ts.map +1 -0
- package/dist/types/src/extensions/{tags → language/xml}/xml-tags.d.ts +12 -1
- package/dist/types/src/extensions/language/xml/xml-tags.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/xml-tags.test.d.ts +2 -0
- package/dist/types/src/extensions/language/xml/xml-tags.test.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/xml-util.d.ts.map +1 -0
- package/dist/types/src/extensions/language/xml/xml-util.test.d.ts.map +1 -0
- package/dist/types/src/extensions/review/change-bar.d.ts +29 -0
- package/dist/types/src/extensions/review/change-bar.d.ts.map +1 -0
- package/dist/types/src/extensions/{comments.d.ts → review/comments.d.ts} +56 -38
- package/dist/types/src/extensions/review/comments.d.ts.map +1 -0
- package/dist/types/src/extensions/review/comments.test.d.ts +2 -0
- package/dist/types/src/extensions/review/comments.test.d.ts.map +1 -0
- package/dist/types/src/extensions/review/diff.d.ts +131 -0
- package/dist/types/src/extensions/review/diff.d.ts.map +1 -0
- package/dist/types/src/extensions/review/diff.test.d.ts +2 -0
- package/dist/types/src/extensions/review/diff.test.d.ts.map +1 -0
- package/dist/types/src/extensions/review/index.d.ts +7 -0
- package/dist/types/src/extensions/review/index.d.ts.map +1 -0
- package/dist/types/src/extensions/review/suggest.d.ts +89 -0
- package/dist/types/src/extensions/review/suggest.d.ts.map +1 -0
- package/dist/types/src/extensions/review/suggest.test.d.ts +2 -0
- package/dist/types/src/extensions/review/suggest.test.d.ts.map +1 -0
- package/dist/types/src/extensions/review/suggestions-overlay.d.ts +25 -0
- package/dist/types/src/extensions/review/suggestions-overlay.d.ts.map +1 -0
- package/dist/types/src/extensions/review/suggestions-overlay.test.d.ts +2 -0
- package/dist/types/src/extensions/review/suggestions-overlay.test.d.ts.map +1 -0
- package/dist/types/src/extensions/review/track-changes.d.ts +27 -0
- package/dist/types/src/extensions/review/track-changes.d.ts.map +1 -0
- package/dist/types/src/extensions/review/track-changes.test.d.ts +2 -0
- package/dist/types/src/extensions/review/track-changes.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{busy.d.ts → state/busy.d.ts} +1 -0
- package/dist/types/src/extensions/state/busy.d.ts.map +1 -0
- package/dist/types/src/extensions/{focus.d.ts → state/focus.d.ts} +4 -0
- package/dist/types/src/extensions/state/focus.d.ts.map +1 -0
- package/dist/types/src/extensions/state/index.d.ts +5 -0
- package/dist/types/src/extensions/state/index.d.ts.map +1 -0
- package/dist/types/src/extensions/state/modal.d.ts.map +1 -0
- package/dist/types/src/extensions/{selection.d.ts → state/selection.d.ts} +1 -1
- package/dist/types/src/extensions/state/selection.d.ts.map +1 -0
- package/dist/types/src/extensions/state/selection.test.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/index.d.ts +4 -0
- package/dist/types/src/extensions/streaming/index.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/pending/index.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/pending/pending-text-stream.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/pending/pending-text-stream.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{pending → streaming/pending}/pending-text.d.ts +1 -0
- package/dist/types/src/extensions/streaming/pending/pending-text.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/pending/pending-text.test.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/scrolling/auto-scroll.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/scrolling/crawler.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/scrolling/index.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/scrolling/scroll-past-end.d.ts +4 -0
- package/dist/types/src/extensions/streaming/scrolling/scroll-past-end.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/scrolling/scrollbar-autohide.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/scrolling/scroller.d.ts.map +1 -0
- package/dist/types/src/extensions/{typewriter.d.ts → streaming/typewriter.d.ts} +12 -12
- package/dist/types/src/extensions/streaming/typewriter.d.ts.map +1 -0
- package/dist/types/src/extensions/streaming/typewriter.test.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/blocks/blocks.d.ts +52 -0
- package/dist/types/src/extensions/structure/blocks/blocks.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/blocks/blocks.test.d.ts +2 -0
- package/dist/types/src/extensions/structure/blocks/blocks.test.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/blocks/drag.d.ts +57 -0
- package/dist/types/src/extensions/structure/blocks/drag.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/blocks/index.d.ts +5 -0
- package/dist/types/src/extensions/structure/blocks/index.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/blocks/selection.d.ts +47 -0
- package/dist/types/src/extensions/structure/blocks/selection.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/blocks/selection.test.d.ts +2 -0
- package/dist/types/src/extensions/structure/blocks/selection.test.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/blocks/types.d.ts +17 -0
- package/dist/types/src/extensions/structure/blocks/types.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/folding/folding.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/folding/index.d.ts +3 -0
- package/dist/types/src/extensions/structure/folding/index.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/folding/turns.d.ts +55 -0
- package/dist/types/src/extensions/structure/folding/turns.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/folding/turns.test.d.ts +2 -0
- package/dist/types/src/extensions/structure/folding/turns.test.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/index.d.ts +4 -0
- package/dist/types/src/extensions/structure/index.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/outliner/commands.d.ts +31 -0
- package/dist/types/src/extensions/structure/outliner/commands.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/outliner/dnd.d.ts +43 -0
- package/dist/types/src/extensions/structure/outliner/dnd.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/outliner/dnd.test.d.ts +2 -0
- package/dist/types/src/extensions/structure/outliner/dnd.test.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/outliner/editor.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/outliner/editor.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{outliner → structure/outliner}/index.d.ts +1 -0
- package/dist/types/src/extensions/structure/outliner/index.d.ts.map +1 -0
- package/dist/types/src/extensions/{outliner → structure/outliner}/menu.d.ts +1 -0
- package/dist/types/src/extensions/structure/outliner/menu.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/outliner/outliner.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/outliner/outliner.test.d.ts.map +1 -0
- package/dist/types/src/extensions/{outliner → structure/outliner}/tree.d.ts +1 -1
- package/dist/types/src/extensions/structure/outliner/tree.d.ts.map +1 -0
- package/dist/types/src/extensions/structure/outliner/tree.test.d.ts.map +1 -0
- package/dist/types/src/headless.d.ts +4 -0
- package/dist/types/src/headless.d.ts.map +1 -0
- package/dist/types/src/styles/theme.d.ts +1 -1
- package/dist/types/src/styles/theme.d.ts.map +1 -1
- package/dist/types/src/util/util.d.ts +2 -0
- package/dist/types/src/util/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +48 -42
- package/src/defaults.ts +1 -1
- package/src/extensions/{bookmarks.ts → behavior/bookmarks.ts} +24 -14
- package/src/extensions/behavior/index.ts +9 -0
- package/src/extensions/{listener.ts → behavior/listener.ts} +4 -1
- package/src/extensions/{spacing.ts → behavior/spacing.ts} +8 -2
- package/src/extensions/{submit.ts → behavior/submit.ts} +2 -10
- package/src/extensions/{automerge → collab/automerge}/automerge.test.tsx +4 -4
- package/src/extensions/{automerge → collab/automerge}/automerge.ts +7 -4
- package/src/extensions/{automerge → collab/automerge}/cursor.ts +1 -1
- package/src/extensions/{automerge → collab/automerge}/defs.ts +4 -1
- package/src/extensions/{automerge → collab/automerge}/index.ts +1 -0
- package/src/extensions/{automerge → collab/automerge}/sync.ts +1 -2
- package/src/extensions/{automerge → collab/automerge}/update-automerge.ts +4 -0
- package/src/extensions/{automerge → collab/automerge}/update-codemirror.ts +5 -1
- package/src/extensions/{awareness → collab/awareness}/awareness-provider.ts +3 -4
- package/src/extensions/{awareness → collab/awareness}/awareness.ts +19 -16
- package/src/extensions/collab/index.ts +6 -0
- package/src/extensions/{autocomplete → completion}/autocomplete.ts +7 -5
- package/src/extensions/{autocomplete → completion}/index.ts +2 -1
- package/src/extensions/{autocomplete → completion}/match.ts +2 -2
- package/src/extensions/{mention.ts → completion/mention.ts} +3 -0
- package/src/extensions/{autocomplete → completion}/placeholder.ts +1 -1
- package/src/extensions/completion/typeahead.ts +97 -0
- package/src/extensions/{factories.ts → core/factories.ts} +35 -13
- package/src/extensions/core/index.ts +6 -0
- package/src/extensions/{modes.ts → core/modes.ts} +4 -1
- package/src/extensions/{debug.ts → debug/debug.ts} +3 -0
- package/src/extensions/debug/index.ts +5 -0
- package/src/extensions/{annotations.ts → decoration/annotations.ts} +12 -10
- package/src/extensions/decoration/assistant.ts +225 -0
- package/src/extensions/{fader.ts → decoration/fader.ts} +17 -19
- package/src/extensions/{hashtag.ts → decoration/hashtag.ts} +35 -28
- package/src/extensions/decoration/index.ts +11 -0
- package/src/extensions/{marker.ts → decoration/marker.ts} +18 -18
- package/src/extensions/{pos.test.ts → decoration/pos.test.ts} +57 -1
- package/src/extensions/{pos.ts → decoration/pos.ts} +165 -31
- package/src/extensions/{blast.ts → demo/blast.ts} +3 -0
- package/src/extensions/demo/index.ts +6 -0
- package/src/extensions/{snippets.ts → demo/snippets.ts} +5 -1
- package/src/extensions/index.ts +10 -33
- package/src/extensions/language/index.ts +8 -0
- package/src/extensions/language/json/index.ts +5 -0
- package/src/extensions/{json.ts → language/json/json.ts} +11 -6
- package/src/extensions/{markdown → language/markdown}/action.ts +1 -1
- package/src/extensions/{markdown → language/markdown}/bundle.ts +7 -1
- package/src/extensions/{markdown → language/markdown}/changes.test.ts +2 -2
- package/src/extensions/{markdown → language/markdown}/changes.ts +2 -2
- package/src/extensions/{markdown → language/markdown}/debug.ts +3 -0
- package/src/extensions/{markdown → language/markdown}/decorate.ts +96 -85
- package/src/extensions/{markdown → language/markdown}/formatting.test.ts +88 -1
- package/src/extensions/{markdown → language/markdown}/formatting.ts +193 -74
- package/src/extensions/{markdown → language/markdown}/highlight.ts +42 -41
- package/src/extensions/{markdown → language/markdown}/image.test.ts +1 -1
- package/src/extensions/{markdown → language/markdown}/image.ts +6 -6
- package/src/extensions/language/markdown/link.test.ts +58 -0
- package/src/extensions/language/markdown/link.ts +109 -0
- package/src/extensions/{markdown → language/markdown}/parser.test.ts +0 -28
- package/src/extensions/{markdown → language/markdown}/styles.ts +38 -7
- package/src/extensions/{markdown → language/markdown}/table.ts +5 -5
- package/src/extensions/language/mermaid/index.ts +5 -0
- package/src/extensions/language/mermaid/mermaid.ts +44 -0
- package/src/extensions/{tags → language/xml}/DESIGN.md +3 -3
- package/src/extensions/{tags → language/xml}/extended-markdown.test.ts +2 -1
- package/src/extensions/{tags → language/xml}/extended-markdown.ts +2 -4
- package/src/extensions/language/xml/stub.ts +233 -0
- package/src/extensions/language/xml/xml-block-decoration.ts +165 -0
- package/src/extensions/{tags → language/xml}/xml-formatting.ts +54 -38
- package/src/extensions/language/xml/xml-tags.test.ts +588 -0
- package/src/extensions/{tags → language/xml}/xml-tags.ts +165 -66
- package/src/extensions/{tags → language/xml}/xml-util.test.ts +2 -2
- package/src/extensions/review/change-bar.ts +94 -0
- package/src/extensions/review/comments.test.ts +72 -0
- package/src/extensions/{comments.ts → review/comments.ts} +395 -267
- package/src/extensions/review/diff.test.ts +405 -0
- package/src/extensions/review/diff.ts +502 -0
- package/src/extensions/review/index.ts +10 -0
- package/src/extensions/review/suggest.test.ts +170 -0
- package/src/extensions/review/suggest.ts +512 -0
- package/src/extensions/review/suggestions-overlay.test.ts +58 -0
- package/src/extensions/review/suggestions-overlay.ts +50 -0
- package/src/extensions/review/track-changes.test.ts +101 -0
- package/src/extensions/review/track-changes.ts +215 -0
- package/src/extensions/{busy.ts → state/busy.ts} +1 -0
- package/src/extensions/{focus.ts → state/focus.ts} +4 -0
- package/src/extensions/state/index.ts +8 -0
- package/src/extensions/{selection.ts → state/selection.ts} +3 -3
- package/src/extensions/streaming/index.ts +7 -0
- package/src/extensions/{pending → streaming/pending}/pending-text-stream.ts +10 -3
- package/src/extensions/{pending → streaming/pending}/pending-text.test.ts +1 -1
- package/src/extensions/{pending → streaming/pending}/pending-text.ts +20 -19
- package/src/extensions/{scrolling → streaming/scrolling}/auto-scroll.ts +9 -6
- package/src/extensions/{scrolling → streaming/scrolling}/scroll-past-end.ts +1 -0
- package/src/extensions/{scrolling → streaming/scrolling}/scrollbar-autohide.ts +13 -11
- package/src/extensions/{typewriter.ts → streaming/typewriter.ts} +46 -47
- package/src/extensions/structure/blocks/DESIGN.md +134 -0
- package/src/extensions/structure/blocks/blocks.test.ts +147 -0
- package/src/extensions/structure/blocks/blocks.ts +219 -0
- package/src/extensions/structure/blocks/drag.ts +996 -0
- package/src/extensions/structure/blocks/index.ts +8 -0
- package/src/extensions/structure/blocks/selection.test.ts +56 -0
- package/src/extensions/structure/blocks/selection.ts +279 -0
- package/src/extensions/structure/blocks/types.ts +22 -0
- package/src/extensions/{folding.ts → structure/folding/folding.ts} +12 -10
- package/src/extensions/structure/folding/index.ts +6 -0
- package/src/extensions/structure/folding/turns.test.ts +72 -0
- package/src/extensions/structure/folding/turns.ts +209 -0
- package/src/extensions/structure/index.ts +7 -0
- package/src/extensions/structure/outliner/DESIGN.md +183 -0
- package/src/extensions/structure/outliner/SPEC.mdl +305 -0
- package/src/extensions/{outliner → structure/outliner}/commands.ts +125 -42
- package/src/extensions/structure/outliner/dnd.test.ts +142 -0
- package/src/extensions/structure/outliner/dnd.ts +375 -0
- package/src/extensions/structure/outliner/editor.test.ts +85 -0
- package/src/extensions/{outliner → structure/outliner}/editor.ts +14 -9
- package/src/extensions/{outliner → structure/outliner}/index.ts +1 -0
- package/src/extensions/{outliner → structure/outliner}/menu.ts +48 -25
- package/src/extensions/structure/outliner/outliner.test.ts +193 -0
- package/src/extensions/structure/outliner/outliner.ts +183 -0
- package/src/extensions/{outliner → structure/outliner}/tree.test.ts +2 -2
- package/src/extensions/{outliner → structure/outliner}/tree.ts +1 -1
- package/src/headless.ts +13 -0
- package/src/styles/theme.ts +3 -1
- package/src/util/util.ts +3 -0
- package/dist/lib/browser/index.mjs +0 -9594
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/types/index.mjs +0 -33
- package/dist/lib/browser/types/index.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -9596
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/types/index.mjs +0 -35
- package/dist/lib/node-esm/types/index.mjs.map +0 -7
- package/dist/types/src/extensions/annotations.d.ts.map +0 -1
- package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
- package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
- package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
- package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
- package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/index.d.ts +0 -2
- package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
- package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
- package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
- package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
- package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
- package/dist/types/src/extensions/blast.d.ts.map +0 -1
- package/dist/types/src/extensions/blocks.d.ts +0 -2
- package/dist/types/src/extensions/blocks.d.ts.map +0 -1
- package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
- package/dist/types/src/extensions/busy.d.ts.map +0 -1
- package/dist/types/src/extensions/comments.d.ts.map +0 -1
- package/dist/types/src/extensions/debug.d.ts.map +0 -1
- package/dist/types/src/extensions/dnd.d.ts.map +0 -1
- package/dist/types/src/extensions/factories.d.ts.map +0 -1
- package/dist/types/src/extensions/factories.test.d.ts.map +0 -1
- package/dist/types/src/extensions/fader.d.ts.map +0 -1
- package/dist/types/src/extensions/focus.d.ts.map +0 -1
- package/dist/types/src/extensions/folding.d.ts.map +0 -1
- package/dist/types/src/extensions/hashtag.d.ts +0 -3
- package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
- package/dist/types/src/extensions/json.d.ts +0 -7
- package/dist/types/src/extensions/json.d.ts.map +0 -1
- package/dist/types/src/extensions/listener.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/image.test.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/link.d.ts +0 -7
- package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
- package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
- package/dist/types/src/extensions/marker.d.ts.map +0 -1
- package/dist/types/src/extensions/mention.d.ts.map +0 -1
- package/dist/types/src/extensions/modal.d.ts.map +0 -1
- package/dist/types/src/extensions/modes.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
- package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
- package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
- package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
- package/dist/types/src/extensions/pending/index.d.ts.map +0 -1
- package/dist/types/src/extensions/pending/pending-text-stream.d.ts.map +0 -1
- package/dist/types/src/extensions/pending/pending-text-stream.test.d.ts.map +0 -1
- package/dist/types/src/extensions/pending/pending-text.d.ts.map +0 -1
- package/dist/types/src/extensions/pending/pending-text.test.d.ts.map +0 -1
- package/dist/types/src/extensions/pos.d.ts.map +0 -1
- package/dist/types/src/extensions/pos.test.d.ts.map +0 -1
- package/dist/types/src/extensions/replacer.d.ts.map +0 -1
- package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
- package/dist/types/src/extensions/scrolling/auto-scroll.d.ts.map +0 -1
- package/dist/types/src/extensions/scrolling/crawler.d.ts.map +0 -1
- package/dist/types/src/extensions/scrolling/index.d.ts.map +0 -1
- package/dist/types/src/extensions/scrolling/scroll-past-end.d.ts +0 -3
- package/dist/types/src/extensions/scrolling/scroll-past-end.d.ts.map +0 -1
- package/dist/types/src/extensions/scrolling/scrollbar-autohide.d.ts.map +0 -1
- package/dist/types/src/extensions/scrolling/scroller.d.ts.map +0 -1
- package/dist/types/src/extensions/selection.d.ts.map +0 -1
- package/dist/types/src/extensions/selection.test.d.ts.map +0 -1
- package/dist/types/src/extensions/snippets.d.ts.map +0 -1
- package/dist/types/src/extensions/spacing.d.ts.map +0 -1
- package/dist/types/src/extensions/state.d.ts +0 -2
- package/dist/types/src/extensions/state.d.ts.map +0 -1
- package/dist/types/src/extensions/submit.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/stub.d.ts +0 -35
- package/dist/types/src/extensions/tags/stub.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/widgets/anchor.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/widgets/index.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/xml-block-decoration.d.ts +0 -31
- package/dist/types/src/extensions/tags/xml-block-decoration.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/xml-formatting.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/xml-util.test.d.ts.map +0 -1
- package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
- package/dist/types/src/extensions/typewriter.test.d.ts.map +0 -1
- package/src/extensions/autocomplete/typeahead.ts +0 -87
- package/src/extensions/blocks.ts +0 -131
- package/src/extensions/markdown/link.ts +0 -49
- package/src/extensions/outliner/editor.test.ts +0 -33
- package/src/extensions/outliner/outliner.test.ts +0 -99
- package/src/extensions/outliner/outliner.ts +0 -166
- package/src/extensions/outliner/selection.ts +0 -50
- package/src/extensions/state.ts +0 -7
- package/src/extensions/tags/stub.ts +0 -80
- package/src/extensions/tags/xml-block-decoration.ts +0 -123
- package/dist/types/src/extensions/{dnd.d.ts → behavior/dnd.d.ts} +0 -0
- package/dist/types/src/extensions/{submit.d.ts → behavior/submit.d.ts} +0 -0
- package/dist/types/src/extensions/{automerge → collab/automerge}/automerge.d.ts +0 -0
- package/dist/types/src/extensions/{automerge → collab/automerge}/automerge.test.d.ts +0 -0
- package/dist/types/src/extensions/{automerge → collab/automerge}/sync.d.ts +0 -0
- package/dist/types/src/extensions/{awareness → collab/awareness}/awareness-provider.d.ts +0 -0
- package/dist/types/src/extensions/{awareness → collab/awareness}/index.d.ts +0 -0
- package/dist/types/src/extensions/{autocomplete → completion}/autocomplete.d.ts +0 -0
- package/dist/types/src/extensions/{autocomplete → completion}/placeholder.d.ts +0 -0
- package/dist/types/src/extensions/{factories.test.d.ts → core/factories.test.d.ts} +0 -0
- package/dist/types/src/extensions/{fader.d.ts → decoration/fader.d.ts} +0 -0
- package/dist/types/src/extensions/{marker.d.ts → decoration/marker.d.ts} +0 -0
- package/dist/types/src/extensions/{pos.test.d.ts → decoration/pos.test.d.ts} +0 -0
- package/dist/types/src/extensions/{replacer.test.d.ts → decoration/replacer.test.d.ts} +0 -0
- package/dist/types/src/extensions/{snippets.d.ts → demo/snippets.d.ts} +0 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/action.d.ts +0 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/bundle.d.ts +0 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/changes.test.d.ts +0 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/formatting.test.d.ts +0 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/image.d.ts +0 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/image.test.d.ts +0 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/index.d.ts +0 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/parser.test.d.ts +0 -0
- package/dist/types/src/extensions/{markdown → language/markdown}/table.d.ts +0 -0
- package/dist/types/src/extensions/{tags → language/xml}/extended-markdown.d.ts +0 -0
- package/dist/types/src/extensions/{tags → language/xml}/extended-markdown.test.d.ts +0 -0
- package/dist/types/src/extensions/{tags → language/xml}/index.d.ts +0 -0
- package/dist/types/src/extensions/{tags → language/xml}/widgets/anchor.d.ts +0 -0
- package/dist/types/src/extensions/{tags → language/xml}/widgets/index.d.ts +0 -0
- package/dist/types/src/extensions/{tags → language/xml}/xml-formatting.d.ts +0 -0
- package/dist/types/src/extensions/{tags → language/xml}/xml-util.d.ts +0 -0
- package/dist/types/src/extensions/{tags → language/xml}/xml-util.test.d.ts +0 -0
- package/dist/types/src/extensions/{modal.d.ts → state/modal.d.ts} +0 -0
- package/dist/types/src/extensions/{selection.test.d.ts → state/selection.test.d.ts} +0 -0
- package/dist/types/src/extensions/{pending → streaming/pending}/index.d.ts +0 -0
- package/dist/types/src/extensions/{pending → streaming/pending}/pending-text-stream.d.ts +0 -0
- package/dist/types/src/extensions/{pending → streaming/pending}/pending-text-stream.test.d.ts +0 -0
- package/dist/types/src/extensions/{pending → streaming/pending}/pending-text.test.d.ts +0 -0
- package/dist/types/src/extensions/{scrolling → streaming/scrolling}/auto-scroll.d.ts +0 -0
- package/dist/types/src/extensions/{scrolling → streaming/scrolling}/crawler.d.ts +0 -0
- package/dist/types/src/extensions/{scrolling → streaming/scrolling}/index.d.ts +0 -0
- package/dist/types/src/extensions/{scrolling → streaming/scrolling}/scrollbar-autohide.d.ts +0 -0
- package/dist/types/src/extensions/{scrolling → streaming/scrolling}/scroller.d.ts +0 -0
- package/dist/types/src/extensions/{typewriter.test.d.ts → streaming/typewriter.test.d.ts} +0 -0
- package/dist/types/src/extensions/{folding.d.ts → structure/folding/folding.d.ts} +0 -0
- package/dist/types/src/extensions/{outliner → structure/outliner}/editor.d.ts +0 -0
- package/dist/types/src/extensions/{outliner → structure/outliner}/editor.test.d.ts +0 -0
- package/dist/types/src/extensions/{outliner → structure/outliner}/outliner.d.ts +0 -0
- package/dist/types/src/extensions/{outliner → structure/outliner}/outliner.test.d.ts +0 -0
- package/dist/types/src/extensions/{outliner → structure/outliner}/tree.test.d.ts +0 -0
- package/src/extensions/{dnd.ts → behavior/dnd.ts} +29 -29
- package/src/extensions/{awareness → collab/awareness}/index.ts +0 -0
- package/src/extensions/{factories.test.ts → core/factories.test.ts} +0 -0
- package/src/extensions/{replacer.test.ts → decoration/replacer.test.ts} +0 -0
- package/src/extensions/{replacer.ts → decoration/replacer.ts} +25 -25
- /package/src/extensions/{markdown → language/markdown}/index.ts +0 -0
- /package/src/extensions/{tags → language/xml}/index.ts +0 -0
- /package/src/extensions/{tags → language/xml}/testing/text.md +0 -0
- /package/src/extensions/{tags → language/xml}/testing/text.txt +0 -0
- /package/src/extensions/{tags → language/xml}/widgets/anchor.ts +0 -0
- /package/src/extensions/{tags → language/xml}/widgets/index.ts +0 -0
- /package/src/extensions/{tags → language/xml}/xml-util.ts +0 -0
- /package/src/extensions/{modal.ts → state/modal.ts} +0 -0
- /package/src/extensions/{selection.test.ts → state/selection.test.ts} +0 -0
- /package/src/extensions/{pending → streaming/pending}/index.ts +0 -0
- /package/src/extensions/{pending → streaming/pending}/pending-text-stream.test.ts +0 -0
- /package/src/extensions/{scrolling → streaming/scrolling}/crawler.ts +0 -0
- /package/src/extensions/{scrolling → streaming/scrolling}/index.ts +0 -0
- /package/src/extensions/{scrolling → streaming/scrolling}/scroller.ts +0 -0
- /package/src/extensions/{typewriter.test.ts → streaming/typewriter.test.ts} +0 -0
|
@@ -6,7 +6,7 @@ import { type Extension } from '@codemirror/state';
|
|
|
6
6
|
import { Decoration, EditorView } from '@codemirror/view';
|
|
7
7
|
|
|
8
8
|
import { Domino } from '@dxos/ui';
|
|
9
|
-
import { hues } from '@dxos/ui-
|
|
9
|
+
import { hues } from '@dxos/ui-types';
|
|
10
10
|
import { type ChromaticPalette } from '@dxos/ui-types';
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -16,21 +16,6 @@ import { type ChromaticPalette } from '@dxos/ui-types';
|
|
|
16
16
|
*/
|
|
17
17
|
export type MarkerHue = ChromaticPalette;
|
|
18
18
|
|
|
19
|
-
const MARKED = ['.cm-marker > span', '.cm-marker-text'].join(', ');
|
|
20
|
-
|
|
21
|
-
// Map `data-hue` to the standard ui-theme surface/foreground tokens (one rule per hue).
|
|
22
|
-
const hueVars = Object.fromEntries(
|
|
23
|
-
hues.flatMap((hue) =>
|
|
24
|
-
['.cm-marker', '.cm-marker-text'].map((selector) => [
|
|
25
|
-
`${selector}[data-hue="${hue}"]`,
|
|
26
|
-
{
|
|
27
|
-
'--cm-marker-surface': `var(--color-${hue}-bg)`,
|
|
28
|
-
'--cm-marker-text': `var(--color-${hue}-fg)`,
|
|
29
|
-
},
|
|
30
|
-
]),
|
|
31
|
-
),
|
|
32
|
-
);
|
|
33
|
-
|
|
34
19
|
/**
|
|
35
20
|
* Shared theme for hue-tinted markers and their inline button affordances. Include once per editor;
|
|
36
21
|
* both `markerMark` (range marks) and `markerText` (widget spans) read from it.
|
|
@@ -39,12 +24,14 @@ export const markerTheme = (): Extension =>
|
|
|
39
24
|
EditorView.theme({
|
|
40
25
|
...hueVars,
|
|
41
26
|
// The comment-style surface "padding" is a box-shadow of the same colour so adjacent lines join.
|
|
42
|
-
|
|
27
|
+
// No `border-radius`: with `box-decoration-break: clone` every wrapped fragment would round its
|
|
28
|
+
// own corners, pinching the left/right edges of a multi-line span into jagged notches. Square
|
|
29
|
+
// corners let the per-line boxes stack into one continuous block with straight vertical edges.
|
|
30
|
+
'.cm-marker > span, .cm-marker-text': {
|
|
43
31
|
boxDecorationBreak: 'clone',
|
|
44
32
|
backgroundColor: 'var(--cm-marker-surface)',
|
|
45
33
|
boxShadow: '0 0 0 3px var(--cm-marker-surface)',
|
|
46
34
|
color: 'var(--cm-marker-text) !important',
|
|
47
|
-
borderRadius: '0.25rem',
|
|
48
35
|
},
|
|
49
36
|
// `inline-block` (not flex) so the finalized + interim spans flow as one continuous block.
|
|
50
37
|
'.cm-marker-text': {
|
|
@@ -141,3 +128,16 @@ export const markerButtons = (buttons: MarkerButton[]): Domino<HTMLElement> =>
|
|
|
141
128
|
}),
|
|
142
129
|
),
|
|
143
130
|
);
|
|
131
|
+
|
|
132
|
+
// Map `data-hue` to the standard ui-theme surface/foreground tokens (one rule per hue).
|
|
133
|
+
const hueVars = Object.fromEntries(
|
|
134
|
+
hues.flatMap((hue) =>
|
|
135
|
+
['.cm-marker', '.cm-marker-text'].map((selector) => [
|
|
136
|
+
`${selector}[data-hue="${hue}"]`,
|
|
137
|
+
{
|
|
138
|
+
'--cm-marker-surface': `var(--color-${hue}-bg)`,
|
|
139
|
+
'--cm-marker-text': `var(--color-${hue}-fg)`,
|
|
140
|
+
},
|
|
141
|
+
]),
|
|
142
|
+
),
|
|
143
|
+
);
|
|
@@ -8,7 +8,16 @@ import { describe, test } from 'vitest';
|
|
|
8
8
|
|
|
9
9
|
import { type Document, sourceHash } from '@dxos/nlp';
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
clearAnalysis,
|
|
13
|
+
pos,
|
|
14
|
+
posAnalysisField,
|
|
15
|
+
posDecorations,
|
|
16
|
+
posSpans,
|
|
17
|
+
posTokenAt,
|
|
18
|
+
setAnalysis,
|
|
19
|
+
spanDiverged,
|
|
20
|
+
} from './pos';
|
|
12
21
|
|
|
13
22
|
describe('posAnalysisField', () => {
|
|
14
23
|
const make = (doc = 'hello world') => EditorState.create({ doc, extensions: [posAnalysisField] });
|
|
@@ -73,6 +82,53 @@ describe('pos reactive initial parse', () => {
|
|
|
73
82
|
});
|
|
74
83
|
});
|
|
75
84
|
|
|
85
|
+
describe('posTokenAt', () => {
|
|
86
|
+
const analyzed = () => {
|
|
87
|
+
const text = 'XX hello world';
|
|
88
|
+
// Span starts at 3 so absolute token offsets exercise the span-relative mapping.
|
|
89
|
+
const document: Document = {
|
|
90
|
+
sourceHash: sourceHash('hello world'),
|
|
91
|
+
sentences: [
|
|
92
|
+
{
|
|
93
|
+
index: 0,
|
|
94
|
+
start: 0,
|
|
95
|
+
end: 11,
|
|
96
|
+
tokens: [
|
|
97
|
+
{ index: 0, text: 'hello', upos: 'INTJ', start: 0, end: 5 },
|
|
98
|
+
{ index: 1, text: 'world', upos: 'NOUN', start: 6, end: 11 },
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
return EditorState.create({ doc: text, extensions: [posAnalysisField] }).update({
|
|
104
|
+
effects: setAnalysis.of({ from: 3, to: 14, document }),
|
|
105
|
+
}).state;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
test('resolves the token covering an absolute position', ({ expect }) => {
|
|
109
|
+
const state = analyzed();
|
|
110
|
+
expect(posTokenAt(state, 4)).toMatchObject({ from: 3, to: 8, upos: 'INTJ', stale: false });
|
|
111
|
+
expect(posTokenAt(state, 9)).toMatchObject({ from: 9, to: 14, upos: 'NOUN' });
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
test('returns undefined outside analyzed tokens', ({ expect }) => {
|
|
115
|
+
const state = analyzed();
|
|
116
|
+
expect(posTokenAt(state, 0)).toBeUndefined(); // Before the span.
|
|
117
|
+
expect(posTokenAt(state, 8)).toBeUndefined(); // Inter-token whitespace.
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
describe('pos options', () => {
|
|
122
|
+
test('popover option mounts alongside the underline default', ({ expect }) => {
|
|
123
|
+
// Both presentations are independent extensions; constructing a state with each combination
|
|
124
|
+
// must not throw and must retain the analysis field.
|
|
125
|
+
for (const options of [{ popover: true }, { underline: false, popover: true }, { underline: false }]) {
|
|
126
|
+
const state = EditorState.create({ doc: 'hello', extensions: [pos(options)] });
|
|
127
|
+
expect(posSpans(state)).toEqual([]);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
|
|
76
132
|
describe('spanDiverged', () => {
|
|
77
133
|
test('detects when live span text no longer matches the stored hash', ({ expect }) => {
|
|
78
134
|
const span = { from: 0, to: 5, sourceHash: sourceHash('hello'), document: docFor('hello'), stale: false };
|
|
@@ -3,11 +3,45 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type EditorState, type Extension, RangeSetBuilder, StateEffect, StateField } from '@codemirror/state';
|
|
6
|
-
import { Decoration, EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';
|
|
6
|
+
import { Decoration, EditorView, ViewPlugin, type ViewUpdate, hoverTooltip } from '@codemirror/view';
|
|
7
7
|
|
|
8
8
|
import { debounce } from '@dxos/async';
|
|
9
9
|
import { type Document, type Upos, sourceHash } from '@dxos/nlp';
|
|
10
10
|
|
|
11
|
+
export type PosOptions = {
|
|
12
|
+
/** When set, the extension self-parses on idle and dispatches `setAnalysis`. */
|
|
13
|
+
parse?: (text: string) => Promise<Document>;
|
|
14
|
+
/** Idle debounce before reactive parsing (ms). */
|
|
15
|
+
debounceMs?: number;
|
|
16
|
+
/** Colored underline per UPOS tag (default true). */
|
|
17
|
+
underline?: boolean;
|
|
18
|
+
/** Hover popover naming the part of speech (default false). */
|
|
19
|
+
popover?: boolean;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Part-of-speech decoration extension.
|
|
24
|
+
* Renders per-word UPOS marks from analysis state held in a span-oriented state field, with
|
|
25
|
+
* independently switchable presentations: a colored underline per tag ({@link posTheme}) and a
|
|
26
|
+
* hover popover naming the part of speech ({@link posPopover}). State can be set externally via
|
|
27
|
+
* `setAnalysis`/`clearAnalysis`, or — when `options.parse` is supplied — self-driven on idle
|
|
28
|
+
* (reactive mode).
|
|
29
|
+
*/
|
|
30
|
+
export const pos = ({ parse, debounceMs = 500, underline = true, popover = false }: PosOptions = {}): Extension => {
|
|
31
|
+
const extensions: Extension[] = [posAnalysisField, posDecorations, staleTheme];
|
|
32
|
+
if (underline) {
|
|
33
|
+
extensions.push(posTheme());
|
|
34
|
+
}
|
|
35
|
+
if (popover) {
|
|
36
|
+
extensions.push(posPopover());
|
|
37
|
+
}
|
|
38
|
+
if (parse) {
|
|
39
|
+
extensions.push(reactiveDriver(parse, debounceMs));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return extensions;
|
|
43
|
+
};
|
|
44
|
+
|
|
11
45
|
/** One analyzed region of the document. `document` offsets are relative to the span's own text. */
|
|
12
46
|
export type PosSpan = {
|
|
13
47
|
from: number;
|
|
@@ -28,6 +62,10 @@ export const clearAnalysis = StateEffect.define<null>();
|
|
|
28
62
|
/** Internal: mark a span stale (dispatched by the reactive driver on divergence). */
|
|
29
63
|
export const markStale = StateEffect.define<{ from: number; to: number }>();
|
|
30
64
|
|
|
65
|
+
/**
|
|
66
|
+
* StateField holding the span-oriented part-of-speech analysis.
|
|
67
|
+
* Included by {@link pos}; exported for reads via {@link posSpans}.
|
|
68
|
+
*/
|
|
31
69
|
export const posAnalysisField = StateField.define<PosSpan[]>({
|
|
32
70
|
create: () => [],
|
|
33
71
|
update: (spans, tr) => {
|
|
@@ -67,6 +105,10 @@ export const posSpans = (state: EditorState): PosSpan[] => state.field(posAnalys
|
|
|
67
105
|
const posMark = (upos: Upos, stale: boolean) =>
|
|
68
106
|
Decoration.mark({ class: ['cm-pos', `cm-pos-${upos}`, stale && 'cm-pos-stale'].filter(Boolean).join(' ') });
|
|
69
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Computes UPOS decoration marks from the analysis field.
|
|
110
|
+
* Included by {@link pos}.
|
|
111
|
+
*/
|
|
70
112
|
export const posDecorations = EditorView.decorations.compute([posAnalysisField], (state) => {
|
|
71
113
|
const builder = new RangeSetBuilder<Decoration>();
|
|
72
114
|
const spans = state.field(posAnalysisField);
|
|
@@ -109,29 +151,89 @@ const POS_HUE: Partial<Record<Upos, string>> = {
|
|
|
109
151
|
PART: 'neutral',
|
|
110
152
|
};
|
|
111
153
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
154
|
+
/** Human-readable UPOS names (https://universaldependencies.org/u/pos/), shown in the hover popover. */
|
|
155
|
+
const UPOS_LABEL: Record<Upos, string> = {
|
|
156
|
+
ADJ: 'adjective',
|
|
157
|
+
ADP: 'adposition',
|
|
158
|
+
ADV: 'adverb',
|
|
159
|
+
AUX: 'auxiliary',
|
|
160
|
+
CCONJ: 'coordinating conjunction',
|
|
161
|
+
DET: 'determiner',
|
|
162
|
+
INTJ: 'interjection',
|
|
163
|
+
NOUN: 'noun',
|
|
164
|
+
NUM: 'numeral',
|
|
165
|
+
PART: 'particle',
|
|
166
|
+
PRON: 'pronoun',
|
|
167
|
+
PROPN: 'proper noun',
|
|
168
|
+
PUNCT: 'punctuation',
|
|
169
|
+
SCONJ: 'subordinating conjunction',
|
|
170
|
+
SYM: 'symbol',
|
|
171
|
+
VERB: 'verb',
|
|
172
|
+
X: 'other',
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
export type PosToken = {
|
|
176
|
+
from: number;
|
|
177
|
+
to: number;
|
|
178
|
+
upos: Upos;
|
|
179
|
+
stale: boolean;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
/** Resolve the analyzed token covering an absolute document position, if any. */
|
|
183
|
+
export const posTokenAt = (state: EditorState, position: number): PosToken | undefined => {
|
|
184
|
+
const spans = state.field(posAnalysisField, false) ?? [];
|
|
185
|
+
for (const span of spans) {
|
|
186
|
+
if (position < span.from || position > span.to) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
for (const sentence of span.document.sentences) {
|
|
190
|
+
for (const token of sentence.tokens) {
|
|
191
|
+
const from = span.from + token.start;
|
|
192
|
+
const to = span.from + token.end;
|
|
193
|
+
if (position >= from && position < to && to <= state.doc.length) {
|
|
194
|
+
return { from, to, upos: token.upos, stale: span.stale };
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return undefined;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
/** Hover popover naming the part of speech of the token under the pointer. */
|
|
203
|
+
export const posPopover = (): Extension => [
|
|
204
|
+
hoverTooltip((view, position) => {
|
|
205
|
+
const token = posTokenAt(view.state, position);
|
|
206
|
+
if (!token) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
pos: token.from,
|
|
211
|
+
end: token.to,
|
|
212
|
+
above: true,
|
|
213
|
+
create: () => {
|
|
214
|
+
const dom = document.createElement('div');
|
|
215
|
+
dom.className = 'cm-pos-popover';
|
|
216
|
+
const swatch = document.createElement('span');
|
|
217
|
+
swatch.className = 'cm-pos-swatch';
|
|
218
|
+
swatch.style.background = `var(--color-${POS_HUE[token.upos] ?? 'neutral'}-500)`;
|
|
219
|
+
const tag = document.createElement('span');
|
|
220
|
+
tag.className = 'cm-pos-popover-tag';
|
|
221
|
+
tag.textContent = token.upos;
|
|
222
|
+
const label = document.createElement('span');
|
|
223
|
+
label.className = 'cm-pos-popover-label';
|
|
224
|
+
label.textContent = UPOS_LABEL[token.upos];
|
|
225
|
+
dom.append(swatch, tag, label);
|
|
226
|
+
return { dom };
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}),
|
|
230
|
+
popoverTheme,
|
|
231
|
+
];
|
|
123
232
|
|
|
124
233
|
/** A span has diverged when the current text under its (mapped) range no longer matches its hash. */
|
|
125
234
|
export const spanDiverged = (docText: string, span: { from: number; to: number; sourceHash: string }): boolean =>
|
|
126
235
|
sourceHash(docText.slice(span.from, span.to)) !== span.sourceHash;
|
|
127
236
|
|
|
128
|
-
export type PosOptions = {
|
|
129
|
-
/** When set, the extension self-parses on idle and dispatches `setAnalysis`. */
|
|
130
|
-
parse?: (text: string) => Promise<Document>;
|
|
131
|
-
/** Idle debounce before reactive parsing (ms). */
|
|
132
|
-
debounceMs?: number;
|
|
133
|
-
};
|
|
134
|
-
|
|
135
237
|
/**
|
|
136
238
|
* Reactive driver: on doc change, mark edit-touched spans stale (immediate visual feedback), then
|
|
137
239
|
* after idle re-parse and dispatch fresh analysis. Re-hashing is bounded to spans overlapping the
|
|
@@ -192,15 +294,47 @@ const reactiveDriver = (parse: NonNullable<PosOptions['parse']>, debounceMs: num
|
|
|
192
294
|
return [initial, onEdit];
|
|
193
295
|
};
|
|
194
296
|
|
|
195
|
-
/**
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
}
|
|
297
|
+
/** Colored underline per UPOS tag (stale dimming lives in the always-on base theme). */
|
|
298
|
+
export const posTheme = (): Extension =>
|
|
299
|
+
EditorView.theme({
|
|
300
|
+
'.cm-pos': {
|
|
301
|
+
borderRadius: '0.125rem',
|
|
302
|
+
},
|
|
303
|
+
...Object.fromEntries(
|
|
304
|
+
Object.entries(POS_HUE).map(([upos, hue]) => [
|
|
305
|
+
`.cm-pos-${upos}`,
|
|
306
|
+
{
|
|
307
|
+
borderBottom: `2px solid var(--color-${hue}-500)`,
|
|
308
|
+
},
|
|
309
|
+
]),
|
|
310
|
+
),
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
// Stale dimming must apply even when the underline theme is disabled (e.g. popover-only mode), so a
|
|
314
|
+
// diverged span never presents confident decorations.
|
|
315
|
+
const staleTheme = EditorView.theme({
|
|
316
|
+
'.cm-pos-stale': {
|
|
317
|
+
opacity: '0.4',
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
const popoverTheme = EditorView.theme({
|
|
322
|
+
'.cm-pos-popover': {
|
|
323
|
+
display: 'flex',
|
|
324
|
+
alignItems: 'center',
|
|
325
|
+
gap: '6px',
|
|
326
|
+
padding: '2px 6px',
|
|
327
|
+
},
|
|
328
|
+
'.cm-pos-swatch': {
|
|
329
|
+
width: '8px',
|
|
330
|
+
height: '8px',
|
|
331
|
+
borderRadius: '2px',
|
|
332
|
+
flexShrink: '0',
|
|
333
|
+
},
|
|
334
|
+
'.cm-pos-popover-tag': {
|
|
335
|
+
fontWeight: '600',
|
|
336
|
+
},
|
|
337
|
+
'.cm-pos-popover-label': {
|
|
338
|
+
opacity: '0.7',
|
|
339
|
+
},
|
|
340
|
+
});
|
|
@@ -37,6 +37,9 @@ export const defaultOptions: BlastOptions = {
|
|
|
37
37
|
shakeIntensity: 5,
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Particle 'code blast' cursor effect (demo/novelty).
|
|
42
|
+
*/
|
|
40
43
|
export const blast = (options: Partial<BlastOptions> = defaultOptions): Extension => {
|
|
41
44
|
let blaster: Blaster | undefined;
|
|
42
45
|
let last = 0;
|
|
@@ -38,8 +38,12 @@ export const snippets = ({ delay = 75, items = defaultItems }: SnippetsOptions =
|
|
|
38
38
|
run: (view) => {
|
|
39
39
|
clearTimeout(timer);
|
|
40
40
|
// TODO(burdon): Add space if needed.
|
|
41
|
+
if (items.length === 0) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
|
|
41
45
|
const text = items[index++];
|
|
42
|
-
if (index
|
|
46
|
+
if (index >= items.length) {
|
|
43
47
|
index = 0;
|
|
44
48
|
}
|
|
45
49
|
|
package/src/extensions/index.ts
CHANGED
|
@@ -2,38 +2,15 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
7
|
-
export * from './
|
|
8
|
-
export * from './
|
|
9
|
-
export * from './blast';
|
|
10
|
-
export * from './blocks';
|
|
11
|
-
export * from './bookmarks';
|
|
12
|
-
export * from './busy';
|
|
13
|
-
export * from './comments';
|
|
5
|
+
export * from './behavior';
|
|
6
|
+
export * from './collab';
|
|
7
|
+
export * from './completion';
|
|
8
|
+
export * from './core';
|
|
14
9
|
export * from './debug';
|
|
15
|
-
export * from './
|
|
16
|
-
export * from './
|
|
17
|
-
export * from './
|
|
18
|
-
export * from './
|
|
19
|
-
export * from './folding';
|
|
20
|
-
export * from './hashtag';
|
|
21
|
-
export * from './json';
|
|
22
|
-
export * from './listener';
|
|
23
|
-
export * from './marker';
|
|
24
|
-
export * from './markdown';
|
|
25
|
-
export * from './mention';
|
|
26
|
-
export * from './modal';
|
|
27
|
-
export * from './modes';
|
|
28
|
-
export * from './outliner';
|
|
29
|
-
export * from './pending';
|
|
30
|
-
export * from './pos';
|
|
31
|
-
export * from './replacer';
|
|
32
|
-
export * from './scrolling';
|
|
33
|
-
export * from './selection';
|
|
34
|
-
export * from './spacing';
|
|
35
|
-
export * from './snippets';
|
|
10
|
+
export * from './decoration';
|
|
11
|
+
export * from './demo';
|
|
12
|
+
export * from './language';
|
|
13
|
+
export * from './review';
|
|
36
14
|
export * from './state';
|
|
37
|
-
export * from './
|
|
38
|
-
export * from './
|
|
39
|
-
export * from './typewriter';
|
|
15
|
+
export * from './streaming';
|
|
16
|
+
export * from './structure';
|
|
@@ -2,18 +2,23 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { json, jsonParseLinter } from '@codemirror/lang-json';
|
|
5
|
+
import { json as jsonLanguage, jsonParseLinter } from '@codemirror/lang-json';
|
|
6
6
|
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
10
|
import { type JsonSchema as JsonSchemaType } from '@dxos/echo/JsonSchema';
|
|
11
11
|
|
|
12
|
-
export type
|
|
12
|
+
export type JsonOptions = {
|
|
13
13
|
schema?: JsonSchemaType;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
* JSON editing extension: the JSON language (syntax highlighting, folding, bracket matching) plus a
|
|
18
|
+
* linter. When `schema` (a JSON Schema) is given the linter validates against it; otherwise it reports
|
|
19
|
+
* only parse errors.
|
|
20
|
+
*/
|
|
21
|
+
export const json = ({ schema }: JsonOptions = {}): Extension => {
|
|
17
22
|
let lintSource: LintSource = jsonParseLinter();
|
|
18
23
|
if (schema) {
|
|
19
24
|
// NOTE: Relaxing strict mode to allow additional custom schema properties.
|
|
@@ -22,7 +27,7 @@ export const createJsonExtensions = ({ schema }: JsonExtensionsOptions = {}): Ex
|
|
|
22
27
|
lintSource = schemaLinter(validate);
|
|
23
28
|
}
|
|
24
29
|
|
|
25
|
-
return [
|
|
30
|
+
return [jsonLanguage(), linter(lintSource)];
|
|
26
31
|
};
|
|
27
32
|
|
|
28
33
|
const schemaLinter =
|
|
@@ -37,7 +42,7 @@ const schemaLinter =
|
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
return (
|
|
40
|
-
validate.errors?.map((err
|
|
45
|
+
validate.errors?.map((err) => ({
|
|
41
46
|
from: 0,
|
|
42
47
|
to: jsonText.length,
|
|
43
48
|
severity: 'error',
|
|
@@ -50,7 +55,7 @@ const schemaLinter =
|
|
|
50
55
|
from: 0,
|
|
51
56
|
to: view.state.doc.length,
|
|
52
57
|
severity: 'error',
|
|
53
|
-
message: 'Invalid JSON: ' + (err
|
|
58
|
+
message: 'Invalid JSON: ' + (err instanceof Error ? err.message : String(err)),
|
|
54
59
|
},
|
|
55
60
|
];
|
|
56
61
|
}
|
|
@@ -7,7 +7,7 @@ import { type EditorView } from '@codemirror/view';
|
|
|
7
7
|
import { type Node } from '@dxos/app-graph';
|
|
8
8
|
import { type MenuActionProperties } from '@dxos/ui-types';
|
|
9
9
|
|
|
10
|
-
import { createComment } from '
|
|
10
|
+
import { createComment } from '../../review/comments';
|
|
11
11
|
import {
|
|
12
12
|
Inline,
|
|
13
13
|
List,
|
|
@@ -11,9 +11,11 @@ import { languages } from '@codemirror/language-data';
|
|
|
11
11
|
import { type Extension } from '@codemirror/state';
|
|
12
12
|
import { keymap } from '@codemirror/view';
|
|
13
13
|
import { type MarkdownConfig } from '@lezer/markdown';
|
|
14
|
+
import { mermaidLanguageDescription } from 'codemirror-lang-mermaid';
|
|
14
15
|
|
|
15
16
|
import { isTruthy } from '@dxos/util';
|
|
16
17
|
|
|
18
|
+
import { mermaidHighlightStyle } from '../mermaid';
|
|
17
19
|
import { markdownHighlightStyle, markdownTagsExtensions } from './highlight';
|
|
18
20
|
|
|
19
21
|
export type MarkdownBundleOptions = {
|
|
@@ -47,8 +49,10 @@ export const createMarkdownExtensions = (options: MarkdownBundleOptions = {}): E
|
|
|
47
49
|
|
|
48
50
|
// Languages for syntax highlighting fenced code blocks.
|
|
49
51
|
// Caller-supplied languages are checked first so they can override defaults.
|
|
52
|
+
// Mermaid is registered here rather than by plugin-mermaid: `codeLanguages` is read once when
|
|
53
|
+
// the parser is built, so an extension contributed later cannot add a fenced-code language.
|
|
50
54
|
defaultCodeLanguage: jsonLanguage,
|
|
51
|
-
codeLanguages: [...(options.codeLanguages ?? []), ...languages],
|
|
55
|
+
codeLanguages: [...(options.codeLanguages ?? []), mermaidLanguageDescription, ...languages],
|
|
52
56
|
|
|
53
57
|
// Don't complete HTML tags.
|
|
54
58
|
completeHTMLTags: false,
|
|
@@ -66,6 +70,8 @@ export const createMarkdownExtensions = (options: MarkdownBundleOptions = {}): E
|
|
|
66
70
|
}),
|
|
67
71
|
|
|
68
72
|
// Custom styles.
|
|
73
|
+
// Fenced mermaid uses custom tags, so it needs its own style alongside markdown's.
|
|
74
|
+
syntaxHighlighting(mermaidHighlightStyle()),
|
|
69
75
|
syntaxHighlighting(markdownHighlightStyle()),
|
|
70
76
|
|
|
71
77
|
keymap.of(
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { describe,
|
|
5
|
+
import { describe, test } from 'vitest';
|
|
6
6
|
|
|
7
7
|
import { createLinkLabel } from './changes';
|
|
8
8
|
|
|
@@ -18,7 +18,7 @@ const testCases = [
|
|
|
18
18
|
];
|
|
19
19
|
|
|
20
20
|
describe('changes', () => {
|
|
21
|
-
test('createLinkLabel', () => {
|
|
21
|
+
test('createLinkLabel', ({ expect }) => {
|
|
22
22
|
testCases.forEach(({ input, expected }) => {
|
|
23
23
|
expect(createLinkLabel(new URL(input))).to.eq(expected);
|
|
24
24
|
});
|
|
@@ -6,10 +6,10 @@ import { syntaxTree } from '@codemirror/language';
|
|
|
6
6
|
import { type ChangeSpec, Transaction } from '@codemirror/state';
|
|
7
7
|
import { type PluginValue, ViewPlugin, type ViewUpdate } from '@codemirror/view';
|
|
8
8
|
|
|
9
|
+
// TODO(burdon): Tests.
|
|
9
10
|
/**
|
|
10
|
-
*
|
|
11
|
+
* ViewPlugin that augments input and paste: auto-links pasted URLs and fixes task markers.
|
|
11
12
|
*/
|
|
12
|
-
// TODO(burdon): Tests.
|
|
13
13
|
export const adjustChanges = () => {
|
|
14
14
|
return ViewPlugin.fromClass(
|
|
15
15
|
class implements PluginValue {
|
|
@@ -6,6 +6,9 @@ import { syntaxTree } from '@codemirror/language';
|
|
|
6
6
|
import { type EditorState, type Extension, StateField } from '@codemirror/state';
|
|
7
7
|
import { type TreeCursor } from '@lezer/common';
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* StateField that serialises the syntax tree to JSON and invokes the callback on every state change (debug only).
|
|
11
|
+
*/
|
|
9
12
|
export const debugTree = (cb: (tree: DebugNode) => void): Extension =>
|
|
10
13
|
StateField.define({
|
|
11
14
|
create: (state) => cb(convertTreeToJson(state)),
|