@dxos/plugin-markdown 0.8.1-staging.391c573 → 0.8.1-staging.97aedb1

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 (170) hide show
  1. package/dist/lib/browser/{MarkdownContainer-2AGDY3W4.mjs → MarkdownContainer-T3HU27RE.mjs} +68 -40
  2. package/dist/lib/browser/MarkdownContainer-T3HU27RE.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-serializer-DDOMJ5MS.mjs → app-graph-serializer-NOXI4IQ5.mjs} +8 -8
  4. package/dist/lib/browser/app-graph-serializer-NOXI4IQ5.mjs.map +7 -0
  5. package/dist/lib/browser/{artifact-definition-I4ORYVKB.mjs → artifact-definition-CE6J6NY4.mjs} +13 -26
  6. package/dist/lib/browser/artifact-definition-CE6J6NY4.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-PTLVK34A.mjs → chunk-3ULJ4FIJ.mjs} +9 -9
  8. package/dist/lib/browser/chunk-JX6XNEHE.mjs +22 -0
  9. package/dist/lib/browser/chunk-JX6XNEHE.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-XBAPFNQG.mjs → chunk-NAGMSX77.mjs} +2 -2
  11. package/dist/lib/browser/chunk-NAGMSX77.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-4MCFUAMZ.mjs → chunk-QXDKFACU.mjs} +7 -8
  13. package/dist/lib/browser/chunk-QXDKFACU.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-3C24B23M.mjs → chunk-YCJNW2RU.mjs} +19 -10
  15. package/dist/lib/browser/chunk-YCJNW2RU.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +10 -13
  17. package/dist/lib/browser/index.mjs.map +3 -3
  18. package/dist/lib/browser/{intent-resolver-KP6SYFFL.mjs → intent-resolver-42GQ6HNZ.mjs} +13 -6
  19. package/dist/lib/browser/intent-resolver-42GQ6HNZ.mjs.map +7 -0
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{react-surface-QLM3CQQP.mjs → react-surface-RQX3CPFV.mjs} +39 -14
  22. package/dist/lib/browser/react-surface-RQX3CPFV.mjs.map +7 -0
  23. package/dist/lib/browser/{settings-BD3J7QXE.mjs → settings-GCSS3Y4Z.mjs} +3 -3
  24. package/dist/lib/browser/{state-M5HI645K.mjs → state-O7P5JDIH.mjs} +7 -12
  25. package/dist/lib/browser/state-O7P5JDIH.mjs.map +7 -0
  26. package/dist/lib/browser/{thread-ZGBGNMEM.mjs → thread-3QGCFNVZ.mjs} +5 -4
  27. package/dist/lib/browser/thread-3QGCFNVZ.mjs.map +7 -0
  28. package/dist/lib/browser/types/index.mjs +4 -2
  29. package/dist/lib/node/{MarkdownContainer-ESPH2MCH.cjs → MarkdownContainer-6ZJIFAP6.cjs} +74 -46
  30. package/dist/lib/node/MarkdownContainer-6ZJIFAP6.cjs.map +7 -0
  31. package/dist/lib/node/{app-graph-serializer-EIHJDGDZ.cjs → app-graph-serializer-HKK3SEDN.cjs} +12 -10
  32. package/dist/lib/node/app-graph-serializer-HKK3SEDN.cjs.map +7 -0
  33. package/dist/lib/node/{artifact-definition-G2RX42OI.cjs → artifact-definition-XGADFWCQ.cjs} +19 -32
  34. package/dist/lib/node/artifact-definition-XGADFWCQ.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-4N7RTNIG.cjs → chunk-7QVONRSI.cjs} +13 -13
  36. package/dist/lib/node/{chunk-4LG6SPXW.cjs → chunk-DZXTXSXX.cjs} +7 -7
  37. package/dist/lib/node/chunk-DZXTXSXX.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-DEUESZ5O.cjs → chunk-H5MYVP6F.cjs} +11 -12
  39. package/dist/lib/node/chunk-H5MYVP6F.cjs.map +7 -0
  40. package/dist/lib/node/{chunk-VYAJIYUI.cjs → chunk-UEXGNGSS.cjs} +23 -13
  41. package/dist/lib/node/chunk-UEXGNGSS.cjs.map +7 -0
  42. package/dist/lib/node/{chunk-QZ4XQYNC.cjs → chunk-ZU5OIHCY.cjs} +9 -9
  43. package/dist/lib/node/chunk-ZU5OIHCY.cjs.map +7 -0
  44. package/dist/lib/node/index.cjs +41 -44
  45. package/dist/lib/node/index.cjs.map +3 -3
  46. package/dist/lib/node/{intent-resolver-K44M5GLB.cjs → intent-resolver-NW27BF3W.cjs} +19 -12
  47. package/dist/lib/node/intent-resolver-NW27BF3W.cjs.map +7 -0
  48. package/dist/lib/node/meta.json +1 -1
  49. package/dist/lib/node/{react-surface-C74TD4AV.cjs → react-surface-5X3SMHGI.cjs} +49 -24
  50. package/dist/lib/node/react-surface-5X3SMHGI.cjs.map +7 -0
  51. package/dist/lib/node/{settings-SBFMJ556.cjs → settings-S2ISUVIH.cjs} +8 -8
  52. package/dist/lib/node/{state-GCSY2G53.cjs → state-L44SG3ZM.cjs} +13 -18
  53. package/dist/lib/node/state-L44SG3ZM.cjs.map +7 -0
  54. package/dist/lib/node/{thread-CPYL6QVD.cjs → thread-42R57L4K.cjs} +8 -7
  55. package/dist/lib/node/thread-42R57L4K.cjs.map +7 -0
  56. package/dist/lib/node/types/index.cjs +8 -6
  57. package/dist/lib/node/types/index.cjs.map +2 -2
  58. package/dist/lib/node-esm/{MarkdownContainer-VYZZDI4J.mjs → MarkdownContainer-URAPTO37.mjs} +68 -40
  59. package/dist/lib/node-esm/MarkdownContainer-URAPTO37.mjs.map +7 -0
  60. package/dist/lib/node-esm/{app-graph-serializer-BFZXPQBL.mjs → app-graph-serializer-QQ2CTHOQ.mjs} +8 -8
  61. package/dist/lib/node-esm/app-graph-serializer-QQ2CTHOQ.mjs.map +7 -0
  62. package/dist/lib/node-esm/{artifact-definition-JIGMPEVI.mjs → artifact-definition-WRG5ZRN5.mjs} +13 -26
  63. package/dist/lib/node-esm/artifact-definition-WRG5ZRN5.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-3SDMSQOB.mjs → chunk-4AM4VU3Y.mjs} +19 -10
  65. package/dist/lib/node-esm/chunk-4AM4VU3Y.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-GUZZJ4H4.mjs → chunk-ETXPC5VP.mjs} +2 -2
  67. package/dist/lib/node-esm/chunk-ETXPC5VP.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-PQDVRE2Y.mjs → chunk-F6UHVLH7.mjs} +9 -9
  69. package/dist/lib/node-esm/{chunk-L2TANXTY.mjs → chunk-JAVD67QP.mjs} +7 -8
  70. package/dist/lib/node-esm/chunk-JAVD67QP.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-RX63ZNML.mjs +24 -0
  72. package/dist/lib/node-esm/chunk-RX63ZNML.mjs.map +7 -0
  73. package/dist/lib/node-esm/index.mjs +10 -13
  74. package/dist/lib/node-esm/index.mjs.map +3 -3
  75. package/dist/lib/node-esm/{intent-resolver-WWIMRDGG.mjs → intent-resolver-7HOMUVHR.mjs} +13 -6
  76. package/dist/lib/node-esm/intent-resolver-7HOMUVHR.mjs.map +7 -0
  77. package/dist/lib/node-esm/meta.json +1 -1
  78. package/dist/lib/node-esm/{react-surface-T6FT3OZ7.mjs → react-surface-6IKC3G46.mjs} +39 -14
  79. package/dist/lib/node-esm/react-surface-6IKC3G46.mjs.map +7 -0
  80. package/dist/lib/node-esm/{settings-2K63TOOA.mjs → settings-ZDIFTK4N.mjs} +3 -3
  81. package/dist/lib/node-esm/{state-2SECKIMF.mjs → state-DWPOKLEY.mjs} +7 -12
  82. package/dist/lib/node-esm/state-DWPOKLEY.mjs.map +7 -0
  83. package/dist/lib/node-esm/{thread-GHLHBZSM.mjs → thread-R2KHZD6V.mjs} +5 -4
  84. package/dist/lib/node-esm/thread-R2KHZD6V.mjs.map +7 -0
  85. package/dist/lib/node-esm/types/index.mjs +4 -2
  86. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/capabilities.d.ts +2 -1
  89. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/index.d.ts +1 -0
  91. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/state.d.ts +1 -0
  95. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/thread.d.ts.map +1 -1
  97. package/dist/types/src/components/MarkdownContainer.d.ts +5 -7
  98. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  99. package/dist/types/src/components/MarkdownEditor.d.ts +5 -3
  100. package/dist/types/src/components/MarkdownEditor.d.ts.map +1 -1
  101. package/dist/types/src/components/index.d.ts +1 -1
  102. package/dist/types/src/components/index.d.ts.map +1 -1
  103. package/dist/types/src/extensions.d.ts +6 -4
  104. package/dist/types/src/extensions.d.ts.map +1 -1
  105. package/dist/types/src/meta.d.ts +2 -8
  106. package/dist/types/src/meta.d.ts.map +1 -1
  107. package/dist/types/src/translations.d.ts +2 -9
  108. package/dist/types/src/translations.d.ts.map +1 -1
  109. package/dist/types/src/types/schema.d.ts +97 -34
  110. package/dist/types/src/types/schema.d.ts.map +1 -1
  111. package/dist/types/src/types/types.d.ts +66 -4
  112. package/dist/types/src/types/types.d.ts.map +1 -1
  113. package/package.json +32 -31
  114. package/src/MarkdownPlugin.tsx +5 -5
  115. package/src/capabilities/app-graph-serializer.ts +5 -4
  116. package/src/capabilities/artifact-definition.ts +7 -14
  117. package/src/capabilities/capabilities.ts +2 -1
  118. package/src/capabilities/intent-resolver.ts +5 -2
  119. package/src/capabilities/react-surface.tsx +34 -9
  120. package/src/capabilities/state.ts +8 -17
  121. package/src/capabilities/thread.ts +2 -1
  122. package/src/components/MarkdownContainer.tsx +25 -16
  123. package/src/components/MarkdownEditor.tsx +22 -15
  124. package/src/components/Toolbar.stories.tsx +1 -1
  125. package/src/extensions.tsx +32 -13
  126. package/src/meta.ts +7 -7
  127. package/src/translations.ts +4 -4
  128. package/src/types/schema.ts +10 -3
  129. package/src/types/types.ts +2 -13
  130. package/dist/lib/browser/MarkdownContainer-2AGDY3W4.mjs.map +0 -7
  131. package/dist/lib/browser/app-graph-serializer-DDOMJ5MS.mjs.map +0 -7
  132. package/dist/lib/browser/artifact-definition-I4ORYVKB.mjs.map +0 -7
  133. package/dist/lib/browser/chunk-3C24B23M.mjs.map +0 -7
  134. package/dist/lib/browser/chunk-4MCFUAMZ.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-XBAPFNQG.mjs.map +0 -7
  136. package/dist/lib/browser/chunk-YTHIPV5Q.mjs +0 -22
  137. package/dist/lib/browser/chunk-YTHIPV5Q.mjs.map +0 -7
  138. package/dist/lib/browser/intent-resolver-KP6SYFFL.mjs.map +0 -7
  139. package/dist/lib/browser/react-surface-QLM3CQQP.mjs.map +0 -7
  140. package/dist/lib/browser/state-M5HI645K.mjs.map +0 -7
  141. package/dist/lib/browser/thread-ZGBGNMEM.mjs.map +0 -7
  142. package/dist/lib/node/MarkdownContainer-ESPH2MCH.cjs.map +0 -7
  143. package/dist/lib/node/app-graph-serializer-EIHJDGDZ.cjs.map +0 -7
  144. package/dist/lib/node/artifact-definition-G2RX42OI.cjs.map +0 -7
  145. package/dist/lib/node/chunk-4LG6SPXW.cjs.map +0 -7
  146. package/dist/lib/node/chunk-DEUESZ5O.cjs.map +0 -7
  147. package/dist/lib/node/chunk-QZ4XQYNC.cjs.map +0 -7
  148. package/dist/lib/node/chunk-VYAJIYUI.cjs.map +0 -7
  149. package/dist/lib/node/intent-resolver-K44M5GLB.cjs.map +0 -7
  150. package/dist/lib/node/react-surface-C74TD4AV.cjs.map +0 -7
  151. package/dist/lib/node/state-GCSY2G53.cjs.map +0 -7
  152. package/dist/lib/node/thread-CPYL6QVD.cjs.map +0 -7
  153. package/dist/lib/node-esm/MarkdownContainer-VYZZDI4J.mjs.map +0 -7
  154. package/dist/lib/node-esm/app-graph-serializer-BFZXPQBL.mjs.map +0 -7
  155. package/dist/lib/node-esm/artifact-definition-JIGMPEVI.mjs.map +0 -7
  156. package/dist/lib/node-esm/chunk-3SDMSQOB.mjs.map +0 -7
  157. package/dist/lib/node-esm/chunk-BBVPC53M.mjs +0 -24
  158. package/dist/lib/node-esm/chunk-BBVPC53M.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-GUZZJ4H4.mjs.map +0 -7
  160. package/dist/lib/node-esm/chunk-L2TANXTY.mjs.map +0 -7
  161. package/dist/lib/node-esm/intent-resolver-WWIMRDGG.mjs.map +0 -7
  162. package/dist/lib/node-esm/react-surface-T6FT3OZ7.mjs.map +0 -7
  163. package/dist/lib/node-esm/state-2SECKIMF.mjs.map +0 -7
  164. package/dist/lib/node-esm/thread-GHLHBZSM.mjs.map +0 -7
  165. /package/dist/lib/browser/{chunk-PTLVK34A.mjs.map → chunk-3ULJ4FIJ.mjs.map} +0 -0
  166. /package/dist/lib/browser/{settings-BD3J7QXE.mjs.map → settings-GCSS3Y4Z.mjs.map} +0 -0
  167. /package/dist/lib/node/{chunk-4N7RTNIG.cjs.map → chunk-7QVONRSI.cjs.map} +0 -0
  168. /package/dist/lib/node/{settings-SBFMJ556.cjs.map → settings-S2ISUVIH.cjs.map} +0 -0
  169. /package/dist/lib/node-esm/{chunk-PQDVRE2Y.mjs.map → chunk-F6UHVLH7.mjs.map} +0 -0
  170. /package/dist/lib/node-esm/{settings-2K63TOOA.mjs.map → settings-ZDIFTK4N.mjs.map} +0 -0
