@dxos/plugin-markdown 0.8.4-main.c1de068 → 0.8.4-main.c351d160a8

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 (382) hide show
  1. package/dist/lib/browser/MarkdownCard-R6VVXOMN.mjs +61 -0
  2. package/dist/lib/browser/MarkdownCard-R6VVXOMN.mjs.map +7 -0
  3. package/dist/lib/browser/MarkdownContainer-LSOAAG6R.mjs +127 -0
  4. package/dist/lib/browser/MarkdownContainer-LSOAAG6R.mjs.map +7 -0
  5. package/dist/lib/browser/MarkdownSettings-OD7AJSSJ.mjs +106 -0
  6. package/dist/lib/browser/MarkdownSettings-OD7AJSSJ.mjs.map +7 -0
  7. package/dist/lib/browser/anchor-sort-35SV33JX.mjs +34 -0
  8. package/dist/lib/browser/anchor-sort-35SV33JX.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-serializer-RMUNNVUY.mjs +60 -0
  10. package/dist/lib/browser/app-graph-serializer-RMUNNVUY.mjs.map +7 -0
  11. package/dist/lib/browser/blueprint-definition-SFGTWLSY.mjs +18 -0
  12. package/dist/lib/browser/blueprint-definition-SFGTWLSY.mjs.map +7 -0
  13. package/dist/lib/browser/blueprints/index.mjs +9 -0
  14. package/dist/lib/browser/blueprints/index.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-4CSOMIT4.mjs +135 -0
  16. package/dist/lib/browser/chunk-4CSOMIT4.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-646I24Q2.mjs +178 -0
  18. package/dist/lib/browser/chunk-646I24Q2.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-B6S4YQWZ.mjs +781 -0
  20. package/dist/lib/browser/chunk-B6S4YQWZ.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-RYZHVXZ5.mjs +28 -0
  22. package/dist/lib/browser/chunk-RYZHVXZ5.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-WU3CQIPM.mjs +8 -0
  24. package/dist/lib/browser/chunk-WU3CQIPM.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-LHDCHDBW.mjs → chunk-YKXQWJX6.mjs} +16 -8
  26. package/dist/lib/browser/chunk-YKXQWJX6.mjs.map +7 -0
  27. package/dist/lib/browser/cli/index.mjs +34 -0
  28. package/dist/lib/browser/cli/index.mjs.map +7 -0
  29. package/dist/lib/browser/index.mjs +130 -137
  30. package/dist/lib/browser/index.mjs.map +4 -4
  31. package/dist/lib/browser/meta.json +1 -1
  32. package/dist/lib/browser/operation-resolver-MVI2ZJ7M.mjs +41 -0
  33. package/dist/lib/browser/operation-resolver-MVI2ZJ7M.mjs.map +7 -0
  34. package/dist/lib/browser/react-surface-OJYNFGZB.mjs +117 -0
  35. package/dist/lib/browser/react-surface-OJYNFGZB.mjs.map +7 -0
  36. package/dist/lib/browser/settings-R722LDFD.mjs +38 -0
  37. package/dist/lib/browser/settings-R722LDFD.mjs.map +7 -0
  38. package/dist/lib/browser/state-MRJLGZW4.mjs +31 -0
  39. package/dist/lib/browser/state-MRJLGZW4.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +14 -14
  41. package/dist/lib/node-esm/MarkdownCard-EE3Q2JPL.mjs +62 -0
  42. package/dist/lib/node-esm/MarkdownCard-EE3Q2JPL.mjs.map +7 -0
  43. package/dist/lib/node-esm/MarkdownContainer-NMFVVFBR.mjs +128 -0
  44. package/dist/lib/node-esm/MarkdownContainer-NMFVVFBR.mjs.map +7 -0
  45. package/dist/lib/node-esm/MarkdownSettings-U7GJ4OP3.mjs +107 -0
  46. package/dist/lib/node-esm/MarkdownSettings-U7GJ4OP3.mjs.map +7 -0
  47. package/dist/lib/node-esm/anchor-sort-QCV4U222.mjs +35 -0
  48. package/dist/lib/node-esm/anchor-sort-QCV4U222.mjs.map +7 -0
  49. package/dist/lib/node-esm/app-graph-serializer-I27YTNDW.mjs +61 -0
  50. package/dist/lib/node-esm/app-graph-serializer-I27YTNDW.mjs.map +7 -0
  51. package/dist/lib/node-esm/blueprint-definition-VZEIBTAP.mjs +19 -0
  52. package/dist/lib/node-esm/blueprint-definition-VZEIBTAP.mjs.map +7 -0
  53. package/dist/lib/node-esm/blueprints/index.mjs +10 -0
  54. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-2LVNBTQT.mjs +136 -0
  56. package/dist/lib/node-esm/chunk-2LVNBTQT.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-CW4FZNMZ.mjs +29 -0
  58. package/dist/lib/node-esm/chunk-CW4FZNMZ.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-HVAZON2M.mjs +10 -0
  60. package/dist/lib/node-esm/chunk-HVAZON2M.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-KHTJJ45U.mjs +179 -0
  62. package/dist/lib/node-esm/chunk-KHTJJ45U.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-VIR2ABYE.mjs → chunk-TR2NZYXO.mjs} +16 -8
  64. package/dist/lib/node-esm/chunk-TR2NZYXO.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-VG2PIENM.mjs +782 -0
  66. package/dist/lib/node-esm/chunk-VG2PIENM.mjs.map +7 -0
  67. package/dist/lib/node-esm/cli/index.mjs +35 -0
  68. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +130 -137
  70. package/dist/lib/node-esm/index.mjs.map +4 -4
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/operation-resolver-6TK6ARJ6.mjs +42 -0
  73. package/dist/lib/node-esm/operation-resolver-6TK6ARJ6.mjs.map +7 -0
  74. package/dist/lib/node-esm/react-surface-UVNCUX77.mjs +118 -0
  75. package/dist/lib/node-esm/react-surface-UVNCUX77.mjs.map +7 -0
  76. package/dist/lib/node-esm/settings-RDYNOKVE.mjs +39 -0
  77. package/dist/lib/node-esm/settings-RDYNOKVE.mjs.map +7 -0
  78. package/dist/lib/node-esm/state-7HQSNXXQ.mjs +32 -0
  79. package/dist/lib/node-esm/state-7HQSNXXQ.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +14 -14
  81. package/dist/types/src/MarkdownPlugin.d.ts +2 -1
  82. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  83. package/dist/types/src/blueprints/functions/create.d.ts +8 -0
  84. package/dist/types/src/blueprints/functions/create.d.ts.map +1 -0
  85. package/dist/types/src/blueprints/functions/create.test.d.ts +2 -0
  86. package/dist/types/src/blueprints/functions/create.test.d.ts.map +1 -0
  87. package/dist/types/src/blueprints/functions/index.d.ts +42 -0
  88. package/dist/types/src/blueprints/functions/index.d.ts.map +1 -0
  89. package/dist/types/src/blueprints/functions/open.d.ts +14 -0
  90. package/dist/types/src/blueprints/functions/open.d.ts.map +1 -0
  91. package/dist/types/src/blueprints/functions/update.d.ts +19 -0
  92. package/dist/types/src/blueprints/functions/update.d.ts.map +1 -0
  93. package/dist/types/src/blueprints/functions/update.test.d.ts +2 -0
  94. package/dist/types/src/blueprints/functions/update.test.d.ts.map +1 -0
  95. package/dist/types/src/blueprints/index.d.ts +2 -0
  96. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  97. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  98. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +6 -0
  100. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/anchor-sort/index.d.ts +3 -0
  102. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
  104. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
  106. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +5 -0
  108. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/artifact-definition/index.d.ts +3 -0
  110. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +6 -0
  112. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  114. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/index.d.ts +7 -16
  116. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  118. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  120. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  122. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  124. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  126. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/settings/settings.d.ts +7 -0
  128. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  130. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/state/state.d.ts +5 -0
  132. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  133. package/dist/types/src/cli/index.d.ts +2 -0
  134. package/dist/types/src/cli/index.d.ts.map +1 -0
  135. package/dist/types/src/cli/plugin.d.ts +3 -0
  136. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  137. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  138. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  139. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +45 -23
  140. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  141. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +8 -15
  142. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +32 -0
  144. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  145. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +12 -0
  146. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  147. package/dist/types/src/components/index.d.ts +1 -3
  148. package/dist/types/src/components/index.d.ts.map +1 -1
  149. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts +8 -0
  150. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  151. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  152. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  153. package/dist/types/src/containers/MarkdownCard/index.d.ts +3 -0
  154. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  155. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts +28 -0
  156. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +1 -0
  157. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts +89 -0
  158. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +1 -0
  159. package/dist/types/src/containers/MarkdownContainer/index.d.ts +3 -0
  160. package/dist/types/src/containers/MarkdownContainer/index.d.ts.map +1 -0
  161. package/dist/types/src/containers/MarkdownSettings/MarkdownSettings.d.ts +8 -0
  162. package/dist/types/src/containers/MarkdownSettings/MarkdownSettings.d.ts.map +1 -0
  163. package/dist/types/src/containers/MarkdownSettings/index.d.ts +3 -0
  164. package/dist/types/src/containers/MarkdownSettings/index.d.ts.map +1 -0
  165. package/dist/types/src/containers/index.d.ts +6 -0
  166. package/dist/types/src/containers/index.d.ts.map +1 -0
  167. package/dist/types/src/hooks/index.d.ts +3 -0
  168. package/dist/types/src/hooks/index.d.ts.map +1 -1
  169. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  170. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  171. package/dist/types/src/hooks/useExtensions.d.ts +21 -0
  172. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  173. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  174. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  175. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  176. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  177. package/dist/types/src/index.d.ts +4 -3
  178. package/dist/types/src/index.d.ts.map +1 -1
  179. package/dist/types/src/meta.d.ts +2 -3
  180. package/dist/types/src/meta.d.ts.map +1 -1
  181. package/dist/types/src/testing.d.ts +6 -0
  182. package/dist/types/src/testing.d.ts.map +1 -0
  183. package/dist/types/src/translations.d.ts +37 -2
  184. package/dist/types/src/translations.d.ts.map +1 -1
  185. package/dist/types/src/types/Markdown.d.ts +45 -0
  186. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  187. package/dist/types/src/types/MarkdownAction.d.ts +46 -0
  188. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
  189. package/dist/types/src/types/capabilities.d.ts +22 -0
  190. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  191. package/dist/types/src/types/events.d.ts +5 -0
  192. package/dist/types/src/types/events.d.ts.map +1 -0
  193. package/dist/types/src/types/index.d.ts +5 -1
  194. package/dist/types/src/types/index.d.ts.map +1 -1
  195. package/dist/types/src/types/types.d.ts +4 -60
  196. package/dist/types/src/types/types.d.ts.map +1 -1
  197. package/dist/types/src/util.d.ts +17 -5
  198. package/dist/types/src/util.d.ts.map +1 -1
  199. package/dist/types/src/util.test.d.ts +2 -0
  200. package/dist/types/src/util.test.d.ts.map +1 -0
  201. package/dist/types/tsconfig.tsbuildinfo +1 -1
  202. package/package.json +99 -56
  203. package/src/MarkdownPlugin.tsx +74 -105
  204. package/src/blueprints/functions/create.conversations.json +1 -0
  205. package/src/blueprints/functions/create.test.ts +92 -0
  206. package/src/blueprints/functions/create.ts +35 -0
  207. package/src/blueprints/functions/index.ts +15 -0
  208. package/src/blueprints/functions/open.ts +33 -0
  209. package/src/blueprints/functions/update.conversations.json +1 -0
  210. package/src/blueprints/functions/update.test.ts +215 -0
  211. package/src/blueprints/functions/update.ts +79 -0
  212. package/src/blueprints/index.ts +5 -0
  213. package/src/blueprints/markdown-blueprint.ts +46 -0
  214. package/src/capabilities/anchor-sort/anchor-sort.ts +37 -0
  215. package/src/capabilities/anchor-sort/index.ts +7 -0
  216. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +60 -0
  217. package/src/capabilities/app-graph-serializer/index.ts +7 -0
  218. package/src/capabilities/artifact-definition/artifact-definition.ts +110 -0
  219. package/src/capabilities/artifact-definition/index.ts +7 -0
  220. package/src/capabilities/blueprint-definition/blueprint-definition.ts +17 -0
  221. package/src/capabilities/blueprint-definition/index.ts +7 -0
  222. package/src/capabilities/index.ts +7 -11
  223. package/src/capabilities/operation-resolver/index.ts +7 -0
  224. package/src/capabilities/operation-resolver/operation-resolver.ts +34 -0
  225. package/src/capabilities/react-surface/index.ts +7 -0
  226. package/src/capabilities/react-surface/react-surface.tsx +111 -0
  227. package/src/capabilities/settings/index.ts +7 -0
  228. package/src/capabilities/settings/settings.ts +37 -0
  229. package/src/capabilities/state/index.ts +7 -0
  230. package/src/capabilities/state/state.ts +31 -0
  231. package/src/cli/index.ts +5 -0
  232. package/src/cli/plugin.ts +29 -0
  233. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  234. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +62 -37
  235. package/src/components/MarkdownEditor/MarkdownEditor.tsx +246 -271
  236. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +163 -0
  237. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +66 -0
  238. package/src/components/index.ts +2 -7
  239. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +68 -0
  240. package/src/containers/MarkdownCard/MarkdownCard.tsx +61 -0
  241. package/src/containers/MarkdownCard/index.ts +7 -0
  242. package/src/containers/MarkdownContainer/MarkdownContainer.stories.tsx +136 -0
  243. package/src/containers/MarkdownContainer/MarkdownContainer.tsx +134 -0
  244. package/src/containers/MarkdownContainer/index.ts +6 -0
  245. package/src/containers/MarkdownSettings/MarkdownSettings.tsx +122 -0
  246. package/src/containers/MarkdownSettings/index.ts +7 -0
  247. package/src/containers/index.ts +11 -0
  248. package/src/hooks/index.ts +3 -0
  249. package/src/hooks/useEditorMenuOptions.ts +68 -0
  250. package/src/hooks/useExtensions.tsx +237 -0
  251. package/src/hooks/useLinkQuery.ts +83 -0
  252. package/src/hooks/useSelectCurrentThread.tsx +40 -35
  253. package/src/index.ts +7 -3
  254. package/src/meta.ts +9 -10
  255. package/src/testing.ts +27 -0
  256. package/src/translations.ts +10 -2
  257. package/src/types/Markdown.ts +65 -0
  258. package/src/types/MarkdownAction.ts +44 -0
  259. package/src/types/capabilities.ts +38 -0
  260. package/src/types/events.ts +14 -0
  261. package/src/types/index.ts +6 -1
  262. package/src/types/types.ts +7 -50
  263. package/src/util.test.ts +44 -0
  264. package/src/util.tsx +100 -11
  265. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs +0 -778
  266. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs.map +0 -7
  267. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs +0 -80
  268. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs.map +0 -7
  269. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs +0 -32
  270. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
  271. package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs +0 -52
  272. package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs.map +0 -7
  273. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs +0 -145
  274. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs.map +0 -7
  275. package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
  276. package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
  277. package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
  278. package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
  279. package/dist/lib/browser/chunk-LFML7LC6.mjs +0 -51
  280. package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
  281. package/dist/lib/browser/chunk-LHDCHDBW.mjs.map +0 -7
  282. package/dist/lib/browser/chunk-PHTD5DTR.mjs +0 -20
  283. package/dist/lib/browser/chunk-PHTD5DTR.mjs.map +0 -7
  284. package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
  285. package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
  286. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs +0 -64
  287. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
  288. package/dist/lib/browser/react-surface-C3Z423TV.mjs +0 -206
  289. package/dist/lib/browser/react-surface-C3Z423TV.mjs.map +0 -7
  290. package/dist/lib/browser/settings-KN75ZQY6.mjs +0 -28
  291. package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
  292. package/dist/lib/browser/state-LZWTAS65.mjs +0 -37
  293. package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
  294. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs +0 -779
  295. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs.map +0 -7
  296. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs +0 -81
  297. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs.map +0 -7
  298. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs +0 -33
  299. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
  300. package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs +0 -53
  301. package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs.map +0 -7
  302. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs +0 -146
  303. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs +0 -22
  305. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs +0 -17
  307. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs +0 -52
  309. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
  310. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
  311. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
  312. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
  313. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
  314. package/dist/lib/node-esm/chunk-VIR2ABYE.mjs.map +0 -7
  315. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs +0 -65
  316. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
  317. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs +0 -207
  318. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs.map +0 -7
  319. package/dist/lib/node-esm/settings-KVP7TVX7.mjs +0 -29
  320. package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
  321. package/dist/lib/node-esm/state-NW3W4JCQ.mjs +0 -38
  322. package/dist/lib/node-esm/state-NW3W4JCQ.mjs.map +0 -7
  323. package/dist/types/src/capabilities/anchor-sort.d.ts +0 -6
  324. package/dist/types/src/capabilities/anchor-sort.d.ts.map +0 -1
  325. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
  326. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  327. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -11
  328. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  329. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  330. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  331. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  332. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  333. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  334. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  335. package/dist/types/src/capabilities/settings.d.ts +0 -4
  336. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  337. package/dist/types/src/capabilities/state.d.ts +0 -11
  338. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  339. package/dist/types/src/components/MarkdownContainer.d.ts +0 -18
  340. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  341. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -9
  342. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  343. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  344. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  345. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -42
  346. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  347. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  348. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  349. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +0 -6
  350. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +0 -1
  351. package/dist/types/src/components/MarkdownSettings/index.d.ts +0 -2
  352. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +0 -1
  353. package/dist/types/src/components/Suggestions.stories.d.ts +0 -12
  354. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  355. package/dist/types/src/components/Toolbar.stories.d.ts +0 -11
  356. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  357. package/dist/types/src/events.d.ts +0 -4
  358. package/dist/types/src/events.d.ts.map +0 -1
  359. package/dist/types/src/extensions.d.ts +0 -24
  360. package/dist/types/src/extensions.d.ts.map +0 -1
  361. package/dist/types/src/types/schema.d.ts +0 -35
  362. package/dist/types/src/types/schema.d.ts.map +0 -1
  363. package/src/capabilities/anchor-sort.ts +0 -30
  364. package/src/capabilities/app-graph-serializer.ts +0 -52
  365. package/src/capabilities/artifact-definition.ts +0 -116
  366. package/src/capabilities/capabilities.ts +0 -20
  367. package/src/capabilities/intent-resolver.ts +0 -63
  368. package/src/capabilities/react-surface.tsx +0 -113
  369. package/src/capabilities/settings.ts +0 -25
  370. package/src/capabilities/state.ts +0 -31
  371. package/src/components/MarkdownContainer.stories.tsx +0 -103
  372. package/src/components/MarkdownContainer.tsx +0 -254
  373. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -81
  374. package/src/components/MarkdownPreview/MarkdownPreview.tsx +0 -73
  375. package/src/components/MarkdownPreview/index.ts +0 -9
  376. package/src/components/MarkdownSettings/MarkdownSettings.tsx +0 -105
  377. package/src/components/MarkdownSettings/index.ts +0 -5
  378. package/src/components/Suggestions.stories.tsx +0 -221
  379. package/src/components/Toolbar.stories.tsx +0 -113
  380. package/src/events.ts +0 -11
  381. package/src/extensions.tsx +0 -328
  382. package/src/types/schema.ts +0 -39
