@dxos/plugin-markdown 0.8.4-main.c1de068 → 0.8.4-main.fd6878d

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 (195) hide show
  1. package/dist/lib/browser/{MarkdownPreview-S3C7CGAV.mjs → MarkdownCard-IMCR4A4V.mjs} +16 -16
  2. package/dist/lib/browser/MarkdownCard-IMCR4A4V.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownContainer-F3WEEIBX.mjs → MarkdownContainer-VGJPHMVG.mjs} +262 -260
  4. package/dist/lib/browser/MarkdownContainer-VGJPHMVG.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-UKJJ7ZNP.mjs → anchor-sort-AJKRIWFD.mjs} +5 -5
  6. package/dist/lib/browser/anchor-sort-AJKRIWFD.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-ICLAF662.mjs → app-graph-serializer-OIS3MZX2.mjs} +10 -10
  8. package/dist/lib/browser/app-graph-serializer-OIS3MZX2.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-IKPZHFTW.mjs +30 -0
  10. package/dist/lib/browser/chunk-IKPZHFTW.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-JHH7VL52.mjs +18 -0
  12. package/dist/lib/browser/chunk-JHH7VL52.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-LFML7LC6.mjs → chunk-JMBQG2ZC.mjs} +8 -9
  14. package/dist/lib/browser/chunk-JMBQG2ZC.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-JTIGSUMB.mjs +80 -0
  16. package/dist/lib/browser/chunk-JTIGSUMB.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-LMJPXTPL.mjs +16 -0
  18. package/dist/lib/browser/chunk-LMJPXTPL.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-LHDCHDBW.mjs → chunk-MVL4K3OD.mjs} +5 -5
  20. package/dist/lib/browser/chunk-MVL4K3OD.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +20 -22
  22. package/dist/lib/browser/index.mjs.map +3 -3
  23. package/dist/lib/browser/{intent-resolver-3MXYO3MW.mjs → intent-resolver-BLLHRSTQ.mjs} +14 -18
  24. package/dist/lib/browser/intent-resolver-BLLHRSTQ.mjs.map +7 -0
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/{react-surface-C3Z423TV.mjs → react-surface-NL3BZR6H.mjs} +24 -22
  27. package/dist/lib/browser/react-surface-NL3BZR6H.mjs.map +7 -0
  28. package/dist/lib/browser/{settings-KN75ZQY6.mjs → settings-Z7ZV7SLC.mjs} +5 -5
  29. package/dist/lib/browser/settings-Z7ZV7SLC.mjs.map +7 -0
  30. package/dist/lib/browser/{state-LZWTAS65.mjs → state-ORTZIEJU.mjs} +7 -7
  31. package/dist/lib/browser/state-ORTZIEJU.mjs.map +7 -0
  32. package/dist/lib/browser/types/index.mjs +6 -14
  33. package/dist/lib/node-esm/{MarkdownPreview-77UFEWXT.mjs → MarkdownCard-JV2YDV3M.mjs} +16 -16
  34. package/dist/lib/node-esm/MarkdownCard-JV2YDV3M.mjs.map +7 -0
  35. package/dist/lib/node-esm/{MarkdownContainer-VOUHL6IU.mjs → MarkdownContainer-BJRNCXJZ.mjs} +262 -260
  36. package/dist/lib/node-esm/MarkdownContainer-BJRNCXJZ.mjs.map +7 -0
  37. package/dist/lib/node-esm/{anchor-sort-IPIS5D5B.mjs → anchor-sort-N7WEA5E3.mjs} +5 -5
  38. package/dist/lib/node-esm/anchor-sort-N7WEA5E3.mjs.map +7 -0
  39. package/dist/lib/node-esm/{app-graph-serializer-FLBXQKKR.mjs → app-graph-serializer-Q3B44VFB.mjs} +10 -10
  40. package/dist/lib/node-esm/app-graph-serializer-Q3B44VFB.mjs.map +7 -0
  41. package/dist/lib/node-esm/{chunk-ACFGXH2K.mjs → chunk-AYWAYBAY.mjs} +5 -5
  42. package/dist/lib/node-esm/chunk-AYWAYBAY.mjs.map +7 -0
  43. package/dist/lib/node-esm/chunk-H4I2FGDZ.mjs +31 -0
  44. package/dist/lib/node-esm/chunk-H4I2FGDZ.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-H6TITL7A.mjs +20 -0
  46. package/dist/lib/node-esm/chunk-H6TITL7A.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-CWTFQSN7.mjs → chunk-JDMMLOB6.mjs} +8 -9
  48. package/dist/lib/node-esm/chunk-JDMMLOB6.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-KIRZFVX5.mjs +81 -0
  50. package/dist/lib/node-esm/chunk-KIRZFVX5.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-VIR2ABYE.mjs → chunk-Z4XQ6C3D.mjs} +5 -5
  52. package/dist/lib/node-esm/chunk-Z4XQ6C3D.mjs.map +7 -0
  53. package/dist/lib/node-esm/index.mjs +20 -22
  54. package/dist/lib/node-esm/index.mjs.map +3 -3
  55. package/dist/lib/node-esm/{intent-resolver-BZYWV53A.mjs → intent-resolver-NHPUPSWK.mjs} +14 -18
  56. package/dist/lib/node-esm/intent-resolver-NHPUPSWK.mjs.map +7 -0
  57. package/dist/lib/node-esm/meta.json +1 -1
  58. package/dist/lib/node-esm/{react-surface-TTTBYNI2.mjs → react-surface-XJ6ODCBE.mjs} +24 -22
  59. package/dist/lib/node-esm/react-surface-XJ6ODCBE.mjs.map +7 -0
  60. package/dist/lib/node-esm/{settings-KVP7TVX7.mjs → settings-UCXEWBCT.mjs} +5 -5
  61. package/dist/lib/node-esm/settings-UCXEWBCT.mjs.map +7 -0
  62. package/dist/lib/node-esm/{state-NW3W4JCQ.mjs → state-47WSZG54.mjs} +7 -7
  63. package/dist/lib/node-esm/state-47WSZG54.mjs.map +7 -0
  64. package/dist/lib/node-esm/types/index.mjs +6 -14
  65. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -1
  68. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  70. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/index.d.ts +1 -2
  72. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  76. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +7 -0
  77. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  78. package/dist/types/src/components/{MarkdownPreview/MarkdownPreview.stories.d.ts → MarkdownCard/MarkdownCard.stories.d.ts} +8 -8
  79. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  80. package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
  81. package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
  82. package/dist/types/src/components/MarkdownContainer.d.ts +5 -5
  83. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  84. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +1 -1
  86. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  87. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  88. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
  89. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  90. package/dist/types/src/components/Suggestions.stories.d.ts +2 -2
  91. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  92. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/index.d.ts +1 -1
  94. package/dist/types/src/components/index.d.ts.map +1 -1
  95. package/dist/types/src/events.d.ts.map +1 -1
  96. package/dist/types/src/extensions.d.ts +4 -4
  97. package/dist/types/src/extensions.d.ts.map +1 -1
  98. package/dist/types/src/index.d.ts +2 -1
  99. package/dist/types/src/index.d.ts.map +1 -1
  100. package/dist/types/src/meta.d.ts +1 -1
  101. package/dist/types/src/meta.d.ts.map +1 -1
  102. package/dist/types/src/translations.d.ts +2 -2
  103. package/dist/types/src/translations.d.ts.map +1 -1
  104. package/dist/types/src/types/Markdown.d.ts +43 -0
  105. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  106. package/dist/types/src/types/MarkdownAction.d.ts +42 -0
  107. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
  108. package/dist/types/src/types/index.d.ts +2 -1
  109. package/dist/types/src/types/index.d.ts.map +1 -1
  110. package/dist/types/src/types/types.d.ts +3 -59
  111. package/dist/types/src/types/types.d.ts.map +1 -1
  112. package/dist/types/src/util.d.ts +12 -3
  113. package/dist/types/src/util.d.ts.map +1 -1
  114. package/dist/types/tsconfig.tsbuildinfo +1 -1
  115. package/package.json +43 -41
  116. package/src/MarkdownPlugin.tsx +8 -14
  117. package/src/capabilities/anchor-sort.ts +3 -3
  118. package/src/capabilities/app-graph-serializer.ts +6 -4
  119. package/src/capabilities/artifact-definition.ts +15 -12
  120. package/src/capabilities/capabilities.ts +5 -4
  121. package/src/capabilities/index.ts +0 -1
  122. package/src/capabilities/intent-resolver.ts +8 -13
  123. package/src/capabilities/react-surface.tsx +21 -19
  124. package/src/capabilities/settings.ts +3 -3
  125. package/src/capabilities/state.ts +8 -8
  126. package/src/components/{MarkdownPreview/MarkdownPreview.stories.tsx → MarkdownCard/MarkdownCard.stories.tsx} +30 -32
  127. package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +11 -9
  128. package/src/components/MarkdownCard/index.ts +9 -0
  129. package/src/components/MarkdownContainer.stories.tsx +8 -11
  130. package/src/components/MarkdownContainer.tsx +10 -9
  131. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +2 -1
  132. package/src/components/MarkdownEditor/MarkdownEditor.tsx +9 -8
  133. package/src/components/MarkdownSettings/MarkdownSettings.tsx +4 -4
  134. package/src/components/Suggestions.stories.tsx +16 -16
  135. package/src/components/Toolbar.stories.tsx +4 -5
  136. package/src/components/index.ts +1 -1
  137. package/src/events.ts +2 -2
  138. package/src/extensions.tsx +12 -12
  139. package/src/hooks/useSelectCurrentThread.tsx +3 -3
  140. package/src/index.ts +4 -1
  141. package/src/meta.ts +10 -8
  142. package/src/translations.ts +2 -2
  143. package/src/types/Markdown.ts +55 -0
  144. package/src/types/MarkdownAction.ts +31 -0
  145. package/src/types/index.ts +2 -1
  146. package/src/types/types.ts +5 -50
  147. package/src/util.tsx +20 -6
  148. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs.map +0 -7
  149. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs.map +0 -7
  150. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
  151. package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs.map +0 -7
  152. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs +0 -145
  153. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs.map +0 -7
  154. package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
  155. package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
  156. package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
  157. package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
  158. package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-LHDCHDBW.mjs.map +0 -7
  160. package/dist/lib/browser/chunk-PHTD5DTR.mjs +0 -20
  161. package/dist/lib/browser/chunk-PHTD5DTR.mjs.map +0 -7
  162. package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
  163. package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
  164. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
  165. package/dist/lib/browser/react-surface-C3Z423TV.mjs.map +0 -7
  166. package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
  167. package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
  168. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs.map +0 -7
  169. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs.map +0 -7
  170. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
  171. package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs.map +0 -7
  172. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs +0 -146
  173. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs +0 -22
  175. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs.map +0 -7
  176. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
  177. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
  178. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
  179. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
  180. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
  181. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
  182. package/dist/lib/node-esm/chunk-VIR2ABYE.mjs.map +0 -7
  183. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
  184. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs.map +0 -7
  185. package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
  186. package/dist/lib/node-esm/state-NW3W4JCQ.mjs.map +0 -7
  187. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  188. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  189. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  190. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  191. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  192. package/dist/types/src/types/schema.d.ts +0 -35
  193. package/dist/types/src/types/schema.d.ts.map +0 -1
  194. package/src/components/MarkdownPreview/index.ts +0 -9
  195. package/src/types/schema.ts +0 -39
