@dxos/plugin-markdown 0.8.2 → 0.8.3-main.7f5a14c

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 (143) hide show
  1. package/dist/lib/browser/{MarkdownContainer-5IEINNQB.mjs → MarkdownContainer-3KTC7Q4C.mjs} +132 -18
  2. package/dist/lib/browser/MarkdownContainer-3KTC7Q4C.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownPreview-YW5CS3ID.mjs → MarkdownPreview-F4PYFW5L.mjs} +15 -22
  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-FLQI6GFL.mjs} +3 -3
  8. package/dist/lib/browser/{artifact-definition-5NAODQLG.mjs → artifact-definition-FQ2R6KPT.mjs} +6 -6
  9. package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-C5RABVIX.mjs → chunk-CX5GYZYO.mjs} +2 -2
  11. package/dist/lib/browser/{chunk-ACAID3XF.mjs → chunk-LCMXUTQB.mjs} +7 -7
  12. package/dist/lib/browser/{chunk-77NGW7EO.mjs → chunk-LXSRQPEP.mjs} +9 -9
  13. package/dist/lib/browser/chunk-LXSRQPEP.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-ECSM56YC.mjs → chunk-N2D26K6W.mjs} +4 -5
  15. package/dist/lib/browser/chunk-N2D26K6W.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +7 -8
  17. package/dist/lib/browser/index.mjs.map +3 -3
  18. package/dist/lib/browser/{intent-resolver-4GDYST4Y.mjs → intent-resolver-6ZOABX2J.mjs} +6 -7
  19. package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs.map +7 -0
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{react-surface-QE4SKXBT.mjs → react-surface-RJQKYJJQ.mjs} +8 -8
  22. package/dist/lib/browser/react-surface-RJQKYJJQ.mjs.map +7 -0
  23. package/dist/lib/browser/{settings-W5CK4PXP.mjs → settings-PLH54VC7.mjs} +4 -4
  24. package/dist/lib/browser/settings-PLH54VC7.mjs.map +7 -0
  25. package/dist/lib/browser/types/index.mjs +1 -1
  26. package/dist/lib/node/{MarkdownContainer-LSNNPNRB.cjs → MarkdownContainer-NG4H6AZJ.cjs} +181 -67
  27. package/dist/lib/node/MarkdownContainer-NG4H6AZJ.cjs.map +7 -0
  28. package/dist/lib/node/{MarkdownPreview-G34HSQEB.cjs → MarkdownPreview-GCJJCXY6.cjs} +24 -31
  29. package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs.map +7 -0
  30. package/dist/lib/node/{anchor-sort-NHVF23EU.cjs → anchor-sort-V3T4SFFI.cjs} +12 -12
  31. package/dist/lib/node/anchor-sort-V3T4SFFI.cjs.map +7 -0
  32. package/dist/lib/node/{app-graph-serializer-CLALIYN3.cjs → app-graph-serializer-BZPM7HHJ.cjs} +9 -9
  33. package/dist/lib/node/{artifact-definition-VEAHK7BX.cjs → artifact-definition-U27MH5SC.cjs} +16 -16
  34. package/dist/lib/node/artifact-definition-U27MH5SC.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-RQS4KBMG.cjs → chunk-3HHV4MM6.cjs} +6 -7
  36. package/dist/lib/node/chunk-3HHV4MM6.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-C4HR7UXE.cjs → chunk-4DYNEQG3.cjs} +10 -10
  38. package/dist/lib/node/{chunk-G7RBJX22.cjs → chunk-CJLYFGPI.cjs} +12 -12
  39. package/dist/lib/node/chunk-CJLYFGPI.cjs.map +7 -0
  40. package/dist/lib/node/{chunk-ZDTL47I7.cjs → chunk-SYEFGLXN.cjs} +6 -6
  41. package/dist/lib/node/index.cjs +26 -27
  42. package/dist/lib/node/index.cjs.map +3 -3
  43. package/dist/lib/node/{intent-resolver-AUZVK3NZ.cjs → intent-resolver-OEFLRNEJ.cjs} +14 -15
  44. package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs.map +7 -0
  45. package/dist/lib/node/meta.json +1 -1
  46. package/dist/lib/node/{react-surface-WJZTEBYO.cjs → react-surface-5RKEWAXS.cjs} +15 -15
  47. package/dist/lib/node/react-surface-5RKEWAXS.cjs.map +7 -0
  48. package/dist/lib/node/{settings-IRKU3WPM.cjs → settings-E3NUTXJ4.cjs} +7 -7
  49. package/dist/lib/node/settings-E3NUTXJ4.cjs.map +7 -0
  50. package/dist/lib/node/types/index.cjs +7 -7
  51. package/dist/lib/node/types/index.cjs.map +1 -1
  52. package/dist/lib/node-esm/{MarkdownContainer-UZSLXMWO.mjs → MarkdownContainer-DZPXCA6J.mjs} +132 -18
  53. package/dist/lib/node-esm/MarkdownContainer-DZPXCA6J.mjs.map +7 -0
  54. package/dist/lib/node-esm/{MarkdownPreview-TCV7BI32.mjs → MarkdownPreview-KFDRV4GC.mjs} +15 -22
  55. package/dist/lib/node-esm/MarkdownPreview-KFDRV4GC.mjs.map +7 -0
  56. package/dist/lib/node-esm/{anchor-sort-G2HLCYFK.mjs → anchor-sort-BXL7BE67.mjs} +4 -4
  57. package/dist/lib/node-esm/anchor-sort-BXL7BE67.mjs.map +7 -0
  58. package/dist/lib/node-esm/{app-graph-serializer-C3RNTQGM.mjs → app-graph-serializer-EBH54X6Z.mjs} +3 -3
  59. package/dist/lib/node-esm/{artifact-definition-7TIJW2CO.mjs → artifact-definition-NQOHB6S5.mjs} +6 -6
  60. package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-6RPARLIK.mjs → chunk-K26TX5V4.mjs} +9 -9
  62. package/dist/lib/node-esm/chunk-K26TX5V4.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-TCFJNUAE.mjs → chunk-Q7WUBLL3.mjs} +2 -2
  64. package/dist/lib/node-esm/{chunk-NCMPVEXO.mjs → chunk-T2Y2BT53.mjs} +4 -5
  65. package/dist/lib/node-esm/chunk-T2Y2BT53.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-EIUTPXGL.mjs → chunk-WANCCPU7.mjs} +7 -7
  67. package/dist/lib/node-esm/index.mjs +7 -8
  68. package/dist/lib/node-esm/index.mjs.map +3 -3
  69. package/dist/lib/node-esm/{intent-resolver-FTNXUNI2.mjs → intent-resolver-CLMSVF2K.mjs} +6 -7
  70. package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs.map +7 -0
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/{react-surface-XNM3YDFB.mjs → react-surface-Z3DX37JV.mjs} +8 -8
  73. package/dist/lib/node-esm/react-surface-Z3DX37JV.mjs.map +7 -0
  74. package/dist/lib/node-esm/{settings-MK7D7LHQ.mjs → settings-SIY33P3F.mjs} +4 -4
  75. package/dist/lib/node-esm/settings-SIY33P3F.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +1 -1
  77. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  79. package/dist/types/src/components/MarkdownContainer.d.ts +1 -1
  80. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  81. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +4 -2
  82. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  83. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +1 -1
  84. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +1 -1
  85. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +2 -6
  86. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  88. package/dist/types/src/components/index.d.ts +1 -1
  89. package/dist/types/src/components/index.d.ts.map +1 -1
  90. package/dist/types/src/types/schema.d.ts.map +1 -1
  91. package/dist/types/src/util.d.ts.map +1 -1
  92. package/package.json +38 -39
  93. package/src/MarkdownPlugin.tsx +3 -5
  94. package/src/capabilities/anchor-sort.ts +2 -2
  95. package/src/capabilities/artifact-definition.ts +3 -3
  96. package/src/capabilities/intent-resolver.ts +4 -5
  97. package/src/capabilities/react-surface.tsx +4 -4
  98. package/src/capabilities/settings.ts +2 -2
  99. package/src/components/MarkdownContainer.tsx +61 -7
  100. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +3 -3
  101. package/src/components/MarkdownEditor/MarkdownEditor.tsx +196 -144
  102. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +8 -7
  103. package/src/components/MarkdownPreview/MarkdownPreview.tsx +14 -28
  104. package/src/components/Suggestions.stories.tsx +8 -9
  105. package/src/components/Toolbar.stories.tsx +3 -3
  106. package/src/types/schema.ts +2 -3
  107. package/src/util.tsx +5 -7
  108. package/dist/lib/browser/MarkdownContainer-5IEINNQB.mjs.map +0 -7
  109. package/dist/lib/browser/MarkdownPreview-YW5CS3ID.mjs.map +0 -7
  110. package/dist/lib/browser/anchor-sort-VS4OZVPP.mjs.map +0 -7
  111. package/dist/lib/browser/artifact-definition-5NAODQLG.mjs.map +0 -7
  112. package/dist/lib/browser/chunk-77NGW7EO.mjs.map +0 -7
  113. package/dist/lib/browser/chunk-ECSM56YC.mjs.map +0 -7
  114. package/dist/lib/browser/intent-resolver-4GDYST4Y.mjs.map +0 -7
  115. package/dist/lib/browser/react-surface-QE4SKXBT.mjs.map +0 -7
  116. package/dist/lib/browser/settings-W5CK4PXP.mjs.map +0 -7
  117. package/dist/lib/node/MarkdownContainer-LSNNPNRB.cjs.map +0 -7
  118. package/dist/lib/node/MarkdownPreview-G34HSQEB.cjs.map +0 -7
  119. package/dist/lib/node/anchor-sort-NHVF23EU.cjs.map +0 -7
  120. package/dist/lib/node/artifact-definition-VEAHK7BX.cjs.map +0 -7
  121. package/dist/lib/node/chunk-G7RBJX22.cjs.map +0 -7
  122. package/dist/lib/node/chunk-RQS4KBMG.cjs.map +0 -7
  123. package/dist/lib/node/intent-resolver-AUZVK3NZ.cjs.map +0 -7
  124. package/dist/lib/node/react-surface-WJZTEBYO.cjs.map +0 -7
  125. package/dist/lib/node/settings-IRKU3WPM.cjs.map +0 -7
  126. package/dist/lib/node-esm/MarkdownContainer-UZSLXMWO.mjs.map +0 -7
  127. package/dist/lib/node-esm/MarkdownPreview-TCV7BI32.mjs.map +0 -7
  128. package/dist/lib/node-esm/anchor-sort-G2HLCYFK.mjs.map +0 -7
  129. package/dist/lib/node-esm/artifact-definition-7TIJW2CO.mjs.map +0 -7
  130. package/dist/lib/node-esm/chunk-6RPARLIK.mjs.map +0 -7
  131. package/dist/lib/node-esm/chunk-NCMPVEXO.mjs.map +0 -7
  132. package/dist/lib/node-esm/intent-resolver-FTNXUNI2.mjs.map +0 -7
  133. package/dist/lib/node-esm/react-surface-XNM3YDFB.mjs.map +0 -7
  134. package/dist/lib/node-esm/settings-MK7D7LHQ.mjs.map +0 -7
  135. /package/dist/lib/browser/{app-graph-serializer-V6RLEHVY.mjs.map → app-graph-serializer-FLQI6GFL.mjs.map} +0 -0
  136. /package/dist/lib/browser/{chunk-C5RABVIX.mjs.map → chunk-CX5GYZYO.mjs.map} +0 -0
  137. /package/dist/lib/browser/{chunk-ACAID3XF.mjs.map → chunk-LCMXUTQB.mjs.map} +0 -0
  138. /package/dist/lib/node/{app-graph-serializer-CLALIYN3.cjs.map → app-graph-serializer-BZPM7HHJ.cjs.map} +0 -0
  139. /package/dist/lib/node/{chunk-C4HR7UXE.cjs.map → chunk-4DYNEQG3.cjs.map} +0 -0
  140. /package/dist/lib/node/{chunk-ZDTL47I7.cjs.map → chunk-SYEFGLXN.cjs.map} +0 -0
  141. /package/dist/lib/node-esm/{app-graph-serializer-C3RNTQGM.mjs.map → app-graph-serializer-EBH54X6Z.mjs.map} +0 -0
  142. /package/dist/lib/node-esm/{chunk-TCFJNUAE.mjs.map → chunk-Q7WUBLL3.mjs.map} +0 -0
  143. /package/dist/lib/node-esm/{chunk-EIUTPXGL.mjs.map → chunk-WANCCPU7.mjs.map} +0 -0
