@dxos/plugin-markdown 0.8.2-staging.7ac8446 → 0.8.2

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 (227) hide show
  1. package/dist/lib/browser/MarkdownContainer-5IEINNQB.mjs +588 -0
  2. package/dist/lib/browser/MarkdownContainer-5IEINNQB.mjs.map +7 -0
  3. package/dist/lib/browser/MarkdownPreview-YW5CS3ID.mjs +87 -0
  4. package/dist/lib/browser/MarkdownPreview-YW5CS3ID.mjs.map +7 -0
  5. package/dist/lib/browser/anchor-sort-VS4OZVPP.mjs +32 -0
  6. package/dist/lib/browser/anchor-sort-VS4OZVPP.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-NOXI4IQ5.mjs → app-graph-serializer-V6RLEHVY.mjs} +5 -6
  8. package/dist/lib/browser/app-graph-serializer-V6RLEHVY.mjs.map +7 -0
  9. package/dist/lib/browser/{artifact-definition-CE6J6NY4.mjs → artifact-definition-5NAODQLG.mjs} +65 -17
  10. package/dist/lib/browser/artifact-definition-5NAODQLG.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-3ULJ4FIJ.mjs → chunk-77NGW7EO.mjs} +12 -26
  12. package/dist/lib/browser/chunk-77NGW7EO.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-ACAID3XF.mjs +20 -0
  14. package/dist/lib/browser/chunk-ACAID3XF.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-QXDKFACU.mjs → chunk-C5RABVIX.mjs} +6 -5
  16. package/dist/lib/browser/chunk-C5RABVIX.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-ECSM56YC.mjs +80 -0
  18. package/dist/lib/browser/chunk-ECSM56YC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-NAGMSX77.mjs → chunk-QVJETNGS.mjs} +2 -2
  20. package/dist/lib/{node-esm/chunk-ETXPC5VP.mjs.map → browser/chunk-QVJETNGS.mjs.map} +1 -1
  21. package/dist/lib/browser/index.mjs +34 -18
  22. package/dist/lib/browser/index.mjs.map +3 -3
  23. package/dist/lib/browser/intent-resolver-4GDYST4Y.mjs +65 -0
  24. package/dist/lib/browser/intent-resolver-4GDYST4Y.mjs.map +7 -0
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/react-surface-QE4SKXBT.mjs +200 -0
  27. package/dist/lib/browser/react-surface-QE4SKXBT.mjs.map +7 -0
  28. package/dist/lib/browser/{settings-GCSS3Y4Z.mjs → settings-W5CK4PXP.mjs} +4 -4
  29. package/dist/lib/browser/settings-W5CK4PXP.mjs.map +7 -0
  30. package/dist/lib/browser/{state-O7P5JDIH.mjs → state-KI6PJ6DT.mjs} +3 -3
  31. package/dist/lib/browser/state-KI6PJ6DT.mjs.map +7 -0
  32. package/dist/lib/browser/types/index.mjs +3 -1
  33. package/dist/lib/node/MarkdownContainer-LSNNPNRB.cjs +601 -0
  34. package/dist/lib/node/MarkdownContainer-LSNNPNRB.cjs.map +7 -0
  35. package/dist/lib/node/MarkdownPreview-G34HSQEB.cjs +110 -0
  36. package/dist/lib/node/MarkdownPreview-G34HSQEB.cjs.map +7 -0
  37. package/dist/lib/node/{thread-42R57L4K.cjs → anchor-sort-NHVF23EU.cjs} +15 -20
  38. package/dist/lib/node/anchor-sort-NHVF23EU.cjs.map +7 -0
  39. package/dist/lib/node/{app-graph-serializer-HKK3SEDN.cjs → app-graph-serializer-CLALIYN3.cjs} +10 -11
  40. package/dist/lib/node/app-graph-serializer-CLALIYN3.cjs.map +7 -0
  41. package/dist/lib/node/{artifact-definition-XGADFWCQ.cjs → artifact-definition-VEAHK7BX.cjs} +68 -21
  42. package/dist/lib/node/artifact-definition-VEAHK7BX.cjs.map +7 -0
  43. package/dist/lib/node/chunk-C4HR7UXE.cjs +58 -0
  44. package/dist/lib/node/chunk-C4HR7UXE.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-7QVONRSI.cjs → chunk-G7RBJX22.cjs} +13 -41
  46. package/dist/lib/node/chunk-G7RBJX22.cjs.map +7 -0
  47. package/dist/lib/node/{chunk-DZXTXSXX.cjs → chunk-IFYSBQE5.cjs} +5 -5
  48. package/dist/lib/node/{chunk-DZXTXSXX.cjs.map → chunk-IFYSBQE5.cjs.map} +1 -1
  49. package/dist/lib/node/{chunk-UEXGNGSS.cjs → chunk-RQS4KBMG.cjs} +45 -39
  50. package/dist/lib/node/chunk-RQS4KBMG.cjs.map +7 -0
  51. package/dist/lib/node/{chunk-H5MYVP6F.cjs → chunk-ZDTL47I7.cjs} +9 -8
  52. package/dist/lib/node/chunk-ZDTL47I7.cjs.map +7 -0
  53. package/dist/lib/node/index.cjs +43 -28
  54. package/dist/lib/node/index.cjs.map +3 -3
  55. package/dist/lib/node/intent-resolver-AUZVK3NZ.cjs +78 -0
  56. package/dist/lib/node/intent-resolver-AUZVK3NZ.cjs.map +7 -0
  57. package/dist/lib/node/meta.json +1 -1
  58. package/dist/lib/node/react-surface-WJZTEBYO.cjs +213 -0
  59. package/dist/lib/node/react-surface-WJZTEBYO.cjs.map +7 -0
  60. package/dist/lib/node/{settings-S2ISUVIH.cjs → settings-IRKU3WPM.cjs} +7 -7
  61. package/dist/lib/node/settings-IRKU3WPM.cjs.map +7 -0
  62. package/dist/lib/node/{state-L44SG3ZM.cjs → state-KKDRAG7X.cjs} +7 -7
  63. package/dist/lib/node/state-KKDRAG7X.cjs.map +7 -0
  64. package/dist/lib/node/types/index.cjs +8 -6
  65. package/dist/lib/node/types/index.cjs.map +2 -2
  66. package/dist/lib/node-esm/MarkdownContainer-UZSLXMWO.mjs +589 -0
  67. package/dist/lib/node-esm/MarkdownContainer-UZSLXMWO.mjs.map +7 -0
  68. package/dist/lib/node-esm/MarkdownPreview-TCV7BI32.mjs +88 -0
  69. package/dist/lib/node-esm/MarkdownPreview-TCV7BI32.mjs.map +7 -0
  70. package/dist/lib/node-esm/anchor-sort-G2HLCYFK.mjs +33 -0
  71. package/dist/lib/node-esm/anchor-sort-G2HLCYFK.mjs.map +7 -0
  72. package/dist/lib/node-esm/{app-graph-serializer-QQ2CTHOQ.mjs → app-graph-serializer-C3RNTQGM.mjs} +5 -6
  73. package/dist/lib/node-esm/app-graph-serializer-C3RNTQGM.mjs.map +7 -0
  74. package/dist/lib/node-esm/{artifact-definition-WRG5ZRN5.mjs → artifact-definition-7TIJW2CO.mjs} +65 -17
  75. package/dist/lib/node-esm/artifact-definition-7TIJW2CO.mjs.map +7 -0
  76. package/dist/lib/node-esm/{chunk-F6UHVLH7.mjs → chunk-6RPARLIK.mjs} +12 -26
  77. package/dist/lib/node-esm/chunk-6RPARLIK.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-EIUTPXGL.mjs +22 -0
  79. package/dist/lib/node-esm/chunk-EIUTPXGL.mjs.map +7 -0
  80. package/dist/lib/node-esm/{chunk-ETXPC5VP.mjs → chunk-JXXDCSMW.mjs} +2 -2
  81. package/dist/lib/{browser/chunk-NAGMSX77.mjs.map → node-esm/chunk-JXXDCSMW.mjs.map} +1 -1
  82. package/dist/lib/node-esm/chunk-NCMPVEXO.mjs +81 -0
  83. package/dist/lib/node-esm/chunk-NCMPVEXO.mjs.map +7 -0
  84. package/dist/lib/node-esm/{chunk-JAVD67QP.mjs → chunk-TCFJNUAE.mjs} +6 -5
  85. package/dist/lib/node-esm/chunk-TCFJNUAE.mjs.map +7 -0
  86. package/dist/lib/node-esm/index.mjs +34 -18
  87. package/dist/lib/node-esm/index.mjs.map +3 -3
  88. package/dist/lib/node-esm/intent-resolver-FTNXUNI2.mjs +66 -0
  89. package/dist/lib/node-esm/intent-resolver-FTNXUNI2.mjs.map +7 -0
  90. package/dist/lib/node-esm/meta.json +1 -1
  91. package/dist/lib/node-esm/react-surface-XNM3YDFB.mjs +201 -0
  92. package/dist/lib/node-esm/react-surface-XNM3YDFB.mjs.map +7 -0
  93. package/dist/lib/node-esm/{settings-ZDIFTK4N.mjs → settings-MK7D7LHQ.mjs} +4 -4
  94. package/dist/lib/node-esm/settings-MK7D7LHQ.mjs.map +7 -0
  95. package/dist/lib/node-esm/{state-DWPOKLEY.mjs → state-LLGVRYKL.mjs} +3 -3
  96. package/dist/lib/node-esm/state-LLGVRYKL.mjs.map +7 -0
  97. package/dist/lib/node-esm/types/index.mjs +3 -1
  98. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/anchor-sort.d.ts +6 -0
  100. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/app-graph-serializer.d.ts +2 -2
  102. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/index.d.ts +7 -7
  105. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  107. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/state.d.ts +2 -2
  110. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  111. package/dist/types/src/components/MarkdownContainer.d.ts +5 -3
  112. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  113. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +24 -0
  114. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -0
  115. package/dist/types/src/components/{MarkdownEditor.stories.d.ts → MarkdownEditor/MarkdownEditor.stories.d.ts} +3 -3
  116. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -0
  117. package/dist/types/src/components/MarkdownEditor/index.d.ts +2 -0
  118. package/dist/types/src/components/MarkdownEditor/index.d.ts.map +1 -0
  119. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +6 -0
  120. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +1 -0
  121. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +23 -0
  122. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +1 -0
  123. package/dist/types/src/components/MarkdownPreview/index.d.ts +4 -0
  124. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +1 -0
  125. package/dist/types/src/components/{MarkdownSettings.d.ts → MarkdownSettings/MarkdownSettings.d.ts} +1 -1
  126. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -0
  127. package/dist/types/src/components/MarkdownSettings/index.d.ts +2 -0
  128. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -0
  129. package/dist/types/src/components/Suggestions.stories.d.ts +12 -0
  130. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -0
  131. package/dist/types/src/components/Toolbar.stories.d.ts +2 -2
  132. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/index.d.ts +2 -1
  134. package/dist/types/src/components/index.d.ts.map +1 -1
  135. package/dist/types/src/extensions.d.ts +8 -5
  136. package/dist/types/src/extensions.d.ts.map +1 -1
  137. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  138. package/dist/types/src/translations.d.ts +4 -42
  139. package/dist/types/src/translations.d.ts.map +1 -1
  140. package/dist/types/src/types/schema.d.ts +29 -129
  141. package/dist/types/src/types/schema.d.ts.map +1 -1
  142. package/dist/types/src/types/types.d.ts +40 -88
  143. package/dist/types/src/types/types.d.ts.map +1 -1
  144. package/dist/types/src/util.d.ts +1 -0
  145. package/dist/types/src/util.d.ts.map +1 -1
  146. package/dist/types/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +48 -34
  148. package/src/MarkdownPlugin.tsx +22 -12
  149. package/src/capabilities/anchor-sort.ts +30 -0
  150. package/src/capabilities/app-graph-serializer.ts +4 -5
  151. package/src/capabilities/artifact-definition.ts +48 -10
  152. package/src/capabilities/index.ts +1 -1
  153. package/src/capabilities/intent-resolver.ts +40 -12
  154. package/src/capabilities/react-surface.tsx +20 -5
  155. package/src/capabilities/settings.ts +2 -2
  156. package/src/capabilities/state.ts +4 -4
  157. package/src/components/MarkdownContainer.tsx +20 -7
  158. package/src/components/{MarkdownEditor.stories.tsx → MarkdownEditor/MarkdownEditor.stories.tsx} +22 -35
  159. package/src/components/{MarkdownEditor.tsx → MarkdownEditor/MarkdownEditor.tsx} +32 -73
  160. package/src/components/MarkdownEditor/index.ts +5 -0
  161. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +73 -0
  162. package/src/components/MarkdownPreview/MarkdownPreview.tsx +85 -0
  163. package/src/components/MarkdownPreview/index.ts +9 -0
  164. package/src/components/{MarkdownSettings.tsx → MarkdownSettings/MarkdownSettings.tsx} +2 -2
  165. package/src/components/MarkdownSettings/index.ts +5 -0
  166. package/src/components/Suggestions.stories.tsx +216 -0
  167. package/src/components/Toolbar.stories.tsx +29 -29
  168. package/src/components/index.ts +1 -0
  169. package/src/extensions.tsx +82 -48
  170. package/src/hooks/useSelectCurrentThread.tsx +2 -2
  171. package/src/translations.ts +3 -3
  172. package/src/types/schema.ts +22 -15
  173. package/src/types/types.ts +23 -21
  174. package/src/util.tsx +8 -4
  175. package/dist/lib/browser/MarkdownContainer-T3HU27RE.mjs +0 -563
  176. package/dist/lib/browser/MarkdownContainer-T3HU27RE.mjs.map +0 -7
  177. package/dist/lib/browser/app-graph-serializer-NOXI4IQ5.mjs.map +0 -7
  178. package/dist/lib/browser/artifact-definition-CE6J6NY4.mjs.map +0 -7
  179. package/dist/lib/browser/chunk-3ULJ4FIJ.mjs.map +0 -7
  180. package/dist/lib/browser/chunk-QXDKFACU.mjs.map +0 -7
  181. package/dist/lib/browser/chunk-YCJNW2RU.mjs +0 -75
  182. package/dist/lib/browser/chunk-YCJNW2RU.mjs.map +0 -7
  183. package/dist/lib/browser/intent-resolver-42GQ6HNZ.mjs +0 -50
  184. package/dist/lib/browser/intent-resolver-42GQ6HNZ.mjs.map +0 -7
  185. package/dist/lib/browser/react-surface-RQX3CPFV.mjs +0 -176
  186. package/dist/lib/browser/react-surface-RQX3CPFV.mjs.map +0 -7
  187. package/dist/lib/browser/settings-GCSS3Y4Z.mjs.map +0 -7
  188. package/dist/lib/browser/state-O7P5JDIH.mjs.map +0 -7
  189. package/dist/lib/browser/thread-3QGCFNVZ.mjs +0 -37
  190. package/dist/lib/browser/thread-3QGCFNVZ.mjs.map +0 -7
  191. package/dist/lib/node/MarkdownContainer-6ZJIFAP6.cjs +0 -576
  192. package/dist/lib/node/MarkdownContainer-6ZJIFAP6.cjs.map +0 -7
  193. package/dist/lib/node/app-graph-serializer-HKK3SEDN.cjs.map +0 -7
  194. package/dist/lib/node/artifact-definition-XGADFWCQ.cjs.map +0 -7
  195. package/dist/lib/node/chunk-7QVONRSI.cjs.map +0 -7
  196. package/dist/lib/node/chunk-H5MYVP6F.cjs.map +0 -7
  197. package/dist/lib/node/chunk-UEXGNGSS.cjs.map +0 -7
  198. package/dist/lib/node/intent-resolver-NW27BF3W.cjs +0 -63
  199. package/dist/lib/node/intent-resolver-NW27BF3W.cjs.map +0 -7
  200. package/dist/lib/node/react-surface-5X3SMHGI.cjs +0 -189
  201. package/dist/lib/node/react-surface-5X3SMHGI.cjs.map +0 -7
  202. package/dist/lib/node/settings-S2ISUVIH.cjs.map +0 -7
  203. package/dist/lib/node/state-L44SG3ZM.cjs.map +0 -7
  204. package/dist/lib/node/thread-42R57L4K.cjs.map +0 -7
  205. package/dist/lib/node-esm/MarkdownContainer-URAPTO37.mjs +0 -564
  206. package/dist/lib/node-esm/MarkdownContainer-URAPTO37.mjs.map +0 -7
  207. package/dist/lib/node-esm/app-graph-serializer-QQ2CTHOQ.mjs.map +0 -7
  208. package/dist/lib/node-esm/artifact-definition-WRG5ZRN5.mjs.map +0 -7
  209. package/dist/lib/node-esm/chunk-4AM4VU3Y.mjs +0 -76
  210. package/dist/lib/node-esm/chunk-4AM4VU3Y.mjs.map +0 -7
  211. package/dist/lib/node-esm/chunk-F6UHVLH7.mjs.map +0 -7
  212. package/dist/lib/node-esm/chunk-JAVD67QP.mjs.map +0 -7
  213. package/dist/lib/node-esm/intent-resolver-7HOMUVHR.mjs +0 -51
  214. package/dist/lib/node-esm/intent-resolver-7HOMUVHR.mjs.map +0 -7
  215. package/dist/lib/node-esm/react-surface-6IKC3G46.mjs +0 -177
  216. package/dist/lib/node-esm/react-surface-6IKC3G46.mjs.map +0 -7
  217. package/dist/lib/node-esm/settings-ZDIFTK4N.mjs.map +0 -7
  218. package/dist/lib/node-esm/state-DWPOKLEY.mjs.map +0 -7
  219. package/dist/lib/node-esm/thread-R2KHZD6V.mjs +0 -38
  220. package/dist/lib/node-esm/thread-R2KHZD6V.mjs.map +0 -7
  221. package/dist/types/src/capabilities/thread.d.ts +0 -6
  222. package/dist/types/src/capabilities/thread.d.ts.map +0 -1
  223. package/dist/types/src/components/MarkdownEditor.d.ts +0 -39
  224. package/dist/types/src/components/MarkdownEditor.d.ts.map +0 -1
  225. package/dist/types/src/components/MarkdownEditor.stories.d.ts.map +0 -1
  226. package/dist/types/src/components/MarkdownSettings.d.ts.map +0 -1
  227. package/src/capabilities/thread.ts +0 -35
