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

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 (238) hide show
  1. package/dist/lib/browser/{MarkdownPreview-S3C7CGAV.mjs → MarkdownCard-ZHTH6EVA.mjs} +18 -18
  2. package/dist/lib/browser/MarkdownCard-ZHTH6EVA.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownContainer-F3WEEIBX.mjs → MarkdownContainer-XDYFBDCI.mjs} +287 -315
  4. package/dist/lib/browser/MarkdownContainer-XDYFBDCI.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-UKJJ7ZNP.mjs → anchor-sort-53E7TJGF.mjs} +7 -7
  6. package/dist/lib/browser/anchor-sort-53E7TJGF.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-ICLAF662.mjs → app-graph-serializer-IEPNJZBR.mjs} +13 -14
  8. package/dist/lib/browser/app-graph-serializer-IEPNJZBR.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs +11 -0
  10. package/dist/lib/browser/blueprint-definition-XDLVVSUN.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-EVQGTH3P.mjs +22 -0
  12. package/dist/lib/browser/chunk-EVQGTH3P.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-LHDCHDBW.mjs → chunk-NGXGBWSS.mjs} +6 -5
  14. package/dist/lib/browser/chunk-NGXGBWSS.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-ODB2PTBP.mjs +28 -0
  16. package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-OY6CGPOO.mjs +16 -0
  18. package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-PMBWHKDI.mjs +78 -0
  20. package/dist/lib/browser/chunk-PMBWHKDI.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-VZU7BRGW.mjs +106 -0
  22. package/dist/lib/browser/chunk-VZU7BRGW.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-LFML7LC6.mjs → chunk-XYQDM6PM.mjs} +8 -9
  24. package/dist/lib/browser/chunk-XYQDM6PM.mjs.map +7 -0
  25. package/dist/lib/browser/index.mjs +35 -22
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs +62 -0
  28. package/dist/lib/browser/intent-resolver-66ZUQ6JC.mjs.map +7 -0
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/browser/{react-surface-C3Z423TV.mjs → react-surface-ONX5RNFM.mjs} +55 -46
  31. package/dist/lib/browser/react-surface-ONX5RNFM.mjs.map +7 -0
  32. package/dist/lib/browser/{settings-KN75ZQY6.mjs → settings-HXM36BCZ.mjs} +7 -7
  33. package/dist/lib/browser/settings-HXM36BCZ.mjs.map +7 -0
  34. package/dist/lib/browser/{state-LZWTAS65.mjs → state-6QODXCSZ.mjs} +9 -9
  35. package/dist/lib/browser/state-6QODXCSZ.mjs.map +7 -0
  36. package/dist/lib/browser/toolkit-73U3A7SD.mjs +76 -0
  37. package/dist/lib/browser/toolkit-73U3A7SD.mjs.map +7 -0
  38. package/dist/lib/browser/types/index.mjs +6 -14
  39. package/dist/lib/node-esm/{MarkdownPreview-77UFEWXT.mjs → MarkdownCard-MEA4QAAI.mjs} +18 -18
  40. package/dist/lib/node-esm/MarkdownCard-MEA4QAAI.mjs.map +7 -0
  41. package/dist/lib/node-esm/{MarkdownContainer-VOUHL6IU.mjs → MarkdownContainer-7GYMOJVT.mjs} +287 -315
  42. package/dist/lib/node-esm/MarkdownContainer-7GYMOJVT.mjs.map +7 -0
  43. package/dist/lib/node-esm/{anchor-sort-IPIS5D5B.mjs → anchor-sort-V2FWEYDN.mjs} +7 -7
  44. package/dist/lib/node-esm/anchor-sort-V2FWEYDN.mjs.map +7 -0
  45. package/dist/lib/node-esm/{app-graph-serializer-FLBXQKKR.mjs → app-graph-serializer-HIN4NMUG.mjs} +13 -14
  46. package/dist/lib/node-esm/app-graph-serializer-HIN4NMUG.mjs.map +7 -0
  47. package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs +12 -0
  48. package/dist/lib/node-esm/blueprint-definition-PDXZ67UQ.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-35WAARP4.mjs +79 -0
  50. package/dist/lib/node-esm/chunk-35WAARP4.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-ACFGXH2K.mjs → chunk-CB2R4YIY.mjs} +5 -5
  52. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-CWTFQSN7.mjs → chunk-IOC54NCF.mjs} +8 -9
  54. package/dist/lib/node-esm/chunk-IOC54NCF.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-VCG2U522.mjs +29 -0
  56. package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-VELFUWUH.mjs +107 -0
  58. package/dist/lib/node-esm/chunk-VELFUWUH.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-W4XXBX33.mjs +24 -0
  60. package/dist/lib/node-esm/chunk-W4XXBX33.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-VIR2ABYE.mjs → chunk-YGSNWTGP.mjs} +6 -5
  62. package/dist/lib/node-esm/chunk-YGSNWTGP.mjs.map +7 -0
  63. package/dist/lib/node-esm/index.mjs +35 -22
  64. package/dist/lib/node-esm/index.mjs.map +3 -3
  65. package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs +63 -0
  66. package/dist/lib/node-esm/intent-resolver-TNRIFHNH.mjs.map +7 -0
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/node-esm/{react-surface-TTTBYNI2.mjs → react-surface-X2GV6WQH.mjs} +55 -46
  69. package/dist/lib/node-esm/react-surface-X2GV6WQH.mjs.map +7 -0
  70. package/dist/lib/node-esm/{settings-KVP7TVX7.mjs → settings-KPLQ5ONI.mjs} +7 -7
  71. package/dist/lib/node-esm/settings-KPLQ5ONI.mjs.map +7 -0
  72. package/dist/lib/node-esm/{state-NW3W4JCQ.mjs → state-W3PECOJX.mjs} +9 -9
  73. package/dist/lib/node-esm/state-W3PECOJX.mjs.map +7 -0
  74. package/dist/lib/node-esm/toolkit-GUBDYF72.mjs +77 -0
  75. package/dist/lib/node-esm/toolkit-GUBDYF72.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +6 -14
  77. package/dist/types/src/MarkdownPlugin.d.ts +1 -1
  78. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -2
  80. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  81. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -9
  83. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  85. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  86. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  87. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/index.d.ts +12 -10
  89. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  91. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  93. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/settings.d.ts +1 -1
  95. package/dist/types/src/capabilities/state.d.ts +2 -2
  96. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/toolkit.d.ts +4 -0
  98. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  99. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +7 -0
  100. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  101. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  102. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
  104. package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
  105. package/dist/types/src/components/MarkdownContainer.d.ts +5 -5
  106. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  107. package/dist/types/src/components/MarkdownContainer.stories.d.ts +51 -5
  108. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  109. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +2 -2
  110. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  111. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +111 -13
  112. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +2 -2
  114. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  115. package/dist/types/src/components/Suggestions.stories.d.ts +3 -4
  116. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  117. package/dist/types/src/components/Toolbar.stories.d.ts +45 -8
  118. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/index.d.ts +1 -1
  120. package/dist/types/src/components/index.d.ts.map +1 -1
  121. package/dist/types/src/events.d.ts.map +1 -1
  122. package/dist/types/src/extensions.d.ts +3 -5
  123. package/dist/types/src/extensions.d.ts.map +1 -1
  124. package/dist/types/src/functions/diff.d.ts +6 -0
  125. package/dist/types/src/functions/diff.d.ts.map +1 -0
  126. package/dist/types/src/functions/index.d.ts +3 -0
  127. package/dist/types/src/functions/index.d.ts.map +1 -0
  128. package/dist/types/src/functions/open.d.ts +7 -0
  129. package/dist/types/src/functions/open.d.ts.map +1 -0
  130. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  131. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  132. package/dist/types/src/index.d.ts +2 -1
  133. package/dist/types/src/index.d.ts.map +1 -1
  134. package/dist/types/src/meta.d.ts +0 -1
  135. package/dist/types/src/meta.d.ts.map +1 -1
  136. package/dist/types/src/translations.d.ts +3 -2
  137. package/dist/types/src/translations.d.ts.map +1 -1
  138. package/dist/types/src/types/Markdown.d.ts +43 -0
  139. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  140. package/dist/types/src/types/MarkdownAction.d.ts +33 -0
  141. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
  142. package/dist/types/src/types/index.d.ts +2 -1
  143. package/dist/types/src/types/index.d.ts.map +1 -1
  144. package/dist/types/src/types/types.d.ts +3 -59
  145. package/dist/types/src/types/types.d.ts.map +1 -1
  146. package/dist/types/src/util.d.ts +12 -3
  147. package/dist/types/src/util.d.ts.map +1 -1
  148. package/dist/types/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +57 -52
  150. package/src/MarkdownPlugin.tsx +103 -95
  151. package/src/capabilities/anchor-sort.ts +3 -3
  152. package/src/capabilities/app-graph-serializer.ts +9 -7
  153. package/src/capabilities/artifact-definition.ts +20 -24
  154. package/src/capabilities/blueprint-definition.ts +39 -0
  155. package/src/capabilities/capabilities.ts +5 -4
  156. package/src/capabilities/index.ts +3 -1
  157. package/src/capabilities/intent-resolver.ts +16 -21
  158. package/src/capabilities/react-surface.tsx +21 -19
  159. package/src/capabilities/settings.ts +3 -3
  160. package/src/capabilities/state.ts +8 -8
  161. package/src/capabilities/toolkit.ts +49 -0
  162. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +76 -0
  163. package/src/components/{MarkdownPreview/MarkdownPreview.tsx → MarkdownCard/MarkdownCard.tsx} +13 -11
  164. package/src/components/MarkdownCard/index.ts +9 -0
  165. package/src/components/MarkdownContainer.stories.tsx +47 -41
  166. package/src/components/MarkdownContainer.tsx +22 -19
  167. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +21 -17
  168. package/src/components/MarkdownEditor/MarkdownEditor.tsx +39 -39
  169. package/src/components/MarkdownSettings/MarkdownSettings.tsx +81 -78
  170. package/src/components/Suggestions.stories.tsx +51 -51
  171. package/src/components/Toolbar.stories.tsx +23 -18
  172. package/src/components/index.ts +1 -1
  173. package/src/events.ts +2 -2
  174. package/src/extensions.tsx +13 -41
  175. package/src/functions/diff.ts +37 -0
  176. package/src/functions/index.ts +6 -0
  177. package/src/functions/open.ts +32 -0
  178. package/src/hooks/useSelectCurrentThread.tsx +5 -5
  179. package/src/index.ts +4 -1
  180. package/src/meta.ts +7 -8
  181. package/src/translations.ts +3 -2
  182. package/src/types/Markdown.ts +56 -0
  183. package/src/types/MarkdownAction.ts +29 -0
  184. package/src/types/index.ts +2 -1
  185. package/src/types/types.ts +6 -50
  186. package/src/util.tsx +20 -6
  187. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs.map +0 -7
  188. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs.map +0 -7
  189. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
  190. package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs.map +0 -7
  191. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs +0 -145
  192. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs.map +0 -7
  193. package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
  194. package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
  195. package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
  196. package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
  197. package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
  198. package/dist/lib/browser/chunk-LHDCHDBW.mjs.map +0 -7
  199. package/dist/lib/browser/chunk-PHTD5DTR.mjs +0 -20
  200. package/dist/lib/browser/chunk-PHTD5DTR.mjs.map +0 -7
  201. package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
  202. package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
  203. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs +0 -64
  204. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
  205. package/dist/lib/browser/react-surface-C3Z423TV.mjs.map +0 -7
  206. package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
  207. package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
  208. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs.map +0 -7
  209. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs.map +0 -7
  210. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
  211. package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs.map +0 -7
  212. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs +0 -146
  213. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs.map +0 -7
  214. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs +0 -22
  215. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs.map +0 -7
  216. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
  217. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
  219. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
  221. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
  222. package/dist/lib/node-esm/chunk-VIR2ABYE.mjs.map +0 -7
  223. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs +0 -65
  224. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
  225. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs.map +0 -7
  226. package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
  227. package/dist/lib/node-esm/state-NW3W4JCQ.mjs.map +0 -7
  228. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  229. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  230. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -42
  231. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  232. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  233. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  234. package/dist/types/src/types/schema.d.ts +0 -35
  235. package/dist/types/src/types/schema.d.ts.map +0 -1
  236. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -81
  237. package/src/components/MarkdownPreview/index.ts +0 -9
  238. package/src/types/schema.ts +0 -39
