@dxos/plugin-markdown 0.9.0 → 0.9.1-staging.ee54ba693a
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/neutral/{MarkdownArticle-LWT5RFFJ.mjs → MarkdownArticle-ZHBXH7YF.mjs} +5 -7
- package/dist/lib/neutral/MarkdownArticle-ZHBXH7YF.mjs.map +7 -0
- package/dist/lib/neutral/{MarkdownCard-TBLIRDBO.mjs → MarkdownCard-2HUXCGZP.mjs} +3 -3
- package/dist/lib/neutral/MarkdownCard-2HUXCGZP.mjs.map +7 -0
- package/dist/lib/neutral/MarkdownPlugin.mjs +8 -15
- package/dist/lib/neutral/MarkdownPlugin.mjs.map +3 -3
- package/dist/lib/neutral/MarkdownPlugin.node.mjs +4 -2
- package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +3 -3
- package/dist/lib/neutral/MarkdownPlugin.workerd.mjs +6 -17
- package/dist/lib/neutral/MarkdownPlugin.workerd.mjs.map +4 -4
- package/dist/lib/neutral/MarkdownSettings-5VMOYMND.mjs +43 -0
- package/dist/lib/neutral/MarkdownSettings-5VMOYMND.mjs.map +7 -0
- package/dist/lib/neutral/{anchor-sort-UXN4RHFX.mjs → anchor-sort-QF7UDG2A.mjs} +4 -3
- package/dist/lib/neutral/anchor-sort-QF7UDG2A.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +10 -16
- package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
- package/dist/lib/neutral/capabilities/node.mjs +5 -3
- package/dist/lib/neutral/capabilities/node.mjs.map +3 -3
- package/dist/lib/neutral/chunk-2V6A5NDQ.mjs +8 -0
- package/dist/lib/neutral/{operation-handler-2ARMPBGZ.mjs → chunk-ANHHOTCD.mjs} +3 -4
- package/dist/lib/neutral/{operation-handler-2ARMPBGZ.mjs.map → chunk-ANHHOTCD.mjs.map} +1 -1
- package/dist/lib/neutral/chunk-CNYFGIDS.mjs +32 -0
- package/dist/lib/neutral/chunk-CNYFGIDS.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-LXNSKCPD.mjs → chunk-EV4ZOL4P.mjs} +12 -11
- package/dist/lib/neutral/chunk-EV4ZOL4P.mjs.map +7 -0
- package/dist/lib/neutral/chunk-OC3JD73N.mjs +43 -0
- package/dist/lib/neutral/chunk-OC3JD73N.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YJF6XOXX.mjs +175 -0
- package/dist/lib/neutral/chunk-YJF6XOXX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YMBC62S7.mjs +14 -0
- package/dist/lib/neutral/chunk-YMBC62S7.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-Y2LQRUU7.mjs → chunk-ZJ3GWRUJ.mjs} +24 -23
- package/dist/lib/neutral/chunk-ZJ3GWRUJ.mjs.map +7 -0
- package/dist/lib/neutral/{comment-config-EGY7RPPW.mjs → comment-config-M5OGFULS.mjs} +6 -4
- package/dist/lib/neutral/comment-config-M5OGFULS.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +19 -57
- package/dist/lib/neutral/components/index.mjs.map +4 -4
- package/dist/lib/neutral/containers/index.mjs +5 -3
- package/dist/lib/neutral/containers/index.mjs.map +3 -3
- package/dist/lib/neutral/{create-JK35XC4R.mjs → create-OQUMKL5I.mjs} +2 -2
- package/dist/lib/neutral/{create-markdown-7MLE625M.mjs → create-markdown-4O5FDA77.mjs} +2 -2
- package/dist/lib/neutral/{create-object-MU2LGXG6.mjs → create-object-RSEWTCMM.mjs} +2 -6
- package/dist/lib/neutral/create-object-RSEWTCMM.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +53 -23
- package/dist/lib/neutral/hooks/index.mjs.map +3 -3
- package/dist/lib/neutral/index.mjs +10 -16
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/meta.mjs +1 -1
- package/dist/lib/neutral/{open-5YC77C4O.mjs → open-BAZIRXII.mjs} +2 -2
- package/dist/lib/neutral/operation-handler-SDCXGMGK.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +2 -2
- package/dist/lib/neutral/plugin.workerd.mjs +12 -0
- package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/{react-surface-XYZJBKHZ.mjs → react-surface-37GL3UVG.mjs} +10 -15
- package/dist/lib/neutral/react-surface-37GL3UVG.mjs.map +7 -0
- package/dist/lib/neutral/{scroll-to-anchor-GAFB7W55.mjs → scroll-to-anchor-I6HFE5AH.mjs} +2 -2
- package/dist/lib/neutral/{set-view-mode-N7UHYMPG.mjs → set-view-mode-NY5OYYIM.mjs} +2 -2
- package/dist/lib/neutral/{settings-TDGDLCUR.mjs → settings-O6O6HT3I.mjs} +3 -3
- package/dist/lib/neutral/settings-O6O6HT3I.mjs.map +7 -0
- package/dist/lib/neutral/skill-definition-ET7BYY47.mjs +8 -0
- package/dist/lib/neutral/skill-definition-ET7BYY47.mjs.map +7 -0
- package/dist/lib/neutral/skills/index.mjs +8 -0
- package/dist/lib/neutral/skills/index.mjs.map +7 -0
- package/dist/lib/neutral/state-3BR7L6CW.mjs +69 -0
- package/dist/lib/neutral/state-3BR7L6CW.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +2 -2
- package/dist/lib/neutral/testing.mjs.map +3 -3
- package/dist/lib/neutral/translations.mjs +1 -1
- package/dist/lib/neutral/translations.mjs.map +3 -3
- package/dist/lib/neutral/types/index.mjs +1 -1
- package/dist/lib/neutral/update-markdown-M4PTA6VS.mjs +24 -0
- package/dist/lib/neutral/update-markdown-M4PTA6VS.mjs.map +7 -0
- package/dist/types/dx.config.d.ts +28 -0
- package/dist/types/dx.config.d.ts.map +1 -0
- package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
- package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -1
- package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -1
- package/dist/types/src/capabilities/anchor-sort.d.ts +1 -2
- package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
- package/dist/types/src/capabilities/comment-config.d.ts +1 -2
- package/dist/types/src/capabilities/comment-config.d.ts.map +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +1 -7
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
- package/dist/types/src/capabilities/editor-view-state.d.ts +7 -0
- package/dist/types/src/capabilities/editor-view-state.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/node.d.ts +2 -6
- package/dist/types/src/capabilities/node.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -2
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
- package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +1 -2
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +2 -2
- package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +5 -6
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -2
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +2 -2
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
- package/dist/types/src/components/PreviewComponent/PreviewComponent.d.ts +17 -0
- package/dist/types/src/components/PreviewComponent/PreviewComponent.d.ts.map +1 -0
- package/dist/types/src/components/PreviewComponent/index.d.ts +2 -0
- package/dist/types/src/components/PreviewComponent/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts +6 -17
- package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts.map +1 -1
- package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts.map +1 -1
- package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts +1 -1
- package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
- package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -1
- package/dist/types/src/{components → containers}/MarkdownSettings/index.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +1 -0
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useExtensions.d.ts +5 -5
- package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
- package/dist/types/src/hooks/useLinkQuery.d.ts +2 -2
- package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +32 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/update-markdown.d.ts.map +1 -1
- package/dist/types/src/plugin.workerd.d.ts +2 -0
- package/dist/types/src/plugin.workerd.d.ts.map +1 -0
- package/dist/types/src/skills/index.d.ts +2 -0
- package/dist/types/src/skills/index.d.ts.map +1 -0
- package/dist/types/src/skills/markdown-skill.d.ts +4 -0
- package/dist/types/src/skills/markdown-skill.d.ts.map +1 -0
- package/dist/types/src/types/Markdown.d.ts +12 -20
- package/dist/types/src/types/Markdown.d.ts.map +1 -1
- package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -1
- package/dist/types/src/types/MarkdownOperation.d.ts +5 -28
- package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +2 -0
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +31 -0
- package/package.json +67 -59
- package/src/MarkdownPlugin.node.ts +2 -1
- package/src/MarkdownPlugin.test.ts +1 -1
- package/src/MarkdownPlugin.tsx +7 -16
- package/src/MarkdownPlugin.workerd.ts +5 -2
- package/src/capabilities/anchor-sort.ts +3 -2
- package/src/capabilities/comment-config.ts +6 -9
- package/src/capabilities/create-object.ts +1 -4
- package/src/capabilities/editor-view-state.ts +28 -0
- package/src/capabilities/index.ts +2 -16
- package/src/capabilities/node.ts +1 -0
- package/src/capabilities/react-surface.tsx +29 -13
- package/src/capabilities/settings.ts +2 -2
- package/src/capabilities/skill-definition.ts +14 -0
- package/src/capabilities/state.ts +8 -4
- package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +72 -30
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +14 -40
- package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +7 -6
- package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +2 -2
- package/src/components/PreviewComponent/PreviewComponent.tsx +195 -0
- package/src/components/PreviewComponent/index.ts +5 -0
- package/src/components/index.ts +1 -4
- package/src/containers/MarkdownArticle/MarkdownArticle.stories.tsx +3 -4
- package/src/containers/MarkdownArticle/MarkdownArticle.tsx +6 -6
- package/src/containers/MarkdownCard/MarkdownCard.tsx +2 -2
- package/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.tsx +1 -1
- package/src/containers/MarkdownSettings/MarkdownSettings.tsx +54 -0
- package/src/containers/index.ts +1 -0
- package/src/hooks/useEditorMenuOptions.ts +2 -2
- package/src/hooks/useExtensions.tsx +42 -22
- package/src/hooks/useLinkQuery.ts +5 -3
- package/src/index.ts +1 -2
- package/src/meta.ts +2 -22
- package/src/operations/create.conversations.json +1 -1
- package/src/operations/create.test.ts +5 -12
- package/src/operations/update-markdown.ts +7 -27
- package/src/operations/update.conversations.json +1 -1
- package/src/operations/update.test.ts +86 -16
- package/src/plugin.workerd.ts +5 -0
- package/src/skills/index.ts +5 -0
- package/src/{blueprints/markdown-blueprint.ts → skills/markdown-skill.ts} +8 -7
- package/src/testing.ts +2 -2
- package/src/translations.ts +1 -1
- package/src/types/Markdown.ts +20 -19
- package/src/types/MarkdownCapabilities.ts +7 -5
- package/src/types/MarkdownEvents.ts +1 -1
- package/src/types/MarkdownOperation.ts +12 -6
- package/src/types/types.ts +2 -7
- package/dist/lib/neutral/MarkdownArticle-LWT5RFFJ.mjs.map +0 -7
- package/dist/lib/neutral/MarkdownCard-TBLIRDBO.mjs.map +0 -7
- package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs +0 -32
- package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs.map +0 -7
- package/dist/lib/neutral/anchor-sort-UXN4RHFX.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-BWBA23FF.mjs +0 -67
- package/dist/lib/neutral/app-graph-builder-BWBA23FF.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs +0 -56
- package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs.map +0 -7
- package/dist/lib/neutral/blueprint-definition-DSPXK77L.mjs +0 -15
- package/dist/lib/neutral/blueprint-definition-DSPXK77L.mjs.map +0 -7
- package/dist/lib/neutral/blueprints/index.mjs +0 -8
- package/dist/lib/neutral/chunk-36QFEVOZ.mjs +0 -30
- package/dist/lib/neutral/chunk-36QFEVOZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-67DKWOKF.mjs +0 -10
- package/dist/lib/neutral/chunk-67DKWOKF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-CIJD7P6X.mjs +0 -8
- package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +0 -7
- package/dist/lib/neutral/chunk-Y2LQRUU7.mjs.map +0 -7
- package/dist/lib/neutral/comment-config-EGY7RPPW.mjs.map +0 -7
- package/dist/lib/neutral/create-object-MU2LGXG6.mjs.map +0 -7
- package/dist/lib/neutral/navigation-resolver-3KBOMN4U.mjs +0 -14
- package/dist/lib/neutral/navigation-resolver-3KBOMN4U.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-XYZJBKHZ.mjs.map +0 -7
- package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +0 -7
- package/dist/lib/neutral/state-5COCF5PN.mjs +0 -44
- package/dist/lib/neutral/state-5COCF5PN.mjs.map +0 -7
- package/dist/lib/neutral/update-markdown-NNINDDV5.mjs +0 -44
- package/dist/lib/neutral/update-markdown-NNINDDV5.mjs.map +0 -7
- package/dist/types/src/blueprints/index.d.ts +0 -2
- package/dist/types/src/blueprints/index.d.ts.map +0 -1
- package/dist/types/src/blueprints/markdown-blueprint.d.ts +0 -4
- package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -6
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -5
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
- package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -6
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
- package/dist/types/src/paths.d.ts +0 -3
- package/dist/types/src/paths.d.ts.map +0 -1
- package/src/blueprints/index.ts +0 -5
- package/src/capabilities/app-graph-builder.ts +0 -63
- package/src/capabilities/app-graph-serializer.ts +0 -64
- package/src/capabilities/blueprint-definition.ts +0 -19
- package/src/capabilities/navigation-resolver.ts +0 -19
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +0 -35
- package/src/paths.ts +0 -11
- /package/dist/lib/neutral/{chunk-CIJD7P6X.mjs.map → chunk-2V6A5NDQ.mjs.map} +0 -0
- /package/dist/lib/neutral/{create-JK35XC4R.mjs.map → create-OQUMKL5I.mjs.map} +0 -0
- /package/dist/lib/neutral/{create-markdown-7MLE625M.mjs.map → create-markdown-4O5FDA77.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-5YC77C4O.mjs.map → open-BAZIRXII.mjs.map} +0 -0
- /package/dist/lib/neutral/{blueprints/index.mjs.map → operation-handler-SDCXGMGK.mjs.map} +0 -0
- /package/dist/lib/neutral/{scroll-to-anchor-GAFB7W55.mjs.map → scroll-to-anchor-I6HFE5AH.mjs.map} +0 -0
- /package/dist/lib/neutral/{set-view-mode-N7UHYMPG.mjs.map → set-view-mode-NY5OYYIM.mjs.map} +0 -0
- /package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.d.ts +0 -0
- /package/dist/types/src/{components → containers}/MarkdownSettings/index.d.ts +0 -0
- /package/src/{components → containers}/MarkdownSettings/index.ts +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
import { type AppSurface } from '@dxos/app-toolkit/ui';
|
|
8
|
+
import { Input } from '@dxos/react-ui';
|
|
9
|
+
import { Form, type FormFieldRendererProps, FormRow } from '@dxos/react-ui-form';
|
|
10
|
+
|
|
11
|
+
import { meta } from '#meta';
|
|
12
|
+
import { Markdown } from '#types';
|
|
13
|
+
|
|
14
|
+
export type MarkdownSettingsProps = AppSurface.SettingsProps<Markdown.Settings>;
|
|
15
|
+
|
|
16
|
+
export const MarkdownSettings = ({ settings, onSettingsChange }: MarkdownSettingsProps) => {
|
|
17
|
+
return (
|
|
18
|
+
<Form.Root
|
|
19
|
+
variant='settings'
|
|
20
|
+
schema={Markdown.Settings}
|
|
21
|
+
readonly={!onSettingsChange}
|
|
22
|
+
values={settings}
|
|
23
|
+
onValuesChanged={(values) => onSettingsChange?.((current) => ({ ...current, ...values }))}
|
|
24
|
+
>
|
|
25
|
+
<Form.Viewport scroll>
|
|
26
|
+
<Form.Content>
|
|
27
|
+
<Form.Section title={meta.profile.name}>
|
|
28
|
+
<Form.FieldSet
|
|
29
|
+
fieldMap={{ snippets: SnippetsField }}
|
|
30
|
+
filter={(properties) =>
|
|
31
|
+
settings.debug ? properties : properties.filter((property) => property.name !== 'snippets')
|
|
32
|
+
}
|
|
33
|
+
/>
|
|
34
|
+
</Form.Section>
|
|
35
|
+
</Form.Content>
|
|
36
|
+
</Form.Viewport>
|
|
37
|
+
</Form.Root>
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/** Multi-line snippet editor; replaces the single-line text input the schema would otherwise render. */
|
|
42
|
+
const SnippetsField = ({ type, readonly, onValueChange, onBlur, ...props }: FormFieldRendererProps<string>) => (
|
|
43
|
+
<FormRow<string> readonly={readonly} {...props}>
|
|
44
|
+
{({ value }) => (
|
|
45
|
+
<Input.TextArea
|
|
46
|
+
disabled={!!readonly}
|
|
47
|
+
rows={5}
|
|
48
|
+
value={value ?? ''}
|
|
49
|
+
onBlur={onBlur}
|
|
50
|
+
onChange={(event) => onValueChange(type, event.target.value)}
|
|
51
|
+
/>
|
|
52
|
+
)}
|
|
53
|
+
</FormRow>
|
|
54
|
+
);
|
package/src/containers/index.ts
CHANGED
|
@@ -9,3 +9,4 @@ export type { MarkdownArticleProps } from './MarkdownArticle';
|
|
|
9
9
|
export const MarkdownCard: ComponentType<any> = lazy(() => import('./MarkdownCard'));
|
|
10
10
|
export const EditableMarkdownCard: ComponentType<any> = lazy(() => import('./EditableMarkdownCard'));
|
|
11
11
|
export const MarkdownArticle: ComponentType<any> = lazy(() => import('./MarkdownArticle'));
|
|
12
|
+
export const MarkdownSettings: ComponentType<any> = lazy(() => import('./MarkdownSettings'));
|
|
@@ -28,7 +28,7 @@ export const useEditorMenuOptions = ({
|
|
|
28
28
|
slashCommandGroups,
|
|
29
29
|
onLinkQuery,
|
|
30
30
|
}: UseEditorMenuOptionsProps): UseEditorMenuProps => {
|
|
31
|
-
const { t } = useTranslation(meta.
|
|
31
|
+
const { t } = useTranslation(meta.profile.key);
|
|
32
32
|
|
|
33
33
|
const getMenu = useCallback<NonNullable<UseEditorMenuProps['getMenu']>>(
|
|
34
34
|
({ text, trigger }) => {
|
|
@@ -39,7 +39,7 @@ export const useEditorMenuOptions = ({
|
|
|
39
39
|
|
|
40
40
|
case '/':
|
|
41
41
|
default: {
|
|
42
|
-
return filterMenuGroups([
|
|
42
|
+
return filterMenuGroups([linkSlashCommands, formattingCommands, ...(slashCommandGroups ?? [])], (item) =>
|
|
43
43
|
text ? toLocalizedString(item.label, t).toLowerCase().includes(text.toLowerCase()) : true,
|
|
44
44
|
);
|
|
45
45
|
}
|
|
@@ -5,24 +5,26 @@
|
|
|
5
5
|
import { type ViewUpdate } from '@codemirror/view';
|
|
6
6
|
import { useMemo } from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { Paths } from '@dxos/app-toolkit';
|
|
9
9
|
import { debounceAndThrottle } from '@dxos/async';
|
|
10
10
|
import { Obj } from '@dxos/echo';
|
|
11
|
-
import {
|
|
11
|
+
import { Doc } from '@dxos/echo-doc';
|
|
12
12
|
import { invariant } from '@dxos/invariant';
|
|
13
13
|
import { getSpace, useObject } from '@dxos/react-client/echo';
|
|
14
14
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
15
15
|
import { useThemeContext } from '@dxos/react-ui';
|
|
16
|
-
import { type
|
|
16
|
+
import { type ViewStateManager, selectionAspect } from '@dxos/react-ui-attention';
|
|
17
17
|
import { Text } from '@dxos/schema';
|
|
18
18
|
import { Domino } from '@dxos/ui';
|
|
19
19
|
import {
|
|
20
|
+
AnchorWidget,
|
|
20
21
|
Cursor,
|
|
21
22
|
type EditorStateStore,
|
|
22
23
|
EditorView,
|
|
23
24
|
type Extension,
|
|
24
25
|
InputModeExtensions,
|
|
25
|
-
type
|
|
26
|
+
type XmlWidgetProps,
|
|
27
|
+
type XmlWidgetState,
|
|
26
28
|
createDataExtensions,
|
|
27
29
|
decorateMarkdown,
|
|
28
30
|
documentId,
|
|
@@ -30,16 +32,17 @@ import {
|
|
|
30
32
|
formattingKeymap,
|
|
31
33
|
linkTooltip,
|
|
32
34
|
listener,
|
|
33
|
-
preview,
|
|
34
35
|
replacer,
|
|
35
36
|
selectionState,
|
|
36
37
|
snippets,
|
|
38
|
+
xmlTags,
|
|
37
39
|
} from '@dxos/ui-editor';
|
|
38
40
|
import { type EditorViewMode, type RenderCallback } from '@dxos/ui-editor/types';
|
|
39
41
|
import { isTruthy, safeUrl } from '@dxos/util';
|
|
40
42
|
|
|
41
43
|
import { Markdown } from '#types';
|
|
42
44
|
|
|
45
|
+
import { PreviewComponent } from '../components/PreviewComponent/PreviewComponent';
|
|
43
46
|
import { setFallbackName } from '../util';
|
|
44
47
|
|
|
45
48
|
export type DocumentType = Markdown.Document | Text.Text | { id: string; text: string };
|
|
@@ -51,9 +54,9 @@ export type ExtensionsOptions = {
|
|
|
51
54
|
compact?: boolean;
|
|
52
55
|
viewMode?: EditorViewMode;
|
|
53
56
|
editable?: boolean;
|
|
54
|
-
|
|
57
|
+
viewState?: ViewStateManager;
|
|
55
58
|
editorStateStore?: EditorStateStore;
|
|
56
|
-
|
|
59
|
+
setWidgets?: (widgets: XmlWidgetState[]) => void;
|
|
57
60
|
platform?: 'mobile' | 'desktop';
|
|
58
61
|
/** Callback when an internal link is clicked. */
|
|
59
62
|
onSelectObject?: (objectId: string) => void;
|
|
@@ -66,9 +69,9 @@ export const useExtensions = ({
|
|
|
66
69
|
settings,
|
|
67
70
|
compact,
|
|
68
71
|
viewMode,
|
|
69
|
-
|
|
72
|
+
viewState,
|
|
70
73
|
editorStateStore,
|
|
71
|
-
|
|
74
|
+
setWidgets,
|
|
72
75
|
onSelectObject,
|
|
73
76
|
}: ExtensionsOptions): Extension[] => {
|
|
74
77
|
const { platform } = useThemeContext();
|
|
@@ -79,7 +82,7 @@ export const useExtensions = ({
|
|
|
79
82
|
const contentRef = Obj.instanceOf(Markdown.Document, object) ? (object as Markdown.Document).content : undefined;
|
|
80
83
|
// Use useObject to trigger re-render when the reference loads (returns snapshot for reactivity).
|
|
81
84
|
useObject(contentRef);
|
|
82
|
-
// Get the actual live object target via .target (needed for
|
|
85
|
+
// Get the actual live object target via .target (needed for Doc.createAccessor).
|
|
83
86
|
const target = contentRef?.target ?? (Obj.instanceOf(Text.Text, object) ? object : undefined);
|
|
84
87
|
|
|
85
88
|
// TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.
|
|
@@ -95,8 +98,8 @@ export const useExtensions = ({
|
|
|
95
98
|
settings,
|
|
96
99
|
compact,
|
|
97
100
|
viewMode,
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
viewState,
|
|
102
|
+
setWidgets,
|
|
100
103
|
platform,
|
|
101
104
|
onSelectObject,
|
|
102
105
|
}),
|
|
@@ -105,8 +108,8 @@ export const useExtensions = ({
|
|
|
105
108
|
object,
|
|
106
109
|
compact,
|
|
107
110
|
viewMode,
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
viewState,
|
|
112
|
+
setWidgets,
|
|
110
113
|
settings,
|
|
111
114
|
settings?.debug,
|
|
112
115
|
settings?.editorInputMode,
|
|
@@ -125,7 +128,7 @@ export const useExtensions = ({
|
|
|
125
128
|
target &&
|
|
126
129
|
createDataExtensions({
|
|
127
130
|
id,
|
|
128
|
-
text:
|
|
131
|
+
text: Doc.createAccessor(target, ['content']),
|
|
129
132
|
messenger: space,
|
|
130
133
|
identity,
|
|
131
134
|
}),
|
|
@@ -155,12 +158,12 @@ const createBaseExtensions = ({
|
|
|
155
158
|
settings,
|
|
156
159
|
compact,
|
|
157
160
|
viewMode,
|
|
158
|
-
|
|
159
|
-
|
|
161
|
+
viewState,
|
|
162
|
+
setWidgets,
|
|
160
163
|
platform,
|
|
161
164
|
}: ExtensionsOptions): Extension[] => {
|
|
162
165
|
const extensions: Extension[] = [
|
|
163
|
-
|
|
166
|
+
viewState && selectionChange(viewState),
|
|
164
167
|
settings?.editorInputMode && InputModeExtensions[settings.editorInputMode],
|
|
165
168
|
settings?.folding && !compact && platform !== 'mobile' && folding(),
|
|
166
169
|
].filter(isTruthy);
|
|
@@ -177,9 +180,26 @@ const createBaseExtensions = ({
|
|
|
177
180
|
numberedHeadings: settings?.numberedHeadings ? { from: 2 } : undefined,
|
|
178
181
|
// TODO(wittjosiah): For internal links render the label of the object.
|
|
179
182
|
renderLinkButton: onSelectObject && createRenderLink(onSelectObject),
|
|
183
|
+
// xmlTags() handles dxn:/echo: links via url-scheme widgets; skip here to avoid double-processing.
|
|
184
|
+
skip: ({ url }) => url.startsWith('dxn:') || url.startsWith('echo:'),
|
|
180
185
|
}),
|
|
181
186
|
linkTooltip(renderLinkTooltip),
|
|
182
|
-
|
|
187
|
+
xmlTags({
|
|
188
|
+
registry: {
|
|
189
|
+
'dxn-preview': {
|
|
190
|
+
block: true,
|
|
191
|
+
urlSchemes: ['dxn:', 'echo:'],
|
|
192
|
+
Component: PreviewComponent,
|
|
193
|
+
},
|
|
194
|
+
'link-preview': {
|
|
195
|
+
block: false,
|
|
196
|
+
urlSchemes: ['dxn:', 'echo:'],
|
|
197
|
+
factory: ({ label, dxn }: XmlWidgetProps<{ label: string; dxn: string }>) =>
|
|
198
|
+
label && dxn ? new AnchorWidget(label, dxn) : null,
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
setWidgets,
|
|
202
|
+
}),
|
|
183
203
|
replacer(),
|
|
184
204
|
],
|
|
185
205
|
);
|
|
@@ -195,7 +215,7 @@ const createBaseExtensions = ({
|
|
|
195
215
|
return extensions;
|
|
196
216
|
};
|
|
197
217
|
|
|
198
|
-
const selectionChange = (
|
|
218
|
+
const selectionChange = (viewState: ViewStateManager) => {
|
|
199
219
|
const debouncedHandler = debounceAndThrottle((update: ViewUpdate) => {
|
|
200
220
|
const id = update.state.facet(documentId);
|
|
201
221
|
const cursorConverter = update.state.facet(Cursor.converter);
|
|
@@ -213,7 +233,7 @@ const selectionChange = (selectionManager: SelectionManager) => {
|
|
|
213
233
|
to: cursorConverter.toCursor(range.to),
|
|
214
234
|
}));
|
|
215
235
|
|
|
216
|
-
|
|
236
|
+
viewState.set(selectionAspect, id, { mode: 'multi-range', ranges });
|
|
217
237
|
}, 100);
|
|
218
238
|
|
|
219
239
|
return EditorView.updateListener.of((update: ViewUpdate) => {
|
|
@@ -228,7 +248,7 @@ const createRenderLink =
|
|
|
228
248
|
(el, { url }) => {
|
|
229
249
|
// TODO(burdon): Formalize/document internal link format.
|
|
230
250
|
const isInternal = url.startsWith('/') || url.startsWith(window.location.origin);
|
|
231
|
-
const qualifiedId = isInternal ? fromUrlPath(new URL(url, window.location.origin).pathname) : undefined;
|
|
251
|
+
const qualifiedId = isInternal ? Paths.fromUrlPath(new URL(url, window.location.origin).pathname) : undefined;
|
|
232
252
|
const icon = Domino.of('span')
|
|
233
253
|
.classNames('dx-link ms-1 inline-block align-[-0.125em]')
|
|
234
254
|
.append(Domino.svg(isInternal ? 'ph--arrow-square-down--regular' : 'ph--arrow-square-out--regular'));
|
|
@@ -14,7 +14,7 @@ import { insertAtCursor, insertAtLineStart } from '@dxos/ui-editor';
|
|
|
14
14
|
|
|
15
15
|
import { Markdown } from '../types';
|
|
16
16
|
|
|
17
|
-
export const useLinkQuery = (db: Database.Database | undefined) => {
|
|
17
|
+
export const useLinkQuery = (db: Database.Database | undefined, current?: Obj.Unknown) => {
|
|
18
18
|
const { t } = useTranslation();
|
|
19
19
|
|
|
20
20
|
const filter = useMemo(
|
|
@@ -41,7 +41,9 @@ export const useLinkQuery = (db: Database.Database | undefined) => {
|
|
|
41
41
|
|
|
42
42
|
const items =
|
|
43
43
|
results
|
|
44
|
-
|
|
44
|
+
// Exclude the current document; it cannot link to itself.
|
|
45
|
+
?.filter((object) => object.id !== current?.id)
|
|
46
|
+
.filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name))
|
|
45
47
|
.map((object: Obj.Unknown): EditorMenuItem => {
|
|
46
48
|
const type = Obj.getType(object);
|
|
47
49
|
const icon = type
|
|
@@ -87,7 +89,7 @@ export const useLinkQuery = (db: Database.Database | undefined) => {
|
|
|
87
89
|
{ id: 'create', items: [createItem] },
|
|
88
90
|
];
|
|
89
91
|
},
|
|
90
|
-
[db, filter, t],
|
|
92
|
+
[db, filter, t, current],
|
|
91
93
|
);
|
|
92
94
|
|
|
93
95
|
return handleLinkQuery;
|
package/src/index.ts
CHANGED
package/src/meta.ts
CHANGED
|
@@ -3,27 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { Plugin } from '@dxos/app-framework';
|
|
6
|
-
import { DXN } from '@dxos/keys';
|
|
7
|
-
import { trim } from '@dxos/util';
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
key: DXN.make('org.dxos.plugin.markdown'),
|
|
11
|
-
name: 'Markdown',
|
|
12
|
-
author: 'DXOS',
|
|
13
|
-
description: trim`
|
|
14
|
-
A full-featured markdown editor for authoring documents in your space. Edits flow through a collaborative CodeMirror surface backed by ECHO Text, so every keystroke replicates to other peers in real time without merge conflicts or lost work.
|
|
7
|
+
import config from '../dx.config';
|
|
15
8
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
The editor integrates with the rest of the workspace through @ references that link to any ECHO object, image and file uploads stored in the active space, and anchored comment threads on text ranges. Comments can optionally be routed to an AI agent on every message or only on @mention.
|
|
19
|
-
|
|
20
|
-
A built-in blueprint exposes create, open, and update operations as tools for AI agents. Updates are applied as compact find-and-replace diffs against the document, making it safe for agents to edit large documents incrementally while you continue collaborating.
|
|
21
|
-
`,
|
|
22
|
-
icon: 'ph--text-aa--regular',
|
|
23
|
-
iconHue: 'indigo',
|
|
24
|
-
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
|
|
25
|
-
screenshots: [
|
|
26
|
-
'https://customer-5rxcjpyab08avpmn.cloudflarestream.com/cdf2656365bb1fd327c1fc2105d75e5a/iframe?poster=https%3A%2F%2Fcustomer-5rxcjpyab08avpmn.cloudflarestream.com%2Fcdf2656365bb1fd327c1fc2105d75e5a%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600',
|
|
27
|
-
'https://dxos.network/plugin-details-markdown-dark.png',
|
|
28
|
-
],
|
|
29
|
-
});
|
|
9
|
+
export const meta = Plugin.getMetaFromConfig(config);
|