@dxos/plugin-markdown 0.8.4-main.28f8d3d → 0.8.4-main.2c6827d

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 (241) hide show
  1. package/dist/lib/browser/MarkdownCard-JYMDPKV5.mjs +12 -0
  2. package/dist/lib/browser/MarkdownCard-JYMDPKV5.mjs.map +7 -0
  3. package/dist/lib/browser/MarkdownContainer-Y75XSVBX.mjs +15 -0
  4. package/dist/lib/browser/MarkdownContainer-Y75XSVBX.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-AJKRIWFD.mjs → anchor-sort-3HGPGCOO.mjs} +6 -7
  6. package/dist/lib/browser/anchor-sort-3HGPGCOO.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-OIS3MZX2.mjs → app-graph-serializer-POZN234F.mjs} +10 -11
  8. package/dist/lib/browser/app-graph-serializer-POZN234F.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-GIPKFDY5.mjs +13 -0
  10. package/dist/lib/browser/blueprint-definition-GIPKFDY5.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-MVL4K3OD.mjs → chunk-22XSSNBS.mjs} +8 -4
  12. package/dist/lib/browser/chunk-22XSSNBS.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-2MLGSYRN.mjs +20 -0
  14. package/dist/lib/browser/chunk-2MLGSYRN.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-IKPZHFTW.mjs → chunk-BQTYJOFB.mjs} +5 -7
  16. package/dist/lib/browser/chunk-BQTYJOFB.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-JMBQG2ZC.mjs → chunk-GH6GQSBL.mjs} +9 -8
  18. package/dist/lib/browser/chunk-GH6GQSBL.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-LMJPXTPL.mjs → chunk-IBCHVMZW.mjs} +2 -2
  20. package/dist/lib/browser/{chunk-LMJPXTPL.mjs.map → chunk-IBCHVMZW.mjs.map} +2 -2
  21. package/dist/lib/browser/chunk-K3LXOU3E.mjs +827 -0
  22. package/dist/lib/browser/chunk-K3LXOU3E.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-PBJLFIOX.mjs +96 -0
  24. package/dist/lib/browser/chunk-PBJLFIOX.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-JTIGSUMB.mjs → chunk-QYSEJ5GP.mjs} +16 -17
  26. package/dist/lib/browser/chunk-QYSEJ5GP.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-Y53FQREH.mjs +150 -0
  28. package/dist/lib/browser/chunk-Y53FQREH.mjs.map +7 -0
  29. package/dist/lib/browser/index.mjs +35 -19
  30. package/dist/lib/browser/index.mjs.map +3 -3
  31. package/dist/lib/browser/{intent-resolver-BLLHRSTQ.mjs → intent-resolver-Z5L7TXUK.mjs} +21 -19
  32. package/dist/lib/browser/intent-resolver-Z5L7TXUK.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/{react-surface-NL3BZR6H.mjs → react-surface-GO5ZOKNN.mjs} +88 -85
  35. package/dist/lib/browser/react-surface-GO5ZOKNN.mjs.map +7 -0
  36. package/dist/lib/browser/{settings-Z7ZV7SLC.mjs → settings-TZUDB5EW.mjs} +5 -5
  37. package/dist/lib/browser/{settings-Z7ZV7SLC.mjs.map → settings-TZUDB5EW.mjs.map} +1 -1
  38. package/dist/lib/browser/{state-ORTZIEJU.mjs → state-BTUKVZHY.mjs} +5 -5
  39. package/dist/lib/browser/{state-ORTZIEJU.mjs.map → state-BTUKVZHY.mjs.map} +1 -1
  40. package/dist/lib/browser/toolkit.mjs +13 -0
  41. package/dist/lib/browser/toolkit.mjs.map +7 -0
  42. package/dist/lib/browser/types/index.mjs +2 -2
  43. package/dist/lib/node-esm/MarkdownCard-ZXPJLUYO.mjs +13 -0
  44. package/dist/lib/node-esm/MarkdownCard-ZXPJLUYO.mjs.map +7 -0
  45. package/dist/lib/node-esm/MarkdownContainer-YRDSRDCS.mjs +16 -0
  46. package/dist/lib/node-esm/MarkdownContainer-YRDSRDCS.mjs.map +7 -0
  47. package/dist/lib/node-esm/{anchor-sort-N7WEA5E3.mjs → anchor-sort-PCDXEBJ2.mjs} +6 -7
  48. package/dist/lib/node-esm/anchor-sort-PCDXEBJ2.mjs.map +7 -0
  49. package/dist/lib/node-esm/{app-graph-serializer-Q3B44VFB.mjs → app-graph-serializer-NF65JYAS.mjs} +10 -11
  50. package/dist/lib/node-esm/app-graph-serializer-NF65JYAS.mjs.map +7 -0
  51. package/dist/lib/node-esm/blueprint-definition-ENKJZYQS.mjs +14 -0
  52. package/dist/lib/node-esm/blueprint-definition-ENKJZYQS.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-Z4XQ6C3D.mjs → chunk-AMHACOXW.mjs} +8 -4
  54. package/dist/lib/node-esm/chunk-AMHACOXW.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-CT7CFX5G.mjs +828 -0
  56. package/dist/lib/node-esm/chunk-CT7CFX5G.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-AYWAYBAY.mjs → chunk-GMMVSXQ6.mjs} +2 -2
  58. package/dist/lib/node-esm/{chunk-AYWAYBAY.mjs.map → chunk-GMMVSXQ6.mjs.map} +2 -2
  59. package/dist/lib/node-esm/chunk-HAIEWPU7.mjs +151 -0
  60. package/dist/lib/node-esm/chunk-HAIEWPU7.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-KCHUTL3Q.mjs +22 -0
  62. package/dist/lib/node-esm/chunk-KCHUTL3Q.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-KIRZFVX5.mjs → chunk-NGYJNQ6A.mjs} +16 -17
  64. package/dist/lib/node-esm/chunk-NGYJNQ6A.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-PIOOG7A5.mjs +97 -0
  66. package/dist/lib/node-esm/chunk-PIOOG7A5.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-JDMMLOB6.mjs → chunk-PLZ7EVCT.mjs} +9 -8
  68. package/dist/lib/node-esm/chunk-PLZ7EVCT.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-H4I2FGDZ.mjs → chunk-SHAMSMKQ.mjs} +5 -7
  70. package/dist/lib/node-esm/chunk-SHAMSMKQ.mjs.map +7 -0
  71. package/dist/lib/node-esm/index.mjs +35 -19
  72. package/dist/lib/node-esm/index.mjs.map +3 -3
  73. package/dist/lib/node-esm/{intent-resolver-NHPUPSWK.mjs → intent-resolver-6B3PFQ5F.mjs} +21 -19
  74. package/dist/lib/node-esm/intent-resolver-6B3PFQ5F.mjs.map +7 -0
  75. package/dist/lib/node-esm/meta.json +1 -1
  76. package/dist/lib/node-esm/{react-surface-XJ6ODCBE.mjs → react-surface-I46BPCWT.mjs} +88 -85
  77. package/dist/lib/node-esm/react-surface-I46BPCWT.mjs.map +7 -0
  78. package/dist/lib/node-esm/{settings-UCXEWBCT.mjs → settings-CJ3T5EX4.mjs} +5 -5
  79. package/dist/lib/node-esm/{settings-UCXEWBCT.mjs.map → settings-CJ3T5EX4.mjs.map} +1 -1
  80. package/dist/lib/node-esm/{state-47WSZG54.mjs → state-K6EH7SRZ.mjs} +5 -5
  81. package/dist/lib/node-esm/{state-47WSZG54.mjs.map → state-K6EH7SRZ.mjs.map} +1 -1
  82. package/dist/lib/node-esm/toolkit.mjs +14 -0
  83. package/dist/lib/node-esm/toolkit.mjs.map +7 -0
  84. package/dist/lib/node-esm/types/index.mjs +2 -2
  85. package/dist/types/src/MarkdownPlugin.d.ts +1 -1
  86. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -4
  88. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  90. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -8
  91. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/blueprint-definition.d.ts +7 -0
  93. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/index.d.ts +9 -10
  96. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  98. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  100. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/settings.d.ts +1 -1
  102. package/dist/types/src/capabilities/state.d.ts +2 -2
  103. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +3 -3
  104. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -1
  105. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +5 -38
  106. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/MarkdownContainer.d.ts +8 -12
  108. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  109. package/dist/types/src/components/MarkdownContainer.stories.d.ts +54 -5
  110. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  112. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  113. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +42 -23
  114. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  115. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +8 -15
  116. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  117. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +26 -0
  118. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  119. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +12 -0
  120. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  121. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  122. package/dist/types/src/components/Suggestions.stories.d.ts +1 -2
  123. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/index.d.ts +3 -1
  125. package/dist/types/src/components/index.d.ts.map +1 -1
  126. package/dist/types/src/functions/create.d.ts +8 -0
  127. package/dist/types/src/functions/create.d.ts.map +1 -0
  128. package/dist/types/src/functions/create.test.d.ts +2 -0
  129. package/dist/types/src/functions/create.test.d.ts.map +1 -0
  130. package/dist/types/src/functions/index.d.ts +18 -0
  131. package/dist/types/src/functions/index.d.ts.map +1 -0
  132. package/dist/types/src/functions/open.d.ts +7 -0
  133. package/dist/types/src/functions/open.d.ts.map +1 -0
  134. package/dist/types/src/functions/update.d.ts +6 -0
  135. package/dist/types/src/functions/update.d.ts.map +1 -0
  136. package/dist/types/src/functions/update.test.d.ts +2 -0
  137. package/dist/types/src/functions/update.test.d.ts.map +1 -0
  138. package/dist/types/src/hooks/index.d.ts +3 -0
  139. package/dist/types/src/hooks/index.d.ts.map +1 -1
  140. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  141. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  142. package/dist/types/src/hooks/useExtensions.d.ts +21 -0
  143. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  144. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  145. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  146. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  147. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  148. package/dist/types/src/meta.d.ts +0 -1
  149. package/dist/types/src/meta.d.ts.map +1 -1
  150. package/dist/types/src/testing.d.ts +6 -0
  151. package/dist/types/src/testing.d.ts.map +1 -0
  152. package/dist/types/src/toolkit.d.ts +3 -0
  153. package/dist/types/src/toolkit.d.ts.map +1 -0
  154. package/dist/types/src/translations.d.ts +4 -0
  155. package/dist/types/src/translations.d.ts.map +1 -1
  156. package/dist/types/src/types/Markdown.d.ts +8 -6
  157. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  158. package/dist/types/src/types/MarkdownAction.d.ts +6 -14
  159. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
  160. package/dist/types/src/types/index.d.ts.map +1 -1
  161. package/dist/types/src/types/types.d.ts.map +1 -1
  162. package/dist/types/src/util.d.ts +3 -3
  163. package/dist/types/src/util.d.ts.map +1 -1
  164. package/dist/types/tsconfig.tsbuildinfo +1 -1
  165. package/package.json +72 -53
  166. package/src/MarkdownPlugin.tsx +100 -87
  167. package/src/capabilities/anchor-sort.ts +3 -3
  168. package/src/capabilities/app-graph-serializer.ts +6 -6
  169. package/src/capabilities/artifact-definition.ts +11 -18
  170. package/src/capabilities/blueprint-definition.ts +43 -0
  171. package/src/capabilities/capabilities.ts +1 -0
  172. package/src/capabilities/index.ts +3 -1
  173. package/src/capabilities/intent-resolver.ts +12 -12
  174. package/src/capabilities/react-surface.tsx +44 -66
  175. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +11 -14
  176. package/src/components/MarkdownCard/MarkdownCard.tsx +52 -38
  177. package/src/components/MarkdownContainer.stories.tsx +78 -42
  178. package/src/components/MarkdownContainer.tsx +78 -220
  179. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  180. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +56 -34
  181. package/src/components/MarkdownEditor/MarkdownEditor.tsx +221 -273
  182. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +136 -0
  183. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +63 -0
  184. package/src/components/MarkdownSettings/MarkdownSettings.tsx +77 -74
  185. package/src/components/Suggestions.stories.tsx +49 -45
  186. package/src/components/index.ts +3 -1
  187. package/src/functions/create.conversations.json +1 -0
  188. package/src/functions/create.test.ts +128 -0
  189. package/src/functions/create.ts +34 -0
  190. package/src/functions/index.ts +13 -0
  191. package/src/functions/open.ts +32 -0
  192. package/src/functions/update.conversations.json +1 -0
  193. package/src/functions/update.test.ts +151 -0
  194. package/src/functions/update.ts +37 -0
  195. package/src/hooks/index.ts +3 -0
  196. package/src/hooks/useEditorMenuOptions.ts +71 -0
  197. package/src/{extensions.tsx → hooks/useExtensions.tsx} +60 -109
  198. package/src/hooks/useLinkQuery.ts +83 -0
  199. package/src/hooks/useSelectCurrentThread.tsx +15 -5
  200. package/src/meta.ts +3 -6
  201. package/src/testing.ts +27 -0
  202. package/src/toolkit.ts +6 -0
  203. package/src/translations.ts +4 -0
  204. package/src/types/Markdown.ts +10 -7
  205. package/src/types/MarkdownAction.ts +4 -6
  206. package/src/types/index.ts +1 -0
  207. package/src/types/types.ts +1 -0
  208. package/src/util.tsx +10 -5
  209. package/dist/lib/browser/MarkdownCard-IMCR4A4V.mjs +0 -80
  210. package/dist/lib/browser/MarkdownCard-IMCR4A4V.mjs.map +0 -7
  211. package/dist/lib/browser/MarkdownContainer-VGJPHMVG.mjs +0 -780
  212. package/dist/lib/browser/MarkdownContainer-VGJPHMVG.mjs.map +0 -7
  213. package/dist/lib/browser/anchor-sort-AJKRIWFD.mjs.map +0 -7
  214. package/dist/lib/browser/app-graph-serializer-OIS3MZX2.mjs.map +0 -7
  215. package/dist/lib/browser/chunk-IKPZHFTW.mjs.map +0 -7
  216. package/dist/lib/browser/chunk-JHH7VL52.mjs +0 -18
  217. package/dist/lib/browser/chunk-JHH7VL52.mjs.map +0 -7
  218. package/dist/lib/browser/chunk-JMBQG2ZC.mjs.map +0 -7
  219. package/dist/lib/browser/chunk-JTIGSUMB.mjs.map +0 -7
  220. package/dist/lib/browser/chunk-MVL4K3OD.mjs.map +0 -7
  221. package/dist/lib/browser/intent-resolver-BLLHRSTQ.mjs.map +0 -7
  222. package/dist/lib/browser/react-surface-NL3BZR6H.mjs.map +0 -7
  223. package/dist/lib/node-esm/MarkdownCard-JV2YDV3M.mjs +0 -81
  224. package/dist/lib/node-esm/MarkdownCard-JV2YDV3M.mjs.map +0 -7
  225. package/dist/lib/node-esm/MarkdownContainer-BJRNCXJZ.mjs +0 -781
  226. package/dist/lib/node-esm/MarkdownContainer-BJRNCXJZ.mjs.map +0 -7
  227. package/dist/lib/node-esm/anchor-sort-N7WEA5E3.mjs.map +0 -7
  228. package/dist/lib/node-esm/app-graph-serializer-Q3B44VFB.mjs.map +0 -7
  229. package/dist/lib/node-esm/chunk-H4I2FGDZ.mjs.map +0 -7
  230. package/dist/lib/node-esm/chunk-H6TITL7A.mjs +0 -20
  231. package/dist/lib/node-esm/chunk-H6TITL7A.mjs.map +0 -7
  232. package/dist/lib/node-esm/chunk-JDMMLOB6.mjs.map +0 -7
  233. package/dist/lib/node-esm/chunk-KIRZFVX5.mjs.map +0 -7
  234. package/dist/lib/node-esm/chunk-Z4XQ6C3D.mjs.map +0 -7
  235. package/dist/lib/node-esm/intent-resolver-NHPUPSWK.mjs.map +0 -7
  236. package/dist/lib/node-esm/react-surface-XJ6ODCBE.mjs.map +0 -7
  237. package/dist/types/src/components/Toolbar.stories.d.ts +0 -11
  238. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  239. package/dist/types/src/extensions.d.ts +0 -24
  240. package/dist/types/src/extensions.d.ts.map +0 -1
  241. package/src/components/Toolbar.stories.tsx +0 -112
