@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.
Files changed (255) hide show
  1. package/dist/lib/neutral/{MarkdownArticle-LWT5RFFJ.mjs → MarkdownArticle-ZHBXH7YF.mjs} +5 -7
  2. package/dist/lib/neutral/MarkdownArticle-ZHBXH7YF.mjs.map +7 -0
  3. package/dist/lib/neutral/{MarkdownCard-TBLIRDBO.mjs → MarkdownCard-2HUXCGZP.mjs} +3 -3
  4. package/dist/lib/neutral/MarkdownCard-2HUXCGZP.mjs.map +7 -0
  5. package/dist/lib/neutral/MarkdownPlugin.mjs +8 -15
  6. package/dist/lib/neutral/MarkdownPlugin.mjs.map +3 -3
  7. package/dist/lib/neutral/MarkdownPlugin.node.mjs +4 -2
  8. package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +3 -3
  9. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs +6 -17
  10. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs.map +4 -4
  11. package/dist/lib/neutral/MarkdownSettings-5VMOYMND.mjs +43 -0
  12. package/dist/lib/neutral/MarkdownSettings-5VMOYMND.mjs.map +7 -0
  13. package/dist/lib/neutral/{anchor-sort-UXN4RHFX.mjs → anchor-sort-QF7UDG2A.mjs} +4 -3
  14. package/dist/lib/neutral/anchor-sort-QF7UDG2A.mjs.map +7 -0
  15. package/dist/lib/neutral/capabilities/index.mjs +10 -16
  16. package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
  17. package/dist/lib/neutral/capabilities/node.mjs +5 -3
  18. package/dist/lib/neutral/capabilities/node.mjs.map +3 -3
  19. package/dist/lib/neutral/chunk-2V6A5NDQ.mjs +8 -0
  20. package/dist/lib/neutral/{operation-handler-2ARMPBGZ.mjs → chunk-ANHHOTCD.mjs} +3 -4
  21. package/dist/lib/neutral/{operation-handler-2ARMPBGZ.mjs.map → chunk-ANHHOTCD.mjs.map} +1 -1
  22. package/dist/lib/neutral/chunk-CNYFGIDS.mjs +32 -0
  23. package/dist/lib/neutral/chunk-CNYFGIDS.mjs.map +7 -0
  24. package/dist/lib/neutral/{chunk-LXNSKCPD.mjs → chunk-EV4ZOL4P.mjs} +12 -11
  25. package/dist/lib/neutral/chunk-EV4ZOL4P.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-OC3JD73N.mjs +43 -0
  27. package/dist/lib/neutral/chunk-OC3JD73N.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-YJF6XOXX.mjs +175 -0
  29. package/dist/lib/neutral/chunk-YJF6XOXX.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-YMBC62S7.mjs +14 -0
  31. package/dist/lib/neutral/chunk-YMBC62S7.mjs.map +7 -0
  32. package/dist/lib/neutral/{chunk-Y2LQRUU7.mjs → chunk-ZJ3GWRUJ.mjs} +24 -23
  33. package/dist/lib/neutral/chunk-ZJ3GWRUJ.mjs.map +7 -0
  34. package/dist/lib/neutral/{comment-config-EGY7RPPW.mjs → comment-config-M5OGFULS.mjs} +6 -4
  35. package/dist/lib/neutral/comment-config-M5OGFULS.mjs.map +7 -0
  36. package/dist/lib/neutral/components/index.mjs +19 -57
  37. package/dist/lib/neutral/components/index.mjs.map +4 -4
  38. package/dist/lib/neutral/containers/index.mjs +5 -3
  39. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  40. package/dist/lib/neutral/{create-JK35XC4R.mjs → create-OQUMKL5I.mjs} +2 -2
  41. package/dist/lib/neutral/{create-markdown-7MLE625M.mjs → create-markdown-4O5FDA77.mjs} +2 -2
  42. package/dist/lib/neutral/{create-object-MU2LGXG6.mjs → create-object-RSEWTCMM.mjs} +2 -6
  43. package/dist/lib/neutral/create-object-RSEWTCMM.mjs.map +7 -0
  44. package/dist/lib/neutral/hooks/index.mjs +53 -23
  45. package/dist/lib/neutral/hooks/index.mjs.map +3 -3
  46. package/dist/lib/neutral/index.mjs +10 -16
  47. package/dist/lib/neutral/meta.json +1 -1
  48. package/dist/lib/neutral/meta.mjs +1 -1
  49. package/dist/lib/neutral/{open-5YC77C4O.mjs → open-BAZIRXII.mjs} +2 -2
  50. package/dist/lib/neutral/operation-handler-SDCXGMGK.mjs +8 -0
  51. package/dist/lib/neutral/operations/index.mjs +1 -1
  52. package/dist/lib/neutral/plugin.mjs +2 -2
  53. package/dist/lib/neutral/plugin.workerd.mjs +12 -0
  54. package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
  55. package/dist/lib/neutral/{react-surface-XYZJBKHZ.mjs → react-surface-37GL3UVG.mjs} +10 -15
  56. package/dist/lib/neutral/react-surface-37GL3UVG.mjs.map +7 -0
  57. package/dist/lib/neutral/{scroll-to-anchor-GAFB7W55.mjs → scroll-to-anchor-I6HFE5AH.mjs} +2 -2
  58. package/dist/lib/neutral/{set-view-mode-N7UHYMPG.mjs → set-view-mode-NY5OYYIM.mjs} +2 -2
  59. package/dist/lib/neutral/{settings-TDGDLCUR.mjs → settings-O6O6HT3I.mjs} +3 -3
  60. package/dist/lib/neutral/settings-O6O6HT3I.mjs.map +7 -0
  61. package/dist/lib/neutral/skill-definition-ET7BYY47.mjs +8 -0
  62. package/dist/lib/neutral/skill-definition-ET7BYY47.mjs.map +7 -0
  63. package/dist/lib/neutral/skills/index.mjs +8 -0
  64. package/dist/lib/neutral/skills/index.mjs.map +7 -0
  65. package/dist/lib/neutral/state-3BR7L6CW.mjs +69 -0
  66. package/dist/lib/neutral/state-3BR7L6CW.mjs.map +7 -0
  67. package/dist/lib/neutral/testing.mjs +2 -2
  68. package/dist/lib/neutral/testing.mjs.map +3 -3
  69. package/dist/lib/neutral/translations.mjs +1 -1
  70. package/dist/lib/neutral/translations.mjs.map +3 -3
  71. package/dist/lib/neutral/types/index.mjs +1 -1
  72. package/dist/lib/neutral/update-markdown-M4PTA6VS.mjs +24 -0
  73. package/dist/lib/neutral/update-markdown-M4PTA6VS.mjs.map +7 -0
  74. package/dist/types/dx.config.d.ts +28 -0
  75. package/dist/types/dx.config.d.ts.map +1 -0
  76. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  77. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -1
  78. package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/anchor-sort.d.ts +1 -2
  80. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/comment-config.d.ts +1 -2
  82. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/create-object.d.ts +1 -7
  84. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/editor-view-state.d.ts +7 -0
  86. package/dist/types/src/capabilities/editor-view-state.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/index.d.ts +7 -16
  88. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/node.d.ts +2 -6
  90. package/dist/types/src/capabilities/node.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/react-surface.d.ts +2 -2
  92. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/settings.d.ts +1 -2
  94. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
  96. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/state.d.ts +1 -2
  98. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  99. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +2 -2
  100. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
  101. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +5 -6
  102. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  103. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -2
  104. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  106. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +2 -2
  107. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  108. package/dist/types/src/components/PreviewComponent/PreviewComponent.d.ts +17 -0
  109. package/dist/types/src/components/PreviewComponent/PreviewComponent.d.ts.map +1 -0
  110. package/dist/types/src/components/PreviewComponent/index.d.ts +2 -0
  111. package/dist/types/src/components/PreviewComponent/index.d.ts.map +1 -0
  112. package/dist/types/src/components/index.d.ts +1 -2
  113. package/dist/types/src/components/index.d.ts.map +1 -1
  114. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts +6 -17
  115. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts.map +1 -1
  116. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts.map +1 -1
  117. package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts +1 -1
  118. package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  119. package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -1
  120. package/dist/types/src/{components → containers}/MarkdownSettings/index.d.ts.map +1 -1
  121. package/dist/types/src/containers/index.d.ts +1 -0
  122. package/dist/types/src/containers/index.d.ts.map +1 -1
  123. package/dist/types/src/hooks/useExtensions.d.ts +5 -5
  124. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  125. package/dist/types/src/hooks/useLinkQuery.d.ts +2 -2
  126. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  127. package/dist/types/src/index.d.ts +1 -2
  128. package/dist/types/src/index.d.ts.map +1 -1
  129. package/dist/types/src/meta.d.ts +32 -2
  130. package/dist/types/src/meta.d.ts.map +1 -1
  131. package/dist/types/src/operations/update-markdown.d.ts.map +1 -1
  132. package/dist/types/src/plugin.workerd.d.ts +2 -0
  133. package/dist/types/src/plugin.workerd.d.ts.map +1 -0
  134. package/dist/types/src/skills/index.d.ts +2 -0
  135. package/dist/types/src/skills/index.d.ts.map +1 -0
  136. package/dist/types/src/skills/markdown-skill.d.ts +4 -0
  137. package/dist/types/src/skills/markdown-skill.d.ts.map +1 -0
  138. package/dist/types/src/types/Markdown.d.ts +12 -20
  139. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  140. package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -1
  141. package/dist/types/src/types/MarkdownOperation.d.ts +5 -28
  142. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -1
  143. package/dist/types/src/types/types.d.ts +2 -0
  144. package/dist/types/src/types/types.d.ts.map +1 -1
  145. package/dist/types/tsconfig.tsbuildinfo +1 -1
  146. package/dx.config.ts +31 -0
  147. package/package.json +67 -59
  148. package/src/MarkdownPlugin.node.ts +2 -1
  149. package/src/MarkdownPlugin.test.ts +1 -1
  150. package/src/MarkdownPlugin.tsx +7 -16
  151. package/src/MarkdownPlugin.workerd.ts +5 -2
  152. package/src/capabilities/anchor-sort.ts +3 -2
  153. package/src/capabilities/comment-config.ts +6 -9
  154. package/src/capabilities/create-object.ts +1 -4
  155. package/src/capabilities/editor-view-state.ts +28 -0
  156. package/src/capabilities/index.ts +2 -16
  157. package/src/capabilities/node.ts +1 -0
  158. package/src/capabilities/react-surface.tsx +29 -13
  159. package/src/capabilities/settings.ts +2 -2
  160. package/src/capabilities/skill-definition.ts +14 -0
  161. package/src/capabilities/state.ts +8 -4
  162. package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
  163. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +72 -30
  164. package/src/components/MarkdownEditor/MarkdownEditor.tsx +14 -40
  165. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +7 -6
  166. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +2 -2
  167. package/src/components/PreviewComponent/PreviewComponent.tsx +195 -0
  168. package/src/components/PreviewComponent/index.ts +5 -0
  169. package/src/components/index.ts +1 -4
  170. package/src/containers/MarkdownArticle/MarkdownArticle.stories.tsx +3 -4
  171. package/src/containers/MarkdownArticle/MarkdownArticle.tsx +6 -6
  172. package/src/containers/MarkdownCard/MarkdownCard.tsx +2 -2
  173. package/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.tsx +1 -1
  174. package/src/containers/MarkdownSettings/MarkdownSettings.tsx +54 -0
  175. package/src/containers/index.ts +1 -0
  176. package/src/hooks/useEditorMenuOptions.ts +2 -2
  177. package/src/hooks/useExtensions.tsx +42 -22
  178. package/src/hooks/useLinkQuery.ts +5 -3
  179. package/src/index.ts +1 -2
  180. package/src/meta.ts +2 -22
  181. package/src/operations/create.conversations.json +1 -1
  182. package/src/operations/create.test.ts +5 -12
  183. package/src/operations/update-markdown.ts +7 -27
  184. package/src/operations/update.conversations.json +1 -1
  185. package/src/operations/update.test.ts +86 -16
  186. package/src/plugin.workerd.ts +5 -0
  187. package/src/skills/index.ts +5 -0
  188. package/src/{blueprints/markdown-blueprint.ts → skills/markdown-skill.ts} +8 -7
  189. package/src/testing.ts +2 -2
  190. package/src/translations.ts +1 -1
  191. package/src/types/Markdown.ts +20 -19
  192. package/src/types/MarkdownCapabilities.ts +7 -5
  193. package/src/types/MarkdownEvents.ts +1 -1
  194. package/src/types/MarkdownOperation.ts +12 -6
  195. package/src/types/types.ts +2 -7
  196. package/dist/lib/neutral/MarkdownArticle-LWT5RFFJ.mjs.map +0 -7
  197. package/dist/lib/neutral/MarkdownCard-TBLIRDBO.mjs.map +0 -7
  198. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs +0 -32
  199. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs.map +0 -7
  200. package/dist/lib/neutral/anchor-sort-UXN4RHFX.mjs.map +0 -7
  201. package/dist/lib/neutral/app-graph-builder-BWBA23FF.mjs +0 -67
  202. package/dist/lib/neutral/app-graph-builder-BWBA23FF.mjs.map +0 -7
  203. package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs +0 -56
  204. package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs.map +0 -7
  205. package/dist/lib/neutral/blueprint-definition-DSPXK77L.mjs +0 -15
  206. package/dist/lib/neutral/blueprint-definition-DSPXK77L.mjs.map +0 -7
  207. package/dist/lib/neutral/blueprints/index.mjs +0 -8
  208. package/dist/lib/neutral/chunk-36QFEVOZ.mjs +0 -30
  209. package/dist/lib/neutral/chunk-36QFEVOZ.mjs.map +0 -7
  210. package/dist/lib/neutral/chunk-67DKWOKF.mjs +0 -10
  211. package/dist/lib/neutral/chunk-67DKWOKF.mjs.map +0 -7
  212. package/dist/lib/neutral/chunk-CIJD7P6X.mjs +0 -8
  213. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +0 -7
  214. package/dist/lib/neutral/chunk-Y2LQRUU7.mjs.map +0 -7
  215. package/dist/lib/neutral/comment-config-EGY7RPPW.mjs.map +0 -7
  216. package/dist/lib/neutral/create-object-MU2LGXG6.mjs.map +0 -7
  217. package/dist/lib/neutral/navigation-resolver-3KBOMN4U.mjs +0 -14
  218. package/dist/lib/neutral/navigation-resolver-3KBOMN4U.mjs.map +0 -7
  219. package/dist/lib/neutral/react-surface-XYZJBKHZ.mjs.map +0 -7
  220. package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +0 -7
  221. package/dist/lib/neutral/state-5COCF5PN.mjs +0 -44
  222. package/dist/lib/neutral/state-5COCF5PN.mjs.map +0 -7
  223. package/dist/lib/neutral/update-markdown-NNINDDV5.mjs +0 -44
  224. package/dist/lib/neutral/update-markdown-NNINDDV5.mjs.map +0 -7
  225. package/dist/types/src/blueprints/index.d.ts +0 -2
  226. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  227. package/dist/types/src/blueprints/markdown-blueprint.d.ts +0 -4
  228. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +0 -1
  229. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -6
  230. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  231. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -5
  232. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  233. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
  234. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  235. package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -6
  236. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
  237. package/dist/types/src/paths.d.ts +0 -3
  238. package/dist/types/src/paths.d.ts.map +0 -1
  239. package/src/blueprints/index.ts +0 -5
  240. package/src/capabilities/app-graph-builder.ts +0 -63
  241. package/src/capabilities/app-graph-serializer.ts +0 -64
  242. package/src/capabilities/blueprint-definition.ts +0 -19
  243. package/src/capabilities/navigation-resolver.ts +0 -19
  244. package/src/components/MarkdownSettings/MarkdownSettings.tsx +0 -35
  245. package/src/paths.ts +0 -11
  246. /package/dist/lib/neutral/{chunk-CIJD7P6X.mjs.map → chunk-2V6A5NDQ.mjs.map} +0 -0
  247. /package/dist/lib/neutral/{create-JK35XC4R.mjs.map → create-OQUMKL5I.mjs.map} +0 -0
  248. /package/dist/lib/neutral/{create-markdown-7MLE625M.mjs.map → create-markdown-4O5FDA77.mjs.map} +0 -0
  249. /package/dist/lib/neutral/{open-5YC77C4O.mjs.map → open-BAZIRXII.mjs.map} +0 -0
  250. /package/dist/lib/neutral/{blueprints/index.mjs.map → operation-handler-SDCXGMGK.mjs.map} +0 -0
  251. /package/dist/lib/neutral/{scroll-to-anchor-GAFB7W55.mjs.map → scroll-to-anchor-I6HFE5AH.mjs.map} +0 -0
  252. /package/dist/lib/neutral/{set-view-mode-N7UHYMPG.mjs.map → set-view-mode-NY5OYYIM.mjs.map} +0 -0
  253. /package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.d.ts +0 -0
  254. /package/dist/types/src/{components → containers}/MarkdownSettings/index.d.ts +0 -0
  255. /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
