@dxos/plugin-markdown 0.8.3-main.672df60 → 0.8.3-staging.0fa589b

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 (159) hide show
  1. package/dist/lib/browser/{MarkdownContainer-DGPA7SEG.mjs → MarkdownContainer-EFWQ6DHD.mjs} +231 -49
  2. package/dist/lib/browser/MarkdownContainer-EFWQ6DHD.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownPreview-KQN2TGK6.mjs → MarkdownPreview-F4PYFW5L.mjs} +8 -8
  4. package/dist/lib/browser/MarkdownPreview-F4PYFW5L.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-VS4OZVPP.mjs → anchor-sort-BMAN2ABT.mjs} +4 -4
  6. package/dist/lib/browser/anchor-sort-BMAN2ABT.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-V6RLEHVY.mjs → app-graph-serializer-EI6TEHRQ.mjs} +7 -5
  8. package/dist/lib/browser/app-graph-serializer-EI6TEHRQ.mjs.map +7 -0
  9. package/dist/lib/browser/{artifact-definition-5NAODQLG.mjs → artifact-definition-FQ2R6KPT.mjs} +6 -6
  10. package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-OTOPAFWC.mjs → chunk-354IBM5X.mjs} +7 -7
  12. package/dist/lib/browser/{chunk-C5RABVIX.mjs → chunk-D767LUGU.mjs} +7 -3
  13. package/dist/lib/browser/chunk-D767LUGU.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-77NGW7EO.mjs → chunk-LXSRQPEP.mjs} +9 -9
  15. package/dist/lib/browser/chunk-LXSRQPEP.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-ECSM56YC.mjs → chunk-N2D26K6W.mjs} +4 -5
  17. package/dist/lib/browser/chunk-N2D26K6W.mjs.map +7 -0
  18. package/dist/lib/browser/index.mjs +7 -8
  19. package/dist/lib/browser/index.mjs.map +3 -3
  20. package/dist/lib/browser/{intent-resolver-4GDYST4Y.mjs → intent-resolver-6ZOABX2J.mjs} +6 -7
  21. package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs.map +7 -0
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/{react-surface-DM6B4UUJ.mjs → react-surface-4B5ELMEW.mjs} +14 -9
  24. package/dist/lib/browser/react-surface-4B5ELMEW.mjs.map +7 -0
  25. package/dist/lib/browser/{settings-W5CK4PXP.mjs → settings-PLH54VC7.mjs} +4 -4
  26. package/dist/lib/browser/settings-PLH54VC7.mjs.map +7 -0
  27. package/dist/lib/browser/types/index.mjs +1 -1
  28. package/dist/lib/node/{MarkdownContainer-BZK66EQD.cjs → MarkdownContainer-KYGUEZIL.cjs} +277 -95
  29. package/dist/lib/node/MarkdownContainer-KYGUEZIL.cjs.map +7 -0
  30. package/dist/lib/node/{MarkdownPreview-H7FFIWJH.cjs → MarkdownPreview-GCJJCXY6.cjs} +17 -17
  31. package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs.map +7 -0
  32. package/dist/lib/node/{anchor-sort-NHVF23EU.cjs → anchor-sort-V3T4SFFI.cjs} +12 -12
  33. package/dist/lib/node/anchor-sort-V3T4SFFI.cjs.map +7 -0
  34. package/dist/lib/node/{app-graph-serializer-CLALIYN3.cjs → app-graph-serializer-E6BXEDEL.cjs} +14 -12
  35. package/dist/lib/node/app-graph-serializer-E6BXEDEL.cjs.map +7 -0
  36. package/dist/lib/node/{artifact-definition-VEAHK7BX.cjs → artifact-definition-U27MH5SC.cjs} +16 -16
  37. package/dist/lib/node/artifact-definition-U27MH5SC.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-RQS4KBMG.cjs → chunk-3HHV4MM6.cjs} +6 -7
  39. package/dist/lib/node/chunk-3HHV4MM6.cjs.map +7 -0
  40. package/dist/lib/node/{chunk-G7RBJX22.cjs → chunk-CJLYFGPI.cjs} +12 -12
  41. package/dist/lib/node/chunk-CJLYFGPI.cjs.map +7 -0
  42. package/dist/lib/node/{chunk-BBDDZLQH.cjs → chunk-FU3XZZCO.cjs} +10 -10
  43. package/dist/lib/node/{chunk-ZDTL47I7.cjs → chunk-LQAC5HL7.cjs} +10 -6
  44. package/dist/lib/node/chunk-LQAC5HL7.cjs.map +7 -0
  45. package/dist/lib/node/index.cjs +26 -27
  46. package/dist/lib/node/index.cjs.map +3 -3
  47. package/dist/lib/node/{intent-resolver-AUZVK3NZ.cjs → intent-resolver-OEFLRNEJ.cjs} +14 -15
  48. package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs.map +7 -0
  49. package/dist/lib/node/meta.json +1 -1
  50. package/dist/lib/node/{react-surface-QBW4FFXF.cjs → react-surface-456HQ4KZ.cjs} +21 -16
  51. package/dist/lib/node/react-surface-456HQ4KZ.cjs.map +7 -0
  52. package/dist/lib/node/{settings-IRKU3WPM.cjs → settings-E3NUTXJ4.cjs} +7 -7
  53. package/dist/lib/node/settings-E3NUTXJ4.cjs.map +7 -0
  54. package/dist/lib/node/types/index.cjs +7 -7
  55. package/dist/lib/node/types/index.cjs.map +1 -1
  56. package/dist/lib/node-esm/{MarkdownContainer-2DYVQ6RC.mjs → MarkdownContainer-O3SGMH4G.mjs} +231 -49
  57. package/dist/lib/node-esm/MarkdownContainer-O3SGMH4G.mjs.map +7 -0
  58. package/dist/lib/node-esm/{MarkdownPreview-JUIXYYKF.mjs → MarkdownPreview-KFDRV4GC.mjs} +8 -8
  59. package/dist/lib/node-esm/MarkdownPreview-KFDRV4GC.mjs.map +7 -0
  60. package/dist/lib/node-esm/{anchor-sort-G2HLCYFK.mjs → anchor-sort-BXL7BE67.mjs} +4 -4
  61. package/dist/lib/node-esm/anchor-sort-BXL7BE67.mjs.map +7 -0
  62. package/dist/lib/node-esm/{app-graph-serializer-C3RNTQGM.mjs → app-graph-serializer-F7DGNF3G.mjs} +7 -5
  63. package/dist/lib/node-esm/app-graph-serializer-F7DGNF3G.mjs.map +7 -0
  64. package/dist/lib/node-esm/{artifact-definition-7TIJW2CO.mjs → artifact-definition-NQOHB6S5.mjs} +6 -6
  65. package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-TCFJNUAE.mjs → chunk-BWDDFDJY.mjs} +7 -3
  67. package/dist/lib/node-esm/chunk-BWDDFDJY.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-6RPARLIK.mjs → chunk-K26TX5V4.mjs} +9 -9
  69. package/dist/lib/node-esm/chunk-K26TX5V4.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-NCMPVEXO.mjs → chunk-T2Y2BT53.mjs} +4 -5
  71. package/dist/lib/node-esm/chunk-T2Y2BT53.mjs.map +7 -0
  72. package/dist/lib/node-esm/{chunk-KK7LP3UQ.mjs → chunk-YOABAQ7A.mjs} +7 -7
  73. package/dist/lib/node-esm/index.mjs +7 -8
  74. package/dist/lib/node-esm/index.mjs.map +3 -3
  75. package/dist/lib/node-esm/{intent-resolver-FTNXUNI2.mjs → intent-resolver-CLMSVF2K.mjs} +6 -7
  76. package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs.map +7 -0
  77. package/dist/lib/node-esm/meta.json +1 -1
  78. package/dist/lib/node-esm/{react-surface-A4VAOQG6.mjs → react-surface-YHFOQTVO.mjs} +14 -9
  79. package/dist/lib/node-esm/react-surface-YHFOQTVO.mjs.map +7 -0
  80. package/dist/lib/node-esm/{settings-MK7D7LHQ.mjs → settings-SIY33P3F.mjs} +4 -4
  81. package/dist/lib/node-esm/settings-SIY33P3F.mjs.map +7 -0
  82. package/dist/lib/node-esm/types/index.mjs +1 -1
  83. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  86. package/dist/types/src/components/MarkdownContainer.d.ts +1 -1
  87. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  88. package/dist/types/src/components/MarkdownContainer.stories.d.ts +9 -0
  89. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -0
  90. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +4 -3
  91. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  92. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +3 -9
  93. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  95. package/dist/types/src/extensions.d.ts +3 -2
  96. package/dist/types/src/extensions.d.ts.map +1 -1
  97. package/dist/types/src/translations.d.ts +52 -2
  98. package/dist/types/src/translations.d.ts.map +1 -1
  99. package/dist/types/src/types/schema.d.ts +11 -14
  100. package/dist/types/src/types/schema.d.ts.map +1 -1
  101. package/dist/types/src/types/types.d.ts +5 -6
  102. package/dist/types/src/types/types.d.ts.map +1 -1
  103. package/dist/types/src/util.d.ts.map +1 -1
  104. package/package.json +38 -38
  105. package/src/MarkdownPlugin.tsx +3 -5
  106. package/src/capabilities/anchor-sort.ts +2 -2
  107. package/src/capabilities/app-graph-serializer.ts +5 -3
  108. package/src/capabilities/artifact-definition.ts +3 -3
  109. package/src/capabilities/intent-resolver.ts +4 -5
  110. package/src/capabilities/react-surface.tsx +5 -5
  111. package/src/capabilities/settings.ts +2 -2
  112. package/src/components/MarkdownContainer.stories.tsx +103 -0
  113. package/src/components/MarkdownContainer.tsx +149 -52
  114. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +1 -1
  115. package/src/components/MarkdownEditor/MarkdownEditor.tsx +215 -139
  116. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +8 -7
  117. package/src/components/MarkdownPreview/MarkdownPreview.tsx +5 -5
  118. package/src/components/Suggestions.stories.tsx +7 -9
  119. package/src/components/Toolbar.stories.tsx +3 -3
  120. package/src/extensions.tsx +7 -1
  121. package/src/translations.ts +6 -1
  122. package/src/types/schema.ts +2 -3
  123. package/src/util.tsx +5 -7
  124. package/dist/lib/browser/MarkdownContainer-DGPA7SEG.mjs.map +0 -7
  125. package/dist/lib/browser/MarkdownPreview-KQN2TGK6.mjs.map +0 -7
  126. package/dist/lib/browser/anchor-sort-VS4OZVPP.mjs.map +0 -7
  127. package/dist/lib/browser/app-graph-serializer-V6RLEHVY.mjs.map +0 -7
  128. package/dist/lib/browser/artifact-definition-5NAODQLG.mjs.map +0 -7
  129. package/dist/lib/browser/chunk-77NGW7EO.mjs.map +0 -7
  130. package/dist/lib/browser/chunk-C5RABVIX.mjs.map +0 -7
  131. package/dist/lib/browser/chunk-ECSM56YC.mjs.map +0 -7
  132. package/dist/lib/browser/intent-resolver-4GDYST4Y.mjs.map +0 -7
  133. package/dist/lib/browser/react-surface-DM6B4UUJ.mjs.map +0 -7
  134. package/dist/lib/browser/settings-W5CK4PXP.mjs.map +0 -7
  135. package/dist/lib/node/MarkdownContainer-BZK66EQD.cjs.map +0 -7
  136. package/dist/lib/node/MarkdownPreview-H7FFIWJH.cjs.map +0 -7
  137. package/dist/lib/node/anchor-sort-NHVF23EU.cjs.map +0 -7
  138. package/dist/lib/node/app-graph-serializer-CLALIYN3.cjs.map +0 -7
  139. package/dist/lib/node/artifact-definition-VEAHK7BX.cjs.map +0 -7
  140. package/dist/lib/node/chunk-G7RBJX22.cjs.map +0 -7
  141. package/dist/lib/node/chunk-RQS4KBMG.cjs.map +0 -7
  142. package/dist/lib/node/chunk-ZDTL47I7.cjs.map +0 -7
  143. package/dist/lib/node/intent-resolver-AUZVK3NZ.cjs.map +0 -7
  144. package/dist/lib/node/react-surface-QBW4FFXF.cjs.map +0 -7
  145. package/dist/lib/node/settings-IRKU3WPM.cjs.map +0 -7
  146. package/dist/lib/node-esm/MarkdownContainer-2DYVQ6RC.mjs.map +0 -7
  147. package/dist/lib/node-esm/MarkdownPreview-JUIXYYKF.mjs.map +0 -7
  148. package/dist/lib/node-esm/anchor-sort-G2HLCYFK.mjs.map +0 -7
  149. package/dist/lib/node-esm/app-graph-serializer-C3RNTQGM.mjs.map +0 -7
  150. package/dist/lib/node-esm/artifact-definition-7TIJW2CO.mjs.map +0 -7
  151. package/dist/lib/node-esm/chunk-6RPARLIK.mjs.map +0 -7
  152. package/dist/lib/node-esm/chunk-NCMPVEXO.mjs.map +0 -7
  153. package/dist/lib/node-esm/chunk-TCFJNUAE.mjs.map +0 -7
  154. package/dist/lib/node-esm/intent-resolver-FTNXUNI2.mjs.map +0 -7
  155. package/dist/lib/node-esm/react-surface-A4VAOQG6.mjs.map +0 -7
  156. package/dist/lib/node-esm/settings-MK7D7LHQ.mjs.map +0 -7
  157. /package/dist/lib/browser/{chunk-OTOPAFWC.mjs.map → chunk-354IBM5X.mjs.map} +0 -0
  158. /package/dist/lib/node/{chunk-BBDDZLQH.cjs.map → chunk-FU3XZZCO.cjs.map} +0 -0
  159. /package/dist/lib/node-esm/{chunk-KK7LP3UQ.mjs.map → chunk-YOABAQ7A.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/MarkdownContainer.tsx", "../../../src/components/MarkdownEditor/MarkdownEditor.tsx", "../../../src/hooks/useSelectCurrentThread.tsx", "../../../src/extensions.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Capabilities, Surface, useAppGraph, useCapabilities, usePluginManager } from '@dxos/app-framework';\nimport { DXN, Filter, Obj, Query } from '@dxos/echo';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { fullyQualifiedId, getSpace, useQuery, useSpace } from '@dxos/react-client/echo';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type SelectionManager } from '@dxos/react-ui-attention';\nimport {\n type CommandMenuGroup,\n type CommandMenuItem,\n insertAtCursor,\n insertAtLineStart,\n type PreviewLinkRef,\n type PreviewOptions,\n} from '@dxos/react-ui-editor';\nimport { DataType } from '@dxos/schema';\n\nimport { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';\nimport { useExtensions } from '../extensions';\nimport { DocumentType, type MarkdownSettingsProps } from '../types';\nimport { getFallbackName } from '../util';\n\nexport type MarkdownContainerProps = Pick<\n MarkdownEditorProps,\n 'role' | 'extensionProviders' | 'viewMode' | 'editorStateStore' | 'onViewModeChange'\n> & {\n id: string;\n object: DocumentType | DataType.Text | any;\n settings: MarkdownSettingsProps;\n selectionManager?: SelectionManager;\n};\n\nconst MarkdownContainer = ({\n id,\n role,\n object,\n settings,\n selectionManager,\n viewMode,\n editorStateStore,\n onViewModeChange,\n}: MarkdownContainerProps) => {\n const { t } = useTranslation();\n const scrollPastEnd = role === 'article';\n const doc = Obj.instanceOf(DocumentType, object) ? object : undefined;\n const text = Obj.instanceOf(DataType.Text, object) ? object : undefined;\n const [previewBlocks, setPreviewBlocks] = useState<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);\n const previewOptions = useMemo(\n (): PreviewOptions => ({\n addBlockContainer: (link, el) => {\n setPreviewBlocks((prev) => [...prev, { link, el }]);\n },\n removeBlockContainer: (link) => {\n setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));\n },\n }),\n [],\n );\n const extensions = useExtensions({\n document: doc,\n text,\n id,\n settings,\n selectionManager,\n viewMode,\n editorStateStore,\n previewOptions,\n });\n\n // TODO(wittjosiah): Factor out.\n const manager = usePluginManager();\n const resolve = useCallback(\n (typename: string) =>\n manager.context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {},\n [manager],\n );\n const space = getSpace(object);\n const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);\n const filter = useMemo(() => Filter.or(...objectForms.map((form) => Filter.type(form.objectSchema))), [objectForms]);\n const onLinkQuery = useCallback(\n async (query?: string): Promise<CommandMenuGroup[]> => {\n const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? '';\n const results = await space?.db.query(Query.select(filter)).run();\n // TODO(wittjosiah): Use `Obj.Any` type.\n const getLabel = (object: any) => {\n const type = Obj.getTypename(object)!;\n const metadata = resolve(type);\n return (\n metadata.label?.(object) || object.name || ['object name placeholder', { ns: type, default: 'New object' }]\n );\n };\n const items =\n results?.objects\n .filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name))\n // TODO(wittjosiah): Remove `any` type.\n .map((object: any): CommandMenuItem => {\n const metadata = resolve(Obj.getTypename(object)!);\n const label = toLocalizedString(getLabel(object), t);\n return {\n id: object.id,\n label,\n icon: metadata.icon,\n onSelect: (view, head) => {\n const link = `[${label}][${Obj.getDXN(object)}]`;\n if (query?.startsWith('@')) {\n insertAtLineStart(view, head, `!${link}\\n`);\n } else {\n insertAtCursor(view, head, `${link} `);\n }\n },\n };\n }) ?? [];\n return [{ id: 'echo', items }];\n },\n [filter, resolve, space],\n );\n\n const editor = doc ? (\n <DocumentEditor\n id={fullyQualifiedId(object)}\n role={role}\n document={doc}\n extensions={extensions}\n viewMode={viewMode}\n settings={settings}\n scrollPastEnd={scrollPastEnd}\n onViewModeChange={onViewModeChange}\n onLinkQuery={space ? onLinkQuery : undefined}\n />\n ) : text ? (\n <MarkdownEditor\n id={id}\n role={role}\n initialValue={text.content}\n extensions={extensions}\n viewMode={viewMode}\n toolbar={settings.toolbar}\n inputMode={settings.editorInputMode}\n scrollPastEnd={scrollPastEnd}\n onViewModeChange={onViewModeChange}\n onLinkQuery={space ? onLinkQuery : undefined}\n />\n ) : (\n // TODO(burdon): Normalize with above.\n <MarkdownEditor\n id={id}\n role={role}\n initialValue={object.text}\n extensions={extensions}\n viewMode={viewMode}\n toolbar={settings.toolbar}\n inputMode={settings.editorInputMode}\n scrollPastEnd={scrollPastEnd}\n onViewModeChange={onViewModeChange}\n onLinkQuery={space ? onLinkQuery : undefined}\n />\n );\n\n return (\n <>\n {editor}\n {previewBlocks.map(({ link, el }) => (\n <PreviewBlock key={link.ref} link={link} el={el} />\n ))}\n </>\n );\n};\n\n// TODO(wittjosiah): This shouldn't be \"card\" but \"block\".\n// It's not a preview card but an interactive embedded object.\nconst PreviewBlock = ({ link, el }: { link: PreviewLinkRef; el: HTMLElement }) => {\n const echoDXN = useMemo(() => DXN.parse(link.ref).asEchoDXN(), [link.ref]);\n const space = useSpace(echoDXN?.spaceId);\n const [subject] = useQuery(space, Query.select(Filter.ids(echoDXN?.echoId ?? '')));\n const data = useMemo(() => ({ subject }), [subject]);\n\n return createPortal(<Surface role='card--document' data={data} limit={1} />, el);\n};\n\ntype DocumentEditorProps = Omit<MarkdownContainerProps, 'object' | 'extensionProviders' | 'editorStateStore'> &\n Pick<MarkdownEditorProps, 'id' | 'scrollPastEnd' | 'extensions' | 'onLinkQuery'> & {\n document: DocumentType;\n };\n\nexport const DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }: DocumentEditorProps) => {\n const space = getSpace(doc);\n\n // Migrate gradually to `fallbackName`.\n useEffect(() => {\n if (typeof doc.fallbackName === 'string') {\n return;\n }\n\n const fallbackName = doc.content?.target?.content ? getFallbackName(doc.content.target.content) : undefined;\n if (fallbackName) {\n doc.fallbackName = fallbackName;\n }\n }, [doc, doc.content]);\n\n // File dragging.\n const [upload] = useCapabilities(Capabilities.FileUploader);\n const handleFileUpload = useMemo(() => {\n if (space === undefined || upload === undefined) {\n return undefined;\n }\n\n // TODO(burdon): Re-order props: space, file.\n return async (file: File) => upload!(file, space);\n }, [space, upload]);\n\n const { graph } = useAppGraph();\n const customActions = useMemo(() => {\n return Rx.make((get) => {\n const actions = get(graph.actions(id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n return { nodes, edges: nodes.map((node) => ({ source: 'root', target: node.id })) };\n });\n }, [graph]);\n\n return (\n <MarkdownEditor\n id={id}\n initialValue={doc.content?.target?.content}\n viewMode={viewMode}\n toolbar={settings.toolbar}\n customActions={customActions}\n inputMode={settings.editorInputMode}\n onFileUpload={handleFileUpload}\n {...props}\n />\n );\n};\n\nexport default MarkdownContainer;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport React, { forwardRef, useMemo, useEffect, useCallback, useImperativeHandle, useRef } from 'react';\nimport { useDropzone } from 'react-dropzone';\n\nimport { type FileInfo } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { toLocalizedString, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n CommandMenu,\n type CommandMenuGroup,\n type DNDOptions,\n type EditorInputMode,\n type EditorSelectionState,\n type EditorStateStore,\n EditorToolbar,\n type EditorToolbarActionGraphProps,\n type EditorViewMode,\n RefPopover,\n type UseTextEditorProps,\n addLink,\n createElement,\n coreSlashCommands,\n createBasicExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n dropFile,\n editorGutter,\n editorSlots,\n filterItems,\n linkSlashCommands,\n processEditorPayload,\n stackItemContentEditorClassNames,\n useEditorToolbarState,\n useFormattingState,\n useTextEditor,\n useCommandMenu,\n type UseCommandMenuOptions,\n} from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { isNotFalsy, isNonNullable } from '@dxos/util';\n\nimport { useSelectCurrentThread } from '../../hooks';\nimport { MARKDOWN_PLUGIN } from '../../meta';\nimport { type MarkdownPluginState } from '../../types';\n\nexport type MarkdownEditorProps = {\n id: string;\n role?: string;\n inputMode?: EditorInputMode;\n scrollPastEnd?: boolean;\n slashCommandGroups?: CommandMenuGroup[];\n toolbar?: boolean;\n customActions?: EditorToolbarActionGraphProps['customActions'];\n // TODO(wittjosiah): Generalize custom toolbar actions (e.g. comment, upload, etc.)\n viewMode?: EditorViewMode;\n editorStateStore?: EditorStateStore;\n onViewModeChange?: (id: string, mode: EditorViewMode) => void;\n onLinkQuery?: (query?: string) => Promise<CommandMenuGroup[]>;\n onFileUpload?: (file: File) => Promise<FileInfo | undefined>;\n} & Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &\n Partial<Pick<MarkdownPluginState, 'extensionProviders'>>;\n\n/**\n * Base markdown editor component.\n * This component provides all the features of the markdown editor that do no depend on ECHO.\n * This allows it to be used as a common editor for markdown content on arbitrary backends (e.g. files).\n */\nexport const MarkdownEditor = ({\n extensions: _extensions,\n slashCommandGroups,\n onLinkQuery,\n ...props\n}: MarkdownEditorProps) => {\n const { t } = useTranslation();\n const viewRef = useRef<EditorView>();\n\n const getMenu = useCallback(\n (trigger: string, query?: string) => {\n switch (trigger) {\n case '@':\n return onLinkQuery?.(query) ?? [];\n case '/':\n default:\n return filterItems([coreSlashCommands, linkSlashCommands, ...(slashCommandGroups ?? [])], (item) =>\n query ? toLocalizedString(item.label, t).toLowerCase().includes(query.toLowerCase()) : true,\n );\n }\n },\n [onLinkQuery, slashCommandGroups],\n );\n\n const options = useMemo<UseCommandMenuOptions>(() => {\n const trigger = onLinkQuery ? ['/', '@'] : ['/'];\n return {\n viewRef,\n trigger,\n placeholder: {\n delay: 3_000,\n content: () => {\n return createElement('div', undefined, [\n createElement('span', { text: 'Press' }),\n ...trigger.map((text) =>\n createElement('span', {\n className: 'border border-separator rounded-sm mx-1 px-1.5 pt-[1px] pb-[2px]',\n text,\n }),\n ),\n createElement('span', { text: 'for commands.' }),\n ]);\n },\n },\n getMenu,\n };\n }, [getMenu]);\n\n const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = useCommandMenu(options);\n\n const extensions = useMemo(() => [_extensions, commandMenu].filter(isNotFalsy), [_extensions, commandMenu]);\n\n return (\n <RefPopover modal={false} {...refPopoverProps}>\n <MarkdownEditorImpl ref={viewRef} {...props} extensions={extensions} />\n <CommandMenu groups={groupsRef.current} currentItem={currentItem} onSelect={onSelect} />\n </RefPopover>\n );\n};\n\nconst MarkdownEditorImpl = forwardRef<EditorView | undefined, MarkdownEditorProps>(\n (\n {\n id,\n role = 'article',\n initialValue,\n customActions,\n editorStateStore,\n extensions,\n extensionProviders,\n scrollPastEnd,\n toolbar,\n viewMode,\n onFileUpload,\n onViewModeChange,\n },\n forwardedRef,\n ) => {\n const { t } = useTranslation(MARKDOWN_PLUGIN);\n const { themeMode } = useThemeContext();\n const toolbarState = useEditorToolbarState({ viewMode });\n const formattingObserver = useFormattingState(toolbarState);\n\n // Restore last selection and scroll point.\n const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);\n\n // Extensions from other plugins.\n // TODO(burdon): Reconcile with DocumentEditor.useExtensions.\n const providerExtensions = useMemo(\n () => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable),\n [extensionProviders],\n );\n\n // TODO(wittjosiah): Factor out to file uploader plugin.\n // Drag files.\n const handleDrop: DNDOptions['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 const {\n parentRef,\n view: editorView,\n focusAttributes,\n } = useTextEditor(\n () => ({\n initialValue,\n extensions: [\n formattingObserver,\n createBasicExtensions({\n readOnly: viewMode === 'readonly',\n placeholder: t('editor placeholder'),\n scrollPastEnd: role === 'section' ? false : scrollPastEnd,\n }),\n createMarkdownExtensions({ themeMode }),\n createThemeExtensions({ themeMode, syntaxHighlighting: true, slots: editorSlots }),\n editorGutter,\n role !== 'section' && onFileUpload && dropFile({ onDrop: handleDrop }),\n providerExtensions,\n extensions,\n ].filter(isNotFalsy),\n ...(role !== 'section' && {\n id,\n scrollTo,\n selection,\n // TODO(wittjosiah): Autofocus based on layout is racy.\n // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,\n moveToEndOfLine: true,\n }),\n }),\n [id, formattingObserver, viewMode, themeMode, extensions, providerExtensions],\n );\n\n useImperativeHandle(forwardedRef, () => editorView, [editorView]);\n useTest(editorView);\n useSelectCurrentThread(editorView, id);\n\n // https://react-dropzone.js.org/#src\n const { acceptedFiles, getInputProps, open } = useDropzone({\n multiple: false,\n noDrag: true,\n accept: {\n 'image/*': ['.jpg', '.jpeg', '.png', '.gif'],\n },\n });\n\n useEffect(() => {\n if (editorView && onFileUpload && acceptedFiles.length) {\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 const info = await onFileUpload(file);\n if (info) {\n addLink({ url: info.url, image: true })(editorView);\n }\n });\n }\n }, [acceptedFiles, editorView, onFileUpload]);\n\n const getView = useCallback(() => {\n invariant(editorView);\n return editorView;\n }, [editorView]);\n\n const handleViewModeChange = useCallback(\n (mode: EditorViewMode) => onViewModeChange?.(id, mode),\n [id, onViewModeChange],\n );\n\n const handleImageUpload = useCallback(() => {\n if (onFileUpload) {\n open();\n }\n }, [onFileUpload]);\n\n return (\n <StackItem.Content toolbar={!!toolbar}>\n {toolbar && (\n <>\n <EditorToolbar\n attendableId={id}\n role={role}\n state={toolbarState}\n customActions={customActions}\n getView={getView}\n image={handleImageUpload}\n viewMode={handleViewModeChange}\n />\n <input {...getInputProps()} />\n </>\n )}\n <div\n role='none'\n ref={parentRef}\n data-testid='composer.markdownRoot'\n data-toolbar={toolbar ? 'enabled' : 'disabled'}\n className={stackItemContentEditorClassNames(role)}\n data-popover-collision-boundary={true}\n {...focusAttributes}\n />\n </StackItem.Content>\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) => {\n useEffect(() => {\n const composer = (window as any).composer;\n if (composer) {\n composer.editorView = view;\n }\n }, [view]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { Schema } from 'effect';\nimport { useMemo } from 'react';\n\nimport { createResolver, LayoutAction, useIntentResolver } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { Cursor, setSelection } from '@dxos/react-ui-editor';\n\nimport { MARKDOWN_PLUGIN } from '../meta';\n\n/**\n * Handle scrolling and selection of the current thread in a markdown editor.\n */\nexport const useSelectCurrentThread = (editorView: EditorView | undefined, documentId: string) => {\n const scrollIntoViewResolver = useMemo(\n () =>\n createResolver({\n intent: LayoutAction.UpdateLayout,\n position: 'hoist',\n filter: (data): data is { part: 'current'; subject: string; options: { cursor: string } } => {\n if (!Schema.is(LayoutAction.ScrollIntoView.fields.input)(data)) {\n return false;\n }\n\n return !!editorView && data.subject === documentId && !!data.options?.cursor;\n },\n resolve: ({ options: { cursor } }) => {\n invariant(editorView, 'Editor view is not defined.');\n const range = Cursor.getRangeFromCursor(editorView.state, cursor!);\n if (range) {\n const selection = editorView.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;\n const effects = [\n // NOTE: This does not use the DOM scrollIntoView function.\n EditorView.scrollIntoView(range.from, { y: 'start', yMargin: 96 }),\n ];\n if (selection) {\n // Update the editor selection to get bi-directional highlighting.\n effects.push(setSelection.of({ current: documentId }));\n }\n\n editorView.dispatch({\n effects,\n selection: selection ? { anchor: range.from } : undefined,\n });\n }\n },\n }),\n [documentId, editorView],\n );\n\n useIntentResolver(MARKDOWN_PLUGIN, scrollIntoViewResolver);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport {\n createIntent,\n LayoutAction,\n type PromiseIntentDispatcher,\n useCapabilities,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { createDocAccessor, fullyQualifiedId, getSpace, type QueryResult } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ThemeProvider } from '@dxos/react-ui';\nimport { type SelectionManager } from '@dxos/react-ui-attention';\nimport {\n type AutocompleteResult,\n type EditorStateStore,\n type EditorViewMode,\n type Extension,\n InputModeExtensions,\n createDataExtensions,\n autocomplete,\n decorateMarkdown,\n folding,\n formattingKeymap,\n linkTooltip,\n listener,\n preview,\n selectionState,\n typewriter,\n type RenderCallback,\n EditorView,\n documentId,\n Cursor,\n type PreviewOptions,\n} from '@dxos/react-ui-editor';\nimport { defaultTx } from '@dxos/react-ui-theme';\nimport { type DataType } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { MarkdownCapabilities } from './capabilities';\nimport { type DocumentType, type MarkdownSettingsProps } from './types';\nimport { setFallbackName } from './util';\n\ntype ExtensionsOptions = {\n document?: DocumentType;\n id?: string;\n text?: DataType.Text;\n dispatch?: PromiseIntentDispatcher;\n query?: QueryResult<DocumentType>;\n settings: MarkdownSettingsProps;\n selectionManager?: SelectionManager;\n viewMode?: EditorViewMode;\n editorStateStore?: EditorStateStore;\n previewOptions?: PreviewOptions;\n};\n\n// TODO(burdon): Merge with createBaseExtensions below.\nexport const useExtensions = ({\n document,\n id,\n text,\n settings,\n selectionManager,\n viewMode,\n editorStateStore,\n previewOptions,\n}: ExtensionsOptions): Extension[] => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const identity = useIdentity();\n const space = getSpace(document) ?? getSpace(text);\n\n // TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.\n // TODO(burdon): Unsubscribe.\n // const query = space?.db.query(Filter.type(DocumentType));\n // query?.subscribe();\n const baseExtensions = useMemo(\n () =>\n createBaseExtensions({\n document,\n id,\n text,\n settings,\n selectionManager,\n viewMode,\n previewOptions,\n dispatch,\n // query,\n }),\n [\n document,\n id,\n text,\n viewMode,\n dispatch,\n previewOptions,\n settings,\n settings.editorInputMode,\n settings.folding,\n settings.numberedHeadings,\n settings.debug,\n settings.typewriter,\n selectionManager,\n ],\n );\n\n const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);\n\n //\n // External extensions from other plugins.\n //\n const pluginExtensions = useMemo<Extension[]>(() => {\n if (!document) {\n return [];\n }\n\n return extensionProviders.flat().reduce((acc: Extension[], provider) => {\n const extension = typeof provider === 'function' ? provider({ document }) : provider;\n if (extension) {\n acc.push(extension);\n }\n\n return acc;\n }, []);\n }, [extensionProviders, document]);\n\n //\n // Basic plugins.\n //\n return useMemo<Extension[]>(\n () =>\n [\n // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.\n document &&\n createDataExtensions({\n id: document.id,\n text: document.content.target && createDocAccessor(document.content.target, ['content']),\n space,\n identity,\n }),\n text &&\n id &&\n createDataExtensions({\n id,\n text: createDocAccessor(text, ['content']),\n space,\n identity,\n }),\n selectionState(editorStateStore),\n document &&\n listener({\n onChange: (text) => setFallbackName(document, text),\n }),\n baseExtensions,\n pluginExtensions,\n ].filter(isNotFalsy),\n [baseExtensions, pluginExtensions, document, document?.content?.target, text, id, space, identity],\n );\n};\n\n/**\n * Create extension instances for editor.\n */\nconst createBaseExtensions = ({\n document,\n id,\n dispatch,\n settings,\n selectionManager,\n query,\n viewMode,\n previewOptions,\n}: ExtensionsOptions): Extension[] => {\n const extensions: Extension[] = [\n selectionManager && selectionChange(selectionManager),\n settings.editorInputMode && InputModeExtensions[settings.editorInputMode],\n settings.folding && folding(),\n ].filter(isNotFalsy);\n\n //\n // Markdown\n //\n if (viewMode !== 'source') {\n extensions.push(\n ...[\n formattingKeymap(),\n decorateMarkdown({\n selectionChangeDelay: 100,\n numberedHeadings: settings.numberedHeadings ? { from: 2 } : undefined,\n // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.\n renderLinkButton:\n dispatch && (document || id)\n ? createLinkRenderer((id: string) => {\n void dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [id],\n options: {\n pivotId: document ? fullyQualifiedId(document) : id,\n },\n }),\n );\n })\n : undefined,\n }),\n linkTooltip(renderLinkTooltip),\n preview(previewOptions),\n ],\n );\n }\n\n //\n // Autocomplete object links.\n //\n if (query) {\n extensions.push(\n autocomplete({\n onSearch: (text: string) => {\n // TODO(burdon): Specify filter (e.g., stack).\n return query.objects\n .map<AutocompleteResult | undefined>((object) =>\n object.name?.length && object.id !== document?.id\n ? {\n label: object.name,\n // TODO(burdon): Factor out URL builder.\n apply: `[${object.name}](/${fullyQualifiedId(object)})`,\n }\n : undefined,\n )\n .filter(isNotFalsy);\n },\n }),\n );\n }\n\n if (settings.debug) {\n const items = settings.typewriter?.split(/[,\\n]/) ?? '';\n if (items) {\n extensions.push(typewriter({ items }));\n }\n }\n\n return extensions;\n};\n\nexport const selectionChange = (selectionManager: SelectionManager) => {\n return EditorView.updateListener.of((update) => {\n if (update.selectionSet) {\n const id = update.state.facet(documentId);\n const cursorConverter = update.state.facet(Cursor.converter);\n const selection = update.state.selection;\n const ranges = selection.ranges\n .map((range) => ({\n from: cursorConverter.toCursor(range.from),\n to: cursorConverter.toCursor(range.to),\n }))\n .filter(({ from, to }) => to > from);\n selectionManager.updateMultiRange(id, ranges);\n }\n });\n};\n\n// TODO(burdon): Factor out styles.\nconst style = {\n hover: 'rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400',\n icon: 'inline-block leading-none mis-1 cursor-pointer',\n};\n\nconst createLinkRenderer =\n (onSelectObject: (id: string) => void): RenderCallback<{ url: string }> =>\n (el, { url }) => {\n // TODO(burdon): Formalize/document internal link format.\n const isInternal =\n url.startsWith('/') ||\n // TODO(wittjosiah): This should probably be parsed out on paste?\n url.startsWith(window.location.origin);\n\n const options: AnchorHTMLAttributes<any> = isInternal\n ? {\n onClick: () => {\n const qualifiedId = url.split('/').at(-1);\n invariant(qualifiedId, 'Invalid link format.');\n onSelectObject(qualifiedId);\n },\n }\n : {\n href: url,\n rel: 'noreferrer',\n target: '_blank',\n };\n\n renderRoot(\n el,\n <a {...options} className={style.hover}>\n <Icon\n icon={isInternal ? 'ph--arrow-square-down--bold' : 'ph--arrow-square-out--bold'}\n size={4}\n classNames={style.icon}\n />\n </a>,\n );\n };\n\nconst renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {\n const web = new URL(url);\n renderRoot(\n el,\n <a href={url} rel='noreferrer' target='_blank' className={style.hover}>\n {web.origin}\n <Icon icon='ph--arrow-square-out--bold' size={4} classNames={style.icon} />\n </a>,\n );\n};\n\n// TODO(burdon): Remove react rendering; use DOM directly.\nexport const renderRoot = <T extends Element>(root: T, node: ReactNode): T => {\n createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);\n return root;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_echo", "import_react", "import_react_ui", "import_react_ui_editor", "import_app_framework", "import_invariant", "import_util", "useSelectCurrentThread", "editorView", "documentId", "scrollIntoViewResolver", "useMemo", "createResolver", "intent", "LayoutAction", "UpdateLayout", "position", "filter", "data", "Schema", "is", "ScrollIntoView", "fields", "input", "subject", "options", "cursor", "resolve", "invariant", "range", "Cursor", "getRangeFromCursor", "state", "selection", "main", "from", "anchor", "undefined", "effects", "EditorView", "scrollIntoView", "y", "yMargin", "push", "setSelection", "of", "current", "dispatch", "useIntentResolver", "MARKDOWN_PLUGIN", "MarkdownEditor", "extensions", "_extensions", "slashCommandGroups", "onLinkQuery", "props", "t", "useTranslation", "viewRef", "useRef", "getMenu", "useCallback", "trigger", "query", "filterItems", "coreSlashCommands", "linkSlashCommands", "item", "toLocalizedString", "label", "toLowerCase", "includes", "placeholder", "delay", "content", "createElement", "text", "map", "className", "commandMenu", "groupsRef", "currentItem", "onSelect", "refPopoverProps", "useCommandMenu", "isNotFalsy", "React", "RefPopover", "modal", "MarkdownEditorImpl", "ref", "CommandMenu", "groups", "forwardRef", "id", "role", "initialValue", "customActions", "editorStateStore", "extensionProviders", "scrollPastEnd", "toolbar", "viewMode", "onFileUpload", "onViewModeChange", "forwardedRef", "themeMode", "useThemeContext", "toolbarState", "useEditorToolbarState", "formattingObserver", "useFormattingState", "scrollTo", "getState", "providerExtensions", "flatMap", "provider", "isNonNullable", "handleDrop", "view", "files", "file", "info", "processEditorPayload", "type", "url", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "readOnly", "createMarkdownExtensions", "createThemeExtensions", "syntaxHighlighting", "slots", "editorSlots", "editorGutter", "dropFile", "onDrop", "moveToEndOfLine", "useImperativeHandle", "useTest", "acceptedFiles", "getInputProps", "open", "useDropzone", "multiple", "noDrag", "accept", "useEffect", "length", "requestAnimationFrame", "f", "File", "name", "lastModified", "addLink", "image", "getView", "handleViewModeChange", "mode", "handleImageUpload", "StackItem", "Content", "EditorToolbar", "attendableId", "div", "data-testid", "data-toolbar", "stackItemContentEditorClassNames", "data-popover-collision-boundary", "composer", "window", "useExtensions", "document", "settings", "selectionManager", "previewOptions", "dispatchPromise", "useIntentDispatcher", "identity", "useIdentity", "space", "getSpace", "baseExtensions", "createBaseExtensions", "editorInputMode", "folding", "numberedHeadings", "debug", "typewriter", "useCapabilities", "MarkdownCapabilities", "Extensions", "pluginExtensions", "flat", "reduce", "acc", "extension", "createDataExtensions", "target", "createDocAccessor", "selectionState", "listener", "onChange", "setFallbackName", "selectionChange", "InputModeExtensions", "formattingKeymap", "decorateMarkdown", "selectionChangeDelay", "renderLinkButton", "createLinkRenderer", "createIntent", "Open", "part", "pivotId", "fullyQualifiedId", "linkTooltip", "renderLinkTooltip", "preview", "autocomplete", "onSearch", "objects", "object", "apply", "items", "split", "updateListener", "update", "selectionSet", "facet", "cursorConverter", "converter", "ranges", "toCursor", "to", "updateMultiRange", "style", "hover", "icon", "onSelectObject", "el", "isInternal", "startsWith", "location", "origin", "onClick", "qualifiedId", "at", "href", "rel", "renderRoot", "a", "Icon", "size", "classNames", "web", "URL", "root", "node", "createRoot", "render", "ThemeProvider", "tx", "defaultTx", "MarkdownContainer", "doc", "Obj", "instanceOf", "DocumentType", "DataType", "Text", "previewBlocks", "setPreviewBlocks", "useState", "addBlockContainer", "link", "prev", "removeBlockContainer", "prevLink", "manager", "usePluginManager", "typename", "context", "getCapabilities", "Capabilities", "Metadata", "find", "metadata", "objectForms", "SpaceCapabilities", "ObjectForm", "Filter", "or", "form", "objectSchema", "slice", "results", "db", "Query", "select", "run", "getLabel", "getTypename", "ns", "default", "head", "getDXN", "insertAtLineStart", "insertAtCursor", "editor", "DocumentEditor", "inputMode", "PreviewBlock", "key", "echoDXN", "DXN", "parse", "asEchoDXN", "useSpace", "spaceId", "useQuery", "ids", "echoId", "createPortal", "Surface", "limit", "fallbackName", "getFallbackName", "upload", "FileUploader", "handleFileUpload", "graph", "useAppGraph", "Rx", "make", "get", "actions", "nodes", "action", "properties", "disposition", "edges", "source"]