@@ -26,20 +26,20 @@ 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 react_surface_WJZTEBYO_exports = {};
30
- __export(react_surface_WJZTEBYO_exports, {
29
+ var react_surface_5RKEWAXS_exports = {};
30
+ __export(react_surface_5RKEWAXS_exports, {
31
31
  default: () => react_surface_default
32
32
  });
33
- module.exports = __toCommonJS(react_surface_WJZTEBYO_exports);
33
+ module.exports = __toCommonJS(react_surface_5RKEWAXS_exports);
34
34
  var import_chunk_IFYSBQE5 = require("./chunk-IFYSBQE5.cjs");
35
- var import_chunk_RQS4KBMG = require("./chunk-RQS4KBMG.cjs");
35
+ var import_chunk_3HHV4MM6 = require("./chunk-3HHV4MM6.cjs");
36
36
  var import_chunk_ZU5OIHCY = require("./chunk-ZU5OIHCY.cjs");
37
37
  var import_react = __toESM(require("react"));
38
38
  var import_app_framework = require("@dxos/app-framework");
39
- var import_echo_schema = require("@dxos/echo-schema");
39
+ var import_echo = require("@dxos/echo");
40
40
  var import_local_storage = require("@dxos/local-storage");
41
41
  var import_plugin_attention = require("@dxos/plugin-attention");
42
- var import_echo = require("@dxos/react-client/echo");
42
+ var import_echo2 = require("@dxos/react-client/echo");
43
43
  var import_schema = require("@dxos/schema");
44
44
  var import_react2 = require("react");
45
45
  var import_tracking = require("@preact-signals/safe-react/tracking");
@@ -111,8 +111,8 @@ var MarkdownSettings = ({ settings }) => {
111
111
  _effect.f();
112
112
  }
113
113
  };
114
- var MarkdownContainer = (0, import_react2.lazy)(() => import("./MarkdownContainer-LSNNPNRB.cjs"));
115
- var MarkdownPreview = (0, import_react2.lazy)(() => import("./MarkdownPreview-G34HSQEB.cjs"));
114
+ var MarkdownContainer = (0, import_react2.lazy)(() => import("./MarkdownContainer-NG4H6AZJ.cjs"));
115
+ var MarkdownPreview = (0, import_react2.lazy)(() => import("./MarkdownPreview-GCJJCXY6.cjs"));
116
116
  var react_surface_default = () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.ReactSurface, [
117
117
  (0, import_app_framework.createSurface)({
118
118
  id: `${import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN}/document`,
@@ -121,15 +121,15 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
121
121
  "section",
122
122
  "tabpanel"
123
123
  ],
124
- filter: (data) => (0, import_echo_schema.isInstanceOf)(import_chunk_RQS4KBMG.DocumentType, data.subject) && !data.variant,
124
+ filter: (data) => import_echo.Obj.instanceOf(import_chunk_3HHV4MM6.DocumentType, data.subject) && !data.variant,
125
125
  component: ({ data, role }) => {
126
126
  const selectionManager = (0, import_app_framework.useCapability)(import_plugin_attention.AttentionCapabilities.Selection);
127
127
  const settingsStore = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore);
128
128
  const settings = settingsStore.getStore(import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN).value;
129
129
  const { state, editorState, getViewMode, setViewMode } = (0, import_app_framework.useCapability)(import_chunk_IFYSBQE5.MarkdownCapabilities.State);
130
- const viewMode = getViewMode((0, import_echo.fullyQualifiedId)(data.subject));
130
+ const viewMode = getViewMode((0, import_echo2.fullyQualifiedId)(data.subject));
131
131
  return /* @__PURE__ */ import_react.default.createElement(MarkdownContainer, {
132
- id: (0, import_echo.fullyQualifiedId)(data.subject),
132
+ id: (0, import_echo2.fullyQualifiedId)(data.subject),
133
133
  object: data.subject,
134
134
  role,
135
135
  settings,
@@ -148,7 +148,7 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
148
148
  "section",
149
149
  "tabpanel"
150
150
  ],
151
- filter: (data) => typeof data.id === "string" && (0, import_echo_schema.isInstanceOf)(import_schema.DataType.Text, data.subject),
151
+ filter: (data) => typeof data.id === "string" && import_echo.Obj.instanceOf(import_schema.DataType.Text, data.subject),
152
152
  component: ({ data, role }) => {
153
153
  const selectionManager = (0, import_app_framework.useCapability)(import_plugin_attention.AttentionCapabilities.Selection);
154
154
  const settingsStore = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore);
@@ -173,7 +173,7 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
173
173
  "article",
174
174
  "section"
175
175
  ],
176
- filter: (data) => (0, import_chunk_RQS4KBMG.isEditorModel)(data.subject),
176
+ filter: (data) => (0, import_chunk_3HHV4MM6.isEditorModel)(data.subject),
177
177
  component: ({ data, role }) => {
178
178
  const selectionManager = (0, import_app_framework.useCapability)(import_plugin_attention.AttentionCapabilities.Selection);
179
179
  const settingsStore = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore);
@@ -203,11 +203,11 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
203
203
  (0, import_app_framework.createSurface)({
204
204
  id: `${import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN}/preview`,
205
205
  role: "popover",
206
- filter: (data) => (0, import_echo_schema.isInstanceOf)(import_chunk_RQS4KBMG.DocumentType, data.subject) || (0, import_echo_schema.isInstanceOf)(import_schema.DataType.Text, data.subject),
206
+ filter: (data) => import_echo.Obj.instanceOf(import_chunk_3HHV4MM6.DocumentType, data.subject) || import_echo.Obj.instanceOf(import_schema.DataType.Text, data.subject),
207
207
  component: ({ data, role }) => /* @__PURE__ */ import_react.default.createElement(MarkdownPreview, {
208
208
  ...data,
209
209
  role
210
210
  })
211
211
  })
212
212
  ]);
213
- //# sourceMappingURL=react-surface-WJZTEBYO.cjs.map
213
+ //# sourceMappingURL=react-surface-5RKEWAXS.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/index.ts", "../../../src/components/MarkdownSettings/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 { Obj } from '@dxos/echo';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { DataType } from '@dxos/schema';\n\nimport { MarkdownCapabilities } from './capabilities';\nimport { MarkdownContainer, MarkdownSettings, MarkdownPreview } 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 Obj.instanceOf(DocumentType, data.subject) && !data.variant,\n component: ({ data, role }) => {\n const selectionManager = useCapability(AttentionCapabilities.Selection);\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 const viewMode = getViewMode(fullyQualifiedId(data.subject));\n\n return (\n <MarkdownContainer\n id={fullyQualifiedId(data.subject)}\n object={data.subject}\n role={role}\n settings={settings}\n selectionManager={selectionManager}\n extensionProviders={state.extensionProviders}\n viewMode={viewMode}\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: DataType.Text } =>\n typeof data.id === 'string' && Obj.instanceOf(DataType.Text, data.subject),\n component: ({ data, role }) => {\n const selectionManager = useCapability(AttentionCapabilities.Selection);\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 selectionManager={selectionManager}\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 selectionManager = useCapability(AttentionCapabilities.Selection);\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 selectionManager={selectionManager}\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 createSurface({\n id: `${MARKDOWN_PLUGIN}/preview`,\n role: 'popover',\n filter: (data): data is { subject: DocumentType | DataType.Text } =>\n Obj.instanceOf(DocumentType, data.subject) || Obj.instanceOf(DataType.Text, data.subject),\n component: ({ data, role }) => <MarkdownPreview {...data} role={role} />,\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'));\nexport const MarkdownPreview = lazy(() => import('./MarkdownPreview'));\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAkB;AAElB,2BAAwE;AACxE,kBAAoB;AACpB,2BAA8B;AAC9B,8BAAsC;AACtC,IAAAA,eAAiC;AACjC,oBAAyB;ACPzB,IAAAC,gBAAqB;;ACArB,IAAAA,gBAAkB;AAElB,sBAA8C;AAC9C,6BAA6F;AAC7F,2BAA6D;AAKtD,IAAMC,mBAAmB,CAAC,EAAEC,SAAQ,MAAuC;;;AAChF,UAAM,EAAEC,EAAC,QAAKC,gCAAeC,qCAAAA;AAG7B,WACE,8BAAAC,QAAA,cAACC,8CAAAA,MACC,8BAAAD,QAAA,cAACE,0CAAAA;MAAoBC,OAAON,EAAE,yBAAA;OAC5B,8BAAAG,QAAA,cAACI,uBAAOC,MAAI;MACVC,OAAOV,SAASW;MAChBC,eAAe,CAACF,UAAAA;AACdV,iBAASW,kBAAkBD;MAC7B;OAEA,8BAAAN,QAAA,cAACI,uBAAOK,eAAa,IAAA,GACrB,8BAAAT,QAAA,cAACI,uBAAOM,QAAM,MACZ,8BAAAV,QAAA,cAACI,uBAAOO,SAAO,MACb,8BAAAX,QAAA,cAACI,uBAAOQ,UAAQ,MACbC,uCAAgBC,IAAI,CAACC,SACpB,8BAAAf,QAAA,cAACI,uBAAOY,QAAM;MAACC,KAAKF;MAAMT,OAAOS;OAC9BlB,EAAE,GAAGkB,IAAAA,eAAmB;MAAEG,IAAI;IAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAS/D,8BAAAlB,QAAA,cAACE,0CAAAA;MAAoBC,OAAON,EAAE,yBAAA;OAC5B,8BAAAG,QAAA,cAACI,uBAAOC,MAAI;MACVC,OAAOV,SAASuB,mBAAmB;MACnCX,eAAe,CAACF,UAAAA;AACdV,iBAASuB,kBAAkBb;MAC7B;OAEA,8BAAAN,QAAA,cAACI,uBAAOK,eAAa;MAACW,aAAavB,EAAE,sCAAA;QACrC,8BAAAG,QAAA,cAACI,uBAAOM,QAAM,MACZ,8BAAAV,QAAA,cAACI,uBAAOO,SAAO,MACb,8BAAAX,QAAA,cAACI,uBAAOQ,UAAQ,MACbS,wCAAiBP,IAAI,CAACC,SACrB,8BAAAf,QAAA,cAACI,uBAAOY,QAAM;MAACC,KAAKF;MAAMT,OAAOS;OAC9BlB,EAAE,8BAA8BkB,IAAAA,QAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAS3D,8BAAAf,QAAA,cAACE,0CAAAA;MAAoBC,OAAON,EAAE,wBAAA;OAC5B,8BAAAG,QAAA,cAACsB,sBAAMC,QAAM;MAACC,SAAS5B,SAAS6B;MAASC,iBAAiB,CAACF,YAAa5B,SAAS6B,UAAU,CAAC,CAACD;SAG/F,8BAAAxB,QAAA,cAACE,0CAAAA;MAAoBC,OAAON,EAAE,kCAAA;OAC5B,8BAAAG,QAAA,cAACsB,sBAAMC,QAAM;MACXC,SAAS5B,SAAS+B;MAClBD,iBAAiB,CAACF,YAAa5B,SAAS+B,mBAAmB,CAAC,CAACH;SAIjE,8BAAAxB,QAAA,cAACE,0CAAAA;MAAoBC,OAAON,EAAE,wBAAA;OAC5B,8BAAAG,QAAA,cAACsB,sBAAMC,QAAM;MAACC,SAAS5B,SAASgC;MAASF,iBAAiB,CAACF,YAAa5B,SAASgC,UAAU,CAAC,CAACJ;SAG/F,8BAAAxB,QAAA,cAACE,0CAAAA;MAAoBC,OAAON,EAAE,6BAAA;OAC5B,8BAAAG,QAAA,cAACsB,sBAAMC,QAAM;MACXC,SAAS5B,SAASiC;MAClBH,iBAAiB,CAACF,YAAa5B,SAASiC,eAAe,CAAC,CAACL;SAI7D,8BAAAxB,QAAA,cAACE,0CAAAA;MACCC,OAAON,EAAE,sBAAA;MACTiC,WACElC,SAASmC,QACP,8BAAA/B,QAAA,cAACsB,sBAAMjB,MAAI,MACT,8BAAAL,QAAA,cAACsB,sBAAMU,UAAQ;QACbC,MAAM;QACN3B,OAAOV,SAASsC;QAChBC,UAAU,CAAC,EAAEC,QAAQ,EAAE9B,MAAK,EAAE,MAAQV,SAASsC,aAAa5B;QAC5Dc,aAAavB,EAAE,4BAAA;YAGjBwC;OAGN,8BAAArC,QAAA,cAACsB,sBAAMC,QAAM;MAACC,SAAS5B,SAASmC;MAAOL,iBAAiB,CAACF,YAAa5B,SAASmC,QAAQ,CAAC,CAACP;;;;;AAIjG;ADhGO,IAAMc,wBAAoBC,oBAAK,MAAM,OAAO,kCAAA,CAAA;AAC5C,IAAMC,sBAAkBD,oBAAK,MAAM,OAAO,gCAAA,CAAA;ADSjD,IAAA,wBAAe,UACbE,kCAAYC,kCAAaC,cAAc;MACrCC,oCAAc;IACZC,IAAI,GAAG9C,qCAAAA;IACP+C,MAAM;MAAC;MAAW;MAAW;;IAC7BC,QAAQ,CAACC,SACPC,gBAAIC,WAAWC,oCAAcH,KAAKI,OAAO,KAAK,CAACJ,KAAKK;IACtDC,WAAW,CAAC,EAAEN,MAAMF,KAAI,MAAE;AACxB,YAAMS,uBAAmBC,oCAAcC,8CAAsBC,SAAS;AACtE,YAAMC,oBAAgBH,oCAAcd,kCAAakB,aAAa;AAC9D,YAAMhE,WAAW+D,cAAcE,SAAgC9D,qCAAAA,EAAkBO;AACjF,YAAM,EAAEwD,OAAOC,aAAaC,aAAaC,YAAW,QAAKT,oCAAcU,2CAAqBC,KAAK;AACjG,YAAMC,WAAWJ,gBAAYK,+BAAiBrB,KAAKI,OAAO,CAAA;AAE1D,aACEpD,6BAAAA,QAAA,cAACsC,mBAAAA;QACCO,QAAIwB,+BAAiBrB,KAAKI,OAAO;QACjCkB,QAAQtB,KAAKI;QACbN;QACAlD;QACA2D;QACAgB,oBAAoBT,MAAMS;QAC1BH;QACAI,kBAAkBT;QAClBU,kBAAkBR;;IAGxB;EACF,CAAA;MACArB,oCAAc;IACZC,IAAI,GAAG9C,qCAAAA;IACP+C,MAAM;MAAC;MAAW;MAAW;;IAC7BC,QAAQ,CAACC,SACP,OAAOA,KAAKH,OAAO,YAAYI,gBAAIC,WAAWwB,uBAASC,MAAM3B,KAAKI,OAAO;IAC3EE,WAAW,CAAC,EAAEN,MAAMF,KAAI,MAAE;AACxB,YAAMS,uBAAmBC,oCAAcC,8CAAsBC,SAAS;AACtE,YAAMC,oBAAgBH,oCAAcd,kCAAakB,aAAa;AAC9D,YAAMhE,WAAW+D,cAAcE,SAAgC9D,qCAAAA,EAAkBO;AACjF,YAAM,EAAEwD,OAAOC,aAAaC,aAAaC,YAAW,QAAKT,oCAAcU,2CAAqBC,KAAK;AAEjG,aACEnE,6BAAAA,QAAA,cAACsC,mBAAAA;QACCO,IAAIG,KAAKH;QACTyB,QAAQtB,KAAKI;QACbN;QACAlD;QACA2D;QACAgB,oBAAoBT,MAAMS;QAC1BH,UAAUJ,YAAYhB,KAAKH,EAAE;QAC7B2B,kBAAkBT;QAClBU,kBAAkBR;;IAGxB;EACF,CAAA;MACArB,oCAAc;IACZC,IAAI,GAAG9C,qCAAAA;IACP+C,MAAM;MAAC;MAAW;;IAClBC,QAAQ,CAACC,aAA4D4B,qCAAc5B,KAAKI,OAAO;IAC/FE,WAAW,CAAC,EAAEN,MAAMF,KAAI,MAAE;AACxB,YAAMS,uBAAmBC,oCAAcC,8CAAsBC,SAAS;AACtE,YAAMC,oBAAgBH,oCAAcd,kCAAakB,aAAa;AAC9D,YAAMhE,WAAW+D,cAAcE,SAAgC9D,qCAAAA,EAAkBO;AACjF,YAAM,EAAEwD,OAAOC,aAAaC,aAAaC,YAAW,QAAKT,oCAAcU,2CAAqBC,KAAK;AAEjG,aACEnE,6BAAAA,QAAA,cAACsC,mBAAAA;QACCO,IAAIG,KAAKI,QAAQP;QACjByB,QAAQtB,KAAKI;QACbN;QACAlD;QACA2D;QACAgB,oBAAoBT,MAAMS;QAC1BH,UAAUJ,YAAYhB,KAAKI,QAAQP,EAAE;QACrC2B,kBAAkBT;QAClBU,kBAAkBR;;IAGxB;EACF,CAAA;MACArB,oCAAc;IACZC,IAAI,GAAG9C,qCAAAA;IACP+C,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKI,mBAAmBQ,sCAAiBZ,KAAKI,QAAQyB,WAAW9E;IACnEuD,WAAW,CAAC,EAAEN,MAAM,EAAEI,QAAO,EAAE,MAAOpD,6BAAAA,QAAA,cAACL,kBAAAA;MAAiBC,UAAUwD,QAAQ9C;;EAC5E,CAAA;MACAsC,oCAAc;IACZC,IAAI,GAAG9C,qCAAAA;IACP+C,MAAM;IACNC,QAAQ,CAACC,SACPC,gBAAIC,WAAWC,oCAAcH,KAAKI,OAAO,KAAKH,gBAAIC,WAAWwB,uBAASC,MAAM3B,KAAKI,OAAO;IAC1FE,WAAW,CAAC,EAAEN,MAAMF,KAAI,MAAO9C,6BAAAA,QAAA,cAACwC,iBAAAA;MAAiB,GAAGQ;MAAMF;;EAC5D,CAAA;CACD;",
6
+ "names": ["import_echo", "import_react", "MarkdownSettings", "settings", "t", "useTranslation", "MARKDOWN_PLUGIN", "React", "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", "MarkdownPreview", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "role", "filter", "data", "Obj", "instanceOf", "DocumentType", "subject", "variant", "component", "selectionManager", "useCapability", "AttentionCapabilities", "Selection", "settingsStore", "SettingsStore", "getStore", "state", "editorState", "getViewMode", "setViewMode", "MarkdownCapabilities", "State", "viewMode", "fullyQualifiedId", "object", "extensionProviders", "editorStateStore", "onViewModeChange", "DataType", "Text", "isEditorModel", "prefix"]
7
+ }
@@ -16,12 +16,12 @@ 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 settings_IRKU3WPM_exports = {};
20
- __export(settings_IRKU3WPM_exports, {
19
+ var settings_E3NUTXJ4_exports = {};
20
+ __export(settings_E3NUTXJ4_exports, {
21
21
  default: () => settings_default
22
22
  });
23
- module.exports = __toCommonJS(settings_IRKU3WPM_exports);
24
- var import_chunk_RQS4KBMG = require("./chunk-RQS4KBMG.cjs");
23
+ module.exports = __toCommonJS(settings_E3NUTXJ4_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
27
  var import_live_object = require("@dxos/live-object");
@@ -34,9 +34,9 @@ var settings_default = () => {
34
34
  experimental: false
35
35
  });
36
36
  return (0, import_app_framework.contributes)(import_app_framework.Capabilities.Settings, {
37
- schema: import_chunk_RQS4KBMG.MarkdownSettingsSchema,
38
- prefix: import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN,
37
+ prefix: import_chunk_ZU5OIHCY.meta.id,
38
+ schema: import_chunk_3HHV4MM6.MarkdownSettingsSchema,
39
39
  value: settings
40
40
  });
41
41
  };
42
- //# sourceMappingURL=settings-IRKU3WPM.cjs.map
42
+ //# sourceMappingURL=settings-E3NUTXJ4.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/settings.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { live } from '@dxos/live-object';\n\nimport { meta } from '../meta';\nimport { type MarkdownSettingsProps, MarkdownSettingsSchema } from '../types';\n\nexport default () => {\n const settings = live<MarkdownSettingsProps>({\n defaultViewMode: 'preview',\n toolbar: true,\n numberedHeadings: true,\n folding: true,\n experimental: false,\n });\n\n return contributes(Capabilities.Settings, {\n prefix: meta.id,\n schema: MarkdownSettingsSchema,\n value: settings,\n });\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA0C;AAC1C,yBAAqB;AAKrB,IAAA,mBAAe,MAAA;AACb,QAAMA,eAAWC,yBAA4B;IAC3CC,iBAAiB;IACjBC,SAAS;IACTC,kBAAkB;IAClBC,SAAS;IACTC,cAAc;EAChB,CAAA;AAEA,aAAOC,kCAAYC,kCAAaC,UAAU;IACxCC,QAAQC,2BAAKC;IACbC,QAAQC;IACRC,OAAOf;EACT,CAAA;AACF;",
6
+ "names": ["settings", "live", "defaultViewMode", "toolbar", "numberedHeadings", "folding", "experimental", "contributes", "Capabilities", "Settings", "prefix", "meta", "id", "schema", "MarkdownSettingsSchema", "value"]
7
+ }
@@ -18,15 +18,15 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var types_exports = {};
20
20
  __export(types_exports, {
21
- DocumentSchema: () => import_chunk_RQS4KBMG.DocumentSchema,
22
- DocumentType: () => import_chunk_RQS4KBMG.DocumentType,
23
- MarkdownAction: () => import_chunk_RQS4KBMG.MarkdownAction,
24
- MarkdownSettingsSchema: () => import_chunk_RQS4KBMG.MarkdownSettingsSchema,
25
- createDocument: () => import_chunk_RQS4KBMG.createDocument,
26
- isEditorModel: () => import_chunk_RQS4KBMG.isEditorModel
21
+ DocumentSchema: () => import_chunk_3HHV4MM6.DocumentSchema,
22
+ DocumentType: () => import_chunk_3HHV4MM6.DocumentType,
23
+ MarkdownAction: () => import_chunk_3HHV4MM6.MarkdownAction,
24
+ MarkdownSettingsSchema: () => import_chunk_3HHV4MM6.MarkdownSettingsSchema,
25
+ createDocument: () => import_chunk_3HHV4MM6.createDocument,
26
+ isEditorModel: () => import_chunk_3HHV4MM6.isEditorModel
27
27
  });
