@dxos/plugin-markdown 0.8.4-main.9be5663bfe → 0.8.4-main.abd8ff62ef

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 (208) hide show
  1. package/dist/lib/browser/blueprints/index.mjs +3 -4
  2. package/dist/lib/browser/blueprints/index.mjs.map +2 -2
  3. package/dist/lib/browser/{chunk-XKUKZNUS.mjs → chunk-DNSKDWUL.mjs} +4 -6
  4. package/dist/lib/browser/chunk-DNSKDWUL.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-46WIDM4R.mjs → chunk-SW6IK2GJ.mjs} +39 -13
  6. package/dist/lib/browser/chunk-SW6IK2GJ.mjs.map +7 -0
  7. package/dist/lib/browser/{create-HSXPXCC5.mjs → create-SRADQOTE.mjs} +4 -5
  8. package/dist/lib/browser/create-SRADQOTE.mjs.map +7 -0
  9. package/dist/lib/browser/{create-markdown-WB7DH3UF.mjs → create-markdown-A2ERCEOZ.mjs} +4 -5
  10. package/dist/lib/browser/create-markdown-A2ERCEOZ.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +7 -545
  12. package/dist/lib/browser/index.mjs.map +4 -4
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/{open-N6PAX6DY.mjs → open-ANTKMST5.mjs} +4 -5
  15. package/dist/lib/browser/open-ANTKMST5.mjs.map +7 -0
  16. package/dist/lib/browser/operations/index.mjs +4 -5
  17. package/dist/lib/browser/operations/index.mjs.map +3 -3
  18. package/dist/lib/browser/{scroll-to-anchor-5M4F24AB.mjs → scroll-to-anchor-4RJ6MQ7I.mjs} +4 -5
  19. package/dist/lib/browser/scroll-to-anchor-4RJ6MQ7I.mjs.map +7 -0
  20. package/dist/lib/browser/{set-view-mode-NBNF2I5W.mjs → set-view-mode-2S7KKY7C.mjs} +4 -5
  21. package/dist/lib/browser/set-view-mode-2S7KKY7C.mjs.map +7 -0
  22. package/dist/lib/browser/types/index.mjs +1 -2
  23. package/dist/lib/browser/{update-5QIRVGTL.mjs → update-markdown-CPM5KOQW.mjs} +7 -8
  24. package/dist/lib/browser/update-markdown-CPM5KOQW.mjs.map +7 -0
  25. package/dist/lib/node-esm/blueprints/index.mjs +3 -4
  26. package/dist/lib/node-esm/blueprints/index.mjs.map +2 -2
  27. package/dist/lib/node-esm/{chunk-E4BQCEXF.mjs → chunk-MWYFGI2J.mjs} +4 -6
  28. package/dist/lib/node-esm/chunk-MWYFGI2J.mjs.map +7 -0
  29. package/dist/lib/node-esm/{chunk-4MSJO6IJ.mjs → chunk-ZE6QJ4S5.mjs} +39 -13
  30. package/dist/lib/node-esm/chunk-ZE6QJ4S5.mjs.map +7 -0
  31. package/dist/lib/node-esm/{create-6Z2KYISY.mjs → create-6JGQPPQ6.mjs} +4 -5
  32. package/dist/lib/node-esm/create-6JGQPPQ6.mjs.map +7 -0
  33. package/dist/lib/node-esm/{create-markdown-JWQZICKY.mjs → create-markdown-KXSM2I2M.mjs} +4 -5
  34. package/dist/lib/{browser/create-markdown-WB7DH3UF.mjs.map → node-esm/create-markdown-KXSM2I2M.mjs.map} +1 -1
  35. package/dist/lib/node-esm/index.mjs +7 -545
  36. package/dist/lib/node-esm/index.mjs.map +4 -4
  37. package/dist/lib/node-esm/meta.json +1 -1
  38. package/dist/lib/node-esm/{open-DSNFRSNZ.mjs → open-GB6HNBHS.mjs} +4 -5
  39. package/dist/lib/node-esm/open-GB6HNBHS.mjs.map +7 -0
  40. package/dist/lib/node-esm/operations/index.mjs +4 -5
  41. package/dist/lib/node-esm/operations/index.mjs.map +3 -3
  42. package/dist/lib/node-esm/{scroll-to-anchor-D6SHGU2R.mjs → scroll-to-anchor-UABP74RR.mjs} +4 -5
  43. package/dist/lib/{browser/scroll-to-anchor-5M4F24AB.mjs.map → node-esm/scroll-to-anchor-UABP74RR.mjs.map} +1 -1
  44. package/dist/lib/node-esm/{set-view-mode-REYB4L7J.mjs → set-view-mode-JEDC5ZL7.mjs} +4 -5
  45. package/dist/lib/{browser/set-view-mode-NBNF2I5W.mjs.map → node-esm/set-view-mode-JEDC5ZL7.mjs.map} +1 -1
  46. package/dist/lib/node-esm/types/index.mjs +1 -2
  47. package/dist/lib/node-esm/{update-YMQAIKOF.mjs → update-markdown-AXLYHK6S.mjs} +7 -8
  48. package/dist/lib/node-esm/update-markdown-AXLYHK6S.mjs.map +7 -0
  49. package/dist/types/src/MarkdownPlugin.d.ts +1 -0
  50. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  51. package/dist/types/src/{cli/plugin.d.ts → MarkdownPlugin.node.d.ts} +2 -1
  52. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -0
  53. package/dist/types/src/MarkdownPlugin.test.d.ts +2 -0
  54. package/dist/types/src/MarkdownPlugin.test.d.ts.map +1 -0
  55. package/dist/types/src/blueprints/markdown-blueprint.d.ts +2 -2
  56. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -1
  57. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  59. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/blueprint-definition.d.ts +2 -2
  61. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/index.d.ts +3 -21
  63. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/node.d.ts +1 -1
  65. package/dist/types/src/capabilities/node.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  67. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/settings.d.ts +1 -19
  70. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  72. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +14 -6
  73. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  74. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  75. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +2 -1
  76. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
  77. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +2 -2
  78. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
  79. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +1 -1
  80. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  81. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +46 -90
  82. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -1
  83. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -1
  84. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +1 -1
  85. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -1
  86. package/dist/types/src/containers/MarkdownCard/MarkdownEditableCard.d.ts +15 -0
  87. package/dist/types/src/containers/MarkdownCard/MarkdownEditableCard.d.ts.map +1 -0
  88. package/dist/types/src/containers/MarkdownCard/index.d.ts +1 -0
  89. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -1
  90. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +7 -5
  91. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -1
  92. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts +4 -4
  93. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.d.ts.map +1 -1
  94. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts +70 -72
  95. package/dist/types/src/containers/MarkdownContainer/MarkdownContainer.stories.d.ts.map +1 -1
  96. package/dist/types/src/containers/index.d.ts +1 -0
  97. package/dist/types/src/containers/index.d.ts.map +1 -1
  98. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -1
  99. package/dist/types/src/hooks/useExtensions.d.ts +3 -1
  100. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
  101. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
  102. package/dist/types/src/index.d.ts +2 -3
  103. package/dist/types/src/index.d.ts.map +1 -1
  104. package/dist/types/src/operations/create-markdown.d.ts +1 -1
  105. package/dist/types/src/operations/create-markdown.d.ts.map +1 -1
  106. package/dist/types/src/operations/create.d.ts +1 -1
  107. package/dist/types/src/operations/create.d.ts.map +1 -1
  108. package/dist/types/src/operations/definitions.d.ts +2 -2
  109. package/dist/types/src/operations/definitions.d.ts.map +1 -1
  110. package/dist/types/src/operations/index.d.ts +1 -1
  111. package/dist/types/src/operations/index.d.ts.map +1 -1
  112. package/dist/types/src/operations/open.d.ts +1 -1
  113. package/dist/types/src/operations/open.d.ts.map +1 -1
  114. package/dist/types/src/operations/scroll-to-anchor.d.ts +1 -1
  115. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -1
  116. package/dist/types/src/operations/set-view-mode.d.ts +1 -1
  117. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -1
  118. package/dist/types/src/operations/{update.d.ts → update-markdown.d.ts} +2 -2
  119. package/dist/types/src/operations/update-markdown.d.ts.map +1 -0
  120. package/dist/types/src/testing.d.ts.map +1 -1
  121. package/dist/types/src/translations.d.ts +70 -73
  122. package/dist/types/src/translations.d.ts.map +1 -1
  123. package/dist/types/src/types/Markdown.d.ts +8 -8
  124. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  125. package/dist/types/src/types/Settings.d.ts +10 -9
  126. package/dist/types/src/types/Settings.d.ts.map +1 -1
  127. package/dist/types/src/types/capabilities.d.ts +3 -20
  128. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  129. package/dist/types/src/types/events.d.ts.map +1 -1
  130. package/dist/types/src/types/types.d.ts +1 -0
  131. package/dist/types/src/types/types.d.ts.map +1 -1
  132. package/dist/types/src/util.d.ts.map +1 -1
  133. package/dist/types/tsconfig.tsbuildinfo +1 -1
  134. package/package.json +60 -73
  135. package/src/{cli/plugin.ts → MarkdownPlugin.node.ts} +4 -2
  136. package/src/MarkdownPlugin.test.ts +26 -0
  137. package/src/MarkdownPlugin.tsx +6 -4
  138. package/src/blueprints/markdown-blueprint.ts +2 -3
  139. package/src/capabilities/app-graph-serializer.ts +1 -2
  140. package/src/capabilities/artifact-definition.ts +1 -1
  141. package/src/capabilities/blueprint-definition.ts +2 -0
  142. package/src/capabilities/index.ts +2 -1
  143. package/src/capabilities/node.ts +1 -1
  144. package/src/capabilities/operation-handler.ts +1 -1
  145. package/src/capabilities/react-surface.tsx +15 -8
  146. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +3 -2
  147. package/src/components/MarkdownEditor/MarkdownEditor.tsx +4 -4
  148. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +3 -3
  149. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +4 -15
  150. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +2 -1
  151. package/src/components/MarkdownSettings/MarkdownSettings.tsx +16 -119
  152. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +3 -2
  153. package/src/containers/MarkdownCard/MarkdownCard.tsx +13 -7
  154. package/src/containers/MarkdownCard/MarkdownEditableCard.tsx +42 -0
  155. package/src/containers/MarkdownCard/index.ts +1 -0
  156. package/src/containers/MarkdownCard/snippet.ts +27 -51
  157. package/src/containers/MarkdownContainer/MarkdownContainer.stories.tsx +4 -3
  158. package/src/containers/MarkdownContainer/MarkdownContainer.tsx +5 -4
  159. package/src/containers/index.ts +3 -0
  160. package/src/hooks/useExtensions.tsx +7 -8
  161. package/src/index.ts +5 -4
  162. package/src/operations/create-markdown.ts +1 -1
  163. package/src/operations/create.conversations.json +1 -1
  164. package/src/operations/create.test.ts +4 -5
  165. package/src/operations/create.ts +1 -1
  166. package/src/operations/definitions.ts +1 -1
  167. package/src/operations/index.ts +2 -2
  168. package/src/operations/open.ts +1 -1
  169. package/src/operations/scroll-to-anchor.ts +1 -1
  170. package/src/operations/set-view-mode.ts +1 -1
  171. package/src/operations/{update.ts → update-markdown.ts} +1 -1
  172. package/src/operations/update.conversations.json +1 -1
  173. package/src/operations/update.test.ts +4 -5
  174. package/src/translations.ts +2 -26
  175. package/src/types/Settings.ts +47 -10
  176. package/src/types/capabilities.ts +2 -1
  177. package/src/types/types.ts +4 -1
  178. package/src/util.tsx +1 -1
  179. package/dist/lib/browser/MarkdownSettings-YZFNSJJY.mjs +0 -121
  180. package/dist/lib/browser/MarkdownSettings-YZFNSJJY.mjs.map +0 -7
  181. package/dist/lib/browser/chunk-46WIDM4R.mjs.map +0 -7
  182. package/dist/lib/browser/chunk-J5LGTIGS.mjs +0 -10
  183. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +0 -7
  184. package/dist/lib/browser/chunk-XKUKZNUS.mjs.map +0 -7
  185. package/dist/lib/browser/cli/index.mjs +0 -39
  186. package/dist/lib/browser/cli/index.mjs.map +0 -7
  187. package/dist/lib/browser/create-HSXPXCC5.mjs.map +0 -7
  188. package/dist/lib/browser/open-N6PAX6DY.mjs.map +0 -7
  189. package/dist/lib/browser/update-5QIRVGTL.mjs.map +0 -7
  190. package/dist/lib/node-esm/MarkdownSettings-X6SDS35F.mjs +0 -122
  191. package/dist/lib/node-esm/MarkdownSettings-X6SDS35F.mjs.map +0 -7
  192. package/dist/lib/node-esm/chunk-4MSJO6IJ.mjs.map +0 -7
  193. package/dist/lib/node-esm/chunk-E4BQCEXF.mjs.map +0 -7
  194. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  195. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +0 -7
  196. package/dist/lib/node-esm/cli/index.mjs +0 -40
  197. package/dist/lib/node-esm/cli/index.mjs.map +0 -7
  198. package/dist/lib/node-esm/create-6Z2KYISY.mjs.map +0 -7
  199. package/dist/lib/node-esm/create-markdown-JWQZICKY.mjs.map +0 -7
  200. package/dist/lib/node-esm/open-DSNFRSNZ.mjs.map +0 -7
  201. package/dist/lib/node-esm/scroll-to-anchor-D6SHGU2R.mjs.map +0 -7
  202. package/dist/lib/node-esm/set-view-mode-REYB4L7J.mjs.map +0 -7
  203. package/dist/lib/node-esm/update-YMQAIKOF.mjs.map +0 -7
  204. package/dist/types/src/cli/index.d.ts +0 -2
  205. package/dist/types/src/cli/index.d.ts.map +0 -1
  206. package/dist/types/src/cli/plugin.d.ts.map +0 -1
  207. package/dist/types/src/operations/update.d.ts.map +0 -1
  208. package/src/cli/index.ts +0 -5
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/meta.ts", "../../../src/util.tsx", "../../../src/MarkdownPlugin.tsx", "../../../src/translations.ts", "../../../src/components/index.ts", "../../../src/components/MarkdownEditor/MarkdownEditor.tsx", "../../../src/components/MarkdownEditor/MarkdownEditorContent.tsx", "../../../src/components/MarkdownEditor/MarkdownEditorToolbar.tsx", "../../../src/components/MarkdownEditor/FileUpload.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.markdown',\n name: 'Markdown',\n description: trim`\n Full-featured collaborative markdown editor with real-time editing, inline comments, and rich formatting.\n Supports AI-powered editing assistance and seamlessly integrates with other workspace objects.\n `,\n icon: 'ph--text-aa--regular',\n iconHue: 'indigo',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',\n screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { debounce } from '@dxos/async';\nimport { Obj } from '@dxos/echo';\nimport { type TypedObjectSerializer } from '@dxos/plugin-space/types';\n\nimport { Markdown } from '#types';\n\n/**\n * Checks if an object conforms to the interface needed to render an editor.\n * @deprecated Use Schema.instanceOf(Markdown.Document, data)\n */\n// TODO(burdon): Normalize types (from FilesPlugin).\nexport const isEditorModel = (data: any): data is { id: string; text: string } =>\n data &&\n typeof data === 'object' &&\n 'id' in data &&\n typeof data.id === 'string' &&\n 'text' in data &&\n typeof data.text === 'string';\n\nexport type MarkdownProperties = Record<string, any>;\n\nexport const isMarkdownProperties = (data: unknown): data is MarkdownProperties =>\n (Obj.isObject(data) as boolean)\n ? true\n : data && typeof data === 'object'\n ? 'title' in data && typeof data.title === 'string'\n : false;\n\nconst nonTitleChars = /[^\\w ]/g;\n\n// Lines matching these patterns are skipped.\nconst skipPatterns = [\n /^!\\[/, // Image.\n /^---\\s*$/, // Horizontal rule.\n /^```/, // Code block fence.\n /^\\s*$/, // Empty or whitespace-only.\n];\n\n// Patterns to extract title text (first capture group is used).\nconst titlePatterns = [\n /^#{1,6}\\s+(.+)/, // Heading.\n];\n\n/**\n * Extracts a fallback name by scanning lines for the first heading or text fragment.\n */\nexport const getFallbackName = (content = ''): string => {\n const len = content.length;\n\n let i = 0;\n while (i < len) {\n // Find end of line.\n let lineEnd = i;\n while (lineEnd < len && content[lineEnd] !== '\\n') {\n lineEnd++;\n }\n\n const line = content.slice(i, lineEnd).trim();\n i = lineEnd + 1;\n\n // Skip lines matching skip patterns.\n if (skipPatterns.some((pattern) => pattern.test(line))) {\n continue;\n }\n\n // Check for title patterns.\n for (const pattern of titlePatterns) {\n const match = pattern.exec(line);\n if (match) {\n const text = match[1].replaceAll(nonTitleChars, '').trim();\n if (text.length > 0) {\n return text;\n }\n }\n }\n\n // Use line as plain text fallback.\n const maxLen = 32;\n const text = line.replaceAll(nonTitleChars, '').trim();\n if (text.length > 0) {\n if (text.length > maxLen) {\n const words = text.split(/\\s+/);\n let result = '';\n for (const word of words) {\n const next = result.length === 0 ? word : result + ' ' + word;\n if (next.length > maxLen) {\n break;\n }\n result = next;\n }\n\n return result + '…';\n }\n\n return text;\n }\n }\n\n return '';\n};\n\n// TODO(burdon): Option to strip Markdown.\nexport const getContentSnippet = (content = '', maxLines = 3) => {\n const abstract = content\n .split('\\n')\n .filter((line) => !line.startsWith('!'))\n .filter((line) => line.trim() !== '');\n\n return abstract.slice(0, maxLines).join('\\n') ?? '';\n};\n\nexport const setFallbackName = debounce((doc: Markdown.Document, content = '') => {\n const name = getFallbackName(content);\n if (doc.fallbackName !== name) {\n Obj.change(doc, (doc) => {\n doc.fallbackName = name;\n });\n }\n}, 200);\n\nexport const serializer: TypedObjectSerializer<Markdown.Document> = {\n serialize: async ({ object }): Promise<string> => {\n const { content } = await object.content.load();\n return JSON.stringify({ name: object.name, fallbackName: object.fallbackName, content });\n },\n\n deserialize: async ({ content: serialized }) => {\n const { name, fallbackName, content } = JSON.parse(serialized);\n return Markdown.make({ name, fallbackName, content });\n },\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { Annotation, type Obj, Ref } from '@dxos/echo';\nimport { createDocAccessor, getTextInRange } from '@dxos/echo-db';\nimport { Operation } from '@dxos/operation';\nimport { SpaceOperation } from '@dxos/plugin-space/operations';\nimport { type CreateObject } from '@dxos/plugin-space/types';\nimport { translations as editorTranslations } from '@dxos/react-ui-editor';\nimport { Text } from '@dxos/schema';\n\nimport { MarkdownBlueprint } from '#blueprints';\nimport {\n AnchorSort,\n AppGraphSerializer,\n BlueprintDefinition,\n MarkdownSettings,\n MarkdownState,\n OperationHandler,\n ReactSurface,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { MarkdownOperation } from '#operations';\nimport { Markdown, MarkdownEvents } from '#types';\n\nimport { translations } from './translations';\nimport { serializer } from './util';\n\nexport const MarkdownPlugin = Plugin.define(meta).pipe(\n AppPlugin.addBlueprintDefinitionModule({ activate: BlueprintDefinition }),\n AppPlugin.addMetadataModule({\n metadata: {\n id: Markdown.Document.typename,\n metadata: {\n // TODO(dmaretskyi): Remove label, icon and iconHue and query them of schema.\n label: (object: Markdown.Document) => object.name || object.fallbackName,\n icon: Annotation.IconAnnotation.get(Markdown.Document).pipe(Option.getOrThrow).icon,\n iconHue: Annotation.IconAnnotation.get(Markdown.Document).pipe(Option.getOrThrow).hue ?? 'white',\n blueprints: [MarkdownBlueprint.key],\n graphProps: {\n managesAutofocus: true,\n },\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (doc: Markdown.Document) => await Ref.Array.loadAll<Obj.Unknown>([doc.content]),\n serializer,\n // TODO(wittjosiah): Consider how to do generic comments without these.\n comments: 'anchored',\n selectionMode: 'multi-range',\n getAnchorLabel: (doc: Markdown.Document, anchor: string): string | undefined => {\n if (doc.content) {\n const [start, end] = anchor.split(':');\n return getTextInRange(createDocAccessor(doc.content.target!, ['content']), start, end);\n }\n },\n createObject: ((props, options) =>\n Effect.gen(function* () {\n const object = Markdown.make(props);\n return yield* Operation.invoke(SpaceOperation.AddObject, {\n object,\n target: options.target,\n hidden: true,\n targetNodeId: options.targetNodeId,\n });\n })) satisfies CreateObject,\n scrollToAnchor: MarkdownOperation.ScrollToAnchor,\n },\n },\n }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Markdown.Document, Text.Text] }),\n AppPlugin.addSurfaceModule({\n activate: ReactSurface,\n activatesBefore: [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 // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: AppActivationEvents.SetupSettings,\n activate: MarkdownState,\n }),\n Plugin.addModule({\n activatesOn: AppActivationEvents.AppGraphReady,\n activate: AppGraphSerializer,\n }),\n Plugin.addModule({\n // TODO(wittjosiah): More relevant event?\n activatesOn: AppActivationEvents.AppGraphReady,\n activate: AnchorSort,\n }),\n Plugin.make,\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\nimport { translations as editorTranslations } from '@dxos/react-ui-editor';\n\nimport { meta } from '#meta';\nimport { Markdown } from '#types';\n\nexport const translations = [\n {\n 'en-US': {\n [Markdown.Document.typename]: {\n 'typename.label': 'Document',\n 'typename.label_zero': 'Documents',\n 'typename.label_one': 'Document',\n 'typename.label_other': 'Documents',\n 'object-name.placeholder': 'New document',\n 'add-object.label': 'Add document',\n 'rename-object.label': 'Rename document',\n 'delete-object.label': 'Delete document',\n 'object-deleted.label': 'Document deleted',\n },\n [meta.id]: {\n 'plugin.name': 'Editor',\n 'settings.title': 'Editor settings',\n 'choose-markdown-from-space-dialog.title': 'Choose one or more documents to add',\n // TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)\n 'empty-choose-markdown-from-space.message': 'None available; try creating a new one instead?',\n 'chooser-done.label': 'Add selected',\n 'editor.placeholder': 'Start typing…',\n 'editor-input-mode.label': 'Editor input mode',\n 'editor-input-mode.description': 'Choose keyboard bindings for the editor.',\n 'select-editor-input-mode.placeholder': 'Select editor input mode…',\n 'settings.editor-input-mode.default.label': 'Default',\n 'settings.editor-input-mode.vim.label': 'Vim',\n 'settings.editor-input-mode.vscode.label': 'VS Code',\n 'settings.toolbar.label': 'Show toolbar',\n 'settings.toolbar.description': 'Display a formatting toolbar above the editor.',\n 'settings.numbered-headings.label': 'Numbered headings',\n 'settings.numbered-headings.description': 'Automatically number heading levels in the document.',\n 'settings.folding.label': 'Folding',\n 'settings.folding.description': 'Allow collapsing and expanding sections by heading.',\n 'settings.experimental.label': 'Enable experimental features',\n 'settings.experimental.description': 'Turn on features that are still in development.',\n 'settings.debug.label': 'Enable debugging features',\n 'settings.debug.description': 'Show developer tools and diagnostics for the editor.',\n 'settings.debug-typewriter.label': 'Typewriter script',\n 'settings.debug-typewriter.description': 'Script to replay typed input for testing purposes.',\n 'settings.debug-typewriter.placeholder': 'Typewriter script...',\n 'toggle-view-mode.label': 'Toggle read-only',\n 'default-view-mode.label': 'Default view mode',\n 'default-view-mode.description': 'Set whether documents open in editing or read-only mode.',\n 'upload-image.label': 'Upload image',\n 'fallback.title': 'Untitled',\n 'navigate-to-document.label': 'Open document',\n\n 'words.label': 'words',\n 'words.label_zero': 'words',\n 'words.label_one': 'word',\n 'words.label_other': 'words',\n },\n },\n },\n ...editorTranslations,\n] as const satisfies Resource[];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport * from './MarkdownEditor';\n\nexport const MarkdownSettings: ComponentType<any> = lazy(() => import('./MarkdownSettings'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension } from '@codemirror/state';\nimport { type EditorView } from '@codemirror/view';\nimport { type Atom } from '@effect-atom/atom-react';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { Obj } from '@dxos/echo';\nimport { DXN } from '@dxos/keys';\nimport { useClient } from '@dxos/react-client';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport {\n type EditorRootProps,\n type EditorToolbarState,\n createEditorController,\n useEditorContext,\n} from '@dxos/react-ui-editor';\nimport { type PreviewBlock, type PreviewOptions } from '@dxos/ui-editor';\nimport { composable, composableProps } from '@dxos/ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport {\n type DocumentType,\n type ExtensionsOptions,\n type UseEditorMenuOptionsProps,\n useEditorMenuOptions,\n useExtensions,\n} from '#hooks';\n\nimport {\n MarkdownEditorContent as NaturalMarkdownEditorContent,\n type MarkdownEditorContentProps as NaturalMarkdownEditorContentProps,\n} from './MarkdownEditorContent';\nimport {\n MarkdownEditorToolbar as NaturalMarkdownToolbar,\n type MarkdownEditorToolbarProps as NaturalMarkdownToolbarProps,\n} from './MarkdownEditorToolbar';\n\n//\n// Context\n//\n\ntype MarkdownEditorContextValue = {\n id: string;\n attendableId?: string;\n previewBlocks: PreviewBlock[];\n} & Pick<ExtensionsOptions, 'compact' | 'viewMode'> &\n Pick<NaturalMarkdownToolbarProps, 'onAction' | 'onFileUpload' | 'onViewModeChange'>;\n\nconst [MarkdownEditorContextProvider, useMarkdownEditorContext] =\n createContext<MarkdownEditorContextValue>('MarkdownEditor.Context');\n\n/**\n * Props to spread onto `Editor.Root` from `MarkdownEditorProvider`'s render callback.\n */\nexport type MarkdownEditorEditorRootProps = Omit<EditorRootProps, 'children'>;\n\n//\n// MarkdownEditorProvider\n//\n\nexport type MarkdownEditorProviderProps = {\n object?: DocumentType;\n extensions?: Extension[];\n children: (editorRootProps: MarkdownEditorEditorRootProps) => ReactNode;\n} & Pick<\n MarkdownEditorContextValue,\n 'id' | 'attendableId' | 'viewMode' | 'compact' | 'onAction' | 'onFileUpload' | 'onViewModeChange'\n> &\n Pick<UseEditorMenuOptionsProps, 'slashCommandGroups' | 'onLinkQuery'> &\n Pick<ExtensionsOptions, 'editorStateStore' | 'selectionManager' | 'settings' | 'onSelectObject'>;\n\nexport const MarkdownEditorProvider = ({\n children,\n id,\n attendableId,\n object,\n settings,\n compact,\n viewMode,\n selectionManager,\n editorStateStore,\n extensions: extensionsProp,\n slashCommandGroups,\n onLinkQuery,\n onSelectObject,\n onAction,\n onFileUpload,\n onViewModeChange,\n}: MarkdownEditorProviderProps) => {\n // Preview blocks.\n const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);\n const previewOptions = useMemo<PreviewOptions>(\n () => ({\n db: Obj.isObject(object) ? Obj.getDatabase(object) : undefined,\n addBlockContainer: (block) => {\n setPreviewBlocks((prev) => [...prev, block]);\n },\n removeBlockContainer: ({ link }) => {\n setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.dxn !== link.dxn));\n },\n }),\n [object],\n );\n\n // Context menu options (Editor.Root calls useEditorMenu with these props).\n const menuOptions = useEditorMenuOptions({ slashCommandGroups, onLinkQuery });\n\n // Core markdown extensions (popover/menu extension is added by Editor.Root).\n const coreExtensions = useExtensions({\n id,\n object,\n compact,\n viewMode,\n selectionManager,\n editorStateStore,\n previewOptions,\n settings,\n onSelectObject,\n });\n\n const extensions = useMemo(\n () => [coreExtensions, extensionsProp].filter(isNonNullable).flat(),\n [coreExtensions, extensionsProp],\n );\n\n const editorRootProps = useMemo<MarkdownEditorEditorRootProps>(\n () => ({\n extensions,\n viewMode,\n getMenu: menuOptions.getMenu,\n trigger: menuOptions.trigger,\n placeholder: menuOptions.placeholder,\n ...(menuOptions.filter !== undefined ? { filter: menuOptions.filter } : {}),\n ...(menuOptions.triggerKey !== undefined ? { triggerKey: menuOptions.triggerKey } : {}),\n }),\n [extensions, viewMode, menuOptions],\n );\n\n const markdownContextValue = useMemo<MarkdownEditorContextValue>(\n () => ({\n id,\n attendableId,\n compact,\n viewMode,\n previewBlocks,\n onAction,\n onFileUpload,\n onViewModeChange,\n }),\n [id, attendableId, compact, viewMode, previewBlocks, onAction, onFileUpload, onViewModeChange],\n );\n\n return (\n <MarkdownEditorContextProvider {...markdownContextValue}>{children(editorRootProps)}</MarkdownEditorContextProvider>\n );\n};\n\nMarkdownEditorProvider.displayName = 'MarkdownEditor.Provider';\n\n//\n// MarkdownEditor.Content\n//\n\nconst MARKDOWN_EDITOR_CONTENT_NAME = 'MarkdownEditor.Content';\n\ntype MarkdownEditorContentProps = Omit<NaturalMarkdownEditorContentProps, 'id' | 'extensions' | 'toolbarState'>;\n\nconst MarkdownEditorContent = composable<HTMLDivElement, MarkdownEditorContentProps>(({ ...props }, _forwardedRef) => {\n const { id, attendableId, compact, viewMode, onFileUpload } = useMarkdownEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);\n\n const { extensions, setController, state } = useEditorContext(MARKDOWN_EDITOR_CONTENT_NAME);\n\n const handleRef = useCallback(\n (view: EditorView | null) => {\n setController(createEditorController(view));\n },\n [setController],\n );\n\n return (\n <NaturalMarkdownEditorContent\n {...composableProps(props)}\n id={id}\n attendableId={attendableId}\n compact={compact}\n viewMode={viewMode}\n toolbarState={state as Atom.Writable<EditorToolbarState>}\n extensions={extensions}\n onFileUpload={onFileUpload}\n ref={handleRef}\n />\n );\n});\n\nMarkdownEditorContent.displayName = MARKDOWN_EDITOR_CONTENT_NAME;\n\n//\n// MarkdownEditor.Toolbar\n//\n\nconst MARKDOWN_EDITOR_TOOLBAR_NAME = 'MarkdownEditor.Toolbar';\n\ntype MarkdownEditorToolbarProps = ThemedClassName<\n Omit<NaturalMarkdownToolbarProps, 'state' | 'editorView' | 'onAction' | 'onFileUpload' | 'onViewModeChange' | 'id'>\n>;\n\nconst MarkdownEditorToolbar = (props: MarkdownEditorToolbarProps) => {\n const { id, attendableId, onAction, onFileUpload, onViewModeChange } =\n useMarkdownEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);\n\n const { controller, state } = useEditorContext(MARKDOWN_EDITOR_TOOLBAR_NAME);\n\n return (\n <NaturalMarkdownToolbar\n {...props}\n id={attendableId ?? id}\n editorView={controller?.view ?? undefined}\n state={state}\n onAction={onAction}\n onFileUpload={onFileUpload}\n onViewModeChange={onViewModeChange}\n />\n );\n};\n\nMarkdownEditorToolbar.displayName = MARKDOWN_EDITOR_TOOLBAR_NAME;\n\n//\n// MarkdownEditor.Blocks (embedded objects)\n//\n\nconst MARKDOWN_EDITOR_BLOCKS_NAME = 'MarkdownEditor.Blocks';\n\ntype MarkdownEditorBlocksProps = {};\n\nconst MarkdownEditorBlocks = (_props: MarkdownEditorBlocksProps) => {\n const { previewBlocks } = useMarkdownEditorContext(MARKDOWN_EDITOR_BLOCKS_NAME);\n\n return (\n <>\n {previewBlocks.map(({ link, el }) => (\n <PreviewBlock key={link.dxn} link={link} el={el} />\n ))}\n </>\n );\n};\n\nMarkdownEditorBlocks.displayName = MARKDOWN_EDITOR_BLOCKS_NAME;\n\nconst PreviewBlock = ({ el, link }: PreviewBlock) => {\n const client = useClient();\n const dxn = DXN.parse(link.dxn);\n const subject = client.graph.makeRef(dxn).target;\n const data = useMemo(() => ({ subject }), [subject]);\n\n return createPortal(<Surface.Surface role='card--content' data={data} limit={1} />, el);\n};\n\n//\n// MarkdownEditor\n//\n\n/** @private */\nexport const MarkdownEditor = {\n Content: MarkdownEditorContent,\n Toolbar: MarkdownEditorToolbar,\n Blocks: MarkdownEditorBlocks,\n};\n\nexport type { MarkdownEditorContentProps, MarkdownEditorToolbarProps, MarkdownEditorBlocksProps };\n\n/** @deprecated Use `MarkdownEditorProviderProps`. */\nexport type MarkdownEditorRootProps = MarkdownEditorProviderProps;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport { type Atom, RegistryContext } from '@effect-atom/atom-react';\nimport React, { forwardRef, useCallback, useContext, useEffect, useImperativeHandle, useMemo } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework/ui';\nimport { type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n type EditorMenuGroup,\n type EditorToolbarState,\n type UseTextEditorProps,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport {\n type EditorSelectionState,\n type EditorStateStore,\n type EditorViewMode,\n type ThemeExtensionsOptions,\n compactSlots,\n createBasicExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n dropFile,\n documentSlots,\n formattingListener,\n processEditorPayload,\n editorClassNames,\n} from '@dxos/ui-editor';\nimport { mx } from '@dxos/ui-theme';\nimport { isTruthy } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { MarkdownCapabilities } from '#types';\n\nimport { type MarkdownEditorToolbarProps } from './MarkdownEditorToolbar';\n\nexport type MarkdownEditorContentProps = ThemedClassName<{\n id: string;\n attendableId?: string;\n role?: string;\n compact?: boolean;\n viewMode?: EditorViewMode;\n slashCommandGroups?: EditorMenuGroup[];\n editorStateStore?: EditorStateStore;\n toolbarState?: Atom.Writable<EditorToolbarState>;\n onLinkQuery?: (query?: string) => Promise<EditorMenuGroup[]>;\n}> &\n Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &\n Pick<MarkdownEditorToolbarProps, 'onFileUpload'> &\n Pick<ThemeExtensionsOptions, 'slots'>;\n\n// TODO(burdon): Move controller to Root.\nexport const MarkdownEditorContent = forwardRef<EditorView | null, MarkdownEditorContentProps>(\n (\n {\n classNames,\n id,\n attendableId,\n role,\n compact,\n viewMode,\n initialValue,\n editorStateStore,\n toolbarState,\n extensions,\n slots,\n onFileUpload,\n },\n forwardedRef,\n ) => {\n const { t } = useTranslation(meta.id);\n const { themeMode } = useThemeContext();\n const registry = useContext(RegistryContext);\n\n // Callback to update toolbar state atom.\n const updateToolbarState = useCallback(\n (formatting: EditorToolbarState) => {\n if (toolbarState) {\n registry.set(toolbarState, { ...registry.get(toolbarState), ...formatting });\n }\n },\n [registry, toolbarState],\n );\n\n // Restore last selection and scroll point.\n const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);\n\n const {\n parentRef,\n view: editorView,\n focusAttributes,\n } = useTextEditor(\n () => ({\n ...(role !== 'section' && {\n id,\n scrollTo,\n selection,\n selectionEnd: true,\n }),\n initialValue,\n extensions: [\n createBasicExtensions({\n readOnly: viewMode === 'readonly',\n placeholder: t('editor.placeholder'),\n scrollPastEnd: !compact,\n search: true,\n }),\n createThemeExtensions({\n themeMode,\n slots: slots ?? (compact ? compactSlots : documentSlots),\n syntaxHighlighting: true,\n }),\n createMarkdownExtensions(),\n toolbarState && formattingListener(updateToolbarState),\n role !== 'section' &&\n onFileUpload &&\n dropFile({\n // TODO(wittjosiah): Factor out to file uploader plugin.\n onDrop: async (view, { files }) => {\n const file = files[0];\n const info = file && onFileUpload ? await onFileUpload(file) : undefined;\n if (info) {\n processEditorPayload(view, { type: 'image', data: info.url });\n }\n },\n }),\n extensions,\n ].filter(isTruthy),\n }),\n [id, viewMode, themeMode, extensions],\n );\n\n useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => editorView, [editorView]);\n\n const [editorViewRegistry] = useCapabilities(MarkdownCapabilities.EditorViews);\n useEffect(() => {\n if (editorView && editorViewRegistry) {\n editorViewRegistry.register(attendableId ?? id, editorView, id);\n return () => editorViewRegistry.unregister(attendableId ?? id);\n }\n }, [editorView, editorViewRegistry, attendableId, id]);\n\n useTest(editorView);\n\n return (\n <div\n {...focusAttributes}\n className={mx(editorClassNames(role), classNames)}\n role='none'\n data-testid='composer.markdownRoot'\n data-popover-collision-boundary={true}\n ref={parentRef}\n />\n );\n },\n);\n\n// Expose editor view for playwright tests.\n// TODO(wittjosiah): Find a better way to expose this or find a way to limit it to test runs.\nconst useTest = (view: EditorView | null) => {\n useEffect(() => {\n const composer = (window as any).composer;\n if (composer) {\n composer.editorView = view;\n }\n }, [view]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport React, { useCallback, useState } from 'react';\n\nimport { type FileInfo } from '@dxos/app-toolkit';\nimport { invariant } from '@dxos/invariant';\nimport { EditorToolbar, type EditorToolbarProps } from '@dxos/react-ui-editor';\nimport { composable, composableProps } from '@dxos/ui-theme';\n\nimport { FileUpload, type FileUploadAction } from './FileUpload';\n\nexport type MarkdownEditorToolbarProps = {\n id: string;\n editorView?: EditorView;\n onFileUpload?: (file: File) => Promise<FileInfo | undefined>;\n} & Pick<EditorToolbarProps, 'role' | 'state' | 'customActions' | 'onAction' | 'onViewModeChange'>;\n\nexport const MarkdownEditorToolbar = composable<HTMLDivElement, MarkdownEditorToolbarProps>(\n (\n { id, role, state, editorView, customActions, onAction, onFileUpload, onViewModeChange, ...props },\n forwardedRef,\n ) => {\n const { className, ...rest } = composableProps(props);\n const [upload, setUpload] = useState<FileUploadAction | null>(null);\n const uploadRef = useCallback((next: FileUploadAction) => setUpload(() => next), []);\n\n const getView = useCallback(() => {\n invariant(editorView);\n return editorView;\n }, [editorView]);\n\n if (!editorView) {\n return <div className={className} {...rest} ref={forwardedRef} />;\n }\n\n return (\n <div role='none' className='contents' ref={forwardedRef}>\n <EditorToolbar\n {...rest}\n classNames={className}\n attendableId={id}\n role={role}\n state={state}\n customActions={customActions}\n getView={getView}\n onAction={onAction}\n onImageUpload={upload ?? undefined}\n onViewModeChange={onViewModeChange}\n />\n\n {onFileUpload && <FileUpload ref={uploadRef} editorView={editorView} onFileUpload={onFileUpload} />}\n </div>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport React, { forwardRef, useEffect, useImperativeHandle } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useDropzone } from 'react-dropzone';\n\nimport { type FileInfo } from '@dxos/app-toolkit';\nimport { addLink } from '@dxos/ui-editor';\n\nexport const IMAGE_FILES = ['.jpg', '.jpeg', '.png', '.gif'];\n\nexport type FileUploadAction = () => void;\n\nexport type FileUploadProps = {\n editorView?: EditorView;\n onFileUpload?: (file: File) => Promise<FileInfo | undefined>;\n};\n\n// TODO(burdon): Factor out.\n// TODO(burdon): Move to root? (support drag into document via dropzone).\nexport const FileUpload = forwardRef<FileUploadAction, FileUploadProps>(\n ({ editorView, onFileUpload }, forwardedRef) => {\n // https://react-dropzone.js.org\n const { acceptedFiles, open, inputRef } = useDropzone({\n disabled: !onFileUpload,\n multiple: false,\n noDrag: true,\n accept: {\n 'image/*': IMAGE_FILES,\n },\n });\n\n useImperativeHandle(forwardedRef, () => open, []);\n\n useEffect(() => {\n if (editorView && acceptedFiles.length && onFileUpload) {\n requestAnimationFrame(async () => {\n // NOTE: Clone file since react-dropzone patches in a non-standard `path` property, which confuses IPFS.\n const f = acceptedFiles[0];\n const file = new File([f], f.name, {\n type: f.type,\n lastModified: f.lastModified,\n });\n\n // TODO(burdon): Factor out.\n const info = await onFileUpload(file);\n if (info) {\n addLink({ url: info.url, image: true })(editorView);\n }\n });\n }\n }, [editorView, acceptedFiles, onFileUpload]);\n\n if (!onFileUpload) {\n return null;\n }\n\n return <>{createPortal(<input ref={inputRef} />, document.body)} </>;\n },\n);\n"],
5
- "mappings": "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",
6
- "names": ["trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "screenshots", "debounce", "Obj", "Markdown", "isEditorModel", "data", "id", "text", "isMarkdownProperties", "Obj", "isObject", "title", "nonTitleChars", "skipPatterns", "titlePatterns", "getFallbackName", "content", "len", "length", "i", "lineEnd", "line", "slice", "trim", "some", "pattern", "test", "match", "exec", "replaceAll", "maxLen", "words", "split", "result", "word", "next", "getContentSnippet", "maxLines", "abstract", "filter", "startsWith", "join", "setFallbackName", "debounce", "doc", "name", "fallbackName", "change", "serializer", "serialize", "object", "load", "JSON", "stringify", "deserialize", "serialized", "parse", "Markdown", "make", "Effect", "Option", "Plugin", "AppActivationEvents", "AppPlugin", "Annotation", "Ref", "createDocAccessor", "getTextInRange", "Operation", "SpaceOperation", "translations", "editorTranslations", "Text", "MarkdownBlueprint", "AnchorSort", "AppGraphSerializer", "BlueprintDefinition", "MarkdownSettings", "MarkdownState", "OperationHandler", "ReactSurface", "meta", "MarkdownOperation", "Markdown", "MarkdownEvents", "translations", "editorTranslations", "meta", "Markdown", "translations", "Markdown", "Document", "typename", "meta", "id", "editorTranslations", "MarkdownPlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addBlueprintDefinitionModule", "activate", "BlueprintDefinition", "addMetadataModule", "metadata", "id", "Markdown", "Document", "typename", "label", "object", "name", "fallbackName", "icon", "Annotation", "IconAnnotation", "get", "getOrThrow", "iconHue", "hue", "blueprints", "MarkdownBlueprint", "key", "graphProps", "managesAutofocus", "loadReferences", "doc", "Ref", "Array", "loadAll", "content", "serializer", "comments", "selectionMode", "getAnchorLabel", "anchor", "start", "end", "split", "getTextInRange", "createDocAccessor", "target", "createObject", "props", "options", "gen", "make", "Operation", "invoke", "SpaceOperation", "AddObject", "hidden", "targetNodeId", "scrollToAnchor", "MarkdownOperation", "ScrollToAnchor", "addOperationHandlerModule", "OperationHandler", "addSchemaModule", "schema", "Text", "addSurfaceModule", "ReactSurface", "activatesBefore", "MarkdownEvents", "SetupExtensions", "addTranslationsModule", "translations", "editorTranslations", "addModule", "activatesOn", "AppActivationEvents", "SetupSettings", "MarkdownSettings", "MarkdownState", "AppGraphReady", "AppGraphSerializer", "AnchorSort", "lazy", "createContext", "React", "useCallback", "useMemo", "useState", "createPortal", "Surface", "Obj", "DXN", "useClient", "createEditorController", "useEditorContext", "composable", "composableProps", "isNonNullable", "useEditorMenuOptions", "useExtensions", "RegistryContext", "React", "forwardRef", "useCallback", "useContext", "useEffect", "useImperativeHandle", "useMemo", "useCapabilities", "useThemeContext", "useTranslation", "useTextEditor", "compactSlots", "createBasicExtensions", "createMarkdownExtensions", "createThemeExtensions", "dropFile", "documentSlots", "formattingListener", "processEditorPayload", "editorClassNames", "mx", "isTruthy", "meta", "MarkdownCapabilities", "MarkdownEditorContent", "forwardRef", "classNames", "id", "attendableId", "role", "compact", "viewMode", "initialValue", "editorStateStore", "toolbarState", "extensions", "slots", "onFileUpload", "forwardedRef", "t", "useTranslation", "meta", "themeMode", "useThemeContext", "registry", "useContext", "RegistryContext", "updateToolbarState", "useCallback", "formatting", "set", "get", "scrollTo", "selection", "useMemo", "getState", "parentRef", "view", "editorView", "focusAttributes", "useTextEditor", "selectionEnd", "createBasicExtensions", "readOnly", "placeholder", "scrollPastEnd", "search", "createThemeExtensions", "compactSlots", "documentSlots", "syntaxHighlighting", "createMarkdownExtensions", "formattingListener", "dropFile", "onDrop", "files", "file", "info", "undefined", "processEditorPayload", "type", "data", "url", "filter", "isTruthy", "useImperativeHandle", "editorViewRegistry", "useCapabilities", "MarkdownCapabilities", "EditorViews", "useEffect", "register", "unregister", "useTest", "div", "className", "mx", "editorClassNames", "data-testid", "data-popover-collision-boundary", "ref", "composer", "window", "React", "useCallback", "useState", "invariant", "EditorToolbar", "composable", "composableProps", "React", "forwardRef", "useEffect", "useImperativeHandle", "createPortal", "useDropzone", "addLink", "IMAGE_FILES", "FileUpload", "forwardRef", "editorView", "onFileUpload", "forwardedRef", "acceptedFiles", "open", "inputRef", "useDropzone", "disabled", "multiple", "noDrag", "accept", "useImperativeHandle", "useEffect", "length", "requestAnimationFrame", "f", "file", "File", "name", "type", "lastModified", "info", "addLink", "url", "image", "React", "createPortal", "input", "ref", "document", "body", "MarkdownEditorToolbar", "composable", "id", "role", "state", "editorView", "customActions", "onAction", "onFileUpload", "onViewModeChange", "props", "forwardedRef", "className", "rest", "composableProps", "upload", "setUpload", "useState", "uploadRef", "useCallback", "next", "getView", "invariant", "React", "div", "ref", "EditorToolbar", "classNames", "attendableId", "onImageUpload", "undefined", "FileUpload", "MarkdownEditorContextProvider", "useMarkdownEditorContext", "createContext", "MarkdownEditorProvider", "children", "id", "attendableId", "object", "settings", "compact", "viewMode", "selectionManager", "editorStateStore", "extensions", "extensionsProp", "slashCommandGroups", "onLinkQuery", "onSelectObject", "onAction", "onFileUpload", "onViewModeChange", "previewBlocks", "setPreviewBlocks", "useState", "previewOptions", "useMemo", "db", "Obj", "isObject", "getDatabase", "undefined", "addBlockContainer", "block", "prev", "removeBlockContainer", "link", "filter", "prevLink", "dxn", "menuOptions", "useEditorMenuOptions", "coreExtensions", "useExtensions", "isNonNullable", "flat", "editorRootProps", "getMenu", "trigger", "placeholder", "triggerKey", "markdownContextValue", "React", "displayName", "MARKDOWN_EDITOR_CONTENT_NAME", "MarkdownEditorContent", "composable", "props", "_forwardedRef", "setController", "state", "useEditorContext", "handleRef", "useCallback", "view", "createEditorController", "NaturalMarkdownEditorContent", "composableProps", "toolbarState", "ref", "MARKDOWN_EDITOR_TOOLBAR_NAME", "MarkdownEditorToolbar", "controller", "NaturalMarkdownToolbar", "editorView", "MARKDOWN_EDITOR_BLOCKS_NAME", "MarkdownEditorBlocks", "_props", "map", "el", "PreviewBlock", "key", "client", "useClient", "DXN", "parse", "subject", "graph", "makeRef", "target", "data", "createPortal", "Surface", "role", "limit", "MarkdownEditor", "Content", "Toolbar", "Blocks", "MarkdownSettings", "lazy"]
3
+ "sources": ["../../../src/index.ts", "../../../src/meta.ts", "../../../src/util.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\n\nimport { meta } from './meta';\n\nexport { MarkdownCapabilities, MarkdownEvents } from './types';\n\nexport * from './meta';\nexport * from './types';\nexport * from './util';\n\nexport const MarkdownPlugin = Plugin.lazy(meta, () => import('#plugin'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.markdown',\n name: 'Markdown',\n description: trim`\n Full-featured collaborative markdown editor with real-time editing, inline comments, and rich formatting.\n Supports AI-powered editing assistance and seamlessly integrates with other workspace objects.\n `,\n icon: 'ph--text-aa--regular',\n iconHue: 'indigo',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',\n screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { debounce } from '@dxos/async';\nimport { Obj } from '@dxos/echo';\nimport { type TypedObjectSerializer } from '@dxos/plugin-space/types';\n\nimport { Markdown } from '#types';\n\n/**\n * Checks if an object conforms to the interface needed to render an editor.\n * @deprecated Use Schema.instanceOf(Markdown.Document, data)\n */\n// TODO(burdon): Normalize types (from FilesPlugin).\nexport const isEditorModel = (data: any): data is { id: string; text: string } =>\n data &&\n typeof data === 'object' &&\n 'id' in data &&\n typeof data.id === 'string' &&\n 'text' in data &&\n typeof data.text === 'string';\n\nexport type MarkdownProperties = Record<string, any>;\n\nexport const isMarkdownProperties = (data: unknown): data is MarkdownProperties =>\n (Obj.isObject(data) as boolean)\n ? true\n : data && typeof data === 'object'\n ? 'title' in data && typeof data.title === 'string'\n : false;\n\nconst nonTitleChars = /[^\\w ]/g;\n\n// Lines matching these patterns are skipped.\nconst skipPatterns = [\n /^!\\[/, // Image.\n /^---\\s*$/, // Horizontal rule.\n /^```/, // Code block fence.\n /^\\s*$/, // Empty or whitespace-only.\n];\n\n// Patterns to extract title text (first capture group is used).\nconst titlePatterns = [\n /^#{1,6}\\s+(.+)/, // Heading.\n];\n\n/**\n * Extracts a fallback name by scanning lines for the first heading or text fragment.\n */\nexport const getFallbackName = (content = ''): string => {\n const len = content.length;\n\n let i = 0;\n while (i < len) {\n // Find end of line.\n let lineEnd = i;\n while (lineEnd < len && content[lineEnd] !== '\\n') {\n lineEnd++;\n }\n\n const line = content.slice(i, lineEnd).trim();\n i = lineEnd + 1;\n\n // Skip lines matching skip patterns.\n if (skipPatterns.some((pattern) => pattern.test(line))) {\n continue;\n }\n\n // Check for title patterns.\n for (const pattern of titlePatterns) {\n const match = pattern.exec(line);\n if (match) {\n const text = match[1].replaceAll(nonTitleChars, '').trim();\n if (text.length > 0) {\n return text;\n }\n }\n }\n\n // Use line as plain text fallback.\n const maxLen = 32;\n const text = line.replaceAll(nonTitleChars, '').trim();\n if (text.length > 0) {\n if (text.length > maxLen) {\n const words = text.split(/\\s+/);\n let result = '';\n for (const word of words) {\n const next = result.length === 0 ? word : result + ' ' + word;\n if (next.length > maxLen) {\n break;\n }\n result = next;\n }\n\n return result + '…';\n }\n\n return text;\n }\n }\n\n return '';\n};\n\n// TODO(burdon): Option to strip Markdown.\nexport const getContentSnippet = (content = '', maxLines = 3) => {\n const abstract = content\n .split('\\n')\n .filter((line) => !line.startsWith('!'))\n .filter((line) => line.trim() !== '');\n\n return abstract.slice(0, maxLines).join('\\n') ?? '';\n};\n\nexport const setFallbackName = debounce((doc: Markdown.Document, content = '') => {\n const name = getFallbackName(content);\n if (doc.fallbackName !== name) {\n Obj.update(doc, (doc) => {\n doc.fallbackName = name;\n });\n }\n}, 200);\n\nexport const serializer: TypedObjectSerializer<Markdown.Document> = {\n serialize: async ({ object }): Promise<string> => {\n const { content } = await object.content.load();\n return JSON.stringify({ name: object.name, fallbackName: object.fallbackName, content });\n },\n\n deserialize: async ({ content: serialized }) => {\n const { name, fallbackName, content } = JSON.parse(serialized);\n return Markdown.make({ name, fallbackName, content });\n },\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Plugin", "trim", "meta", "id", "name", "description", "icon", "iconHue", "source", "screenshots", "debounce", "Obj", "Markdown", "isEditorModel", "data", "id", "text", "isMarkdownProperties", "isObject", "title", "nonTitleChars", "skipPatterns", "titlePatterns", "getFallbackName", "content", "len", "length", "i", "lineEnd", "line", "slice", "trim", "some", "pattern", "test", "match", "exec", "replaceAll", "maxLen", "words", "split", "result", "word", "next", "getContentSnippet", "maxLines", "abstract", "filter", "startsWith", "join", "setFallbackName", "doc", "name", "fallbackName", "update", "serializer", "serialize", "object", "load", "JSON", "stringify", "deserialize", "serialized", "parse", "make", "MarkdownPlugin", "Plugin", "lazy", "meta"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/types/capabilities.ts":{"bytes":4845,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"format":"esm"},"src/types/events.ts":{"bytes":1461,"imports":[{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"format":"esm"},"src/types/types.ts":{"bytes":1477,"imports":[],"format":"esm"},"src/types/Settings.ts":{"bytes":2935,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/ui-editor/types","kind":"import-statement","external":true}],"format":"esm"},"src/types/Markdown.ts":{"bytes":5623,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/types/Settings.ts","kind":"import-statement","original":"./Settings"}],"format":"esm"},"src/types/index.ts":{"bytes":948,"imports":[{"path":"src/types/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"src/types/events.ts","kind":"import-statement","original":"./events"},{"path":"src/types/types.ts","kind":"import-statement","original":"./types"},{"path":"src/types/Markdown.ts","kind":"import-statement","original":"./Markdown"},{"path":"src/types/Settings.ts","kind":"import-statement","original":"./Settings"}],"format":"esm"},"src/meta.ts":{"bytes":2150,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/util.tsx":{"bytes":12885,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"format":"esm"},"src/translations.ts":{"bytes":9464,"imports":[{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"format":"esm"},"src/MarkdownPlugin.tsx":{"bytes":14375,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"#blueprints","kind":"import-statement","external":true},{"path":"#capabilities","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#operations","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true},{"path":"src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"src/util.tsx","kind":"import-statement","original":"./util"}],"format":"esm"},"src/components/MarkdownEditor/MarkdownEditorContent.tsx":{"bytes":16462,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"format":"esm"},"src/components/MarkdownEditor/FileUpload.tsx":{"bytes":6724,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"react-dropzone","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true}],"format":"esm"},"src/components/MarkdownEditor/MarkdownEditorToolbar.tsx":{"bytes":6510,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/MarkdownEditor/FileUpload.tsx","kind":"import-statement","original":"./FileUpload"}],"format":"esm"},"src/components/MarkdownEditor/MarkdownEditor.tsx":{"bytes":24680,"imports":[{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#hooks","kind":"import-statement","external":true},{"path":"src/components/MarkdownEditor/MarkdownEditorContent.tsx","kind":"import-statement","original":"./MarkdownEditorContent"},{"path":"src/components/MarkdownEditor/MarkdownEditorToolbar.tsx","kind":"import-statement","original":"./MarkdownEditorToolbar"}],"format":"esm"},"src/components/MarkdownEditor/index.ts":{"bytes":503,"imports":[{"path":"src/components/MarkdownEditor/MarkdownEditor.tsx","kind":"import-statement","original":"./MarkdownEditor"}],"format":"esm"},"src/components/MarkdownSettings/MarkdownSettings.tsx":{"bytes":18116,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"format":"esm"},"src/components/MarkdownSettings/index.ts":{"bytes":641,"imports":[{"path":"src/components/MarkdownSettings/MarkdownSettings.tsx","kind":"import-statement","original":"./MarkdownSettings"}],"format":"esm"},"src/components/index.ts":{"bytes":930,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/components/MarkdownEditor/index.ts","kind":"import-statement","original":"./MarkdownEditor"},{"path":"src/components/MarkdownSettings/index.ts","kind":"dynamic-import","original":"./MarkdownSettings"}],"format":"esm"},"src/index.ts":{"bytes":1345,"imports":[{"path":"src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"src/util.tsx","kind":"import-statement","original":"./util"},{"path":"src/MarkdownPlugin.tsx","kind":"import-statement","original":"./MarkdownPlugin"},{"path":"src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/operations/definitions.ts":{"bytes":13074,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/ui-editor/types","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"src/blueprints/markdown-blueprint.ts":{"bytes":4314,"imports":[{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"../operations/definitions"}],"format":"esm"},"src/blueprints/index.ts":{"bytes":635,"imports":[{"path":"src/blueprints/markdown-blueprint.ts","kind":"import-statement","original":"./markdown-blueprint"}],"format":"esm"},"src/cli/plugin.ts":{"bytes":4721,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"#capabilities","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"format":"esm"},"src/cli/index.ts":{"bytes":461,"imports":[{"path":"src/cli/plugin.ts","kind":"import-statement","original":"./plugin"}],"format":"esm"},"src/operations/create.ts":{"bytes":2568,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/create-markdown.ts":{"bytes":1902,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/open.ts":{"bytes":2188,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/scroll-to-anchor.ts":{"bytes":5277,"imports":[{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/set-view-mode.ts":{"bytes":2608,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/update.ts":{"bytes":6271,"imports":[{"path":"@automerge/automerge","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/index.ts":{"bytes":1658,"imports":[{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"},{"path":"src/operations/create.ts","kind":"dynamic-import","original":"./create"},{"path":"src/operations/create-markdown.ts","kind":"dynamic-import","original":"./create-markdown"},{"path":"src/operations/open.ts","kind":"dynamic-import","original":"./open"},{"path":"src/operations/scroll-to-anchor.ts","kind":"dynamic-import","original":"./scroll-to-anchor"},{"path":"src/operations/set-view-mode.ts","kind":"dynamic-import","original":"./set-view-mode"},{"path":"src/operations/update.ts","kind":"dynamic-import","original":"./update"}],"format":"esm"}},"outputs":{"dist/lib/browser/open-N6PAX6DY.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1156},"dist/lib/browser/open-N6PAX6DY.mjs":{"imports":[{"path":"dist/lib/browser/chunk-XKUKZNUS.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/open.ts","inputs":{"src/operations/open.ts":{"bytesInOutput":380}},"bytes":597},"dist/lib/browser/scroll-to-anchor-5M4F24AB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2743},"dist/lib/browser/scroll-to-anchor-5M4F24AB.mjs":{"imports":[{"path":"dist/lib/browser/chunk-XKUKZNUS.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/scroll-to-anchor.ts","inputs":{"src/operations/scroll-to-anchor.ts":{"bytesInOutput":1110}},"bytes":1405},"dist/lib/browser/set-view-mode-NBNF2I5W.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1318},"dist/lib/browser/set-view-mode-NBNF2I5W.mjs":{"imports":[{"path":"dist/lib/browser/chunk-XKUKZNUS.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/set-view-mode.ts","inputs":{"src/operations/set-view-mode.ts":{"bytesInOutput":458}},"bytes":741},"dist/lib/browser/update-5QIRVGTL.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3326},"dist/lib/browser/update-5QIRVGTL.mjs":{"imports":[{"path":"dist/lib/browser/chunk-XKUKZNUS.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@automerge/automerge","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/update.ts","inputs":{"src/operations/update.ts":{"bytesInOutput":1345}},"bytes":1570},"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":48871},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"#blueprints","kind":"import-statement","external":true},{"path":"#capabilities","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#operations","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#hooks","kind":"import-statement","external":true},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"react-dropzone","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true},{"path":"dist/lib/browser/MarkdownSettings-YZFNSJJY.mjs","kind":"dynamic-import"}],"exports":["Markdown","MarkdownCapabilities","MarkdownEditor","MarkdownEditorProvider","MarkdownEvents","MarkdownPlugin","MarkdownStateSchema","Settings","getContentSnippet","getFallbackName","isEditorModel","isMarkdownProperties","meta","serializer","setFallbackName"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0},"src/meta.ts":{"bytesInOutput":559},"src/util.tsx":{"bytesInOutput":2584},"src/MarkdownPlugin.tsx":{"bytesInOutput":3558},"src/translations.ts":{"bytesInOutput":3113},"src/components/index.ts":{"bytesInOutput":109},"src/components/MarkdownEditor/MarkdownEditor.tsx":{"bytesInOutput":5239},"src/components/MarkdownEditor/MarkdownEditorContent.tsx":{"bytesInOutput":3550},"src/components/MarkdownEditor/MarkdownEditorToolbar.tsx":{"bytesInOutput":1582},"src/components/MarkdownEditor/FileUpload.tsx":{"bytesInOutput":1449},"src/components/MarkdownEditor/index.ts":{"bytesInOutput":0}},"bytes":22779},"dist/lib/browser/blueprints/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2079},"dist/lib/browser/blueprints/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-XKUKZNUS.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["MarkdownBlueprint"],"entryPoint":"src/blueprints/index.ts","inputs":{"src/blueprints/markdown-blueprint.ts":{"bytesInOutput":1123},"src/blueprints/index.ts":{"bytesInOutput":0}},"bytes":1393},"dist/lib/browser/cli/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2516},"dist/lib/browser/cli/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"#capabilities","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"exports":["MarkdownPlugin"],"entryPoint":"src/cli/index.ts","inputs":{"src/cli/plugin.ts":{"bytesInOutput":1041},"src/cli/index.ts":{"bytesInOutput":0}},"bytes":1159},"dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/types/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"}],"exports":["Markdown","MarkdownCapabilities","MarkdownEvents","MarkdownStateSchema","Settings"],"entryPoint":"src/types/index.ts","inputs":{},"bytes":352},"dist/lib/browser/operations/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":823},"dist/lib/browser/operations/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-XKUKZNUS.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"dist/lib/browser/create-HSXPXCC5.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/create-markdown-WB7DH3UF.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/open-N6PAX6DY.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/scroll-to-anchor-5M4F24AB.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/set-view-mode-NBNF2I5W.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/update-5QIRVGTL.mjs","kind":"dynamic-import"}],"exports":["MarkdownOperation","MarkdownOperationHandlerSet"],"entryPoint":"src/operations/index.ts","inputs":{"src/operations/index.ts":{"bytesInOutput":379}},"bytes":655},"dist/lib/browser/MarkdownSettings-YZFNSJJY.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":9438},"dist/lib/browser/MarkdownSettings-YZFNSJJY.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/components/MarkdownSettings/index.ts","inputs":{"src/components/MarkdownSettings/MarkdownSettings.tsx":{"bytesInOutput":4978},"src/components/MarkdownSettings/index.ts":{"bytesInOutput":0}},"bytes":5163},"dist/lib/browser/create-HSXPXCC5.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1352},"dist/lib/browser/create-HSXPXCC5.mjs":{"imports":[{"path":"dist/lib/browser/chunk-XKUKZNUS.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create.ts","inputs":{"src/operations/create.ts":{"bytesInOutput":465}},"bytes":718},"dist/lib/browser/create-markdown-WB7DH3UF.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":958},"dist/lib/browser/create-markdown-WB7DH3UF.mjs":{"imports":[{"path":"dist/lib/browser/chunk-XKUKZNUS.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create-markdown.ts","inputs":{"src/operations/create-markdown.ts":{"bytesInOutput":288}},"bytes":576},"dist/lib/browser/chunk-XKUKZNUS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6307},"dist/lib/browser/chunk-XKUKZNUS.mjs":{"imports":[{"path":"dist/lib/browser/chunk-46WIDM4R.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/ui-editor/types","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"exports":["Create","CreateMarkdown","Open","ScrollToAnchor","SetViewMode","Update","definitions_exports"],"inputs":{"src/operations/definitions.ts":{"bytesInOutput":3668}},"bytes":3970},"dist/lib/browser/chunk-46WIDM4R.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7701},"dist/lib/browser/chunk-46WIDM4R.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/ui-editor/types","kind":"import-statement","external":true}],"exports":["MarkdownCapabilities","MarkdownEvents","MarkdownStateSchema","Markdown_exports","Settings_exports"],"inputs":{"src/types/capabilities.ts":{"bytesInOutput":825},"src/types/index.ts":{"bytesInOutput":0},"src/types/events.ts":{"bytesInOutput":302},"src/types/Markdown.ts":{"bytesInOutput":1157},"src/types/Settings.ts":{"bytesInOutput":675}},"bytes":3303},"dist/lib/browser/chunk-J5LGTIGS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/chunk-J5LGTIGS.mjs":{"imports":[],"exports":["__export"],"inputs":{},"bytes":235}}}
1
+ {"inputs":{"src/meta.ts":{"bytes":2068,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/types/capabilities.ts":{"bytes":4801,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"format":"esm"},"src/types/events.ts":{"bytes":1371,"imports":[{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"format":"esm"},"src/types/types.ts":{"bytes":1436,"imports":[],"format":"esm"},"src/types/Settings.ts":{"bytes":5862,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/ui-editor/types","kind":"import-statement","external":true}],"format":"esm"},"src/types/Markdown.ts":{"bytes":5527,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/types/Settings.ts","kind":"import-statement","original":"./Settings"}],"format":"esm"},"src/types/index.ts":{"bytes":859,"imports":[{"path":"src/types/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"src/types/events.ts","kind":"import-statement","original":"./events"},{"path":"src/types/types.ts","kind":"import-statement","original":"./types"},{"path":"src/types/Markdown.ts","kind":"import-statement","original":"./Markdown"},{"path":"src/types/Settings.ts","kind":"import-statement","original":"./Settings"}],"format":"esm"},"src/util.tsx":{"bytes":12802,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":1366,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"src/util.tsx","kind":"import-statement","original":"./util"},{"path":"#plugin","kind":"dynamic-import","external":true}],"format":"esm"},"src/operations/definitions.ts":{"bytes":12968,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/ui-editor/types","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"src/blueprints/markdown-blueprint.ts":{"bytes":4100,"imports":[{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"../operations/definitions"}],"format":"esm"},"src/blueprints/index.ts":{"bytes":537,"imports":[{"path":"src/blueprints/markdown-blueprint.ts","kind":"import-statement","original":"./markdown-blueprint"}],"format":"esm"},"src/operations/create.ts":{"bytes":2467,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/create-markdown.ts":{"bytes":1792,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/open.ts":{"bytes":2089,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/scroll-to-anchor.ts":{"bytes":5166,"imports":[{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/set-view-mode.ts":{"bytes":2500,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/update-markdown.ts":{"bytes":6182,"imports":[{"path":"@automerge/automerge","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/index.ts":{"bytes":1579,"imports":[{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"},{"path":"src/operations/create.ts","kind":"dynamic-import","original":"./create"},{"path":"src/operations/create-markdown.ts","kind":"dynamic-import","original":"./create-markdown"},{"path":"src/operations/open.ts","kind":"dynamic-import","original":"./open"},{"path":"src/operations/scroll-to-anchor.ts","kind":"dynamic-import","original":"./scroll-to-anchor"},{"path":"src/operations/set-view-mode.ts","kind":"dynamic-import","original":"./set-view-mode"},{"path":"src/operations/update-markdown.ts","kind":"dynamic-import","original":"./update-markdown"}],"format":"esm"}},"outputs":{"dist/lib/browser/set-view-mode-2S7KKY7C.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1315},"dist/lib/browser/set-view-mode-2S7KKY7C.mjs":{"imports":[{"path":"dist/lib/browser/chunk-DNSKDWUL.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/set-view-mode.ts","inputs":{"src/operations/set-view-mode.ts":{"bytesInOutput":456}},"bytes":708},"dist/lib/browser/update-markdown-CPM5KOQW.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3332},"dist/lib/browser/update-markdown-CPM5KOQW.mjs":{"imports":[{"path":"dist/lib/browser/chunk-DNSKDWUL.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"@automerge/automerge","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/update-markdown.ts","inputs":{"src/operations/update-markdown.ts":{"bytesInOutput":1352}},"bytes":1573},"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8051},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true},{"path":"#plugin","kind":"dynamic-import","external":true}],"exports":["Markdown","MarkdownCapabilities","MarkdownEvents","MarkdownPlugin","MarkdownStateSchema","Settings","getContentSnippet","getFallbackName","isEditorModel","isMarkdownProperties","meta","serializer","setFallbackName"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":111},"src/meta.ts":{"bytesInOutput":559},"src/util.tsx":{"bytesInOutput":2584}},"bytes":3780},"dist/lib/browser/blueprints/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2001},"dist/lib/browser/blueprints/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-DNSKDWUL.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["MarkdownBlueprint"],"entryPoint":"src/blueprints/index.ts","inputs":{"src/blueprints/markdown-blueprint.ts":{"bytesInOutput":1120},"src/blueprints/index.ts":{"bytesInOutput":0}},"bytes":1358},"dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/types/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"}],"exports":["Markdown","MarkdownCapabilities","MarkdownEvents","MarkdownStateSchema","Settings"],"entryPoint":"src/types/index.ts","inputs":{},"bytes":320},"dist/lib/browser/operations/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":806},"dist/lib/browser/operations/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-DNSKDWUL.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"dist/lib/browser/create-SRADQOTE.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/create-markdown-A2ERCEOZ.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/open-ANTKMST5.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/scroll-to-anchor-4RJ6MQ7I.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/set-view-mode-2S7KKY7C.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/update-markdown-CPM5KOQW.mjs","kind":"dynamic-import"}],"exports":["MarkdownOperation","MarkdownOperationHandlerSet"],"entryPoint":"src/operations/index.ts","inputs":{"src/operations/index.ts":{"bytesInOutput":386}},"bytes":630},"dist/lib/browser/create-SRADQOTE.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1349},"dist/lib/browser/create-SRADQOTE.mjs":{"imports":[{"path":"dist/lib/browser/chunk-DNSKDWUL.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create.ts","inputs":{"src/operations/create.ts":{"bytesInOutput":463}},"bytes":685},"dist/lib/browser/create-markdown-A2ERCEOZ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":955},"dist/lib/browser/create-markdown-A2ERCEOZ.mjs":{"imports":[{"path":"dist/lib/browser/chunk-DNSKDWUL.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create-markdown.ts","inputs":{"src/operations/create-markdown.ts":{"bytesInOutput":286}},"bytes":543},"dist/lib/browser/open-ANTKMST5.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1153},"dist/lib/browser/open-ANTKMST5.mjs":{"imports":[{"path":"dist/lib/browser/chunk-DNSKDWUL.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/open.ts","inputs":{"src/operations/open.ts":{"bytesInOutput":378}},"bytes":564},"dist/lib/browser/scroll-to-anchor-4RJ6MQ7I.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2740},"dist/lib/browser/scroll-to-anchor-4RJ6MQ7I.mjs":{"imports":[{"path":"dist/lib/browser/chunk-DNSKDWUL.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/ui-editor","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/scroll-to-anchor.ts","inputs":{"src/operations/scroll-to-anchor.ts":{"bytesInOutput":1108}},"bytes":1372},"dist/lib/browser/chunk-DNSKDWUL.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6303},"dist/lib/browser/chunk-DNSKDWUL.mjs":{"imports":[{"path":"dist/lib/browser/chunk-SW6IK2GJ.mjs","kind":"import-statement"},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/ui-editor/types","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"exports":["Create","CreateMarkdown","Open","ScrollToAnchor","SetViewMode","Update","definitions_exports"],"inputs":{"src/operations/definitions.ts":{"bytesInOutput":3666}},"bytes":3929},"dist/lib/browser/chunk-SW6IK2GJ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":9185},"dist/lib/browser/chunk-SW6IK2GJ.mjs":{"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/ui-editor/types","kind":"import-statement","external":true}],"exports":["MarkdownCapabilities","MarkdownEvents","MarkdownStateSchema","Markdown_exports","Settings_exports","__export"],"inputs":{"src/types/capabilities.ts":{"bytesInOutput":825},"src/types/index.ts":{"bytesInOutput":0},"src/types/events.ts":{"bytesInOutput":302},"src/types/Markdown.ts":{"bytesInOutput":1157},"src/types/Settings.ts":{"bytesInOutput":1584}},"bytes":4340}}}
@@ -1,13 +1,12 @@
1
1
  import {
2
2
  Open
3
- } from "./chunk-XKUKZNUS.mjs";
4
- import "./chunk-46WIDM4R.mjs";
5
- import "./chunk-J5LGTIGS.mjs";
3
+ } from "./chunk-DNSKDWUL.mjs";
4
+ import "./chunk-SW6IK2GJ.mjs";
6
5
 