@@ -1,576 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var MarkdownContainer_6ZJIFAP6_exports = {};
30
- __export(MarkdownContainer_6ZJIFAP6_exports, {
31
- DocumentEditor: () => DocumentEditor,
32
- default: () => MarkdownContainer_default
33
- });
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
- var import_react = __toESM(require("react"));
40
- var import_app_framework = require("@dxos/app-framework");
41
- var import_echo_schema = require("@dxos/echo-schema");
42
- var import_echo = require("@dxos/react-client/echo");
43
- var import_schema = require("@dxos/schema");
44
- var import_search = require("@codemirror/search");
45
- var import_react2 = __toESM(require("react"));
46
- var import_react_dropzone = require("react-dropzone");
47
- var import_app_framework2 = require("@dxos/app-framework");
48
- var import_types = require("@dxos/plugin-deck/types");
49
- var import_react_ui = require("@dxos/react-ui");
50
- var import_react_ui_editor = require("@dxos/react-ui-editor");
51
- var import_react_ui_stack = require("@dxos/react-ui-stack");
52
- var import_util = require("@dxos/util");
53
- var import_view = require("@codemirror/view");
54
- var import_react3 = require("react");
55
- var import_app_framework3 = require("@dxos/app-framework");
56
- var import_echo_schema2 = require("@dxos/echo-schema");
57
- var import_invariant = require("@dxos/invariant");
58
- var import_react_ui_editor2 = require("@dxos/react-ui-editor");
59
- var import_react4 = __toESM(require("react"));
60
- var import_client = require("react-dom/client");
61
- var import_app_framework4 = require("@dxos/app-framework");
62
- var import_invariant2 = require("@dxos/invariant");
63
- var import_echo2 = require("@dxos/react-client/echo");
64
- var import_halo = require("@dxos/react-client/halo");
65
- var import_react_ui2 = require("@dxos/react-ui");
66
- var import_react_ui_editor3 = require("@dxos/react-ui-editor");
67
- var import_react_ui_theme = require("@dxos/react-ui-theme");
68
- var import_util2 = require("@dxos/util");
69
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
70
- var useSelectCurrentThread = (editorView, documentId) => {
71
- const scrollIntoViewResolver = (0, import_react3.useMemo)(() => (0, import_app_framework3.createResolver)({
72
- intent: import_app_framework3.LayoutAction.UpdateLayout,
73
- position: "hoist",
74
- filter: (data) => {
75
- if (!import_echo_schema2.S.is(import_app_framework3.LayoutAction.ScrollIntoView.fields.input)(data)) {
76
- return false;
77
- }
78
- return !!editorView && data.subject === documentId && !!data.options?.cursor;
79
- },
80
- resolve: ({ options: { cursor } }) => {
81
- (0, import_invariant.invariant)(editorView, "Editor view is not defined.", {
82
- F: __dxlog_file,
83
- L: 32,
84
- S: void 0,
85
- A: [
86
- "editorView",
87
- "'Editor view is not defined.'"
88
- ]
89
- });
90
- const range = import_react_ui_editor2.Cursor.getRangeFromCursor(editorView.state, cursor);
91
- if (range) {
92
- const selection = editorView.state.selection.main.from !== range.from ? {
93
- anchor: range.from
94
- } : void 0;
95
- const effects = [
96
- // NOTE: This does not use the DOM scrollIntoView function.
97
- import_view.EditorView.scrollIntoView(range.from, {
98
- y: "start",
99
- yMargin: 96
100
- })
101
- ];
102
- if (selection) {
103
- effects.push(import_react_ui_editor2.setSelection.of({
104
- current: documentId
105
- }));
106
- }
107
- editorView.dispatch({
108
- effects,
109
- selection: selection ? {
110
- anchor: range.from
111
- } : void 0
112
- });
113
- }
114
- }
115
- }), [
116
- documentId,
117
- editorView
118
- ]);
119
- (0, import_app_framework3.useIntentResolver)(import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN, scrollIntoViewResolver);
120
- };
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);
123
- const { themeMode } = (0, import_react_ui.useThemeContext)();
124
- const { dispatchPromise: dispatch } = (0, import_app_framework2.useIntentDispatcher)();
125
- const toolbarState = (0, import_react_ui_editor.useEditorToolbarState)({
126
- viewMode
127
- });
128
- const formattingObserver = (0, import_react_ui_editor.useFormattingState)(toolbarState);
129
- const { scrollTo, selection } = (0, import_react2.useMemo)(() => editorStateStore?.getState(id) ?? {}, [
130
- id
131
- ]);
132
- const providerExtensions = (0, import_react2.useMemo)(() => extensionProviders?.flatMap((provider) => provider({})).filter(import_util.isNonNullable), [
133
- extensionProviders
134
- ]);
135
- const commentObserver = (0, import_react_ui_editor.useCommentState)(toolbarState);
136
- const onCommentClick = (0, import_react2.useCallback)(async () => {
137
- await dispatch((0, import_app_framework2.createIntent)(import_types.DeckAction.ChangeCompanion, {
138
- primary: id,
139
- companion: `${id}${import_types.ATTENDABLE_PATH_SEPARATOR}comments`
140
- }));
141
- }, [
142
- dispatch
143
- ]);
144
- const commentClickObserver = (0, import_react_ui_editor.useCommentClickListener)(onCommentClick);
145
- const handleDrop = async (view, { files }) => {
146
- const file = files[0];
147
- const info = file && onFileUpload ? await onFileUpload(file) : void 0;
148
- if (info) {
149
- (0, import_react_ui_editor.processEditorPayload)(view, {
150
- type: "image",
151
- data: info.url
152
- });
153
- }
154
- };
155
- const { parentRef, view: editorView, focusAttributes } = (0, import_react_ui_editor.useTextEditor)(() => ({
156
- initialValue,
157
- extensions: [
158
- formattingObserver,
159
- comment && commentObserver,
160
- comment && commentClickObserver,
161
- (0, import_react_ui_editor.createBasicExtensions)({
162
- readOnly: viewMode === "readonly",
163
- placeholder: t("editor placeholder"),
164
- scrollPastEnd: role === "section" ? false : scrollPastEnd
165
- }),
166
- (0, import_react_ui_editor.createMarkdownExtensions)({
167
- themeMode
168
- }),
169
- (0, import_react_ui_editor.createThemeExtensions)({
170
- themeMode,
171
- syntaxHighlighting: true,
172
- slots: {
173
- content: {
174
- className: import_react_ui_editor.editorContent
175
- }
176
- }
177
- }),
178
- import_react_ui_editor.editorGutter,
179
- role !== "section" && onFileUpload && (0, import_react_ui_editor.dropFile)({
180
- onDrop: handleDrop
181
- }),
182
- providerExtensions,
183
- extensions
184
- ].filter(import_util.isNotFalsy),
185
- ...role !== "section" && {
186
- id,
187
- scrollTo,
188
- selection,
189
- // TODO(wittjosiah): Autofocus based on layout is racy.
190
- // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,
191
- moveToEndOfLine: true
192
- }
193
- }), [
194
- id,
195
- formattingObserver,
196
- comment,
197
- viewMode,
198
- themeMode,
199
- extensions,
200
- providerExtensions
201
- ]);
202
- useTest(editorView);
203
- useSelectCurrentThread(editorView, id);
204
- const { acceptedFiles, getInputProps, open } = (0, import_react_dropzone.useDropzone)({
205
- multiple: false,
206
- noDrag: true,
207
- accept: {
208
- "image/*": [
209
- ".jpg",
210
- ".jpeg",
211
- ".png",
212
- ".gif"
213
- ]
214
- }
215
- });
216
- (0, import_react2.useEffect)(() => {
217
- if (editorView && onFileUpload && acceptedFiles.length) {
218
- requestAnimationFrame(async () => {
219
- const f = acceptedFiles[0];
220
- const file = new File([
221
- f
222
- ], f.name, {
223
- type: f.type,
224
- lastModified: f.lastModified
225
- });
226
- const info = await onFileUpload(file);
227
- if (info) {
228
- (0, import_react_ui_editor.processEditorPayload)(editorView, {
229
- type: "image",
230
- data: info.url
231
- });
232
- }
233
- });
234
- }
235
- }, [
236
- acceptedFiles,
237
- editorView
238
- ]);
239
- const handleToolbarAction = (0, import_react_ui_editor.useActionHandler)(editorView);
240
- const handleAction = (0, import_react2.useCallback)((action) => {
241
- switch (action.properties.type) {
242
- case "search": {
243
- if (editorView) {
244
- (0, import_search.openSearchPanel)(editorView);
245
- }
246
- return;
247
- }
248
- case "view-mode": {
249
- onViewModeChange?.(id, action.properties.data);
250
- return;
251
- }
252
- case "image": {
253
- open();
254
- return;
255
- }
256
- }
257
- handleToolbarAction?.(action);
258
- }, [
259
- editorView,
260
- onViewModeChange,
261
- open
262
- ]);
263
- return /* @__PURE__ */ import_react2.default.createElement(import_react_ui_stack.StackItem.Content, {
264
- toolbar: !!toolbar
265
- }, toolbar && /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_editor.EditorToolbar, {
266
- attendableId: id,
267
- role,
268
- state: toolbarState,
269
- comment,
270
- customActions: onFileUpload ? createUploadAction : void 0,
271
- onAction: handleAction
272
- }), /* @__PURE__ */ import_react2.default.createElement("input", getInputProps())), /* @__PURE__ */ import_react2.default.createElement("div", {
273
- role: "none",
274
- ref: parentRef,
275
- "data-testid": "composer.markdownRoot",
276
- "data-toolbar": toolbar ? "enabled" : "disabled",
277
- className: (0, import_react_ui_editor.stackItemContentEditorClassNames)(role),
278
- ...focusAttributes
279
- }));
280
- };
281
- var useTest = (view) => {
282
- (0, import_react2.useEffect)(() => {
283
- const composer = window.composer;
284
- if (composer) {
285
- composer.editorView = view;
286
- }
287
- }, [
288
- view
289
- ]);
290
- };
291
- var createUploadAction = () => ({
292
- nodes: [
293
- (0, import_react_ui_editor.createEditorAction)({
294
- type: "image",
295
- testId: "editor.toolbar.image"
296
- }, "ph--image-square--regular", [
297
- "upload image label",
298
- {
299
- ns: import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN
300
- }
301
- ])
302
- ],
303
- edges: [
304
- {
305
- source: "root",
306
- target: "image"
307
- }
308
- ]
309
- });
310
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
311
- var useExtensions = ({ document, id, text, settings, viewMode, editorStateStore }) => {
312
- const { dispatchPromise: dispatch } = (0, import_app_framework4.useIntentDispatcher)();
313
- const identity = (0, import_halo.useIdentity)();
314
- const space = (0, import_echo2.getSpace)(document) ?? (0, import_echo2.getSpace)(text);
315
- const baseExtensions = (0, import_react4.useMemo)(() => createBaseExtensions({
316
- document,
317
- id,
318
- text,
319
- settings,
320
- viewMode,
321
- dispatch
322
- }), [
323
- document,
324
- id,
325
- text,
326
- viewMode,
327
- dispatch,
328
- settings,
329
- settings.editorInputMode,
330
- settings.folding,
331
- settings.numberedHeadings,
332
- settings.debug,
333
- settings.typewriter
334
- ]);
335
- const extensionProviders = (0, import_app_framework4.useCapabilities)(import_chunk_DZXTXSXX.MarkdownCapabilities.Extensions);
336
- const pluginExtensions = (0, import_react4.useMemo)(() => extensionProviders.flat().reduce((acc, provider) => {
337
- const extension = typeof provider === "function" ? provider({
338
- document
339
- }) : provider;
340
- if (extension) {
341
- acc.push(extension);
342
- }
343
- return acc;
344
- }, []), [
345
- extensionProviders,
346
- document
347
- ]);
348
- return (0, import_react4.useMemo)(() => [
349
- // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
350
- document && (0, import_react_ui_editor3.createDataExtensions)({
351
- id: document.id,
352
- text: document.content.target && (0, import_echo2.createDocAccessor)(document.content.target, [
353
- "content"
354
- ]),
355
- space,
356
- identity
357
- }),
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),
367
- document && (0, import_react_ui_editor3.listener)({
368
- onChange: (text2) => (0, import_chunk_7QVONRSI.setFallbackName)(document, text2)
369
- }),
370
- baseExtensions,
371
- pluginExtensions
372
- ].filter(import_util2.isNotFalsy), [
373
- baseExtensions,
374
- pluginExtensions,
375
- document,
376
- document?.content?.target,
377
- text,
378
- id,
379
- space,
380
- identity
381
- ]);
382
- };
383
- var createBaseExtensions = ({ document, id, dispatch, settings, query, viewMode }) => {
384
- const extensions = [
385
- settings.editorInputMode && import_react_ui_editor3.InputModeExtensions[settings.editorInputMode],
386
- settings.folding && (0, import_react_ui_editor3.folding)()
387
- ].filter(import_util2.isNotFalsy);
388
- if (viewMode !== "source") {
389
- extensions.push(...[
390
- (0, import_react_ui_editor3.formattingKeymap)(),
391
- (0, import_react_ui_editor3.decorateMarkdown)({
392
- selectionChangeDelay: 100,
393
- numberedHeadings: settings.numberedHeadings ? {
394
- from: 2
395
- } : void 0,
396
- // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
397
- renderLinkButton: dispatch && (document || id) ? onRenderLink((id2) => {
398
- void dispatch((0, import_app_framework4.createIntent)(import_app_framework4.LayoutAction.Open, {
399
- part: "main",
400
- subject: [
401
- id2
402
- ],
403
- options: {
404
- pivotId: document ? (0, import_echo2.fullyQualifiedId)(document) : id2
405
- }
406
- }));
407
- }) : void 0
408
- }),
409
- (0, import_react_ui_editor3.linkTooltip)(renderLinkTooltip)
410
- ]);
411
- }
412
- if (query) {
413
- extensions.push((0, import_react_ui_editor3.autocomplete)({
414
- onSearch: (text) => {
415
- return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
416
- label: object.name,
417
- // TODO(burdon): Factor out URL builder.
418
- apply: `[${object.name}](/${(0, import_echo2.fullyQualifiedId)(object)})`
419
- } : void 0).filter(import_util2.isNotFalsy);
420
- }
421
- }));
422
- }
423
- if (settings.debug) {
424
- const items = settings.typewriter?.split(/[,\n]/) ?? "";
425
- if (items) {
426
- extensions.push((0, import_react_ui_editor3.typewriter)({
427
- items
428
- }));
429
- }
430
- }
431
- return extensions;
432
- };
433
- var style = {
434
- hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
435
- icon: "inline-block leading-none mis-1 cursor-pointer"
436
- };
437
- var onRenderLink = (onSelectObject) => (el, url) => {
438
- const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
439
- url.startsWith(window.location.origin);
440
- const options = isInternal ? {
441
- onClick: () => {
442
- const qualifiedId = url.split("/").at(-1);
443
- (0, import_invariant2.invariant)(qualifiedId, "Invalid link format.", {
444
- F: __dxlog_file2,
445
- L: 247,
446
- S: void 0,
447
- A: [
448
- "qualifiedId",
449
- "'Invalid link format.'"
450
- ]
451
- });
452
- onSelectObject(qualifiedId);
453
- }
454
- } : {
455
- href: url,
456
- rel: "noreferrer",
457
- target: "_blank"
458
- };
459
- renderRoot(el, /* @__PURE__ */ import_react4.default.createElement("a", {
460
- ...options,
461
- className: style.hover
462
- }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Icon, {
463
- icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
464
- size: 4,
465
- classNames: style.icon
466
- })));
467
- };
468
- var renderLinkTooltip = (el, url) => {
469
- const web = new URL(url);
470
- renderRoot(el, /* @__PURE__ */ import_react4.default.createElement("a", {
471
- href: url,
472
- rel: "noreferrer",
473
- target: "_blank",
474
- className: style.hover
475
- }, web.origin, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Icon, {
476
- icon: "ph--arrow-square-out--bold",
477
- size: 4,
478
- classNames: style.icon
479
- })));
480
- };
481
- var renderRoot = (root, node) => {
482
- (0, import_client.createRoot)(root).render(/* @__PURE__ */ import_react4.default.createElement(import_react_ui2.ThemeProvider, {
483
- tx: import_react_ui_theme.defaultTx
484
- }, node));
485
- return root;
486
- };
487
- var MarkdownContainer = ({ id, role, object, settings, viewMode, editorStateStore, onViewModeChange }) => {
488
- const scrollPastEnd = role === "article";
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;
491
- const extensions = useExtensions({
492
- document: doc,
493
- text,
494
- id,
495
- settings,
496
- viewMode,
497
- editorStateStore
498
- });
499
- if (doc) {
500
- return /* @__PURE__ */ import_react.default.createElement(DocumentEditor, {
501
- id: (0, import_echo.fullyQualifiedId)(object),
502
- role,
503
- document: doc,
504
- extensions,
505
- viewMode,
506
- settings,
507
- scrollPastEnd,
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,
521
- onViewModeChange
522
- });
523
- } else {
524
- return /* @__PURE__ */ import_react.default.createElement(MarkdownEditor, {
525
- id,
526
- role,
527
- initialValue: object.text,
528
- extensions,
529
- viewMode,
530
- toolbar: settings.toolbar,
531
- inputMode: settings.editorInputMode,
532
- scrollPastEnd,
533
- onViewModeChange
534
- });
535
- }
536
- };
537
- var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
538
- const space = (0, import_echo.getSpace)(doc);
539
- (0, import_react.useEffect)(() => {
540
- if (typeof doc.fallbackName === "string") {
541
- return;
542
- }
543
- const fallbackName = doc.content?.target?.content ? (0, import_chunk_7QVONRSI.getFallbackName)(doc.content.target.content) : void 0;
544
- if (fallbackName) {
545
- doc.fallbackName = fallbackName;
546
- }
547
- }, [
548
- doc,
549
- doc.content
550
- ]);
551
- const [upload] = (0, import_app_framework.useCapabilities)(import_app_framework.Capabilities.FileUploader);
552
- const handleFileUpload = (0, import_react.useMemo)(() => {
553
- if (space === void 0 || upload === void 0) {
554
- return void 0;
555
- }
556
- return async (file) => upload(file, space);
557
- }, [
558
- space,
559
- upload
560
- ]);
561
- return /* @__PURE__ */ import_react.default.createElement(MarkdownEditor, {
562
- id,
563
- initialValue: doc.content?.target?.content,
564
- viewMode,
565
- toolbar: settings.toolbar,
566
- inputMode: settings.editorInputMode,
567
- onFileUpload: handleFileUpload,
568
- ...props
569
- });
570
- };
571
- var MarkdownContainer_default = MarkdownContainer;
572
- // Annotate the CommonJS export names for ESM import in node:
573
- 0 && (module.exports = {
574
- DocumentEditor
575
- });
576
- //# sourceMappingURL=MarkdownContainer-6ZJIFAP6.cjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/MarkdownContainer.tsx", "../../../src/components/MarkdownEditor.tsx", "../../../src/hooks/useSelectCurrentThread.tsx", "../../../src/extensions.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useMemo } from 'react';\n\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';\nimport { TextType } 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 | TextType | any;\n settings: MarkdownSettingsProps;\n};\n\n// TODO(burdon): Move toolbar here.\n// TODO(burdon): Factor out difference for ECHO and non-ECHO objects; i.e., single component.\nconst MarkdownContainer = ({\n id,\n role,\n object,\n settings,\n viewMode,\n editorStateStore,\n onViewModeChange,\n}: MarkdownContainerProps) => {\n const scrollPastEnd = role === 'article';\n const doc = isInstanceOf(DocumentType, object) ? object : undefined;\n const text = isInstanceOf(TextType, object) ? object : undefined;\n const extensions = useExtensions({ document: doc, text, id, settings, viewMode, editorStateStore });\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 />\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 comment={false}\n inputMode={settings.editorInputMode}\n scrollPastEnd={scrollPastEnd}\n onViewModeChange={onViewModeChange}\n />\n );\n } else {\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 />\n );\n }\n};\n\ntype DocumentEditorProps = Omit<MarkdownContainerProps, 'object' | 'extensionProviders' | 'editorStateStore'> &\n Pick<MarkdownEditorProps, 'id' | 'scrollPastEnd' | 'extensions'> & {\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 return (\n <MarkdownEditor\n id={id}\n initialValue={doc.content?.target?.content}\n viewMode={viewMode}\n toolbar={settings.toolbar}\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 { openSearchPanel } from '@codemirror/search';\nimport { type EditorView } from '@codemirror/view';\nimport React, { useMemo, useEffect, useCallback } from 'react';\nimport { useDropzone } from 'react-dropzone';\n\nimport { createIntent, type FileInfo, useIntentDispatcher } from '@dxos/app-framework';\nimport { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';\nimport { useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n type DNDOptions,\n type EditorAction,\n type EditorViewMode,\n type EditorInputMode,\n type EditorSelectionState,\n type EditorStateStore,\n EditorToolbar,\n type UseTextEditorProps,\n createBasicExtensions,\n createEditorAction,\n createMarkdownExtensions,\n createThemeExtensions,\n dropFile,\n editorContent,\n editorGutter,\n processEditorPayload,\n stackItemContentEditorClassNames,\n useActionHandler,\n useCommentState,\n useCommentClickListener,\n useFormattingState,\n useTextEditor,\n useEditorToolbarState,\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 toolbar?: boolean;\n // TODO(wittjosiah): Generalize custom toolbar actions (e.g. comment, upload, etc.)\n comment?: boolean;\n viewMode?: EditorViewMode;\n editorStateStore?: EditorStateStore;\n onViewModeChange?: (id: string, mode: EditorViewMode) => void;\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 id,\n role = 'article',\n initialValue,\n extensions,\n extensionProviders,\n scrollPastEnd,\n toolbar,\n comment = true,\n viewMode,\n editorStateStore,\n onFileUpload,\n onViewModeChange,\n}: MarkdownEditorProps) => {\n const { t } = useTranslation(MARKDOWN_PLUGIN);\n const { themeMode } = useThemeContext();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\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(Zan): Factor out to thread plugin.\n const commentObserver = useCommentState(toolbarState);\n const onCommentClick = useCallback(async () => {\n await dispatch(\n createIntent(DeckAction.ChangeCompanion, {\n primary: id,\n companion: `${id}${ATTENDABLE_PATH_SEPARATOR}comments`,\n }),\n );\n }, [dispatch]);\n const commentClickObserver = useCommentClickListener(onCommentClick);\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 comment && commentObserver,\n comment && commentClickObserver,\n createBasicExtensions({\n readOnly: viewMode === 'readonly',\n placeholder: t('editor placeholder'),\n scrollPastEnd: role === 'section' ? false : scrollPastEnd,\n }),\n createMarkdownExtensions({ themeMode }),\n createThemeExtensions({\n themeMode,\n syntaxHighlighting: true,\n slots: { content: { className: editorContent } },\n }),\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, comment, viewMode, themeMode, extensions, providerExtensions],\n );\n\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 processEditorPayload(editorView, { type: 'image', data: info.url });\n }\n });\n }\n }, [acceptedFiles, editorView]);\n\n // Toolbar handler.\n const handleToolbarAction = useActionHandler(editorView);\n const handleAction = useCallback(\n (action: EditorAction) => {\n switch (action.properties.type) {\n case 'search': {\n if (editorView) {\n openSearchPanel(editorView);\n }\n return;\n }\n case 'view-mode': {\n onViewModeChange?.(id, action.properties.data);\n return;\n }\n case 'image': {\n open();\n return;\n }\n }\n\n handleToolbarAction?.(action);\n },\n [editorView, onViewModeChange, open],\n );\n\n return (\n <StackItem.Content toolbar={!!toolbar}>\n {toolbar && (\n <>\n <EditorToolbar\n attendableId={id}\n role={role}\n state={toolbarState}\n comment={comment}\n customActions={onFileUpload ? createUploadAction : undefined}\n onAction={handleAction}\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 {...focusAttributes}\n />\n </StackItem.Content>\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\nexport const createUploadAction = () => ({\n nodes: [\n createEditorAction({ type: 'image', testId: 'editor.toolbar.image' }, 'ph--image-square--regular', [\n 'upload image label',\n { ns: MARKDOWN_PLUGIN },\n ]),\n ],\n edges: [{ source: 'root', target: 'image' }],\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { useMemo } from 'react';\n\nimport { createResolver, LayoutAction, useIntentResolver } from '@dxos/app-framework';\nimport { S } from '@dxos/echo-schema';\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 (!S.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 Query } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ThemeProvider } from '@dxos/react-ui';\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 selectionState,\n typewriter,\n} from '@dxos/react-ui-editor';\nimport { defaultTx } from '@dxos/react-ui-theme';\nimport { type TextType } 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?: TextType;\n dispatch?: PromiseIntentDispatcher;\n query?: Query<DocumentType>;\n settings: MarkdownSettingsProps;\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 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.schema(DocumentType));\n // query?.subscribe();\n const baseExtensions = useMemo(\n () =>\n createBaseExtensions({\n document,\n id,\n text,\n settings,\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 ],\n );\n\n const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);\n\n //\n // External extensions from other plugins.\n //\n const pluginExtensions = useMemo<Extension[] | undefined>(\n () =>\n 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 //\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 query,\n viewMode,\n}: ExtensionsOptions): Extension[] => {\n const extensions: Extension[] = [\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 ? onRenderLink((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 ],\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\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 onRenderLink = (onSelectObject: (id: string) => void) => (el: Element, url: string) => {\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 = (el: Element, url: string) => {\n const web = new URL(url);\n renderRoot(\n el,\n <a href={url} rel='noreferrer' target='_blank' className={style.hover}>\n {web.origin}\n <Icon icon='ph--arrow-square-out--bold' size={4} classNames={style.icon} />\n </a>,\n );\n};\n\n// TODO(burdon): Remove react rendering; use DOM directly.\nexport const renderRoot = <T extends Element>(root: T, node: ReactNode): T => {\n createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);\n return root;\n};\n"],
5
- "mappings": "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",
6
- "names": ["import_react", "import_app_framework", "import_echo_schema", "import_react_ui_editor", "import_invariant", "import_echo", "import_react_ui", "import_util", "useSelectCurrentThread", "editorView", "documentId", "scrollIntoViewResolver", "useMemo", "createResolver", "intent", "LayoutAction", "UpdateLayout", "position", "filter", "data", "S", "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", "id", "role", "initialValue", "extensions", "extensionProviders", "scrollPastEnd", "toolbar", "comment", "viewMode", "editorStateStore", "onFileUpload", "onViewModeChange", "t", "useTranslation", "themeMode", "useThemeContext", "dispatchPromise", "useIntentDispatcher", "toolbarState", "useEditorToolbarState", "formattingObserver", "useFormattingState", "scrollTo", "getState", "providerExtensions", "flatMap", "provider", "isNonNullable", "commentObserver", "useCommentState", "onCommentClick", "useCallback", "createIntent", "DeckAction", "ChangeCompanion", "primary", "companion", "ATTENDABLE_PATH_SEPARATOR", "commentClickObserver", "useCommentClickListener", "handleDrop", "view", "files", "file", "info", "processEditorPayload", "type", "url", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "readOnly", "placeholder", "createMarkdownExtensions", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "className", "editorContent", "editorGutter", "dropFile", "onDrop", "isNotFalsy", "moveToEndOfLine", "useTest", "acceptedFiles", "getInputProps", "open", "useDropzone", "multiple", "noDrag", "accept", "useEffect", "length", "requestAnimationFrame", "f", "File", "name", "lastModified", "handleToolbarAction", "useActionHandler", "handleAction", "action", "properties", "openSearchPanel", "React", "StackItem", "Content", "EditorToolbar", "attendableId", "customActions", "createUploadAction", "onAction", "div", "ref", "data-testid", "data-toolbar", "stackItemContentEditorClassNames", "composer", "window", "nodes", "createEditorAction", "testId", "ns", "edges", "source", "target", "useExtensions", "document", "text", "settings", "identity", "useIdentity", "space", "getSpace", "baseExtensions", "createBaseExtensions", "editorInputMode", "folding", "numberedHeadings", "debug", "typewriter", "useCapabilities", "MarkdownCapabilities", "Extensions", "pluginExtensions", "flat", "reduce", "acc", "extension", "createDataExtensions", "createDocAccessor", "selectionState", "listener", "onChange", "setFallbackName", "query", "InputModeExtensions", "formattingKeymap", "decorateMarkdown", "selectionChangeDelay", "renderLinkButton", "onRenderLink", "Open", "part", "pivotId", "fullyQualifiedId", "linkTooltip", "renderLinkTooltip", "autocomplete", "onSearch", "objects", "map", "object", "label", "apply", "items", "split", "style", "hover", "icon", "onSelectObject", "el", "isInternal", "startsWith", "location", "origin", "onClick", "qualifiedId", "at", "href", "rel", "renderRoot", "a", "Icon", "size", "classNames", "web", "URL", "root", "node", "createRoot", "render", "ThemeProvider", "tx", "defaultTx", "MarkdownContainer", "doc", "isInstanceOf", "DocumentType", "TextType", "DocumentEditor", "inputMode", "props", "fallbackName", "getFallbackName", "upload", "Capabilities", "FileUploader", "handleFileUpload"]
7
- }