28
28
  module.exports = __toCommonJS(types_exports);
29
- var import_chunk_RQS4KBMG = require("../chunk-RQS4KBMG.cjs");
29
+ var import_chunk_3HHV4MM6 = require("../chunk-3HHV4MM6.cjs");
30
30
  var import_chunk_ZU5OIHCY = require("../chunk-ZU5OIHCY.cjs");
31
31
  // Annotate the CommonJS export names for ESM import in node:
32
32
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.cjs"],
4
- "sourcesContent": ["import {\n DocumentSchema,\n DocumentType,\n MarkdownAction,\n MarkdownSettingsSchema,\n createDocument,\n isEditorModel\n} from \"../chunk-RQS4KBMG.cjs\";\nimport \"../chunk-ZU5OIHCY.cjs\";\nexport {\n DocumentSchema,\n DocumentType,\n MarkdownAction,\n MarkdownSettingsSchema,\n createDocument,\n isEditorModel\n};\n//# sourceMappingURL=index.cjs.map\n"],
4
+ "sourcesContent": ["import {\n DocumentSchema,\n DocumentType,\n MarkdownAction,\n MarkdownSettingsSchema,\n createDocument,\n isEditorModel\n} from \"../chunk-3HHV4MM6.cjs\";\nimport \"../chunk-ZU5OIHCY.cjs\";\nexport {\n DocumentSchema,\n DocumentType,\n MarkdownAction,\n MarkdownSettingsSchema,\n createDocument,\n isEditorModel\n};\n//# sourceMappingURL=index.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAOO;AACP,4BAAO;",
6
6
  "names": []
7
7
  }