7
6
  // src/operations/open.ts
8
7
  import * as Effect from "effect/Effect";
8
+ import { Operation } from "@dxos/compute";
9
9
  import { Database } from "@dxos/echo";
10
- import { Operation } from "@dxos/operation";
11
10
  var handler = Open.pipe(Operation.withHandler(Effect.fn(function* ({ doc }) {
12
11
  const { content } = yield* doc.pipe(Database.load, Effect.map((_) => _.content), Effect.flatMap(Database.load));
13
12
  return {
@@ -18,4 +17,4 @@ var open_default = handler;
18
17
  export {
19
18
  open_default as default
20
19
  };
21
- //# sourceMappingURL=open-N6PAX6DY.mjs.map
20
+ //# sourceMappingURL=open-ANTKMST5.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/open.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Database } from '@dxos/echo';\n\nimport { Open } from './definitions';\n\nconst handler: Operation.WithHandler<typeof Open> = Open.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ doc }) {\n const { content } = yield* doc.pipe(\n Database.load,\n Effect.map((_) => _.content),\n Effect.flatMap(Database.load),\n );\n return { content };\n }),\n ),\n);\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AAIzB,IAAMC,UAA8CC,KAAKC,KACvDC,UAAUC,YACDC,UAAG,WAAW,EAAEC,IAAG,GAAE;AAC1B,QAAM,EAAEC,QAAO,IAAK,OAAOD,IAAIJ,KAC7BM,SAASC,MACFC,WAAI,CAACC,MAAMA,EAAEJ,OAAO,GACpBK,eAAQJ,SAASC,IAAI,CAAA;AAE9B,SAAO;IAAEF;EAAQ;AACnB,CAAA,CAAA,CAAA;AAIJ,IAAA,eAAeP;",
6
+ "names": ["Effect", "Operation", "Database", "handler", "Open", "pipe", "Operation", "withHandler", "fn", "doc", "content", "Database", "load", "map", "_", "flatMap"]
7
+ }
@@ -1,12 +1,11 @@
1
1
  import {
2
2
  definitions_exports
3
- } from "../chunk-XKUKZNUS.mjs";
4
- import "../chunk-46WIDM4R.mjs";
5
- import "../chunk-J5LGTIGS.mjs";
3
+ } from "../chunk-DNSKDWUL.mjs";
4
+ import "../chunk-SW6IK2GJ.mjs";
6
5
 
7
6
  // src/operations/index.ts
8
- import { OperationHandlerSet } from "@dxos/operation";
9
- var MarkdownOperationHandlerSet = OperationHandlerSet.lazy(() => import("../create-HSXPXCC5.mjs"), () => import("../create-markdown-WB7DH3UF.mjs"), () => import("../open-N6PAX6DY.mjs"), () => import("../scroll-to-anchor-5M4F24AB.mjs"), () => import("../set-view-mode-NBNF2I5W.mjs"), () => import("../update-5QIRVGTL.mjs"));
7
+ import { OperationHandlerSet } from "@dxos/compute";
8
+ var MarkdownOperationHandlerSet = OperationHandlerSet.lazy(() => import("../create-SRADQOTE.mjs"), () => import("../create-markdown-A2ERCEOZ.mjs"), () => import("../open-ANTKMST5.mjs"), () => import("../scroll-to-anchor-4RJ6MQ7I.mjs"), () => import("../set-view-mode-2S7KKY7C.mjs"), () => import("../update-markdown-CPM5KOQW.mjs"));
10
9
  export {
11
10
  definitions_exports as MarkdownOperation,
12
11
  MarkdownOperationHandlerSet
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/operations/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/operation';\n\nexport * as MarkdownOperation from './definitions';\n\nexport const MarkdownOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./create'),\n () => import('./create-markdown'),\n () => import('./open'),\n () => import('./scroll-to-anchor'),\n () => import('./set-view-mode'),\n () => import('./update'),\n);\n"],
5
- "mappings": ";;;;;;;AAIA,SAASA,2BAA2B;AAI7B,IAAMC,8BAA8BC,oBAAoBC,KAC7D,MAAM,OAAO,wBAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,sBAAA,GACb,MAAM,OAAO,kCAAA,GACb,MAAM,OAAO,+BAAA,GACb,MAAM,OAAO,wBAAA,CAAA;",
6
- "names": ["OperationHandlerSet", "MarkdownOperationHandlerSet", "OperationHandlerSet", "lazy"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as MarkdownOperation from './definitions';\n\nexport const MarkdownOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./create'),\n () => import('./create-markdown'),\n () => import('./open'),\n () => import('./scroll-to-anchor'),\n () => import('./set-view-mode'),\n () => import('./update-markdown'),\n);\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,2BAA2B;AAI7B,IAAMC,8BAA8BD,oBAAoBE,KAC7D,MAAM,OAAO,wBAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,sBAAA,GACb,MAAM,OAAO,kCAAA,GACb,MAAM,OAAO,+BAAA,GACb,MAAM,OAAO,iCAAA,CAAA;",
6
+ "names": ["OperationHandlerSet", "MarkdownOperationHandlerSet", "lazy"]
7
7
  }
@@ -1,16 +1,15 @@
1
1
  import {
2
2
  ScrollToAnchor
3
- } from "./chunk-XKUKZNUS.mjs";
3
+ } from "./chunk-DNSKDWUL.mjs";
4
4
  import {
5
5
  MarkdownCapabilities
6
- } from "./chunk-46WIDM4R.mjs";
7
- import "./chunk-J5LGTIGS.mjs";
6
+ } from "./chunk-SW6IK2GJ.mjs";
8
7
 
