@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
@@ -4,30 +4,29 @@
4
4
 
5
5
  import '@dxos-theme';
6
6
 
7
- import { type Meta } from '@storybook/react-vite';
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
8
  import React from 'react';
9
9
 
10
10
  import { IntentPlugin } from '@dxos/app-framework';
11
11
  import { withPluginManager } from '@dxos/app-framework/testing';
12
- import { Obj, Ref } from '@dxos/echo';
13
- import { DocumentType } from '@dxos/plugin-markdown/types';
12
+ import { Markdown } from '@dxos/plugin-markdown/types';
14
13
  import { faker } from '@dxos/random';
15
14
  import { CardContainer } from '@dxos/react-ui-stack/testing';
16
- import { DataType } from '@dxos/schema';
17
- import { withTheme, withLayout } from '@dxos/storybook-utils';
15
+ import { withLayout, withTheme } from '@dxos/storybook-utils';
18
16
 
19
- import { MarkdownPreview } from './MarkdownPreview';
20
17
  import { translations } from '../../translations';
21
18
 
19
+ import { MarkdownCard } from './MarkdownCard';
20
+
22
21
  faker.seed(1234);
23
22
 
24
- const meta: Meta<typeof MarkdownPreview> = {
25
- title: 'Cards/plugin-markdown',
26
- component: MarkdownPreview,
23
+ const meta: Meta<typeof MarkdownCard> = {
24
+ title: 'plugins/plugin-markdown/Card',
25
+ component: MarkdownCard,
27
26
  render: ({ role, subject, ...args }) => {
28
27
  return (
29
28
  <CardContainer icon='ph--text-aa--regular' role={role}>
30
- <MarkdownPreview subject={subject} role={role} />
29
+ <MarkdownCard role={role} subject={subject} {...args} />
31
30
  </CardContainer>
32
31
  );
33
32
  },
@@ -42,40 +41,39 @@ const meta: Meta<typeof MarkdownPreview> = {
42
41
  layout: 'centered',
43
42
  translations,
44
43
  },
44
+ tags: ['cards'],
45
45
  };
46
46
 
47
47
  export default meta;
48
48
 
49
- const data = (() => {
50
- const document = Obj.make(DocumentType, {
51
- name: faker.lorem.words(3),
52
- content: Ref.make(
53
- Obj.make(DataType.Text, {
54
- content: faker.lorem.paragraphs(3),
55
- }),
56
- ),
57
- });
58
-
59
- return { document };
60
- })();
49
+ type Story = StoryObj<typeof meta>;
61
50
 
62
51
  export const Popover = {
63
52
  args: {
64
- subject: Obj.make(DocumentType, data.document),
65
53
  role: 'card--popover',
54
+ subject: Markdown.makeDocument({
55
+ name: faker.lorem.words(3),
56
+ content: faker.lorem.paragraphs(3),
57
+ }),
66
58
  },
67
- };
59
+ } satisfies Story;
68
60
 
69
- export const Extrinsic = {
61
+ export const Intrinsic = {
70
62
  args: {
71
- subject: Obj.make(DocumentType, data.document),
72
- role: 'card--extrinsic',
63
+ role: 'card--intrinsic',
64
+ subject: Markdown.makeDocument({
65
+ name: faker.lorem.words(3),
66
+ content: faker.lorem.paragraphs(3),
67
+ }),
73
68
  },
74
- };
69
+ } satisfies Story;
75
70
 
76
- export const Intrinsic = {
71
+ export const Extrinsic = {
77
72
  args: {
78
- subject: Obj.make(DocumentType, data.document),
79
- role: 'card--intrinsic',
73
+ role: 'card--extrinsic',
74
+ subject: Markdown.makeDocument({
75
+ name: faker.lorem.words(3),
76
+ content: faker.lorem.paragraphs(3),
77
+ }),
80
78
  },
81
- };
79
+ } satisfies Story;
@@ -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.
@@ -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 }]);
@@ -16,29 +16,30 @@ import { type SelectionManager } from '@dxos/react-ui-attention';
16
16
  import {
17
17
  type CommandMenuGroup,
18
18
  type CommandMenuItem,
19
- insertAtCursor,
20
- insertAtLineStart,
21
19
  type PreviewLinkRef,
22
20
  type PreviewOptions,
21
+ insertAtCursor,
22
+ insertAtLineStart,
23
23
  } from '@dxos/react-ui-editor';
24
24
  import { DataType } from '@dxos/schema';
25
25
 
26
- import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
27
26
  import { useExtensions } from '../extensions';