@@ -2,27 +2,19 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta } from '@storybook/react-vite';
8
- import { Match, Option, pipe, Schema } from 'effect';
6
+ import * as Function from 'effect/Function';
7
+ import * as Match from 'effect/Match';
8
+ import * as Option from 'effect/Option';
9
+ import * as Schema from 'effect/Schema';
9
10
  import React, { type FC, useEffect, useMemo, useState } from 'react';
10
11
 
11
- import {
12
- Capabilities,
13
- CollaborationActions,
14
- IntentPlugin,
15
- SettingsPlugin,
16
- contributes,
17
- createIntent,
18
- useCapability,
19
- useIntentDispatcher,
20
- } from '@dxos/app-framework';
12
+ import { Capabilities, IntentPlugin, SettingsPlugin, useCapability, useIntentDispatcher } from '@dxos/app-framework';
21
13
  import { withPluginManager } from '@dxos/app-framework/testing';
22
14
  import { Obj, Ref, Type } from '@dxos/echo';
23
15
  import { invariant } from '@dxos/invariant';
24
- import { DXN } from '@dxos/keys';
25
16
  import { ClientPlugin } from '@dxos/plugin-client';
17
+ import { GraphPlugin } from '@dxos/plugin-graph';
26
18
  import { PreviewPlugin } from '@dxos/plugin-preview';