@@ -1,18 +1,18 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import "./chunk-7X6TPTJK.mjs";
2
+ import "./chunk-H6TITL7A.mjs";
3
3
  import {
4
4
  MarkdownCapabilities
5
- } from "./chunk-ACFGXH2K.mjs";
5
+ } from "./chunk-AYWAYBAY.mjs";
6
6
  import {
7
7
  getFallbackName,
8
8
  setFallbackName
9
- } from "./chunk-CWTFQSN7.mjs";
9
+ } from "./chunk-JDMMLOB6.mjs";
10
10
  import {
11
- DocumentType
12
- } from "./chunk-JEEQLO7C.mjs";
11
+ Markdown_exports
12
+ } from "./chunk-KIRZFVX5.mjs";
13
13
  import {
14
- MARKDOWN_PLUGIN
15
- } from "./chunk-CXG7GMYP.mjs";
14
+ meta
15
+ } from "./chunk-H4I2FGDZ.mjs";
16
16
 
17
17
  // src/components/MarkdownContainer.tsx
18
18
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
@@ -28,37 +28,252 @@ import { toLocalizedString as toLocalizedString2, useTranslation as useTranslati
28
28
  import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
29
29
  import { DataType } from "@dxos/schema";
30
30
 
31
+ // src/extensions.tsx
32
+ import React, { useMemo } from "react";
33
+ import { createRoot } from "react-dom/client";
34
+ import { LayoutAction, createIntent, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
35
+ import { debounceAndThrottle } from "@dxos/async";
36
+ import { invariant } from "@dxos/invariant";
37
+ import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
38
+ import { useIdentity } from "@dxos/react-client/halo";
39
+ import { Icon, ThemeProvider } from "@dxos/react-ui";
40
+ import { Cursor, EditorView, InputModeExtensions, autocomplete, createDataExtensions, decorateMarkdown, documentId, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter } from "@dxos/react-ui-editor";
41
+ import { defaultTx } from "@dxos/react-ui-theme";
42
+ import { isNotFalsy } from "@dxos/util";
43
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
44
+ var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
45
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
46
+ const identity = useIdentity();
47
+ const space = getSpace(document) ?? getSpace(text);
48
+ const baseExtensions = useMemo(() => createBaseExtensions({
49
+ document,
50
+ id,
51
+ text,
52
+ settings,
53
+ selectionManager,
54
+ viewMode,
55
+ previewOptions,
56
+ dispatch
57
+ }), [
58
+ document,
59
+ id,
60
+ text,
61
+ viewMode,
62
+ dispatch,
63
+ previewOptions,
64
+ settings,
65
+ settings.editorInputMode,
66
+ settings.folding,
67
+ settings.numberedHeadings,
68
+ settings.debug,
69
+ settings.typewriter,
70
+ selectionManager
71
+ ]);
72
+ const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
73
+ const pluginExtensions = useMemo(() => {
74
+ if (!document) {
75
+ return [];
76
+ }
77
+ return extensionProviders.flat().reduce((acc, provider) => {
78
+ const extension = typeof provider === "function" ? provider({
79
+ document
80
+ }) : provider;
81
+ if (extension) {
82
+ acc.push(extension);
83
+ }
84
+ return acc;
85
+ }, []);
86
+ }, [
87
+ extensionProviders,
88
+ document
89
+ ]);
90
+ return useMemo(() => [
91
+ // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
92
+ document && createDataExtensions({
93
+ id: document.id,
94
+ text: document.content.target && createDocAccessor(document.content.target, [
95
+ "content"
96
+ ]),
97
+ space,
98
+ identity
99
+ }),
100
+ text && id && createDataExtensions({
101
+ id,
102
+ text: createDocAccessor(text, [
103
+ "content"
104
+ ]),
105
+ space,
106
+ identity
107
+ }),
108
+ selectionState(editorStateStore),
109
+ document && listener({
110
+ onChange: (text2) => setFallbackName(document, text2)
111
+ }),
112
+ baseExtensions,
113
+ pluginExtensions
114
+ ].filter(isNotFalsy), [
115
+ baseExtensions,
116
+ pluginExtensions,
117
+ document,
118
+ document?.content?.target,
119
+ text,
120
+ id,
121
+ space,
122
+ identity
123
+ ]);
124
+ };
125
+ var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, query, viewMode, previewOptions }) => {
126
+ const extensions = [
127
+ selectionManager && selectionChange(selectionManager),
128
+ settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
129
+ settings.folding && folding()
130
+ ].filter(isNotFalsy);
131
+ if (viewMode !== "source") {
132
+ extensions.push(...[
133
+ formattingKeymap(),
134
+ decorateMarkdown({
135
+ selectionChangeDelay: 100,
136
+ numberedHeadings: settings.numberedHeadings ? {
137
+ from: 2
138
+ } : void 0,
139
+ // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
140
+ renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
141
+ void dispatch(createIntent(LayoutAction.Open, {
142
+ part: "main",
143
+ subject: [
144
+ id2
145
+ ],
146
+ options: {
147
+ pivotId: document ? fullyQualifiedId(document) : id2
148
+ }
149
+ }));
150
+ }) : void 0
151
+ }),
152
+ linkTooltip(renderLinkTooltip),
153
+ preview(previewOptions)
154
+ ]);
155
+ }
156
+ if (query) {
157
+ extensions.push(autocomplete({
158
+ onSearch: (text) => {
159
+ return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
160
+ label: object.name,
161
+ // TODO(burdon): Factor out URL builder.
162
+ apply: `[${object.name}](/${fullyQualifiedId(object)})`
163
+ } : void 0).filter(isNotFalsy);
164
+ }
165
+ }));
166
+ }
167
+ if (settings.debug) {
168
+ const items = settings.typewriter?.split(/[,\n]/) ?? "";
169
+ if (items) {
170
+ extensions.push(typewriter({
171
+ items
172
+ }));
173
+ }
174
+ }
175
+ return extensions;
176
+ };
177
+ var selectionChange = (selectionManager) => {
178
+ return EditorView.updateListener.of(debounceAndThrottle((update) => {
179
+ if (update.selectionSet) {
180
+ const id = update.state.facet(documentId);
181
+ const cursorConverter = update.state.facet(Cursor.converter);
182
+ const selection = update.state.selection;
183
+ const ranges = selection.ranges.map((range) => ({
184
+ from: cursorConverter.toCursor(range.from),
185
+ to: cursorConverter.toCursor(range.to)
186
+ })).filter(({ from, to }) => to > from);
187
+ selectionManager.updateMultiRange(id, ranges);
188
+ }
189
+ }, 100));
190
+ };
191
+ var style = {
192
+ hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
193
+ icon: "inline-block leading-none mis-1 cursor-pointer"
194
+ };
195
+ var createLinkRenderer = (onSelectObject) => (el, { url }) => {
196
+ const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
197
+ url.startsWith(window.location.origin);
198
+ const options = isInternal ? {
199
+ onClick: () => {
200
+ const qualifiedId = url.split("/").at(-1);
201
+ invariant(qualifiedId, "Invalid link format.", {
202
+ F: __dxlog_file,
203
+ L: 291,
204
+ S: void 0,
205
+ A: [
206
+ "qualifiedId",
207
+ "'Invalid link format.'"
208
+ ]
209
+ });
210
+ onSelectObject(qualifiedId);
211
+ }
212
+ } : {
213
+ href: url,
214
+ rel: "noreferrer",
215
+ target: "_blank"
216
+ };
217
+ renderRoot(el, /* @__PURE__ */ React.createElement("a", {
218
+ ...options,
219
+ className: style.hover
220
+ }, /* @__PURE__ */ React.createElement(Icon, {
221
+ icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
222
+ size: 4,
223
+ classNames: style.icon
224
+ })));
225
+ };
226
+ var renderLinkTooltip = (el, { url }) => {
227
+ const web = new URL(url);
228
+ renderRoot(el, /* @__PURE__ */ React.createElement("a", {
229
+ href: url,
230
+ rel: "noreferrer",
231
+ target: "_blank",
232
+ className: style.hover
233
+ }, web.origin, /* @__PURE__ */ React.createElement(Icon, {
234
+ icon: "ph--arrow-square-out--bold",
235
+ size: 4,
236
+ classNames: style.icon
237
+ })));
238
+ };
239
+ var renderRoot = (root, node) => {
240
+ createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
241
+ tx: defaultTx
242
+ }, node));
243
+ return root;
244
+ };
245
+
31
246
  // src/components/MarkdownEditor/MarkdownEditor.tsx