9
8
  // src/operations/scroll-to-anchor.ts
10
9
  import { EditorView } from "@codemirror/view";
11
10
  import * as Effect from "effect/Effect";
12
11
  import { Capability } from "@dxos/app-framework";
13
- import { Operation } from "@dxos/operation";
12
+ import { Operation } from "@dxos/compute";
14
13
  import { Cursor, setSelection } from "@dxos/ui-editor";
15
14
  var handler = ScrollToAnchor.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ subject, cursor }) {
16
15
  const editorViews = yield* Capability.get(MarkdownCapabilities.EditorViews);
@@ -46,4 +45,4 @@ var scroll_to_anchor_default = handler;
46
45
  export {
47
46
  scroll_to_anchor_default as default
48
47
  };
49
- //# sourceMappingURL=scroll-to-anchor-5M4F24AB.mjs.map
48
+ //# sourceMappingURL=scroll-to-anchor-4RJ6MQ7I.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/scroll-to-anchor.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { Cursor, setSelection } from '@dxos/ui-editor';\n\nimport { MarkdownCapabilities } from '../types';\nimport { ScrollToAnchor } from './definitions';\n\nconst handler: Operation.WithHandler<typeof ScrollToAnchor> = ScrollToAnchor.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ subject, cursor }) {\n const editorViews = yield* Capability.get(MarkdownCapabilities.EditorViews);\n const entry = editorViews.get(subject);\n if (!entry) {\n return;\n }\n const range = Cursor.getRangeFromCursor(entry.view.state, cursor);\n if (range) {\n const selection = entry.view.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;\n const effects: any[] = [EditorView.scrollIntoView(range.from, { y: 'start', yMargin: 96 })];\n if (selection) {\n effects.push(setSelection.of({ current: entry.documentId }));\n }\n entry.view.dispatch({\n effects,\n selection: selection ? { anchor: range.from } : undefined,\n });\n }\n }),\n ),\n);\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;;;AAIA,SAASA,kBAAkB;AAC3B,YAAYC,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiB;AAC1B,SAASC,QAAQC,oBAAoB;AAKrC,IAAMC,UAAwDC,eAAeC,KAC3EC,UAAUC,YACDC,kBAAW,WAAW,EAAEC,SAASC,OAAM,GAAE;AAC9C,QAAMC,cAAc,OAAOC,WAAWC,IAAIC,qBAAqBC,WAAW;AAC1E,QAAMC,QAAQL,YAAYE,IAAIJ,OAAAA;AAC9B,MAAI,CAACO,OAAO;AACV;EACF;AACA,QAAMC,QAAQC,OAAOC,mBAAmBH,MAAMI,KAAKC,OAAOX,MAAAA;AAC1D,MAAIO,OAAO;AACT,UAAMK,YAAYN,MAAMI,KAAKC,MAAMC,UAAUC,KAAKC,SAASP,MAAMO,OAAO;MAAEC,QAAQR,MAAMO;IAAK,IAAIE;AACjG,UAAMC,UAAiB;MAACC,WAAWC,eAAeZ,MAAMO,MAAM;QAAEM,GAAG;QAASC,SAAS;MAAG,CAAA;;AACxF,QAAIT,WAAW;AACbK,cAAQK,KAAKC,aAAaC,GAAG;QAAEC,SAASnB,MAAMoB;MAAW,CAAA,CAAA;IAC3D;AACApB,UAAMI,KAAKiB,SAAS;MAClBV;MACAL,WAAWA,YAAY;QAAEG,QAAQR,MAAMO;MAAK,IAAIE;IAClD,CAAA;EACF;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,2BAAevB;",
6
+ "names": ["EditorView", "Effect", "Capability", "Operation", "Cursor", "setSelection", "handler", "ScrollToAnchor", "pipe", "Operation", "withHandler", "fnUntraced", "subject", "cursor", "editorViews", "Capability", "get", "MarkdownCapabilities", "EditorViews", "entry", "range", "Cursor", "getRangeFromCursor", "view", "state", "selection", "main", "from", "anchor", "undefined", "effects", "EditorView", "scrollIntoView", "y", "yMargin", "push", "setSelection", "of", "current", "documentId", "dispatch"]
7
+ }
@@ -1,15 +1,14 @@
1
1
  import {
2
2
  SetViewMode
3
- } from "./chunk-XKUKZNUS.mjs";
3
+ } from "./chunk-DNSKDWUL.mjs";
4
4
  import {
5
5
  MarkdownCapabilities
6
- } from "./chunk-46WIDM4R.mjs";
7
- import "./chunk-J5LGTIGS.mjs";
6
+ } from "./chunk-SW6IK2GJ.mjs";
8
7
 
