@dxos/plugin-markdown 0.8.4-main.f9ba587 → 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 (197) hide show
  1. package/dist/lib/browser/{MarkdownPreview-XYP2VXI2.mjs → MarkdownCard-IMCR4A4V.mjs} +17 -17
  2. package/dist/lib/browser/MarkdownCard-IMCR4A4V.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownContainer-BO5MZWA4.mjs → MarkdownContainer-VGJPHMVG.mjs} +274 -265
  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-7DKUUZSJ.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-5JRBJCZM.mjs → chunk-MVL4K3OD.mjs} +8 -6
  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-NAXBGUR3.mjs → react-surface-NL3BZR6H.mjs} +28 -25
  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-JEXD3KSQ.mjs → MarkdownCard-JV2YDV3M.mjs} +17 -17
  34. package/dist/lib/node-esm/MarkdownCard-JV2YDV3M.mjs.map +7 -0
  35. package/dist/lib/node-esm/{MarkdownContainer-J2NVCX2H.mjs → MarkdownContainer-BJRNCXJZ.mjs} +274 -265
  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-YRMRPW7A.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-Q5DIKLN5.mjs → chunk-Z4XQ6C3D.mjs} +8 -6
  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-BSAGEIN6.mjs → react-surface-XJ6ODCBE.mjs} +28 -25
  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/MarkdownCard/MarkdownCard.stories.d.ts +42 -0
  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 +4 -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 +16 -13
  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 +22 -20
  124. package/src/capabilities/settings.ts +3 -3
  125. package/src/capabilities/state.ts +8 -8
  126. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +79 -0
  127. package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +19 -15
  128. package/src/components/MarkdownCard/index.ts +9 -0
  129. package/src/components/MarkdownContainer.stories.tsx +8 -11
  130. package/src/components/MarkdownContainer.tsx +30 -16
  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 +25 -19
  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 +4 -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-BO5MZWA4.mjs.map +0 -7
  149. package/dist/lib/browser/MarkdownPreview-XYP2VXI2.mjs.map +0 -7
  150. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
  151. package/dist/lib/browser/app-graph-serializer-7DKUUZSJ.mjs.map +0 -7
  152. package/dist/lib/browser/artifact-definition-JSUG6XPF.mjs +0 -145
  153. package/dist/lib/browser/artifact-definition-JSUG6XPF.mjs.map +0 -7
  154. package/dist/lib/browser/chunk-5JRBJCZM.mjs.map +0 -7
  155. package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
  156. package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
  157. package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
  158. package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-IZLATPXQ.mjs +0 -20
  160. package/dist/lib/browser/chunk-IZLATPXQ.mjs.map +0 -7
  161. package/dist/lib/browser/chunk-LFML7LC6.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-NAXBGUR3.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-J2NVCX2H.mjs.map +0 -7
  169. package/dist/lib/node-esm/MarkdownPreview-JEXD3KSQ.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-YRMRPW7A.mjs.map +0 -7
  172. package/dist/lib/node-esm/artifact-definition-6C2MOHGP.mjs +0 -146
  173. package/dist/lib/node-esm/artifact-definition-6C2MOHGP.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
  175. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
  176. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
  177. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
  178. package/dist/lib/node-esm/chunk-FWKOJW6J.mjs +0 -22
  179. package/dist/lib/node-esm/chunk-FWKOJW6J.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-Q5DIKLN5.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-BSAGEIN6.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 +0 -17
  190. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  191. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  192. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  193. package/dist/types/src/types/schema.d.ts +0 -35
  194. package/dist/types/src/types/schema.d.ts.map +0 -1
  195. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -74
  196. package/src/components/MarkdownPreview/index.ts +0 -9
  197. package/src/types/schema.ts +0 -39
@@ -5,7 +5,7 @@
5
5
  import { pipe } from 'effect';
6
6
  import React, { useCallback } from 'react';
7
7
 