28
- import { DocumentType, type MarkdownSettingsProps } from '../types';
27
+ import { Markdown } from '../types';
29
28
  import { getFallbackName } from '../util';
30
29
 
30
+ import { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';
31
+
31
32
  export type MarkdownContainerProps = Pick<
32
33
  MarkdownEditorProps,
33
34
  'role' | 'extensionProviders' | 'viewMode' | 'editorStateStore' | 'onViewModeChange'
34
35
  > & {
35
36
  id: string;
36
- object: DocumentType | DataType.Text | any;
37
- settings: MarkdownSettingsProps;
37
+ object: Markdown.Document | DataType.Text | any;
38
+ settings: Markdown.Settings;
38
39
  selectionManager?: SelectionManager;
39
40
  };
40
41
 
41
- const MarkdownContainer = ({
42
+ export const MarkdownContainer = ({
42
43
  id,
43
44
  role,
44
45
  object,
@@ -50,7 +51,7 @@ const MarkdownContainer = ({
50
51
  }: MarkdownContainerProps) => {
51
52
  const { t } = useTranslation();
52
53
  const scrollPastEnd = role === 'article';
53
- const doc = Obj.instanceOf(DocumentType, object) ? object : undefined;
54
+ const doc = Obj.instanceOf(Markdown.Document, object) ? object : undefined;
54
55
  const text = Obj.instanceOf(DataType.Text, object) ? object : undefined;
55
56
  const [previewBlocks, setPreviewBlocks] = useState<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);
56
57
  const previewOptions = useMemo(
@@ -199,7 +200,7 @@ const PreviewBlock = ({ link, el }: { link: PreviewLinkRef; el: HTMLElement }) =
199
200
 
200
201
  type DocumentEditorProps = Omit<MarkdownContainerProps, 'object' | 'extensionProviders' | 'editorStateStore'> &
201
202
  Pick<MarkdownEditorProps, 'id' | 'scrollPastEnd' | 'extensions' | 'onLinkQuery'> & {
202
- document: DocumentType;
203
+ document: Markdown.Document;
203
204
  };
204
205
 
205
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,7 +5,7 @@
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
11
  import {
@@ -30,18 +30,19 @@ import { ThemePlugin } from '@dxos/plugin-theme';
30
30
  import { faker } from '@dxos/random';
31
31
  import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
32
32
  import { IconButton, Toolbar } from '@dxos/react-ui';
33
- 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';
34
34
  import { StackItem } from '@dxos/react-ui-stack';
35
35
  import { defaultTx } from '@dxos/react-ui-theme';
36
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,7 +62,7 @@ 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);
@@ -120,8 +121,8 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
120
121
 
121
122
  const DefaultStory = ({ document, chat }: { document: string; chat: string }) => {
122
123
  const space = useSpace();
123
- const [doc, setDoc] = useState<DocumentType>();
124
- 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;
125
126
  const { editorState } = useCapability(MarkdownCapabilities.State);
126
127
 
127
128
  useEffect(() => {
@@ -130,10 +131,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
130
131
  }
131
132
 
132
133
  const doc = space.db.add(
133
- createDocument({
134
+ Markdown.makeDocument({
134
135
  name: 'Test',
135
-
136
- // Create links.
137
136
  content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
138
137
  const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
139
138
  const dxn = Ref.make(obj).dxn.toString();
@@ -157,7 +156,8 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
157
156
  );
158
157
  };
159
158
 
160
- const meta: Meta<typeof DefaultStory> = {
159
+ // TODO(burdon): Make consistent.
160
+ const storybook: Meta<typeof DefaultStory> = {
161
161
  title: 'plugins/plugin-markdown/Suggestions',
162
162
  render: DefaultStory,
163
163
  decorators: [
@@ -166,8 +166,8 @@ const meta: Meta<typeof DefaultStory> = {
166
166
  ThemePlugin({ tx: defaultTx }),
167
167
  StorybookLayoutPlugin(),
168
168
  ClientPlugin({
169
- types: [DocumentType, TestItem],
170
- onClientInitialized: async (_, client) => {
169
+ types: [Markdown.Document, TestItem],
170
+ onClientInitialized: async ({ client }) => {
171
171
  await client.halo.createIdentity();
172
172
  },
173
173
  }),
@@ -187,7 +187,7 @@ const meta: Meta<typeof DefaultStory> = {
187
187
  },
188
188
  };
189
189
 
190
- export default meta;
190
+ export default storybook;
191
191
 
192
192
  type Story = Meta<typeof DefaultStory>;
193
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;