9
8
  // src/operations/set-view-mode.ts
10
9
  import * as Effect from "effect/Effect";
11
10
  import { Capabilities } from "@dxos/app-framework";
12
- import { Operation } from "@dxos/operation";
11
+ import { Operation } from "@dxos/compute";
13
12
  var handler = SetViewMode.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ id, viewMode }) {
14
13
  yield* Capabilities.updateAtomValue(MarkdownCapabilities.State, (current) => ({
15
14
  ...current,
@@ -23,4 +22,4 @@ var set_view_mode_default = handler;
23
22
  export {
24
23
  set_view_mode_default as default
25
24
  };
26
- //# sourceMappingURL=set-view-mode-NBNF2I5W.mjs.map
25
+ //# sourceMappingURL=set-view-mode-2S7KKY7C.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/set-view-mode.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\n\nimport { MarkdownCapabilities } from '../types';\nimport { SetViewMode } from './definitions';\n\nconst handler: Operation.WithHandler<typeof SetViewMode> = SetViewMode.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ id, viewMode }) {\n yield* Capabilities.updateAtomValue(MarkdownCapabilities.State, (current) => ({\n ...current,\n viewMode: { ...current.viewMode, [id]: viewMode },\n }));\n }),\n ),\n);\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,oBAAoB;AAC7B,SAASC,iBAAiB;AAK1B,IAAMC,UAAqDC,YAAYC,KACrEC,UAAUC,YACDC,kBAAW,WAAW,EAAEC,IAAIC,SAAQ,GAAE;AAC3C,SAAOC,aAAaC,gBAAgBC,qBAAqBC,OAAO,CAACC,aAAa;IAC5E,GAAGA;IACHL,UAAU;MAAE,GAAGK,QAAQL;MAAU,CAACD,EAAAA,GAAKC;IAAS;EAClD,EAAA;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,wBAAeP;",
6
+ "names": ["Effect", "Capabilities", "Operation", "handler", "SetViewMode", "pipe", "Operation", "withHandler", "fnUntraced", "id", "viewMode", "Capabilities", "updateAtomValue", "MarkdownCapabilities", "State", "current"]
7
+ }
@@ -4,8 +4,7 @@ import {
4
4
  MarkdownStateSchema,
5
5
  Markdown_exports,
6
6
  Settings_exports
7
- } from "../chunk-46WIDM4R.mjs";
8
- import "../chunk-J5LGTIGS.mjs";
7
+ } from "../chunk-SW6IK2GJ.mjs";
9
8
  export {
10
9
  Markdown_exports as Markdown,
11
10
  MarkdownCapabilities,
@@ -1,15 +1,14 @@
1
1
  import {
2
2
  Update
3
- } from "./chunk-XKUKZNUS.mjs";
4
- import "./chunk-46WIDM4R.mjs";
5
- import "./chunk-J5LGTIGS.mjs";
3
+ } from "./chunk-DNSKDWUL.mjs";
4
+ import "./chunk-SW6IK2GJ.mjs";
6
5
 
7
- // src/operations/update.ts
6
+ // src/operations/update-markdown.ts
8
7
  import { next as A } from "@automerge/automerge";
9
8
  import * as Effect from "effect/Effect";
9
+ import { Operation } from "@dxos/compute";
10
10
  import { Database } from "@dxos/echo";
11
11
  import { DocAccessor, createDocAccessor } from "@dxos/echo-db";
12
- import { Operation } from "@dxos/operation";
13
12
  var handler = Update.pipe(Operation.withHandler(Effect.fn(function* ({ doc, edits }) {
14
13
  const content = yield* doc.pipe(Database.load, Effect.map((_) => _.content), Effect.flatMap(Database.load));
15
14
  const accessor = createDocAccessor(content, [
@@ -38,8 +37,8 @@ var handler = Update.pipe(Operation.withHandler(Effect.fn(function* ({ doc, edit
38
37
  newContent: DocAccessor.getValue(accessor)
39
38
  };
40
39
  })));
41
- var update_default = handler;
40
+ var update_markdown_default = handler;
42
41
  export {
43
- update_default as default
42
+ update_markdown_default as default
44
43
  };
45
- //# sourceMappingURL=update-5QIRVGTL.mjs.map
44
+ //# sourceMappingURL=update-markdown-CPM5KOQW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/update-markdown.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { next as A, type Doc } from '@automerge/automerge';\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Database } from '@dxos/echo';\nimport { DocAccessor, createDocAccessor } from '@dxos/echo-db';\n\nimport { Update } from './definitions';\n\nconst handler: Operation.WithHandler<typeof Update> = Update.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ doc, edits }) {\n const content = yield* doc.pipe(\n Database.load,\n Effect.map((_) => _.content),\n Effect.flatMap(Database.load),\n );\n const accessor = createDocAccessor(content, ['content']);\n\n for (const edit of edits) {\n accessor.handle.change((doc: Doc<typeof content>) => {\n const text = DocAccessor.getValue<string>(accessor);\n if (edit.replaceAll) {\n let idx = text.indexOf(edit.oldString);\n while (idx !== -1) {\n A.splice(doc, accessor.path as A.Prop[], idx, edit.oldString.length, edit.newString);\n const updated = DocAccessor.getValue<string>(accessor);\n idx = updated.indexOf(edit.oldString, idx + edit.newString.length);\n }\n } else {\n const idx = text.indexOf(edit.oldString);\n if (idx === -1) {\n throw new Error(`Edit not found: ${JSON.stringify(edit.oldString)}`);\n }\n A.splice(doc, accessor.path as A.Prop[], idx, edit.oldString.length, edit.newString);\n }\n });\n }\n\n return {\n newContent: DocAccessor.getValue<string>(accessor),\n };\n }),\n ),\n);\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,QAAQC,SAAmB;AACpC,YAAYC,YAAY;AAExB,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,aAAaC,yBAAyB;AAI/C,IAAMC,UAAgDC,OAAOC,KAC3DC,UAAUC,YACDC,UAAG,WAAW,EAAEC,KAAKC,MAAK,GAAE;AACjC,QAAMC,UAAU,OAAOF,IAAIJ,KACzBO,SAASC,MACFC,WAAI,CAACC,MAAMA,EAAEJ,OAAO,GACpBK,eAAQJ,SAASC,IAAI,CAAA;AAE9B,QAAMI,WAAWC,kBAAkBP,SAAS;IAAC;GAAU;AAEvD,aAAWQ,QAAQT,OAAO;AACxBO,aAASG,OAAOC,OAAO,CAACZ,SAAAA;AACtB,YAAMa,OAAOC,YAAYC,SAAiBP,QAAAA;AAC1C,UAAIE,KAAKM,YAAY;AACnB,YAAIC,MAAMJ,KAAKK,QAAQR,KAAKS,SAAS;AACrC,eAAOF,QAAQ,IAAI;AACjBG,YAAEC,OAAOrB,MAAKQ,SAASc,MAAkBL,KAAKP,KAAKS,UAAUI,QAAQb,KAAKc,SAAS;AACnF,gBAAMC,UAAUX,YAAYC,SAAiBP,QAAAA;AAC7CS,gBAAMQ,QAAQP,QAAQR,KAAKS,WAAWF,MAAMP,KAAKc,UAAUD,MAAM;QACnE;MACF,OAAO;AACL,cAAMN,MAAMJ,KAAKK,QAAQR,KAAKS,SAAS;AACvC,YAAIF,QAAQ,IAAI;AACd,gBAAM,IAAIS,MAAM,mBAAmBC,KAAKC,UAAUlB,KAAKS,SAAS,CAAA,EAAG;QACrE;AACAC,UAAEC,OAAOrB,MAAKQ,SAASc,MAAkBL,KAAKP,KAAKS,UAAUI,QAAQb,KAAKc,SAAS;MACrF;IACF,CAAA;EACF;AAEA,SAAO;IACLK,YAAYf,YAAYC,SAAiBP,QAAAA;EAC3C;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,0BAAed;",
6
+ "names": ["next", "A", "Effect", "Operation", "Database", "DocAccessor", "createDocAccessor", "handler", "Update", "pipe", "Operation", "withHandler", "fn", "doc", "edits", "content", "Database", "load", "map", "_", "flatMap", "accessor", "createDocAccessor", "edit", "handle", "change", "text", "DocAccessor", "getValue", "replaceAll", "idx", "indexOf", "oldString", "A", "splice", "path", "length", "newString", "updated", "Error", "JSON", "stringify", "newContent"]
7
+ }
@@ -3,12 +3,11 @@ import {
3
3
  Create,
4
4
  Open,
5
5
  Update
6
- } from "../chunk-E4BQCEXF.mjs";
7
- import "../chunk-4MSJO6IJ.mjs";
8
- import "../chunk-HSLMI22Q.mjs";
6
+ } from "../chunk-MWYFGI2J.mjs";
7
+ import "../chunk-ZE6QJ4S5.mjs";
9
8
 
10
9
  // src/blueprints/markdown-blueprint.ts
11
- import { Blueprint, Template } from "@dxos/blueprints";
10
+ import { Blueprint, Template } from "@dxos/compute";
12
11
  import { trim } from "@dxos/util";
13
12
  var BLUEPRINT_KEY = "org.dxos.blueprint.markdown";
14
13
  var make = () => Blueprint.make({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/blueprints/markdown-blueprint.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AppCapabilities } from '@dxos/app-toolkit';\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { trim } from '@dxos/util';\n\nimport { Create, Open, Update } from '../operations/definitions';\n\nconst BLUEPRINT_KEY = 'org.dxos.blueprint.markdown';\n\nconst make = () =>\n Blueprint.make({\n key: BLUEPRINT_KEY,\n name: 'Markdown',\n description: 'Work with markdown documents. Preferred over raw database operations.',\n tools: Blueprint.toolDefinitions({ operations: [Create, Open, Update] }),\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 });\n\nconst blueprint: AppCapabilities.BlueprintDefinition = {\n key: BLUEPRINT_KEY,\n make,\n};\n\nexport default blueprint;\n"],
5
- "mappings": ";;;;;;;;;;AAKA,SAASA,WAAWC,gBAAgB;AACpC,SAASC,YAAY;AAIrB,IAAMC,gBAAgB;AAEtB,IAAMC,OAAO,MACXC,UAAUD,KAAK;EACbE,KAAKH;EACLI,MAAM;EACNC,aAAa;EACbC,OAAOJ,UAAUK,gBAAgB;IAAEC,YAAY;MAACC;MAAQC;MAAMC;;EAAQ,CAAA;EACtEC,cAAcC,SAASZ,KAAK;;IAE1Ba,QAAQC;;;;;;;;UAQJ,KAAA;;;;;UAKA,KAAA;;EAEN,CAAA;AACF,CAAA;AAEF,IAAMC,YAAiD;EACrDb,KAAKH;EACLC;AACF;AAEA,IAAA,6BAAee;",
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Blueprint, Template } from '@dxos/compute';\nimport { trim } from '@dxos/util';\n\nimport { Create, Open, Update } from '../operations/definitions';\n\nconst BLUEPRINT_KEY = 'org.dxos.blueprint.markdown';\n\nconst make = () =>\n Blueprint.make({\n key: BLUEPRINT_KEY,\n name: 'Markdown',\n description: 'Work with markdown documents. Preferred over raw database operations.',\n tools: Blueprint.toolDefinitions({ operations: [Create, Open, Update] }),\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 });\n\nconst blueprint: Blueprint.Definition = {\n key: BLUEPRINT_KEY,\n make,\n};\n\nexport default blueprint;\n"],
5
+ "mappings": ";;;;;;;;;AAIA,SAASA,WAAWC,gBAAgB;AACpC,SAASC,YAAY;AAIrB,IAAMC,gBAAgB;AAEtB,IAAMC,OAAO,MACXC,UAAUD,KAAK;EACbE,KAAKH;EACLI,MAAM;EACNC,aAAa;EACbC,OAAOJ,UAAUK,gBAAgB;IAAEC,YAAY;MAACC;MAAQC;MAAMC;;EAAQ,CAAA;EACtEC,cAAcC,SAASZ,KAAK;;IAE1Ba,QAAQC;;;;;;;;UAQJ,KAAA;;;;;UAKA,KAAA;;EAEN,CAAA;AACF,CAAA;AAEF,IAAMC,YAAkC;EACtCb,KAAKH;EACLC;AACF;AAEA,IAAA,6BAAee;",
6
6
  "names": ["Blueprint", "Template", "trim", "BLUEPRINT_KEY", "make", "Blueprint", "key", "name", "description", "tools", "toolDefinitions", "operations", "Create", "Open", "Update", "instructions", "Template", "source", "trim", "blueprint"]
7
7
  }