32
247
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
33
- import React, { forwardRef, useMemo as useMemo2, useEffect, useCallback, useImperativeHandle, useRef } from "react";
248
+ import React2, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo as useMemo3, useRef } from "react";
34
249
  import { useDropzone } from "react-dropzone";
35
- import { invariant as invariant2 } from "@dxos/invariant";
250
+ import { invariant as invariant3 } from "@dxos/invariant";
36
251
  import { toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
37
- import { CommandMenu, EditorToolbar, RefPopover, addLink, createElement, coreSlashCommands, createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorGutter, editorSlots, filterItems, linkSlashCommands, processEditorPayload, stackItemContentEditorClassNames, useEditorToolbarState, useFormattingState, useTextEditor, useCommandMenu } from "@dxos/react-ui-editor";
252
+ import { CommandMenu, EditorToolbar, RefPopover, addLink, coreSlashCommands, createBasicExtensions, createElement, createMarkdownExtensions, createThemeExtensions, dropFile, editorGutter, editorSlots, filterItems, linkSlashCommands, processEditorPayload, stackItemContentEditorClassNames, useCommandMenu, useEditorToolbarState, useFormattingState, useTextEditor } from "@dxos/react-ui-editor";
38
253
  import { StackItem } from "@dxos/react-ui-stack";
39
- import { isNotFalsy, isNonNullable } from "@dxos/util";
254
+ import { isNonNullable, isNotFalsy as isNotFalsy2 } from "@dxos/util";
40
255
 
41
256
  // src/hooks/useSelectCurrentThread.tsx
42
- import { EditorView } from "@codemirror/view";
257
+ import { EditorView as EditorView2 } from "@codemirror/view";
43
258
  import { Schema } from "effect";
44
- import { useMemo } from "react";
45
- import { createResolver, LayoutAction, useIntentResolver } from "@dxos/app-framework";
46
- import { invariant } from "@dxos/invariant";
47
- import { Cursor, setSelection } from "@dxos/react-ui-editor";
48
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
259
+ import { useMemo as useMemo2 } from "react";
260
+ import { LayoutAction as LayoutAction2, createResolver, useIntentResolver } from "@dxos/app-framework";
261
+ import { invariant as invariant2 } from "@dxos/invariant";
262
+ import { Cursor as Cursor2, setSelection } from "@dxos/react-ui-editor";
263
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
49
264
  var useSelectCurrentThread = (editorView, documentId2) => {
50
- const scrollIntoViewResolver = useMemo(() => createResolver({
51
- intent: LayoutAction.UpdateLayout,
265
+ const scrollIntoViewResolver = useMemo2(() => createResolver({
266
+ intent: LayoutAction2.UpdateLayout,
52
267
  position: "hoist",
53
268
  filter: (data) => {
54
- if (!Schema.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
269
+ if (!Schema.is(LayoutAction2.ScrollIntoView.fields.input)(data)) {
55
270
  return false;
56
271
  }
57
272
  return !!editorView && data.subject === documentId2 && !!data.options?.cursor;
58
273
  },
59
274
  resolve: ({ options: { cursor } }) => {
60
- invariant(editorView, "Editor view is not defined.", {
61
- F: __dxlog_file,
275
+ invariant2(editorView, "Editor view is not defined.", {
276
+ F: __dxlog_file2,
62
277
  L: 32,
63
278
  S: void 0,
64
279
  A: [
@@ -66,14 +281,14 @@ var useSelectCurrentThread = (editorView, documentId2) => {
66
281
  "'Editor view is not defined.'"
67
282
  ]
68
283
  });
69
- const range = Cursor.getRangeFromCursor(editorView.state, cursor);
284
+ const range = Cursor2.getRangeFromCursor(editorView.state, cursor);
70
285
  if (range) {
71
286
  const selection = editorView.state.selection.main.from !== range.from ? {
72
287
  anchor: range.from
73
288
  } : void 0;
74
289
  const effects = [
75
290
  // NOTE: This does not use the DOM scrollIntoView function.
76
- EditorView.scrollIntoView(range.from, {
291
+ EditorView2.scrollIntoView(range.from, {
77
292
  y: "start",
78
293
  yMargin: 96
79
294
  })
@@ -95,11 +310,11 @@ var useSelectCurrentThread = (editorView, documentId2) => {
95
310
  documentId2,
96
311
  editorView
97
312
  ]);
98
- useIntentResolver(MARKDOWN_PLUGIN, scrollIntoViewResolver);
313
+ useIntentResolver(meta.id, scrollIntoViewResolver);
99
314
  };
100
315
 
101
316
  // src/components/MarkdownEditor/MarkdownEditor.tsx
102
- var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
317
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
103
318
  var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery, ...props }) => {
104
319
  var _effect = _useSignals();
105
320
  try {
@@ -121,7 +336,7 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
121
336
  onLinkQuery,
122
337
  slashCommandGroups
123
338
  ]);
124
- const options = useMemo2(() => {
339
+ const options = useMemo3(() => {
125
340
  const trigger = onLinkQuery ? [
126
341
  "/",
127
342
  "@"
@@ -154,21 +369,21 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
154
369
  getMenu
155
370
  ]);
156
371
  const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = useCommandMenu(options);
157
- const extensions = useMemo2(() => [
372
+ const extensions = useMemo3(() => [
158
373
  _extensions,
159
374
  commandMenu
160
- ].filter(isNotFalsy), [
375
+ ].filter(isNotFalsy2), [
161
376
  _extensions,
162
377
  commandMenu
163
378
  ]);
164
- return /* @__PURE__ */ React.createElement(RefPopover, {
379
+ return /* @__PURE__ */ React2.createElement(RefPopover, {
165
380
  modal: false,
166
381
  ...refPopoverProps
167
- }, /* @__PURE__ */ React.createElement(MarkdownEditorImpl, {
382
+ }, /* @__PURE__ */ React2.createElement(MarkdownEditorImpl, {
168
383
  ref: viewRef,
169
384
  ...props,
170
385
  extensions
171
- }), /* @__PURE__ */ React.createElement(CommandMenu, {
386
+ }), /* @__PURE__ */ React2.createElement(CommandMenu, {
172
387
  groups: groupsRef.current,
173
388
  currentItem,
174
389
  onSelect
@@ -180,16 +395,16 @@ var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery
180
395
  var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", initialValue, customActions, editorStateStore, extensions, extensionProviders, scrollPastEnd, toolbar, viewMode, onFileUpload, onViewModeChange }, forwardedRef) => {
181
396
  var _effect = _useSignals();
182
397
  try {
183
- const { t } = useTranslation(MARKDOWN_PLUGIN);
398
+ const { t } = useTranslation(meta.id);
184
399
  const { themeMode } = useThemeContext();
185
400
  const toolbarState = useEditorToolbarState({
186
401
  viewMode
187
402
  });
188
403
  const formattingObserver = useFormattingState(toolbarState);
189
- const { scrollTo, selection } = useMemo2(() => editorStateStore?.getState(id) ?? {}, [
404
+ const { scrollTo, selection } = useMemo3(() => editorStateStore?.getState(id) ?? {}, [
190
405
  id
191
406
  ]);
192
- const providerExtensions = useMemo2(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
407
+ const providerExtensions = useMemo3(() => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable), [
193
408
  extensionProviders
194
409
  ]);
195
410
  const handleDrop = async (view, { files }) => {
@@ -209,7 +424,8 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
209
424
  createBasicExtensions({
210
425
  readOnly: viewMode === "readonly",
211
426
  placeholder: t("editor placeholder"),
212
- scrollPastEnd: role === "section" ? false : scrollPastEnd
427
+ scrollPastEnd: role === "section" ? false : scrollPastEnd,
428
+ search: true
213
429
  }),
214
430
  createMarkdownExtensions({
215
431
  themeMode
@@ -225,7 +441,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
225
441
  }),
226
442
  providerExtensions,
227
443
  extensions
228
- ].filter(isNotFalsy),
444
+ ].filter(isNotFalsy2),
229
445
  ...role !== "section" && {
230
446
  id,
231
447
  scrollTo,
@@ -284,9 +500,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
284
500
  onFileUpload
285
501
  ]);
286
502
  const getView = useCallback(() => {
287
- invariant2(editorView, void 0, {
288
- F: __dxlog_file2,
289
- L: 240,
503
+ invariant3(editorView, void 0, {
504
+ F: __dxlog_file3,
505
+ L: 241,
290
506
  S: void 0,
291
507
  A: [
292
508
  "editorView",
@@ -308,9 +524,9 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
308
524
  }, [
309
525
  onFileUpload
310
526
  ]);
311
- return /* @__PURE__ */ React.createElement(StackItem.Content, {
527
+ return /* @__PURE__ */ React2.createElement(StackItem.Content, {
312
528
  toolbar: !!toolbar
313
- }, toolbar && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(EditorToolbar, {
529
+ }, toolbar && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(EditorToolbar, {
314
530
  attendableId: id,
315
531
  role,
316
532
  state: toolbarState,
@@ -318,7 +534,7 @@ var MarkdownEditorImpl = /* @__PURE__ */ forwardRef(({ id, role = "article", ini
318
534
  getView,
319
535
  image: handleImageUpload,
320
536
  viewMode: handleViewModeChange
321
- }), /* @__PURE__ */ React.createElement("input", getInputProps())), /* @__PURE__ */ React.createElement("div", {
537
+ }), /* @__PURE__ */ React2.createElement("input", getInputProps())), /* @__PURE__ */ React2.createElement("div", {
322
538
  role: "none",
323
539
  ref: parentRef,
324
540
  "data-testid": "composer.markdownRoot",
@@ -342,228 +558,13 @@ var useTest = (view) => {
342
558
  ]);
343
559
  };
344
560
 
345
- // src/extensions.tsx
346
- import React2, { useMemo as useMemo3 } from "react";
347
- import { createRoot } from "react-dom/client";
348
- import { createIntent, LayoutAction as LayoutAction2, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
349
- import { debounceAndThrottle } from "@dxos/async";
350
- import { invariant as invariant3 } from "@dxos/invariant";
351
- import { createDocAccessor, fullyQualifiedId, getSpace } from "@dxos/react-client/echo";
352
- import { useIdentity } from "@dxos/react-client/halo";
353
- import { Icon, ThemeProvider } from "@dxos/react-ui";
354
- import { InputModeExtensions, createDataExtensions, autocomplete, decorateMarkdown, folding, formattingKeymap, linkTooltip, listener, preview, selectionState, typewriter, EditorView as EditorView2, documentId, Cursor as Cursor2 } from "@dxos/react-ui-editor";
355
- import { defaultTx } from "@dxos/react-ui-theme";
356
- import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
357
- var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-markdown/src/extensions.tsx";
358
- var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore, previewOptions }) => {
359
- const { dispatchPromise: dispatch } = useIntentDispatcher();
360
- const identity = useIdentity();
361
- const space = getSpace(document) ?? getSpace(text);
362
- const baseExtensions = useMemo3(() => createBaseExtensions({
363
- document,
364
- id,
365
- text,
366
- settings,
367
- selectionManager,
368
- viewMode,
369
- previewOptions,
370
- dispatch
371
- }), [
372
- document,
373
- id,
374
- text,
375
- viewMode,
376
- dispatch,
377
- previewOptions,
378
- settings,
379
- settings.editorInputMode,
380
- settings.folding,
381
- settings.numberedHeadings,
382
- settings.debug,
383
- settings.typewriter,
384
- selectionManager
385
- ]);
386
- const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);
387
- const pluginExtensions = useMemo3(() => {
388
- if (!document) {
389
- return [];
390
- }
391
- return extensionProviders.flat().reduce((acc, provider) => {
392
- const extension = typeof provider === "function" ? provider({
393
- document
394
- }) : provider;
395
- if (extension) {
396
- acc.push(extension);
397
- }
398
- return acc;
399
- }, []);
400
- }, [
401
- extensionProviders,
402
- document
403
- ]);
404
- return useMemo3(() => [
405
- // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
406
- document && createDataExtensions({
407
- id: document.id,
408
- text: document.content.target && createDocAccessor(document.content.target, [
409
- "content"
410
- ]),
411
- space,
412
- identity
413
- }),
414
- text && id && createDataExtensions({
415
- id,
416
- text: createDocAccessor(text, [
417
- "content"
418
- ]),
419
- space,
420
- identity
421
- }),
422
- selectionState(editorStateStore),
423
- document && listener({
424
- onChange: (text2) => setFallbackName(document, text2)
425
- }),
426
- baseExtensions,
427
- pluginExtensions
428
- ].filter(isNotFalsy2), [
429
- baseExtensions,
430
- pluginExtensions,
431
- document,
432
- document?.content?.target,
433
- text,
434
- id,
435
- space,
436
- identity
437
- ]);
438
- };
439
- var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, query, viewMode, previewOptions }) => {
440
- const extensions = [
441
- selectionManager && selectionChange(selectionManager),
442
- settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
443
- settings.folding && folding()
444
- ].filter(isNotFalsy2);
445
- if (viewMode !== "source") {
446
- extensions.push(...[
447
- formattingKeymap(),
448
- decorateMarkdown({
449
- selectionChangeDelay: 100,
450
- numberedHeadings: settings.numberedHeadings ? {
451
- from: 2
452
- } : void 0,
453
- // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.
454
- renderLinkButton: dispatch && (document || id) ? createLinkRenderer((id2) => {
455
- void dispatch(createIntent(LayoutAction2.Open, {
456
- part: "main",
457
- subject: [
458
- id2
459
- ],
460
- options: {
461
- pivotId: document ? fullyQualifiedId(document) : id2
462
- }
463
- }));
464
- }) : void 0
465
- }),
466
- linkTooltip(renderLinkTooltip),
467
- preview(previewOptions)
468
- ]);
469
- }
470
- if (query) {
471
- extensions.push(autocomplete({
472
- onSearch: (text) => {
473
- return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
474
- label: object.name,
475
- // TODO(burdon): Factor out URL builder.
476
- apply: `[${object.name}](/${fullyQualifiedId(object)})`
477
- } : void 0).filter(isNotFalsy2);
478
- }
479
- }));
480
- }
481
- if (settings.debug) {
482
- const items = settings.typewriter?.split(/[,\n]/) ?? "";
483
- if (items) {
484
- extensions.push(typewriter({
485
- items
486
- }));
487
- }
488
- }
489
- return extensions;
490
- };
491
- var selectionChange = (selectionManager) => {
492
- return EditorView2.updateListener.of(debounceAndThrottle((update) => {
493
- if (update.selectionSet) {
494
- const id = update.state.facet(documentId);
495
- const cursorConverter = update.state.facet(Cursor2.converter);
496
- const selection = update.state.selection;
497
- const ranges = selection.ranges.map((range) => ({
498
- from: cursorConverter.toCursor(range.from),
499
- to: cursorConverter.toCursor(range.to)
500
- })).filter(({ from, to }) => to > from);
501
- selectionManager.updateMultiRange(id, ranges);
502
- }
503
- }, 100));
504
- };
505
- var style = {
506
- hover: "rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400",
507
- icon: "inline-block leading-none mis-1 cursor-pointer"
508
- };
509
- var createLinkRenderer = (onSelectObject) => (el, { url }) => {
510
- const isInternal = url.startsWith("/") || // TODO(wittjosiah): This should probably be parsed out on paste?
511
- url.startsWith(window.location.origin);
512
- const options = isInternal ? {
513
- onClick: () => {
514
- const qualifiedId = url.split("/").at(-1);
515
- invariant3(qualifiedId, "Invalid link format.", {
516
- F: __dxlog_file3,
517
- L: 291,
518
- S: void 0,
519
- A: [
520
- "qualifiedId",
521
- "'Invalid link format.'"
522
- ]
523
- });
524
- onSelectObject(qualifiedId);
525
- }
526
- } : {
527
- href: url,
528
- rel: "noreferrer",
529
- target: "_blank"
530
- };
531
- renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
532
- ...options,
533
- className: style.hover
534
- }, /* @__PURE__ */ React2.createElement(Icon, {
535
- icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
536
- size: 4,
537
- classNames: style.icon
538
- })));
539
- };
540
- var renderLinkTooltip = (el, { url }) => {
541
- const web = new URL(url);
542
- renderRoot(el, /* @__PURE__ */ React2.createElement("a", {
543
- href: url,
544
- rel: "noreferrer",
545
- target: "_blank",
546
- className: style.hover
547
- }, web.origin, /* @__PURE__ */ React2.createElement(Icon, {
548
- icon: "ph--arrow-square-out--bold",
549
- size: 4,
550
- classNames: style.icon
551
- })));
552
- };
553
- var renderRoot = (root, node) => {
554
- createRoot(root).render(/* @__PURE__ */ React2.createElement(ThemeProvider, {
555
- tx: defaultTx
556
- }, node));
557
- return root;
558
- };
559
-
560
561
  // src/components/MarkdownContainer.tsx
561
562
  var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
562
563
  var _effect = _useSignals2();
563
564
  try {
564
565
  const { t } = useTranslation2();
565
566
  const scrollPastEnd = role === "article";
566
- const doc = Obj.instanceOf(DocumentType, object) ? object : void 0;
567
+ const doc = Obj.instanceOf(Markdown_exports.Document, object) ? object : void 0;
567
568
  const text = Obj.instanceOf(DataType.Text, object) ? object : void 0;
568
569
  const [previewBlocks, setPreviewBlocks] = useState([]);
569
570
  const previewOptions = useMemo4(() => ({
@@ -774,6 +775,7 @@ var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
774
775
  var MarkdownContainer_default = MarkdownContainer;
775
776
  export {
776
777
  DocumentEditor,
778
+ MarkdownContainer,
777
779
  MarkdownContainer_default as default
778
780
  };
779
- //# sourceMappingURL=MarkdownContainer-VOUHL6IU.mjs.map
781
+ //# sourceMappingURL=MarkdownContainer-BJRNCXJZ.mjs.map