27
19
  import { SpacePlugin } from '@dxos/plugin-space';
28
20
  import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
@@ -30,18 +22,20 @@ import { ThemePlugin } from '@dxos/plugin-theme';
30
22
  import { faker } from '@dxos/random';
31
23
  import { createDocAccessor, fullyQualifiedId, toCursorRange, useQueue, useSpace } from '@dxos/react-client/echo';
32
24
  import { IconButton, Toolbar } from '@dxos/react-ui';
33
- import { command, type EditorSelection, type Range, useTextEditor } from '@dxos/react-ui-editor';
25
+ import { withTheme } from '@dxos/react-ui/testing';
26
+ import { type EditorSelection, type Range, useTextEditor } from '@dxos/react-ui-editor';
34
27
  import { StackItem } from '@dxos/react-ui-stack';
35
28
  import { defaultTx } from '@dxos/react-ui-theme';
36
29
  import { DataType } from '@dxos/schema';
37
- import { withLayout } from '@dxos/storybook-utils';
30
+ import { render } from '@dxos/storybook-utils';
38
31
 
39
- import MarkdownContainer from './MarkdownContainer';
40
- import { MarkdownPlugin } from '../MarkdownPlugin';
41
32
  import { MarkdownCapabilities } from '../capabilities';
42
- import { MARKDOWN_PLUGIN } from '../meta';
33
+ import { MarkdownPlugin } from '../MarkdownPlugin';
34
+ import { meta } from '../meta';
43
35
  import { translations } from '../translations';