@@ -0,0 +1,63 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+ import React, { useCallback, useState } from 'react';
7
+
8
+ import { type FileInfo } from '@dxos/app-framework';
9
+ import { invariant } from '@dxos/invariant';
10
+ import { type ThemedClassName } from '@dxos/react-ui';
11
+ import { EditorToolbar, type EditorToolbarProps, type EditorViewMode } from '@dxos/react-ui-editor';
12
+
13
+ import { FileUpload, type FileUploadAction } from './FileUpload';
14
+
15
+ export type MarkdownEditorToolbarProps = ThemedClassName<
16
+ {
17
+ id: string;
18
+ editorView?: EditorView;
19
+ onFileUpload?: (file: File) => Promise<FileInfo | undefined>;
20
+ } & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onViewModeChange'>
21
+ >;
22
+
23
+ export const MarkdownEditorToolbar = ({
24
+ classNames,
25
+ id,
26
+ role,
27
+ state,
28
+ editorView,
29
+ customActions,
30
+ onFileUpload,
31
+ onViewModeChange,
32
+ }: MarkdownEditorToolbarProps) => {
33
+ const [upload, setUpload] = useState<FileUploadAction | null>(null);
34
+ const uploadRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);
35
+
36
+ const handleViewModeChange = useCallback((mode: EditorViewMode) => onViewModeChange?.(mode), [onViewModeChange]);
37
+
38
+ const getView = useCallback(() => {
39
+ invariant(editorView);
40
+ return editorView;
41
+ }, [editorView]);
42
+
43
+ if (!editorView) {
44
+ return <div />;
45
+ }
46
+
47
+ return (
48
+ <>
49
+ <EditorToolbar
50
+ classNames={classNames}
51
+ attendableId={id}
52
+ role={role}
53
+ state={state}
54
+ customActions={customActions}
55
+ getView={getView}
56
+ onImageUpload={upload ?? undefined}
57
+ onViewModeChange={handleViewModeChange}
58
+ />
59
+
60
+ {onFileUpload && <FileUpload ref={uploadRef} editorView={editorView} onFileUpload={onFileUpload} />}
61
+ </>
62
+ );
63
+ };
@@ -6,7 +6,7 @@ import React from 'react';
6
6
 