@@ -1,19 +1,21 @@
1
1
  import {
2
2
  MarkdownCapabilities
3
- } from "./chunk-XBAPFNQG.mjs";
3
+ } from "./chunk-NAGMSX77.mjs";
4
4
  import {
5
5
  DocumentType,
6
6
  isEditorModel
7
- } from "./chunk-3C24B23M.mjs";
7
+ } from "./chunk-YCJNW2RU.mjs";
8
8
  import {
9
9
  MARKDOWN_PLUGIN
10
- } from "./chunk-YTHIPV5Q.mjs";
10
+ } from "./chunk-JX6XNEHE.mjs";
11
11
 
12
12
  // packages/plugins/plugin-markdown/src/capabilities/react-surface.tsx
13
13
  import React2 from "react";
14
14
  import { createSurface, contributes, Capabilities, useCapability } from "@dxos/app-framework";
15
+ import { isInstanceOf } from "@dxos/echo-schema";
15
16
  import { SettingsStore } from "@dxos/local-storage";
16
17
  import { fullyQualifiedId } from "@dxos/react-client/echo";
18
+ import { TextType } from "@dxos/schema";
17
19
 
18
20
  // packages/plugins/plugin-markdown/src/components/index.ts
19
21
  import { lazy } from "react";
@@ -84,7 +86,7 @@ var MarkdownSettings = ({ settings }) => {
84
86
  };