44
- import { createDocument, DocumentType, type MarkdownSettingsProps } from '../types';
36
+ import { Markdown } from '../types';
37
+
38
+ import { MarkdownContainer } from './MarkdownContainer';
45
39
 
46
40
  faker.seed(1);
47
41
 
@@ -61,7 +55,7 @@ const TestItem = Schema.Struct({
61
55
  }),
62
56
  );
63
57
 
64
- const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content }) => {
58
+ const TestChat: FC<{ doc: Markdown.Document; content: string }> = ({ doc, content }) => {
65
59
  const { dispatchPromise: dispatch } = useIntentDispatcher();
66
60
  const { parentRef } = useTextEditor({ initialValue: content });
67
61
  const { editorState } = useCapability(MarkdownCapabilities.State);
@@ -85,7 +79,7 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
85
79
 
86
80
  const text = await doc.content.load();
87
81
  const accessor = createDocAccessor(text, ['content']);
88
- const cursor = pipe(
82
+ const cursor = Function.pipe(
89
83
  editorState.getState(fullyQualifiedId(doc))?.selection,
90
84
  Option.fromNullable,
91
85
  Option.map(selectionToRange),
@@ -98,14 +92,14 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
98
92
  // const message = deref(ref);
99
93
  // }
100
94
 
101
- void dispatch(
102
- createIntent(CollaborationActions.InsertContent, {
103
- target: doc as any as Type.Expando,
104
- object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
105
- at: cursor,
106
- label: 'Proposal',
107
- }),
108
- );
95
+ // void dispatch(
96
+ // createIntent(CollaborationActions.InsertContent, {
97
+ // target: doc as any as Type.Expando,
98
+ // object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...queue.dxn.parts, message.id])),
99
+ // at: cursor,
100
+ // label: 'Proposal',
101
+ // }),
102
+ // );
109
103
  };
110
104
 
111
105
  return (
@@ -120,8 +114,8 @@ const TestChat: FC<{ doc: DocumentType; content: string }> = ({ doc, content })
120
114
 
121
115
  const DefaultStory = ({ document, chat }: { document: string; chat: string }) => {
122
116
  const space = useSpace();
123
- const [doc, setDoc] = useState<DocumentType>();
124
- const settings = useCapability(Capabilities.SettingsStore).getStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN)!.value;
117
+ const [doc, setDoc] = useState<Markdown.Document>();
118
+ const settings = useCapability(Capabilities.SettingsStore).getStore<Markdown.Settings>(meta.id)!.value;
125
119
  const { editorState } = useCapability(MarkdownCapabilities.State);
126
120
 
127
121
  useEffect(() => {
@@ -130,14 +124,12 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
130
124
  }
131
125
 
132
126
  const doc = space.db.add(
133
- createDocument({
127
+ Markdown.makeDocument({
134
128
  name: 'Test',
135
-
136
- // Create links.
137
129
  content: document.replaceAll(/\[(\w+)\]/g, (_, label) => {
138
130
  const obj = space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
139
131
  const dxn = Ref.make(obj).dxn.toString();
140
- return `[${label}][${dxn}]`;
132
+ return `[${label}](${dxn})`;
141
133
  }),
142
134
  }),
143
135
  );
@@ -146,48 +138,56 @@ const DefaultStory = ({ document, chat }: { document: string; chat: string }) =>
146
138
  }, [space]);
147
139
 
148
140
  if (!space || !doc) {
149
- return <></>;
141
+ return null;
150
142
  }
151
143
 
144
+ // TODO(burdon): Layout issue.
152
145
  return (
153
- <>
146
+ <div className='grid grid-cols-2 bs-full overflow-hidden'>
154
147
  <MarkdownContainer id={doc.id} object={doc} settings={settings} editorStateStore={editorState} />
155
148
  <TestChat doc={doc} content={chat} />
156
- </>
149
+ </div>
157
150
  );
158
151
  };
159
152
 
160
- const meta: Meta<typeof DefaultStory> = {
153
+ const storybook: Meta<typeof DefaultStory> = {
161
154
  title: 'plugins/plugin-markdown/Suggestions',
162
- render: DefaultStory,
155
+ render: render(DefaultStory),
163
156
  decorators: [
157
+ withTheme,
164
158
  withPluginManager({
165
159
  plugins: [
166
- ThemePlugin({ tx: defaultTx }),
167
- StorybookLayoutPlugin(),
168
160
  ClientPlugin({
169
- types: [DocumentType, TestItem],
170
- onClientInitialized: async (_, client) => {
161
+ types: [Markdown.Document, TestItem],
162
+ onClientInitialized: async ({ client }) => {
171
163
  await client.halo.createIdentity();
172
164
  },
173
165
  }),
174
- SpacePlugin(),
175
- SettingsPlugin(),
166
+ SpacePlugin({}),
167
+ GraphPlugin(),
176
168
  IntentPlugin(),
169
+ SettingsPlugin(),
170
+
171
+ // UI
172
+ ThemePlugin({ tx: defaultTx }),
177
173
  MarkdownPlugin(),
178
174
  PreviewPlugin(),
175
+ StorybookLayoutPlugin({}),
179
176
  ],
180
- capabilities: [contributes(MarkdownCapabilities.Extensions, [() => command()])],
177
+ // TODO(thure): `commandDialog` doesn’t do anything without a `renderDialog` option.
178
+ // capabilities: [contributes(MarkdownCapabilities.Extensions, [() => commandDialog()])],
181
179
  }),
182
- withLayout({ fullscreen: true, classNames: 'grid grid-cols-2' }),
183
180
  ],
184
181
  parameters: {
182
+ layout: 'fullscreen',
183
+ controls: {
184
+ disable: true,
185
+ },
185
186
  translations,
186
- controls: { disable: true },
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
 
@@ -2,20 +2,20 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useCallback, useState } from 'react';
6
7
 
7
- import { type Meta } from '@storybook/react-vite';
8
- import React, { type FC, useCallback, useState } from 'react';
9
-
10
- import { Obj } from '@dxos/echo';
8
+ import { createObject } from '@dxos/echo-db';
11
9
  import { invariant } from '@dxos/invariant';
12
10
  import { PublicKey } from '@dxos/keys';
13
11
  import { faker } from '@dxos/random';
14
12
  import { createDocAccessor } from '@dxos/react-client/echo';
15
13
  import { useThemeContext } from '@dxos/react-ui';
14
+ import { withTheme } from '@dxos/react-ui/testing';
16
15
  import {
17
- EditorToolbar,
18
16
  type Comment,
17
+ EditorToolbar,
18
+ type EditorViewMode,
19
19
  comments,
20
20
  createBasicExtensions,
21
21
  createDataExtensions,
@@ -26,19 +26,21 @@ 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
- import { withLayout, withTheme } from '@dxos/storybook-utils';
36
34
 
37
35
  faker.seed(101);
38
36
 
39
- const DefaultStory: FC<{ content?: string }> = ({ content = '' }) => {
37
+ type StoryProps = {
38
+ content?: string;
39
+ };
40
+
41
+ const DefaultStory = ({ content = '' }: StoryProps) => {
40
42
  const { themeMode } = useThemeContext();
41
- const [text] = useState(Obj.make(DataType.Text, { content }));
43
+ const [text] = useState(createObject(DataType.makeText(content)));
42
44
  const toolbarState = useEditorToolbarState({ viewMode: 'preview' });
43
45
  const formattingObserver = useFormattingState(toolbarState);
44
46
  const { parentRef, view } = useTextEditor(() => {
@@ -48,7 +50,7 @@ const DefaultStory: FC<{ content?: string }> = ({ content = '' }) => {
48
50
  extensions: [
49
51
  formattingObserver,
50
52
  createBasicExtensions({ readOnly: toolbarState.viewMode === 'readonly' }),
51
- createMarkdownExtensions({ themeMode }),
53
+ createMarkdownExtensions(),
52
54
  createThemeExtensions({ themeMode, syntaxHighlighting: true, slots: editorSlots }),
53
55
  createDataExtensions({ id: text.id, text: createDocAccessor(text, ['content']) }),
54
56
  comments({
@@ -94,19 +96,22 @@ const content = [
94
96
  '',
95
97
  ].join('\n');
96
98
 
97
- const meta: Meta<typeof EditorToolbar> = {
99
+ const meta = {
98
100
  title: 'plugins/plugin-markdown/Toolbar',
99
- component: EditorToolbar,
100
- render: DefaultStory as any,
101
- decorators: [withTheme, withLayout({ fullscreen: true })],
101
+ component: EditorToolbar as any,
102
+ render: DefaultStory,
103
+ decorators: [withTheme],
102
104
  parameters: {
105
+ layout: 'fullscreen',
103
106
  translations,
104
107
  },
105
- };
108
+ } satisfies Meta<typeof DefaultStory>;
106
109
 
107
110
  export default meta;
108
111
 
109
- export const Default = {
112
+ type Story = StoryObj<typeof meta>;
113
+
114
+ export const Default: Story = {
110
115
  args: {
111
116
  content,
112
117
  },
@@ -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,30 @@ 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 { 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
- type AutocompleteResult,
23
+ Cursor,
24
24
  type EditorStateStore,
25
+ EditorView,
25
26
  type EditorViewMode,
26
27
  type Extension,
27
28
  InputModeExtensions,
29
+ type PreviewOptions,
30
+ type RenderCallback,
28
31
  createDataExtensions,
29
- autocomplete,
30
32
  decorateMarkdown,
33
+ documentId,
31
34
  folding,
32
35
  formattingKeymap,
33
36
  linkTooltip,
@@ -35,27 +38,21 @@ import {
35
38
  preview,
36
39
  selectionState,
37
40
  typewriter,
38
- type RenderCallback,
39
- EditorView,
40
- documentId,
41
- Cursor,
42
- type PreviewOptions,
43
41
  } from '@dxos/react-ui-editor';
44
42
  import { defaultTx } from '@dxos/react-ui-theme';
45
43
  import { type DataType } from '@dxos/schema';
46
- import { isNotFalsy } from '@dxos/util';
44
+ import { isTruthy } from '@dxos/util';
47
45
 
48
46
  import { MarkdownCapabilities } from './capabilities';
49
- import { type DocumentType, type MarkdownSettingsProps } from './types';
47
+ import { type Markdown } from './types';
50
48
  import { setFallbackName } from './util';
51
49
 
52
50
  type ExtensionsOptions = {
53
- document?: DocumentType;
51
+ document?: Markdown.Document;
54
52
  id?: string;
55
53
  text?: DataType.Text;
56
54
  dispatch?: PromiseIntentDispatcher;
57
- query?: QueryResult<DocumentType>;
58
- settings: MarkdownSettingsProps;
55
+ settings: Markdown.Settings;
59
56
  selectionManager?: SelectionManager;
60
57
  viewMode?: EditorViewMode;
61
58
  editorStateStore?: EditorStateStore;
@@ -160,7 +157,7 @@ export const useExtensions = ({
160
157
  }),
161
158
  baseExtensions,
162
159
  pluginExtensions,
163
- ].filter(isNotFalsy),
160
+ ].filter(isTruthy),
164
161
  [baseExtensions, pluginExtensions, document, document?.content?.target, text, id, space, identity],
165
162
  );
166
163
  };
@@ -174,7 +171,6 @@ const createBaseExtensions = ({
174
171
  dispatch,
175
172
  settings,
176
173
  selectionManager,
177
- query,
178
174
  viewMode,
179
175
  previewOptions,
180
176
  }: ExtensionsOptions): Extension[] => {
@@ -182,7 +178,7 @@ const createBaseExtensions = ({
182
178
  selectionManager && selectionChange(selectionManager),
183
179
  settings.editorInputMode && InputModeExtensions[settings.editorInputMode],
184
180
  settings.folding && folding(),
185
- ].filter(isNotFalsy);
181
+ ].filter(isTruthy);
186
182
 
187
183
  //
188
184
  // Markdown
@@ -216,30 +212,6 @@ const createBaseExtensions = ({
216
212
  );
217
213
  }
218
214
 
219
- //
220
- // Autocomplete object links.
221
- //
222
- if (query) {
223
- extensions.push(
224
- autocomplete({
225
- onSearch: (text: string) => {
226
- // TODO(burdon): Specify filter (e.g., stack).
227
- return query.objects
228
- .map<AutocompleteResult | undefined>((object) =>
229
- object.name?.length && object.id !== document?.id
230
- ? {
231
- label: object.name,
232
- // TODO(burdon): Factor out URL builder.
233
- apply: `[${object.name}](/${fullyQualifiedId(object)})`,
234
- }
235
- : undefined,
236
- )
237
- .filter(isNotFalsy);
238
- },
239
- }),
240
- );
241
- }
242
-
243
215
  if (settings.debug) {
244
216
  const items = settings.typewriter?.split(/[,\n]/) ?? '';
245
217
  if (items) {
@@ -0,0 +1,37 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Schema from 'effect/Schema';
7
+
8
+ import { ArtifactId, applyDiffs } from '@dxos/assistant';
9
+ import { createDocAccessor } from '@dxos/echo-db';
10
+ import { DatabaseService, defineFunction } from '@dxos/functions';
11
+ import { trim } from '@dxos/util';
12
+
13
+ import { Markdown } from '../types';
14
+
15
+ // TODO(wittjosiah): Reconcile with ThreadAction.AddProposal.
16
+ export default defineFunction({
17
+ key: 'dxos.org/function/markdown/diff',
18
+ name: 'Diff',
19
+ description: trim`
20
+ Applies a set of diffs to the markdown document.
21
+ `,
22
+ inputSchema: Schema.Struct({
23
+ id: ArtifactId.annotations({
24
+ description: 'The ID of the markdown document.',
25
+ }),
26
+ diffs: Schema.Array(Schema.String).annotations({
27
+ description: 'The diffs to apply to the document.',
28
+ }),
29
+ }),
30
+ outputSchema: Schema.Void,
31
+ handler: Effect.fn(function* ({ data: { id, diffs } }) {
32
+ const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Markdown.Document);
33
+ const content = yield* Effect.promise(() => object.content.load());
34
+ const accessor = createDocAccessor(content, ['content']);
35
+ applyDiffs(accessor, diffs);
36
+ }),
37
+ });
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { default as diff } from './diff';
6
+ export { default as open } from './open';
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Schema from 'effect/Schema';
7
+
8
+ import { ArtifactId } from '@dxos/assistant';
9
+ import { DatabaseService, defineFunction } from '@dxos/functions';
10
+
11
+ import { Markdown } from '../types';
12
+
13
+ export default defineFunction({
14
+ key: 'dxos.org/function/markdown/open',
15
+ name: 'Open',
16
+ description: 'Opens and reads the contents of a new markdown document.',
17
+ inputSchema: Schema.Struct({
18
+ id: ArtifactId.annotations({
19
+ description: 'The ID of the markdown document.',
20
+ }),
21
+ }),
22
+ outputSchema: Schema.Struct({
23
+ content: Schema.String,
24
+ }),
25
+ handler: Effect.fn(function* ({ data: { id } }) {
26
+ const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Markdown.Document);
27
+ const { content } = yield* Effect.promise(() => object.content.load());
28
+ return {
29
+ content,
30
+ };
31
+ }),
32
+ });
@@ -3,19 +3,19 @@
3
3
  //
4
4
 
5
5
  import { EditorView } from '@codemirror/view';
6
- import { Schema } from 'effect';
6
+ import * as Schema from 'effect/Schema';
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.
17
17
  */
18
- export const useSelectCurrentThread = (editorView: EditorView | undefined, documentId: string) => {
18
+ export const useSelectCurrentThread = (editorView: EditorView | null, documentId: string) => {
19
19
  const scrollIntoViewResolver = useMemo(
20
20
  () =>
21
21
  createResolver({
@@ -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,17 @@
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
  };
@@ -5,12 +5,12 @@
5
5
  import { type Resource } from '@dxos/react-ui';
6
6
 
7
7
  import { meta } from './meta';
8
- import { DocumentType } from './types';
8
+ import { Markdown } from './types';
9
9
 
10
10
  export const translations = [
11
11
  {
12
12
  'en-US': {
13
- [DocumentType.typename]: {
13
+ [Markdown.Document.typename]: {
14
14
  'typename label': 'Document',
15
15
  'typename label_zero': 'Documents',
16
16
  'typename label_one': 'Document',
@@ -21,6 +21,7 @@ export const translations = [
21
21
  },
22
22
  [meta.id]: {
23
23
  'plugin name': 'Editor',
24
+ 'settings title': 'Editor settings',
24
25
  'choose markdown from space dialog title': 'Choose one or more documents to add',
25
26
  // TODO(burdon): Style-guide for user-facing text (e.g., hints, questions, capitalization, etc.)
26
27
  'empty choose markdown from space message': 'None available; try creating a new one instead?',
@@ -0,0 +1,56 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { Obj, Ref, Type } from '@dxos/echo';
8
+ import { LabelAnnotation } from '@dxos/echo/internal';
9
+ import { EditorInputMode, EditorViewMode } from '@dxos/react-ui-editor/types';
10
+ import { DataType, ItemAnnotation } from '@dxos/schema';
11
+
12
+ /**
13
+ * Document Item type.
14
+ */
15
+ export const Document = Schema.Struct({
16
+ name: Schema.optional(Schema.String),
17
+ fallbackName: Schema.optional(Schema.String),
18
+ content: Type.Ref(DataType.Text),
19
+ }).pipe(
20
+ Type.Obj({
21
+ typename: 'dxos.org/type/Document',
22
+ version: '0.1.0',
23
+ }),
24
+ LabelAnnotation.set(['name', 'fallbackName']),
25
+ ItemAnnotation.set(true),
26
+ );
27
+
28
+ export type Document = Schema.Schema.Type<typeof Document>;
29
+
30
+ /**
31
+ * Document factory.
32
+ */
33
+ export const makeDocument = ({
34
+ content = '',
35
+ ...props
36
+ }: Partial<{ name: string; fallbackName: string; content: string }> = {}) =>
37
+ Obj.make(Document, { ...props, content: Ref.make(DataType.makeText(content)) });
38
+
39
+ /**
40
+ * Plugin settings.
41
+ */
42
+ export const Settings = Schema.mutable(
43
+ Schema.Struct({
44
+ defaultViewMode: EditorViewMode,
45
+ editorInputMode: Schema.optional(EditorInputMode),
46
+ experimental: Schema.optional(Schema.Boolean),
47
+ debug: Schema.optional(Schema.Boolean),
48
+ toolbar: Schema.optional(Schema.Boolean),
49
+ typewriter: Schema.optional(Schema.String),
50
+ // TODO(burdon): Per document settings.
51
+ numberedHeadings: Schema.optional(Schema.Boolean),
52
+ folding: Schema.optional(Schema.Boolean),
53
+ }),
54
+ );
55
+
56
+ export interface Settings extends Schema.Schema.Type<typeof Settings> {}