7
7
  import { Input, Select, useTranslation } from '@dxos/react-ui';
8
8
  import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/react-ui-editor';
9
- import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
9
+ import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
10
10
 
11
11
  import { meta } from '../../meta';
12
12
  import { type Markdown } from '../../types';
@@ -16,90 +16,93 @@ export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings })
16
16
 
17
17
  // TODO(wittjosiah): Add skill test confirmation for entering vim mode.
18
18
  return (
19
- <DeprecatedFormContainer>
20
- <DeprecatedFormInput label={t('default view mode label')}>
21
- <Select.Root
22
- value={settings.defaultViewMode}
23
- onValueChange={(value) => {
24
- settings.defaultViewMode = value as EditorViewMode;
25
- }}
26
- >
27
- <Select.TriggerButton />
28
- <Select.Portal>
29
- <Select.Content>
30
- <Select.Viewport>
31
- {EditorViewModes.map((mode) => (
32
- <Select.Option key={mode} value={mode}>
33
- {t(`${mode} mode label`, { ns: 'react-ui-editor' })}
34
- </Select.Option>
35
- ))}
36
- </Select.Viewport>
37
- </Select.Content>
38
- </Select.Portal>
39
- </Select.Root>
40
- </DeprecatedFormInput>
19
+ <ControlPage>
20
+ <ControlSection title={t('settings title', { ns: meta.id })}>
21
+ <ControlGroup>
22
+ <ControlItemInput title={t('default view mode label')}>
23
+ <Select.Root
24
+ value={settings.defaultViewMode}
25
+ onValueChange={(value) => {
26
+ settings.defaultViewMode = value as EditorViewMode;
27
+ }}
28
+ >
29
+ <Select.TriggerButton />
30
+ <Select.Portal>
31
+ <Select.Content>
32
+ <Select.Viewport>
33
+ {EditorViewModes.map((mode) => (
34
+ <Select.Option key={mode} value={mode}>
35
+ {t(`${mode} mode label`, { ns: 'react-ui-editor' })}
36
+ </Select.Option>
37
+ ))}
38
+ </Select.Viewport>
39
+ <Select.Arrow />
40
+ </Select.Content>
41
+ </Select.Portal>
42
+ </Select.Root>
43
+ </ControlItemInput>
41
44
 
42
- <DeprecatedFormInput label={t('editor input mode label')}>
43
- <Select.Root
44
- value={settings.editorInputMode ?? 'default'}
45
- onValueChange={(value) => {
46
- settings.editorInputMode = value as EditorInputMode;
47
- }}
48
- >
49
- <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
50
- <Select.Portal>
51
- <Select.Content>
52
- <Select.Viewport>
53
- {EditorInputModes.map((mode) => (
54
- <Select.Option key={mode} value={mode}>
55
- {t(`settings editor input mode ${mode} label`)}
56
- </Select.Option>
57
- ))}
58
- </Select.Viewport>
59
- </Select.Content>
60
- </Select.Portal>
61
- </Select.Root>
62
- </DeprecatedFormInput>
45
+ <ControlItemInput title={t('editor input mode label')}>
46
+ <Select.Root
47
+ value={settings.editorInputMode ?? 'default'}
48
+ onValueChange={(value) => {
49
+ settings.editorInputMode = value as EditorInputMode;
50
+ }}
51
+ >
52
+ <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
53
+ <Select.Portal>
54
+ <Select.Content>
55
+ <Select.Viewport>
56
+ {EditorInputModes.map((mode) => (
57
+ <Select.Option key={mode} value={mode}>
58
+ {t(`settings editor input mode ${mode} label`)}
59
+ </Select.Option>
60
+ ))}
61
+ </Select.Viewport>
62
+ <Select.Arrow />
63
+ </Select.Content>
64
+ </Select.Portal>
65
+ </Select.Root>
66
+ </ControlItemInput>
63
67
 
64
- <DeprecatedFormInput label={t('settings toolbar label')}>
65
- <Input.Switch checked={settings.toolbar} onCheckedChange={(checked) => (settings.toolbar = !!checked)} />
66
- </DeprecatedFormInput>
68
+ <ControlItemInput title={t('settings toolbar label')}>
69
+ <Input.Switch checked={settings.toolbar} onCheckedChange={(checked) => (settings.toolbar = !!checked)} />
70
+ </ControlItemInput>
67
71
 
68
- <DeprecatedFormInput label={t('settings numbered headings label')}>
69
- <Input.Switch
70
- checked={settings.numberedHeadings}
71
- onCheckedChange={(checked) => (settings.numberedHeadings = !!checked)}
72
- />
73
- </DeprecatedFormInput>
72
+ <ControlItemInput title={t('settings numbered headings label')}>
73
+ <Input.Switch
74
+ checked={settings.numberedHeadings}
75
+ onCheckedChange={(checked) => (settings.numberedHeadings = !!checked)}
76
+ />
77
+ </ControlItemInput>
74
78
 
75
- <DeprecatedFormInput label={t('settings folding label')}>
76
- <Input.Switch checked={settings.folding} onCheckedChange={(checked) => (settings.folding = !!checked)} />
77
- </DeprecatedFormInput>
79
+ <ControlItemInput title={t('settings folding label')}>
80
+ <Input.Switch checked={settings.folding} onCheckedChange={(checked) => (settings.folding = !!checked)} />
81
+ </ControlItemInput>
78
82
 
79
- <DeprecatedFormInput label={t('settings experimental label')}>
80
- <Input.Switch
81
- checked={settings.experimental}
82
- onCheckedChange={(checked) => (settings.experimental = !!checked)}
83
- />
84
- </DeprecatedFormInput>
83
+ <ControlItemInput title={t('settings experimental label')}>
84
+ <Input.Switch
85
+ checked={settings.experimental}
86
+ onCheckedChange={(checked) => (settings.experimental = !!checked)}
87
+ />
88
+ </ControlItemInput>
85
89
 
86
- <DeprecatedFormInput
87
- label={t('settings debug label')}
88
- secondary={
89
- settings.debug ? (
90
- <Input.Root>
90
+ <ControlItemInput title={t('settings debug label')}>
91
+ <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />
92
+ </ControlItemInput>
93
+
94
+ {settings.debug && (
95
+ <ControlItemInput title={t('settings debug textarea label', { ns: meta.id })}>
91
96
  <Input.TextArea
92
97
  rows={5}
93
98
  value={settings.typewriter}
94
99
  onChange={({ target: { value } }) => (settings.typewriter = value)}
95
100
  placeholder={t('settings debug placeholder')}
96
101
  />
97
- </Input.Root>
98
- ) : undefined
99
- }
100
- >
101
- <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />
102
- </DeprecatedFormInput>
103
- </DeprecatedFormContainer>
102
+ </ControlItemInput>
103
+ )}
104
+ </ControlGroup>
105
+ </ControlSection>
106
+ </ControlPage>
104
107
  );
