@dxos/plugin-markdown 0.9.1-main.c7dcc2e112 → 0.9.1-staging.ee54ba693a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/lib/neutral/{MarkdownArticle-I4UMD7AA.mjs → MarkdownArticle-ZHBXH7YF.mjs} +3 -5
  2. package/dist/lib/neutral/{MarkdownArticle-I4UMD7AA.mjs.map → MarkdownArticle-ZHBXH7YF.mjs.map} +2 -2
  3. package/dist/lib/neutral/{MarkdownCard-OYO2HYZF.mjs → MarkdownCard-2HUXCGZP.mjs} +2 -2
  4. package/dist/lib/neutral/{MarkdownCard-OYO2HYZF.mjs.map → MarkdownCard-2HUXCGZP.mjs.map} +1 -1
  5. package/dist/lib/neutral/MarkdownPlugin.mjs +3 -7
  6. package/dist/lib/neutral/MarkdownPlugin.mjs.map +3 -3
  7. package/dist/lib/neutral/MarkdownPlugin.node.mjs +4 -2
  8. package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +3 -3
  9. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs +6 -17
  10. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs.map +4 -4
  11. package/dist/lib/neutral/MarkdownSettings-5VMOYMND.mjs +43 -0
  12. package/dist/lib/neutral/MarkdownSettings-5VMOYMND.mjs.map +7 -0
  13. package/dist/lib/neutral/{anchor-sort-UXN4RHFX.mjs → anchor-sort-QF7UDG2A.mjs} +4 -3
  14. package/dist/lib/neutral/anchor-sort-QF7UDG2A.mjs.map +7 -0
  15. package/dist/lib/neutral/capabilities/index.mjs +9 -13
  16. package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
  17. package/dist/lib/neutral/capabilities/node.mjs +5 -3
  18. package/dist/lib/neutral/capabilities/node.mjs.map +3 -3
  19. package/dist/lib/neutral/chunk-2V6A5NDQ.mjs +8 -0
  20. package/dist/lib/neutral/{operation-handler-2ARMPBGZ.mjs → chunk-ANHHOTCD.mjs} +3 -4
  21. package/dist/lib/neutral/{operation-handler-2ARMPBGZ.mjs.map → chunk-ANHHOTCD.mjs.map} +1 -1
  22. package/dist/lib/neutral/chunk-CNYFGIDS.mjs +32 -0
  23. package/dist/lib/neutral/chunk-CNYFGIDS.mjs.map +7 -0
  24. package/dist/lib/neutral/{chunk-LXNSKCPD.mjs → chunk-EV4ZOL4P.mjs} +12 -11
  25. package/dist/lib/neutral/chunk-EV4ZOL4P.mjs.map +7 -0
  26. package/dist/lib/neutral/{chunk-GUXWFDD4.mjs → chunk-OC3JD73N.mjs} +2 -2
  27. package/dist/lib/neutral/{chunk-GUXWFDD4.mjs.map → chunk-OC3JD73N.mjs.map} +1 -1
  28. package/dist/lib/neutral/chunk-YJF6XOXX.mjs +175 -0
  29. package/dist/lib/neutral/chunk-YJF6XOXX.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-YMBC62S7.mjs +14 -0
  31. package/dist/lib/neutral/chunk-YMBC62S7.mjs.map +7 -0
  32. package/dist/lib/neutral/{chunk-CRKAIDRD.mjs → chunk-ZJ3GWRUJ.mjs} +15 -14
  33. package/dist/lib/neutral/chunk-ZJ3GWRUJ.mjs.map +7 -0
  34. package/dist/lib/neutral/{comment-config-EGY7RPPW.mjs → comment-config-M5OGFULS.mjs} +6 -4
  35. package/dist/lib/neutral/comment-config-M5OGFULS.mjs.map +7 -0
  36. package/dist/lib/neutral/components/index.mjs +13 -52
  37. package/dist/lib/neutral/components/index.mjs.map +4 -4
  38. package/dist/lib/neutral/containers/index.mjs +5 -3
  39. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  40. package/dist/lib/neutral/{create-XW2FQNLK.mjs → create-OQUMKL5I.mjs} +2 -2
  41. package/dist/lib/neutral/{create-markdown-KLSVQCT7.mjs → create-markdown-4O5FDA77.mjs} +2 -2
  42. package/dist/lib/neutral/{create-object-3WMEQJ2C.mjs → create-object-RSEWTCMM.mjs} +2 -6
  43. package/dist/lib/neutral/create-object-RSEWTCMM.mjs.map +7 -0
  44. package/dist/lib/neutral/hooks/index.mjs +41 -15
  45. package/dist/lib/neutral/hooks/index.mjs.map +3 -3
  46. package/dist/lib/neutral/index.mjs +10 -16
  47. package/dist/lib/neutral/meta.json +1 -1
  48. package/dist/lib/neutral/meta.mjs +1 -1
  49. package/dist/lib/neutral/{open-F7KLNKVN.mjs → open-BAZIRXII.mjs} +2 -2
  50. package/dist/lib/neutral/operation-handler-SDCXGMGK.mjs +8 -0
  51. package/dist/lib/neutral/operations/index.mjs +1 -1
  52. package/dist/lib/neutral/plugin.mjs +2 -2
  53. package/dist/lib/neutral/plugin.workerd.mjs +12 -0
  54. package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
  55. package/dist/lib/neutral/{react-surface-6LX4ZQ2H.mjs → react-surface-37GL3UVG.mjs} +4 -4
  56. package/dist/lib/neutral/react-surface-37GL3UVG.mjs.map +7 -0
  57. package/dist/lib/neutral/{scroll-to-anchor-ACND3WJU.mjs → scroll-to-anchor-I6HFE5AH.mjs} +2 -2
  58. package/dist/lib/neutral/{set-view-mode-WDC7CAEC.mjs → set-view-mode-NY5OYYIM.mjs} +2 -2
  59. package/dist/lib/neutral/skill-definition-ET7BYY47.mjs +8 -0
  60. package/dist/lib/neutral/skill-definition-ET7BYY47.mjs.map +7 -0
  61. package/dist/lib/neutral/skills/index.mjs +8 -0
  62. package/dist/lib/neutral/skills/index.mjs.map +7 -0
  63. package/dist/lib/neutral/{state-ZYT3JRWT.mjs → state-3BR7L6CW.mjs} +1 -1
  64. package/dist/lib/neutral/{state-ZYT3JRWT.mjs.map → state-3BR7L6CW.mjs.map} +2 -2
  65. package/dist/lib/neutral/types/index.mjs +1 -1
  66. package/dist/lib/neutral/update-markdown-M4PTA6VS.mjs +24 -0
  67. package/dist/lib/neutral/update-markdown-M4PTA6VS.mjs.map +7 -0
  68. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  69. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -1
  70. package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/anchor-sort.d.ts +1 -2
  72. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/comment-config.d.ts +1 -2
  74. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/create-object.d.ts +1 -7
  76. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/editor-view-state.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/index.d.ts +1 -3
  79. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/node.d.ts +1 -0
  81. package/dist/types/src/capabilities/node.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  83. package/dist/types/src/capabilities/settings.d.ts +1 -2
  84. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
  86. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/state.d.ts +1 -2
  88. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  89. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +3 -4
  90. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  91. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -2
  92. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/PreviewComponent/PreviewComponent.d.ts +17 -0
  94. package/dist/types/src/components/PreviewComponent/PreviewComponent.d.ts.map +1 -0
  95. package/dist/types/src/components/PreviewComponent/index.d.ts +2 -0
  96. package/dist/types/src/components/PreviewComponent/index.d.ts.map +1 -0
  97. package/dist/types/src/components/index.d.ts +1 -2
  98. package/dist/types/src/components/index.d.ts.map +1 -1
  99. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts +2 -13
  100. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts.map +1 -1
  101. package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts +1 -1
  102. package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  103. package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -1
  104. package/dist/types/src/{components → containers}/MarkdownSettings/index.d.ts.map +1 -1
  105. package/dist/types/src/containers/index.d.ts +1 -0
  106. package/dist/types/src/containers/index.d.ts.map +1 -1
  107. package/dist/types/src/hooks/useExtensions.d.ts +3 -3
  108. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  109. package/dist/types/src/hooks/useLinkQuery.d.ts +2 -2
  110. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  111. package/dist/types/src/index.d.ts +1 -2
  112. package/dist/types/src/index.d.ts.map +1 -1
  113. package/dist/types/src/meta.d.ts +4 -0
  114. package/dist/types/src/meta.d.ts.map +1 -1
  115. package/dist/types/src/operations/update-markdown.d.ts.map +1 -1
  116. package/dist/types/src/plugin.workerd.d.ts +2 -0
  117. package/dist/types/src/plugin.workerd.d.ts.map +1 -0
  118. package/dist/types/src/skills/index.d.ts +2 -0
  119. package/dist/types/src/skills/index.d.ts.map +1 -0
  120. package/dist/types/src/skills/markdown-skill.d.ts +4 -0
  121. package/dist/types/src/skills/markdown-skill.d.ts.map +1 -0
  122. package/dist/types/src/types/Markdown.d.ts +12 -20
  123. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  124. package/dist/types/src/types/MarkdownOperation.d.ts +5 -28
  125. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -1
  126. package/dist/types/src/types/types.d.ts +2 -0
  127. package/dist/types/src/types/types.d.ts.map +1 -1
  128. package/dist/types/tsconfig.tsbuildinfo +1 -1
  129. package/dx.config.ts +1 -1
  130. package/package.json +66 -59
  131. package/src/MarkdownPlugin.node.ts +2 -1
  132. package/src/MarkdownPlugin.tsx +2 -6
  133. package/src/MarkdownPlugin.workerd.ts +5 -2
  134. package/src/capabilities/anchor-sort.ts +3 -2
  135. package/src/capabilities/comment-config.ts +6 -9
  136. package/src/capabilities/create-object.ts +1 -4
  137. package/src/capabilities/editor-view-state.ts +1 -1
  138. package/src/capabilities/index.ts +1 -3
  139. package/src/capabilities/node.ts +1 -0
  140. package/src/capabilities/react-surface.tsx +9 -3
  141. package/src/capabilities/skill-definition.ts +14 -0
  142. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +72 -30
  143. package/src/components/MarkdownEditor/MarkdownEditor.tsx +11 -37
  144. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +3 -3
  145. package/src/components/PreviewComponent/PreviewComponent.tsx +195 -0
  146. package/src/components/PreviewComponent/index.ts +5 -0
  147. package/src/components/index.ts +1 -4
  148. package/src/containers/MarkdownArticle/MarkdownArticle.tsx +3 -3
  149. package/src/containers/MarkdownCard/MarkdownCard.tsx +1 -1
  150. package/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.tsx +1 -1
  151. package/src/containers/MarkdownSettings/MarkdownSettings.tsx +54 -0
  152. package/src/containers/index.ts +1 -0
  153. package/src/hooks/useEditorMenuOptions.ts +1 -1
  154. package/src/hooks/useExtensions.tsx +32 -12
  155. package/src/hooks/useLinkQuery.ts +5 -3
  156. package/src/index.ts +1 -2
  157. package/src/operations/create.conversations.json +1 -1
  158. package/src/operations/create.test.ts +5 -12
  159. package/src/operations/update-markdown.ts +7 -27
  160. package/src/operations/update.conversations.json +1 -1
  161. package/src/operations/update.test.ts +86 -16
  162. package/src/plugin.workerd.ts +5 -0
  163. package/src/skills/index.ts +5 -0
  164. package/src/{blueprints/markdown-blueprint.ts → skills/markdown-skill.ts} +8 -7
  165. package/src/types/Markdown.ts +19 -18
  166. package/src/types/MarkdownOperation.ts +11 -5
  167. package/src/types/types.ts +2 -7
  168. package/dist/lib/neutral/MarkdownSettings-F5AWRDT3.mjs +0 -32
  169. package/dist/lib/neutral/MarkdownSettings-F5AWRDT3.mjs.map +0 -7
  170. package/dist/lib/neutral/anchor-sort-UXN4RHFX.mjs.map +0 -7
  171. package/dist/lib/neutral/app-graph-builder-6Y5NHTNR.mjs +0 -66
  172. package/dist/lib/neutral/app-graph-builder-6Y5NHTNR.mjs.map +0 -7
  173. package/dist/lib/neutral/blueprint-definition-DSPXK77L.mjs +0 -15
  174. package/dist/lib/neutral/blueprint-definition-DSPXK77L.mjs.map +0 -7
  175. package/dist/lib/neutral/blueprints/index.mjs +0 -8
  176. package/dist/lib/neutral/chunk-4ULSRZRL.mjs +0 -10
  177. package/dist/lib/neutral/chunk-4ULSRZRL.mjs.map +0 -7
  178. package/dist/lib/neutral/chunk-BL46CERY.mjs +0 -8
  179. package/dist/lib/neutral/chunk-CRKAIDRD.mjs.map +0 -7
  180. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +0 -7
  181. package/dist/lib/neutral/comment-config-EGY7RPPW.mjs.map +0 -7
  182. package/dist/lib/neutral/create-object-3WMEQJ2C.mjs.map +0 -7
  183. package/dist/lib/neutral/navigation-resolver-3WEM7SSC.mjs +0 -14
  184. package/dist/lib/neutral/navigation-resolver-3WEM7SSC.mjs.map +0 -7
  185. package/dist/lib/neutral/react-surface-6LX4ZQ2H.mjs.map +0 -7
  186. package/dist/lib/neutral/update-markdown-FGVN3LD4.mjs +0 -44
  187. package/dist/lib/neutral/update-markdown-FGVN3LD4.mjs.map +0 -7
  188. package/dist/types/src/blueprints/index.d.ts +0 -2
  189. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  190. package/dist/types/src/blueprints/markdown-blueprint.d.ts +0 -4
  191. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +0 -1
  192. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -6
  193. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  194. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
  195. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  196. package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -6
  197. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
  198. package/dist/types/src/paths.d.ts +0 -3
  199. package/dist/types/src/paths.d.ts.map +0 -1
  200. package/src/blueprints/index.ts +0 -5
  201. package/src/capabilities/app-graph-builder.ts +0 -61
  202. package/src/capabilities/blueprint-definition.ts +0 -19
  203. package/src/capabilities/navigation-resolver.ts +0 -19
  204. package/src/components/MarkdownSettings/MarkdownSettings.tsx +0 -35
  205. package/src/paths.ts +0 -13
  206. /package/dist/lib/neutral/{chunk-BL46CERY.mjs.map → chunk-2V6A5NDQ.mjs.map} +0 -0
  207. /package/dist/lib/neutral/{create-XW2FQNLK.mjs.map → create-OQUMKL5I.mjs.map} +0 -0
  208. /package/dist/lib/neutral/{create-markdown-KLSVQCT7.mjs.map → create-markdown-4O5FDA77.mjs.map} +0 -0
  209. /package/dist/lib/neutral/{open-F7KLNKVN.mjs.map → open-BAZIRXII.mjs.map} +0 -0
  210. /package/dist/lib/neutral/{blueprints/index.mjs.map → operation-handler-SDCXGMGK.mjs.map} +0 -0
  211. /package/dist/lib/neutral/{scroll-to-anchor-ACND3WJU.mjs.map → scroll-to-anchor-I6HFE5AH.mjs.map} +0 -0
  212. /package/dist/lib/neutral/{set-view-mode-WDC7CAEC.mjs.map → set-view-mode-NY5OYYIM.mjs.map} +0 -0
  213. /package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.d.ts +0 -0
  214. /package/dist/types/src/{components → containers}/MarkdownSettings/index.d.ts +0 -0
  215. /package/src/{components → containers}/MarkdownSettings/index.ts +0 -0