85
87
 
86
88
  // packages/plugins/plugin-markdown/src/components/index.ts
87
- var MarkdownContainer = lazy(() => import("./MarkdownContainer-2AGDY3W4.mjs"));
89
+ var MarkdownContainer = lazy(() => import("./MarkdownContainer-T3HU27RE.mjs"));
88
90
 
89
91
  // packages/plugins/plugin-markdown/src/capabilities/react-surface.tsx
90
92
  var react_surface_default = () => contributes(Capabilities.ReactSurface, [
@@ -92,13 +94,14 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
92
94
  id: `${MARKDOWN_PLUGIN}/document`,
93
95
  role: [
94
96
  "article",
95
- "section"
97
+ "section",
98
+ "tabpanel"
96
99
  ],
97
- filter: (data) => data.subject instanceof DocumentType,
100
+ filter: (data) => isInstanceOf(DocumentType, data.subject) && !data.variant,
98
101
  component: ({ data, role }) => {
99
102
  const settingsStore = useCapability(Capabilities.SettingsStore);
100
103
  const settings = settingsStore.getStore(MARKDOWN_PLUGIN).value;
101
- const { state, getViewMode, setViewMode } = useCapability(MarkdownCapabilities.State);
104
+ const { state, editorState, getViewMode, setViewMode } = useCapability(MarkdownCapabilities.State);
102
105
  return /* @__PURE__ */ React2.createElement(MarkdownContainer, {
103
106
  id: fullyQualifiedId(data.subject),
104
107
  object: data.subject,
@@ -106,8 +109,31 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
106
109
  settings,
107
110
  extensionProviders: state.extensionProviders,
108
111
  viewMode: getViewMode(fullyQualifiedId(data.subject)),
109
- selection: state.selectionState,
110
- folding: state.foldState,
112
+ editorStateStore: editorState,
113
+ onViewModeChange: setViewMode
114
+ });
115
+ }
116
+ }),
117
+ createSurface({
118
+ id: `${MARKDOWN_PLUGIN}/text`,
119
+ role: [
120
+ "article",
121
+ "section",
122
+ "tabpanel"
123
+ ],
124
+ filter: (data) => typeof data.id === "string" && isInstanceOf(TextType, data.subject),
125
+ component: ({ data, role }) => {
126
+ const settingsStore = useCapability(Capabilities.SettingsStore);
127
+ const settings = settingsStore.getStore(MARKDOWN_PLUGIN).value;
128
+ const { state, editorState, getViewMode, setViewMode } = useCapability(MarkdownCapabilities.State);
129
+ return /* @__PURE__ */ React2.createElement(MarkdownContainer, {
130
+ id: data.id,
131
+ object: data.subject,
132
+ role,
133
+ settings,
134
+ extensionProviders: state.extensionProviders,
135
+ viewMode: getViewMode(data.id),
136
+ editorStateStore: editorState,
111
137
  onViewModeChange: setViewMode
112
138
  });
113
139
  }
@@ -122,7 +148,7 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
122
148
  component: ({ data, role }) => {
123
149
  const settingsStore = useCapability(Capabilities.SettingsStore);
124
150
  const settings = settingsStore.getStore(MARKDOWN_PLUGIN).value;
125
- const { state, getViewMode, setViewMode } = useCapability(MarkdownCapabilities.State);
151
+ const { state, editorState, getViewMode, setViewMode } = useCapability(MarkdownCapabilities.State);
126
152
  return /* @__PURE__ */ React2.createElement(MarkdownContainer, {
127
153
  id: data.subject.id,
128
154
  object: data.subject,
@@ -130,14 +156,13 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
130
156
  settings,
131
157
  extensionProviders: state.extensionProviders,
132
158
  viewMode: getViewMode(data.subject.id),
133
- selection: state.selectionState,
134
- folding: state.foldState,
159
+ editorStateStore: editorState,
135
160
  onViewModeChange: setViewMode
136
161
  });
137
162
  }
138
163
  }),