105
108
  };
@@ -2,39 +2,33 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta } from '@storybook/react-vite';
8
- import { Match, Option, Schema, pipe } from 'effect';
6
+ import * as Function from 'effect/Function';
7
+ import * as Match from 'effect/Match';
8
+ import * as Option from 'effect/Option';
9
+ import * as Schema from 'effect/Schema';
9
10
  import React, { type FC, useEffect, useMemo, useState } from 'react';
10
11
 
11
- import {
12
- Capabilities,
13
- CollaborationActions,
14
- IntentPlugin,
15
- SettingsPlugin,
16
- contributes,
17
- createIntent,
18
- useCapability,
19
- useIntentDispatcher,
20
- } from '@dxos/app-framework';
12
+ import { Capabilities, IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
13
+ import { useCapability, useIntentDispatcher } from '@dxos/app-framework/react';
21
14
  import { withPluginManager } from '@dxos/app-framework/testing';
22
15
  import { Obj, Ref, Type } from '@dxos/echo';
23
16
  import { invariant } from '@dxos/invariant';
24
- import { DXN } from '@dxos/keys';
25
17
  import { ClientPlugin } from '@dxos/plugin-client';
18
+ import { GraphPlugin } from '@dxos/plugin-graph';
26
19
  import { PreviewPlugin } from '@dxos/plugin-preview';
27
20
  import { SpacePlugin } from '@dxos/plugin-space';
28
21
  import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
29
22
  import { ThemePlugin } from '@dxos/plugin-theme';
30
23
  import { faker } from '@dxos/random';
31
- import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
24
+ import { createDocAccessor, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
32
25
  import { IconButton, Toolbar } from '@dxos/react-ui';
33
- import { type EditorSelection, type Range, command, useTextEditor } from '@dxos/react-ui-editor';
26
+ import { withTheme } from '@dxos/react-ui/testing';
27
+ import { type EditorSelection, type Range, useTextEditor } from '@dxos/react-ui-editor';
34
28
  import { StackItem } from '@dxos/react-ui-stack';
35
29
  import { defaultTx } from '@dxos/react-ui-theme';
36
- import { DataType } from '@dxos/schema';
37
- import { withLayout } from '@dxos/storybook-utils';
30
+ import { render } from '@dxos/storybook-utils';
31
+ import { Message } from '@dxos/types';
38
32
 
39
33
  import { MarkdownCapabilities } from '../capabilities';
40
34
  import { MarkdownPlugin } from '../MarkdownPlugin';
@@ -69,13 +63,13 @@ const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, conten
69
63
 
70
64
  const space = useSpace();
71
65
  const queueDxn = useMemo(() => space && space.queues.create().dxn, [space]);
72
- const queue = useQueue<DataType.Message>(queueDxn);
66
+ const queue = useQueue<Message.Message>(queueDxn);
73
67
 
74
68
  const handleInsert = async () => {
75
69
  invariant(space);
76
70
  invariant(queue);
77
71
  await queue.append([
78
- Obj.make(DataType.Message, {
72
+ Obj.make(Message.Message, {
79
73
  created: new Date().toISOString(),
80
74
  sender: { role: 'assistant' },
81
75
  blocks: [{ _tag: 'text', text: 'Hello' }],
@@ -86,8 +80,8 @@ const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, conten
86
80
 
87
81
  const text = await doc.content.load();
88
82
  const accessor = createDocAccessor(text, ['content']);
89
- const cursor = pipe(
90
- editorState.getState(fullyQualifiedId(doc))?.selection,
83
+ const cursor = Function.pipe(
84
+ editorState.getState(Obj.getDXN(doc).toString())?.selection,
91
85
  Option.fromNullable,
92
86
  Option.map(selectionToRange),
93
87
  Option.map((range) => toCursorRange(accessor, range.from, range.to)),
@@ -99,14 +93,14 @@ const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, conten
99
93
  // const message = deref(ref);
100
94
  // }
101
95
 
102
- void dispatch(
103
- createIntent(CollaborationActions.InsertContent, {
104
- target: doc as any as Type.Expando,
105
- object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
106
- at: cursor,
107
- label: 'Proposal',
108
- }),
109
- );
96
+ // void dispatch(
97
+ // createIntent(CollaborationActions.InsertContent, {
98
+ // target: doc as any as Type.Expando,
99
+ // object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
100
+ // at: cursor,
101
+ // label: 'Proposal',
102
+ // }),
103
+ // );
110
104
  };
111
105
 
112
106
  return (
@@ -131,12 +125,17 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
131
125
  }
132
126
 
133
127
  const doc = space.db.add(
134
- Markdown.makeDocument({
128
+ Markdown.make({
135
129
  name: 'Test',
136
130
  content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
137
- const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
131
+ const obj = space.db.add(
132
+ Obj.make(TestItem, {
133
+ title: label,
134
+ description: faker.lorem.paragraph(),
135
+ }),
136
+ );
138
137
  const dxn = Ref.make(obj).dxn.toString();
139
- return `[${label}][${dxn}]`;
138
+ return `[${label}](${dxn})`;
140
139
  }),
141
140
  }),
142
141
  );
@@ -145,45 +144,50 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
145
144
  }, [space]);
146
145
 
147
146
  if (!space || !doc) {
148
- return <></>;
147
+ return null;
149
148
  }
150
149
 
150
+ // TODO(burdon): Layout issue.
151
151
  return (
152
- <>
152
+ <div className='grid grid-cols-2 bs-full overflow-hidden'>
153
153
  <MarkdownContainer id={doc.id} object={doc} settings={settings} editorStateStore={editorState} />
154
154
  <TestChat doc={doc} content={chat} />
155
- </>
155
+ </div>
156
156
  );
157
157
  };
158
158
 
159
- // TODO(burdon): Make consistent.
160
159
  const storybook: Meta<typeof DefaultStory> = {
161
160
  title: 'plugins/plugin-markdown/Suggestions',
162
- render: DefaultStory,
161
+ render: render(DefaultStory),
163
162
  decorators: [
163
+ withTheme,
164
164
  withPluginManager({
165
165
  plugins: [
166
- ThemePlugin({ tx: defaultTx }),
167
- StorybookLayoutPlugin(),
168
166
  ClientPlugin({
169
167
  types: [Markdown.Document, TestItem],
170
168
  onClientInitialized: async ({ client }) => {
171
169
  await client.halo.createIdentity();
172
170
  },
173
171
  }),
174
- SpacePlugin(),
175
- SettingsPlugin(),
172
+ SpacePlugin({}),
173
+ GraphPlugin(),
176
174
  IntentPlugin(),
175
+ SettingsPlugin(),
176
+
177
+ // UI
178
+ ThemePlugin({ tx: defaultTx }),
177
179
  MarkdownPlugin(),
178
180
  PreviewPlugin(),
181
+ StorybookLayoutPlugin({}),
179
182
  ],
180
- capabilities: [contributes(MarkdownCapabilities.Extensions, [() => command()])],
181
183
  }),
182
- withLayout({ fullscreen: true, classNames: 'grid grid-cols-2' }),
183
184
  ],
184
185
  parameters: {
186
+ layout: 'fullscreen',
187
+ controls: {
188
+ disable: true,
189
+ },
185
190
  translations,
186
- controls: { disable: true },
187
191
  },
188
192
  };
189
193
 
@@ -4,7 +4,9 @@
4
4
 
5
5
  import { lazy } from 'react';
6
6
 
7
+ export * from './MarkdownCard';
8
+ export * from './MarkdownContainer';
7
9
  export * from './MarkdownSettings';
8
10
 
9
- export const MarkdownContainer = lazy(() => import('./MarkdownContainer'));
10
11
  export const MarkdownCard = lazy(() => import('./MarkdownCard'));
12
+ export const MarkdownContainer = lazy(() => import('./MarkdownContainer'));