@@ -1,15 +1,15 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import "./chunk-EIUTPXGL.mjs";
2
+ import "./chunk-WANCCPU7.mjs";
3
3
  import {
4
4
  MarkdownCapabilities
5
5
  } from "./chunk-JXXDCSMW.mjs";
6
6
  import {
7
7
  getFallbackName,
8
8
  setFallbackName
9
- } from "./chunk-6RPARLIK.mjs";
9
+ } from "./chunk-K26TX5V4.mjs";
10
10
  import {
11
11
  DocumentType
12
- } from "./chunk-NCMPVEXO.mjs";
12
+ } from "./chunk-T2Y2BT53.mjs";
13
13
  import {
14
14
  MARKDOWN_PLUGIN
15
15
  } from "./chunk-RX63ZNML.mjs";
@@ -17,19 +17,22 @@ import {
17
17
  // packages/plugins/plugin-markdown/src/components/MarkdownContainer.tsx
18
18
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
19
19
  import { Rx } from "@effect-rx/rx-react";
20
- import React3, { useEffect as useEffect2, useMemo as useMemo4 } from "react";
21
- import { Capabilities, useAppGraph, useCapabilities as useCapabilities2 } from "@dxos/app-framework";
22
- import { isInstanceOf } from "@dxos/echo-schema";
20
+ import React3, { useCallback as useCallback2, useEffect as useEffect2, useMemo as useMemo4 } from "react";
21
+ import { Capabilities, useAppGraph, useCapabilities as useCapabilities2, usePluginManager } from "@dxos/app-framework";
22
+ import { Filter, Obj, Query } from "@dxos/echo";
23
+ import { SpaceCapabilities } from "@dxos/plugin-space";
23
24
  import { fullyQualifiedId as fullyQualifiedId2, getSpace as getSpace2 } from "@dxos/react-client/echo";
25
+ import { toLocalizedString as toLocalizedString2, useTranslation as useTranslation2 } from "@dxos/react-ui";
26
+ import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
24
27
  import { DataType } from "@dxos/schema";
25
28
 
26
29
  // packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx
27
30
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
28
- import React, { useMemo as useMemo2, useEffect, useCallback } from "react";
31
+ import React, { useMemo as useMemo2, useEffect, useCallback, forwardRef, useImperativeHandle, useRef } from "react";
29
32
  import { useDropzone } from "react-dropzone";
30
33
  import { invariant as invariant2 } from "@dxos/invariant";
31
- import { useThemeContext, useTranslation } from "@dxos/react-ui";
32
- import { EditorToolbar, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorSlots, editorGutter, processEditorPayload, stackItemContentEditorClassNames, useFormattingState, useTextEditor, useEditorToolbarState, addLink } from "@dxos/react-ui-editor";
34
+ import { toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
35
+ import { addLink, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorGutter, editorSlots, EditorToolbar, processEditorPayload, RefPopover, stackItemContentEditorClassNames, useEditorToolbarState, useFormattingState, useCommandMenu, useTextEditor, filterItems, coreSlashCommands, CommandMenu, linkSlashCommands } from "@dxos/react-ui-editor";
33
36
  import { StackItem } from "@dxos/react-ui-stack";
34
37
  import { isNotFalsy, isNonNullable } from "@dxos/util";
35
38
 
@@ -95,7 +98,59 @@ var useSelectCurrentThread = (editorView, documentId2) => {
95
98
 
96
99
  // packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx
97
100
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
98
- var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensionProviders, scrollPastEnd, toolbar, customActions, viewMode, editorStateStore, onFileUpload, onViewModeChange }) => {
101
+ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery, ...props }) => {
102
+ var _effect = _useSignals();
103
+ try {
104
+ const { t } = useTranslation();
105
+ const viewRef = useRef();
106
+ const getGroups = useCallback((trigger, query) => {
107
+ switch (trigger) {
108
+ case "@":
109
+ return onLinkQuery?.(query) ?? [];
110
+ case "/":
111
+ default:
112
+ return filterItems([
113
+ coreSlashCommands,
114
+ linkSlashCommands,
115
+ ...slashCommandGroups ?? []
116
+ ], (item) => query ? toLocalizedString(item.label, t).toLowerCase().includes(query.toLowerCase()) : true);
117
+ }
118
+ }, [
119
+ onLinkQuery,
120
+ slashCommandGroups
121
+ ]);
122
+ const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = useCommandMenu({
123
+ viewRef,
124
+ getGroups,
125
+ trigger: onLinkQuery ? [
126
+ "/",
127
+ "@"
128
+ ] : "/"
129
+ });
130
+ const extensions = useMemo2(() => [
131
+ _extensions,
132
+ commandMenu
133
+ ].filter(isNotFalsy), [
134
+ _extensions,
135
+ commandMenu
136
+ ]);
137
+ return /* @__PURE__ */ React.createElement(RefPopover, {
138
+ modal: false,
139
+ ...refPopoverProps
140
+ }, /* @__PURE__ */ React.createElement(MarkdownEditorImpl, {
141
+ ref: viewRef,
142
+ ...props,
143
+ extensions
144
+ }), /* @__PURE__ */ React.createElement(CommandMenu, {
145
+ groups: groupsRef.current,
146
+ currentItem,
147
+ onSelect
148
+ }));
149
+ } finally {
150
+ _effect.f();
151
+ }
152
+ };
153
+ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, extensions, extensionProviders, scrollPastEnd, toolbar, customActions, viewMode, editorStateStore, onFileUpload, onViewModeChange }, forwardedRef) => {
99
154
  var _effect = _useSignals();
100
155
  try {
101
156
  const { t } = useTranslation(MARKDOWN_PLUGIN);
@@ -160,6 +215,9 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
160
215
  extensions,
161
216
  providerExtensions
162
217
  ]);