139
164
  createSurface({
140
- id: `${MARKDOWN_PLUGIN}/settings`,
165
+ id: `${MARKDOWN_PLUGIN}/plugin-settings`,
141
166
  role: "article",
142
167
  filter: (data) => data.subject instanceof SettingsStore && data.subject.prefix === MARKDOWN_PLUGIN,
143
168
  component: ({ data: { subject } }) => /* @__PURE__ */ React2.createElement(MarkdownSettings, {
@@ -148,4 +173,4 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
148
173
  export {
149
174
  react_surface_default as default
150
175
  };
151
- //# sourceMappingURL=react-surface-QLM3CQQP.mjs.map
176
+ //# sourceMappingURL=react-surface-RQX3CPFV.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/index.ts", "../../../src/components/MarkdownSettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { createSurface, contributes, Capabilities, useCapability } from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { TextType } from '@dxos/schema';\n\nimport { MarkdownCapabilities } from './capabilities';\nimport { MarkdownContainer, MarkdownSettings } from '../components';\nimport { MARKDOWN_PLUGIN } from '../meta';\nimport { DocumentType, isEditorModel, type MarkdownSettingsProps } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${MARKDOWN_PLUGIN}/document`,\n role: ['article', 'section', 'tabpanel'],\n filter: (data): data is { subject: DocumentType; variant: undefined } =>\n isInstanceOf(DocumentType, data.subject) && !data.variant,\n component: ({ data, role }) => {\n const settingsStore = useCapability(Capabilities.SettingsStore);\n const settings = settingsStore.getStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN)!.value;\n const { state, editorState, getViewMode, setViewMode } = useCapability(MarkdownCapabilities.State);\n\n return (\n <MarkdownContainer\n id={fullyQualifiedId(data.subject)}\n object={data.subject}\n role={role}\n settings={settings}\n extensionProviders={state.extensionProviders}\n viewMode={getViewMode(fullyQualifiedId(data.subject))}\n editorStateStore={editorState}\n onViewModeChange={setViewMode}\n />\n );\n },\n }),\n createSurface({\n id: `${MARKDOWN_PLUGIN}/text`,\n role: ['article', 'section', 'tabpanel'],\n filter: (data): data is { id: string; subject: TextType } =>\n typeof data.id === 'string' && isInstanceOf(TextType, data.subject),\n component: ({ data, role }) => {\n const settingsStore = useCapability(Capabilities.SettingsStore);\n const settings = settingsStore.getStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN)!.value;\n const { state, editorState, getViewMode, setViewMode } = useCapability(MarkdownCapabilities.State);\n\n return (\n <MarkdownContainer\n id={data.id}\n object={data.subject}\n role={role}\n settings={settings}\n extensionProviders={state.extensionProviders}\n viewMode={getViewMode(data.id)}\n editorStateStore={editorState}\n onViewModeChange={setViewMode}\n />\n );\n },\n }),\n createSurface({\n id: `${MARKDOWN_PLUGIN}/editor`,\n role: ['article', 'section'],\n filter: (data): data is { subject: { id: string; text: string } } => isEditorModel(data.subject),\n component: ({ data, role }) => {\n const settingsStore = useCapability(Capabilities.SettingsStore);\n const settings = settingsStore.getStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN)!.value;\n const { state, editorState, getViewMode, setViewMode } = useCapability(MarkdownCapabilities.State);\n\n return (\n <MarkdownContainer\n id={data.subject.id}\n object={data.subject}\n role={role}\n settings={settings}\n extensionProviders={state.extensionProviders}\n viewMode={getViewMode(data.subject.id)}\n editorStateStore={editorState}\n onViewModeChange={setViewMode}\n />\n );\n },\n }),\n createSurface({\n id: `${MARKDOWN_PLUGIN}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<MarkdownSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === MARKDOWN_PLUGIN,\n component: ({ data: { subject } }) => <MarkdownSettings settings={subject.value} />,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './MarkdownSettings';\n\nexport const MarkdownContainer = lazy(() => import('./MarkdownContainer'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input, Select, useTranslation } from '@dxos/react-ui';\nimport { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/react-ui-editor';\nimport { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { MARKDOWN_PLUGIN } from '../meta';\nimport { type MarkdownSettingsProps } from '../types';\n\nexport const MarkdownSettings = ({ settings }: { settings: MarkdownSettingsProps }) => {\n const { t } = useTranslation(MARKDOWN_PLUGIN);\n\n // TODO(wittjosiah): Add skill test confirmation for entering vim mode.\n return (\n <DeprecatedFormContainer>\n <DeprecatedFormInput label={t('default view mode label')}>\n <Select.Root\n value={settings.defaultViewMode}\n onValueChange={(value) => {\n settings.defaultViewMode = value as EditorViewMode;\n }}\n >\n <Select.TriggerButton />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {EditorViewModes.map((mode) => (\n <Select.Option key={mode} value={mode}>\n {t(`${mode} mode label`, { ns: 'react-ui-editor' })}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n\n <DeprecatedFormInput label={t('editor input mode label')}>\n <Select.Root\n value={settings.editorInputMode ?? 'default'}\n onValueChange={(value) => {\n settings.editorInputMode = value as EditorInputMode;\n }}\n >\n <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {EditorInputModes.map((mode) => (\n <Select.Option key={mode} value={mode}>\n {t(`settings editor input mode ${mode} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n\n <DeprecatedFormInput label={t('settings toolbar label')}>\n <Input.Switch checked={settings.toolbar} onCheckedChange={(checked) => (settings.toolbar = !!checked)} />\n </DeprecatedFormInput>\n\n <DeprecatedFormInput label={t('settings numbered headings label')}>\n <Input.Switch\n checked={settings.numberedHeadings}\n onCheckedChange={(checked) => (settings.numberedHeadings = !!checked)}\n />\n </DeprecatedFormInput>\n\n <DeprecatedFormInput label={t('settings folding label')}>\n <Input.Switch checked={settings.folding} onCheckedChange={(checked) => (settings.folding = !!checked)} />\n </DeprecatedFormInput>\n\n <DeprecatedFormInput label={t('settings experimental label')}>\n <Input.Switch\n checked={settings.experimental}\n onCheckedChange={(checked) => (settings.experimental = !!checked)}\n />\n </DeprecatedFormInput>\n\n <DeprecatedFormInput\n label={t('settings debug label')}\n secondary={\n settings.debug ? (\n <Input.Root>\n <Input.TextArea\n rows={5}\n value={settings.typewriter}\n onChange={({ target: { value } }) => (settings.typewriter = value)}\n placeholder={t('settings debug placeholder')}\n />\n </Input.Root>\n ) : undefined\n }\n >\n <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />\n </DeprecatedFormInput>\n </DeprecatedFormContainer>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "createSurface", "contributes", "Capabilities", "useCapability", "isInstanceOf", "SettingsStore", "fullyQualifiedId", "TextType", "lazy", "React", "Input", "Select", "useTranslation", "EditorInputModes", "EditorViewModes", "DeprecatedFormContainer", "DeprecatedFormInput", "MarkdownSettings", "settings", "t", "useTranslation", "MARKDOWN_PLUGIN", "DeprecatedFormContainer", "DeprecatedFormInput", "label", "Select", "Root", "value", "defaultViewMode", "onValueChange", "TriggerButton", "Portal", "Content", "Viewport", "EditorViewModes", "map", "mode", "Option", "key", "ns", "editorInputMode", "placeholder", "EditorInputModes", "Input", "Switch", "checked", "toolbar", "onCheckedChange", "numberedHeadings", "folding", "experimental", "secondary", "debug", "TextArea", "rows", "typewriter", "onChange", "target", "undefined", "MarkdownContainer", "lazy", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "MARKDOWN_PLUGIN", "role", "filter", "data", "isInstanceOf", "DocumentType", "subject", "variant", "component", "settingsStore", "useCapability", "SettingsStore", "settings", "getStore", "value", "state", "editorState", "getViewMode", "setViewMode", "MarkdownCapabilities", "State", "React", "MarkdownContainer", "fullyQualifiedId", "object", "extensionProviders", "viewMode", "editorStateStore", "onViewModeChange", "TextType", "isEditorModel", "prefix", "MarkdownSettings"]
7
+ }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  MarkdownSettingsSchema
3
- } from "./chunk-3C24B23M.mjs";
3
+ } from "./chunk-YCJNW2RU.mjs";
4
4
  import {
5
5
  MARKDOWN_PLUGIN
6
- } from "./chunk-YTHIPV5Q.mjs";
6
+ } from "./chunk-JX6XNEHE.mjs";
7
7
 
