@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
@@ -3,10 +3,11 @@
3
3
  //
4
4
 
5
5
  import { EditorView } from '@codemirror/view';
6
- import { Schema } from 'effect';
6
+ import * as Schema from 'effect/Schema';
7
7
  import { useMemo } from 'react';
8
8
 
9
- import { LayoutAction, createResolver, useIntentResolver } from '@dxos/app-framework';
9
+ import { LayoutAction, createResolver } from '@dxos/app-framework';
10
+ import { useIntentResolver } from '@dxos/app-framework/react';
10
11
  import { invariant } from '@dxos/invariant';
11
12
  import { Cursor, setSelection } from '@dxos/react-ui-editor';
12
13
 
@@ -15,13 +16,19 @@ import { meta } from '../meta';
15
16
  /**
16
17
  * Handle scrolling and selection of the current thread in a markdown editor.
17
18
  */
18
- export const useSelectCurrentThread = (editorView: EditorView | undefined, documentId: string) => {
19
+ export const useSelectCurrentThread = (editorView: EditorView | null, documentId: string) => {
19
20
  const scrollIntoViewResolver = useMemo(
20
21
  () =>
21
22
  createResolver({
22
23
  intent: LayoutAction.UpdateLayout,
23
24
  position: 'hoist',
24
- filter: (data): data is { part: 'current'; subject: string; options: { cursor: string } } => {
25
+ filter: (
26
+ data,
27
+ ): data is {
28
+ part: 'current';
29
+ subject: string;
30
+ options: { cursor: string };
31
+ } => {
25
32
  if (!Schema.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
26
33
  return false;
27
34
  }
@@ -35,7 +42,10 @@ export const useSelectCurrentThread = (editorView: EditorView | undefined, docum
35
42
  const selection = editorView.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;
36
43
  const effects = [
37
44
  // NOTE: This does not use the DOM scrollIntoView function.
38
- EditorView.scrollIntoView(range.from, { y: 'start', yMargin: 96 }),
45
+ EditorView.scrollIntoView(range.from, {
46
+ y: 'start',
47
+ yMargin: 96,
48
+ }),
39
49
  ];
40
50
  if (selection) {
41
51
  // Update the editor selection to get bi-directional highlighting.
package/src/meta.ts CHANGED
@@ -9,14 +9,11 @@ export const meta: PluginMeta = {
9
9
  id: 'dxos.org/plugin/markdown',
10
10
  name: 'Markdown',
11
11
  description: trim`
12
- A collaborative and extensible Markdown editor.
13
- In addition to markdown capabilities, the plugin supports collaborative in-line comments.
14
- You can use documents to extend the memory of your personal agents and add context for automated workflows.
12
+ Full-featured collaborative markdown editor with real-time editing, inline comments, and rich formatting.
13
+ Supports AI-powered editing assistance and seamlessly integrates with other workspace objects.
15
14
  `,
16
15
  icon: 'ph--text-aa--regular',
16
+ iconHue: 'indigo',
17
17
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
18
18
  screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],
19
19
  };
20
-
21
- // TODO(burdon): Workaround for suspected vitest bug? Update vitest?
22
- export const not_meta = meta;
package/src/testing.ts ADDED
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Toolkit from '@effect/ai/Toolkit';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { PropertiesType } from '@dxos/client-protocol';
9
+ import { Obj, Ref } from '@dxos/echo';
10
+ import { DatabaseService } from '@dxos/functions';
11
+ import { Collection } from '@dxos/schema';
12
+
13
+ // TODO(wittjosiah): Factor out.
14
+ export const WithProperties = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R | DatabaseService> =>
15
+ Effect.zipRight(
16
+ Effect.gen(function* () {
17
+ // TODO(wittjosiah): Remove cast.
18
+ yield* DatabaseService.add(
19
+ Obj.make(PropertiesType as any, {
20
+ [Collection.Collection.typename]: Ref.make(Collection.make()),
21
+ }) as any,
22
+ );
23
+ }),
24
+ effect,
25
+ );
26
+
27
+ export const testToolkit = Toolkit.empty as Toolkit.Toolkit<any>;
package/src/toolkit.ts ADDED
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { MarkdownBlueprint, MARKDOWN_BLUEPRINT_KEY } from './capabilities/blueprint-definition';
6
+ export { MarkdownFunction } from './functions';
@@ -21,6 +21,7 @@ export const translations = [
21
21
  },
22
22
  [meta.id]: {
23
23
  'plugin name': 'Editor',
24
+ 'settings title': 'Editor settings',
24
25
  'choose markdown from space dialog title': 'Choose one or more documents to add',
25
26
  // TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)
26
27
  'empty choose markdown from space message': 'None available; try creating a new one instead?',
@@ -42,6 +43,9 @@ export const translations = [
42
43
  'upload image label': 'Upload image',
43
44
  'fallback title': 'Untitled',
44
45
  'navigate to document label': 'Open document',
46
+ 'words label_zero': 'words',
47
+ 'words label_one': 'word',
48
+ 'words label_other': 'words',
45
49
  },
46
50
  },
47
51
  },
@@ -2,26 +2,29 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { Obj, Ref, Type } from '@dxos/echo';
8
- import { LabelAnnotation } from '@dxos/echo-schema';
8
+ import { DescriptionAnnotation, FormAnnotation, LabelAnnotation } from '@dxos/echo/internal';
9
9
  import { EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor/types';
10
- import { DataType } from '@dxos/schema';
10
+ import { ItemAnnotation, Text } from '@dxos/schema';
11
11
 
12
12
  /**
13
13
  * Document Item type.
14
14
  */
15
15
  export const Document = Schema.Struct({
16
16
  name: Schema.optional(Schema.String),
17
- fallbackName: Schema.optional(Schema.String),
18
- content: Type.Ref(DataType.Text),
17
+ description: Schema.optional(Schema.String),
18
+ fallbackName: Schema.String.pipe(FormAnnotation.set(false), Schema.optional),
19
+ content: Type.Ref(Text.Text).pipe(FormAnnotation.set(false)),
19
20
  }).pipe(
20
21
  Type.Obj({
21
22
  typename: 'dxos.org/type/Document',
22
23
  version: '0.1.0',
23
24
  }),
24
25
  LabelAnnotation.set(['name', 'fallbackName']),
26
+ DescriptionAnnotation.set('description'),
27
+ ItemAnnotation.set(true),
25
28
  );
26
29
 
27
30
  export type Document = Schema.Schema.Type<typeof Document>;
@@ -29,11 +32,11 @@ export type Document = Schema.Schema.Type<typeof Document>;
29
32
  /**
30
33
  * Document factory.
31
34
  */
32
- export const makeDocument = ({
35
+ export const make = ({
33
36
  content = '',
34
37
  ...props
35
38
  }: Partial<{ name: string; fallbackName: string; content: string }> = {}) =>
36
- Obj.make(Document, { ...props, content: Ref.make(DataType.makeText(content)) });
39
+ Obj.make(Document, { ...props, content: Ref.make(Text.make(content)) });
37
40
 
38
41
  /**
39
42
  * Plugin settings.
@@ -2,18 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
- import { Type } from '@dxos/echo';
8
7
  import { EditorViewMode } from '@dxos/react-ui-editor/types';
9
8
 
10
- import { not_meta } from '../meta';
9
+ import { meta } from '../meta';
11
10
 
12
11
  import { Document } from './Markdown';
13
12
 
14
- export class Create extends Schema.TaggedClass<Create>()(`${not_meta.id}/action/create`, {
13
+ export class Create extends Schema.TaggedClass<Create>()(`${meta.id}/action/create`, {
15
14
  input: Schema.Struct({
16
- spaceId: Type.SpaceId,
17
15
  name: Schema.optional(Schema.String),
18
16
  content: Schema.optional(Schema.String),
19
17
  }),
@@ -22,7 +20,7 @@ export class Create extends Schema.TaggedClass<Create>()(`${not_meta.id}/action/
22
20
  }),
23
21
  }) {}
24
22
 
25
- export class SetViewMode extends Schema.TaggedClass<SetViewMode>()(`${not_meta.id}/action/set-view-mode`, {
23
+ export class SetViewMode extends Schema.TaggedClass<SetViewMode>()(`${meta.id}/action/set-view-mode`, {
26
24
  input: Schema.Struct({
27
25
  id: Schema.String,
28
26
  viewMode: EditorViewMode,
@@ -4,4 +4,5 @@
4
4
 
5
5
  export * as MarkdownAction from './MarkdownAction';
6
6
  export * as Markdown from './Markdown';
7
+
7
8
  export * from './types';
@@ -8,6 +8,7 @@ import { type EditorViewMode } from '@dxos/react-ui-editor/types';
8
8
  import { type Document } from './Markdown';
9
9
 
10
10
  // TODO(burdon): Remove these from ./types since not part of plugin-markdown API?
11
+ // TODO(wittjosiah): MarkdownExtensionProvider is a part of the MarkdownCapabilities api which should be in ./types.
11
12
 
12
13
  // TODO(burdon): Async?
13
14
  export type MarkdownExtensionProvider = (props: { document?: Document }) => Extension | undefined;
package/src/util.tsx CHANGED
@@ -32,15 +32,20 @@ export const isMarkdownProperties = (data: unknown): data is MarkdownProperties
32
32
 
33
33
  const nonTitleChars = /[^\w ]/g;
34
34
 
35
- export const getFallbackName = (content: string) => {
35
+ export const getFallbackName = (content = '') => {
36
36
  return content.substring(0, 31).split('\n')[0].replaceAll(nonTitleChars, '').trim();
37
37
  };
38
38
 
39
- export const getAbstract = (content: string) => {
40
- return content.substring(0, 128).split('\n')[0].replaceAll(nonTitleChars, '').trim();
39
+ export const getContentSnippet = (content = '') => {
40
+ const abstract = content
41
+ .split('\n')
42
+ .filter((line) => !line.startsWith('#'))
43
+ .filter((line) => line.trim() !== '');
44
+
45
+ return abstract.length > 0 ? abstract[0].replaceAll(nonTitleChars, '').trim() + '...' : '';
41
46
  };
42
47
 
43
- export const setFallbackName = debounce((doc: Markdown.Document, content: string) => {
48
+ export const setFallbackName = debounce((doc: Markdown.Document, content = '') => {
44
49
  const name = getFallbackName(content);
45
50
  if (doc.fallbackName !== name) {
46
51
  doc.fallbackName = name;
@@ -55,6 +60,6 @@ export const serializer: TypedObjectSerializer<Markdown.Document> = {
55
60
 
56
61
  deserialize: async ({ content: serialized }) => {
57
62
  const { name, fallbackName, content } = JSON.parse(serialized);
58
- return Markdown.makeDocument({ name, fallbackName, content });
63
+ return Markdown.make({ name, fallbackName, content });
59
64
  },
60
65
  };
@@ -1,80 +0,0 @@
1
- import {
2
- getAbstract,
3
- getFallbackName
4
- } from "./chunk-JMBQG2ZC.mjs";
5
- import {
6
- Markdown_exports
7
- } from "./chunk-JTIGSUMB.mjs";
8
- import {
9
- meta
10
- } from "./chunk-IKPZHFTW.mjs";
11
-
12
- // src/components/MarkdownCard/MarkdownCard.tsx
13
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
14
- import { pipe } from "effect";
15
- import React, { useCallback } from "react";
16
- import { LayoutAction, chain, createIntent, useIntentDispatcher } from "@dxos/app-framework";
17
- import { Obj } from "@dxos/echo";
18
- import { fullyQualifiedId } from "@dxos/react-client/echo";
19
- import { Button, Icon, useTranslation } from "@dxos/react-ui";
20
- import { Card } from "@dxos/react-ui-stack";
21
- import { DataType } from "@dxos/schema";
22
- var getTitle = (subject, fallback) => {
23
- if (Obj.instanceOf(Markdown_exports.Document, subject)) {
24
- return subject.name ?? subject.fallbackName ?? getFallbackName(subject.content?.target?.content ?? fallback);
25
- } else if (Obj.instanceOf(DataType.Text, subject)) {
26
- return getFallbackName(subject.content);
27
- }
28
- };
29
- var getSnippet = (subject, fallback) => {
30
- if (Obj.instanceOf(Markdown_exports.Document, subject)) {
31
- return getAbstract(subject.content?.target?.content ?? fallback);
32
- } else if (Obj.instanceOf(DataType.Text, subject)) {
33
- return getAbstract(subject.content);
34
- }
35
- };
36
- var MarkdownCard = ({ subject, role }) => {
37
- var _effect = _useSignals();
38
- try {
39
- const { dispatchPromise: dispatch } = useIntentDispatcher();
40
- const { t } = useTranslation(meta.id);
41
- const snippet = getSnippet(subject, t("fallback abstract"));
42
- const handleNavigate = useCallback(() => dispatch(pipe(createIntent(LayoutAction.UpdatePopover, {
43
- part: "popover",
44
- subject: null,
45
- options: {
46
- state: false,
47
- anchorId: ""
48
- }
49
- }), chain(LayoutAction.Open, {
50
- part: "main",
51
- subject: [
52
- fullyQualifiedId(subject)
53
- ]
54
- }))), [
55
- dispatch,
56
- subject
57
- ]);
58
- return /* @__PURE__ */ React.createElement(Card.SurfaceRoot, {
59
- role
60
- }, /* @__PURE__ */ React.createElement(Card.Heading, null, getTitle(subject, t("fallback title"))), snippet && /* @__PURE__ */ React.createElement(Card.Text, {
61
- classNames: "line-clamp-3 break-words col-span-2"
62
- }, snippet), role === "card--popover" && /* @__PURE__ */ React.createElement(Card.Chrome, null, /* @__PURE__ */ React.createElement(Button, {
63
- onClick: handleNavigate
64
- }, /* @__PURE__ */ React.createElement("span", {
65
- className: "grow"
66
- }, t("navigate to document label")), /* @__PURE__ */ React.createElement(Icon, {
67
- icon: "ph--arrow-right--regular"
68
- }))));
69
- } finally {
70
- _effect.f();
71
- }
72
- };
73
-
74
- // src/components/MarkdownCard/index.ts
75
- var MarkdownCard_default = MarkdownCard;
76
- export {
77
- MarkdownCard,
78
- MarkdownCard_default as default
79
- };
80
- //# sourceMappingURL=MarkdownCard-IMCR4A4V.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/MarkdownCard/MarkdownCard.tsx", "../../../src/components/MarkdownCard/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { pipe } from 'effect';\nimport React, { useCallback } from 'react';\n\nimport { LayoutAction, chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { type PreviewProps } from '@dxos/plugin-preview';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { Button, Icon, useTranslation } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-stack';\nimport { DataType } from '@dxos/schema';\n\nimport { meta } from '../../meta';\nimport { Markdown } from '../../types';\nimport { getAbstract, getFallbackName } from '../../util';\n\n// TODO(burdon): Factor out.\nconst getTitle = (subject: Markdown.Document | DataType.Text, fallback: string) => {\n if (Obj.instanceOf(Markdown.Document, subject)) {\n return subject.name ?? subject.fallbackName ?? getFallbackName(subject.content?.target?.content ?? fallback);\n } else if (Obj.instanceOf(DataType.Text, subject)) {\n return getFallbackName(subject.content);\n }\n};\n\n// TODO(burdon): Factor out.\nconst getSnippet = (subject: Markdown.Document | DataType.Text, fallback: string) => {\n if (Obj.instanceOf(Markdown.Document, subject)) {\n return getAbstract(subject.content?.target?.content ?? fallback);\n } else if (Obj.instanceOf(DataType.Text, subject)) {\n return getAbstract(subject.content);\n }\n};\n\nexport type MarkdownCardProps = PreviewProps<Markdown.Document | DataType.Text>;\n\nexport const MarkdownCard = ({ subject, role }: MarkdownCardProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { t } = useTranslation(meta.id);\n const snippet = getSnippet(subject, t('fallback abstract'));\n\n // TODO(wittjosiah): Factor out so this component isn't dependent on the app framework.\n const handleNavigate = useCallback(\n () =>\n dispatch(\n pipe(\n createIntent(LayoutAction.UpdatePopover, {\n part: 'popover',\n subject: null,\n options: { state: false, anchorId: '' },\n }),\n chain(LayoutAction.Open, { part: 'main', subject: [fullyQualifiedId(subject)] }),\n ),\n ),\n [dispatch, subject],\n );\n\n return (\n <Card.SurfaceRoot role={role}>\n <Card.Heading>{getTitle(subject, t('fallback title'))}</Card.Heading>\n {snippet && <Card.Text classNames='line-clamp-3 break-words col-span-2'>{snippet}</Card.Text>}\n {role === 'card--popover' && (\n <Card.Chrome>\n <Button onClick={handleNavigate}>\n <span className='grow'>{t('navigate to document label')}</span>\n <Icon icon='ph--arrow-right--regular' />\n </Button>\n </Card.Chrome>\n )}\n </Card.SurfaceRoot>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { MarkdownCard } from './MarkdownCard';\n\nexport * from './MarkdownCard';\n\nexport default MarkdownCard;\n"],
5
- "mappings": ";;;;;;;;;;;;;AAIA,SAASA,YAAY;AACrB,OAAOC,SAASC,mBAAmB;AAEnC,SAASC,cAAcC,OAAOC,cAAcC,2BAA2B;AACvE,SAASC,WAAW;AAEpB,SAASC,wBAAwB;AACjC,SAASC,QAAQC,MAAMC,sBAAsB;AAC7C,SAASC,YAAY;AACrB,SAASC,gBAAgB;AAOzB,IAAMC,WAAW,CAACC,SAA4CC,aAAAA;AAC5D,MAAIC,IAAIC,WAAWC,iBAASC,UAAUL,OAAAA,GAAU;AAC9C,WAAOA,QAAQM,QAAQN,QAAQO,gBAAgBC,gBAAgBR,QAAQS,SAASC,QAAQD,WAAWR,QAAAA;EACrG,WAAWC,IAAIC,WAAWQ,SAASC,MAAMZ,OAAAA,GAAU;AACjD,WAAOQ,gBAAgBR,QAAQS,OAAO;EACxC;AACF;AAGA,IAAMI,aAAa,CAACb,SAA4CC,aAAAA;AAC9D,MAAIC,IAAIC,WAAWC,iBAASC,UAAUL,OAAAA,GAAU;AAC9C,WAAOc,YAAYd,QAAQS,SAASC,QAAQD,WAAWR,QAAAA;EACzD,WAAWC,IAAIC,WAAWQ,SAASC,MAAMZ,OAAAA,GAAU;AACjD,WAAOc,YAAYd,QAAQS,OAAO;EACpC;AACF;AAIO,IAAMM,eAAe,CAAC,EAAEf,SAASgB,KAAI,MAAqB;;;AAC/D,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AACtC,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAMC,UAAUX,WAAWb,SAASoB,EAAE,mBAAA,CAAA;AAGtC,UAAMK,iBAAiBC,YACrB,MACER,SACES,KACEC,aAAaC,aAAaC,eAAe;MACvCC,MAAM;MACN/B,SAAS;MACTgC,SAAS;QAAEC,OAAO;QAAOC,UAAU;MAAG;IACxC,CAAA,GACAC,MAAMN,aAAaO,MAAM;MAAEL,MAAM;MAAQ/B,SAAS;QAACqC,iBAAiBrC,OAAAA;;IAAU,CAAA,CAAA,CAAA,GAGpF;MAACkB;MAAUlB;KAAQ;AAGrB,WACE,sBAAA,cAACsC,KAAKC,aAAW;MAACvB;OAChB,sBAAA,cAACsB,KAAKE,SAAO,MAAEzC,SAASC,SAASoB,EAAE,gBAAA,CAAA,CAAA,GAClCI,WAAW,sBAAA,cAACc,KAAK1B,MAAI;MAAC6B,YAAW;OAAuCjB,OAAAA,GACxER,SAAS,mBACR,sBAAA,cAACsB,KAAKI,QAAM,MACV,sBAAA,cAACC,QAAAA;MAAOC,SAASnB;OACf,sBAAA,cAACoB,QAAAA;MAAKC,WAAU;OAAQ1B,EAAE,4BAAA,CAAA,GAC1B,sBAAA,cAAC2B,MAAAA;MAAKC,MAAK;;;;;AAMvB;;;AClEA,IAAA,uBAAeC;",
6
- "names": ["pipe", "React", "useCallback", "LayoutAction", "chain", "createIntent", "useIntentDispatcher", "Obj", "fullyQualifiedId", "Button", "Icon", "useTranslation", "Card", "DataType", "getTitle", "subject", "fallback", "Obj", "instanceOf", "Markdown", "Document", "name", "fallbackName", "getFallbackName", "content", "target", "DataType", "Text", "getSnippet", "getAbstract", "MarkdownCard", "role", "dispatchPromise", "dispatch", "useIntentDispatcher", "t", "useTranslation", "meta", "id", "snippet", "handleNavigate", "useCallback", "pipe", "createIntent", "LayoutAction", "UpdatePopover", "part", "options", "state", "anchorId", "chain", "Open", "fullyQualifiedId", "Card", "SurfaceRoot", "Heading", "classNames", "Chrome", "Button", "onClick", "span", "className", "Icon", "icon", "MarkdownCard"]
7
- }