@@ -0,0 +1,122 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Input, Select, useTranslation } from '@dxos/react-ui';
8
+ import { Settings } from '@dxos/react-ui-form';
9
+ import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/ui-editor';
10
+
11
+ import { meta } from '../../meta';
12
+ import { type Markdown } from '../../types';
13
+
14
+ export type MarkdownSettingsComponentProps = {
15
+ settings: Markdown.Settings;
16
+ onSettingsChange: (fn: (current: Markdown.Settings) => Markdown.Settings) => void;
17
+ };
18
+
19
+ export const MarkdownSettings = ({ settings, onSettingsChange }: MarkdownSettingsComponentProps) => {
20
+ const { t } = useTranslation(meta.id);
21
+
22
+ // TODO(wittjosiah): Add skill test confirmation for entering vim mode.
23
+ return (
24
+ <Settings.Root>
25
+ <Settings.Section title={t('settings title', { ns: meta.id })}>
26
+ <Settings.Group>
27
+ <Settings.ItemInput title={t('default view mode label')}>
28
+ <Select.Root
29
+ value={settings.defaultViewMode}
30
+ onValueChange={(value) => {
31
+ onSettingsChange((s) => ({ ...s, defaultViewMode: value as EditorViewMode }));
32
+ }}
33
+ >
34
+ <Select.TriggerButton />
35
+ <Select.Portal>
36
+ <Select.Content>
37
+ <Select.Viewport>
38
+ {EditorViewModes.map((mode) => (
39
+ <Select.Option key={mode} value={mode}>
40
+ {t(`${mode} mode label`, { ns: '@dxos/react-ui-editor' })}
41
+ </Select.Option>
42
+ ))}
43
+ </Select.Viewport>
44
+ <Select.Arrow />
45
+ </Select.Content>
46
+ </Select.Portal>
47
+ </Select.Root>
48
+ </Settings.ItemInput>
49
+
50
+ <Settings.ItemInput title={t('editor input mode label')}>
51
+ <Select.Root
52
+ value={settings.editorInputMode ?? 'default'}
53
+ onValueChange={(value) => {
54
+ onSettingsChange((s) => ({ ...s, editorInputMode: value as EditorInputMode }));
55
+ }}
56
+ >
57
+ <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
58
+ <Select.Portal>
59
+ <Select.Content>
60
+ <Select.Viewport>
61
+ {EditorInputModes.map((mode) => (
62
+ <Select.Option key={mode} value={mode}>
63
+ {t(`settings editor input mode ${mode} label`)}
64
+ </Select.Option>
65
+ ))}
66
+ </Select.Viewport>
67
+ <Select.Arrow />
68
+ </Select.Content>
69
+ </Select.Portal>
70
+ </Select.Root>
71
+ </Settings.ItemInput>
72
+
73
+ <Settings.ItemInput title={t('settings toolbar label')}>
74
+ <Input.Switch
75
+ checked={settings.toolbar}
76
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, toolbar: !!checked }))}
77
+ />
78
+ </Settings.ItemInput>
79
+
80
+ <Settings.ItemInput title={t('settings numbered headings label')}>
81
+ <Input.Switch
82
+ checked={settings.numberedHeadings}
83
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, numberedHeadings: !!checked }))}
84
+ />
85
+ </Settings.ItemInput>
86
+
87
+ <Settings.ItemInput title={t('settings folding label')}>
88
+ <Input.Switch
89
+ checked={settings.folding}
90
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, folding: !!checked }))}
91
+ />
92
+ </Settings.ItemInput>
93
+
94
+ <Settings.ItemInput title={t('settings experimental label')}>
95
+ <Input.Switch
96
+ checked={settings.experimental}
97
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, experimental: !!checked }))}
98
+ />
99
+ </Settings.ItemInput>
100
+
101
+ <Settings.ItemInput title={t('settings debug label')}>
102
+ <Input.Switch
103
+ checked={settings.debug}
104
+ onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, debug: !!checked }))}
105
+ />
106
+ </Settings.ItemInput>
107
+
108
+ {settings.debug && (
109
+ <Settings.ItemInput title={t('settings debug textarea label', { ns: meta.id })}>
110
+ <Input.TextArea
111
+ rows={5}
112
+ value={settings.typewriter}
113
+ onChange={({ target: { value } }) => onSettingsChange((s) => ({ ...s, typewriter: value }))}
114
+ placeholder={t('settings debug placeholder')}
115
+ />
116
+ </Settings.ItemInput>
117
+ )}
118
+ </Settings.Group>
119
+ </Settings.Section>
120
+ </Settings.Root>
121
+ );
122
+ };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { MarkdownSettings } from './MarkdownSettings';
6
+
7
+ export default MarkdownSettings;
@@ -0,0 +1,11 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type ComponentType, lazy } from 'react';
6
+
7
+ export type { MarkdownContainerProps } from './MarkdownContainer';
8
+
9
+ export const MarkdownCard: ComponentType<any> = lazy(() => import('./MarkdownCard'));
10
+ export const MarkdownContainer: ComponentType<any> = lazy(() => import('./MarkdownContainer'));
11
+ export const MarkdownSettings: ComponentType<any> = lazy(() => import('./MarkdownSettings'));
@@ -2,4 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ export * from './useEditorMenuOptions';
6
+ export * from './useExtensions';
7
+ export * from './useLinkQuery';
5
8
  export * from './useSelectCurrentThread';