8
- import { chain, createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { LayoutAction, chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';
9
9
  import { Obj } from '@dxos/echo';
10
10
  import { type PreviewProps } from '@dxos/plugin-preview';
11
11
  import { fullyQualifiedId } from '@dxos/react-client/echo';
@@ -13,13 +13,13 @@ import { Button, Icon, useTranslation } from '@dxos/react-ui';
13
13
  import { Card } from '@dxos/react-ui-stack';
14
14
  import { DataType } from '@dxos/schema';
15
15
 
16
- import { MARKDOWN_PLUGIN } from '../../meta';
17
- import { DocumentType } from '../../types';
16
+ import { meta } from '../../meta';
17
+ import { Markdown } from '../../types';
18
18
  import { getAbstract, getFallbackName } from '../../util';
19
19
 
20
20
  // TODO(burdon): Factor out.
21
- const getTitle = (subject: DocumentType | DataType.Text, fallback: string) => {
22
- if (Obj.instanceOf(DocumentType, subject)) {
21
+ const getTitle = (subject: Markdown.Document | DataType.Text, fallback: string) => {
22
+ if (Obj.instanceOf(Markdown.Document, subject)) {
23
23
  return subject.name ?? subject.fallbackName ?? getFallbackName(subject.content?.target?.content ?? fallback);
24
24
  } else if (Obj.instanceOf(DataType.Text, subject)) {
25
25
  return getFallbackName(subject.content);
@@ -27,17 +27,19 @@ const getTitle = (subject: DocumentType | DataType.Text, fallback: string) => {
27
27
  };
28
28
 
29
29
  // TODO(burdon): Factor out.
30
- const getSnippet = (subject: DocumentType | DataType.Text, fallback: string) => {
31
- if (Obj.instanceOf(DocumentType, subject)) {
30
+ const getSnippet = (subject: Markdown.Document | DataType.Text, fallback: string) => {
31
+ if (Obj.instanceOf(Markdown.Document, subject)) {
32
32
  return getAbstract(subject.content?.target?.content ?? fallback);
33
33
  } else if (Obj.instanceOf(DataType.Text, subject)) {
34
34
  return getAbstract(subject.content);
35
35
  }
36
36
  };
37
37
 
38
- export const MarkdownPreview = ({ subject, role }: PreviewProps<DocumentType | DataType.Text>) => {
38
+ export type MarkdownCardProps = PreviewProps<Markdown.Document | DataType.Text>;
39
+
40
+ export const MarkdownCard = ({ subject, role }: MarkdownCardProps) => {
39
41
  const { dispatchPromise: dispatch } = useIntentDispatcher();
40
- const { t } = useTranslation(MARKDOWN_PLUGIN);
42
+ const { t } = useTranslation(meta.id);
41
43
  const snippet = getSnippet(subject, t('fallback abstract'));
42
44
 
43
45
  // TODO(wittjosiah): Factor out so this component isn't dependent on the app framework.
@@ -60,12 +62,14 @@ export const MarkdownPreview = ({ subject, role }: PreviewProps<DocumentType | D
60
62
  <Card.SurfaceRoot role={role}>
61
63
  <Card.Heading>{getTitle(subject, t('fallback title'))}</Card.Heading>
62
64
  {snippet && <Card.Text classNames='line-clamp-3 break-words col-span-2'>{snippet}</Card.Text>}
63
- <Card.Chrome>
64
- <Button onClick={handleNavigate}>
65
- <span className='grow'>{t('navigate to document label')}</span>
66
- <Icon icon='ph--arrow-right--regular' />
67
- </Button>
68
- </Card.Chrome>
65
+ {role === 'card--popover' && (
66
+ <Card.Chrome>
67
+ <Button onClick={handleNavigate}>
68
+ <span className='grow'>{t('navigate to document label')}</span>
69
+ <Icon icon='ph--arrow-right--regular' />
70
+ </Button>
71
+ </Card.Chrome>
72
+ )}
69
73
  </Card.SurfaceRoot>
70
74
  );
71
75
  };
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { MarkdownCard } from './MarkdownCard';
6
+
7
+ export * from './MarkdownCard';
8
+
9
+ export default MarkdownCard;
@@ -7,10 +7,10 @@ import '@dxos-theme';
7
7
  import { type Meta } from '@storybook/react-vite';
8
8
  import React, { useMemo } from 'react';
9
9
 
10
- import { Capabilities, contributes, IntentPlugin, SettingsPlugin, Surface } from '@dxos/app-framework';
10
+ import { Capabilities, IntentPlugin, SettingsPlugin, Surface, contributes } from '@dxos/app-framework';
11
11
  import { withPluginManager } from '@dxos/app-framework/testing';
12
12
  import { todo } from '@dxos/debug';
13
- import { Obj, Query, Ref, Type } from '@dxos/echo';
13
+ import { Query, Type } from '@dxos/echo';
14
14
  import { AttentionPlugin } from '@dxos/plugin-attention';
15
15
  import { ClientPlugin } from '@dxos/plugin-client';
16
16
  import { GraphPlugin } from '@dxos/plugin-graph';
@@ -22,12 +22,12 @@ import { faker } from '@dxos/random';
22
22
  import { useQuery, useSpace } from '@dxos/react-client/echo';
23
23
  import { defaultTx } from '@dxos/react-ui-theme';
24
24
  import { DataType } from '@dxos/schema';
25
- import { createObjectFactory, Testing, type ValueGenerator } from '@dxos/schema/testing';
25
+ import { Testing, type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
26
26
  import { withLayout } from '@dxos/storybook-utils';
27
27
 
28
28
  import { MarkdownPlugin } from '../MarkdownPlugin';
29
29
  import { translations } from '../translations';
30
- import { DocumentType } from '../types';
30
+ import { Markdown } from '../types';
31
31
 
32
32
  faker.seed(1);
33
33
 
@@ -35,7 +35,7 @@ const generator: ValueGenerator = faker as any;
35
35
 
36
36
  const DefaultStory = () => {
37
37
  const space = useSpace();
38
- const [doc] = useQuery(space, Query.type(DocumentType));
38
+ const [doc] = useQuery(space, Query.type(Markdown.Document));
39
39
  const data = useMemo(() => ({ subject: doc }), [doc]);
40
40
 
41
41
  return <Surface role='article' data={data} />;
@@ -51,16 +51,13 @@ const meta: Meta<typeof DefaultStory> = {
51
51
  ThemePlugin({ tx: defaultTx }),
52
52
  StorybookLayoutPlugin(),
53
53
  ClientPlugin({
54
- types: [DocumentType, DataType.Text, Testing.Contact],
55
- onClientInitialized: async (_, client) => {
54
+ types: [Markdown.Document, DataType.Text, Testing.Contact],
55
+ onClientInitialized: async ({ client }) => {
56
56
  await client.halo.createIdentity();
57
57
  await client.spaces.waitUntilReady();
58
58
  await client.spaces.default.waitUntilReady();
59
59
  const space = client.spaces.default;
60
- const doc = Obj.make(DocumentType, {
61
- name: 'Test',
62
- content: Ref.make(Obj.make(DataType.Text, { content: '# Test\n\n' })),
63
- });
60
+ const doc = Markdown.makeDocument({ name: 'Test', content: '# Test\n\n' });
64
61
  space.db.add(doc);
65
62
  const createObjects = createObjectFactory(space.db, generator);
66
63
  await createObjects([{ type: Testing.Contact, count: 10 }]);
@@ -7,7 +7,8 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
7
7
  import { createPortal } from 'react-dom';
8
8
 
9
9
  import { Capabilities, Surface, useAppGraph, useCapabilities, usePluginManager } from '@dxos/app-framework';
10
- import { DXN, Filter, Obj, Query } from '@dxos/echo';
10
+ import { DXN, Filter, Obj, Query, Type } from '@dxos/echo';
11
+ import { ClientCapabilities } from '@dxos/plugin-client';
11
12
  import { SpaceCapabilities } from '@dxos/plugin-space';
12
13
  import { fullyQualifiedId, getSpace, useQuery, useSpace } from '@dxos/react-client/echo';
13
14
  import { toLocalizedString, useTranslation } from '@dxos/react-ui';
@@ -15,29 +16,30 @@ import { type SelectionManager } from '@dxos/react-ui-attention';
15
16
  import {
16
17
  type CommandMenuGroup,
17
18
  type CommandMenuItem,
18
- insertAtCursor,
19
- insertAtLineStart,
20
19
  type PreviewLinkRef,
21
20
  type PreviewOptions,
21
+ insertAtCursor,
22
+ insertAtLineStart,
22
23
  } from '@dxos/react-ui-editor';
23
24
  import { DataType } from '@dxos/schema';
24
25
 
25
- import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
26
26
  import { useExtensions } from '../extensions';
27
- import { DocumentType, type MarkdownSettingsProps } from '../types';
27
+ import { Markdown } from '../types';
28
28
  import { getFallbackName } from '../util';
29
29
 
30
+ import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
31
+
30
32
  export type MarkdownContainerProps = Pick<
31
33
  MarkdownEditorProps,
32
34
  'role' | 'extensionProviders' | 'viewMode' | 'editorStateStore' | 'onViewModeChange'
33
35
  > & {
34
36
  id: string;
35
- object: DocumentType | DataType.Text | any;
36
- settings: MarkdownSettingsProps;
37
+ object: Markdown.Document | DataType.Text | any;
38
+ settings: Markdown.Settings;
37
39
  selectionManager?: SelectionManager;
38
40
  };
39
41
 
40
- const MarkdownContainer = ({
42
+ export const MarkdownContainer = ({
41
43
  id,
42
44
  role,
43
45
  object,
@@ -49,7 +51,7 @@ const MarkdownContainer = ({
49
51
  }: MarkdownContainerProps) => {
50
52
  const { t } = useTranslation();
51
53
  const scrollPastEnd = role === 'article';
52
- const doc = Obj.instanceOf(DocumentType, object) ? object : undefined;
54
+ const doc = Obj.instanceOf(Markdown.Document, object) ? object : undefined;
53
55
  const text = Obj.instanceOf(DataType.Text, object) ? object : undefined;
54
56
  const [previewBlocks, setPreviewBlocks] = useState<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);
55
57
  const previewOptions = useMemo(
@@ -83,18 +85,30 @@ const MarkdownContainer = ({
83
85
  );
84
86
  const space = getSpace(object);
85
87
  const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
86
- const filter = useMemo(() => Filter.or(...objectForms.map((form) => Filter.type(form.objectSchema))), [objectForms]);
88
+ const schemaWhiteList = useCapabilities(ClientCapabilities.SchemaWhiteList);
89
+ const filter = useMemo(
90
+ () =>
91
+ Filter.or(
92
+ ...objectForms.map((form) => Filter.type(form.objectSchema)),
93
+ ...schemaWhiteList.flat().map((schema) => Filter.typename(Type.getTypename(schema))),
94
+ ),
95
+ [objectForms, schemaWhiteList],
96
+ );
87
97
  const onLinkQuery = useCallback(
88
98
  async (query?: string): Promise<CommandMenuGroup[]> => {
89
- const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? '';
99
+ const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : (query?.toLowerCase() ?? '');
90
100
  const results = await space?.db.query(Query.select(filter)).run();
91
101
  // TODO(wittjosiah): Use `Obj.Any` type.
92
102
  const getLabel = (object: any) => {
103
+ const label = Obj.getLabel(object);
104
+ if (label) {
105
+ return label;
106
+ }
107
+
108
+ // TODO(wittjosiah): Remove metadata labels.
93
109
  const type = Obj.getTypename(object)!;
94
110
  const metadata = resolve(type);
95
- return (
96
- metadata.label?.(object) || object.name || ['object name placeholder', { ns: type, default: 'New object' }]
97
- );
111
+ return metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New object' }];
98
112
  };
99
113
  const items =
100
114
  results?.objects
@@ -181,12 +195,12 @@ const PreviewBlock = ({ link, el }: { link: PreviewLinkRef; el: HTMLElement }) =
181
195
  const [subject] = useQuery(space, Query.select(Filter.ids(echoDXN?.echoId ?? '')));
182
196
  const data = useMemo(() => ({ subject }), [subject]);
183
197
 
184
- return createPortal(<Surface role='card--document' data={data} limit={1} />, el);
198
+ return createPortal(<Surface role='card--transclusion' data={data} limit={1} />, el);
185
199
  };
186
200
 
187
201
  type DocumentEditorProps = Omit<MarkdownContainerProps, 'object' | 'extensionProviders' | 'editorStateStore'> &
188
202
  Pick<MarkdownEditorProps, 'id' | 'scrollPastEnd' | 'extensions' | 'onLinkQuery'> & {
189
- document: DocumentType;
203
+ document: Markdown.Document;
190
204
  };
191
205
 
192
206
  export const DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }: DocumentEditorProps) => {
@@ -14,9 +14,10 @@ import { withAttention } from '@dxos/react-ui-attention/testing';
14
14
  import { automerge, translations as editorTranslations } from '@dxos/react-ui-editor';
15
15
  import { withLayout, withTheme } from '@dxos/storybook-utils';
16
16
 
17
- import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
18
17
  import { translations } from '../../translations';
19
18
 
19
+ import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
20
+
20
21
  const content = Array.from({ length: 100 }, (_, i) => `Line ${i + 1}`).join('\n');
21
22
 
22
23
  type StoryProps = MarkdownEditorProps & {
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
- import React, { forwardRef, useMemo, useEffect, useCallback, useImperativeHandle, useRef } from 'react';
6
+ import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
7
7
  import { useDropzone } from 'react-dropzone';
8
8
 
9
9
  import { type FileInfo } from '@dxos/app-framework';
@@ -20,11 +20,12 @@ import {
20
20
  type EditorToolbarActionGraphProps,
21
21
  type EditorViewMode,
22
22
  RefPopover,
23
+ type UseCommandMenuOptions,
23
24
  type UseTextEditorProps,
24
25
  addLink,
25
- createElement,
26
26
  coreSlashCommands,
27
27
  createBasicExtensions,
28
+ createElement,
28
29
  createMarkdownExtensions,
29
30
  createThemeExtensions,
30
31
  dropFile,
@@ -34,26 +35,25 @@ import {
34
35
  linkSlashCommands,
35
36
  processEditorPayload,
36
37
  stackItemContentEditorClassNames,
38
+ useCommandMenu,
37
39
  useEditorToolbarState,
38
40
  useFormattingState,
39
41
  useTextEditor,
40
- useCommandMenu,
41
- type UseCommandMenuOptions,
42
42
  } from '@dxos/react-ui-editor';
43
43
  import { StackItem } from '@dxos/react-ui-stack';
44
- import { isNotFalsy, isNonNullable } from '@dxos/util';
44
+ import { isNonNullable, isNotFalsy } from '@dxos/util';
45
45
 
46
46
  import { useSelectCurrentThread } from '../../hooks';
47
- import { MARKDOWN_PLUGIN } from '../../meta';
47
+ import { meta } from '../../meta';
48
48
  import { type MarkdownPluginState } from '../../types';
49
49
 
50
50
  export type MarkdownEditorProps = {
51
51
  id: string;
52
52
  role?: string;
53
+ toolbar?: boolean;
53
54
  inputMode?: EditorInputMode;
54
55
  scrollPastEnd?: boolean;
55
56
  slashCommandGroups?: CommandMenuGroup[];
56
- toolbar?: boolean;
57
57
  customActions?: EditorToolbarActionGraphProps['customActions'];
58
58
  // TODO(wittjosiah): Generalize custom toolbar actions (e.g. comment, upload, etc.)
59
59
  viewMode?: EditorViewMode;
@@ -147,7 +147,7 @@ const MarkdownEditorImpl = forwardRef<EditorView | undefined, MarkdownEditorProp
147
147
  },
148
148
  forwardedRef,
149
149
  ) => {
150
- const { t } = useTranslation(MARKDOWN_PLUGIN);
150
+ const { t } = useTranslation(meta.id);
151
151
  const { themeMode } = useThemeContext();
152
152
  const toolbarState = useEditorToolbarState({ viewMode });
153
153
  const formattingObserver = useFormattingState(toolbarState);
@@ -185,6 +185,7 @@ const MarkdownEditorImpl = forwardRef<EditorView | undefined, MarkdownEditorProp
185
185
  readOnly: viewMode === 'readonly',
186
186
  placeholder: t('editor placeholder'),
187
187
  scrollPastEnd: role === 'section' ? false : scrollPastEnd,
188
+ search: true,
188
189
  }),
189
190
  createMarkdownExtensions({ themeMode }),
190
191
  createThemeExtensions({ themeMode, syntaxHighlighting: true, slots: editorSlots }),
@@ -8,11 +8,11 @@ import { Input, Select, useTranslation } from '@dxos/react-ui';
8
8
  import { type EditorInputMode, EditorInputModes, type EditorViewMode, EditorViewModes } from '@dxos/react-ui-editor';
9
9
  import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
10
10
 
11
- import { MARKDOWN_PLUGIN } from '../../meta';
12
- import { type MarkdownSettingsProps } from '../../types';
11
+ import { meta } from '../../meta';
12
+ import { type Markdown } from '../../types';
13
13
 
14
- export const MarkdownSettings = ({ settings }: { settings: MarkdownSettingsProps }) => {
15
- const { t } = useTranslation(MARKDOWN_PLUGIN);
14
+ export const MarkdownSettings = ({ settings }: { settings: Markdown.Settings }) => {
15
+ const { t } = useTranslation(meta.id);
16
16
 
17
17
  // TODO(wittjosiah): Add skill test confirmation for entering vim mode.
18
18
  return (
@@ -5,10 +5,9 @@
5
5
  import '@dxos-theme';
6
6
 
7
7
  import { type Meta } from '@storybook/react-vite';
8
- import { Match, Option, pipe, Schema } from 'effect';
8
+ import { Match, Option, Schema, pipe } from 'effect';
9
9
  import React, { type FC, useEffect, useMemo, useState } from 'react';
10
10
 
11
- import { Message } from '@dxos/ai';
12
11
  import {
13
12
  Capabilities,
14
13
  CollaborationActions,
@@ -31,17 +30,19 @@ import { ThemePlugin } from '@dxos/plugin-theme';
31
30
  import { faker } from '@dxos/random';
32
31
  import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
33
32
  import { IconButton, Toolbar } from '@dxos/react-ui';
34
- import { command, type EditorSelection, type Range, useTextEditor } from '@dxos/react-ui-editor';
33
+ import { type EditorSelection, type Range, command, useTextEditor } from '@dxos/react-ui-editor';
35
34
  import { StackItem } from '@dxos/react-ui-stack';
36
35
  import { defaultTx } from '@dxos/react-ui-theme';
36
+ import { DataType } from '@dxos/schema';
37
37
  import { withLayout } from '@dxos/storybook-utils';
38
38
 
39
- import MarkdownContainer from './MarkdownContainer';
40
- import { MarkdownPlugin } from '../MarkdownPlugin';
41
39
  import { MarkdownCapabilities } from '../capabilities';
42
- import { MARKDOWN_PLUGIN } from '../meta';
40
+ import { MarkdownPlugin } from '../MarkdownPlugin';
41
+ import { meta } from '../meta';
43
42
  import { translations } from '../translations';
44
- import { createDocument, DocumentType, type MarkdownSettingsProps } from '../types';
43
+ import { Markdown } from '../types';
44
+
45
+ import { MarkdownContainer } from './MarkdownContainer';
45
46
 
46
47
  faker.seed(1);
47
48
 
@@ -61,19 +62,25 @@ const TestItem = Schema.Struct({
61
62
  }),
62
63
  );
63
64
 
64
- const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content }) => {
65
+ const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, content }) => {
65
66
  const { dispatchPromise: dispatch } = useIntentDispatcher();
66
67
  const { parentRef } = useTextEditor({ initialValue: content });
67
68
  const { editorState } = useCapability(MarkdownCapabilities.State);
68
69
 
69
70
  const space = useSpace();
70
71
  const queueDxn = useMemo(() => space && space.queues.create().dxn, [space]);
71
- const queue = useQueue<Message>(queueDxn);
72
+ const queue = useQueue<DataType.Message>(queueDxn);
72
73
 
73
74
  const handleInsert = async () => {
74
75
  invariant(space);
75
76
  invariant(queue);
76
- await queue.append([Obj.make(Message, { role: 'assistant', content: [{ type: 'text', text: 'Hello' }] })]);
77
+ await queue.append([
78
+ Obj.make(DataType.Message, {
79
+ created: new Date().toISOString(),
80
+ sender: { role: 'assistant' },
81
+ blocks: [{ _tag: 'text', text: 'Hello' }],
82
+ }),
83
+ ]);
77
84
  const message = queue.objects.at(-1);
78
85
  invariant(message);
79
86
 
@@ -114,8 +121,8 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
114
121
 
115
122
  const DefaultStory = ({ document, chat }: { document: string; chat: string }) => {
116
123
  const space = useSpace();
117
- const [doc, setDoc] = useState<DocumentType>();
118
- const settings = useCapability(Capabilities.SettingsStore).getStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN)!.value;
124
+ const [doc, setDoc] = useState<Markdown.Document>();
125
+ const settings = useCapability(Capabilities.SettingsStore).getStore<Markdown.Settings>(meta.id)!.value;
119
126
  const { editorState } = useCapability(MarkdownCapabilities.State);
120
127
 
121
128
  useEffect(() => {
@@ -124,10 +131,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
124
131
  }
125
132
 
126
133
  const doc = space.db.add(
127
- createDocument({
134
+ Markdown.makeDocument({
128
135
  name: 'Test',
129
-
130
- // Create links.
131
136
  content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
132
137
  const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
133
138
  const dxn = Ref.make(obj).dxn.toString();
@@ -151,7 +156,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
151
156
  );
152
157
  };
153
158
 
154
- const meta: Meta<typeof DefaultStory> = {
159
+ // TODO(burdon): Make consistent.
160
+ const storybook: Meta<typeof DefaultStory> = {
155
161
  title: 'plugins/plugin-markdown/Suggestions',
156
162
  render: DefaultStory,
157
163
  decorators: [
@@ -160,8 +166,8 @@ const meta: Meta<typeof DefaultStory> = {
160
166
  ThemePlugin({ tx: defaultTx }),
161
167
  StorybookLayoutPlugin(),
162
168
  ClientPlugin({
163
- types: [DocumentType, TestItem],
164
- onClientInitialized: async (_, client) => {
169
+ types: [Markdown.Document, TestItem],
170
+ onClientInitialized: async ({ client }) => {
165
171
  await client.halo.createIdentity();
166
172
  },
167
173
  }),
@@ -181,7 +187,7 @@ const meta: Meta<typeof DefaultStory> = {
181
187
  },
182
188
  };
183
189
 
184
- export default meta;
190
+ export default storybook;
185
191
 
186
192
  type Story = Meta<typeof DefaultStory>;
187
193
 
@@ -7,15 +7,15 @@ import '@dxos-theme';
7
7
  import { type Meta } from '@storybook/react-vite';
8
8
  import React, { type FC, useCallback, useState } from 'react';
9
9
 
10
- import { Obj } from '@dxos/echo';
11
10
  import { invariant } from '@dxos/invariant';
12
11
  import { PublicKey } from '@dxos/keys';
13
12
  import { faker } from '@dxos/random';
14
13
  import { createDocAccessor } from '@dxos/react-client/echo';
15
14
  import { useThemeContext } from '@dxos/react-ui';
16
15
  import {
17
- EditorToolbar,
18
16
  type Comment,
17
+ EditorToolbar,
18
+ type EditorViewMode,
19
19
  comments,
20
20
  createBasicExtensions,
21
21
  createDataExtensions,
@@ -26,10 +26,9 @@ import {
26
26
  formattingKeymap,
27
27
  translations,
28
28
  useComments,
29
+ useEditorToolbarState,
29
30
  useFormattingState,
30
31
  useTextEditor,
31
- useEditorToolbarState,
32
- type EditorViewMode,
33
32
  } from '@dxos/react-ui-editor';
34
33
  import { DataType } from '@dxos/schema';
35
34
  import { withLayout, withTheme } from '@dxos/storybook-utils';
@@ -38,7 +37,7 @@ faker.seed(101);
38
37
 
39
38
  const DefaultStory: FC<{ content?: string }> = ({ content = '' }) => {
40
39
  const { themeMode } = useThemeContext();
41
- const [text] = useState(Obj.make(DataType.Text, { content }));
40
+ const [text] = useState(DataType.makeText(content));
42
41
  const toolbarState = useEditorToolbarState({ viewMode: 'preview' });
43
42
  const formattingObserver = useFormattingState(toolbarState);
44
43
  const { parentRef, view } = useTextEditor(() => {
@@ -7,4 +7,4 @@ import { lazy } from 'react';
7
7
  export * from './MarkdownSettings';
8
8
 
9
9
  export const MarkdownContainer = lazy(() => import('./MarkdownContainer'));
10
- export const MarkdownPreview = lazy(() => import('./MarkdownPreview'));
10
+ export const MarkdownCard = lazy(() => import('./MarkdownCard'));
package/src/events.ts CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  import { Events } from '@dxos/app-framework';
6
6
 
7
- import { MARKDOWN_PLUGIN } from './meta';
7
+ import { meta } from './meta';
8
8
 
9
9
  export namespace MarkdownEvents {
10
- export const SetupExtensions = Events.createStateEvent(`${MARKDOWN_PLUGIN}/setup-extensions`);
10
+ export const SetupExtensions = Events.createStateEvent(`${meta.id}/event/setup-extensions`);
11
11
  }
@@ -7,27 +7,32 @@ import React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react
7
7
  import { createRoot } from 'react-dom/client';
8
8
 
9
9
  import {
10
- createIntent,
11
10
  LayoutAction,
12
11
  type PromiseIntentDispatcher,
12
+ createIntent,
13
13
  useCapabilities,
14
14
  useIntentDispatcher,
15
15
  } from '@dxos/app-framework';
16
16
  import { debounceAndThrottle } from '@dxos/async';
17
17
  import { invariant } from '@dxos/invariant';
18
- import { createDocAccessor, fullyQualifiedId, getSpace, type QueryResult } from '@dxos/react-client/echo';
18
+ import { type QueryResult, createDocAccessor, fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
19
19
  import { useIdentity } from '@dxos/react-client/halo';
20
20
  import { Icon, ThemeProvider } from '@dxos/react-ui';
21
21
  import { type SelectionManager } from '@dxos/react-ui-attention';
22
22
  import {
23
23
  type AutocompleteResult,
24
+ Cursor,
24
25
  type EditorStateStore,
26
+ EditorView,
25
27
  type EditorViewMode,
26
28
  type Extension,
27
29
  InputModeExtensions,
28
- createDataExtensions,
30
+ type PreviewOptions,
31
+ type RenderCallback,
29
32
  autocomplete,
33
+ createDataExtensions,
30
34
  decorateMarkdown,
35
+ documentId,
31
36
  folding,
32
37
  formattingKeymap,
33
38
  linkTooltip,
@@ -35,27 +40,22 @@ import {
35
40
  preview,
36
41
  selectionState,
37
42
  typewriter,
38
- type RenderCallback,
39
- EditorView,
40
- documentId,
41
- Cursor,
42
- type PreviewOptions,
43
43
  } from '@dxos/react-ui-editor';
44
44
  import { defaultTx } from '@dxos/react-ui-theme';
45
45
  import { type DataType } from '@dxos/schema';
46
46
  import { isNotFalsy } from '@dxos/util';
47
47
 
48
48
  import { MarkdownCapabilities } from './capabilities';
49
- import { type DocumentType, type MarkdownSettingsProps } from './types';
49
+ import { type Markdown } from './types';
50
50
  import { setFallbackName } from './util';
51
51
 
52
52
  type ExtensionsOptions = {
53
- document?: DocumentType;
53
+ document?: Markdown.Document;
54
54
  id?: string;
55
55
  text?: DataType.Text;
56
56
  dispatch?: PromiseIntentDispatcher;
57
- query?: QueryResult<DocumentType>;
58
- settings: MarkdownSettingsProps;
57
+ query?: QueryResult<Markdown.Document>;
58
+ settings: Markdown.Settings;
59
59
  selectionManager?: SelectionManager;
60
60
  viewMode?: EditorViewMode;
61
61
  editorStateStore?: EditorStateStore;
@@ -6,11 +6,11 @@ import { EditorView } from '@codemirror/view';
6
6
  import { Schema } from 'effect';
7
7
  import { useMemo } from 'react';
8
8
 
9
- import { createResolver, LayoutAction, useIntentResolver } from '@dxos/app-framework';
9
+ import { LayoutAction, createResolver, useIntentResolver } from '@dxos/app-framework';
10
10
  import { invariant } from '@dxos/invariant';
11
11
  import { Cursor, setSelection } from '@dxos/react-ui-editor';
12
12
 
13
- import { MARKDOWN_PLUGIN } from '../meta';
13
+ import { meta } from '../meta';
14
14
 
15
15
  /**
16
16
  * Handle scrolling and selection of the current thread in a markdown editor.
@@ -52,5 +52,5 @@ export const useSelectCurrentThread = (editorView: EditorView | undefined, docum
52
52
  [documentId, editorView],
53
53
  );
54
54
 
55
- useIntentResolver(MARKDOWN_PLUGIN, scrollIntoViewResolver);
55
+ useIntentResolver(meta.id, scrollIntoViewResolver);
56
56
  };
package/src/index.ts CHANGED
@@ -4,6 +4,9 @@
4
4
 
5
5
  export { MarkdownCapabilities } from './capabilities';
6
6
  export { MarkdownEvents } from './events';
7
- export * from './MarkdownPlugin';
7
+
8
8
  export * from './meta';
9
+ export * from './types';
9
10
  export * from './util';
11
+
12
+ export * from './MarkdownPlugin';
package/src/meta.ts CHANGED
@@ -3,18 +3,20 @@
3
3
  //
4
4
 
5
5
  import { type PluginMeta } from '@dxos/app-framework';
6
-
7
- export const MARKDOWN_PLUGIN = 'dxos.org/plugin/markdown';
6
+ import { trim } from '@dxos/util';
8
7
 
9
8
  export const meta: PluginMeta = {
10
- id: MARKDOWN_PLUGIN,
9
+ id: 'dxos.org/plugin/markdown',
11
10
  name: 'Markdown',
12
- description: `
13
- A Markdown editor that is collaborative and fully extensible. It provides rich text editing as well as read only and markdown view.
14
- In addition to markdown capabilities, it also support threaded in-line comments which can be accessed from the right hand sidebar at any times inside the document.
15
- Your AI agent will have access to all markdown docs in your Space which means you can use them to extend the memory of your personal agent and add long term context for automated workflows.
11
+ description: trim`
12
+ A collaborative and extensible Markdown editor.
13
+ In addition to markdown capabilities, the plugin supports collaborative in-line comments.
14
+ You can use documents to extend the memory of your personal agents and add context for automated workflows.
16
15
  `,
17
- source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
18
16
  icon: 'ph--text-aa--regular',
17
+ source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
19
18
  screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],
20
19
  };
20
+
21
+ // TODO(burdon): Workaround for suspected vitest bug? Update vitest?
22
+ export const not_meta = meta;