@dxos/plugin-markdown 0.8.4-main.67995b8 → 0.8.4-main.69d29f4
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/MarkdownCard-HFNNE4B4.mjs +12 -0
- package/dist/lib/browser/MarkdownCard-HFNNE4B4.mjs.map +7 -0
- package/dist/lib/browser/MarkdownContainer-V7EAADMF.mjs +12 -0
- package/dist/lib/browser/MarkdownContainer-V7EAADMF.mjs.map +7 -0
- package/dist/lib/browser/anchor-sort-WQ3TL7ZI.mjs +32 -0
- package/dist/lib/browser/anchor-sort-WQ3TL7ZI.mjs.map +7 -0
- package/dist/lib/browser/app-graph-serializer-ULZUJKOD.mjs +58 -0
- package/dist/lib/browser/app-graph-serializer-ULZUJKOD.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-TLV4PNZW.mjs +19 -0
- package/dist/lib/browser/blueprint-definition-TLV4PNZW.mjs.map +7 -0
- package/dist/lib/browser/blueprints/index.mjs +8 -0
- package/dist/lib/browser/blueprints/index.mjs.map +7 -0
- package/dist/lib/browser/chunk-BX73DASG.mjs +702 -0
- package/dist/lib/browser/chunk-BX73DASG.mjs.map +7 -0
- package/dist/lib/browser/chunk-CUGDX7KA.mjs +8 -0
- package/dist/lib/browser/chunk-CUGDX7KA.mjs.map +7 -0
- package/dist/lib/browser/chunk-FWQQW6KU.mjs +144 -0
- package/dist/lib/browser/chunk-FWQQW6KU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-K7ZFMSC4.mjs → chunk-JOXYQLKH.mjs} +10 -7
- package/dist/lib/browser/chunk-JOXYQLKH.mjs.map +7 -0
- package/dist/lib/browser/chunk-KDKXFKDN.mjs +104 -0
- package/dist/lib/browser/chunk-KDKXFKDN.mjs.map +7 -0
- package/dist/lib/browser/chunk-LMO5UVKL.mjs +167 -0
- package/dist/lib/browser/chunk-LMO5UVKL.mjs.map +7 -0
- package/dist/lib/browser/chunk-S45ULIOG.mjs +101 -0
- package/dist/lib/browser/chunk-S45ULIOG.mjs.map +7 -0
- package/dist/lib/browser/chunk-VQ3WOAB6.mjs +60 -0
- package/dist/lib/browser/chunk-VQ3WOAB6.mjs.map +7 -0
- package/dist/lib/browser/cli/index.mjs +32 -0
- package/dist/lib/browser/cli/index.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +127 -137
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operation-resolver-EGCWOQKJ.mjs +53 -0
- package/dist/lib/browser/operation-resolver-EGCWOQKJ.mjs.map +7 -0
- package/dist/lib/browser/react-surface-64FZ7T7F.mjs +213 -0
- package/dist/lib/browser/react-surface-64FZ7T7F.mjs.map +7 -0
- package/dist/lib/browser/settings-JY5JE7MI.mjs +35 -0
- package/dist/lib/browser/settings-JY5JE7MI.mjs.map +7 -0
- package/dist/lib/browser/state-QE7VSJWJ.mjs +29 -0
- package/dist/lib/browser/state-QE7VSJWJ.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +10 -3
- package/dist/lib/node-esm/MarkdownCard-GMNXUWWR.mjs +13 -0
- package/dist/lib/node-esm/MarkdownCard-GMNXUWWR.mjs.map +7 -0
- package/dist/lib/node-esm/MarkdownContainer-LUSMORP2.mjs +13 -0
- package/dist/lib/node-esm/MarkdownContainer-LUSMORP2.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-R6AAKYNG.mjs → anchor-sort-G7D5TAI6.mjs} +12 -12
- package/dist/lib/node-esm/anchor-sort-G7D5TAI6.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-serializer-W5YMQP7P.mjs +59 -0
- package/dist/lib/node-esm/app-graph-serializer-W5YMQP7P.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-HYFA7BKQ.mjs +20 -0
- package/dist/lib/node-esm/blueprint-definition-HYFA7BKQ.mjs.map +7 -0
- package/dist/lib/node-esm/blueprints/index.mjs +9 -0
- package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-3JYPCC7M.mjs +105 -0
- package/dist/lib/node-esm/chunk-3JYPCC7M.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-YGNVDYMB.mjs → chunk-44VJC3QF.mjs} +10 -7
- package/dist/lib/node-esm/chunk-44VJC3QF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-D4BCFPKK.mjs +703 -0
- package/dist/lib/node-esm/chunk-D4BCFPKK.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-EYAFC4N7.mjs +145 -0
- package/dist/lib/node-esm/chunk-EYAFC4N7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-KXEQCFMB.mjs +61 -0
- package/dist/lib/node-esm/chunk-KXEQCFMB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-PRV35A7Z.mjs +168 -0
- package/dist/lib/node-esm/chunk-PRV35A7Z.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SDTYEGGL.mjs +102 -0
- package/dist/lib/node-esm/chunk-SDTYEGGL.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-W3IIKDV5.mjs +10 -0
- package/dist/lib/node-esm/chunk-W3IIKDV5.mjs.map +7 -0
- package/dist/lib/node-esm/cli/index.mjs +33 -0
- package/dist/lib/node-esm/cli/index.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +127 -137
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/operation-resolver-2HIS2AQZ.mjs +54 -0
- package/dist/lib/node-esm/operation-resolver-2HIS2AQZ.mjs.map +7 -0
- package/dist/lib/node-esm/react-surface-PKEVHTJK.mjs +214 -0
- package/dist/lib/node-esm/react-surface-PKEVHTJK.mjs.map +7 -0
- package/dist/lib/node-esm/settings-4UGMPIRY.mjs +36 -0
- package/dist/lib/node-esm/settings-4UGMPIRY.mjs.map +7 -0
- package/dist/lib/node-esm/state-LXE5XIN4.mjs +30 -0
- package/dist/lib/node-esm/state-LXE5XIN4.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +10 -3
- package/dist/types/src/MarkdownPlugin.d.ts +2 -1
- package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
- package/dist/types/src/blueprints/functions/create.d.ts +8 -0
- package/dist/types/src/blueprints/functions/create.d.ts.map +1 -0
- package/dist/types/src/blueprints/functions/create.test.d.ts +2 -0
- package/dist/types/src/blueprints/functions/create.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/functions/open.d.ts +7 -0
- package/dist/types/src/blueprints/functions/open.d.ts.map +1 -0
- package/dist/types/src/blueprints/functions/update.d.ts +6 -0
- package/dist/types/src/blueprints/functions/update.d.ts.map +1 -0
- package/dist/types/src/blueprints/functions/update.test.d.ts +2 -0
- package/dist/types/src/blueprints/functions/update.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/index.d.ts +2 -0
- package/dist/types/src/blueprints/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/markdown-blueprint.d.ts +21 -0
- package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
- package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +5 -0
- package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -0
- package/dist/types/src/capabilities/anchor-sort/index.d.ts +3 -0
- package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
- package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
- package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +5 -0
- package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/artifact-definition/index.d.ts +3 -0
- package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +10 -0
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +7 -16
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/index.d.ts +3 -0
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/settings.d.ts +6 -0
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/index.d.ts +3 -0
- package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/state.d.ts +5 -0
- package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
- package/dist/types/src/cli/index.d.ts +2 -0
- package/dist/types/src/cli/index.d.ts.map +1 -0
- package/dist/types/src/cli/plugin.d.ts +3 -0
- package/dist/types/src/cli/plugin.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +8 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
- package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
- package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownContainer.d.ts +21 -11
- package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.stories.d.ts +55 -5
- package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
- package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +43 -23
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +8 -15
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +30 -0
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +12 -0
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -2
- package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
- package/dist/types/src/components/Suggestions.stories.d.ts +1 -2
- package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +7 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +3 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
- package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
- package/dist/types/src/hooks/useExtensions.d.ts +21 -0
- package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
- package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
- package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
- package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
- package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +3 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -3
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +6 -0
- package/dist/types/src/testing.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +5 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Markdown.d.ts +18 -16
- package/dist/types/src/types/Markdown.d.ts.map +1 -1
- package/dist/types/src/types/MarkdownAction.d.ts +63 -39
- package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts +22 -0
- package/dist/types/src/types/capabilities.d.ts.map +1 -0
- package/dist/types/src/types/events.d.ts +5 -0
- package/dist/types/src/types/events.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +3 -0
- package/dist/types/src/types/index.d.ts.map +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.d.ts +6 -3
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/src/util.test.d.ts +2 -0
- package/dist/types/src/util.test.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +94 -60
- package/src/MarkdownPlugin.tsx +81 -103
- package/src/blueprints/functions/create.conversations.json +1 -0
- package/src/blueprints/functions/create.test.ts +125 -0
- package/src/blueprints/functions/create.ts +34 -0
- package/src/blueprints/functions/index.ts +7 -0
- package/src/blueprints/functions/open.ts +33 -0
- package/src/blueprints/functions/update.conversations.json +1 -0
- package/src/blueprints/functions/update.test.ts +149 -0
- package/src/blueprints/functions/update.ts +38 -0
- package/src/blueprints/index.ts +5 -0
- package/src/blueprints/markdown-blueprint.ts +38 -0
- package/src/capabilities/anchor-sort/anchor-sort.ts +36 -0
- package/src/capabilities/anchor-sort/index.ts +7 -0
- package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +59 -0
- package/src/capabilities/app-graph-serializer/index.ts +7 -0
- package/src/capabilities/artifact-definition/artifact-definition.ts +110 -0
- package/src/capabilities/artifact-definition/index.ts +7 -0
- package/src/capabilities/blueprint-definition/blueprint-definition.ts +25 -0
- package/src/capabilities/blueprint-definition/index.ts +7 -0
- package/src/capabilities/index.ts +7 -11
- package/src/capabilities/operation-resolver/index.ts +7 -0
- package/src/capabilities/operation-resolver/operation-resolver.ts +45 -0
- package/src/capabilities/react-surface/index.ts +7 -0
- package/src/capabilities/react-surface/react-surface.tsx +100 -0
- package/src/capabilities/settings/index.ts +7 -0
- package/src/capabilities/settings/settings.ts +36 -0
- package/src/capabilities/state/index.ts +7 -0
- package/src/capabilities/state/state.ts +31 -0
- package/src/cli/index.ts +5 -0
- package/src/cli/plugin.ts +29 -0
- package/src/components/MarkdownCard/MarkdownCard.stories.tsx +58 -0
- package/src/components/MarkdownCard/MarkdownCard.tsx +62 -0
- package/src/components/MarkdownCard/index.ts +9 -0
- package/src/components/MarkdownContainer.stories.tsx +80 -57
- package/src/components/MarkdownContainer.tsx +104 -247
- package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +57 -35
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +220 -272
- package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +162 -0
- package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +66 -0
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +94 -77
- package/src/components/Suggestions.stories.tsx +61 -66
- package/src/components/index.ts +10 -3
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useEditorMenuOptions.ts +68 -0
- package/src/{extensions.tsx → hooks/useExtensions.tsx} +77 -131
- package/src/hooks/useLinkQuery.ts +83 -0
- package/src/hooks/useSelectCurrentThread.tsx +38 -33
- package/src/index.ts +4 -3
- package/src/meta.ts +5 -8
- package/src/testing.ts +27 -0
- package/src/translations.ts +5 -0
- package/src/types/Markdown.ts +11 -9
- package/src/types/MarkdownAction.ts +52 -23
- package/src/types/capabilities.ts +38 -0
- package/src/types/events.ts +13 -0
- package/src/types/index.ts +4 -0
- package/src/types/types.ts +4 -2
- package/src/util.test.ts +44 -0
- package/src/util.tsx +82 -7
- package/dist/lib/browser/MarkdownContainer-NNBPE6A5.mjs +0 -779
- package/dist/lib/browser/MarkdownContainer-NNBPE6A5.mjs.map +0 -7
- package/dist/lib/browser/MarkdownPreview-7VG3K24R.mjs +0 -80
- package/dist/lib/browser/MarkdownPreview-7VG3K24R.mjs.map +0 -7
- package/dist/lib/browser/anchor-sort-Z7JQA7RL.mjs +0 -32
- package/dist/lib/browser/anchor-sort-Z7JQA7RL.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-ZT5OVF5G.mjs +0 -52
- package/dist/lib/browser/app-graph-serializer-ZT5OVF5G.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-7VNP5PCP.mjs +0 -145
- package/dist/lib/browser/artifact-definition-7VNP5PCP.mjs.map +0 -7
- package/dist/lib/browser/chunk-CD4E4K7J.mjs +0 -16
- package/dist/lib/browser/chunk-CD4E4K7J.mjs.map +0 -7
- package/dist/lib/browser/chunk-K7ZFMSC4.mjs.map +0 -7
- package/dist/lib/browser/chunk-VCUKIILA.mjs +0 -20
- package/dist/lib/browser/chunk-VCUKIILA.mjs.map +0 -7
- package/dist/lib/browser/chunk-VMX5SDGW.mjs +0 -50
- package/dist/lib/browser/chunk-VMX5SDGW.mjs.map +0 -7
- package/dist/lib/browser/chunk-YHMGUSO7.mjs +0 -80
- package/dist/lib/browser/chunk-YHMGUSO7.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZGY3DYC2.mjs +0 -30
- package/dist/lib/browser/chunk-ZGY3DYC2.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-EBEF7WEI.mjs +0 -60
- package/dist/lib/browser/intent-resolver-EBEF7WEI.mjs.map +0 -7
- package/dist/lib/browser/react-surface-ZPMZT4VU.mjs +0 -208
- package/dist/lib/browser/react-surface-ZPMZT4VU.mjs.map +0 -7
- package/dist/lib/browser/settings-MBDK4TWE.mjs +0 -28
- package/dist/lib/browser/settings-MBDK4TWE.mjs.map +0 -7
- package/dist/lib/browser/state-ZA6PZPUI.mjs +0 -37
- package/dist/lib/browser/state-ZA6PZPUI.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownContainer-Q6UO7DKT.mjs +0 -780
- package/dist/lib/node-esm/MarkdownContainer-Q6UO7DKT.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownPreview-UVWR2YK3.mjs +0 -81
- package/dist/lib/node-esm/MarkdownPreview-UVWR2YK3.mjs.map +0 -7
- package/dist/lib/node-esm/anchor-sort-R6AAKYNG.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-X4M5QEI6.mjs +0 -53
- package/dist/lib/node-esm/app-graph-serializer-X4M5QEI6.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-IRIILD7S.mjs +0 -146
- package/dist/lib/node-esm/artifact-definition-IRIILD7S.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6GCOJS4Y.mjs +0 -81
- package/dist/lib/node-esm/chunk-6GCOJS4Y.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-A7LLVI34.mjs +0 -22
- package/dist/lib/node-esm/chunk-A7LLVI34.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-B3J2M4YL.mjs +0 -17
- package/dist/lib/node-esm/chunk-B3J2M4YL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-LZK3TLKM.mjs +0 -51
- package/dist/lib/node-esm/chunk-LZK3TLKM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RCIXKCVG.mjs +0 -31
- package/dist/lib/node-esm/chunk-RCIXKCVG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YGNVDYMB.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-L2UGZ72W.mjs +0 -61
- package/dist/lib/node-esm/intent-resolver-L2UGZ72W.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-3JJSTTQP.mjs +0 -209
- package/dist/lib/node-esm/react-surface-3JJSTTQP.mjs.map +0 -7
- package/dist/lib/node-esm/settings-LBDWWPZJ.mjs +0 -29
- package/dist/lib/node-esm/settings-LBDWWPZJ.mjs.map +0 -7
- package/dist/lib/node-esm/state-UIHO2SFZ.mjs +0 -38
- package/dist/lib/node-esm/state-UIHO2SFZ.mjs.map +0 -7
- package/dist/types/src/capabilities/anchor-sort.d.ts +0 -6
- package/dist/types/src/capabilities/anchor-sort.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
- package/dist/types/src/capabilities/artifact-definition.d.ts +0 -11
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
- package/dist/types/src/capabilities/capabilities.d.ts +0 -12
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface.d.ts +0 -4
- package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/settings.d.ts +0 -4
- package/dist/types/src/capabilities/settings.d.ts.map +0 -1
- package/dist/types/src/capabilities/state.d.ts +0 -11
- package/dist/types/src/capabilities/state.d.ts.map +0 -1
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -10
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
- package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
- package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar.stories.d.ts +0 -11
- package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
- package/dist/types/src/events.d.ts +0 -4
- package/dist/types/src/events.d.ts.map +0 -1
- package/dist/types/src/extensions.d.ts +0 -24
- package/dist/types/src/extensions.d.ts.map +0 -1
- package/src/capabilities/anchor-sort.ts +0 -30
- package/src/capabilities/app-graph-serializer.ts +0 -54
- package/src/capabilities/artifact-definition.ts +0 -116
- package/src/capabilities/capabilities.ts +0 -21
- package/src/capabilities/intent-resolver.ts +0 -57
- package/src/capabilities/react-surface.tsx +0 -114
- package/src/capabilities/settings.ts +0 -25
- package/src/capabilities/state.ts +0 -30
- package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -77
- package/src/components/MarkdownPreview/MarkdownPreview.tsx +0 -73
- package/src/components/MarkdownPreview/index.ts +0 -9
- package/src/components/Toolbar.stories.tsx +0 -112
- package/src/events.ts +0 -11
|
@@ -6,56 +6,51 @@ import { type ViewUpdate } from '@codemirror/view';
|
|
|
6
6
|
import React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react';
|
|
7
7
|
import { createRoot } from 'react-dom/client';
|
|
8
8
|
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
LayoutAction,
|
|
12
|
-
type PromiseIntentDispatcher,
|
|
13
|
-
useCapabilities,
|
|
14
|
-
useIntentDispatcher,
|
|
15
|
-
} from '@dxos/app-framework';
|
|
9
|
+
import { Common } from '@dxos/app-framework';
|
|
10
|
+
import { useOperationInvoker } from '@dxos/app-framework/react';
|
|
16
11
|
import { debounceAndThrottle } from '@dxos/async';
|
|
12
|
+
import { Obj } from '@dxos/echo';
|
|
13
|
+
import { createDocAccessor } from '@dxos/echo-db';
|
|
17
14
|
import { invariant } from '@dxos/invariant';
|
|
18
|
-
import {
|
|
15
|
+
import { getSpace, useObject } from '@dxos/react-client/echo';
|
|
19
16
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
20
17
|
import { Icon, ThemeProvider } from '@dxos/react-ui';
|
|
21
18
|
import { type SelectionManager } from '@dxos/react-ui-attention';
|
|
19
|
+
import { Text } from '@dxos/schema';
|
|
22
20
|
import {
|
|
23
|
-
|
|
21
|
+
Cursor,
|
|
24
22
|
type EditorStateStore,
|
|
23
|
+
EditorView,
|
|
25
24
|
type EditorViewMode,
|
|
26
25
|
type Extension,
|
|
27
26
|
InputModeExtensions,
|
|
27
|
+
type PreviewOptions,
|
|
28
|
+
type RenderCallback,
|
|
28
29
|
createDataExtensions,
|
|
29
|
-
autocomplete,
|
|
30
30
|
decorateMarkdown,
|
|
31
|
+
documentId,
|
|
31
32
|
folding,
|
|
32
33
|
formattingKeymap,
|
|
33
34
|
linkTooltip,
|
|
34
35
|
listener,
|
|
35
36
|
preview,
|
|
37
|
+
replacer,
|
|
36
38
|
selectionState,
|
|
37
39
|
typewriter,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
} from '
|
|
44
|
-
import { defaultTx } from '@dxos/react-ui-theme';
|
|
45
|
-
import { type DataType } from '@dxos/schema';
|
|
46
|
-
import { isNotFalsy } from '@dxos/util';
|
|
40
|
+
} from '@dxos/ui-editor';
|
|
41
|
+
import { defaultTx } from '@dxos/ui-theme';
|
|
42
|
+
import { isTruthy } from '@dxos/util';
|
|
43
|
+
|
|
44
|
+
import { Markdown } from '../types';
|
|
45
|
+
import { setFallbackName } from '../util';
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
import { type Markdown } from './types';
|
|
50
|
-
import { setFallbackName } from './util';
|
|
47
|
+
export type DocumentType = Markdown.Document | Text.Text | { id: string; text: string };
|
|
51
48
|
|
|
52
|
-
type ExtensionsOptions = {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
query?: QueryResult<Markdown.Document>;
|
|
58
|
-
settings: Markdown.Settings;
|
|
49
|
+
export type ExtensionsOptions = {
|
|
50
|
+
id: string;
|
|
51
|
+
object?: DocumentType;
|
|
52
|
+
invokePromise?: Common.Capability.OperationInvoker['invokePromise'];
|
|
53
|
+
settings?: Markdown.Settings;
|
|
59
54
|
selectionManager?: SelectionManager;
|
|
60
55
|
viewMode?: EditorViewMode;
|
|
61
56
|
editorStateStore?: EditorStateStore;
|
|
@@ -64,104 +59,82 @@ type ExtensionsOptions = {
|
|
|
64
59
|
|
|
65
60
|
// TODO(burdon): Merge with createBaseExtensions below.
|
|
66
61
|
export const useExtensions = ({
|
|
67
|
-
document,
|
|
68
62
|
id,
|
|
69
|
-
|
|
63
|
+
object,
|
|
70
64
|
settings,
|
|
71
65
|
selectionManager,
|
|
72
66
|
viewMode,
|
|
73
67
|
editorStateStore,
|
|
74
68
|
previewOptions,
|
|
75
69
|
}: ExtensionsOptions): Extension[] => {
|
|
76
|
-
const {
|
|
70
|
+
const { invokePromise } = useOperationInvoker();
|
|
77
71
|
const identity = useIdentity();
|
|
78
|
-
const space = getSpace(
|
|
72
|
+
const space = getSpace(object);
|
|
73
|
+
|
|
74
|
+
// Get the content reference from Document objects.
|
|
75
|
+
const contentRef = Obj.instanceOf(Markdown.Document, object) ? (object as Markdown.Document).content : undefined;
|
|
76
|
+
// Use useObject to trigger re-render when the reference loads (returns snapshot for reactivity).
|
|
77
|
+
useObject(contentRef);
|
|
78
|
+
// Get the actual live object target via .target (needed for createDocAccessor).
|
|
79
|
+
const target = contentRef?.target ?? (Obj.instanceOf(Text.Text, object) ? object : undefined);
|
|
79
80
|
|
|
80
81
|
// TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.
|
|
81
82
|
// TODO(burdon): Unsubscribe.
|
|
82
83
|
// const query = space?.db.query(Filter.type(DocumentType));
|
|
83
84
|
// query?.subscribe();
|
|
85
|
+
|
|
84
86
|
const baseExtensions = useMemo(
|
|
85
87
|
() =>
|
|
86
88
|
createBaseExtensions({
|
|
87
|
-
document,
|
|
88
89
|
id,
|
|
89
|
-
|
|
90
|
+
object,
|
|
90
91
|
settings,
|
|
91
92
|
selectionManager,
|
|
92
93
|
viewMode,
|
|
93
94
|
previewOptions,
|
|
94
|
-
|
|
95
|
-
// query,
|
|
95
|
+
invokePromise,
|
|
96
96
|
}),
|
|
97
97
|
[
|
|
98
|
-
document,
|
|
99
98
|
id,
|
|
100
|
-
|
|
99
|
+
object,
|
|
101
100
|
viewMode,
|
|
102
|
-
|
|
101
|
+
invokePromise,
|
|
103
102
|
previewOptions,
|
|
104
103
|
settings,
|
|
105
|
-
settings
|
|
106
|
-
settings
|
|
107
|
-
settings
|
|
108
|
-
settings
|
|
109
|
-
settings
|
|
104
|
+
settings?.debug,
|
|
105
|
+
settings?.editorInputMode,
|
|
106
|
+
settings?.folding,
|
|
107
|
+
settings?.numberedHeadings,
|
|
108
|
+
settings?.typewriter,
|
|
110
109
|
selectionManager,
|
|
111
110
|
],
|
|
112
111
|
);
|
|
113
112
|
|
|
114
|
-
const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
|
|
115
|
-
|
|
116
|
-
//
|
|
117
|
-
// External extensions from other plugins.
|
|
118
|
-
//
|
|
119
|
-
const pluginExtensions = useMemo<Extension[]>(() => {
|
|
120
|
-
if (!document) {
|
|
121
|
-
return [];
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return extensionProviders.flat().reduce((acc: Extension[], provider) => {
|
|
125
|
-
const extension = typeof provider === 'function' ? provider({ document }) : provider;
|
|
126
|
-
if (extension) {
|
|
127
|
-
acc.push(extension);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return acc;
|
|
131
|
-
}, []);
|
|
132
|
-
}, [extensionProviders, document]);
|
|
133
|
-
|
|
134
|
-
//
|
|
135
|
-
// Basic plugins.
|
|
136
|
-
//
|
|
137
113
|
return useMemo<Extension[]>(
|
|
138
114
|
() =>
|
|
139
115
|
[
|
|
116
|
+
// TODO(burdon): Pass this in?
|
|
140
117
|
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
141
|
-
|
|
142
|
-
createDataExtensions({
|
|
143
|
-
id: document.id,
|
|
144
|
-
text: document.content.target && createDocAccessor(document.content.target, ['content']),
|
|
145
|
-
space,
|
|
146
|
-
identity,
|
|
147
|
-
}),
|
|
148
|
-
text &&
|
|
149
|
-
id &&
|
|
118
|
+
target &&
|
|
150
119
|
createDataExtensions({
|
|
151
120
|
id,
|
|
152
|
-
text: createDocAccessor(
|
|
153
|
-
space,
|
|
121
|
+
text: createDocAccessor(target, ['content']),
|
|
122
|
+
messenger: space,
|
|
154
123
|
identity,
|
|
155
124
|
}),
|
|
156
|
-
|
|
157
|
-
|
|
125
|
+
|
|
126
|
+
// TODO(burdon): Reconcile with effect in parent.
|
|
127
|
+
Obj.instanceOf(Markdown.Document, object) &&
|
|
158
128
|
listener({
|
|
159
|
-
onChange: (text) =>
|
|
129
|
+
onChange: ({ text }) => {
|
|
130
|
+
setFallbackName(object as Markdown.Document, text);
|
|
131
|
+
},
|
|
160
132
|
}),
|
|
133
|
+
|
|
161
134
|
baseExtensions,
|
|
162
|
-
|
|
163
|
-
].filter(
|
|
164
|
-
[
|
|
135
|
+
selectionState(editorStateStore),
|
|
136
|
+
].filter(isTruthy),
|
|
137
|
+
[identity, space, id, object, target, baseExtensions],
|
|
165
138
|
);
|
|
166
139
|
};
|
|
167
140
|
|
|
@@ -169,20 +142,19 @@ export const useExtensions = ({
|
|
|
169
142
|
* Create extension instances for editor.
|
|
170
143
|
*/
|
|
171
144
|
const createBaseExtensions = ({
|
|
172
|
-
document,
|
|
173
145
|
id,
|
|
174
|
-
|
|
146
|
+
object,
|
|
147
|
+
invokePromise,
|
|
175
148
|
settings,
|
|
176
149
|
selectionManager,
|
|
177
|
-
query,
|
|
178
150
|
viewMode,
|
|
179
151
|
previewOptions,
|
|
180
152
|
}: ExtensionsOptions): Extension[] => {
|
|
181
153
|
const extensions: Extension[] = [
|
|
182
154
|
selectionManager && selectionChange(selectionManager),
|
|
183
|
-
settings
|
|
184
|
-
settings
|
|
185
|
-
].filter(
|
|
155
|
+
settings?.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
156
|
+
settings?.folding && folding(),
|
|
157
|
+
].filter(isTruthy);
|
|
186
158
|
|
|
187
159
|
//
|
|
188
160
|
// Markdown
|
|
@@ -193,54 +165,27 @@ const createBaseExtensions = ({
|
|
|
193
165
|
formattingKeymap(),
|
|
194
166
|
decorateMarkdown({
|
|
195
167
|
selectionChangeDelay: 100,
|
|
196
|
-
numberedHeadings: settings
|
|
168
|
+
numberedHeadings: settings?.numberedHeadings ? { from: 2 } : undefined,
|
|
197
169
|
// TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
|
|
170
|
+
// TODO(burdon): Create dx-tag.
|
|
198
171
|
renderLinkButton:
|
|
199
|
-
|
|
200
|
-
? createLinkRenderer((
|
|
201
|
-
void
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
options: {
|
|
206
|
-
pivotId: document ? fullyQualifiedId(document) : id,
|
|
207
|
-
},
|
|
208
|
-
}),
|
|
209
|
-
);
|
|
172
|
+
invokePromise && (object || id)
|
|
173
|
+
? createLinkRenderer((targetId: string) => {
|
|
174
|
+
void invokePromise(Common.LayoutOperation.Open, {
|
|
175
|
+
subject: [targetId],
|
|
176
|
+
pivotId: object && Obj.isObject(object) ? Obj.getDXN(object).toString() : id,
|
|
177
|
+
});
|
|
210
178
|
})
|
|
211
179
|
: undefined,
|
|
212
180
|
}),
|
|
213
181
|
linkTooltip(renderLinkTooltip),
|
|
214
182
|
preview(previewOptions),
|
|
183
|
+
replacer(),
|
|
215
184
|
],
|
|
216
185
|
);
|
|
217
186
|
}
|
|
218
187
|
|
|
219
|
-
|
|
220
|
-
// Autocomplete object links.
|
|
221
|
-
//
|
|
222
|
-
if (query) {
|
|
223
|
-
extensions.push(
|
|
224
|
-
autocomplete({
|
|
225
|
-
onSearch: (text: string) => {
|
|
226
|
-
// TODO(burdon): Specify filter (e.g., stack).
|
|
227
|
-
return query.objects
|
|
228
|
-
.map<AutocompleteResult | undefined>((object) =>
|
|
229
|
-
object.name?.length && object.id !== document?.id
|
|
230
|
-
? {
|
|
231
|
-
label: object.name,
|
|
232
|
-
// TODO(burdon): Factor out URL builder.
|
|
233
|
-
apply: `[${object.name}](/${fullyQualifiedId(object)})`,
|
|
234
|
-
}
|
|
235
|
-
: undefined,
|
|
236
|
-
)
|
|
237
|
-
.filter(isNotFalsy);
|
|
238
|
-
},
|
|
239
|
-
}),
|
|
240
|
-
);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
if (settings.debug) {
|
|
188
|
+
if (settings?.debug) {
|
|
244
189
|
const items = settings.typewriter?.split(/[,\n]/) ?? '';
|
|
245
190
|
if (items) {
|
|
246
191
|
extensions.push(typewriter({ items }));
|
|
@@ -250,7 +195,7 @@ const createBaseExtensions = ({
|
|
|
250
195
|
return extensions;
|
|
251
196
|
};
|
|
252
197
|
|
|
253
|
-
|
|
198
|
+
const selectionChange = (selectionManager: SelectionManager) => {
|
|
254
199
|
return EditorView.updateListener.of(
|
|
255
200
|
debounceAndThrottle((update: ViewUpdate) => {
|
|
256
201
|
if (update.selectionSet) {
|
|
@@ -263,6 +208,7 @@ export const selectionChange = (selectionManager: SelectionManager) => {
|
|
|
263
208
|
to: cursorConverter.toCursor(range.to),
|
|
264
209
|
}))
|
|
265
210
|
.filter(({ from, to }) => to > from);
|
|
211
|
+
|
|
266
212
|
selectionManager.updateMultiRange(id, ranges);
|
|
267
213
|
}
|
|
268
214
|
}, 100),
|
|
@@ -321,8 +267,8 @@ const renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {
|
|
|
321
267
|
);
|
|
322
268
|
};
|
|
323
269
|
|
|
324
|
-
// TODO(burdon):
|
|
325
|
-
|
|
270
|
+
// TODO(burdon): REMOVE.
|
|
271
|
+
const renderRoot = <T extends Element>(root: T, node: ReactNode): T => {
|
|
326
272
|
createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);
|
|
327
273
|
return root;
|
|
328
274
|
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
6
|
+
import { useCallback, useMemo } from 'react';
|
|
7
|
+
|
|
8
|
+
import { Common } from '@dxos/app-framework';
|
|
9
|
+
import { usePluginManager } from '@dxos/app-framework/react';
|
|
10
|
+
import { type Database, Filter, Obj, Query, Type } from '@dxos/echo';
|
|
11
|
+
import { EntityKind, SystemTypeAnnotation, getTypeAnnotation } from '@dxos/echo/internal';
|
|
12
|
+
import { toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
13
|
+
import { type EditorMenuGroup, type EditorMenuItem } from '@dxos/react-ui-editor';
|
|
14
|
+
import { insertAtCursor, insertAtLineStart } from '@dxos/ui-editor';
|
|
15
|
+
|
|
16
|
+
export const useLinkQuery = (db: Database.Database | undefined) => {
|
|
17
|
+
const { t } = useTranslation();
|
|
18
|
+
|
|
19
|
+
const manager = usePluginManager();
|
|
20
|
+
const resolve = useCallback(
|
|
21
|
+
(typename: string) =>
|
|
22
|
+
manager.capabilities.getAll(Common.Capability.Metadata).find(({ id }) => id === typename)?.metadata ?? {},
|
|
23
|
+
[manager],
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const filter = useMemo(
|
|
27
|
+
() =>
|
|
28
|
+
Filter.or(
|
|
29
|
+
...(db?.schemaRegistry.query({ location: ['database', 'runtime'] }).runSync() ?? [])
|
|
30
|
+
.filter((schema) => getTypeAnnotation(schema)?.kind !== EntityKind.Relation)
|
|
31
|
+
.filter((schema) => !SystemTypeAnnotation.get(schema).pipe(Option.getOrElse(() => false)))
|
|
32
|
+
.map((schema) => Filter.typename(Type.getTypename(schema))),
|
|
33
|
+
),
|
|
34
|
+
[db],
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const handleLinkQuery = useCallback(
|
|
38
|
+
async (query?: string): Promise<EditorMenuGroup[]> => {
|
|
39
|
+
const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : (query?.toLowerCase() ?? '');
|
|
40
|
+
const results = await db?.query(Query.select(filter)).run();
|
|
41
|
+
|
|
42
|
+
// TODO(wittjosiah): Use `Obj.Unknown` type.
|
|
43
|
+
const getLabel = (object: any) => {
|
|
44
|
+
const label = Obj.getLabel(object);
|
|
45
|
+
if (label) {
|
|
46
|
+
return label;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// TODO(wittjosiah): Remove metadata labels.
|
|
50
|
+
const type = Obj.getTypename(object)!;
|
|
51
|
+
const metadata = resolve(type);
|
|
52
|
+
return metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New object' }];
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const items =
|
|
56
|
+
results
|
|
57
|
+
?.filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name))
|
|
58
|
+
// TODO(wittjosiah): Remove `any` type.
|
|
59
|
+
.map((object: any): EditorMenuItem => {
|
|
60
|
+
const metadata = resolve(Obj.getTypename(object)!);
|
|
61
|
+
const label = toLocalizedString(getLabel(object), t);
|
|
62
|
+
return {
|
|
63
|
+
id: object.id,
|
|
64
|
+
label,
|
|
65
|
+
icon: metadata.icon,
|
|
66
|
+
onSelect: ({ view, head }) => {
|
|
67
|
+
const link = `[${label}](${Obj.getDXN(object)})`;
|
|
68
|
+
if (query?.startsWith('@')) {
|
|
69
|
+
insertAtLineStart(view, head, `!${link}\n`);
|
|
70
|
+
} else {
|
|
71
|
+
insertAtCursor(view, head, `${link} `);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}) ?? [];
|
|
76
|
+
|
|
77
|
+
return [{ id: 'echo', items }];
|
|
78
|
+
},
|
|
79
|
+
[db, filter, resolve],
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
return handleLinkQuery;
|
|
83
|
+
};
|
|
@@ -3,54 +3,59 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { EditorView } from '@codemirror/view';
|
|
6
|
-
import
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
7
|
import { useMemo } from 'react';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { Common } from '@dxos/app-framework';
|
|
10
|
+
import { useOperationResolver } from '@dxos/app-framework/react';
|
|
10
11
|
import { invariant } from '@dxos/invariant';
|
|
11
|
-
import {
|
|
12
|
+
import { OperationResolver } from '@dxos/operation';
|
|
13
|
+
import { Cursor, setSelection } from '@dxos/ui-editor';
|
|
12
14
|
|
|
13
15
|
import { meta } from '../meta';
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
18
|
* Handle scrolling and selection of the current thread in a markdown editor.
|
|
17
19
|
*/
|
|
18
|
-
export const useSelectCurrentThread = (editorView: EditorView |
|
|
19
|
-
const
|
|
20
|
+
export const useSelectCurrentThread = (editorView: EditorView | null, documentId: string) => {
|
|
21
|
+
const scrollIntoViewHandler = useMemo(
|
|
20
22
|
() =>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
OperationResolver.make({
|
|
24
|
+
operation: Common.LayoutOperation.ScrollIntoView,
|
|
23
25
|
position: 'hoist',
|
|
24
|
-
filter: (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
resolve: ({ options: { cursor } }) => {
|
|
32
|
-
invariant(editorView, 'Editor view is not defined.');
|
|
33
|
-
const range = Cursor.getRangeFromCursor(editorView.state, cursor!);
|
|
34
|
-
if (range) {
|
|
35
|
-
const selection = editorView.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;
|
|
36
|
-
const effects = [
|
|
37
|
-
// NOTE: This does not use the DOM scrollIntoView function.
|
|
38
|
-
EditorView.scrollIntoView(range.from, { y: 'start', yMargin: 96 }),
|
|
39
|
-
];
|
|
40
|
-
if (selection) {
|
|
41
|
-
// Update the editor selection to get bi-directional highlighting.
|
|
42
|
-
effects.push(setSelection.of({ current: documentId }));
|
|
26
|
+
filter: (input) => !!editorView && input.subject === documentId && !!input.cursor,
|
|
27
|
+
handler: (input) =>
|
|
28
|
+
Effect.sync(() => {
|
|
29
|
+
invariant(editorView, 'Editor view is not defined.');
|
|
30
|
+
const cursor = input.cursor;
|
|
31
|
+
if (!cursor) {
|
|
32
|
+
return;
|
|
43
33
|
}
|
|
34
|
+
const range = Cursor.getRangeFromCursor(editorView.state, cursor);
|
|
35
|
+
if (range) {
|
|
36
|
+
const selection =
|
|
37
|
+
editorView.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;
|
|
38
|
+
const effects = [
|
|
39
|
+
// NOTE: This does not use the DOM scrollIntoView function.
|
|
40
|
+
EditorView.scrollIntoView(range.from, {
|
|
41
|
+
y: 'start',
|
|
42
|
+
yMargin: 96,
|
|
43
|
+
}),
|
|
44
|
+
];
|
|
45
|
+
if (selection) {
|
|
46
|
+
// Update the editor selection to get bi-directional highlighting.
|
|
47
|
+
effects.push(setSelection.of({ current: documentId }));
|
|
48
|
+
}
|
|
44
49
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
editorView.dispatch({
|
|
51
|
+
effects,
|
|
52
|
+
selection: selection ? { anchor: range.from } : undefined,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}),
|
|
51
56
|
}),
|
|
52
57
|
[documentId, editorView],
|
|
53
58
|
);
|
|
54
59
|
|
|
55
|
-
|
|
60
|
+
useOperationResolver(meta.id, scrollIntoViewHandler);
|
|
56
61
|
};
|
package/src/index.ts
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
export { MarkdownCapabilities } from './
|
|
6
|
-
export { MarkdownEvents } from './events';
|
|
5
|
+
export { MarkdownCapabilities, MarkdownEvents } from './types';
|
|
7
6
|
|
|
8
|
-
export * from './MarkdownPlugin';
|
|
9
7
|
export * from './meta';
|
|
8
|
+
export * from './types';
|
|
10
9
|
export * from './util';
|
|
10
|
+
|
|
11
|
+
export * from './MarkdownPlugin';
|
package/src/meta.ts
CHANGED
|
@@ -2,21 +2,18 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type
|
|
5
|
+
import { type Plugin } from '@dxos/app-framework';
|
|
6
6
|
import { trim } from '@dxos/util';
|
|
7
7
|
|
|
8
|
-
export const meta:
|
|
8
|
+
export const meta: Plugin.Meta = {
|
|
9
9
|
id: 'dxos.org/plugin/markdown',
|
|
10
10
|
name: 'Markdown',
|
|
11
11
|
description: trim`
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
You can use documents to extend the memory of your personal agents and add context for automated workflows.
|
|
12
|
+
Full-featured collaborative markdown editor with real-time editing, inline comments, and rich formatting.
|
|
13
|
+
Supports AI-powered editing assistance and seamlessly integrates with other workspace objects.
|
|
15
14
|
`,
|
|
16
15
|
icon: 'ph--text-aa--regular',
|
|
16
|
+
iconHue: 'indigo',
|
|
17
17
|
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
|
|
18
18
|
screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],
|
|
19
19
|
};
|
|
20
|
-
|
|
21
|
-
// TODO(burdon): Workaround for suspected vitest bug?
|
|
22
|
-
export const not_meta = meta;
|
package/src/testing.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Toolkit from '@effect/ai/Toolkit';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
|
|
8
|
+
import { SpaceProperties } from '@dxos/client-protocol';
|
|
9
|
+
import { Obj, Ref } from '@dxos/echo';
|
|
10
|
+
import { Database } from '@dxos/echo';
|
|
11
|
+
import { Collection } from '@dxos/schema';
|
|
12
|
+
|
|
13
|
+
// TODO(wittjosiah): Factor out.
|
|
14
|
+
export const WithProperties = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R | Database.Service> =>
|
|
15
|
+
Effect.zipRight(
|
|
16
|
+
Effect.gen(function* () {
|
|
17
|
+
// TODO(wittjosiah): Remove cast.
|
|
18
|
+
yield* Database.Service.add(
|
|
19
|
+
Obj.make(SpaceProperties, {
|
|
20
|
+
[Collection.Collection.typename]: Ref.make(Collection.make()),
|
|
21
|
+
}) as any,
|
|
22
|
+
);
|
|
23
|
+
}),
|
|
24
|
+
effect,
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export const testToolkit = Toolkit.empty as Toolkit.Toolkit<any>;
|
package/src/translations.ts
CHANGED
|
@@ -18,9 +18,11 @@ export const translations = [
|
|
|
18
18
|
'object name placeholder': 'New document',
|
|
19
19
|
'rename object label': 'Rename document',
|
|
20
20
|
'delete object label': 'Delete document',
|
|
21
|
+
'object deleted label': 'Document deleted',
|
|
21
22
|
},
|
|
22
23
|
[meta.id]: {
|
|
23
24
|
'plugin name': 'Editor',
|
|
25
|
+
'settings title': 'Editor settings',
|
|
24
26
|
'choose markdown from space dialog title': 'Choose one or more documents to add',
|
|
25
27
|
// TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)
|
|
26
28
|
'empty choose markdown from space message': 'None available; try creating a new one instead?',
|
|
@@ -42,6 +44,9 @@ export const translations = [
|
|
|
42
44
|
'upload image label': 'Upload image',
|
|
43
45
|
'fallback title': 'Untitled',
|
|
44
46
|
'navigate to document label': 'Open document',
|
|
47
|
+
'words label_zero': 'words',
|
|
48
|
+
'words label_one': 'word',
|
|
49
|
+
'words label_other': 'words',
|
|
45
50
|
},
|
|
46
51
|
},
|
|
47
52
|
},
|
package/src/types/Markdown.ts
CHANGED
|
@@ -2,26 +2,28 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
|
|
7
7
|
import { Obj, Ref, Type } from '@dxos/echo';
|
|
8
|
-
import { LabelAnnotation } from '@dxos/echo
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { DescriptionAnnotation, FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';
|
|
9
|
+
import { Text } from '@dxos/schema';
|
|
10
|
+
import { EditorInputMode, EditorViewMode } from '@dxos/ui-editor/types';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Document Item type.
|
|
14
14
|
*/
|
|
15
15
|
export const Document = Schema.Struct({
|
|
16
16
|
name: Schema.optional(Schema.String),
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
description: Schema.optional(Schema.String),
|
|
18
|
+
fallbackName: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional),
|
|
19
|
+
content: Type.Ref(Text.Text).pipe(FormInputAnnotation.set(false)),
|
|
19
20
|
}).pipe(
|
|
20
|
-
Type.
|
|
21
|
+
Type.object({
|
|
21
22
|
typename: 'dxos.org/type/Document',
|
|
22
23
|
version: '0.1.0',
|
|
23
24
|
}),
|
|
24
25
|
LabelAnnotation.set(['name', 'fallbackName']),
|
|
26
|
+
DescriptionAnnotation.set('description'),
|
|
25
27
|
);
|
|
26
28
|
|
|
27
29
|
export type Document = Schema.Schema.Type<typeof Document>;
|
|
@@ -29,11 +31,11 @@ export type Document = Schema.Schema.Type<typeof Document>;
|
|
|
29
31
|
/**
|
|
30
32
|
* Document factory.
|
|
31
33
|
*/
|
|
32
|
-
export const
|
|
34
|
+
export const make = ({
|
|
33
35
|
content = '',
|
|
34
36
|
...props
|
|
35
37
|
}: Partial<{ name: string; fallbackName: string; content: string }> = {}) =>
|
|
36
|
-
Obj.make(Document, { ...props, content: Ref.make(
|
|
38
|
+
Obj.make(Document, { ...props, content: Ref.make(Text.make(content)) });
|
|
37
39
|
|
|
38
40
|
/**
|
|
39
41
|
* Plugin settings.
|