@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
|
@@ -7,7 +7,7 @@ import * as Effect from 'effect/Effect';
|
|
|
7
7
|
|
|
8
8
|
import { MemoizedAiService } from '@dxos/ai/testing';
|
|
9
9
|
import { SpaceProperties } from '@dxos/client-protocol';
|
|
10
|
-
import {
|
|
10
|
+
import { Operation, Skill } from '@dxos/compute';
|
|
11
11
|
import { Collection, Database, Feed, Obj, Query, Ref } from '@dxos/echo';
|
|
12
12
|
import { TestHelpers } from '@dxos/effect/testing';
|
|
13
13
|
import { AgentService } from '@dxos/functions-runtime';
|
|
@@ -20,7 +20,7 @@ import { trim } from '@dxos/util';
|
|
|
20
20
|
|
|
21
21
|
import { WithProperties } from '#testing';
|
|
22
22
|
|
|
23
|
-
import
|
|
23
|
+
import MarkdownSkill from '../skills/markdown-skill';
|
|
24
24
|
import { MarkdownOperation } from '../types';
|
|
25
25
|
import { MarkdownOperationHandlerSet } from './index';
|
|
26
26
|
|
|
@@ -29,15 +29,8 @@ EntityId.dangerouslyDisableRandomness();
|
|
|
29
29
|
const TestLayer = AssistantTestLayer({
|
|
30
30
|
aiServicePreset: 'edge-remote',
|
|
31
31
|
operationHandlers: MarkdownOperationHandlerSet,
|
|
32
|
-
types: [
|
|
33
|
-
|
|
34
|
-
Collection.Collection,
|
|
35
|
-
Blueprint.Blueprint,
|
|
36
|
-
Markdown.Document,
|
|
37
|
-
HasSubject.HasSubject,
|
|
38
|
-
Feed.Feed,
|
|
39
|
-
],
|
|
40
|
-
blueprints: [MarkdownBlueprint.make()],
|
|
32
|
+
types: [SpaceProperties, Collection.Collection, Skill.Skill, Markdown.Document, HasSubject.HasSubject, Feed.Feed],
|
|
33
|
+
skills: [MarkdownSkill.make()],
|
|
41
34
|
tracing: 'pretty',
|
|
42
35
|
});
|
|
43
36
|
|
|
@@ -68,12 +61,87 @@ describe('update', () => {
|
|
|
68
61
|
),
|
|
69
62
|
);
|
|
70
63
|
|
|
64
|
+
it.effect(
|
|
65
|
+
'append to empty document when oldString is omitted',
|
|
66
|
+
Effect.fnUntraced(
|
|
67
|
+
function* (_) {
|
|
68
|
+
const doc = Markdown.make({
|
|
69
|
+
name: 'Empty Doc',
|
|
70
|
+
content: '',
|
|
71
|
+
});
|
|
72
|
+
yield* Database.add(doc);
|
|
73
|
+
|
|
74
|
+
yield* Operation.invoke(MarkdownOperation.Update, {
|
|
75
|
+
doc: Ref.make(doc),
|
|
76
|
+
edits: [{ newString: '# Hello' }],
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const updatedDoc = yield* Database.resolve(Obj.getURI(doc), Markdown.Document);
|
|
80
|
+
const text = yield* Database.load(updatedDoc.content);
|
|
81
|
+
expect(text.content).toBe('# Hello');
|
|
82
|
+
},
|
|
83
|
+
WithProperties,
|
|
84
|
+
Effect.provide(TestLayer),
|
|
85
|
+
TestHelpers.provideTestContext,
|
|
86
|
+
),
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
it.effect(
|
|
90
|
+
'append to empty document when oldString is empty',
|
|
91
|
+
Effect.fnUntraced(
|
|
92
|
+
function* (_) {
|
|
93
|
+
const doc = Markdown.make({
|
|
94
|
+
name: 'Empty Doc',
|
|
95
|
+
content: '',
|
|
96
|
+
});
|
|
97
|
+
yield* Database.add(doc);
|
|
98
|
+
|
|
99
|
+
yield* Operation.invoke(MarkdownOperation.Update, {
|
|
100
|
+
doc: Ref.make(doc),
|
|
101
|
+
edits: [{ oldString: '', newString: '# Hello' }],
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
const updatedDoc = yield* Database.resolve(Obj.getURI(doc), Markdown.Document);
|
|
105
|
+
const text = yield* Database.load(updatedDoc.content);
|
|
106
|
+
expect(text.content).toBe('# Hello');
|
|
107
|
+
},
|
|
108
|
+
WithProperties,
|
|
109
|
+
Effect.provide(TestLayer),
|
|
110
|
+
TestHelpers.provideTestContext,
|
|
111
|
+
),
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
it.effect(
|
|
115
|
+
'append to non-empty document when oldString is omitted',
|
|
116
|
+
Effect.fnUntraced(
|
|
117
|
+
function* (_) {
|
|
118
|
+
const doc = Markdown.make({
|
|
119
|
+
name: 'Shopping list',
|
|
120
|
+
content: '# Shopping list',
|
|
121
|
+
});
|
|
122
|
+
yield* Database.add(doc);
|
|
123
|
+
|
|
124
|
+
yield* Operation.invoke(MarkdownOperation.Update, {
|
|
125
|
+
doc: Ref.make(doc),
|
|
126
|
+
edits: [{ newString: '\n- milk' }],
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
const updatedDoc = yield* Database.resolve(Obj.getURI(doc), Markdown.Document);
|
|
130
|
+
const text = yield* Database.load(updatedDoc.content);
|
|
131
|
+
expect(text.content).toBe('# Shopping list\n- milk');
|
|
132
|
+
},
|
|
133
|
+
WithProperties,
|
|
134
|
+
Effect.provide(TestLayer),
|
|
135
|
+
TestHelpers.provideTestContext,
|
|
136
|
+
),
|
|
137
|
+
);
|
|
138
|
+
|
|
71
139
|
it.effect(
|
|
72
140
|
'create and update a markdown document',
|
|
73
141
|
Effect.fnUntraced(
|
|
74
142
|
function* (_) {
|
|
75
143
|
const agent = yield* AgentService.createSession({
|
|
76
|
-
|
|
144
|
+
skills: [MarkdownSkill.make()],
|
|
77
145
|
});
|
|
78
146
|
|
|
79
147
|
yield* agent.submitPrompt('Create a document with a cookie recipe.');
|
|
@@ -132,7 +200,7 @@ describe('update', () => {
|
|
|
132
200
|
}),
|
|
133
201
|
);
|
|
134
202
|
const agent = yield* AgentService.createSession({
|
|
135
|
-
|
|
203
|
+
skills: [MarkdownSkill.make()],
|
|
136
204
|
context: [Ref.make(document)],
|
|
137
205
|
});
|
|
138
206
|
|
|
@@ -175,14 +243,16 @@ describe('update', () => {
|
|
|
175
243
|
}),
|
|
176
244
|
);
|
|
177
245
|
const agent = yield* AgentService.createSession({
|
|
178
|
-
|
|
246
|
+
skills: [MarkdownSkill.make()],
|
|
179
247
|
context: [Ref.make(document)],
|
|
180
248
|
});
|
|
181
249
|
|
|
250
|
+
// The agent process completes once its input queue drains (maybeComplete → succeed), so all
|
|
251
|
+
// prompts must be enqueued before awaiting completion; the agent then drains them in order,
|
|
252
|
+
// each turn building on the previous edit. Awaiting between submits would let the process
|
|
253
|
+
// succeed after the first turn, dropping the rest.
|
|
182
254
|
yield* agent.submitPrompt('Add milk to the shopping list.');
|
|
183
|
-
yield* agent.waitForCompletion();
|
|
184
255
|
yield* agent.submitPrompt('Add bread to the shopping list.');
|
|
185
|
-
yield* agent.waitForCompletion();
|
|
186
256
|
yield* agent.submitPrompt('Add eggs to the shopping list.');
|
|
187
257
|
yield* agent.waitForCompletion();
|
|
188
258
|
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Skill, Template } from '@dxos/compute';
|
|
6
6
|
import { trim } from '@dxos/util';
|
|
7
7
|
|
|
8
8
|
import { Markdown, MarkdownOperation } from '#types';
|
|
9
9
|
|
|
10
10
|
const make = () =>
|
|
11
|
-
|
|
12
|
-
key: Markdown.
|
|
11
|
+
Skill.make({
|
|
12
|
+
key: Markdown.SKILL_KEY,
|
|
13
13
|
name: 'Markdown',
|
|
14
14
|
description: 'Work with markdown documents. Preferred over raw database operations.',
|
|
15
|
-
tools:
|
|
15
|
+
tools: Skill.toolDefinitions({
|
|
16
16
|
operations: [MarkdownOperation.Create, MarkdownOperation.Open, MarkdownOperation.Update],
|
|
17
17
|
}),
|
|
18
18
|
instructions: Template.make({
|
|
@@ -33,11 +33,12 @@ const make = () =>
|
|
|
33
33
|
${'```'}
|
|
34
34
|
`,
|
|
35
35
|
}),
|
|
36
|
+
agentCanEnable: true,
|
|
36
37
|
});
|
|
37
38
|
|
|
38
|
-
const
|
|
39
|
-
key: Markdown.
|
|
39
|
+
const skill: Skill.Definition = {
|
|
40
|
+
key: Markdown.SKILL_KEY,
|
|
40
41
|
make,
|
|
41
42
|
};
|
|
42
43
|
|
|
43
|
-
export default
|
|
44
|
+
export default skill;
|
package/src/testing.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import * as Toolkit from '@effect/ai/Toolkit';
|
|
6
6
|
import * as Effect from 'effect/Effect';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { AppAnnotation } from '@dxos/app-toolkit';
|
|
9
9
|
import { SpaceProperties } from '@dxos/client-protocol';
|
|
10
10
|
import { Annotation, Collection, Database, Obj, Ref } from '@dxos/echo';
|
|
11
11
|
|
|
@@ -31,7 +31,7 @@ export const WithProperties = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.
|
|
|
31
31
|
if (!meta.annotations) {
|
|
32
32
|
meta.annotations = {};
|
|
33
33
|
}
|
|
34
|
-
Annotation.setDictionary(meta.annotations, RootCollectionAnnotation, Ref.make(collection));
|
|
34
|
+
Annotation.setDictionary(meta.annotations, AppAnnotation.RootCollectionAnnotation, Ref.make(collection));
|
|
35
35
|
});
|
|
36
36
|
}),
|
|
37
37
|
effect,
|
package/src/translations.ts
CHANGED
|
@@ -23,7 +23,7 @@ export const translations = [
|
|
|
23
23
|
'delete-object.label': 'Delete document',
|
|
24
24
|
'object-deleted.label': 'Document deleted',
|
|
25
25
|
},
|
|
26
|
-
[meta.
|
|
26
|
+
[meta.profile.key]: {
|
|
27
27
|
'plugin.name': 'Editor',
|
|
28
28
|
'choose-markdown-from-space-dialog.title': 'Choose one or more documents to add',
|
|
29
29
|
'empty-choose-markdown-from-space.message': 'None available; try creating a new one instead?',
|
package/src/types/Markdown.ts
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { AppAnnotation } from '@dxos/app-toolkit';
|
|
8
|
+
import { Annotation, DXN, Obj, Ref, Type } from '@dxos/echo';
|
|
9
9
|
import { DescriptionAnnotation, FormInputAnnotation, LabelAnnotation } from '@dxos/echo/Annotation';
|
|
10
|
-
import { Text } from '@dxos/schema';
|
|
10
|
+
import { CollectionItemAnnotation, Text } from '@dxos/schema';
|
|
11
11
|
|
|
12
|
-
export const
|
|
12
|
+
export const SKILL_KEY = 'org.dxos.skill.markdown';
|
|
13
13
|
|
|
14
14
|
// Re-export Settings as merged const/type (not as namespace).
|
|
15
15
|
import * as SettingsModule from './Settings';
|
|
@@ -19,21 +19,22 @@ export type Settings = SettingsModule.Settings;
|
|
|
19
19
|
/**
|
|
20
20
|
* Document Item type.
|
|
21
21
|
*/
|
|
22
|
-
export
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
|
|
22
|
+
export class Document extends Type.makeObject<Document>(DXN.make('org.dxos.type.document', '0.1.0'))(
|
|
23
|
+
Schema.Struct({
|
|
24
|
+
name: Schema.optional(Schema.String),
|
|
25
|
+
description: Schema.optional(Schema.String),
|
|
26
|
+
fallbackName: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional),
|
|
27
|
+
content: Ref.Ref(Text.Text).pipe(FormInputAnnotation.set(false)),
|
|
28
|
+
}).pipe(
|
|
29
|
+
LabelAnnotation.set(['name', 'fallbackName']),
|
|
30
|
+
DescriptionAnnotation.set('description'),
|
|
31
|
+
Annotation.IconAnnotation.set({ icon: 'ph--text-aa--regular', hue: 'indigo' }),
|
|
32
|
+
AppAnnotation.SkillsAnnotation.set([SKILL_KEY]),
|
|
33
|
+
AppAnnotation.GraphPropsAnnotation.set({ managesAutofocus: true }),
|
|
34
|
+
AppAnnotation.CardAnnotation.set(true),
|
|
35
|
+
CollectionItemAnnotation.set(true),
|
|
36
|
+
),
|
|
37
|
+
) {}
|
|
37
38
|
|
|
38
39
|
/**
|
|
39
40
|
* Document factory.
|
|
@@ -36,16 +36,18 @@ export type EditorViewRegistry = {
|
|
|
36
36
|
get: (attendableId: string) => EditorViewEntry | undefined;
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
export const Settings = Capability.make<Atom.Writable<Markdown.Settings>>(`${meta.
|
|
39
|
+
export const Settings = Capability.make<Atom.Writable<Markdown.Settings>>(`${meta.profile.key}.capability.settings`);
|
|
40
40
|
|
|
41
41
|
/** Persisted state atom for view mode per document. */
|
|
42
|
-
export const State = Capability.make<Atom.Writable<MarkdownState>>(`${meta.
|
|
42
|
+
export const State = Capability.make<Atom.Writable<MarkdownState>>(`${meta.profile.key}.capability.state`);
|
|
43
43
|
|
|
44
44
|
/** Editor state store for cursor positions, scroll state, etc. */
|
|
45
|
-
export const EditorState = Capability.make<EditorStateStore>(`${meta.
|
|
45
|
+
export const EditorState = Capability.make<EditorStateStore>(`${meta.profile.key}.capability.editor-state`);
|
|
46
46
|
|
|
47
47
|
/** Registry of active EditorView instances keyed by attendable ID. */
|
|
48
|
-
export const EditorViews = Capability.make<EditorViewRegistry>(`${meta.
|
|
48
|
+
export const EditorViews = Capability.make<EditorViewRegistry>(`${meta.profile.key}.capability.editor-views`);
|
|
49
49
|
|
|
50
50
|
// TODO(burdon): Move to ./types (external API)?
|
|
51
|
-
export const ExtensionProvider = Capability.make<MarkdownExtensionProvider[]>(
|
|
51
|
+
export const ExtensionProvider = Capability.make<MarkdownExtensionProvider[]>(
|
|
52
|
+
`${meta.profile.key}.capability.extensions`,
|
|
53
|
+
);
|
|
@@ -10,5 +10,5 @@ import { AppActivationEvents } from '@dxos/app-toolkit';
|
|
|
10
10
|
import { meta } from '#meta';
|
|
11
11
|
|
|
12
12
|
export const SetupExtensions: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(
|
|
13
|
-
`${meta.
|
|
13
|
+
`${meta.profile.key}.event.setup-extensions`,
|
|
14
14
|
);
|
|
@@ -8,7 +8,7 @@ import * as Schema from 'effect/Schema';
|
|
|
8
8
|
|
|
9
9
|
import { Capability } from '@dxos/app-framework';
|
|
10
10
|
import { Operation } from '@dxos/compute';
|
|
11
|
-
import { Database, Ref, Type
|
|
11
|
+
import { Database, DXN, Ref, Type } from '@dxos/echo';
|
|
12
12
|
import { EditorViewMode } from '@dxos/ui-editor/types';
|
|
13
13
|
import { trim } from '@dxos/util';
|
|
14
14
|
|
|
@@ -16,12 +16,17 @@ import { meta } from '#meta';
|
|
|
16
16
|
|
|
17
17
|
import * as Markdown from './Markdown';
|
|
18
18
|
|
|
19
|
-
const makeKey = (name: string) => DXN.make(`${meta.
|
|
19
|
+
const makeKey = (name: string) => DXN.make(`${meta.profile.key}.operation.${name}`);
|
|
20
20
|
|
|
21
|
+
// The edit descriptions feed the markdown skill's LLM tool definition (and its memoized
|
|
22
|
+
// fixtures), so the schema stays local and context-tuned; the apply logic is shared via `Text.apply`.
|
|
21
23
|
const Edit = Schema.Struct({
|
|
22
|
-
oldString: Schema.
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
oldString: Schema.optional(
|
|
25
|
+
Schema.String.annotations({
|
|
26
|
+
description:
|
|
27
|
+
'The text to find in the document. Set to undefined to append the newString to the end of the document.',
|
|
28
|
+
}),
|
|
29
|
+
),
|
|
25
30
|
newString: Schema.String.annotations({
|
|
26
31
|
description: 'The text to replace it with.',
|
|
27
32
|
}),
|
|
@@ -123,7 +128,8 @@ export const Update = Operation.make({
|
|
|
123
128
|
description: 'The ID of the markdown document.',
|
|
124
129
|
}),
|
|
125
130
|
edits: Schema.Array(Edit).annotations({
|
|
126
|
-
description:
|
|
131
|
+
description:
|
|
132
|
+
'The edits to apply to the document. Each edit finds oldString and replaces it with newString; omit oldString to append newString to the end.',
|
|
127
133
|
}),
|
|
128
134
|
}),
|
|
129
135
|
output: Schema.Struct({
|
package/src/types/types.ts
CHANGED
|
@@ -8,20 +8,15 @@ import { type EditorViewMode } from '@dxos/ui-editor/types';
|
|
|
8
8
|
|
|
9
9
|
import { type Document } from './Markdown';
|
|
10
10
|
|
|
11
|
-
// TODO(burdon): Remove these from ./types since not part of plugin-markdown API?
|
|
12
|
-
// TODO(wittjosiah): MarkdownExtensionProvider is a part of the MarkdownCapabilities api which should be in ./types.
|
|
13
|
-
|
|
14
|
-
// TODO(burdon): Async?
|
|
15
11
|
export type MarkdownExtensionProvider = (props: {
|
|
16
12
|
document?: Document;
|
|
17
13
|
viewMode?: EditorViewMode;
|
|
18
14
|
}) => Extension | undefined;
|
|
19
15
|
|
|
20
16
|
export type MarkdownPluginState = {
|
|
21
|
-
|
|
17
|
+
/** Codemirror extensions provided by other plugins. */
|
|
22
18
|
extensionProviders?: MarkdownExtensionProvider[];
|
|
23
19
|
|
|
24
|
-
|
|
25
|
-
// View mode per document.
|
|
20
|
+
/** View mode per document. */
|
|
26
21
|
viewMode: Record<string, EditorViewMode>;
|
|
27
22
|
};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/containers/MarkdownArticle/MarkdownArticle.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Extension } from '@codemirror/state';\nimport { Atom } from '@effect-atom/atom-react';\nimport React, { forwardRef, useCallback, useMemo } from 'react';\n\nimport { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { useActionRunner } from '@dxos/plugin-graph';\nimport { useObject } from '@dxos/react-client/echo';\nimport { Panel } from '@dxos/react-ui';\nimport { type SelectionManager } from '@dxos/react-ui-attention';\nimport { Editor } from '@dxos/react-ui-editor';\nimport { Text } from '@dxos/schema';\n\nimport {\n MarkdownEditor,\n MarkdownEditorProvider,\n type MarkdownEditorContentProps,\n type MarkdownEditorProviderProps,\n} from '#components';\nimport { useLinkQuery } from '#hooks';\nimport { Markdown, MarkdownCapabilities, type MarkdownPluginState } from '#types';\n\nexport type MarkdownArticleProps = AppSurface.ObjectArticleProps<\n Markdown.Document | Text.Text,\n {\n id: string;\n settings: Markdown.Settings;\n selectionManager?: SelectionManager;\n } & Pick<MarkdownPluginState, 'extensionProviders'> &\n Pick<MarkdownEditorProviderProps, 'viewMode' | 'onSelectObject' | 'onViewModeChange'> &\n Pick<MarkdownEditorContentProps, 'editorStateStore'>\n>;\n\nexport const MarkdownArticle = forwardRef<HTMLDivElement, MarkdownArticleProps>(\n (\n { role, subject: object, id, attendableId, settings, extensionProviders, onSelectObject, viewMode, ...props },\n forwardedRef,\n ) => {\n const db = Obj.isObject(object) ? Obj.getDatabase(object) : undefined;\n const [docContent] = useObject(Obj.instanceOf(Markdown.Document, object) ? object.content : undefined, 'content');\n const [textContent] = useObject(Obj.instanceOf(Text.Text, object) ? object : undefined, 'content');\n const initialValue = docContent ?? textContent;\n\n // Extensions from other plugins.\n const otherExtensionProviders = useCapabilities(MarkdownCapabilities.ExtensionProvider);\n const extensions = useMemo<Extension[]>(() => {\n if (!Obj.instanceOf(Markdown.Document, object) && !Obj.instanceOf(Text.Text, object)) {\n return [];\n }\n\n const document = Obj.instanceOf(Markdown.Document, object) ? object : undefined;\n return [...(otherExtensionProviders ?? []), ...(extensionProviders ?? [])]\n .flat()\n .reduce((acc: Extension[], provider) => {\n const extension = typeof provider === 'function' ? provider({ document, viewMode }) : provider;\n if (extension) {\n acc.push(extension);\n }\n\n return acc;\n }, []);\n }, [extensionProviders, otherExtensionProviders, object, viewMode]);\n\n // Toolbar actions from app graph.\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n const customActions = useMemo(() => {\n return Atom.make((get) => {\n const actions = get(graph.actions(attendableId ?? id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n const edges = nodes.map((node) => ({ source: 'root', target: node.id, relation: 'child' }));\n return { nodes, edges };\n });\n }, [graph]);\n\n // File upload.\n const [upload] = useCapabilities(AppCapabilities.FileUploader);\n const handleFileUpload = useMemo(() => {\n if (!db || !upload) {\n return undefined;\n }\n\n return async (file: File) => upload(db, file);\n }, [db, upload]);\n\n // Query for @ refs.\n const handleLinkQuery = useLinkQuery(db);\n\n // Open linked objects.\n const { invokePromise } = useOperationInvoker();\n const handleSelectObject = useCallback(\n (targetId: string) => {\n if (onSelectObject) {\n onSelectObject(targetId);\n } else {\n void invokePromise?.(LayoutOperation.Open, {\n subject: [targetId],\n pivotId: attendableId,\n // TODO(wittjosiah): This should probably pre-validate.\n navigation: 'immediate',\n });\n }\n },\n [onSelectObject, invokePromise, attendableId],\n );\n\n return (\n <MarkdownEditorProvider\n id={id}\n attendableId={attendableId}\n object={object}\n compact={role !== 'article'}\n extensions={extensions}\n settings={settings}\n viewMode={viewMode}\n onAction={runAction}\n onFileUpload={handleFileUpload}\n onLinkQuery={handleLinkQuery}\n onSelectObject={handleSelectObject}\n {...props}\n >\n {(editorRootProps) => (\n <Editor.Root {...editorRootProps}>\n <Panel.Root role={role} ref={forwardedRef}>\n {settings.toolbar && (\n <Panel.Toolbar classNames='bg-toolbar-surface'>\n <MarkdownEditor.Toolbar classNames='dx-document' customActions={customActions} />\n </Panel.Toolbar>\n )}\n <Panel.Content>\n <MarkdownEditor.Content initialValue={initialValue} />\n <MarkdownEditor.Blocks />\n </Panel.Content>\n </Panel.Root>\n </Editor.Root>\n )}\n </MarkdownEditorProvider>\n );\n },\n);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Atom", "React", "forwardRef", "useCallback", "useMemo", "useCapabilities", "useOperationInvoker", "AppCapabilities", "LayoutOperation", "useAppGraph", "Obj", "useActionRunner", "useObject", "Panel", "Editor", "Text", "MarkdownEditor", "MarkdownEditorProvider", "useLinkQuery", "Markdown", "MarkdownCapabilities", "MarkdownArticle", "role", "subject", "object", "id", "attendableId", "settings", "extensionProviders", "onSelectObject", "viewMode", "props", "forwardedRef", "db", "isObject", "getDatabase", "undefined", "docContent", "instanceOf", "Document", "content", "textContent", "initialValue", "otherExtensionProviders", "ExtensionProvider", "extensions", "document", "flat", "reduce", "acc", "provider", "extension", "push", "graph", "runAction", "customActions", "make", "get", "actions", "nodes", "filter", "action", "properties", "disposition", "edges", "map", "node", "source", "target", "relation", "upload", "FileUploader", "handleFileUpload", "file", "handleLinkQuery", "invokePromise", "handleSelectObject", "targetId", "Open", "pivotId", "navigation", "compact", "onAction", "onFileUpload", "onLinkQuery", "editorRootProps", "Root", "ref", "toolbar", "Toolbar", "classNames", "Content", "Blocks"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/containers/MarkdownCard/MarkdownCard.tsx", "../../../src/containers/MarkdownCard/snippet.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { Card, useTranslation } from '@dxos/react-ui';\nimport { Editor } from '@dxos/react-ui-editor';\nimport { Text } from '@dxos/schema';\nimport { mx } from '@dxos/ui-theme';\n\nimport { MarkdownEditor, MarkdownEditorProvider } from '#components';\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nimport { getContentSnippet } from '../../util';\nimport { snippet as snippetExtension } from './snippet';\n\nexport type MarkdownCardProps = { subject: Markdown.Document | Text.Text };\n\nexport const MarkdownCard = ({ subject }: MarkdownCardProps) => {\n const { t } = useTranslation(meta.id);\n // NOTE: Newline is added so that Fade does not obscure the last line.\n const snippet = useMemo(() => getSnippet(subject) + '\\n', [subject]);\n const extensions = useMemo(() => [snippetExtension({ height: 300, scale: 0.8 })], []);\n const info = getInfo(subject);\n\n return (\n <Card.Body>\n {snippet && (\n <Card.Section className='relative'>\n <Card.Row fullWidth>\n <MarkdownEditorProvider id={subject.id} viewMode='readonly' extensions={extensions}>\n {(editorRootProps) => (\n <Editor.Root {...editorRootProps}>\n <MarkdownEditor.Content initialValue={snippet} slots={{ content: { className: 'px-2!' } }} compact />\n </Editor.Root>\n )}\n </MarkdownEditorProvider>\n <Fade />\n </Card.Row>\n </Card.Section>\n )}\n <Card.Section>\n <Card.Row fullWidth>\n <Card.Text classNames='px-2 text-xs text-description'>\n {info.words} {t('words.label', { count: info.words })}\n </Card.Text>\n </Card.Row>\n </Card.Section>\n </Card.Body>\n );\n};\n\nconst Fade = () => (\n <div\n className={mx(\n 'z-10 absolute bottom-0 inset-x-0 h-6 w-full',\n 'bg-gradient-to-b from-transparent to-(--surface-bg) pointer-events-none',\n )}\n />\n);\n\nconst getSnippet = (subject: Markdown.Document | Text.Text, fallback?: string, maxLines = 16) => {\n if (Obj.instanceOf(Markdown.Document, subject)) {\n return Obj.getDescription(subject) || getContentSnippet(subject.content?.target?.content ?? fallback, maxLines);\n } else if (Obj.instanceOf(Text.Text, subject)) {\n return getContentSnippet(subject.content ?? fallback, maxLines);\n }\n};\n\nconst getInfo = (subject: Markdown.Document | Text.Text) => {\n const text = (Obj.instanceOf(Markdown.Document, subject) ? subject.content?.target?.content : subject.content) ?? '';\n return { words: text.split(' ').length };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { EditorState } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\n\nexport type SnippetOptions = {\n /** Maximum height of the editor in pixels. Overflowing content is hidden. */\n height: number;\n /** Zoom factor applied to the editor (e.g. 0.5 renders at 50%). @default 1 */\n scale?: number;\n};\n\n/**\n * CodeMirror extension for rendering a non-scrollable snippet of editor content.\n * Constrains the editor to the given height via CSS `max-height`, wraps long\n * lines (`pre-wrap`), and disables scrolling entirely.\n *\n * NOTE: Uses CSS `zoom` rather than `transform: scale` because `zoom` affects\n * layout, so line wrapping fills the full visual width of the container.\n * `transform: scale` only scales paint output, leaving empty space on the right.\n */\nexport const snippet = ({ height, scale = 1 }: SnippetOptions) => {\n return [\n EditorState.readOnly.of(true),\n EditorView.editable.of(false),\n EditorState.transactionFilter.of((tr) => {\n if (tr.selection) {\n return [];\n } // Drop any selection changes.\n return tr;\n }),\n EditorView.theme({\n // Outer editor element: clip to the caller-specified height.\n '&': {\n maxHeight: `${height}px`,\n overflow: 'hidden',\n },\n '.cm-scroller': {\n // Prevent scroll; scale up the inner clip so the final pixel height matches `height`.\n maxHeight: `${height / scale}px`,\n overflow: 'hidden !important',\n padding: '0',\n },\n '.cm-content': {\n // zoom (unlike transform: scale) affects layout, so line-wrapping fills the full visual width of the container.\n zoom: scale,\n margin: '0',\n padding: '0',\n },\n }),\n ];\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "useMemo", "Obj", "Card", "useTranslation", "Editor", "Text", "mx", "MarkdownEditor", "MarkdownEditorProvider", "meta", "Markdown", "EditorState", "EditorView", "snippet", "height", "scale", "readOnly", "of", "editable", "transactionFilter", "tr", "selection", "theme", "maxHeight", "overflow", "padding", "zoom", "margin", "MarkdownCard", "subject", "t", "useTranslation", "meta", "id", "snippet", "useMemo", "getSnippet", "extensions", "snippetExtension", "height", "scale", "info", "getInfo", "Card", "Body", "Section", "className", "Row", "fullWidth", "MarkdownEditorProvider", "viewMode", "editorRootProps", "Editor", "Root", "MarkdownEditor", "Content", "initialValue", "slots", "content", "compact", "Fade", "Text", "classNames", "words", "count", "div", "mx", "fallback", "maxLines", "Obj", "instanceOf", "Markdown", "Document", "getDescription", "getContentSnippet", "target", "text", "split", "length"]
|
|
7
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
-
|
|
3
|
-
// src/components/MarkdownSettings/MarkdownSettings.tsx
|
|
4
|
-
import React from "react";
|
|
5
|
-
import { Input } from "@dxos/react-ui";
|
|
6
|
-
import { Settings as SettingsForm } from "@dxos/react-ui-form";
|
|
7
|
-
import { meta } from "#meta";
|
|
8
|
-
import { Markdown } from "#types";
|
|
9
|
-
var SnippetsField = ({ value, onChange, readonly }) => /* @__PURE__ */ React.createElement(Input.TextArea, {
|
|
10
|
-
disabled: readonly,
|
|
11
|
-
rows: 5,
|
|
12
|
-
value: value ?? "",
|
|
13
|
-
onChange: (event) => onChange(event.target.value)
|
|
14
|
-
});
|
|
15
|
-
var MarkdownSettings = ({ settings, onSettingsChange }) => {
|
|
16
|
-
return /* @__PURE__ */ React.createElement(SettingsForm.Viewport, null, /* @__PURE__ */ React.createElement(SettingsForm.Section, {
|
|
17
|
-
title: meta.name ?? "Editor"
|
|
18
|
-
}, /* @__PURE__ */ React.createElement(SettingsForm.FieldSet, {
|
|
19
|
-
readonly: !onSettingsChange,
|
|
20
|
-
schema: Markdown.Settings,
|
|
21
|
-
visible: (path, values) => path !== "snippets" || !!values.debug,
|
|
22
|
-
fieldMap: {
|
|
23
|
-
snippets: SnippetsField
|
|
24
|
-
},
|
|
25
|
-
values: settings,
|
|
26
|
-
onValuesChanged: (values) => onSettingsChange?.(() => values)
|
|
27
|
-
})));
|
|
28
|
-
};
|
|
29
|
-
export {
|
|
30
|
-
MarkdownSettings as default
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=MarkdownSettings-YCTZJL5V.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/MarkdownSettings/MarkdownSettings.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Input } from '@dxos/react-ui';\nimport { Settings as SettingsForm, type SettingsFieldProps } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nexport type MarkdownSettingsProps = AppSurface.SettingsArticleProps<Markdown.Settings>;\n\nconst SnippetsField = ({ value, onChange, readonly }: SettingsFieldProps<string | undefined>) => (\n <Input.TextArea disabled={readonly} rows={5} value={value ?? ''} onChange={(event) => onChange(event.target.value)} />\n);\n\nexport const MarkdownSettings = ({ settings, onSettingsChange }: MarkdownSettingsProps) => {\n return (\n <SettingsForm.Viewport>\n <SettingsForm.Section title={meta.name ?? 'Editor'}>\n <SettingsForm.FieldSet\n readonly={!onSettingsChange}\n schema={Markdown.Settings}\n visible={(path, values) => path !== 'snippets' || !!values.debug}\n fieldMap={{ snippets: SnippetsField }}\n values={settings}\n onValuesChanged={(values) => onSettingsChange?.(() => values)}\n />\n </SettingsForm.Section>\n </SettingsForm.Viewport>\n );\n};\n"],
|
|
5
|
-
"mappings": ";;;AAIA,OAAOA,WAAW;AAGlB,SAASC,aAAa;AACtB,SAASC,YAAYC,oBAA6C;AAElE,SAASC,YAAY;AACrB,SAASC,gBAAgB;AAIzB,IAAMC,gBAAgB,CAAC,EAAEC,OAAOC,UAAUC,SAAQ,MAChD,sBAAA,cAACR,MAAMS,UAAQ;EAACC,UAAUF;EAAUG,MAAM;EAAGL,OAAOA,SAAS;EAAIC,UAAU,CAACK,UAAUL,SAASK,MAAMC,OAAOP,KAAK;;AAG5G,IAAMQ,mBAAmB,CAAC,EAAEC,UAAUC,iBAAgB,MAAyB;AACpF,SACE,sBAAA,cAACd,aAAae,UAAQ,MACpB,sBAAA,cAACf,aAAagB,SAAO;IAACC,OAAOhB,KAAKiB,QAAQ;KACxC,sBAAA,cAAClB,aAAamB,UAAQ;IACpBb,UAAU,CAACQ;IACXM,QAAQlB,SAASH;IACjBsB,SAAS,CAACC,MAAMC,WAAWD,SAAS,cAAc,CAAC,CAACC,OAAOC;IAC3DC,UAAU;MAAEC,UAAUvB;IAAc;IACpCoB,QAAQV;IACRc,iBAAiB,CAACJ,WAAWT,mBAAmB,MAAMS,MAAAA;;AAKhE;",
|
|
6
|
-
"names": ["React", "Input", "Settings", "SettingsForm", "meta", "Markdown", "SnippetsField", "value", "onChange", "readonly", "TextArea", "disabled", "rows", "event", "target", "MarkdownSettings", "settings", "onSettingsChange", "Viewport", "Section", "title", "name", "FieldSet", "schema", "visible", "path", "values", "debug", "fieldMap", "snippets", "onValuesChanged"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/anchor-sort.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Relation, Type } from '@dxos/echo';\nimport { createDocAccessor, getRangeFromCursor } from '@dxos/echo-client';\nimport { type AnchoredTo } from '@dxos/types';\n\nimport { Markdown } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(AppCapabilities.AnchorSort, {\n key: Type.getTypename(Markdown.Document),\n sort: (anchorA: AnchoredTo.AnchoredTo, anchorB: AnchoredTo.AnchoredTo) => {\n const doc = Relation.getTarget(anchorA) as Markdown.Document;\n const accessor = doc.content.target ? createDocAccessor(doc.content.target, ['content']) : undefined;\n if (doc !== Relation.getTarget(anchorB) || !accessor) {\n return 0;\n }\n\n const getStartPosition = (cursor: string | undefined) => {\n const range = cursor ? getRangeFromCursor(accessor, cursor) : undefined;\n return range?.start ?? Number.MAX_SAFE_INTEGER;\n };\n\n const posA = getStartPosition(anchorA.anchor);\n const posB = getStartPosition(anchorB.anchor);\n return posA - posB;\n },\n }),\n ),\n);\n"],
|
|
5
|
-
"mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAChC,SAASC,UAAUC,YAAY;AAC/B,SAASC,mBAAmBC,0BAA0B;AAGtD,SAASC,gBAAgB;AAEzB,IAAA,sBAAeN,WAAWO,WAAW,MAC5BC,eACLR,WAAWS,YAAYR,gBAAgBS,YAAY;EACjDC,KAAKR,KAAKS,YAAYN,SAASO,QAAQ;EACvCC,MAAM,CAACC,SAAgCC,YAAAA;AACrC,UAAMC,MAAMf,SAASgB,UAAUH,OAAAA;AAC/B,UAAMI,WAAWF,IAAIG,QAAQC,SAASjB,kBAAkBa,IAAIG,QAAQC,QAAQ;MAAC;KAAU,IAAIC;AAC3F,QAAIL,QAAQf,SAASgB,UAAUF,OAAAA,KAAY,CAACG,UAAU;AACpD,aAAO;IACT;AAEA,UAAMI,mBAAmB,CAACC,WAAAA;AACxB,YAAMC,QAAQD,SAASnB,mBAAmBc,UAAUK,MAAAA,IAAUF;AAC9D,aAAOG,OAAOC,SAASC,OAAOC;IAChC;AAEA,UAAMC,OAAON,iBAAiBR,QAAQe,MAAM;AAC5C,UAAMC,OAAOR,iBAAiBP,QAAQc,MAAM;AAC5C,WAAOD,OAAOE;EAChB;AACF,CAAA,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "Capability", "AppCapabilities", "Relation", "Type", "createDocAccessor", "getRangeFromCursor", "Markdown", "makeModule", "succeed", "contributes", "AnchorSort", "key", "getTypename", "Document", "sort", "anchorA", "anchorB", "doc", "getTarget", "accessor", "content", "target", "undefined", "getStartPosition", "cursor", "range", "start", "Number", "MAX_SAFE_INTEGER", "posA", "anchor", "posB"]
|
|
7
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getDocumentsPath
|
|
3
|
-
} from "./chunk-67DKWOKF.mjs";
|
|
4
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
5
|
-
|
|
6
|
-
// src/capabilities/app-graph-builder.ts
|
|
7
|
-
import * as Effect from "effect/Effect";
|
|
8
|
-
import * as Option from "effect/Option";
|
|
9
|
-
import { Capability } from "@dxos/app-framework";
|
|
10
|
-
import { AppCapabilities, LayoutOperation, createTypeSectionExtension } from "@dxos/app-toolkit";
|
|
11
|
-
import { isSpace } from "@dxos/client/echo";
|
|
12
|
-
import { Operation } from "@dxos/compute";
|
|
13
|
-
import { Type } from "@dxos/echo";
|
|
14
|
-
import { GraphBuilder, Node } from "@dxos/plugin-graph";
|
|
15
|
-
import { SpaceOperation } from "@dxos/plugin-space";
|
|
16
|
-
import { Markdown } from "#types";
|
|
17
|
-
var documentTypename = Type.getTypename(Markdown.Document);
|
|
18
|
-
var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
19
|
-
const extensions = yield* Effect.all([
|
|
20
|
-
createTypeSectionExtension(Markdown.Document),
|
|
21
|
-
GraphBuilder.createExtension({
|
|
22
|
-
id: "documentsSectionActions",
|
|
23
|
-
match: (node) => {
|
|
24
|
-
const space = isSpace(node.properties.space) ? node.properties.space : void 0;
|
|
25
|
-
return node.type === documentTypename && space ? Option.some(space) : Option.none();
|
|
26
|
-
},
|
|
27
|
-
actions: (space) => Effect.succeed([
|
|
28
|
-
Node.makeAction({
|
|
29
|
-
id: "create-document",
|
|
30
|
-
data: () => Effect.gen(function* () {
|
|
31
|
-
const doc = Markdown.make({});
|
|
32
|
-
const { subject } = yield* Operation.invoke(SpaceOperation.AddObject, {
|
|
33
|
-
object: doc,
|
|
34
|
-
target: space.db,
|
|
35
|
-
hidden: true,
|
|
36
|
-
targetNodeId: getDocumentsPath(space.db.spaceId)
|
|
37
|
-
}, {
|
|
38
|
-
spaceId: space.db.spaceId
|
|
39
|
-
});
|
|
40
|
-
yield* Operation.invoke(LayoutOperation.Open, {
|
|
41
|
-
subject: [
|
|
42
|
-
...subject
|
|
43
|
-
]
|
|
44
|
-
}, {
|
|
45
|
-
spaceId: space.db.spaceId
|
|
46
|
-
});
|
|
47
|
-
}),
|
|
48
|
-
properties: {
|
|
49
|
-
label: [
|
|
50
|
-
"add-object.label",
|
|
51
|
-
{
|
|
52
|
-
ns: documentTypename
|
|
53
|
-
}
|
|
54
|
-
],
|
|
55
|
-
icon: "ph--plus--regular",
|
|
56
|
-
disposition: "list-item-primary"
|
|
57
|
-
}
|
|
58
|
-
})
|
|
59
|
-
])
|
|
60
|
-
})
|
|
61
|
-
]);
|
|
62
|
-
return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
|
|
63
|
-
}));
|
|
64
|
-
export {
|
|
65
|
-
app_graph_builder_default as default
|
|
66
|
-
};
|
|
67
|
-
//# sourceMappingURL=app-graph-builder-BWBA23FF.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities, LayoutOperation, createTypeSectionExtension } from '@dxos/app-toolkit';\nimport { isSpace } from '@dxos/client/echo';\nimport { Operation } from '@dxos/compute';\nimport { Type } from '@dxos/echo';\nimport { GraphBuilder, Node } from '@dxos/plugin-graph';\nimport { SpaceOperation } from '@dxos/plugin-space';\n\nimport { Markdown } from '#types';\n\nimport { getDocumentsPath } from '../paths';\n\nconst documentTypename = Type.getTypename(Markdown.Document);\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const extensions = yield* Effect.all([\n createTypeSectionExtension(Markdown.Document),\n\n GraphBuilder.createExtension({\n id: 'documentsSectionActions',\n match: (node) => {\n const space = isSpace(node.properties.space) ? node.properties.space : undefined;\n return node.type === documentTypename && space ? Option.some(space) : Option.none();\n },\n actions: (space) =>\n Effect.succeed([\n Node.makeAction({\n id: 'create-document',\n data: () =>\n Effect.gen(function* () {\n const doc = Markdown.make({});\n const { subject } = yield* Operation.invoke(\n SpaceOperation.AddObject,\n { object: doc, target: space.db, hidden: true, targetNodeId: getDocumentsPath(space.db.spaceId) },\n { spaceId: space.db.spaceId },\n );\n yield* Operation.invoke(\n LayoutOperation.Open,\n { subject: [...subject] },\n { spaceId: space.db.spaceId },\n );\n }),\n properties: {\n label: ['add-object.label', { ns: documentTypename }],\n icon: 'ph--plus--regular',\n disposition: 'list-item-primary',\n },\n }),\n ]),\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,YAAYA,YAAY;AACxB,YAAYC,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiBC,iBAAiBC,kCAAkC;AAC7E,SAASC,eAAe;AACxB,SAASC,iBAAiB;AAC1B,SAASC,YAAY;AACrB,SAASC,cAAcC,YAAY;AACnC,SAASC,sBAAsB;AAE/B,SAASC,gBAAgB;AAIzB,IAAMC,mBAAmBC,KAAKC,YAAYC,SAASC,QAAQ;AAE3D,IAAA,4BAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAMC,aAAa,OAAcC,WAAI;IACnCC,2BAA2BP,SAASC,QAAQ;IAE5CO,aAAaC,gBAAgB;MAC3BC,IAAI;MACJC,OAAO,CAACC,SAAAA;AACN,cAAMC,QAAQC,QAAQF,KAAKG,WAAWF,KAAK,IAAID,KAAKG,WAAWF,QAAQG;AACvE,eAAOJ,KAAKK,SAASpB,oBAAoBgB,QAAeK,YAAKL,KAAAA,IAAgBM,YAAI;MACnF;MACAC,SAAS,CAACP,UACDQ,eAAQ;QACbC,KAAKC,WAAW;UACdb,IAAI;UACJc,MAAM,MACGC,WAAI,aAAA;AACT,kBAAMC,MAAM1B,SAAS2B,KAAK,CAAC,CAAA;AAC3B,kBAAM,EAAEC,QAAO,IAAK,OAAOC,UAAUC,OACnCC,eAAeC,WACf;cAAEC,QAAQP;cAAKQ,QAAQrB,MAAMsB;cAAIC,QAAQ;cAAMC,cAAcC,iBAAiBzB,MAAMsB,GAAGI,OAAO;YAAE,GAChG;cAAEA,SAAS1B,MAAMsB,GAAGI;YAAQ,CAAA;AAE9B,mBAAOV,UAAUC,OACfU,gBAAgBC,MAChB;cAAEb,SAAS;mBAAIA;;YAAS,GACxB;cAAEW,SAAS1B,MAAMsB,GAAGI;YAAQ,CAAA;UAEhC,CAAA;UACFxB,YAAY;YACV2B,OAAO;cAAC;cAAoB;gBAAEC,IAAI9C;cAAiB;;YACnD+C,MAAM;YACNC,aAAa;UACf;QACF,CAAA;OACD;IACL,CAAA;GACD;AAED,SAAO3C,WAAW4C,YAAYC,gBAAgBC,iBAAiB3C,UAAAA;AACjE,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "Option", "Capability", "AppCapabilities", "LayoutOperation", "createTypeSectionExtension", "isSpace", "Operation", "Type", "GraphBuilder", "Node", "SpaceOperation", "Markdown", "documentTypename", "Type", "getTypename", "Markdown", "Document", "Capability", "makeModule", "fnUntraced", "extensions", "all", "createTypeSectionExtension", "GraphBuilder", "createExtension", "id", "match", "node", "space", "isSpace", "properties", "undefined", "type", "some", "none", "actions", "succeed", "Node", "makeAction", "data", "gen", "doc", "make", "subject", "Operation", "invoke", "SpaceOperation", "AddObject", "object", "target", "db", "hidden", "targetNodeId", "getDocumentsPath", "spaceId", "LayoutOperation", "Open", "label", "ns", "icon", "disposition", "contributes", "AppCapabilities", "AppGraphBuilder"]
|
|
7
|
-
}
|