218
+ useImperativeHandle(forwardedRef, () => editorView, [
219
+ editorView
220
+ ]);
163
221
  useTest(editorView);
164
222
  useSelectCurrentThread(editorView, id);
165
223
  const { acceptedFiles, getInputProps, open } = useDropzone({
@@ -201,7 +259,7 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
201
259
  const getView = useCallback(() => {
202
260
  invariant2(editorView, void 0, {
203
261
  F: __dxlog_file2,
204
- L: 165,
262
+ L: 216,
205
263
  S: void 0,
206
264
  A: [
207
265
  "editorView",
@@ -245,7 +303,7 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
245
303
  } finally {
246
304
  _effect.f();
247
305
  }
248
- };
306
+ });
249
307
  var useTest = (view) => {
250
308
  useEffect(() => {
251
309
  const composer = window.composer;
@@ -473,9 +531,10 @@ var renderRoot = (root, node) => {
473
531
  var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
474
532
  var _effect = _useSignals2();
475
533
  try {
534
+ const { t } = useTranslation2();
476
535
  const scrollPastEnd = role === "article";
477
- const doc = isInstanceOf(DocumentType, object) ? object : void 0;
478
- const text = isInstanceOf(DataType.Text, object) ? object : void 0;
536
+ const doc = Obj.instanceOf(DocumentType, object) ? object : void 0;
537
+ const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
479
538
  const extensions = useExtensions({
480
539
  document: doc,
481
540
  text,
@@ -485,6 +544,58 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
485
544
  viewMode,
486
545
  editorStateStore
487
546
  });
547
+ const manager = usePluginManager();
548
+ const resolve = useCallback2((typename) => manager.context.getCapabilities(Capabilities.Metadata).find(({ id: id2 }) => id2 === typename)?.metadata ?? {}, [
549
+ manager
550
+ ]);
551
+ const space = getSpace2(object);
552
+ const objectForms = useCapabilities2(SpaceCapabilities.ObjectForm);
553
+ const filter = useMemo4(() => Filter.or(...objectForms.map((form) => Filter.type(form.objectSchema))), [
554
+ objectForms
555
+ ]);
556
+ const onLinkQuery = useCallback2(async (query) => {
557
+ const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
558
+ const results = await space?.db.query(Query.select(filter)).run();
559
+ const getLabel = (object2) => {
560
+ const type = Obj.getTypename(object2);
561
+ const metadata = resolve(type);
562
+ return metadata.label?.(object2) || object2.name || [
563
+ "object name placeholder",
564
+ {
565
+ ns: type,
566
+ default: "New object"
567
+ }
568
+ ];
569
+ };
570
+ const items = results?.objects.filter((object2) => toLocalizedString2(getLabel(object2), t).toLowerCase().includes(name)).map((object2) => {
571
+ const metadata = resolve(Obj.getTypename(object2));
572
+ const label = toLocalizedString2(getLabel(object2), t);
573
+ return {
574
+ id: object2.id,
575
+ label,
576
+ icon: metadata.icon,
577
+ onSelect: (view, head) => {
578
+ const link = `[${label}][${Obj.getDXN(object2)}]`;
579
+ if (query?.startsWith("@")) {
580
+ insertAtLineStart(view, head, `!${link}
581
+ `);
582
+ } else {
583
+ insertAtCursor(view, head, `${link} `);
584
+ }
585
+ }
586
+ };
587
+ }) ?? [];
588
+ return [
589
+ {
590
+ id: "echo",
591
+ items
592
+ }
593
+ ];
594
+ }, [
595
+ filter,
596
+ resolve,
597
+ space
598
+ ]);
488
599
  if (doc) {
489
600
  return /* @__PURE__ */ React3.createElement(DocumentEditor, {
490
601
  id: fullyQualifiedId2(object),
@@ -494,7 +605,8 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
494
605
  viewMode,
495
606
  settings,
496
607
  scrollPastEnd,
497
- onViewModeChange
608
+ onViewModeChange,
609
+ onLinkQuery: space ? onLinkQuery : void 0
498
610
  });
499
611
  } else if (text) {
500
612
  return /* @__PURE__ */ React3.createElement(MarkdownEditor, {
@@ -506,7 +618,8 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
506
618
  toolbar: settings.toolbar,
507
619
  inputMode: settings.editorInputMode,
508
620
  scrollPastEnd,
509
- onViewModeChange
621
+ onViewModeChange,
622
+ onLinkQuery: space ? onLinkQuery : void 0
510
623
  });
511
624
  } else {
512
625
  return /* @__PURE__ */ React3.createElement(MarkdownEditor, {
@@ -518,7 +631,8 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
518
631
  toolbar: settings.toolbar,
519
632
  inputMode: settings.editorInputMode,
520
633
  scrollPastEnd,
521
- onViewModeChange
634
+ onViewModeChange,
635
+ onLinkQuery: space ? onLinkQuery : void 0
522
636
  });
523
637
  }
524
638
  } finally {
@@ -586,4 +700,4 @@ export {
586
700
  DocumentEditor,
587
701
  MarkdownContainer_default as default
588
702
  };
589
- //# sourceMappingURL=MarkdownContainer-UZSLXMWO.mjs.map
703
+ //# sourceMappingURL=MarkdownContainer-DZPXCA6J.mjs.map
@@ -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 } from 'react';\n\nimport { Capabilities, useAppGraph, useCapabilities, usePluginManager } from '@dxos/app-framework';\nimport { Filter, Obj, Query } from '@dxos/echo';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type SelectionManager } from '@dxos/react-ui-attention';\nimport { type CommandMenuGroup, type CommandMenuItem, insertAtCursor, insertAtLineStart } 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 extensions = useExtensions({ document: doc, text, id, settings, selectionManager, viewMode, editorStateStore });\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 if (doc) {\n return (\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 );\n } else if (text) {\n return (\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 } else {\n // TODO(burdon): Normalize with above.\n return (\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};\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, { useMemo, useEffect, useCallback, forwardRef, 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 addLink,\n createBasicExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n dropFile,\n editorGutter,\n editorSlots,\n EditorToolbar,\n processEditorPayload,\n RefPopover,\n stackItemContentEditorClassNames,\n type DNDOptions,\n type EditorInputMode,\n type EditorSelectionState,\n type EditorStateStore,\n type EditorToolbarActionGraphProps,\n type EditorViewMode,\n type CommandMenuGroup,\n type UseTextEditorProps,\n useEditorToolbarState,\n useFormattingState,\n useCommandMenu,\n useTextEditor,\n filterItems,\n coreSlashCommands,\n CommandMenu,\n linkSlashCommands,\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 *\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 const getGroups = 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 const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = useCommandMenu({\n viewRef,\n getGroups,\n trigger: onLinkQuery ? ['/', '@'] : '/',\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 extensions,\n extensionProviders,\n scrollPastEnd,\n toolbar,\n customActions,\n viewMode,\n editorStateStore,\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} 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};\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}: 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 dispatch,\n // query,\n }),\n [\n document,\n id,\n text,\n viewMode,\n dispatch,\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}: 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(),\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": ["Rx", "React", "useCallback", "useEffect", "useMemo", "Capabilities", "useAppGraph", "useCapabilities", "usePluginManager", "Filter", "Obj", "Query", "SpaceCapabilities", "fullyQualifiedId", "getSpace", "toLocalizedString", "useTranslation", "insertAtCursor", "insertAtLineStart", "DataType", "React", "useMemo", "useEffect", "useCallback", "forwardRef", "useImperativeHandle", "useRef", "useDropzone", "invariant", "toLocalizedString", "useThemeContext", "useTranslation", "addLink", "createBasicExtensions", "createMarkdownExtensions", "createThemeExtensions", "dropFile", "editorGutter", "editorSlots", "EditorToolbar", "processEditorPayload", "RefPopover", "stackItemContentEditorClassNames", "useEditorToolbarState", "useFormattingState", "useCommandMenu", "useTextEditor", "filterItems", "coreSlashCommands", "CommandMenu", "linkSlashCommands", "StackItem", "isNotFalsy", "isNonNullable", "EditorView", "Schema", "useMemo", "createResolver", "LayoutAction", "useIntentResolver", "invariant", "Cursor", "setSelection", "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", "getGroups", "useCallback", "trigger", "query", "filterItems", "coreSlashCommands", "linkSlashCommands", "item", "toLocalizedString", "label", "toLowerCase", "includes", "commandMenu", "groupsRef", "currentItem", "onSelect", "refPopoverProps", "useCommandMenu", "useMemo", "filter", "isNotFalsy", "RefPopover", "modal", "MarkdownEditorImpl", "ref", "CommandMenu", "groups", "current", "forwardRef", "id", "role", "initialValue", "extensionProviders", "scrollPastEnd", "toolbar", "customActions", "viewMode", "editorStateStore", "onFileUpload", "onViewModeChange", "forwardedRef", "MARKDOWN_PLUGIN", "themeMode", "useThemeContext", "toolbarState", "useEditorToolbarState", "formattingObserver", "useFormattingState", "scrollTo", "selection", "getState", "providerExtensions", "flatMap", "provider", "isNonNullable", "handleDrop", "view", "files", "file", "info", "undefined", "processEditorPayload", "type", "data", "url", "parentRef", "editorView", "focusAttributes", "useTextEditor", "createBasicExtensions", "readOnly", "placeholder", "createMarkdownExtensions", "createThemeExtensions", "syntaxHighlighting", "slots", "editorSlots", "editorGutter", "dropFile", "onDrop", "moveToEndOfLine", "useImperativeHandle", "useTest", "useSelectCurrentThread", "acceptedFiles", "getInputProps", "open", "useDropzone", "multiple", "noDrag", "accept", "useEffect", "length", "requestAnimationFrame", "f", "File", "name", "lastModified", "addLink", "image", "getView", "invariant", "handleViewModeChange", "mode", "handleImageUpload", "StackItem", "Content", "EditorToolbar", "attendableId", "state", "input", "div", "data-testid", "data-toolbar", "className", "stackItemContentEditorClassNames", "data-popover-collision-boundary", "composer", "window", "React", "useMemo", "createRoot", "createIntent", "LayoutAction", "useCapabilities", "useIntentDispatcher", "invariant", "createDocAccessor", "fullyQualifiedId", "getSpace", "useIdentity", "Icon", "ThemeProvider", "InputModeExtensions", "createDataExtensions", "autocomplete", "decorateMarkdown", "folding", "formattingKeymap", "linkTooltip", "listener", "preview", "selectionState", "typewriter", "EditorView", "documentId", "Cursor", "defaultTx", "isNotFalsy", "useExtensions", "document", "id", "text", "settings", "selectionManager", "viewMode", "editorStateStore", "dispatchPromise", "dispatch", "useIntentDispatcher", "identity", "useIdentity", "space", "getSpace", "baseExtensions", "useMemo", "createBaseExtensions", "editorInputMode", "folding", "numberedHeadings", "debug", "typewriter", "extensionProviders", "useCapabilities", "MarkdownCapabilities", "Extensions", "pluginExtensions", "flat", "reduce", "acc", "provider", "extension", "push", "createDataExtensions", "content", "target", "createDocAccessor", "selectionState", "listener", "onChange", "setFallbackName", "filter", "isNotFalsy", "query", "extensions", "selectionChange", "InputModeExtensions", "formattingKeymap", "decorateMarkdown", "selectionChangeDelay", "from", "undefined", "renderLinkButton", "createLinkRenderer", "createIntent", "LayoutAction", "Open", "part", "subject", "options", "pivotId", "fullyQualifiedId", "linkTooltip", "renderLinkTooltip", "preview", "autocomplete", "onSearch", "objects", "map", "object", "name", "length", "label", "apply", "items", "split", "EditorView", "updateListener", "of", "update", "selectionSet", "state", "facet", "documentId", "cursorConverter", "Cursor", "converter", "selection", "ranges", "range", "toCursor", "to", "updateMultiRange", "style", "hover", "icon", "onSelectObject", "el", "url", "isInternal", "startsWith", "window", "location", "origin", "onClick", "qualifiedId", "at", "invariant", "href", "rel", "renderRoot", "React", "a", "className", "Icon", "size", "classNames", "web", "URL", "root", "node", "createRoot", "render", "ThemeProvider", "tx", "defaultTx", "MarkdownContainer", "id", "role", "object", "settings", "selectionManager", "viewMode", "editorStateStore", "onViewModeChange", "t", "useTranslation", "scrollPastEnd", "doc", "Obj", "instanceOf", "DocumentType", "undefined", "text", "DataType", "Text", "extensions", "useExtensions", "document", "manager", "usePluginManager", "resolve", "useCallback", "typename", "context", "getCapabilities", "Capabilities", "Metadata", "find", "metadata", "space", "getSpace", "objectForms", "useCapabilities", "SpaceCapabilities", "ObjectForm", "filter", "useMemo", "Filter", "or", "map", "form", "type", "objectSchema", "onLinkQuery", "query", "name", "startsWith", "slice", "toLowerCase", "results", "db", "Query", "select", "run", "getLabel", "getTypename", "label", "ns", "default", "items", "objects", "toLocalizedString", "includes", "icon", "onSelect", "view", "head", "link", "getDXN", "insertAtLineStart", "insertAtCursor", "React", "DocumentEditor", "fullyQualifiedId", "MarkdownEditor", "initialValue", "content", "toolbar", "inputMode", "editorInputMode", "props", "useEffect", "fallbackName", "target", "getFallbackName", "upload", "FileUploader", "handleFileUpload", "file", "graph", "useAppGraph", "customActions", "Rx", "make", "get", "actions", "nodes", "action", "properties", "disposition", "edges", "node", "source", "onFileUpload"]
7
+ }