+ );
@@ -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.id);
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([formattingCommands, linkSlashCommands, ...(slashCommandGroups ?? [])], (item) =>
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 { fromUrlPath } from '@dxos/app-toolkit';
8
+ import { Paths } from '@dxos/app-toolkit';
9
9
  import { debounceAndThrottle } from '@dxos/async';
10
10
  import { Obj } from '@dxos/echo';
11
- import { createDocAccessor } from '@dxos/echo-client';
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 SelectionManager } from '@dxos/react-ui-attention';
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 PreviewOptions,
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
- selectionManager?: SelectionManager;
57
+ viewState?: ViewStateManager;
55
58
  editorStateStore?: EditorStateStore;
56
- previewOptions?: PreviewOptions;
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
- selectionManager,
72
+ viewState,
70
73
  editorStateStore,
71
- previewOptions,
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 createDocAccessor).
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
- selectionManager,
99
- previewOptions,
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
- selectionManager,
109
- previewOptions,
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: createDocAccessor(target, ['content']),
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
- selectionManager,
159
- previewOptions,
161
+ viewState,
162
+ setWidgets,
160
163
  platform,
161
164
  }: ExtensionsOptions): Extension[] => {
162
165
  const extensions: Extension[] = [
163
- selectionManager && selectionChange(selectionManager),
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
- preview(previewOptions),
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 = (selectionManager: SelectionManager) => {
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
- selectionManager.updateMultiRange(id, ranges);
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
- ?.filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name))
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
@@ -2,9 +2,8 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export * from './blueprints';
5
+ export * from './skills';
6
6
  export * from './meta';
7
7
  export * from './operations';
8
- export * from './paths';
9
8
  export * from './types';
10
9
  export * from './util';
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
- export const meta = Plugin.makeMeta({
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
- Documents can be opened in source, preview, or read-only mode and rendered as a full-surface article or as embeddable cards. An optional formatting toolbar exposes headings, lists, links, and other common markdown actions, and dispositional toolbar actions contributed by other plugins are surfaced inline alongside it.
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);