@@ -0,0 +1,68 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+ import { useCallback, useMemo, useRef } from 'react';
7
+
8
+ import { toLocalizedString, useTranslation } from '@dxos/react-ui';
9
+ import {
10
+ type EditorMenuGroup,
11
+ type UseEditorMenuProps,
12
+ filterMenuGroups,
13
+ formattingCommands,
14
+ linkSlashCommands,
15
+ } from '@dxos/react-ui-editor';
16
+ import { Domino } from '@dxos/ui';
17
+
18
+ import { meta } from '../meta';
19
+
20
+ export type UseEditorMenuOptionsProps = {
21
+ editorView?: EditorView;
22
+ slashCommandGroups?: EditorMenuGroup[];
23
+ onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;
24
+ };
25
+
26
+ export const useEditorMenuOptions = ({
27
+ editorView,
28
+ slashCommandGroups,
29
+ onLinkQuery,
30
+ }: UseEditorMenuOptionsProps): UseEditorMenuProps => {
31
+ const { t } = useTranslation(meta.id);
32
+
33
+ const getMenu = useCallback<NonNullable<UseEditorMenuProps['getMenu']>>(
34
+ ({ text, trigger }) => {
35
+ switch (trigger) {
36
+ case '@': {
37
+ return onLinkQuery?.(text) ?? [];
38
+ }
39
+
40
+ case '/':
41
+ default: {
42
+ return filterMenuGroups([formattingCommands, linkSlashCommands, ...(slashCommandGroups ?? [])], (item) =>
43
+ text ? toLocalizedString(item.label, t).toLowerCase().includes(text.toLowerCase()) : true,
44
+ );
45
+ }
46
+ }
47
+ },
48
+ [slashCommandGroups, onLinkQuery],
49
+ );
50
+
51
+ const viewRef = useRef(editorView);
52
+ return useMemo<UseEditorMenuProps>(() => {
53
+ const trigger = onLinkQuery ? ['/', '@'] : ['/'];
54
+ const placeholder = {
55
+ delay: 3_000,
56
+ content: () => {
57
+ const pressEl = Domino.of('span').text('Press');
58
+ const triggerEls = trigger.map((text) =>
59
+ Domino.of('span').classNames('mx-1 px-1.5 pt-[1px] pb-[2px] border border-separator rounded-xs').text(text),
60
+ );
61
+ const forCommandsEl = Domino.of('span').text('for commands.');
62
+ return Domino.of('div').children(pressEl, ...triggerEls, forCommandsEl).root;
63
+ },
64
+ };
65
+
66
+ return { viewRef, getMenu, trigger, placeholder };
67
+ }, [getMenu, onLinkQuery]);
68
+ };
@@ -0,0 +1,237 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ViewUpdate } from '@codemirror/view';
6
+ import { useMemo } from 'react';
7
+ import { debounceAndThrottle } from '@dxos/async';
8
+ import { Obj } from '@dxos/echo';
9
+ import { createDocAccessor } from '@dxos/echo-db';
10
+ import { invariant } from '@dxos/invariant';
11
+ import { getSpace, useObject } from '@dxos/react-client/echo';
12
+ import { useIdentity } from '@dxos/react-client/halo';
13
+ import { type SelectionManager } from '@dxos/react-ui-attention';
14
+ import { Text } from '@dxos/schema';
15
+ import { Domino } from '@dxos/ui';
16
+ import {
17
+ Cursor,
18
+ type EditorStateStore,
19
+ EditorView,
20
+ type EditorViewMode,
21
+ type Extension,
22
+ InputModeExtensions,
23
+ type PreviewOptions,
24
+ type RenderCallback,
25
+ createDataExtensions,
26
+ decorateMarkdown,
27
+ documentId,
28
+ folding,
29
+ formattingKeymap,
30
+ linkTooltip,
31
+ listener,
32
+ preview,
33
+ replacer,
34
+ selectionState,
35
+ typewriter,
36
+ } from '@dxos/ui-editor';
37
+ import { isTruthy, safeUrl } from '@dxos/util';
38
+
39
+ import { Markdown } from '../types';
40
+ import { setFallbackName } from '../util';
41
+
42
+ export type DocumentType = Markdown.Document | Text.Text | { id: string; text: string };
43
+
44
+ export type ExtensionsOptions = {
45
+ id: string;
46
+ object?: DocumentType;
47
+ settings?: Markdown.Settings;
48
+ selectionManager?: SelectionManager;
49
+ viewMode?: EditorViewMode;
50
+ editorStateStore?: EditorStateStore;
51
+ previewOptions?: PreviewOptions;
52
+ /** Callback when an internal link is clicked. */
53
+ onSelectObject?: (objectId: string) => void;
54
+ };
55
+
56
+ // TODO(burdon): Merge with createBaseExtensions below.
57
+ export const useExtensions = ({
58
+ id,
59
+ object,
60
+ settings,
61
+ selectionManager,
62
+ viewMode,
63
+ editorStateStore,
64
+ previewOptions,
65
+ onSelectObject,
66
+ }: ExtensionsOptions): Extension[] => {
67
+ const identity = useIdentity();
68
+ const space = getSpace(object);
69
+
70
+ // Get the content reference from Document objects.
71
+ const contentRef = Obj.instanceOf(Markdown.Document, object) ? (object as Markdown.Document).content : undefined;
72
+ // Use useObject to trigger re-render when the reference loads (returns snapshot for reactivity).
73
+ useObject(contentRef);
74
+ // Get the actual live object target via .target (needed for createDocAccessor).
75
+ const target = contentRef?.target ?? (Obj.instanceOf(Text.Text, object) ? object : undefined);
76
+
77
+ // TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.
78
+ // TODO(burdon): Unsubscribe.
79
+ // const query = space?.db.query(Filter.type(DocumentType));
80
+ // query?.subscribe();
81
+
82
+ const baseExtensions = useMemo(
83
+ () =>
84
+ createBaseExtensions({
85
+ id,
86
+ object,
87
+ settings,
88
+ selectionManager,
89
+ viewMode,
90
+ previewOptions,
91
+ onSelectObject,
92
+ }),
93
+ [
94
+ id,
95
+ object,
96
+ viewMode,
97
+ previewOptions,
98
+ onSelectObject,
99
+ settings,
100
+ settings?.debug,
101
+ settings?.editorInputMode,
102
+ settings?.folding,
103
+ settings?.numberedHeadings,
104
+ settings?.typewriter,
105
+ selectionManager,
106
+ ],
107
+ );
108
+
109
+ return useMemo<Extension[]>(
110
+ () =>
111
+ [
112
+ // TODO(burdon): Pass this in?
113
+ // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
114
+ target &&
115
+ createDataExtensions({
116
+ id,
117
+ text: createDocAccessor(target, ['content']),
118
+ messenger: space,
119
+ identity,
120
+ }),
121
+
122
+ // TODO(burdon): Reconcile with effect in parent.
123
+ Obj.instanceOf(Markdown.Document, object) &&
124
+ listener({
125
+ onChange: ({ text }) => {
126
+ setFallbackName(object as Markdown.Document, text);
127
+ },
128
+ }),
129
+
130
+ baseExtensions,
131
+ selectionState(editorStateStore),
132
+ ].filter(isTruthy),
133
+ [identity, space, id, object, target, baseExtensions],
134
+ );
135
+ };
136
+
137
+ /**
138
+ * Create extension instances for editor.
139
+ */
140
+ const createBaseExtensions = ({
141
+ id,
142
+ object,
143
+ onSelectObject,
144
+ settings,
145
+ selectionManager,
146
+ viewMode,
147
+ previewOptions,
148
+ }: ExtensionsOptions): Extension[] => {
149
+ const extensions: Extension[] = [
150
+ selectionManager && selectionChange(selectionManager),
151
+ settings?.editorInputMode && InputModeExtensions[settings.editorInputMode],
152
+ settings?.folding && folding(),
153
+ ].filter(isTruthy);
154
+
155
+ //
156
+ // Markdown
157
+ //
158
+ if (viewMode !== 'source') {
159
+ extensions.push(
160
+ ...[
161
+ formattingKeymap(),
162
+ decorateMarkdown({
163
+ selectionChangeDelay: 100,
164
+ numberedHeadings: settings?.numberedHeadings ? { from: 2 } : undefined,
165
+ // TODO(wittjosiah): For internal links render the label of the object.
166
+ renderLinkButton: onSelectObject && createRenderLink(onSelectObject),
167
+ }),
168
+ linkTooltip(renderLinkTooltip),
169
+ preview(previewOptions),
170
+ replacer(),
171
+ ],
172
+ );
173
+ }
174
+
175
+ if (settings?.debug) {
176
+ const items = settings.typewriter?.split(/[,\n]/) ?? '';
177
+ if (items) {
178
+ extensions.push(typewriter({ items }));
179
+ }
180
+ }
181
+
182
+ return extensions;
183
+ };
184
+
185
+ const selectionChange = (selectionManager: SelectionManager) => {
186
+ const debouncedHandler = debounceAndThrottle((update: ViewUpdate) => {
187
+ const id = update.state.facet(documentId);
188
+ const cursorConverter = update.state.facet(Cursor.converter);
189
+ const selection = update.state.selection;
190
+ const ranges = selection.ranges
191
+ .map((range) => ({
192
+ from: cursorConverter.toCursor(range.from),
193
+ to: cursorConverter.toCursor(range.to),
194
+ }))
195
+ .filter(({ from, to }) => to > from);
196
+
197
+ selectionManager.updateMultiRange(id, ranges);
198
+ }, 100);
199
+
200
+ return EditorView.updateListener.of((update: ViewUpdate) => {
201
+ if (update.selectionSet) {
202
+ debouncedHandler(update);
203
+ }
204
+ });
205
+ };
206
+
207
+ const createRenderLink =
208
+ (onSelectObject: (id: string) => void): RenderCallback<{ url: string }> =>
209
+ (el, { url }) => {
210
+ // TODO(burdon): Formalize/document internal link format.
211
+ const isInternal = url.startsWith('/') || url.startsWith(window.location.origin);
212
+ const anchor = Domino.of('a')
213
+ .classNames('dx-link dx-icon-inline ms-1')
214
+ .children(Domino.svg(isInternal ? 'ph--arrow-square-down--regular' : 'ph--arrow-square-out--regular'));
215
+
216
+ if (isInternal) {
217
+ anchor.on('click', () => {
218
+ const qualifiedId = url.split('/').at(-1);
219
+ invariant(qualifiedId, 'Invalid link format.');
220
+ onSelectObject(qualifiedId);
221
+ });
222
+ } else {
223
+ anchor.attributes({ href: url, rel: 'noreferrer', target: '_blank' });
224
+ }
225
+
226
+ el.appendChild(anchor.root);
227
+ };
228
+
229
+ const renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {
230
+ el.appendChild(
231
+ Domino.of('a')
232
+ .attributes({ href: url, target: '_blank', rel: 'noreferrer' })
233
+ .classNames('dx-link flex items-center gap-2')
234
+ .text(safeUrl(url)?.origin ?? url)
235
+ .children(Domino.svg('ph--arrow-square-out--regular')).root,
236
+ );
237
+ };
@@ -0,0 +1,83 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Option from 'effect/Option';
6
+ import { useCallback, useMemo } from 'react';
7
+
8
+ import { usePluginManager } from '@dxos/app-framework/ui';
9
+ import { AppCapabilities } from '@dxos/app-toolkit';
10
+ import { type Database, Filter, Obj, Query, Type } from '@dxos/echo';
11
+ import { EntityKind, SystemTypeAnnotation, getTypeAnnotation } from '@dxos/echo/internal';
12
+ import { toLocalizedString, useTranslation } from '@dxos/react-ui';
13
+ import { type EditorMenuGroup, type EditorMenuItem } from '@dxos/react-ui-editor';
14
+ import { insertAtCursor, insertAtLineStart } from '@dxos/ui-editor';
15
+
16
+ export const useLinkQuery = (db: Database.Database | undefined) => {
17
+ const { t } = useTranslation();
18
+
19
+ const manager = usePluginManager();
20
+ const resolve = useCallback(
21
+ (typename: string) =>
22
+ manager.capabilities.getAll(AppCapabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {},
23
+ [manager],
24
+ );
25
+
26
+ const filter = useMemo(
27
+ () =>
28
+ Filter.or(
29
+ ...(db?.schemaRegistry.query({ location: ['database', 'runtime'] }).runSync() ?? [])
30
+ .filter((schema) => getTypeAnnotation(schema)?.kind !== EntityKind.Relation)
31
+ .filter((schema) => !SystemTypeAnnotation.get(schema).pipe(Option.getOrElse(() => false)))
32
+ .map((schema) => Filter.typename(Type.getTypename(schema))),
33
+ ),
34
+ [db],
35
+ );
36
+
37
+ const handleLinkQuery = useCallback(
38
+ async (query?: string): Promise<EditorMenuGroup[]> => {
39
+ const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : (query?.toLowerCase() ?? '');
40
+ const results = await db?.query(Query.select(filter)).run();
41
+
42
+ // TODO(wittjosiah): Use `Obj.Unknown` type.
43
+ const getLabel = (object: any) => {
44
+ const label = Obj.getLabel(object);
45
+ if (label) {
46
+ return label;
47
+ }
48
+
49
+ // TODO(wittjosiah): Remove metadata labels.
50
+ const type = Obj.getTypename(object)!;
51
+ const metadata = resolve(type);
52
+ return metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New object' }];
53
+ };
54
+
55
+ const items =
56
+ results
57
+ ?.filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name))
58
+ // TODO(wittjosiah): Remove `any` type.
59
+ .map((object: any): EditorMenuItem => {
60
+ const metadata = resolve(Obj.getTypename(object)!);
61
+ const label = toLocalizedString(getLabel(object), t);
62
+ return {
63
+ id: object.id,
64
+ label,
65
+ icon: metadata.icon,
66
+ onSelect: ({ view, head }) => {
67
+ const link = `[${label}](${Obj.getDXN(object)})`;
68
+ if (query?.startsWith('@')) {
69
+ insertAtLineStart(view, head, `!${link}\n`);
70
+ } else {
71
+ insertAtCursor(view, head, `${link} `);
72
+ }
73
+ },
74
+ };
75
+ }) ?? [];
76
+
77
+ return [{ id: 'echo', items }];
78
+ },
79
+ [db, filter, resolve],
80
+ );
81
+
82
+ return handleLinkQuery;
83
+ };
@@ -3,54 +3,59 @@
3
3
  //