@@ -74,7 +74,7 @@ var MarkdownArticle = /* @__PURE__ */ forwardRef(({ role, subject: object, id, a
74
74
  db,
75
75
  upload
76
76
  ]);
77
- const handleLinkQuery = useLinkQuery(db);
77
+ const handleLinkQuery = useLinkQuery(db, Obj.isObject(object) ? object : void 0);
78
78
  const { invokePromise } = useOperationInvoker();
79
79
  const handleSelectObject = useCallback((targetId) => {
80
80
  if (onSelectObject) {
@@ -110,9 +110,7 @@ var MarkdownArticle = /* @__PURE__ */ forwardRef(({ role, subject: object, id, a
110
110
  }, (editorRootProps) => /* @__PURE__ */ React.createElement(Editor.Root, editorRootProps, /* @__PURE__ */ React.createElement(Panel.Root, {
111
111
  role,
112
112
  ref: forwardedRef
113
- }, settings.toolbar && /* @__PURE__ */ React.createElement(Panel.Toolbar, {
114
- classNames: "bg-toolbar-surface"
115
- }, /* @__PURE__ */ React.createElement(MarkdownEditor.Toolbar, {
113
+ }, settings.toolbar && /* @__PURE__ */ React.createElement(Panel.Toolbar, null, /* @__PURE__ */ React.createElement(MarkdownEditor.Toolbar, {
116
114
  classNames: "dx-document",
117
115
  customActions
118
116
  })), /* @__PURE__ */ React.createElement(Panel.Content, null, /* @__PURE__ */ React.createElement(MarkdownEditor.Content, {
@@ -123,4 +121,4 @@ export {
123
121
  MarkdownArticle,
124
122
  MarkdownArticle as default
125
123
  };
126
- //# sourceMappingURL=MarkdownArticle-I4UMD7AA.mjs.map
124
+ //# sourceMappingURL=MarkdownArticle-ZHBXH7YF.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/containers/MarkdownArticle/MarkdownArticle.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Extension } from '@codemirror/state';\nimport { Atom } from '@effect-atom/atom-react';\nimport React, { forwardRef, useCallback, useMemo } from 'react';\n\nimport { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { useActionRunner } from '@dxos/plugin-graph';\nimport { useObject } from '@dxos/react-client/echo';\nimport { Panel } from '@dxos/react-ui';\nimport { type ViewStateManager } from '@dxos/react-ui-attention';\nimport { Editor } from '@dxos/react-ui-editor';\nimport { Text } from '@dxos/schema';\n\nimport {\n MarkdownEditor,\n MarkdownEditorProvider,\n type MarkdownEditorContentProps,\n type MarkdownEditorProviderProps,\n} from '#components';\nimport { useLinkQuery } from '#hooks';\nimport { Markdown, MarkdownCapabilities, type MarkdownPluginState } from '#types';\n\nexport type MarkdownArticleProps = AppSurface.ObjectArticleProps<\n Markdown.Document | Text.Text,\n {\n id: string;\n settings: Markdown.Settings;\n viewState?: ViewStateManager;\n } & Pick<MarkdownPluginState, 'extensionProviders'> &\n Pick<MarkdownEditorProviderProps, 'viewMode' | 'onSelectObject' | 'onViewModeChange'> &\n Pick<MarkdownEditorContentProps, 'editorStateStore'>\n>;\n\nexport const MarkdownArticle = forwardRef<HTMLDivElement, MarkdownArticleProps>(\n (\n { role, subject: object, id, attendableId, settings, extensionProviders, onSelectObject, viewMode, ...props },\n forwardedRef,\n ) => {\n const db = Obj.isObject(object) ? Obj.getDatabase(object) : undefined;\n const [docContent] = useObject(Obj.instanceOf(Markdown.Document, object) ? object.content : undefined, 'content');\n const [textContent] = useObject(Obj.instanceOf(Text.Text, object) ? object : undefined, 'content');\n const initialValue = docContent ?? textContent;\n\n // Extensions from other plugins.\n const otherExtensionProviders = useCapabilities(MarkdownCapabilities.ExtensionProvider);\n const extensions = useMemo<Extension[]>(() => {\n if (!Obj.instanceOf(Markdown.Document, object) && !Obj.instanceOf(Text.Text, object)) {\n return [];\n }\n\n const document = Obj.instanceOf(Markdown.Document, object) ? object : undefined;\n return [...(otherExtensionProviders ?? []), ...(extensionProviders ?? [])]\n .flat()\n .reduce((acc: Extension[], provider) => {\n const extension = typeof provider === 'function' ? provider({ document, viewMode }) : provider;\n if (extension) {\n acc.push(extension);\n }\n\n return acc;\n }, []);\n }, [extensionProviders, otherExtensionProviders, object, viewMode]);\n\n // Toolbar actions from app graph.\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n const customActions = useMemo(() => {\n return Atom.make((get) => {\n const actions = get(graph.actions(attendableId ?? id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n const edges = nodes.map((node) => ({ source: 'root', target: node.id, relation: 'child' }));\n return { nodes, edges };\n });\n }, [graph]);\n\n // File upload.\n const [upload] = useCapabilities(AppCapabilities.FileUploader);\n const handleFileUpload = useMemo(() => {\n if (!db || !upload) {\n return undefined;\n }\n\n return async (file: File) => upload(db, file);\n }, [db, upload]);\n\n // Query for @ refs.\n const handleLinkQuery = useLinkQuery(db);\n\n // Open linked objects.\n const { invokePromise } = useOperationInvoker();\n const handleSelectObject = useCallback(\n (targetId: string) => {\n if (onSelectObject) {\n onSelectObject(targetId);\n } else {\n void invokePromise?.(LayoutOperation.Open, {\n subject: [targetId],\n pivotId: attendableId,\n // TODO(wittjosiah): This should probably pre-validate.\n navigation: 'immediate',\n });\n }\n },\n [onSelectObject, invokePromise, attendableId],\n );\n\n return (\n <MarkdownEditorProvider\n id={id}\n attendableId={attendableId}\n object={object}\n compact={role !== AppSurface.Article.role}\n extensions={extensions}\n settings={settings}\n viewMode={viewMode}\n onAction={runAction}\n onFileUpload={handleFileUpload}\n onLinkQuery={handleLinkQuery}\n onSelectObject={handleSelectObject}\n {...props}\n >\n {(editorRootProps) => (\n <Editor.Root {...editorRootProps}>\n <Panel.Root role={role} ref={forwardedRef}>\n {settings.toolbar && (\n <Panel.Toolbar classNames='bg-toolbar-surface'>\n <MarkdownEditor.Toolbar classNames='dx-document' customActions={customActions} />\n </Panel.Toolbar>\n )}\n <Panel.Content>\n <MarkdownEditor.Content initialValue={initialValue} />\n <MarkdownEditor.Blocks />\n </Panel.Content>\n </Panel.Root>\n </Editor.Root>\n )}\n </MarkdownEditorProvider>\n );\n },\n);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Extension } from '@codemirror/state';\nimport { Atom } from '@effect-atom/atom-react';\nimport React, { forwardRef, useCallback, useMemo } from 'react';\n\nimport { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { useActionRunner } from '@dxos/plugin-graph';\nimport { useObject } from '@dxos/react-client/echo';\nimport { Panel } from '@dxos/react-ui';\nimport { type ViewStateManager } from '@dxos/react-ui-attention';\nimport { Editor } from '@dxos/react-ui-editor';\nimport { Text } from '@dxos/schema';\n\nimport {\n MarkdownEditor,\n type MarkdownEditorContentProps,\n MarkdownEditorProvider,\n type MarkdownEditorProviderProps,\n} from '#components';\nimport { useLinkQuery } from '#hooks';\nimport { Markdown, MarkdownCapabilities, type MarkdownPluginState } from '#types';\n\nexport type MarkdownArticleProps = AppSurface.ObjectArticleProps<\n Markdown.Document | Text.Text,\n {\n id: string;\n settings: Markdown.Settings;\n viewState?: ViewStateManager;\n } & Pick<MarkdownPluginState, 'extensionProviders'> &\n Pick<MarkdownEditorProviderProps, 'viewMode' | 'onSelectObject' | 'onViewModeChange'> &\n Pick<MarkdownEditorContentProps, 'editorStateStore'>\n>;\n\nexport const MarkdownArticle = forwardRef<HTMLDivElement, MarkdownArticleProps>(\n (\n { role, subject: object, id, attendableId, settings, extensionProviders, onSelectObject, viewMode, ...props },\n forwardedRef,\n ) => {\n const db = Obj.isObject(object) ? Obj.getDatabase(object) : undefined;\n const [docContent] = useObject(Obj.instanceOf(Markdown.Document, object) ? object.content : undefined, 'content');\n const [textContent] = useObject(Obj.instanceOf(Text.Text, object) ? object : undefined, 'content');\n const initialValue = docContent ?? textContent;\n\n // Extensions from other plugins.\n const otherExtensionProviders = useCapabilities(MarkdownCapabilities.ExtensionProvider);\n const extensions = useMemo<Extension[]>(() => {\n if (!Obj.instanceOf(Markdown.Document, object) && !Obj.instanceOf(Text.Text, object)) {\n return [];\n }\n\n const document = Obj.instanceOf(Markdown.Document, object) ? object : undefined;\n return [...(otherExtensionProviders ?? []), ...(extensionProviders ?? [])]\n .flat()\n .reduce((acc: Extension[], provider) => {\n const extension = typeof provider === 'function' ? provider({ document, viewMode }) : provider;\n if (extension) {\n acc.push(extension);\n }\n\n return acc;\n }, []);\n }, [extensionProviders, otherExtensionProviders, object, viewMode]);\n\n // Toolbar actions from app graph.\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n const customActions = useMemo(() => {\n return Atom.make((get) => {\n const actions = get(graph.actions(attendableId ?? id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n const edges = nodes.map((node) => ({ source: 'root', target: node.id, relation: 'child' }));\n return { nodes, edges };\n });\n }, [graph]);\n\n // File upload.\n const [upload] = useCapabilities(AppCapabilities.FileUploader);\n const handleFileUpload = useMemo(() => {\n if (!db || !upload) {\n return undefined;\n }\n\n return async (file: File) => upload(db, file);\n }, [db, upload]);\n\n // Query for @ refs.\n const handleLinkQuery = useLinkQuery(db, Obj.isObject(object) ? object : undefined);\n\n // Open linked objects.\n const { invokePromise } = useOperationInvoker();\n const handleSelectObject = useCallback(\n (targetId: string) => {\n if (onSelectObject) {\n onSelectObject(targetId);\n } else {\n void invokePromise?.(LayoutOperation.Open, {\n subject: [targetId],\n pivotId: attendableId,\n // TODO(wittjosiah): This should probably pre-validate.\n navigation: 'immediate',\n });\n }\n },\n [onSelectObject, invokePromise, attendableId],\n );\n\n return (\n <MarkdownEditorProvider\n id={id}\n attendableId={attendableId}\n object={object}\n compact={role !== AppSurface.Article.role}\n extensions={extensions}\n settings={settings}\n viewMode={viewMode}\n onAction={runAction}\n onFileUpload={handleFileUpload}\n onLinkQuery={handleLinkQuery}\n onSelectObject={handleSelectObject}\n {...props}\n >\n {(editorRootProps) => (\n <Editor.Root {...editorRootProps}>\n <Panel.Root role={role} ref={forwardedRef}>\n {settings.toolbar && (\n <Panel.Toolbar>\n <MarkdownEditor.Toolbar classNames='dx-document' customActions={customActions} />\n </Panel.Toolbar>\n )}\n <Panel.Content>\n <MarkdownEditor.Content initialValue={initialValue} />\n <MarkdownEditor.Blocks />\n </Panel.Content>\n </Panel.Root>\n </Editor.Root>\n )}\n </MarkdownEditorProvider>\n );\n },\n);\n"],
5
+ "mappings": "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",
6
6
  "names": ["Atom", "React", "forwardRef", "useCallback", "useMemo", "useCapabilities", "useOperationInvoker", "AppCapabilities", "LayoutOperation", "AppSurface", "useAppGraph", "Obj", "useActionRunner", "useObject", "Panel", "Editor", "Text", "MarkdownEditor", "MarkdownEditorProvider", "useLinkQuery", "Markdown", "MarkdownCapabilities", "MarkdownArticle", "role", "subject", "object", "id", "attendableId", "settings", "extensionProviders", "onSelectObject", "viewMode", "props", "forwardedRef", "db", "isObject", "getDatabase", "undefined", "docContent", "instanceOf", "Document", "content", "textContent", "initialValue", "otherExtensionProviders", "ExtensionProvider", "extensions", "document", "flat", "reduce", "acc", "provider", "extension", "push", "graph", "runAction", "customActions", "make", "get", "actions", "nodes", "filter", "action", "properties", "disposition", "edges", "map", "node", "source", "target", "relation", "upload", "FileUploader", "handleFileUpload", "file", "handleLinkQuery", "invokePromise", "handleSelectObject", "targetId", "Open", "pivotId", "navigation", "compact", "Article", "onAction", "onFileUpload", "onLinkQuery", "editorRootProps", "Root", "ref", "toolbar", "Toolbar", "classNames", "Content", "Blocks"]
7
7
  }
@@ -63,7 +63,7 @@ var MarkdownCard = ({ subject }) => {
63
63
  ], []);
64
64
  const info = getInfo(subject);
65
65
  return /* @__PURE__ */ React.createElement(Card.Body, null, snippet2 && /* @__PURE__ */ React.createElement(Card.Section, {
66
- className: "relative"
66
+ className: "aspect-square relative"
67
67
  }, /* @__PURE__ */ React.createElement(Card.Row, {
68
68
  fullWidth: true
69
69
  }, /* @__PURE__ */ React.createElement(MarkdownEditorProvider, {
@@ -105,4 +105,4 @@ var getInfo = (subject) => {
105
105
  export {
106
106
  MarkdownCard as default
107
107
  };
108
- //# sourceMappingURL=MarkdownCard-OYO2HYZF.mjs.map
108
+ //# sourceMappingURL=MarkdownCard-2HUXCGZP.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/containers/MarkdownCard/MarkdownCard.tsx", "../../../src/containers/MarkdownCard/snippet.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { Card, useTranslation } from '@dxos/react-ui';\nimport { Editor } from '@dxos/react-ui-editor';\nimport { Text } from '@dxos/schema';\nimport { mx } from '@dxos/ui-theme';\n\nimport { MarkdownEditor, MarkdownEditorProvider } from '#components';\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nimport { getContentSnippet } from '../../util';\nimport { snippet as snippetExtension } from './snippet';\n\nexport type MarkdownCardProps = { subject: Markdown.Document | Text.Text };\n\nexport const MarkdownCard = ({ subject }: MarkdownCardProps) => {\n const { t } = useTranslation(meta.profile.key);\n // NOTE: Newline is added so that Fade does not obscure the last line.\n const snippet = useMemo(() => getSnippet(subject) + '\\n', [subject]);\n const extensions = useMemo(() => [snippetExtension({ height: 300, scale: 0.8 })], []);\n const info = getInfo(subject);\n\n return (\n <Card.Body>\n {snippet && (\n <Card.Section className='relative'>\n <Card.Row fullWidth>\n <MarkdownEditorProvider id={subject.id} viewMode='readonly' extensions={extensions}>\n {(editorRootProps) => (\n <Editor.Root {...editorRootProps}>\n <MarkdownEditor.Content initialValue={snippet} slots={{ content: { className: 'px-2!' } }} compact />\n </Editor.Root>\n )}\n </MarkdownEditorProvider>\n <Fade />\n </Card.Row>\n </Card.Section>\n )}\n <Card.Section>\n <Card.Row fullWidth>\n <Card.Text classNames='px-2 text-xs text-description'>\n {info.words} {t('words.label', { count: info.words })}\n </Card.Text>\n </Card.Row>\n </Card.Section>\n </Card.Body>\n );\n};\n\nconst Fade = () => (\n <div\n className={mx(\n 'z-10 absolute bottom-0 inset-x-0 h-6 w-full',\n 'bg-gradient-to-b from-transparent to-(--surface-bg) pointer-events-none',\n )}\n />\n);\n\nconst getSnippet = (subject: Markdown.Document | Text.Text, fallback?: string, maxLines = 16) => {\n if (Obj.instanceOf(Markdown.Document, subject)) {\n return Obj.getDescription(subject) || getContentSnippet(subject.content?.target?.content ?? fallback, maxLines);\n } else if (Obj.instanceOf(Text.Text, subject)) {\n return getContentSnippet(subject.content ?? fallback, maxLines);\n }\n};\n\nconst getInfo = (subject: Markdown.Document | Text.Text) => {\n const text = (Obj.instanceOf(Markdown.Document, subject) ? subject.content?.target?.content : subject.content) ?? '';\n return { words: text.split(' ').length };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { EditorState } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\n\nexport type SnippetOptions = {\n /** Maximum height of the editor in pixels. Overflowing content is hidden. */\n height: number;\n /** Zoom factor applied to the editor (e.g. 0.5 renders at 50%). @default 1 */\n scale?: number;\n};\n\n/**\n * CodeMirror extension for rendering a non-scrollable snippet of editor content.\n * Constrains the editor to the given height via CSS `max-height`, wraps long\n * lines (`pre-wrap`), and disables scrolling entirely.\n *\n * NOTE: Uses CSS `zoom` rather than `transform: scale` because `zoom` affects\n * layout, so line wrapping fills the full visual width of the container.\n * `transform: scale` only scales paint output, leaving empty space on the right.\n */\nexport const snippet = ({ height, scale = 1 }: SnippetOptions) => {\n return [\n EditorState.readOnly.of(true),\n EditorView.editable.of(false),\n EditorState.transactionFilter.of((tr) => {\n if (tr.selection) {\n return [];\n } // Drop any selection changes.\n return tr;\n }),\n EditorView.theme({\n // Outer editor element: clip to the caller-specified height.\n '&': {\n maxHeight: `${height}px`,\n overflow: 'hidden',\n },\n '.cm-scroller': {\n // Prevent scroll; scale up the inner clip so the final pixel height matches `height`.\n maxHeight: `${height / scale}px`,\n overflow: 'hidden !important',\n padding: '0',\n },\n '.cm-content': {\n // zoom (unlike transform: scale) affects layout, so line-wrapping fills the full visual width of the container.\n zoom: scale,\n margin: '0',\n padding: '0',\n },\n }),\n ];\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { Card, useTranslation } from '@dxos/react-ui';\nimport { Editor } from '@dxos/react-ui-editor';\nimport { Text } from '@dxos/schema';\nimport { mx } from '@dxos/ui-theme';\n\nimport { MarkdownEditor, MarkdownEditorProvider } from '#components';\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nimport { getContentSnippet } from '../../util';\nimport { snippet as snippetExtension } from './snippet';\n\nexport type MarkdownCardProps = { subject: Markdown.Document | Text.Text };\n\nexport const MarkdownCard = ({ subject }: MarkdownCardProps) => {\n const { t } = useTranslation(meta.profile.key);\n // NOTE: Newline is added so that Fade does not obscure the last line.\n const snippet = useMemo(() => getSnippet(subject) + '\\n', [subject]);\n const extensions = useMemo(() => [snippetExtension({ height: 300, scale: 0.8 })], []);\n const info = getInfo(subject);\n\n return (\n <Card.Body>\n {snippet && (\n <Card.Section className='aspect-square relative'>\n <Card.Row fullWidth>\n <MarkdownEditorProvider id={subject.id} viewMode='readonly' extensions={extensions}>\n {(editorRootProps) => (\n <Editor.Root {...editorRootProps}>\n <MarkdownEditor.Content initialValue={snippet} slots={{ content: { className: 'px-2!' } }} compact />\n </Editor.Root>\n )}\n </MarkdownEditorProvider>\n <Fade />\n </Card.Row>\n </Card.Section>\n )}\n <Card.Section>\n <Card.Row fullWidth>\n <Card.Text classNames='px-2 text-xs text-description'>\n {info.words} {t('words.label', { count: info.words })}\n </Card.Text>\n </Card.Row>\n </Card.Section>\n </Card.Body>\n );\n};\n\nconst Fade = () => (\n <div\n className={mx(\n 'z-10 absolute bottom-0 inset-x-0 h-6 w-full',\n 'bg-gradient-to-b from-transparent to-(--surface-bg) pointer-events-none',\n )}\n />\n);\n\nconst getSnippet = (subject: Markdown.Document | Text.Text, fallback?: string, maxLines = 16) => {\n if (Obj.instanceOf(Markdown.Document, subject)) {\n return Obj.getDescription(subject) || getContentSnippet(subject.content?.target?.content ?? fallback, maxLines);\n } else if (Obj.instanceOf(Text.Text, subject)) {\n return getContentSnippet(subject.content ?? fallback, maxLines);\n }\n};\n\nconst getInfo = (subject: Markdown.Document | Text.Text) => {\n const text = (Obj.instanceOf(Markdown.Document, subject) ? subject.content?.target?.content : subject.content) ?? '';\n return { words: text.split(' ').length };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { EditorState } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\n\nexport type SnippetOptions = {\n /** Maximum height of the editor in pixels. Overflowing content is hidden. */\n height: number;\n /** Zoom factor applied to the editor (e.g. 0.5 renders at 50%). @default 1 */\n scale?: number;\n};\n\n/**\n * CodeMirror extension for rendering a non-scrollable snippet of editor content.\n * Constrains the editor to the given height via CSS `max-height`, wraps long\n * lines (`pre-wrap`), and disables scrolling entirely.\n *\n * NOTE: Uses CSS `zoom` rather than `transform: scale` because `zoom` affects\n * layout, so line wrapping fills the full visual width of the container.\n * `transform: scale` only scales paint output, leaving empty space on the right.\n */\nexport const snippet = ({ height, scale = 1 }: SnippetOptions) => {\n return [\n EditorState.readOnly.of(true),\n EditorView.editable.of(false),\n EditorState.transactionFilter.of((tr) => {\n if (tr.selection) {\n return [];\n } // Drop any selection changes.\n return tr;\n }),\n EditorView.theme({\n // Outer editor element: clip to the caller-specified height.\n '&': {\n maxHeight: `${height}px`,\n overflow: 'hidden',\n },\n '.cm-scroller': {\n // Prevent scroll; scale up the inner clip so the final pixel height matches `height`.\n maxHeight: `${height / scale}px`,\n overflow: 'hidden !important',\n padding: '0',\n },\n '.cm-content': {\n // zoom (unlike transform: scale) affects layout, so line-wrapping fills the full visual width of the container.\n zoom: scale,\n margin: '0',\n padding: '0',\n },\n }),\n ];\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": ["React", "useMemo", "Obj", "Card", "useTranslation", "Editor", "Text", "mx", "MarkdownEditor", "MarkdownEditorProvider", "meta", "Markdown", "EditorState", "EditorView", "snippet", "height", "scale", "readOnly", "of", "editable", "transactionFilter", "tr", "selection", "theme", "maxHeight", "overflow", "padding", "zoom", "margin", "MarkdownCard", "subject", "t", "useTranslation", "meta", "profile", "key", "snippet", "useMemo", "getSnippet", "extensions", "snippetExtension", "height", "scale", "info", "getInfo", "Card", "Body", "Section", "className", "Row", "fullWidth", "MarkdownEditorProvider", "id", "viewMode", "editorRootProps", "Editor", "Root", "MarkdownEditor", "Content", "initialValue", "slots", "content", "compact", "Fade", "Text", "classNames", "words", "count", "div", "mx", "fallback", "maxLines", "Obj", "instanceOf", "Markdown", "Document", "getDescription", "getContentSnippet", "target", "text", "split", "length"]
7
7
  }
@@ -6,16 +6,12 @@ import { AppActivationEvents, AppPlugin } from "@dxos/app-toolkit";
6
6
  import { AttentionEvents } from "@dxos/plugin-attention";
7
7
  import { translations as editorTranslations } from "@dxos/react-ui-editor/translations";
8
8
  import { Text } from "@dxos/schema";
9
- import { AnchorSort, AppGraphBuilder, NavigationResolver, BlueprintDefinition, CommentConfig, CreateObject, MarkdownSettings, MarkdownState, OperationHandler, ReactSurface } from "#capabilities";
9
+ import { AnchorSort, CommentConfig, CreateObject, MarkdownSettings, MarkdownState, OperationHandler, ReactSurface, SkillDefinition } from "#capabilities";
10
10
  import { meta } from "#meta";
11
11
  import { translations } from "#translations";
12
12
  import { Markdown, MarkdownEvents } from "#types";
13
- var MarkdownPlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
14
- activate: AppGraphBuilder
15
- }), AppPlugin.addNavigationResolverModule({
16
- activate: NavigationResolver
17
- }), AppPlugin.addBlueprintDefinitionModule({
18
- activate: BlueprintDefinition
13
+ var MarkdownPlugin = Plugin.define(meta).pipe(AppPlugin.addSkillDefinitionModule({
14
+ activate: SkillDefinition
19
15
  }), AppPlugin.addCommentConfigModule({
20
16
  activate: CommentConfig
21
17
  }), AppPlugin.addCreateObjectModule({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/MarkdownPlugin.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvent, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { AttentionEvents } from '@dxos/plugin-attention';\nimport { translations as editorTranslations } from '@dxos/react-ui-editor/translations';\nimport { Text } from '@dxos/schema';\n\nimport {\n AnchorSort,\n AppGraphBuilder,\n NavigationResolver,\n BlueprintDefinition,\n CommentConfig,\n CreateObject,\n MarkdownSettings,\n MarkdownState,\n OperationHandler,\n ReactSurface,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { Markdown, MarkdownEvents } from '#types';\n\nexport const MarkdownPlugin = Plugin.define(meta).pipe(\n AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),\n AppPlugin.addNavigationResolverModule({ activate: NavigationResolver }),\n AppPlugin.addBlueprintDefinitionModule({ activate: BlueprintDefinition }),\n AppPlugin.addCommentConfigModule({ activate: CommentConfig }),\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),\n AppPlugin.addSurfaceModule({\n activate: ReactSurface,\n firesBeforeActivation: [MarkdownEvents.SetupExtensions],\n }),\n AppPlugin.addTranslationsModule({ translations: [...translations, ...editorTranslations] }),\n Plugin.addModule({\n activatesOn: AppActivationEvents.SetupSettings,\n activate: MarkdownSettings,\n }),\n Plugin.addModule({\n id: 'state',\n // Wait for AttentionEvents.AttentionReady so ViewStateManager is available when the module\n // resolves AttentionCapabilities.ViewState to build the editor state store.\n activatesOn: ActivationEvent.allOf(AppActivationEvents.SetupSettings, AttentionEvents.AttentionReady),\n activate: MarkdownState,\n }),\n Plugin.addModule({\n // TODO(wittjosiah): More relevant event?\n activatesOn: AppActivationEvents.AppGraphReady,\n activate: AnchorSort,\n }),\n Plugin.make,\n);\n\nexport default MarkdownPlugin;\n"],
5
- "mappings": ";;;AAIA,SAASA,iBAAiBC,cAAc;AACxC,SAASC,qBAAqBC,iBAAiB;AAC/C,SAASC,uBAAuB;AAChC,SAASC,gBAAgBC,0BAA0B;AACnD,SAASC,YAAY;AAErB,SACEC,YACAC,iBACAC,oBACAC,qBACAC,eACAC,cACAC,kBACAC,eACAC,kBACAC,oBACK;AACP,SAASC,YAAY;AACrB,SAASb,oBAAoB;AAC7B,SAASc,UAAUC,sBAAsB;AAElC,IAAMC,iBAAiBpB,OAAOqB,OAAOJ,IAAAA,EAAMK,KAChDpB,UAAUqB,kBAAkB;EAAEC,UAAUhB;AAAgB,CAAA,GACxDN,UAAUuB,4BAA4B;EAAED,UAAUf;AAAmB,CAAA,GACrEP,UAAUwB,6BAA6B;EAAEF,UAAUd;AAAoB,CAAA,GACvER,UAAUyB,uBAAuB;EAAEH,UAAUb;AAAc,CAAA,GAC3DT,UAAU0B,sBAAsB;EAAEJ,UAAUZ;AAAa,CAAA,GACzDV,UAAU2B,0BAA0B;EAAEL,UAAUT;AAAiB,CAAA,GACjEb,UAAU4B,gBAAgB;EAAEC,QAAQ;IAACb,SAASc;IAAU1B,KAAKA;;AAAM,CAAA,GACnEJ,UAAU+B,iBAAiB;EACzBT,UAAUR;EACVkB,uBAAuB;IAACf,eAAegB;;AACzC,CAAA,GACAjC,UAAUkC,sBAAsB;EAAEhC,cAAc;OAAIA;OAAiBC;;AAAoB,CAAA,GACzFL,OAAOqC,UAAU;EACfC,aAAarC,oBAAoBsC;EACjCf,UAAUX;AACZ,CAAA,GACAb,OAAOqC,UAAU;EACfG,IAAI;;;EAGJF,aAAavC,gBAAgB0C,MAAMxC,oBAAoBsC,eAAepC,gBAAgBuC,cAAc;EACpGlB,UAAUV;AACZ,CAAA,GACAd,OAAOqC,UAAU;;EAEfC,aAAarC,oBAAoB0C;EACjCnB,UAAUjB;AACZ,CAAA,GACAP,OAAO4C,IAAI;AAGb,IAAA,yBAAexB;",
6
- "names": ["ActivationEvent", "Plugin", "AppActivationEvents", "AppPlugin", "AttentionEvents", "translations", "editorTranslations", "Text", "AnchorSort", "AppGraphBuilder", "NavigationResolver", "BlueprintDefinition", "CommentConfig", "CreateObject", "MarkdownSettings", "MarkdownState", "OperationHandler", "ReactSurface", "meta", "Markdown", "MarkdownEvents", "MarkdownPlugin", "define", "pipe", "addAppGraphModule", "activate", "addNavigationResolverModule", "addBlueprintDefinitionModule", "addCommentConfigModule", "addCreateObjectModule", "addOperationHandlerModule", "addSchemaModule", "schema", "Document", "addSurfaceModule", "firesBeforeActivation", "SetupExtensions", "addTranslationsModule", "addModule", "activatesOn", "SetupSettings", "id", "allOf", "AttentionReady", "AppGraphReady", "make"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvent, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { AttentionEvents } from '@dxos/plugin-attention';\nimport { translations as editorTranslations } from '@dxos/react-ui-editor/translations';\nimport { Text } from '@dxos/schema';\n\nimport {\n AnchorSort,\n CommentConfig,\n CreateObject,\n MarkdownSettings,\n MarkdownState,\n OperationHandler,\n ReactSurface,\n SkillDefinition,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { Markdown, MarkdownEvents } from '#types';\n\nexport const MarkdownPlugin = Plugin.define(meta).pipe(\n AppPlugin.addSkillDefinitionModule({ activate: SkillDefinition }),\n AppPlugin.addCommentConfigModule({ activate: CommentConfig }),\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),\n AppPlugin.addSurfaceModule({\n activate: ReactSurface,\n firesBeforeActivation: [MarkdownEvents.SetupExtensions],\n }),\n AppPlugin.addTranslationsModule({ translations: [...translations, ...editorTranslations] }),\n Plugin.addModule({\n activatesOn: AppActivationEvents.SetupSettings,\n activate: MarkdownSettings,\n }),\n Plugin.addModule({\n id: 'state',\n // Wait for AttentionEvents.AttentionReady so ViewStateManager is available when the module\n // resolves AttentionCapabilities.ViewState to build the editor state store.\n activatesOn: ActivationEvent.allOf(AppActivationEvents.SetupSettings, AttentionEvents.AttentionReady),\n activate: MarkdownState,\n }),\n Plugin.addModule({\n // TODO(wittjosiah): More relevant event?\n activatesOn: AppActivationEvents.AppGraphReady,\n activate: AnchorSort,\n }),\n Plugin.make,\n);\n\nexport default MarkdownPlugin;\n"],
5
+ "mappings": ";;;AAIA,SAASA,iBAAiBC,cAAc;AACxC,SAASC,qBAAqBC,iBAAiB;AAC/C,SAASC,uBAAuB;AAChC,SAASC,gBAAgBC,0BAA0B;AACnD,SAASC,YAAY;AAErB,SACEC,YACAC,eACAC,cACAC,kBACAC,eACAC,kBACAC,cACAC,uBACK;AACP,SAASC,YAAY;AACrB,SAASX,oBAAoB;AAC7B,SAASY,UAAUC,sBAAsB;AAElC,IAAMC,iBAAiBlB,OAAOmB,OAAOJ,IAAAA,EAAMK,KAChDlB,UAAUmB,yBAAyB;EAAEC,UAAUR;AAAgB,CAAA,GAC/DZ,UAAUqB,uBAAuB;EAAED,UAAUd;AAAc,CAAA,GAC3DN,UAAUsB,sBAAsB;EAAEF,UAAUb;AAAa,CAAA,GACzDP,UAAUuB,0BAA0B;EAAEH,UAAUV;AAAiB,CAAA,GACjEV,UAAUwB,gBAAgB;EAAEC,QAAQ;IAACX,SAASY;IAAUtB,KAAKA;;AAAM,CAAA,GACnEJ,UAAU2B,iBAAiB;EACzBP,UAAUT;EACViB,uBAAuB;IAACb,eAAec;;AACzC,CAAA,GACA7B,UAAU8B,sBAAsB;EAAE5B,cAAc;OAAIA;OAAiBC;;AAAoB,CAAA,GACzFL,OAAOiC,UAAU;EACfC,aAAajC,oBAAoBkC;EACjCb,UAAUZ;AACZ,CAAA,GACAV,OAAOiC,UAAU;EACfG,IAAI;;;EAGJF,aAAanC,gBAAgBsC,MAAMpC,oBAAoBkC,eAAehC,gBAAgBmC,cAAc;EACpGhB,UAAUX;AACZ,CAAA,GACAX,OAAOiC,UAAU;;EAEfC,aAAajC,oBAAoBsC;EACjCjB,UAAUf;AACZ,CAAA,GACAP,OAAOwC,IAAI;AAGb,IAAA,yBAAetB;",
6
+ "names": ["ActivationEvent", "Plugin", "AppActivationEvents", "AppPlugin", "AttentionEvents", "translations", "editorTranslations", "Text", "AnchorSort", "CommentConfig", "CreateObject", "MarkdownSettings", "MarkdownState", "OperationHandler", "ReactSurface", "SkillDefinition", "meta", "Markdown", "MarkdownEvents", "MarkdownPlugin", "define", "pipe", "addSkillDefinitionModule", "activate", "addCommentConfigModule", "addCreateObjectModule", "addOperationHandlerModule", "addSchemaModule", "schema", "Document", "addSurfaceModule", "firesBeforeActivation", "SetupExtensions", "addTranslationsModule", "addModule", "activatesOn", "SetupSettings", "id", "allOf", "AttentionReady", "AppGraphReady", "make"]
7
7
  }
@@ -4,10 +4,12 @@ import "./chunk-J5LGTIGS.mjs";
4
4
  import { Plugin } from "@dxos/app-framework";
5
5
  import { AppPlugin } from "@dxos/app-toolkit";
6
6
  import { Text } from "@dxos/schema";
7
- import { CreateObject, OperationHandler } from "#capabilities";
7
+ import { CreateObject, OperationHandler, SkillDefinition } from "#capabilities";
8
8
  import { meta } from "#meta";
9
9
  import { Markdown } from "#types";
10
- var MarkdownPlugin = Plugin.define(meta).pipe(AppPlugin.addCreateObjectModule({
10
+ var MarkdownPlugin = Plugin.define(meta).pipe(AppPlugin.addSkillDefinitionModule({
11
+ activate: SkillDefinition
12
+ }), AppPlugin.addCreateObjectModule({
11
13
  activate: CreateObject
12
14
  }), AppPlugin.addOperationHandlerModule({
13
15
  activate: OperationHandler
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/MarkdownPlugin.node.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Text } from '@dxos/schema';\n\nimport { CreateObject, OperationHandler } from '#capabilities';\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nexport const MarkdownPlugin = Plugin.define(meta).pipe(\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),\n Plugin.make,\n);\n\nexport default MarkdownPlugin;\n"],
5
- "mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAC1B,SAASC,YAAY;AAErB,SAASC,cAAcC,wBAAwB;AAC/C,SAASC,YAAY;AACrB,SAASC,gBAAgB;AAElB,IAAMC,iBAAiBP,OAAOQ,OAAOH,IAAAA,EAAMI,KAChDR,UAAUS,sBAAsB;EAAEC,UAAUR;AAAa,CAAA,GACzDF,UAAUW,0BAA0B;EAAED,UAAUP;AAAiB,CAAA,GACjEH,UAAUY,gBAAgB;EAAEC,QAAQ;IAACR,SAASS;IAAUb,KAAKA;;AAAM,CAAA,GACnEF,OAAOgB,IAAI;AAGb,IAAA,8BAAeT;",
6
- "names": ["Plugin", "AppPlugin", "Text", "CreateObject", "OperationHandler", "meta", "Markdown", "MarkdownPlugin", "define", "pipe", "addCreateObjectModule", "activate", "addOperationHandlerModule", "addSchemaModule", "schema", "Document", "make"]
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Text } from '@dxos/schema';\n\nimport { CreateObject, OperationHandler, SkillDefinition } from '#capabilities';\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nexport const MarkdownPlugin = Plugin.define(meta).pipe(\n AppPlugin.addSkillDefinitionModule({ activate: SkillDefinition }),\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),\n Plugin.make,\n);\n\nexport default MarkdownPlugin;\n"],
5
+ "mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAC1B,SAASC,YAAY;AAErB,SAASC,cAAcC,kBAAkBC,uBAAuB;AAChE,SAASC,YAAY;AACrB,SAASC,gBAAgB;AAElB,IAAMC,iBAAiBR,OAAOS,OAAOH,IAAAA,EAAMI,KAChDT,UAAUU,yBAAyB;EAAEC,UAAUP;AAAgB,CAAA,GAC/DJ,UAAUY,sBAAsB;EAAED,UAAUT;AAAa,CAAA,GACzDF,UAAUa,0BAA0B;EAAEF,UAAUR;AAAiB,CAAA,GACjEH,UAAUc,gBAAgB;EAAEC,QAAQ;IAACT,SAASU;IAAUf,KAAKA;;AAAM,CAAA,GACnEF,OAAOkB,IAAI;AAGb,IAAA,8BAAeV;",
6
+ "names": ["Plugin", "AppPlugin", "Text", "CreateObject", "OperationHandler", "SkillDefinition", "meta", "Markdown", "MarkdownPlugin", "define", "pipe", "addSkillDefinitionModule", "activate", "addCreateObjectModule", "addOperationHandlerModule", "addSchemaModule", "schema", "Document", "make"]
7
7
  }
@@ -1,21 +1,10 @@
1
+ import {
2
+ MarkdownPlugin,
3
+ MarkdownPlugin_workerd_default
4
+ } from "./chunk-CNYFGIDS.mjs";
5
+ import "./chunk-YMBC62S7.mjs";
6
+ import "./chunk-ANHHOTCD.mjs";
1
7
  import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/MarkdownPlugin.workerd.ts
4
- import { Plugin } from "@dxos/app-framework";
5
- import { AppPlugin } from "@dxos/app-toolkit";
6
- import { Text } from "@dxos/schema";
7
- import { OperationHandler } from "#capabilities";
8
- import { meta } from "#meta";
9
- import { Markdown } from "#types";
10
- var MarkdownPlugin = Plugin.define(meta).pipe(AppPlugin.addOperationHandlerModule({
11
- activate: OperationHandler
12
- }), AppPlugin.addSchemaModule({
13
- schema: [
14
- Markdown.Document,
15
- Text.Text
16
- ]
17
- }), Plugin.make);
18
- var MarkdownPlugin_workerd_default = MarkdownPlugin;
19
8
  export {
20
9
  MarkdownPlugin,
21
10
  MarkdownPlugin_workerd_default as default
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/MarkdownPlugin.workerd.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Text } from '@dxos/schema';\n\nimport { OperationHandler } from '#capabilities';\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nexport const MarkdownPlugin = Plugin.define(meta).pipe(\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),\n Plugin.make,\n);\n\nexport default MarkdownPlugin;\n"],
5
- "mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAC1B,SAASC,YAAY;AAErB,SAASC,wBAAwB;AACjC,SAASC,YAAY;AACrB,SAASC,gBAAgB;AAElB,IAAMC,iBAAiBN,OAAOO,OAAOH,IAAAA,EAAMI,KAChDP,UAAUQ,0BAA0B;EAAEC,UAAUP;AAAiB,CAAA,GACjEF,UAAUU,gBAAgB;EAAEC,QAAQ;IAACP,SAASQ;IAAUX,KAAKA;;AAAM,CAAA,GACnEF,OAAOc,IAAI;AAGb,IAAA,iCAAeR;",
6
- "names": ["Plugin", "AppPlugin", "Text", "OperationHandler", "meta", "Markdown", "MarkdownPlugin", "define", "pipe", "addOperationHandlerModule", "activate", "addSchemaModule", "schema", "Document", "make"]
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
7
  }
@@ -0,0 +1,43 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/MarkdownSettings/MarkdownSettings.tsx
4
+ import React from "react";
5
+ import { Input } from "@dxos/react-ui";
6
+ import { Form, FormRow } from "@dxos/react-ui-form";
7
+ import { meta } from "#meta";
8
+ import { Markdown } from "#types";
9
+ var MarkdownSettings = ({ settings, onSettingsChange }) => {
10
+ return /* @__PURE__ */ React.createElement(Form.Root, {
11
+ variant: "settings",
12
+ schema: Markdown.Settings,
13
+ readonly: !onSettingsChange,
14
+ values: settings,
15
+ onValuesChanged: (values) => onSettingsChange?.((current) => ({
16
+ ...current,
17
+ ...values
18
+ }))
19
+ }, /* @__PURE__ */ React.createElement(Form.Viewport, {
20
+ scroll: true
21
+ }, /* @__PURE__ */ React.createElement(Form.Content, null, /* @__PURE__ */ React.createElement(Form.Section, {
22
+ title: meta.profile.name
23
+ }, /* @__PURE__ */ React.createElement(Form.FieldSet, {
24
+ fieldMap: {
25
+ snippets: SnippetsField
26
+ },
27
+ filter: (properties) => settings.debug ? properties : properties.filter((property) => property.name !== "snippets")
28
+ })))));
29
+ };
30
+ var SnippetsField = ({ type, readonly, onValueChange, onBlur, ...props }) => /* @__PURE__ */ React.createElement(FormRow, {
31
+ readonly,
32
+ ...props
33
+ }, ({ value }) => /* @__PURE__ */ React.createElement(Input.TextArea, {
34
+ disabled: !!readonly,
35
+ rows: 5,
36
+ value: value ?? "",
37
+ onBlur,
38
+ onChange: (event) => onValueChange(type, event.target.value)
39
+ }));
40
+ export {
41
+ MarkdownSettings as default
42
+ };
43
+ //# sourceMappingURL=MarkdownSettings-5VMOYMND.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/MarkdownSettings/MarkdownSettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Input } from '@dxos/react-ui';\nimport { Form, type FormFieldRendererProps, FormRow } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nexport type MarkdownSettingsProps = AppSurface.SettingsProps<Markdown.Settings>;\n\nexport const MarkdownSettings = ({ settings, onSettingsChange }: MarkdownSettingsProps) => {\n return (\n <Form.Root\n variant='settings'\n schema={Markdown.Settings}\n readonly={!onSettingsChange}\n values={settings}\n onValuesChanged={(values) => onSettingsChange?.((current) => ({ ...current, ...values }))}\n >\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={meta.profile.name}>\n <Form.FieldSet\n fieldMap={{ snippets: SnippetsField }}\n filter={(properties) =>\n settings.debug ? properties : properties.filter((property) => property.name !== 'snippets')\n }\n />\n </Form.Section>\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\n/** Multi-line snippet editor; replaces the single-line text input the schema would otherwise render. */\nconst SnippetsField = ({ type, readonly, onValueChange, onBlur, ...props }: FormFieldRendererProps<string>) => (\n <FormRow<string> readonly={readonly} {...props}>\n {({ value }) => (\n <Input.TextArea\n disabled={!!readonly}\n rows={5}\n value={value ?? ''}\n onBlur={onBlur}\n onChange={(event) => onValueChange(type, event.target.value)}\n />\n )}\n </FormRow>\n);\n"],
5
+ "mappings": ";;;AAIA,OAAOA,WAAW;AAGlB,SAASC,aAAa;AACtB,SAASC,MAAmCC,eAAe;AAE3D,SAASC,YAAY;AACrB,SAASC,gBAAgB;AAIlB,IAAMC,mBAAmB,CAAC,EAAEC,UAAUC,iBAAgB,MAAyB;AACpF,SACE,sBAAA,cAACN,KAAKO,MAAI;IACRC,SAAQ;IACRC,QAAQN,SAASO;IACjBC,UAAU,CAACL;IACXM,QAAQP;IACRQ,iBAAiB,CAACD,WAAWN,mBAAmB,CAACQ,aAAa;MAAE,GAAGA;MAAS,GAAGF;IAAO,EAAA;KAEtF,sBAAA,cAACZ,KAAKe,UAAQ;IAACC,QAAAA;KACb,sBAAA,cAAChB,KAAKiB,SAAO,MACX,sBAAA,cAACjB,KAAKkB,SAAO;IAACC,OAAOjB,KAAKkB,QAAQC;KAChC,sBAAA,cAACrB,KAAKsB,UAAQ;IACZC,UAAU;MAAEC,UAAUC;IAAc;IACpCC,QAAQ,CAACC,eACPtB,SAASuB,QAAQD,aAAaA,WAAWD,OAAO,CAACG,aAAaA,SAASR,SAAS,UAAA;;AAQhG;AAGA,IAAMI,gBAAgB,CAAC,EAAEK,MAAMnB,UAAUoB,eAAeC,QAAQ,GAAGC,MAAAA,MACjE,sBAAA,cAAChC,SAAAA;EAAgBU;EAAqB,GAAGsB;GACtC,CAAC,EAAEC,MAAK,MACP,sBAAA,cAACnC,MAAMoC,UAAQ;EACbC,UAAU,CAAC,CAACzB;EACZ0B,MAAM;EACNH,OAAOA,SAAS;EAChBF;EACAM,UAAU,CAACC,UAAUR,cAAcD,MAAMS,MAAMC,OAAON,KAAK;;",
6
+ "names": ["React", "Input", "Form", "FormRow", "meta", "Markdown", "MarkdownSettings", "settings", "onSettingsChange", "Root", "variant", "schema", "Settings", "readonly", "values", "onValuesChanged", "current", "Viewport", "scroll", "Content", "Section", "title", "profile", "name", "FieldSet", "fieldMap", "snippets", "SnippetsField", "filter", "properties", "debug", "property", "type", "onValueChange", "onBlur", "props", "value", "TextArea", "disabled", "rows", "onChange", "event", "target"]
7
+ }
@@ -5,13 +5,14 @@ import * as Effect from "effect/Effect";
5
5
  import { Capability } from "@dxos/app-framework";
6
6
  import { AppCapabilities } from "@dxos/app-toolkit";
7
7
  import { Relation, Type } from "@dxos/echo";
8
- import { createDocAccessor, getRangeFromCursor } from "@dxos/echo-client";
8
+ import { getRangeFromCursor } from "@dxos/echo-client";
9
+ import { Doc } from "@dxos/echo-doc";
9
10
  import { Markdown } from "#types";
10
11
  var anchor_sort_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(AppCapabilities.AnchorSort, {
11
12
  key: Type.getTypename(Markdown.Document),
12
13
  sort: (anchorA, anchorB) => {
13
14
  const doc = Relation.getTarget(anchorA);
14
- const accessor = doc.content.target ? createDocAccessor(doc.content.target, [
15
+ const accessor = doc.content.target ? Doc.createAccessor(doc.content.target, [
15
16
  "content"
16
17
  ]) : void 0;
17
18
  if (doc !== Relation.getTarget(anchorB) || !accessor) {
@@ -29,4 +30,4 @@ var anchor_sort_default = Capability.makeModule(() => Effect.succeed(Capability.
29
30
  export {
30
31
  anchor_sort_default as default
31
32
  };
32
- //# sourceMappingURL=anchor-sort-UXN4RHFX.mjs.map
33
+ //# sourceMappingURL=anchor-sort-QF7UDG2A.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/anchor-sort.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Relation, Type } from '@dxos/echo';\nimport { getRangeFromCursor } from '@dxos/echo-client';\nimport { Doc } from '@dxos/echo-doc';\nimport { type AnchoredTo } from '@dxos/types';\n\nimport { Markdown } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(AppCapabilities.AnchorSort, {\n key: Type.getTypename(Markdown.Document),\n sort: (anchorA: AnchoredTo.AnchoredTo, anchorB: AnchoredTo.AnchoredTo) => {\n const doc = Relation.getTarget(anchorA) as Markdown.Document;\n const accessor = doc.content.target ? Doc.createAccessor(doc.content.target, ['content']) : undefined;\n if (doc !== Relation.getTarget(anchorB) || !accessor) {\n return 0;\n }\n\n const getStartPosition = (cursor: string | undefined) => {\n const range = cursor ? getRangeFromCursor(accessor, cursor) : undefined;\n return range?.start ?? Number.MAX_SAFE_INTEGER;\n };\n\n const posA = getStartPosition(anchorA.anchor);\n const posB = getStartPosition(anchorB.anchor);\n return posA - posB;\n },\n }),\n ),\n);\n"],
5
+ "mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAChC,SAASC,UAAUC,YAAY;AAC/B,SAASC,0BAA0B;AACnC,SAASC,WAAW;AAGpB,SAASC,gBAAgB;AAEzB,IAAA,sBAAeN,WAAWO,WAAW,MAC5BC,eACLR,WAAWS,YAAYR,gBAAgBS,YAAY;EACjDC,KAAKR,KAAKS,YAAYN,SAASO,QAAQ;EACvCC,MAAM,CAACC,SAAgCC,YAAAA;AACrC,UAAMC,MAAMf,SAASgB,UAAUH,OAAAA;AAC/B,UAAMI,WAAWF,IAAIG,QAAQC,SAAShB,IAAIiB,eAAeL,IAAIG,QAAQC,QAAQ;MAAC;KAAU,IAAIE;AAC5F,QAAIN,QAAQf,SAASgB,UAAUF,OAAAA,KAAY,CAACG,UAAU;AACpD,aAAO;IACT;AAEA,UAAMK,mBAAmB,CAACC,WAAAA;AACxB,YAAMC,QAAQD,SAASrB,mBAAmBe,UAAUM,MAAAA,IAAUF;AAC9D,aAAOG,OAAOC,SAASC,OAAOC;IAChC;AAEA,UAAMC,OAAON,iBAAiBT,QAAQgB,MAAM;AAC5C,UAAMC,OAAOR,iBAAiBR,QAAQe,MAAM;AAC5C,WAAOD,OAAOE;EAChB;AACF,CAAA,CAAA,CAAA;",
6
+ "names": ["Effect", "Capability", "AppCapabilities", "Relation", "Type", "getRangeFromCursor", "Doc", "Markdown", "makeModule", "succeed", "contributes", "AnchorSort", "key", "getTypename", "Document", "sort", "anchorA", "anchorB", "doc", "getTarget", "accessor", "content", "target", "createAccessor", "undefined", "getStartPosition", "cursor", "range", "start", "Number", "MAX_SAFE_INTEGER", "posA", "anchor", "posB"]
7
+ }
@@ -2,26 +2,22 @@ import "../chunk-J5LGTIGS.mjs";
2
2
 
3
3
  // src/capabilities/index.ts
4
4
  import { Capability } from "@dxos/app-framework";
5
- var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("../app-graph-builder-6Y5NHTNR.mjs"));
6
- var NavigationResolver = Capability.lazy("NavigationResolver", () => import("../navigation-resolver-3WEM7SSC.mjs"));
7
- var AnchorSort = Capability.lazy("AnchorSort", () => import("../anchor-sort-UXN4RHFX.mjs"));
8
- var CommentConfig = Capability.lazy("CommentConfig", () => import("../comment-config-EGY7RPPW.mjs"));
9
- var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-3WMEQJ2C.mjs"));
10
- var BlueprintDefinition = Capability.lazy("BlueprintDefinition", () => import("../blueprint-definition-DSPXK77L.mjs"));
11
- var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-2ARMPBGZ.mjs"));
12
- var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-6LX4ZQ2H.mjs"));
5
+ var AnchorSort = Capability.lazy("AnchorSort", () => import("../anchor-sort-QF7UDG2A.mjs"));
6
+ var CommentConfig = Capability.lazy("CommentConfig", () => import("../comment-config-M5OGFULS.mjs"));
7
+ var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-RSEWTCMM.mjs"));
8
+ var SkillDefinition = Capability.lazy("SkillDefinition", () => import("../skill-definition-ET7BYY47.mjs"));
9
+ var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-SDCXGMGK.mjs"));
10
+ var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-37GL3UVG.mjs"));
13
11
  var MarkdownSettings = Capability.lazy("MarkdownSettings", () => import("../settings-O6O6HT3I.mjs"));
14
- var MarkdownState = Capability.lazy("MarkdownState", () => import("../state-ZYT3JRWT.mjs"));
12
+ var MarkdownState = Capability.lazy("MarkdownState", () => import("../state-3BR7L6CW.mjs"));
15
13
  export {
16
14
  AnchorSort,
17
- AppGraphBuilder,
18
- BlueprintDefinition,
19
15
  CommentConfig,
20
16
  CreateObject,
21
17
  MarkdownSettings,
22
18
  MarkdownState,
23
- NavigationResolver,
24
19
  OperationHandler,
25
- ReactSurface
20
+ ReactSurface,
21
+ SkillDefinition
26
22
  };
27
23
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/capabilities/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nexport const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));\nexport const NavigationResolver = Capability.lazy('NavigationResolver', () => import('./navigation-resolver'));\nexport const AnchorSort = Capability.lazy('AnchorSort', () => import('./anchor-sort'));\nexport const CommentConfig = Capability.lazy('CommentConfig', () => import('./comment-config'));\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\nexport const BlueprintDefinition = Capability.lazy('BlueprintDefinition', () => import('./blueprint-definition'));\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\nexport const MarkdownSettings = Capability.lazy('MarkdownSettings', () => import('./settings'));\nexport const MarkdownState = Capability.lazy('MarkdownState', () => import('./state'));\n"],
5
- "mappings": ";;;AAIA,SAASA,kBAAkB;AAGpB,IAAMC,kBAAkBD,WAAWE,KAAK,mBAAmB,MAAM,OAAO,mCAAA,CAAA;AACxE,IAAMC,qBAAqBH,WAAWE,KAAK,sBAAsB,MAAM,OAAO,qCAAA,CAAA;AAC9E,IAAME,aAAaJ,WAAWE,KAAK,cAAc,MAAM,OAAO,6BAAA,CAAA;AAC9D,IAAMG,gBAAgBL,WAAWE,KAAK,iBAAiB,MAAM,OAAO,gCAAA,CAAA;AACpE,IAAMI,eAAeN,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMK,sBAAsBP,WAAWE,KAAK,uBAAuB,MAAM,OAAO,sCAAA,CAAA;AAChF,IAAMM,mBAAmBR,WAAWE,KACzC,oBACA,MAAM,OAAO,mCAAA,CAAA;AAER,IAAMO,eAAeT,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMQ,mBAAmBV,WAAWE,KAAK,oBAAoB,MAAM,OAAO,0BAAA,CAAA;AAC1E,IAAMS,gBAAgBX,WAAWE,KAAK,iBAAiB,MAAM,OAAO,uBAAA,CAAA;",
6
- "names": ["Capability", "AppGraphBuilder", "lazy", "NavigationResolver", "AnchorSort", "CommentConfig", "CreateObject", "BlueprintDefinition", "OperationHandler", "ReactSurface", "MarkdownSettings", "MarkdownState"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nexport const AnchorSort = Capability.lazy('AnchorSort', () => import('./anchor-sort'));\nexport const CommentConfig = Capability.lazy('CommentConfig', () => import('./comment-config'));\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\nexport const SkillDefinition = Capability.lazy('SkillDefinition', () => import('./skill-definition'));\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\nexport const MarkdownSettings = Capability.lazy('MarkdownSettings', () => import('./settings'));\nexport const MarkdownState = Capability.lazy('MarkdownState', () => import('./state'));\n"],
5
+ "mappings": ";;;AAIA,SAASA,kBAAkB;AAGpB,IAAMC,aAAaD,WAAWE,KAAK,cAAc,MAAM,OAAO,6BAAA,CAAA;AAC9D,IAAMC,gBAAgBH,WAAWE,KAAK,iBAAiB,MAAM,OAAO,gCAAA,CAAA;AACpE,IAAME,eAAeJ,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMG,kBAAkBL,WAAWE,KAAK,mBAAmB,MAAM,OAAO,kCAAA,CAAA;AACxE,IAAMI,mBAAmBN,WAAWE,KACzC,oBACA,MAAM,OAAO,mCAAA,CAAA;AAER,IAAMK,eAAeP,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMM,mBAAmBR,WAAWE,KAAK,oBAAoB,MAAM,OAAO,0BAAA,CAAA;AAC1E,IAAMO,gBAAgBT,WAAWE,KAAK,iBAAiB,MAAM,OAAO,uBAAA,CAAA;",
6
+ "names": ["Capability", "AnchorSort", "lazy", "CommentConfig", "CreateObject", "SkillDefinition", "OperationHandler", "ReactSurface", "MarkdownSettings", "MarkdownState"]
7
7
  }
@@ -2,10 +2,12 @@ import "../chunk-J5LGTIGS.mjs";
2
2
 
3
3
  // src/capabilities/node.ts
4
4
  import { Capability } from "@dxos/app-framework";
5
- var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-3WMEQJ2C.mjs"));
6
- var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-2ARMPBGZ.mjs"));
5
+ var SkillDefinition = Capability.lazy("SkillDefinition", () => import("../skill-definition-ET7BYY47.mjs"));
6
+ var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-RSEWTCMM.mjs"));
7
+ var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-SDCXGMGK.mjs"));
7
8
  export {
8
9
  CreateObject,
9
- OperationHandler
10
+ OperationHandler,
11
+ SkillDefinition
10
12
  };
11
13
  //# sourceMappingURL=node.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/capabilities/node.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\n\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\n"],
5
- "mappings": ";;;AAIA,SAASA,kBAAkB;AAGpB,IAAMC,eAAeD,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAElE,IAAMC,mBAAmBH,WAAWE,KACzC,oBACA,MAAM,OAAO,mCAAA,CAAA;",
6
- "names": ["Capability", "CreateObject", "lazy", "OperationHandler"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const SkillDefinition = Capability.lazy('SkillDefinition', () => import('./skill-definition'));\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\n\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\n"],
5
+ "mappings": ";;;AAIA,SAASA,kBAAkB;AAGpB,IAAMC,kBAAkBD,WAAWE,KAAK,mBAAmB,MAAM,OAAO,kCAAA,CAAA;AACxE,IAAMC,eAAeH,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAElE,IAAME,mBAAmBJ,WAAWE,KACzC,oBACA,MAAM,OAAO,mCAAA,CAAA;",
6
+ "names": ["Capability", "SkillDefinition", "lazy", "CreateObject", "OperationHandler"]
7
7
  }
@@ -0,0 +1,8 @@
1
+ // src/operations/index.ts
2
+ import { OperationHandlerSet } from "@dxos/compute";
3
+ var MarkdownOperationHandlerSet = OperationHandlerSet.lazy(() => import("./create-OQUMKL5I.mjs"), () => import("./create-markdown-4O5FDA77.mjs"), () => import("./open-BAZIRXII.mjs"), () => import("./scroll-to-anchor-I6HFE5AH.mjs"), () => import("./set-view-mode-NY5OYYIM.mjs"), () => import("./update-markdown-M4PTA6VS.mjs"));
4
+
5
+ export {
6
+ MarkdownOperationHandlerSet
7
+ };
8
+ //# sourceMappingURL=chunk-2V6A5NDQ.mjs.map
@@ -1,5 +1,3 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
1
  // src/capabilities/operation-handler.ts
4
2
  import * as Effect from "effect/Effect";
5
3
  import { Capabilities, Capability } from "@dxos/app-framework";
@@ -7,7 +5,8 @@ import { MarkdownOperationHandlerSet } from "#operations";
7
5
  var operation_handler_default = Capability.makeModule(Effect.fnUntraced(function* () {
8
6
  return Capability.contributes(Capabilities.OperationHandler, MarkdownOperationHandlerSet);
9
7
  }));
8
+
10
9
  export {
11
- operation_handler_default as default
10
+ operation_handler_default
12
11
  };
13
- //# sourceMappingURL=operation-handler-2ARMPBGZ.mjs.map
12
+ //# sourceMappingURL=chunk-ANHHOTCD.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/operation-handler.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nimport { MarkdownOperationHandlerSet } from '#operations';\n\nexport default Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(Capabilities.OperationHandler, MarkdownOperationHandlerSet);\n }),\n);\n"],
5
- "mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AAGzC,SAASC,mCAAmC;AAE5C,IAAA,4BAAeD,WAAWE,WACjBC,kBAAW,aAAA;AAChB,SAAOH,WAAWI,YAAYL,aAAaM,kBAAkBJ,2BAAAA;AAC/D,CAAA,CAAA;",
5
+ "mappings": ";AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AAGzC,SAASC,mCAAmC;AAE5C,IAAA,4BAAeD,WAAWE,WACjBC,kBAAW,aAAA;AAChB,SAAOH,WAAWI,YAAYL,aAAaM,kBAAkBJ,2BAAAA;AAC/D,CAAA,CAAA;",
6
6
  "names": ["Effect", "Capabilities", "Capability", "MarkdownOperationHandlerSet", "makeModule", "fnUntraced", "contributes", "OperationHandler"]
7
7
  }
@@ -0,0 +1,32 @@
1
+ import {
2
+ skill_definition_default
3
+ } from "./chunk-YMBC62S7.mjs";
4
+ import {
5
+ operation_handler_default
6
+ } from "./chunk-ANHHOTCD.mjs";
7
+
8
+ // src/MarkdownPlugin.workerd.ts
9
+ import { Plugin } from "@dxos/app-framework";
10
+ import { AppPlugin } from "@dxos/app-toolkit";
11
+ import { Text } from "@dxos/schema";
12
+ import { meta } from "#meta";
13
+ import { Markdown } from "#types";
14
+ var MarkdownPlugin = Plugin.define(meta).pipe(AppPlugin.addSkillDefinitionModule({
15
+ id: "skill-definition",
16
+ activate: skill_definition_default
17
+ }), AppPlugin.addOperationHandlerModule({
18
+ id: "operation-handler",
19
+ activate: operation_handler_default
20
+ }), AppPlugin.addSchemaModule({
21
+ schema: [
22
+ Markdown.Document,
23
+ Text.Text
24
+ ]
25
+ }), Plugin.make);
26
+ var MarkdownPlugin_workerd_default = MarkdownPlugin;
27
+
28
+ export {
29
+ MarkdownPlugin,
30
+ MarkdownPlugin_workerd_default
31
+ };
32
+ //# sourceMappingURL=chunk-CNYFGIDS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/MarkdownPlugin.workerd.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Text } from '@dxos/schema';\n\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nimport OperationHandler from './capabilities/operation-handler';\nimport SkillDefinition from './capabilities/skill-definition';\n\nexport const MarkdownPlugin = Plugin.define(meta).pipe(\n AppPlugin.addSkillDefinitionModule({ id: 'skill-definition', activate: SkillDefinition }),\n AppPlugin.addOperationHandlerModule({ id: 'operation-handler', activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),\n Plugin.make,\n);\n\nexport default MarkdownPlugin;\n"],
5
+ "mappings": ";;;;;;;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAC1B,SAASC,YAAY;AAErB,SAASC,YAAY;AACrB,SAASC,gBAAgB;AAKlB,IAAMC,iBAAiBC,OAAOC,OAAOC,IAAAA,EAAMC,KAChDC,UAAUC,yBAAyB;EAAEC,IAAI;EAAoBC,UAAUC;AAAgB,CAAA,GACvFJ,UAAUK,0BAA0B;EAAEH,IAAI;EAAqBC,UAAUG;AAAiB,CAAA,GAC1FN,UAAUO,gBAAgB;EAAEC,QAAQ;IAACC,SAASC;IAAUC,KAAKA;;AAAM,CAAA,GACnEf,OAAOgB,IAAI;AAGb,IAAA,iCAAejB;",
6
+ "names": ["Plugin", "AppPlugin", "Text", "meta", "Markdown", "MarkdownPlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addSkillDefinitionModule", "id", "activate", "SkillDefinition", "addOperationHandlerModule", "OperationHandler", "addSchemaModule", "schema", "Markdown", "Document", "Text", "make"]
7
+ }
@@ -1,12 +1,12 @@
1
- // src/blueprints/markdown-blueprint.ts
2
- import { Blueprint, Template } from "@dxos/compute";
1
+ // src/skills/markdown-skill.ts
2
+ import { Skill, Template } from "@dxos/compute";
3
3
  import { trim } from "@dxos/util";
4
4
  import { Markdown, MarkdownOperation } from "#types";
5
- var make = () => Blueprint.make({
6
- key: Markdown.BLUEPRINT_KEY,
5
+ var make = () => Skill.make({
6
+ key: Markdown.SKILL_KEY,
7
7
  name: "Markdown",
8
8
  description: "Work with markdown documents. Preferred over raw database operations.",
9
- tools: Blueprint.toolDefinitions({
9
+ tools: Skill.toolDefinitions({
10
10
  operations: [
11
11
  MarkdownOperation.Create,
12
12
  MarkdownOperation.Open,
@@ -30,15 +30,16 @@ var make = () => Blueprint.make({
30
30
  + "This sentence is really good."
31
31
  ${"```"}
32
32
  `
33
- })
33
+ }),
34
+ agentCanEnable: true
34
35
  });
35
- var blueprint = {
36
- key: Markdown.BLUEPRINT_KEY,
36
+ var skill = {
37
+ key: Markdown.SKILL_KEY,
37
38
  make
38
39
  };
39
- var markdown_blueprint_default = blueprint;
40
+ var markdown_skill_default = skill;
40
41
 
41
42
  export {
42
- markdown_blueprint_default
43
+ markdown_skill_default
43
44
  };
44
- //# sourceMappingURL=chunk-LXNSKCPD.mjs.map
45
+ //# sourceMappingURL=chunk-EV4ZOL4P.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/skills/markdown-skill.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Skill, Template } from '@dxos/compute';\nimport { trim } from '@dxos/util';\n\nimport { Markdown, MarkdownOperation } from '#types';\n\nconst make = () =>\n Skill.make({\n key: Markdown.SKILL_KEY,\n name: 'Markdown',\n description: 'Work with markdown documents. Preferred over raw database operations.',\n tools: Skill.toolDefinitions({\n operations: [MarkdownOperation.Create, MarkdownOperation.Open, MarkdownOperation.Update],\n }),\n instructions: Template.make({\n // TODO(wittjosiah): Move example to function input schema annotation.\n source: trim`\n {{! Markdown }}\n\n You can create, read and update markdown documents.\n When asked to edit or update documents return updates as a set of compact diff string pairs.\n For each diff, respond with the smallest possible matching span.\n\n Example:\n ${'```'}diff\n - \"There is a tyop in this sentence.\"\n + \"There is a typo in this sentence.\"\n - \"This id good.\"\n + \"This sentence is really good.\"\n ${'```'}\n `,\n }),\n agentCanEnable: true,\n });\n\nconst skill: Skill.Definition = {\n key: Markdown.SKILL_KEY,\n make,\n};\n\nexport default skill;\n"],
5
+ "mappings": ";AAIA,SAASA,OAAOC,gBAAgB;AAChC,SAASC,YAAY;AAErB,SAASC,UAAUC,yBAAyB;AAE5C,IAAMC,OAAO,MACXL,MAAMK,KAAK;EACTC,KAAKH,SAASI;EACdC,MAAM;EACNC,aAAa;EACbC,OAAOV,MAAMW,gBAAgB;IAC3BC,YAAY;MAACR,kBAAkBS;MAAQT,kBAAkBU;MAAMV,kBAAkBW;;EACnF,CAAA;EACAC,cAAcf,SAASI,KAAK;;IAE1BY,QAAQf;;;;;;;;UAQJ,KAAA;;;;;UAKA,KAAA;;EAEN,CAAA;EACAgB,gBAAgB;AAClB,CAAA;AAEF,IAAMC,QAA0B;EAC9Bb,KAAKH,SAASI;EACdF;AACF;AAEA,IAAA,yBAAec;",
6
+ "names": ["Skill", "Template", "trim", "Markdown", "MarkdownOperation", "make", "key", "SKILL_KEY", "name", "description", "tools", "toolDefinitions", "operations", "Create", "Open", "Update", "instructions", "source", "agentCanEnable", "skill"]
7
+ }