8
8
  // packages/plugins/plugin-markdown/src/capabilities/settings.ts
9
9
  import { Capabilities, contributes } from "@dxos/app-framework";
@@ -25,4 +25,4 @@ var settings_default = () => {
25
25
  export {
26
26
  settings_default as default
27
27
  };
28
- //# sourceMappingURL=settings-BD3J7QXE.mjs.map
28
+ //# sourceMappingURL=settings-GCSS3Y4Z.mjs.map
@@ -1,30 +1,24 @@
1
1
  import {
2
2
  MarkdownCapabilities
3
- } from "./chunk-XBAPFNQG.mjs";
3
+ } from "./chunk-NAGMSX77.mjs";
4
4
  import {
5
5
  MARKDOWN_PLUGIN
6
- } from "./chunk-YTHIPV5Q.mjs";
6
+ } from "./chunk-JX6XNEHE.mjs";
7
7
 
8
8
  // packages/plugins/plugin-markdown/src/capabilities/state.ts
9
9
  import { Capabilities, contributes } from "@dxos/app-framework";
10
10
  import { LocalStorageStore } from "@dxos/local-storage";
11
+ import { createEditorStateStore } from "@dxos/react-ui-editor";
11
12
  var state_default = (context) => {
12
13
  const state = new LocalStorageStore(MARKDOWN_PLUGIN, {
13
14
  extensionProviders: [],
14
- viewMode: {},
15
- selectionState: {},
16
- foldState: {}
15
+ viewMode: {}
17
16
  });
18
17
  state.prop({
19
18
  key: "viewMode",
20
19
  type: LocalStorageStore.json()
21
- }).prop({
22
- key: "selectionState",
23
- type: LocalStorageStore.json()
24
- }).prop({
25
- key: "foldState",
26
- type: LocalStorageStore.json()
27
20
  });
21
+ const editorState = createEditorStateStore(`${MARKDOWN_PLUGIN}/editor`);
28
22
  const getViewMode = (id) => {
29
23
  const defaultViewMode = context.requestCapability(Capabilities.SettingsStore).getStore(MARKDOWN_PLUGIN).value.defaultViewMode;
30
24
  return id && state.values.viewMode[id] || defaultViewMode;
@@ -32,6 +26,7 @@ var state_default = (context) => {
32
26
  const setViewMode = (id, viewMode) => state.values.viewMode[id] = viewMode;
33
27
  return contributes(MarkdownCapabilities.State, {
34
28
  state: state.values,
29
+ editorState,
35
30
  getViewMode,
36
31
  setViewMode
37
32
  });
@@ -39,4 +34,4 @@ var state_default = (context) => {
39
34
  export {
40
35
  state_default as default
41
36
  };
42
- //# sourceMappingURL=state-M5HI645K.mjs.map
37
+ //# sourceMappingURL=state-O7P5JDIH.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/state.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { type EditorViewMode, createEditorStateStore } from '@dxos/react-ui-editor';\n\nimport { MarkdownCapabilities } from './capabilities';\nimport { MARKDOWN_PLUGIN } from '../meta';\nimport { type MarkdownPluginState, type MarkdownSettingsProps } from '../types';\n\nexport default (context: PluginsContext) => {\n const state = new LocalStorageStore<MarkdownPluginState>(MARKDOWN_PLUGIN, { extensionProviders: [], viewMode: {} });\n\n state.prop({ key: 'viewMode', type: LocalStorageStore.json<{ [key: string]: EditorViewMode }>() });\n\n // TODO(wittjosiah): Fold into state.\n const editorState = createEditorStateStore(`${MARKDOWN_PLUGIN}/editor`);\n\n const getViewMode = (id: string) => {\n const defaultViewMode = context\n .requestCapability(Capabilities.SettingsStore)\n .getStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN)!.value.defaultViewMode;\n return (id && state.values.viewMode[id]) || defaultViewMode;\n };\n\n const setViewMode = (id: string, viewMode: EditorViewMode) => (state.values.viewMode[id] = viewMode);\n\n return contributes(MarkdownCapabilities.State, { state: state.values, editorState, getViewMode, setViewMode });\n};\n"],
5
+ "mappings": ";;;;;;;;AAIA,SAASA,cAAcC,mBAAwC;AAC/D,SAASC,yBAAyB;AAClC,SAA8BC,8BAA8B;AAM5D,IAAA,gBAAe,CAACC,YAAAA;AACd,QAAMC,QAAQ,IAAIC,kBAAuCC,iBAAiB;IAAEC,oBAAoB,CAAA;IAAIC,UAAU,CAAC;EAAE,CAAA;AAEjHJ,QAAMK,KAAK;IAAEC,KAAK;IAAYC,MAAMN,kBAAkBO,KAAI;EAAsC,CAAA;AAGhG,QAAMC,cAAcC,uBAAuB,GAAGR,eAAAA,SAAwB;AAEtE,QAAMS,cAAc,CAACC,OAAAA;AACnB,UAAMC,kBAAkBd,QACrBe,kBAAkBC,aAAaC,aAAa,EAC5CC,SAAgCf,eAAAA,EAAkBgB,MAAML;AAC3D,WAAQD,MAAMZ,MAAMmB,OAAOf,SAASQ,EAAAA,KAAQC;EAC9C;AAEA,QAAMO,cAAc,CAACR,IAAYR,aAA8BJ,MAAMmB,OAAOf,SAASQ,EAAAA,IAAMR;AAE3F,SAAOiB,YAAYC,qBAAqBC,OAAO;IAAEvB,OAAOA,MAAMmB;IAAQV;IAAaE;IAAaS;EAAY,CAAA;AAC9G;",
6
+ "names": ["Capabilities", "contributes", "LocalStorageStore", "createEditorStateStore", "context", "state", "LocalStorageStore", "MARKDOWN_PLUGIN", "extensionProviders", "viewMode", "prop", "key", "type", "json", "editorState", "createEditorStateStore", "getViewMode", "id", "defaultViewMode", "requestCapability", "Capabilities", "SettingsStore", "getStore", "value", "values", "setViewMode", "contributes", "MarkdownCapabilities", "State"]
7
+ }
@@ -1,14 +1,15 @@
1
1
  import {
2
2
  DocumentType
3
- } from "./chunk-3C24B23M.mjs";
4
- import "./chunk-YTHIPV5Q.mjs";
3
+ } from "./chunk-YCJNW2RU.mjs";
4
+ import "./chunk-JX6XNEHE.mjs";
5
5
 
6
6
  // packages/plugins/plugin-markdown/src/capabilities/thread.ts
7
7
  import { contributes } from "@dxos/app-framework";
8
+ import { isInstanceOf } from "@dxos/echo-schema";
8
9
  import { ThreadCapabilities } from "@dxos/plugin-space";
9
10
  import { createDocAccessor, getRangeFromCursor } from "@dxos/react-client/echo";
10
11
  var thread_default = () => contributes(ThreadCapabilities.Thread, {
11
- predicate: (obj) => obj instanceof DocumentType,
12
+ predicate: (obj) => isInstanceOf(DocumentType, obj),
12
13
  createSort: (doc) => {
13
14
  const accessor = doc.content.target ? createDocAccessor(doc.content.target, [
14
15
  "content"
@@ -33,4 +34,4 @@ var thread_default = () => contributes(ThreadCapabilities.Thread, {
33
34
  export {
34
35
  thread_default as default
35
36
  };
36
- //# sourceMappingURL=thread-ZGBGNMEM.mjs.map
37
+ //# sourceMappingURL=thread-3QGCFNVZ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/thread.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { ThreadCapabilities } from '@dxos/plugin-space';\nimport { createDocAccessor, getRangeFromCursor } from '@dxos/react-client/echo';\n\nimport { DocumentType } from '../types';\n\nexport default () =>\n contributes(ThreadCapabilities.Thread, {\n predicate: (obj) => isInstanceOf(DocumentType, obj),\n createSort: (doc: DocumentType) => {\n const accessor = doc.content.target ? createDocAccessor(doc.content.target, ['content']) : undefined;\n if (!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 return (anchorA: string | undefined, anchorB: string | undefined): number => {\n if (anchorA === undefined || anchorB === undefined) {\n return 0;\n }\n const posA = getStartPosition(anchorA);\n const posB = getStartPosition(anchorB);\n return posA - posB;\n };\n },\n });\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,oBAAoB;AAC7B,SAASC,0BAA0B;AACnC,SAASC,mBAAmBC,0BAA0B;AAItD,IAAA,iBAAe,MACbC,YAAYC,mBAAmBC,QAAQ;EACrCC,WAAW,CAACC,QAAQC,aAAaC,cAAcF,GAAAA;EAC/CG,YAAY,CAACC,QAAAA;AACX,UAAMC,WAAWD,IAAIE,QAAQC,SAASC,kBAAkBJ,IAAIE,QAAQC,QAAQ;MAAC;KAAU,IAAIE;AAC3F,QAAI,CAACJ,UAAU;AACb,aAAO,CAACK,MAAM;IAChB;AAEA,UAAMC,mBAAmB,CAACC,WAAAA;AACxB,YAAMC,QAAQD,SAASE,mBAAmBT,UAAUO,MAAAA,IAAUH;AAC9D,aAAOI,OAAOE,SAASC,OAAOC;IAChC;AAEA,WAAO,CAACC,SAA6BC,YAAAA;AACnC,UAAID,YAAYT,UAAaU,YAAYV,QAAW;AAClD,eAAO;MACT;AACA,YAAMW,OAAOT,iBAAiBO,OAAAA;AAC9B,YAAMG,OAAOV,iBAAiBQ,OAAAA;AAC9B,aAAOC,OAAOC;IAChB;EACF;AACF,CAAA;",
6
+ "names": ["contributes", "isInstanceOf", "ThreadCapabilities", "createDocAccessor", "getRangeFromCursor", "contributes", "ThreadCapabilities", "Thread", "predicate", "obj", "isInstanceOf", "DocumentType", "createSort", "doc", "accessor", "content", "target", "createDocAccessor", "undefined", "_", "getStartPosition", "cursor", "range", "getRangeFromCursor", "start", "Number", "MAX_SAFE_INTEGER", "anchorA", "anchorB", "posA", "posB"]
7
+ }
@@ -1,11 +1,13 @@
1
1
  import {
2
+ DocumentSchema,
2
3
  DocumentType,
3
4
  MarkdownAction,
4
5
  MarkdownSettingsSchema,
5
6
  isEditorModel
6
- } from "../chunk-3C24B23M.mjs";
7
- import "../chunk-YTHIPV5Q.mjs";
7
+ } from "../chunk-YCJNW2RU.mjs";
8
+ import "../chunk-JX6XNEHE.mjs";
8
9
  export {
10
+ DocumentSchema,
9
11
  DocumentType,
10
12
  MarkdownAction,
11
13
  MarkdownSettingsSchema,
@@ -26,23 +26,26 @@ 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 MarkdownContainer_ESPH2MCH_exports = {};
30
- __export(MarkdownContainer_ESPH2MCH_exports, {
29
+ var MarkdownContainer_6ZJIFAP6_exports = {};
30
+ __export(MarkdownContainer_6ZJIFAP6_exports, {
31
31
  DocumentEditor: () => DocumentEditor,
32
32
  default: () => MarkdownContainer_default
33
33
  });
34
- module.exports = __toCommonJS(MarkdownContainer_ESPH2MCH_exports);
35
- var import_chunk_4N7RTNIG = require("./chunk-4N7RTNIG.cjs");
36
- var import_chunk_4LG6SPXW = require("./chunk-4LG6SPXW.cjs");
37
- var import_chunk_VYAJIYUI = require("./chunk-VYAJIYUI.cjs");
38
- var import_chunk_QZ4XQYNC = require("./chunk-QZ4XQYNC.cjs");
34
+ module.exports = __toCommonJS(MarkdownContainer_6ZJIFAP6_exports);
35
+ var import_chunk_7QVONRSI = require("./chunk-7QVONRSI.cjs");
36
+ var import_chunk_DZXTXSXX = require("./chunk-DZXTXSXX.cjs");
37
+ var import_chunk_UEXGNGSS = require("./chunk-UEXGNGSS.cjs");
38
+ var import_chunk_ZU5OIHCY = require("./chunk-ZU5OIHCY.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_app_framework = require("@dxos/app-framework");
41
+ var import_echo_schema = require("@dxos/echo-schema");
41
42
  var import_echo = require("@dxos/react-client/echo");
43
+ var import_schema = require("@dxos/schema");
42
44
  var import_search = require("@codemirror/search");
43
45
  var import_react2 = __toESM(require("react"));
44
46
  var import_react_dropzone = require("react-dropzone");
45
47
  var import_app_framework2 = require("@dxos/app-framework");
48
+ var import_types = require("@dxos/plugin-deck/types");
46
49
  var import_react_ui = require("@dxos/react-ui");
47
50
  var import_react_ui_editor = require("@dxos/react-ui-editor");
48
51
  var import_react_ui_stack = require("@dxos/react-ui-stack");
@@ -50,7 +53,7 @@ var import_util = require("@dxos/util");
50
53
  var import_view = require("@codemirror/view");
51
54
  var import_react3 = require("react");
52
55
  var import_app_framework3 = require("@dxos/app-framework");
53
- var import_echo_schema = require("@dxos/echo-schema");
56
+ var import_echo_schema2 = require("@dxos/echo-schema");
54
57
  var import_invariant = require("@dxos/invariant");
55
58
  var import_react_ui_editor2 = require("@dxos/react-ui-editor");
56
59
  var import_react4 = __toESM(require("react"));
@@ -69,7 +72,7 @@ var useSelectCurrentThread = (editorView, documentId) => {
69
72
  intent: import_app_framework3.LayoutAction.UpdateLayout,
70
73
  position: "hoist",
71
74
  filter: (data) => {
72
- if (!import_echo_schema.S.is(import_app_framework3.LayoutAction.ScrollIntoView.fields.input)(data)) {
75
+ if (!import_echo_schema2.S.is(import_app_framework3.LayoutAction.ScrollIntoView.fields.input)(data)) {
73
76
  return false;
74
77
  }
75
78
  return !!editorView && data.subject === documentId && !!data.options?.cursor;
@@ -113,27 +116,27 @@ var useSelectCurrentThread = (editorView, documentId) => {
113
116
  documentId,
114
117
  editorView
115
118
  ]);
116
- (0, import_app_framework3.useIntentResolver)(import_chunk_QZ4XQYNC.MARKDOWN_PLUGIN, scrollIntoViewResolver);
119
+ (0, import_app_framework3.useIntentResolver)(import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN, scrollIntoViewResolver);
117
120
  };
118
- var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, scrollTo, selection, onFileUpload, onViewModeChange }) => {
119
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_QZ4XQYNC.MARKDOWN_PLUGIN);
121
+ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensionProviders, scrollPastEnd, toolbar, comment = true, viewMode, editorStateStore, onFileUpload, onViewModeChange }) => {
122
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN);
120
123
  const { themeMode } = (0, import_react_ui.useThemeContext)();
121
124
  const { dispatchPromise: dispatch } = (0, import_app_framework2.useIntentDispatcher)();
122
125
  const toolbarState = (0, import_react_ui_editor.useEditorToolbarState)({
123
126
  viewMode
124
127
  });
125
128
  const formattingObserver = (0, import_react_ui_editor.useFormattingState)(toolbarState);
129
+ const { scrollTo, selection } = (0, import_react2.useMemo)(() => editorStateStore?.getState(id) ?? {}, [
130
+ id
131
+ ]);
126
132
  const providerExtensions = (0, import_react2.useMemo)(() => extensionProviders?.flatMap((provider) => provider({})).filter(import_util.isNonNullable), [
127
133
  extensionProviders
128
134
  ]);
129
135
  const commentObserver = (0, import_react_ui_editor.useCommentState)(toolbarState);
130
136
  const onCommentClick = (0, import_react2.useCallback)(async () => {
131
- await dispatch((0, import_app_framework2.createIntent)(import_app_framework2.LayoutAction.UpdateComplementary, {
132
- part: "complementary",
133
- subject: "comments",
134
- options: {
135
- state: "expanded"
136
- }
137
+ await dispatch((0, import_app_framework2.createIntent)(import_types.DeckAction.ChangeCompanion, {
138
+ primary: id,
139
+ companion: `${id}${import_types.ATTENDABLE_PATH_SEPARATOR}comments`
137
140
  }));
138
141
  }, [
139
142
  dispatch
@@ -153,10 +156,10 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
153
156
  initialValue,
154
157
  extensions: [
155
158
  formattingObserver,
156
- commentObserver,
157
- commentClickObserver,
159
+ comment && commentObserver,
160
+ comment && commentClickObserver,
158
161
  (0, import_react_ui_editor.createBasicExtensions)({
159
- readonly: viewMode === "readonly",
162
+ readOnly: viewMode === "readonly",
160
163
  placeholder: t("editor placeholder"),
161
164
  scrollPastEnd: role === "section" ? false : scrollPastEnd
162
165
  }),
@@ -190,6 +193,7 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
190
193
  }), [
191
194
  id,
192
195
  formattingObserver,
196
+ comment,
193
197
  viewMode,
194
198
  themeMode,
195
199
  extensions,
@@ -262,6 +266,7 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
262
266
  attendableId: id,
263
267
  role,
264
268
  state: toolbarState,
269
+ comment,
265
270
  customActions: onFileUpload ? createUploadAction : void 0,
266
271
  onAction: handleAction
267
272
  }), /* @__PURE__ */ import_react2.default.createElement("input", getInputProps())), /* @__PURE__ */ import_react2.default.createElement("div", {
@@ -291,7 +296,7 @@ var createUploadAction = () => ({
291
296
  }, "ph--image-square--regular", [
292
297
  "upload image label",
293
298
  {
294
- ns: import_chunk_QZ4XQYNC.MARKDOWN_PLUGIN
299
+ ns: import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN
295
300
  }
296
301
  ])
297
302
  ],
@@ -303,18 +308,21 @@ var createUploadAction = () => ({
303
308
  ]
304
309
  });
305
310
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
306
- var useExtensions = ({ document, settings, viewMode, selection, folding: folding2 }) => {
311
+ var useExtensions = ({ document, id, text, settings, viewMode, editorStateStore }) => {
307
312
  const { dispatchPromise: dispatch } = (0, import_app_framework4.useIntentDispatcher)();
308
313
  const identity = (0, import_halo.useIdentity)();
309
- const space = (0, import_echo2.getSpace)(document);
314
+ const space = (0, import_echo2.getSpace)(document) ?? (0, import_echo2.getSpace)(text);
310
315
  const baseExtensions = (0, import_react4.useMemo)(() => createBaseExtensions({
311
316
  document,
317
+ id,
318
+ text,
312
319
  settings,
313
320
  viewMode,
314
- dispatch,
315
- folding: folding2
321
+ dispatch
316
322
  }), [
317
323
  document,
324
+ id,
325
+ text,
318
326
  viewMode,
319
327
  dispatch,
320
328
  settings,
@@ -324,7 +332,7 @@ var useExtensions = ({ document, settings, viewMode, selection, folding: folding
324
332
  settings.debug,
325
333
  settings.typewriter
326
334
  ]);
327
- const extensionProviders = (0, import_app_framework4.useCapabilities)(import_chunk_4LG6SPXW.MarkdownCapabilities.Extensions);
335
+ const extensionProviders = (0, import_app_framework4.useCapabilities)(import_chunk_DZXTXSXX.MarkdownCapabilities.Extensions);
328
336
  const pluginExtensions = (0, import_react4.useMemo)(() => extensionProviders.flat().reduce((acc, provider) => {
329
337
  const extension = typeof provider === "function" ? provider({
330
338
  document
@@ -347,9 +355,17 @@ var useExtensions = ({ document, settings, viewMode, selection, folding: folding
347
355
  space,
348
356
  identity
349
357
  }),
350
- (0, import_react_ui_editor3.selectionState)(selection),
358
+ text && id && (0, import_react_ui_editor3.createDataExtensions)({
359
+ id,
360
+ text: (0, import_echo2.createDocAccessor)(text, [
361
+ "content"
362
+ ]),
363
+ space,
364
+ identity
365
+ }),
366
+ (0, import_react_ui_editor3.selectionState)(editorStateStore),
351
367
  document && (0, import_react_ui_editor3.listener)({
352
- onChange: (text) => (0, import_chunk_4N7RTNIG.setFallbackName)(document, text)
368
+ onChange: (text2) => (0, import_chunk_7QVONRSI.setFallbackName)(document, text2)
353
369
  }),
354
370
  baseExtensions,
355
371
  pluginExtensions
@@ -358,14 +374,16 @@ var useExtensions = ({ document, settings, viewMode, selection, folding: folding
358
374
  pluginExtensions,
359
375
  document,
360
376
  document?.content?.target,
377
+ text,
378
+ id,
361
379
  space,
362
380
  identity
363
381
  ]);
364
382
  };
365
- var createBaseExtensions = ({ document, dispatch, settings, query, viewMode, folding: foldingState }) => {
383
+ var createBaseExtensions = ({ document, id, dispatch, settings, query, viewMode }) => {
366
384
  const extensions = [
367
385
  settings.editorInputMode && import_react_ui_editor3.InputModeExtensions[settings.editorInputMode],
368
- settings.folding && (0, import_react_ui_editor3.folding)(foldingState)
386
+ settings.folding && (0, import_react_ui_editor3.folding)()
369
387
  ].filter(import_util2.isNotFalsy);
370
388
  if (viewMode !== "source") {
371
389
  extensions.push(...[
@@ -376,14 +394,14 @@ var createBaseExtensions = ({ document, dispatch, settings, query, viewMode, fol
376
394
  from: 2
377
395
  } : void 0,
378
396
  // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
379
- renderLinkButton: dispatch && document ? onRenderLink((id) => {
397
+ renderLinkButton: dispatch && (document || id) ? onRenderLink((id2) => {
380
398
  void dispatch((0, import_app_framework4.createIntent)(import_app_framework4.LayoutAction.Open, {
381
399
  part: "main",
382
400
  subject: [
383
- id
401
+ id2
384
402
  ],
385
403
  options: {
386
- pivotId: (0, import_echo2.fullyQualifiedId)(document)
404
+ pivotId: document ? (0, import_echo2.fullyQualifiedId)(document) : id2
387
405
  }
388
406
  }));
389
407
  }) : void 0
@@ -424,7 +442,7 @@ var onRenderLink = (onSelectObject) => (el, url) => {
424
442
  const qualifiedId = url.split("/").at(-1);
425
443
  (0, import_invariant2.invariant)(qualifiedId, "Invalid link format.", {
426
444
  F: __dxlog_file2,
427
- L: 228,
445
+ L: 247,
428
446
  S: void 0,
429
447
  A: [
430
448
  "qualifiedId",
@@ -466,17 +484,18 @@ var renderRoot = (root, node) => {
466
484
  }, node));
467
485
  return root;
468
486
  };
469
- var MarkdownContainer = ({ id, role, object, settings, viewMode, selection, folding: folding2, onViewModeChange }) => {
487
+ var MarkdownContainer = ({ id, role, object, settings, viewMode, editorStateStore, onViewModeChange }) => {
470
488
  const scrollPastEnd = role === "article";
471
- const doc = object instanceof import_chunk_VYAJIYUI.DocumentType ? object : void 0;
489
+ const doc = (0, import_echo_schema.isInstanceOf)(import_chunk_UEXGNGSS.DocumentType, object) ? object : void 0;
490
+ const text = (0, import_echo_schema.isInstanceOf)(import_schema.TextType, object) ? object : void 0;
472
491
  const extensions = useExtensions({
473
492
  document: doc,
493
+ text,
494
+ id,
474
495
  settings,
475
496
  viewMode,
476
- selection,
477
- folding: folding2
497
+ editorStateStore
478
498
  });
479
- const selectionState2 = selection?.[(0, import_echo.fullyQualifiedId)(object)];
480
499
  if (doc) {
481
500
  return /* @__PURE__ */ import_react.default.createElement(DocumentEditor, {
482
501
  id: (0, import_echo.fullyQualifiedId)(object),
@@ -486,8 +505,19 @@ var MarkdownContainer = ({ id, role, object, settings, viewMode, selection, fold
486
505
  viewMode,
487
506
  settings,
488
507
  scrollPastEnd,
489
- selection: selectionState2?.selection,
490
- scrollTo: selectionState2?.scrollTo,
508
+ onViewModeChange
509
+ });
510
+ } else if (text) {
511
+ return /* @__PURE__ */ import_react.default.createElement(MarkdownEditor, {
512
+ id,
513
+ role,
514
+ initialValue: text.content,
515
+ extensions,
516
+ viewMode,
517
+ toolbar: settings.toolbar,
518
+ comment: false,
519
+ inputMode: settings.editorInputMode,
520
+ scrollPastEnd,
491
521
  onViewModeChange
492
522
  });
493
523
  } else {
@@ -500,8 +530,6 @@ var MarkdownContainer = ({ id, role, object, settings, viewMode, selection, fold
500
530
  toolbar: settings.toolbar,
501
531
  inputMode: settings.editorInputMode,
502
532
  scrollPastEnd,
503
- selection: selectionState2?.selection,
504
- scrollTo: selectionState2?.scrollTo,
505
533
  onViewModeChange
506
534
  });
507
535
  }
@@ -512,7 +540,7 @@ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
512
540
  if (typeof doc.fallbackName === "string") {
513
541
  return;
514
542
  }
515
- const fallbackName = doc.content?.target?.content ? (0, import_chunk_4N7RTNIG.getFallbackName)(doc.content.target.content) : void 0;
543
+ const fallbackName = doc.content?.target?.content ? (0, import_chunk_7QVONRSI.getFallbackName)(doc.content.target.content) : void 0;
516
544
  if (fallbackName) {
517
545
  doc.fallbackName = fallbackName;
518
546
  }
@@ -545,4 +573,4 @@ var MarkdownContainer_default = MarkdownContainer;
545
573
  0 && (module.exports = {
546
574
  DocumentEditor
547
575
  });
548
- //# sourceMappingURL=MarkdownContainer-ESPH2MCH.cjs.map
576
+ //# sourceMappingURL=MarkdownContainer-6ZJIFAP6.cjs.map