4
4
 
5
5
  import { EditorView } from '@codemirror/view';
6
- import { Schema } from 'effect';
6
+ import * as Effect from 'effect/Effect';
7
7
  import { useMemo } from 'react';
8
8
 
9
- import { createResolver, LayoutAction, useIntentResolver } from '@dxos/app-framework';
9
+ import { useOperationResolver } from '@dxos/app-framework/ui';
10
+ import { LayoutOperation } from '@dxos/app-toolkit';
10
11
  import { invariant } from '@dxos/invariant';
11
- import { Cursor, setSelection } from '@dxos/react-ui-editor';
12
+ import { OperationResolver } from '@dxos/operation';
13
+ import { Cursor, setSelection } from '@dxos/ui-editor';
12
14
 
13
- import { MARKDOWN_PLUGIN } from '../meta';
15
+ import { meta } from '../meta';
14
16
 
15
17
  /**
16
18
  * Handle scrolling and selection of the current thread in a markdown editor.
17
19
  */
18
- export const useSelectCurrentThread = (editorView: EditorView | undefined, documentId: string) => {
19
- const scrollIntoViewResolver = useMemo(
20
+ export const useSelectCurrentThread = (editorView: EditorView | null, documentId: string, attendableId: string) => {
21
+ const scrollIntoViewHandler = useMemo(
20
22
  () =>
21
- createResolver({
22
- intent: LayoutAction.UpdateLayout,
23
+ OperationResolver.make({
24
+ operation: LayoutOperation.ScrollIntoView,
23
25
  position: 'hoist',
24
- filter: (data): data is { part: 'current'; subject: string; options: { cursor: string } } => {
25
- if (!Schema.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
26
- return false;
27
- }
28
-
29
- return !!editorView && data.subject === documentId && !!data.options?.cursor;
30
- },
31
- resolve: ({ options: { cursor } }) => {
32
- invariant(editorView, 'Editor view is not defined.');
33
- const range = Cursor.getRangeFromCursor(editorView.state, cursor!);
34
- if (range) {
35
- const selection = editorView.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;
36
- const effects = [
37
- // NOTE: This does not use the DOM scrollIntoView function.
38
- EditorView.scrollIntoView(range.from, { y: 'start', yMargin: 96 }),
39
- ];
40
- if (selection) {
41
- // Update the editor selection to get bi-directional highlighting.
42
- effects.push(setSelection.of({ current: documentId }));
26
+ filter: (input) => !!editorView && !!input.cursor && input.subject === attendableId,
27
+ handler: (input) =>
28
+ Effect.sync(() => {
29
+ invariant(editorView, 'Editor view is not defined.');
30
+ const cursor = input.cursor;
31
+ if (!cursor) {
32
+ return;
43
33
  }
34
+ const range = Cursor.getRangeFromCursor(editorView.state, cursor);
35
+ if (range) {
36
+ const selection =
37
+ editorView.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;
38
+ const effects = [
39
+ // NOTE: This does not use the DOM scrollIntoView function.
40
+ EditorView.scrollIntoView(range.from, {
41
+ y: 'start',
42
+ yMargin: 96,
43
+ }),
44
+ ];
45
+ if (selection) {
46
+ // Update the editor selection to get bi-directional highlighting.
47
+ effects.push(setSelection.of({ current: documentId }));
48
+ }
44
49
 
45
- editorView.dispatch({
46
- effects,
47
- selection: selection ? { anchor: range.from } : undefined,
48
- });
49
- }
50
- },
50
+ editorView.dispatch({
51
+ effects,
52
+ selection: selection ? { anchor: range.from } : undefined,
53
+ });
54
+ }
55
+ }),
51
56
  }),
52
- [documentId, editorView],
57
+ [documentId, attendableId, editorView],
53
58
  );
54
59
 
55
- useIntentResolver(MARKDOWN_PLUGIN, scrollIntoViewResolver);
60
+ useOperationResolver(meta.id, scrollIntoViewHandler);
56
61
  };
package/src/index.ts CHANGED
@@ -2,8 +2,12 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { MarkdownCapabilities } from './capabilities';
6
- export { MarkdownEvents } from './events';
7
- export * from './MarkdownPlugin';
5
+ export { MarkdownCapabilities, MarkdownEvents } from './types';
6
+
8
7
  export * from './meta';
8
+ export * from './types';
9
9
  export * from './util';
10
+
11
+ export * from './MarkdownPlugin';
12
+
13
+ export { MarkdownEditor } from './components';
package/src/meta.ts CHANGED
@@ -2,19 +2,18 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type PluginMeta } from '@dxos/app-framework';
5
+ import { type Plugin } from '@dxos/app-framework';
6
+ import { trim } from '@dxos/util';
6
7
 
7
- export const MARKDOWN_PLUGIN = 'dxos.org/plugin/markdown';
8
-
9
- export const meta: PluginMeta = {
10
- id: MARKDOWN_PLUGIN,
8
+ export const meta: Plugin.Meta = {
9
+ id: 'org.dxos.plugin.markdown',
11
10
  name: 'Markdown',
12
- description: `
13
- A Markdown editor that is collaborative and fully extensible. It provides rich text editing as well as read only and markdown view.
14
- In addition to markdown capabilities, it also support threaded in-line comments which can be accessed from the right hand sidebar at any times inside the document.
15
- Your AI agent will have access to all markdown docs in your Space which means you can use them to extend the memory of your personal agent and add long term context for automated workflows.
11
+ description: trim`
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.
16
14
  `,
17
- source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
18
15
  icon: 'ph--text-aa--regular',
16
+ iconHue: 'indigo',
17
+ source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
19
18
  screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],
20
19
  };