7
+ }
@@ -26,36 +26,36 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var MarkdownPreview_H7FFIWJH_exports = {};
30
- __export(MarkdownPreview_H7FFIWJH_exports, {
29
+ var MarkdownPreview_GCJJCXY6_exports = {};
30
+ __export(MarkdownPreview_GCJJCXY6_exports, {
31
31
  MarkdownPreview: () => MarkdownPreview,
32
32
  default: () => MarkdownPreview_default
33
33
  });
34
- module.exports = __toCommonJS(MarkdownPreview_H7FFIWJH_exports);
35
- var import_chunk_G7RBJX22 = require("./chunk-G7RBJX22.cjs");
36
- var import_chunk_RQS4KBMG = require("./chunk-RQS4KBMG.cjs");
34
+ module.exports = __toCommonJS(MarkdownPreview_GCJJCXY6_exports);
35
+ var import_chunk_CJLYFGPI = require("./chunk-CJLYFGPI.cjs");
36
+ var import_chunk_3HHV4MM6 = require("./chunk-3HHV4MM6.cjs");
37
37
  var import_chunk_ZU5OIHCY = require("./chunk-ZU5OIHCY.cjs");
38
38
  var import_tracking = require("@preact-signals/safe-react/tracking");
39
39
  var import_effect = require("effect");
40
40
  var import_react = __toESM(require("react"));
41
41
  var import_app_framework = require("@dxos/app-framework");
42
- var import_echo_schema = require("@dxos/echo-schema");
43
- var import_echo = require("@dxos/react-client/echo");
42
+ var import_echo = require("@dxos/echo");
43
+ var import_echo2 = require("@dxos/react-client/echo");
44
44
  var import_react_ui = require("@dxos/react-ui");
45
45
  var import_react_ui_stack = require("@dxos/react-ui-stack");
46
46
  var import_schema = require("@dxos/schema");
47
47
  var getTitle = (subject, fallback) => {
48
- if ((0, import_echo_schema.isInstanceOf)(import_chunk_RQS4KBMG.DocumentType, subject)) {
49
- return subject.name ?? subject.fallbackName ?? (0, import_chunk_G7RBJX22.getFallbackName)(subject.content?.target?.content ?? fallback);
50
- } else if ((0, import_echo_schema.isInstanceOf)(import_schema.DataType.Text, subject)) {
51
- return (0, import_chunk_G7RBJX22.getFallbackName)(subject.content);
48
+ if (import_echo.Obj.instanceOf(import_chunk_3HHV4MM6.DocumentType, subject)) {
49
+ return subject.name ?? subject.fallbackName ?? (0, import_chunk_CJLYFGPI.getFallbackName)(subject.content?.target?.content ?? fallback);
50
+ } else if (import_echo.Obj.instanceOf(import_schema.DataType.Text, subject)) {
51
+ return (0, import_chunk_CJLYFGPI.getFallbackName)(subject.content);
52
52
  }
53
53
  };
54
54
  var getSnippet = (subject, fallback) => {
55
- if ((0, import_echo_schema.isInstanceOf)(import_chunk_RQS4KBMG.DocumentType, subject)) {
56
- return (0, import_chunk_G7RBJX22.getAbstract)(subject.content?.target?.content ?? fallback);
57
- } else if ((0, import_echo_schema.isInstanceOf)(import_schema.DataType.Text, subject)) {
58
- return (0, import_chunk_G7RBJX22.getAbstract)(subject.content);
55
+ if (import_echo.Obj.instanceOf(import_chunk_3HHV4MM6.DocumentType, subject)) {
56
+ return (0, import_chunk_CJLYFGPI.getAbstract)(subject.content?.target?.content ?? fallback);
57
+ } else if (import_echo.Obj.instanceOf(import_schema.DataType.Text, subject)) {
58
+ return (0, import_chunk_CJLYFGPI.getAbstract)(subject.content);
59
59
  }
60
60
  };
61
61
  var MarkdownPreview = ({ subject, role }) => {
@@ -74,7 +74,7 @@ var MarkdownPreview = ({ subject, role }) => {
74
74
  }), (0, import_app_framework.chain)(import_app_framework.LayoutAction.Open, {
75
75
  part: "main",
76
76
  subject: [
77
- (0, import_echo.fullyQualifiedId)(subject)
77
+ (0, import_echo2.fullyQualifiedId)(subject)
78
78
  ]
79
79
  }))), [
80
80
  dispatch,
@@ -100,4 +100,4 @@ var MarkdownPreview_default = MarkdownPreview;
100
100
  0 && (module.exports = {
101
101
  MarkdownPreview
102
102
  });
103
- //# sourceMappingURL=MarkdownPreview-H7FFIWJH.cjs.map
103
+ //# sourceMappingURL=MarkdownPreview-GCJJCXY6.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/MarkdownPreview/MarkdownPreview.tsx", "../../../src/components/MarkdownPreview/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { pipe } from 'effect';\nimport React, { useCallback } from 'react';\n\nimport { chain, createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { type PreviewProps } from '@dxos/plugin-preview';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { Button, Icon, useTranslation } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-stack';\nimport { DataType } from '@dxos/schema';\n\nimport { MARKDOWN_PLUGIN } from '../../meta';\nimport { DocumentType } from '../../types';\nimport { getAbstract, getFallbackName } from '../../util';\n\n// TODO(burdon): Factor out.\nconst getTitle = (subject: DocumentType | DataType.Text, fallback: string) => {\n if (Obj.instanceOf(DocumentType, subject)) {\n return subject.name ?? subject.fallbackName ?? getFallbackName(subject.content?.target?.content ?? fallback);\n } else if (Obj.instanceOf(DataType.Text, subject)) {\n return getFallbackName(subject.content);\n }\n};\n\n// TODO(burdon): Factor out.\nconst getSnippet = (subject: DocumentType | DataType.Text, fallback: string) => {\n if (Obj.instanceOf(DocumentType, subject)) {\n return getAbstract(subject.content?.target?.content ?? fallback);\n } else if (Obj.instanceOf(DataType.Text, subject)) {\n return getAbstract(subject.content);\n }\n};\n\nexport const MarkdownPreview = ({ subject, role }: PreviewProps<DocumentType | DataType.Text>) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { t } = useTranslation(MARKDOWN_PLUGIN);\n const snippet = getSnippet(subject, t('fallback abstract'));\n\n // TODO(wittjosiah): Factor out so this component isn't dependent on the app framework.\n const handleNavigate = useCallback(\n () =>\n dispatch(\n pipe(\n createIntent(LayoutAction.UpdatePopover, {\n part: 'popover',\n subject: null,\n options: { state: false, anchorId: '' },\n }),\n chain(LayoutAction.Open, { part: 'main', subject: [fullyQualifiedId(subject)] }),\n ),\n ),\n [dispatch, subject],\n );\n\n return (\n <Card.Container role={role}>\n <Card.Heading>{getTitle(subject, t('fallback title'))}</Card.Heading>\n {snippet && <Card.Text classNames='line-clamp-3 break-words col-span-2'>{snippet}</Card.Text>}\n <Card.Chrome>\n <Button onClick={handleNavigate}>\n <span className='grow'>{t('navigate to document label')}</span>\n <Icon icon='ph--arrow-right--regular' />\n </Button>\n </Card.Chrome>\n </Card.Container>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { MarkdownPreview } from './MarkdownPreview';\n\nexport * from './MarkdownPreview';\n\nexport default MarkdownPreview;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oBAAqB;AACrB,mBAAmC;AAEnC,2BAAuE;AACvE,kBAAoB;AAEpB,IAAAA,eAAiC;AACjC,sBAA6C;AAC7C,4BAAqB;AACrB,oBAAyB;AAOzB,IAAMC,WAAW,CAACC,SAAuCC,aAAAA;AACvD,MAAIC,gBAAIC,WAAWC,oCAAcJ,OAAAA,GAAU;AACzC,WAAOA,QAAQK,QAAQL,QAAQM,oBAAgBC,uCAAgBP,QAAQQ,SAASC,QAAQD,WAAWP,QAAAA;EACrG,WAAWC,gBAAIC,WAAWO,uBAASC,MAAMX,OAAAA,GAAU;AACjD,eAAOO,uCAAgBP,QAAQQ,OAAO;EACxC;AACF;AAGA,IAAMI,aAAa,CAACZ,SAAuCC,aAAAA;AACzD,MAAIC,gBAAIC,WAAWC,oCAAcJ,OAAAA,GAAU;AACzC,eAAOa,mCAAYb,QAAQQ,SAASC,QAAQD,WAAWP,QAAAA;EACzD,WAAWC,gBAAIC,WAAWO,uBAASC,MAAMX,OAAAA,GAAU;AACjD,eAAOa,mCAAYb,QAAQQ,OAAO;EACpC;AACF;AAEO,IAAMM,kBAAkB,CAAC,EAAEd,SAASe,KAAI,MAA8C;;;AAC3F,UAAM,EAAEC,iBAAiBC,SAAQ,QAAKC,0CAAAA;AACtC,UAAM,EAAEC,EAAC,QAAKC,gCAAeC,qCAAAA;AAC7B,UAAMC,UAAUV,WAAWZ,SAASmB,EAAE,mBAAA,CAAA;AAGtC,UAAMI,qBAAiBC,0BACrB,MACEP,aACEQ,wBACEC,mCAAaC,kCAAaC,eAAe;MACvCC,MAAM;MACN7B,SAAS;MACT8B,SAAS;QAAEC,OAAO;QAAOC,UAAU;MAAG;IACxC,CAAA,OACAC,4BAAMN,kCAAaO,MAAM;MAAEL,MAAM;MAAQ7B,SAAS;YAACmC,+BAAiBnC,OAAAA;;IAAU,CAAA,CAAA,CAAA,GAGpF;MAACiB;MAAUjB;KAAQ;AAGrB,WACE,6BAAAoC,QAAA,cAACC,2BAAKC,WAAS;MAACvB;OACd,6BAAAqB,QAAA,cAACC,2BAAKE,SAAO,MAAExC,SAASC,SAASmB,EAAE,gBAAA,CAAA,CAAA,GAClCG,WAAW,6BAAAc,QAAA,cAACC,2BAAK1B,MAAI;MAAC6B,YAAW;OAAuClB,OAAAA,GACzE,6BAAAc,QAAA,cAACC,2BAAKI,QAAM,MACV,6BAAAL,QAAA,cAACM,wBAAAA;MAAOC,SAASpB;OACf,6BAAAa,QAAA,cAACQ,QAAAA;MAAKC,WAAU;OAAQ1B,EAAE,4BAAA,CAAA,GAC1B,6BAAAiB,QAAA,cAACU,sBAAAA;MAAKC,MAAK;;;;;AAKrB;AC9DA,IAAA,0BAAejC;",
6
+ "names": ["import_echo", "getTitle", "subject", "fallback", "Obj", "instanceOf", "DocumentType", "name", "fallbackName", "getFallbackName", "content", "target", "DataType", "Text", "getSnippet", "getAbstract", "MarkdownPreview", "role", "dispatchPromise", "dispatch", "useIntentDispatcher", "t", "useTranslation", "MARKDOWN_PLUGIN", "snippet", "handleNavigate", "useCallback", "pipe", "createIntent", "LayoutAction", "UpdatePopover", "part", "options", "state", "anchorId", "chain", "Open", "fullyQualifiedId", "React", "Card", "Container", "Heading", "classNames", "Chrome", "Button", "onClick", "span", "className", "Icon", "icon"]
7
+ }
@@ -16,28 +16,28 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var anchor_sort_NHVF23EU_exports = {};
20
- __export(anchor_sort_NHVF23EU_exports, {
19
+ var anchor_sort_V3T4SFFI_exports = {};
20
+ __export(anchor_sort_V3T4SFFI_exports, {
21
21
  default: () => anchor_sort_default
22
22
  });
23
- module.exports = __toCommonJS(anchor_sort_NHVF23EU_exports);
24
- var import_chunk_RQS4KBMG = require("./chunk-RQS4KBMG.cjs");
23
+ module.exports = __toCommonJS(anchor_sort_V3T4SFFI_exports);
24
+ var import_chunk_3HHV4MM6 = require("./chunk-3HHV4MM6.cjs");
25
25
  var import_chunk_ZU5OIHCY = require("./chunk-ZU5OIHCY.cjs");
26
26
  var import_app_framework = require("@dxos/app-framework");
27
- var import_echo_schema = require("@dxos/echo-schema");
28
- var import_echo = require("@dxos/react-client/echo");
27
+ var import_echo = require("@dxos/echo");
28
+ var import_echo2 = require("@dxos/react-client/echo");
29
29
  var anchor_sort_default = () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.AnchorSort, {
30
- key: (0, import_echo_schema.getSchemaTypename)(import_chunk_RQS4KBMG.DocumentType),
30
+ key: import_echo.Type.getTypename(import_chunk_3HHV4MM6.DocumentType),
31
31
  sort: (anchorA, anchorB) => {
32
- const doc = (0, import_echo.getTarget)(anchorA);
33
- const accessor = doc.content.target ? (0, import_echo.createDocAccessor)(doc.content.target, [
32
+ const doc = (0, import_echo2.getTarget)(anchorA);
33
+ const accessor = doc.content.target ? (0, import_echo2.createDocAccessor)(doc.content.target, [
34
34
  "content"
35
35
  ]) : void 0;
36
- if (doc !== (0, import_echo.getTarget)(anchorB) || !accessor) {
36
+ if (doc !== (0, import_echo2.getTarget)(anchorB) || !accessor) {
37
37
  return 0;
38
38
  }
39
39
  const getStartPosition = (cursor) => {
40
- const range = cursor ? (0, import_echo.getRangeFromCursor)(accessor, cursor) : void 0;
40
+ const range = cursor ? (0, import_echo2.getRangeFromCursor)(accessor, cursor) : void 0;
41
41
  return range?.start ?? Number.MAX_SAFE_INTEGER;
42
42
  };
43
43
  const posA = getStartPosition(anchorA.anchor);
@@ -45,4 +45,4 @@ var anchor_sort_default = () => (0, import_app_framework.contributes)(import_app
45
45
  return posA - posB;
46
46
  }
47
47
  });
48
- //# sourceMappingURL=anchor-sort-NHVF23EU.cjs.map
48
+ //# sourceMappingURL=anchor-sort-V3T4SFFI.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/anchor-sort.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Type } from '@dxos/echo';\nimport { createDocAccessor, getRangeFromCursor, getTarget } from '@dxos/react-client/echo';\n\nimport { DocumentType } from '../types';\n\nexport default () =>\n contributes(Capabilities.AnchorSort, {\n key: Type.getTypename(DocumentType)!,\n sort: (anchorA, anchorB) => {\n const doc = getTarget(anchorA) as DocumentType;\n const accessor = doc.content.target ? createDocAccessor(doc.content.target, ['content']) : undefined;\n if (doc !== getTarget(anchorB) || !accessor) {\n return 0;\n }\n\n const getStartPosition = (cursor: string | undefined) => {\n const range = cursor ? getRangeFromCursor(accessor, cursor) : undefined;\n return range?.start ?? Number.MAX_SAFE_INTEGER;\n };\n\n const posA = getStartPosition(anchorA.anchor);\n const posB = getStartPosition(anchorB.anchor);\n return posA - posB;\n },\n });\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA0C;AAC1C,kBAAqB;AACrB,IAAAA,eAAiE;AAIjE,IAAA,sBAAe,UACbC,kCAAYC,kCAAaC,YAAY;EACnCC,KAAKC,iBAAKC,YAAYC,kCAAAA;EACtBC,MAAM,CAACC,SAASC,YAAAA;AACd,UAAMC,UAAMC,wBAAUH,OAAAA;AACtB,UAAMI,WAAWF,IAAIG,QAAQC,aAASC,gCAAkBL,IAAIG,QAAQC,QAAQ;MAAC;KAAU,IAAIE;AAC3F,QAAIN,YAAQC,wBAAUF,OAAAA,KAAY,CAACG,UAAU;AAC3C,aAAO;IACT;AAEA,UAAMK,mBAAmB,CAACC,WAAAA;AACxB,YAAMC,QAAQD,aAASE,iCAAmBR,UAAUM,MAAAA,IAAUF;AAC9D,aAAOG,OAAOE,SAASC,OAAOC;IAChC;AAEA,UAAMC,OAAOP,iBAAiBT,QAAQiB,MAAM;AAC5C,UAAMC,OAAOT,iBAAiBR,QAAQgB,MAAM;AAC5C,WAAOD,OAAOE;EAChB;AACF,CAAA;",
6
+ "names": ["import_echo", "contributes", "Capabilities", "AnchorSort", "key", "Type", "getTypename", "DocumentType", "sort", "anchorA", "anchorB", "doc", "getTarget", "accessor", "content", "target", "createDocAccessor", "undefined", "getStartPosition", "cursor", "range", "getRangeFromCursor", "start", "Number", "MAX_SAFE_INTEGER", "posA", "anchor", "posB"]
7
+ }
@@ -16,40 +16,42 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var app_graph_serializer_CLALIYN3_exports = {};
20
- __export(app_graph_serializer_CLALIYN3_exports, {
19
+ var app_graph_serializer_E6BXEDEL_exports = {};
20
+ __export(app_graph_serializer_E6BXEDEL_exports, {
21
21
  default: () => app_graph_serializer_default
22
22
  });
23
- module.exports = __toCommonJS(app_graph_serializer_CLALIYN3_exports);
24
- var import_chunk_ZDTL47I7 = require("./chunk-ZDTL47I7.cjs");
25
- var import_chunk_RQS4KBMG = require("./chunk-RQS4KBMG.cjs");
23
+ module.exports = __toCommonJS(app_graph_serializer_E6BXEDEL_exports);
24
+ var import_chunk_LQAC5HL7 = require("./chunk-LQAC5HL7.cjs");
25
+ var import_chunk_3HHV4MM6 = require("./chunk-3HHV4MM6.cjs");
26
26
  var import_chunk_ZU5OIHCY = require("./chunk-ZU5OIHCY.cjs");
27
27
  var import_effect = require("effect");
28
28
  var import_app_framework = require("@dxos/app-framework");
29
+ var import_echo = require("@dxos/echo");
29
30
  var import_types = require("@dxos/plugin-space/types");
30
- var import_echo = require("@dxos/react-client/echo");
31
+ var import_echo2 = require("@dxos/react-client/echo");
32
+ var import_schema = require("@dxos/schema");
31
33
  var app_graph_serializer_default = (context) => (0, import_app_framework.contributes)(import_app_framework.Capabilities.AppGraphSerializer, [
32
34
  {
33
- inputType: import_chunk_RQS4KBMG.DocumentType.typename,
35
+ inputType: import_chunk_3HHV4MM6.DocumentType.typename,
34
36
  outputType: "text/markdown",
35
37
  // Reconcile with metadata serializers.
36
38
  serialize: async (node) => {
37
39
  const doc = node.data;
38
40
  const content = await doc.content.load();
39
41
  return {
40
- name: doc.name || doc.fallbackName || import_chunk_ZDTL47I7.translations_default[0]["en-US"][import_chunk_RQS4KBMG.DocumentType.typename]["object name placeholder"],
42
+ name: doc.name || doc.fallbackName || import_chunk_LQAC5HL7.translations_default[0]["en-US"][import_chunk_3HHV4MM6.DocumentType.typename]["object name placeholder"],
41
43
  data: content.content,
42
44
  type: "text/markdown"
43
45
  };
44
46
  },
45
47
  deserialize: async (data, ancestors) => {
46
- const space = ancestors.find(import_echo.isSpace);
47
- const target = ancestors.findLast((ancestor) => ancestor instanceof import_types.CollectionType) ?? space?.properties[import_types.CollectionType.typename]?.target;
48
+ const space = ancestors.find(import_echo2.isSpace);
49
+ const target = ancestors.findLast((ancestor) => import_echo.Obj.instanceOf(import_schema.DataType.Collection, ancestor)) ?? space?.properties[import_echo.Type.getTypename(import_schema.DataType.Collection)]?.target;
48
50
  if (!space || !target) {
49
51
  return;
50
52
  }
51
53
  const { dispatchPromise: dispatch } = context.getCapability(import_app_framework.Capabilities.IntentDispatcher);
52
- const result = await dispatch((0, import_effect.pipe)((0, import_app_framework.createIntent)(import_chunk_RQS4KBMG.MarkdownAction.Create, {
54
+ const result = await dispatch((0, import_effect.pipe)((0, import_app_framework.createIntent)(import_chunk_3HHV4MM6.MarkdownAction.Create, {
53
55
  spaceId: space.id,
54
56
  name: data.name,
55
57
  content: data.data
@@ -60,4 +62,4 @@ var app_graph_serializer_default = (context) => (0, import_app_framework.contrib
60
62
  }
61
63
  }
62
64
  ]);
63
- //# sourceMappingURL=app-graph-serializer-CLALIYN3.cjs.map
65
+ //# sourceMappingURL=app-graph-serializer-E6BXEDEL.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-serializer.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { pipe } from 'effect';\n\nimport { contributes, Capabilities, type PluginContext, chain, createIntent } from '@dxos/app-framework';\nimport { Obj, Type } from '@dxos/echo';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { isSpace } from '@dxos/react-client/echo';\nimport { DataType } from '@dxos/schema';\n\nimport translations from '../translations';\nimport { MarkdownAction, DocumentType } from '../types';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphSerializer, [\n {\n inputType: DocumentType.typename,\n outputType: 'text/markdown',\n // Reconcile with metadata serializers.\n serialize: async (node) => {\n const doc = node.data;\n const content = await doc.content.load();\n return {\n name:\n doc.name || doc.fallbackName || translations[0]['en-US'][DocumentType.typename]['object name placeholder'],\n data: content.content,\n type: 'text/markdown',\n };\n },\n deserialize: async (data, ancestors) => {\n const space = ancestors.find(isSpace);\n const target =\n ancestors.findLast((ancestor) => Obj.instanceOf(DataType.Collection, ancestor)) ??\n space?.properties[Type.getTypename(DataType.Collection)]?.target;\n if (!space || !target) {\n return;\n }\n\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const result = await dispatch(\n pipe(\n createIntent(MarkdownAction.Create, { spaceId: space.id, name: data.name, content: data.data }),\n chain(SpaceAction.AddObject, { target }),\n ),\n );\n\n return result.data?.object;\n },\n },\n ]);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oBAAqB;AAErB,2BAAmF;AACnF,kBAA0B;AAC1B,mBAA4B;AAC5B,IAAAA,eAAwB;AACxB,oBAAyB;AAKzB,IAAA,+BAAe,CAACC,gBACdC,kCAAYC,kCAAaC,oBAAoB;EAC3C;IACEC,WAAWC,mCAAaC;IACxBC,YAAY;;IAEZC,WAAW,OAAOC,SAAAA;AAChB,YAAMC,MAAMD,KAAKE;AACjB,YAAMC,UAAU,MAAMF,IAAIE,QAAQC,KAAI;AACtC,aAAO;QACLC,MACEJ,IAAII,QAAQJ,IAAIK,gBAAgBC,2CAAa,CAAA,EAAG,OAAA,EAASX,mCAAaC,QAAQ,EAAE,yBAAA;QAClFK,MAAMC,QAAQA;QACdK,MAAM;MACR;IACF;IACAC,aAAa,OAAOP,MAAMQ,cAAAA;AACxB,YAAMC,QAAQD,UAAUE,KAAKC,oBAAAA;AAC7B,YAAMC,SACJJ,UAAUK,SAAS,CAACC,aAAaC,gBAAIC,WAAWC,uBAASC,YAAYJ,QAAAA,CAAAA,KACrEL,OAAOU,WAAWC,iBAAKC,YAAYJ,uBAASC,UAAU,CAAA,GAAIN;AAC5D,UAAI,CAACH,SAAS,CAACG,QAAQ;AACrB;MACF;AAEA,YAAM,EAAEU,iBAAiBC,SAAQ,IAAKlC,QAAQmC,cAAcjC,kCAAakC,gBAAgB;AACzF,YAAMC,SAAS,MAAMH,aACnBI,wBACEC,mCAAaC,qCAAeC,QAAQ;QAAEC,SAAStB,MAAMuB;QAAI7B,MAAMH,KAAKG;QAAMF,SAASD,KAAKA;MAAK,CAAA,OAC7FiC,4BAAMC,yBAAYC,WAAW;QAAEvB;MAAO,CAAA,CAAA,CAAA;AAI1C,aAAOc,OAAO1B,MAAMoC;IACtB;EACF;CACD;",
6
+ "names": ["import_echo", "context", "contributes", "Capabilities", "AppGraphSerializer", "inputType", "DocumentType", "typename", "outputType", "serialize", "node", "doc", "data", "content", "load", "name", "fallbackName", "translations", "type", "deserialize", "ancestors", "space", "find", "isSpace", "target", "findLast", "ancestor", "Obj", "instanceOf", "DataType", "Collection", "properties", "Type", "getTypename", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "result", "pipe", "createIntent", "MarkdownAction", "Create", "spaceId", "id", "chain", "SpaceAction", "AddObject", "object"]
7
+ }
@@ -16,22 +16,22 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var artifact_definition_VEAHK7BX_exports = {};
20
- __export(artifact_definition_VEAHK7BX_exports, {
19
+ var artifact_definition_U27MH5SC_exports = {};
20
+ __export(artifact_definition_U27MH5SC_exports, {
21
21
  default: () => artifact_definition_default
22
22
  });
23
- module.exports = __toCommonJS(artifact_definition_VEAHK7BX_exports);
24
- var import_chunk_RQS4KBMG = require("./chunk-RQS4KBMG.cjs");
23
+ module.exports = __toCommonJS(artifact_definition_U27MH5SC_exports);
24
+ var import_chunk_3HHV4MM6 = require("./chunk-3HHV4MM6.cjs");
25
25
  var import_chunk_ZU5OIHCY = require("./chunk-ZU5OIHCY.cjs");
26
26
  var import_effect = require("effect");
27
27
  var import_ai = require("@dxos/ai");
28
28
  var import_app_framework = require("@dxos/app-framework");
29
29
  var import_artifact = require("@dxos/artifact");
30
30
  var import_assistant = require("@dxos/assistant");
31
- var import_echo_schema = require("@dxos/echo-schema");
31
+ var import_echo = require("@dxos/echo");
32
32
  var import_invariant = require("@dxos/invariant");
33
33
  var import_types = require("@dxos/plugin-space/types");
34
- var import_echo = require("@dxos/react-client/echo");
34
+ var import_echo2 = require("@dxos/react-client/echo");
35
35
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/capabilities/artifact-definition.ts";
36
36
  var artifact_definition_default = () => {
37
37
  const definition = (0, import_artifact.defineArtifact)({
@@ -42,7 +42,7 @@ var artifact_definition_default = () => {
42
42
  - Use these tools to interact with documents, including listing available documents and retrieving their content.
43
43
  - Documents are stored in Markdown format.
44
44
  `,
45
- schema: import_chunk_RQS4KBMG.DocumentType,
45
+ schema: import_chunk_3HHV4MM6.DocumentType,
46
46
  tools: [
47
47
  (0, import_ai.createTool)(import_chunk_ZU5OIHCY.meta.id, {
48
48
  name: "create",
@@ -75,7 +75,7 @@ var artifact_definition_default = () => {
75
75
  "'No intent dispatcher'"
76
76
  ]
77
77
  });
78
- const intent = (0, import_effect.pipe)((0, import_app_framework.createIntent)(import_chunk_RQS4KBMG.MarkdownAction.Create, {
78
+ const intent = (0, import_effect.pipe)((0, import_app_framework.createIntent)(import_chunk_3HHV4MM6.MarkdownAction.Create, {
79
79
  spaceId: extensions.space.id,
80
80
  name,
81
81
  content
@@ -105,19 +105,19 @@ var artifact_definition_default = () => {
105
105
  ]
106
106
  });
107
107
  const space = extensions.space;
108
- const { objects: documents } = await space.db.query(import_echo.Filter.type(import_chunk_RQS4KBMG.DocumentType)).run();
108
+ const { objects: documents } = await space.db.query(import_echo2.Filter.type(import_chunk_3HHV4MM6.DocumentType)).run();
109
109
  const documentInfo = documents.map((doc) => {
110
- (0, import_invariant.invariant)((0, import_echo_schema.isInstanceOf)(import_chunk_RQS4KBMG.DocumentType, doc), void 0, {
110
+ (0, import_invariant.invariant)(import_echo.Obj.instanceOf(import_chunk_3HHV4MM6.DocumentType, doc), void 0, {
111
111
  F: __dxlog_file,
112
112
  L: 81,
113
113
  S: void 0,
114
114
  A: [
115
- "isInstanceOf(DocumentType, doc)",
115
+ "Obj.instanceOf(DocumentType, doc)",
116
116
  ""
117
117
  ]
118
118
  });
119
119
  return {
120
- id: (0, import_echo.fullyQualifiedId)(doc),
120
+ id: (0, import_echo2.fullyQualifiedId)(doc),
121
121
  name: doc.name || doc.fallbackName || "Unnamed Document"
122
122
  };
123
123
  });
@@ -141,11 +141,11 @@ var artifact_definition_default = () => {
141
141
  "'No space'"
142
142
  ]
143
143
  });
144
- const document = await extensions.space.db.query(import_echo.Filter.ids(import_artifact.ArtifactId.toDXN(id).toString())).first();
145
- (0, import_invariant.assertArgument)((0, import_echo_schema.isInstanceOf)(import_chunk_RQS4KBMG.DocumentType, document), "Invalid type");
144
+ const document = await extensions.space.db.query(import_echo2.Filter.ids(import_artifact.ArtifactId.toDXN(id).toString())).first();
145
+ (0, import_invariant.assertArgument)(import_echo.Obj.instanceOf(import_chunk_3HHV4MM6.DocumentType, document), "Invalid type");
146
146
  const { content } = await document.content?.load();
147
147
  return import_ai.ToolResult.Success({
148
- id: (0, import_echo.fullyQualifiedId)(document),
148
+ id: (0, import_echo2.fullyQualifiedId)(document),
149
149
  name: document.name || document.fallbackName || "Unnamed Document",
150
150
  content
151
151
  });
@@ -155,4 +155,4 @@ var artifact_definition_default = () => {
155
155
  });
156
156
  return (0, import_app_framework.contributes)(import_app_framework.Capabilities.ArtifactDefinition, definition);
157
157
  };
158
- //# sourceMappingURL=artifact-definition-VEAHK7BX.cjs.map
158
+ //# sourceMappingURL=artifact-definition-U27MH5SC.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/artifact-definition.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { pipe, Schema } from 'effect';\n\nimport { createTool, ToolResult } from '@dxos/ai';\nimport { Capabilities, chain, contributes, createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { ArtifactId, defineArtifact } from '@dxos/artifact';\nimport { createArtifactElement } from '@dxos/assistant';\nimport { Obj } from '@dxos/echo';\nimport { invariant, assertArgument } from '@dxos/invariant';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Filter, fullyQualifiedId, type Space } from '@dxos/react-client/echo';\n\nimport { meta } from '../meta';\nimport { DocumentType, MarkdownAction } from '../types';\n\n// TODO(burdon): Factor out.\ndeclare global {\n interface ToolContextExtensions {\n space?: Space;\n dispatch?: PromiseIntentDispatcher;\n }\n}\n\nexport default () => {\n const definition = defineArtifact({\n id: `artifact:${meta.id}`,\n name: meta.name,\n instructions: `\n - The markdown plugin allows you to work with text documents in the current space.\n - Use these tools to interact with documents, including listing available documents and retrieving their content.\n - Documents are stored in Markdown format.\n `,\n schema: DocumentType,\n tools: [\n createTool(meta.id, {\n name: 'create',\n description: 'Create a new markdown document',\n caption: 'Creating document...',\n schema: Schema.Struct({\n name: Schema.optional(Schema.String).annotations({\n description: 'Optional name for the document.',\n }),\n content: Schema.String.annotations({\n description: 'The content of the document.',\n }),\n }),\n execute: async ({ name, content }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n invariant(extensions?.dispatch, 'No intent dispatcher');\n\n const intent = pipe(\n createIntent(MarkdownAction.Create, {\n spaceId: extensions.space.id,\n name,\n content,\n }),\n chain(SpaceAction.AddObject, { target: extensions.space }),\n );\n\n const { data, error } = await extensions.dispatch(intent);\n if (!data || error) {\n return ToolResult.Error(error?.message ?? 'Failed to create document');\n }\n\n return ToolResult.Success(createArtifactElement(data.id));\n },\n }),\n createTool(meta.id, {\n name: 'list',\n description: 'List all markdown documents in the current space.',\n caption: 'Listing markdown documents...',\n schema: Schema.Struct({}),\n execute: async (_input, { extensions }) => {\n invariant(extensions?.space, 'No space');\n const space = extensions.space;\n const { objects: documents } = await space.db.query(Filter.type(DocumentType)).run();\n const documentInfo = documents.map((doc) => {\n invariant(Obj.instanceOf(DocumentType, doc));\n return {\n id: fullyQualifiedId(doc),\n name: doc.name || doc.fallbackName || 'Unnamed Document',\n // TODO(ZaymonFC): Include updatedAt?\n };\n });\n\n return ToolResult.Success(documentInfo);\n },\n }),\n createTool(meta.id, {\n name: 'inspect',\n description: 'Read the content of a markdown document.',\n caption: 'Inspecting markdown document...',\n schema: Schema.Struct({\n id: ArtifactId,\n }),\n execute: async ({ id }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n const document = await extensions.space.db.query(Filter.ids(ArtifactId.toDXN(id).toString())).first();\n assertArgument(Obj.instanceOf(DocumentType, document), 'Invalid type');\n\n const { content } = await document.content?.load();\n return ToolResult.Success({\n id: fullyQualifiedId(document),\n name: document.name || document.fallbackName || 'Unnamed Document',\n content,\n });\n },\n }),\n ],\n });\n\n return contributes(Capabilities.ArtifactDefinition, definition);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_echo", "definition", "defineArtifact", "id", "meta", "name", "instructions", "schema", "DocumentType", "tools", "createTool", "description", "caption", "Schema", "Struct", "optional", "String", "annotations", "content", "execute", "extensions", "invariant", "space", "dispatch", "intent", "pipe", "createIntent", "MarkdownAction", "Create", "spaceId", "chain", "SpaceAction", "AddObject", "target", "data", "error", "ToolResult", "Error", "message", "Success", "createArtifactElement", "_input", "objects", "documents", "db", "query", "Filter", "type", "run", "documentInfo", "map", "doc", "Obj", "instanceOf", "fullyQualifiedId", "fallbackName", "ArtifactId", "document", "ids", "toDXN", "toString", "first", "assertArgument", "load", "contributes", "Capabilities", "ArtifactDefinition"]
7
+ }
@@ -16,8 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_RQS4KBMG_exports = {};
20
- __export(chunk_RQS4KBMG_exports, {
19
+ var chunk_3HHV4MM6_exports = {};
20
+ __export(chunk_3HHV4MM6_exports, {
21
21
  DocumentSchema: () => DocumentSchema,
22
22
  DocumentType: () => DocumentType,
23
23
  MarkdownAction: () => MarkdownAction,
@@ -25,12 +25,11 @@ __export(chunk_RQS4KBMG_exports, {
25
25
  createDocument: () => createDocument,
26
26
  isEditorModel: () => isEditorModel
27
27
  });
28
- module.exports = __toCommonJS(chunk_RQS4KBMG_exports);
28
+ module.exports = __toCommonJS(chunk_3HHV4MM6_exports);
29
29
  var import_chunk_ZU5OIHCY = require("./chunk-ZU5OIHCY.cjs");
30
30
  var import_effect = require("effect");
31
31
  var import_echo = require("@dxos/echo");
32
32
  var import_echo_schema = require("@dxos/echo-schema");
33
- var import_live_object = require("@dxos/live-object");
34
33
  var import_schema = require("@dxos/schema");
35
34
  var import_effect2 = require("effect");
36
35
  var import_echo2 = require("@dxos/echo");
@@ -47,9 +46,9 @@ var DocumentType = DocumentSchema.pipe(import_echo.Type.Obj({
47
46
  typename: "dxos.org/type/Document",
48
47
  version: "0.1.0"
49
48
  }));
50
- var createDocument = ({ name, content }) => (0, import_live_object.live)(DocumentType, {
49
+ var createDocument = ({ name, content }) => import_echo.Obj.make(DocumentType, {
51
50
  name,
52
- content: import_echo.Ref.make((0, import_live_object.live)(import_schema.DataType.Text, {
51
+ content: import_echo.Ref.make(import_echo.Obj.make(import_schema.DataType.Text, {
53
52
  content
54
53
  }))
55
54
  });
@@ -99,4 +98,4 @@ var MarkdownAction;
99
98
  createDocument,
100
99
  isEditorModel
101
100
  });
102
- //# sourceMappingURL=chunk-RQS4KBMG.cjs.map
101
+ //# sourceMappingURL=chunk-3HHV4MM6.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/schema.ts", "../../../src/types/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Obj, Ref, Type } from '@dxos/echo';\nimport { LabelAnnotation } from '@dxos/echo-schema';\nimport { DataType } from '@dxos/schema';\n\nexport const DocumentSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n fallbackName: Schema.optional(Schema.String),\n content: Type.Ref(DataType.Text),\n}).pipe(LabelAnnotation.set(['name', 'fallbackName']));\n\nexport const DocumentType = DocumentSchema.pipe(\n Type.Obj({\n typename: 'dxos.org/type/Document',\n version: '0.1.0',\n }),\n);\nexport type DocumentType = Schema.Schema.Type<typeof DocumentType>;\n\n// TODO(burdon): Replace when defaults are supported.\nexport const createDocument = ({ name, content }: { name: string; content: string }) =>\n Obj.make(DocumentType, { name, content: Ref.make(Obj.make(DataType.Text, { content })) });\n\n/**\n * Checks if an object conforms to the interface needed to render an editor.\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", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Type } from '@dxos/echo';\n// TODO(wittjosiah): This pulls in UI code into the types entrypoint.\nimport { type Extension, EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor';\n\nimport { DocumentType } from './schema';\nimport { MARKDOWN_PLUGIN } from '../meta';\n\nconst MARKDOWN_ACTION = `${MARKDOWN_PLUGIN}/action`;\n\nexport namespace MarkdownAction {\n export class Create extends Schema.TaggedClass<Create>()(MARKDOWN_ACTION, {\n input: Schema.Struct({\n spaceId: Type.SpaceId,\n name: Schema.optional(Schema.String),\n content: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: DocumentType,\n }),\n }) {}\n\n export class SetViewMode extends Schema.TaggedClass<SetViewMode>()(`${MARKDOWN_ACTION}/set-view-mode`, {\n input: Schema.Struct({\n id: Schema.String,\n viewMode: EditorViewMode,\n }),\n output: Schema.Void,\n }) {}\n}\n\nexport type MarkdownProperties = Record<string, any>;\n\n// TODO(burdon): Async.\nexport type MarkdownExtensionProvider = (props: { document?: DocumentType }) => Extension | undefined;\n\nexport type OnChange = (text: string) => void;\n\nexport type MarkdownPluginState = {\n // Codemirror extensions provided by other plugins.\n extensionProviders?: MarkdownExtensionProvider[];\n\n // TODO(burdon): Extend view mode per document to include scroll position, etc.\n // View mode per document.\n viewMode: Record<string, EditorViewMode>;\n};\n\nexport const MarkdownSettingsSchema = Schema.mutable(\n Schema.Struct({\n defaultViewMode: EditorViewMode,\n editorInputMode: Schema.optional(EditorInputMode),\n experimental: Schema.optional(Schema.Boolean),\n debug: Schema.optional(Schema.Boolean),\n toolbar: Schema.optional(Schema.Boolean),\n typewriter: Schema.optional(Schema.String),\n // TODO(burdon): Per document settings.\n numberedHeadings: Schema.optional(Schema.Boolean),\n folding: Schema.optional(Schema.Boolean),\n }),\n);\n\nexport type MarkdownSettingsProps = Schema.Schema.Type<typeof MarkdownSettingsSchema>;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oBAAuB;AAEvB,kBAA+B;AAC/B,yBAAgC;AAChC,oBAAyB;ACJzB,IAAAA,iBAAuB;AAEvB,IAAAC,eAAqB;AAErB,6BAAgE;ADEzD,IAAMC,iBAAiBC,qBAAOC,OAAO;EAC1CC,MAAMF,qBAAOG,SAASH,qBAAOI,MAAM;EACnCC,cAAcL,qBAAOG,SAASH,qBAAOI,MAAM;EAC3CE,SAASC,iBAAKC,IAAIC,uBAASC,IAAI;AACjC,CAAA,EAAGC,KAAKC,mCAAgBC,IAAI;EAAC;EAAQ;CAAe,CAAA;AAE7C,IAAMC,eAAef,eAAeY,KACzCJ,iBAAKQ,IAAI;EACPC,UAAU;EACVC,SAAS;AACX,CAAA,CAAA;AAKK,IAAMC,iBAAiB,CAAC,EAAEhB,MAAMI,QAAO,MAC5CS,gBAAII,KAAKL,cAAc;EAAEZ;EAAMI,SAASE,gBAAIW,KAAKJ,gBAAII,KAAKV,uBAASC,MAAM;IAAEJ;EAAQ,CAAA,CAAA;AAAI,CAAA;AAMlF,IAAMc,gBAAgB,CAACC,SAC5BA,QACA,OAAOA,SAAS,YAChB,QAAQA,QACR,OAAOA,KAAKC,OAAO,YACnB,UAAUD,QACV,OAAOA,KAAKE,SAAS;ACzBvB,IAAMC,kBAAkB,GAAGC,qCAAAA;UAEVC,iBAAAA;EACR,MAAMC,eAAe3B,eAAAA,OAAO4B,YAAW,EAAWJ,iBAAiB;IACxEK,OAAO7B,eAAAA,OAAOC,OAAO;MACnB6B,SAASvB,aAAAA,KAAKwB;MACd7B,MAAMF,eAAAA,OAAOG,SAASH,eAAAA,OAAOI,MAAM;MACnCE,SAASN,eAAAA,OAAOG,SAASH,eAAAA,OAAOI,MAAM;IACxC,CAAA;IACA4B,QAAQhC,eAAAA,OAAOC,OAAO;MACpBgC,QAAQnB;IACV,CAAA;EACF,CAAA,EAAA;EAAI;kBATSa,SAAAA;EAWN,MAAMO,oBAAoBlC,eAAAA,OAAO4B,YAAW,EAAgB,GAAGJ,eAAAA,kBAAiC;IACrGK,OAAO7B,eAAAA,OAAOC,OAAO;MACnBqB,IAAItB,eAAAA,OAAOI;MACX+B,UAAUC;IACZ,CAAA;IACAJ,QAAQhC,eAAAA,OAAOqC;EACjB,CAAA,EAAA;EAAI;kBANSH,cAAAA;AAOf,GAnBiBR,mBAAAA,iBAAAA,CAAAA,EAAAA;AAqCV,IAAMY,yBAAyBtC,eAAAA,OAAOuC,QAC3CvC,eAAAA,OAAOC,OAAO;EACZuC,iBAAiBJ;EACjBK,iBAAiBzC,eAAAA,OAAOG,SAASuC,sCAAAA;EACjCC,cAAc3C,eAAAA,OAAOG,SAASH,eAAAA,OAAO4C,OAAO;EAC5CC,OAAO7C,eAAAA,OAAOG,SAASH,eAAAA,OAAO4C,OAAO;EACrCE,SAAS9C,eAAAA,OAAOG,SAASH,eAAAA,OAAO4C,OAAO;EACvCG,YAAY/C,eAAAA,OAAOG,SAASH,eAAAA,OAAOI,MAAM;;EAEzC4C,kBAAkBhD,eAAAA,OAAOG,SAASH,eAAAA,OAAO4C,OAAO;EAChDK,SAASjD,eAAAA,OAAOG,SAASH,eAAAA,OAAO4C,OAAO;AACzC,CAAA,CAAA;;",
6
+ "names": ["import_effect", "import_echo", "DocumentSchema", "Schema", "Struct", "name", "optional", "String", "fallbackName", "content", "Type", "Ref", "DataType", "Text", "pipe", "LabelAnnotation", "set", "DocumentType", "Obj", "typename", "version", "createDocument", "make", "isEditorModel", "data", "id", "text", "MARKDOWN_ACTION", "MARKDOWN_PLUGIN", "MarkdownAction", "Create", "TaggedClass", "input", "spaceId", "SpaceId", "output", "object", "SetViewMode", "viewMode", "EditorViewMode", "Void", "MarkdownSettingsSchema", "mutable", "defaultViewMode", "editorInputMode", "EditorInputMode", "experimental", "Boolean", "debug", "toolbar", "typewriter", "numberedHeadings", "folding"]
7
+ }
@@ -16,20 +16,20 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_G7RBJX22_exports = {};
20
- __export(chunk_G7RBJX22_exports, {
19
+ var chunk_CJLYFGPI_exports = {};
20
+ __export(chunk_CJLYFGPI_exports, {
21
21
  getAbstract: () => getAbstract,
22
22
  getFallbackName: () => getFallbackName,
23
23
  isMarkdownProperties: () => isMarkdownProperties,
24
24
  serializer: () => serializer,
25
25
  setFallbackName: () => setFallbackName
26
26
  });
27
- module.exports = __toCommonJS(chunk_G7RBJX22_exports);
28
- var import_chunk_RQS4KBMG = require("./chunk-RQS4KBMG.cjs");
27
+ module.exports = __toCommonJS(chunk_CJLYFGPI_exports);
28
+ var import_chunk_3HHV4MM6 = require("./chunk-3HHV4MM6.cjs");
29
29
  var import_async = require("@dxos/async");
30
- var import_echo = require("@dxos/react-client/echo");
30
+ var import_echo = require("@dxos/echo");
31
31
  var import_schema = require("@dxos/schema");
32
- var isMarkdownProperties = (data) => (0, import_echo.isEchoObject)(data) ? true : data && typeof data === "object" ? "title" in data && typeof data.title === "string" : false;
32
+ var isMarkdownProperties = (data) => import_echo.Obj.isObject(data) ? true : data && typeof data === "object" ? "title" in data && typeof data.title === "string" : false;
33
33
  var nonTitleChars = /[^\w ]/g;
34
34
  var getFallbackName = (content) => {
35
35
  return content.substring(0, 31).split("\n")[0].replaceAll(nonTitleChars, "").trim();
@@ -45,22 +45,22 @@ var setFallbackName = (0, import_async.debounce)((doc, content) => {
45
45
  }, 200);
46
46
  var serializer = {
47
47
  serialize: async ({ object }) => {
48
- const content = await (0, import_echo.loadObjectReferences)(object, (doc) => doc.content);
48
+ const { content } = await object.content.load();
49
49
  return JSON.stringify({
50
50
  name: object.name,
51
51
  fallbackName: object.fallbackName,
52
- content: content.target?.content
52
+ content
53
53
  });
54
54
  },
55
55
  deserialize: async ({ content: serialized }) => {
56
56
  const { name, fallbackName, content } = JSON.parse(serialized);
57
- return (0, import_echo.createObject)((0, import_echo.live)(import_chunk_RQS4KBMG.DocumentType, {
57
+ return import_echo.Obj.make(import_chunk_3HHV4MM6.DocumentType, {
58
58
  name,
59
59
  fallbackName,
60
- content: import_echo.Ref.make((0, import_echo.live)(import_schema.DataType.Text, {
60
+ content: import_echo.Ref.make(import_echo.Obj.make(import_schema.DataType.Text, {
61
61
  content
62
62
  }))
63
- }));
63
+ });
64
64
  }
65
65
  };
66
66
  // Annotate the CommonJS export names for ESM import in node:
@@ -71,4 +71,4 @@ var serializer = {
71
71
  serializer,
72
72
  setFallbackName
73
73
  });
74
- //# sourceMappingURL=chunk-G7RBJX22.cjs.map
74
+ //# sourceMappingURL=chunk-CJLYFGPI.cjs.map