@dxos/react-ui-editor 0.3.11-main.e8c477a → 0.3.11-main.ea1c9ce

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/index.mjs +1754 -1305
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +16 -14
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +20 -17
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +6 -6
  9. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/TextEditor/hooks.stories.d.ts +23 -0
  12. package/dist/types/src/components/TextEditor/hooks.stories.d.ts.map +1 -0
  13. package/dist/types/src/components/Toolbar/Toolbar.d.ts +25 -0
  14. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -0
  15. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +23 -0
  16. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -0
  17. package/dist/types/src/components/Toolbar/index.d.ts +2 -0
  18. package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
  19. package/dist/types/src/components/index.d.ts +1 -0
  20. package/dist/types/src/components/index.d.ts.map +1 -1
  21. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
  22. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  23. package/dist/types/src/extensions/automerge/automerge.spec.d.ts +2 -0
  24. package/dist/types/src/extensions/automerge/automerge.spec.d.ts.map +1 -0
  25. package/dist/types/src/extensions/automerge/automerge.test.d.ts +2 -0
  26. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +1 -0
  27. package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
  28. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
  29. package/dist/types/src/extensions/automerge/defs.d.ts +9 -11
  30. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  31. package/dist/types/src/extensions/automerge/index.d.ts +0 -1
  32. package/dist/types/src/extensions/automerge/index.d.ts.map +1 -1
  33. package/dist/types/src/extensions/automerge/semaphore.d.ts +8 -12
  34. package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -1
  35. package/dist/types/src/extensions/automerge/update-automerge.d.ts +2 -2
  36. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  37. package/dist/types/src/extensions/awareness.d.ts +2 -2
  38. package/dist/types/src/extensions/awareness.d.ts.map +1 -1
  39. package/dist/types/src/extensions/basic.d.ts +4 -5
  40. package/dist/types/src/extensions/basic.d.ts.map +1 -1
  41. package/dist/types/src/extensions/comments.d.ts +37 -20
  42. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  43. package/dist/types/src/{util → extensions}/cursor.d.ts +10 -2
  44. package/dist/types/src/extensions/cursor.d.ts.map +1 -0
  45. package/dist/types/src/extensions/index.d.ts +2 -7
  46. package/dist/types/src/extensions/index.d.ts.map +1 -1
  47. package/dist/types/src/extensions/markdown/bundle.d.ts +3 -6
  48. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  49. package/dist/types/src/extensions/markdown/code.d.ts.map +1 -0
  50. package/dist/types/src/extensions/markdown/formatting.d.ts +13 -0
  51. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -0
  52. package/dist/types/src/extensions/markdown/heading.d.ts +6 -0
  53. package/dist/types/src/extensions/markdown/heading.d.ts.map +1 -0
  54. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  55. package/dist/types/src/extensions/markdown/hr.d.ts.map +1 -0
  56. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -0
  57. package/dist/types/src/extensions/markdown/index.d.ts +8 -0
  58. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -1
  59. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -0
  60. package/dist/types/src/extensions/markdown/table.d.ts.map +1 -0
  61. package/dist/types/src/extensions/markdown/tasklist.d.ts.map +1 -0
  62. package/dist/types/src/extensions/mention.d.ts.map +1 -1
  63. package/dist/types/src/extensions/outliner.d.ts +4 -0
  64. package/dist/types/src/extensions/outliner.d.ts.map +1 -0
  65. package/dist/types/src/hooks/awareness-provider.d.ts +7 -4
  66. package/dist/types/src/hooks/awareness-provider.d.ts.map +1 -1
  67. package/dist/types/src/hooks/defs.d.ts +25 -0
  68. package/dist/types/src/hooks/defs.d.ts.map +1 -0
  69. package/dist/types/src/hooks/index.d.ts +4 -2
  70. package/dist/types/src/hooks/index.d.ts.map +1 -1
  71. package/dist/types/src/hooks/useActionHandler.d.ts +4 -0
  72. package/dist/types/src/hooks/useActionHandler.d.ts.map +1 -0
  73. package/dist/types/src/hooks/useEditorView.d.ts +17 -0
  74. package/dist/types/src/hooks/useEditorView.d.ts.map +1 -0
  75. package/dist/types/src/hooks/useTextEditor.d.ts +39 -0
  76. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -0
  77. package/dist/types/src/hooks/useTextModel.d.ts +14 -32
  78. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  79. package/dist/types/src/index.d.ts +1 -0
  80. package/dist/types/src/index.d.ts.map +1 -1
  81. package/dist/types/src/styles/markdown.d.ts +2 -2
  82. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  83. package/dist/types/src/themes/default.d.ts.map +1 -1
  84. package/dist/types/src/util.d.ts +7 -0
  85. package/dist/types/src/util.d.ts.map +1 -0
  86. package/package.json +48 -37
  87. package/src/components/TextEditor/MarkdownEditor.stories.tsx +84 -90
  88. package/src/components/TextEditor/TextEditor.stories.tsx +12 -46
  89. package/src/components/TextEditor/TextEditor.tsx +135 -95
  90. package/src/components/TextEditor/automerge.stories.tsx +1 -2
  91. package/src/components/TextEditor/hooks.stories.tsx +106 -0
  92. package/src/components/Toolbar/Toolbar.stories.tsx +90 -0
  93. package/src/components/Toolbar/Toolbar.tsx +166 -0
  94. package/src/components/Toolbar/index.ts +5 -0
  95. package/src/components/index.ts +1 -0
  96. package/src/extensions/autocomplete.ts +6 -3
  97. package/src/extensions/automerge/automerge.spec.tsx +76 -0
  98. package/src/extensions/automerge/automerge.test.ts +13 -0
  99. package/src/extensions/automerge/automerge.ts +55 -46
  100. package/src/extensions/automerge/cursor.ts +5 -4
  101. package/src/extensions/automerge/defs.ts +13 -34
  102. package/src/extensions/automerge/index.ts +0 -1
  103. package/src/extensions/automerge/semaphore.ts +33 -32
  104. package/src/extensions/automerge/update-automerge.ts +14 -8
  105. package/src/extensions/automerge/update-codemirror.ts +5 -5
  106. package/src/extensions/awareness.ts +46 -49
  107. package/src/extensions/basic.ts +17 -10
  108. package/src/extensions/blast.ts +4 -1
  109. package/src/extensions/comments.ts +320 -264
  110. package/src/extensions/cursor.ts +50 -0
  111. package/src/extensions/index.ts +2 -7
  112. package/src/extensions/markdown/bundle.ts +23 -28
  113. package/src/extensions/markdown/code.ts +150 -0
  114. package/src/extensions/markdown/formatting.ts +188 -0
  115. package/src/extensions/markdown/heading.ts +59 -0
  116. package/src/extensions/markdown/highlight.ts +9 -23
  117. package/src/extensions/markdown/hr.ts +71 -0
  118. package/src/extensions/{image.ts → markdown/image.ts} +2 -2
  119. package/src/extensions/markdown/index.ts +8 -0
  120. package/src/extensions/{link.ts → markdown/link.ts} +20 -11
  121. package/src/extensions/{table.ts → markdown/table.ts} +2 -2
  122. package/src/extensions/markdown/tasklist.ts +110 -0
  123. package/src/extensions/mention.ts +9 -2
  124. package/src/extensions/outliner.ts +12 -0
  125. package/src/hooks/awareness-provider.ts +24 -20
  126. package/src/hooks/defs.ts +42 -0
  127. package/src/hooks/index.ts +5 -2
  128. package/src/hooks/useActionHandler.ts +62 -0
  129. package/src/hooks/useEditorView.ts +29 -0
  130. package/src/hooks/useTextEditor.ts +153 -0
  131. package/src/hooks/useTextModel.ts +67 -60
  132. package/src/index.ts +1 -0
  133. package/src/styles/markdown.ts +9 -12
  134. package/src/themes/default.ts +24 -54
  135. package/src/util.ts +41 -0
  136. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts +0 -12
  137. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts.map +0 -1
  138. package/dist/types/src/components/TextEditor/yjs.stories.d.ts +0 -12
  139. package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +0 -1
  140. package/dist/types/src/extensions/code.d.ts.map +0 -1
  141. package/dist/types/src/extensions/hr.d.ts.map +0 -1
  142. package/dist/types/src/extensions/image.d.ts.map +0 -1
  143. package/dist/types/src/extensions/link.d.ts.map +0 -1
  144. package/dist/types/src/extensions/table.d.ts.map +0 -1
  145. package/dist/types/src/extensions/tasklist.d.ts.map +0 -1
  146. package/dist/types/src/extensions/yjs/cursor.d.ts +0 -4
  147. package/dist/types/src/extensions/yjs/cursor.d.ts.map +0 -1
  148. package/dist/types/src/extensions/yjs/index.d.ts +0 -2
  149. package/dist/types/src/extensions/yjs/index.d.ts.map +0 -1
  150. package/dist/types/src/extensions/yjs/yjs.d.ts +0 -4
  151. package/dist/types/src/extensions/yjs/yjs.d.ts.map +0 -1
  152. package/dist/types/src/extensions/yjs/yjs.test.d.ts +0 -2
  153. package/dist/types/src/extensions/yjs/yjs.test.d.ts.map +0 -1
  154. package/dist/types/src/hooks/automerge.d.ts +0 -3
  155. package/dist/types/src/hooks/automerge.d.ts.map +0 -1
  156. package/dist/types/src/hooks/yjs.d.ts +0 -27
  157. package/dist/types/src/hooks/yjs.d.ts.map +0 -1
  158. package/dist/types/src/testing/index.d.ts +0 -3
  159. package/dist/types/src/testing/index.d.ts.map +0 -1
  160. package/dist/types/src/testing/proto/gen/schema.d.ts +0 -15
  161. package/dist/types/src/testing/proto/gen/schema.d.ts.map +0 -1
  162. package/dist/types/src/testing/proto/index.d.ts +0 -2
  163. package/dist/types/src/testing/proto/index.d.ts.map +0 -1
  164. package/dist/types/src/testing/replicator.d.ts +0 -45
  165. package/dist/types/src/testing/replicator.d.ts.map +0 -1
  166. package/dist/types/src/util/cursor.d.ts.map +0 -1
  167. package/dist/types/src/util/index.d.ts +0 -3
  168. package/dist/types/src/util/index.d.ts.map +0 -1
  169. package/dist/types/src/util/util.d.ts +0 -5
  170. package/dist/types/src/util/util.d.ts.map +0 -1
  171. package/src/components/TextEditor/codemirror.stories.ts +0 -115
  172. package/src/components/TextEditor/yjs.stories.tsx +0 -56
  173. package/src/extensions/code.ts +0 -98
  174. package/src/extensions/hr.ts +0 -73
  175. package/src/extensions/tasklist.ts +0 -119
  176. package/src/extensions/yjs/cursor.ts +0 -21
  177. package/src/extensions/yjs/index.ts +0 -5
  178. package/src/extensions/yjs/yjs.test.ts +0 -35
  179. package/src/extensions/yjs/yjs.ts +0 -16
  180. package/src/hooks/automerge.ts +0 -52
  181. package/src/hooks/yjs.ts +0 -178
  182. package/src/testing/index.ts +0 -6
  183. package/src/testing/proto/gen/schema.ts +0 -49
  184. package/src/testing/proto/index.ts +0 -5
  185. package/src/testing/proto/schema.proto +0 -15
  186. package/src/testing/replicator.ts +0 -184
  187. package/src/util/cursor.ts +0 -29
  188. package/src/util/index.ts +0 -6
  189. package/src/util/util.ts +0 -18
  190. /package/dist/types/src/extensions/{code.d.ts → markdown/code.d.ts} +0 -0
  191. /package/dist/types/src/extensions/{hr.d.ts → markdown/hr.d.ts} +0 -0
  192. /package/dist/types/src/extensions/{image.d.ts → markdown/image.d.ts} +0 -0
  193. /package/dist/types/src/extensions/{link.d.ts → markdown/link.d.ts} +0 -0
  194. /package/dist/types/src/extensions/{table.d.ts → markdown/table.d.ts} +0 -0
  195. /package/dist/types/src/extensions/{tasklist.d.ts → markdown/tasklist.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTextEditor.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useTextEditor.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAGpE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,iBAAiB,CAAC;AAEtB,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,iEAOvB,oBAAoB,KAAQ,aAqE9B,CAAC;AAIF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,eAAO,MAAM,oBAAoB;;MAAgC,SAMhE,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE;YACP,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,OAAO,CAAC,EAAE;YACR,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,qBAAqB,iCAAiC,sBAAsB,KAAQ,SAShG,CAAC"}
@@ -1,40 +1,22 @@
1
- import { StateField, type Extension } from '@codemirror/state';
2
- import type * as YP from 'y-protocols/awareness';
3
- import { type DocAccessor, type Space, type TextObject } from '@dxos/react-client/echo';
1
+ import { type Dispatch, type SetStateAction } from 'react';
2
+ import { type Space, type TextObject } from '@dxos/react-client/echo';
4
3
  import { type Identity } from '@dxos/react-client/halo';
5
- import type { YText, YXmlFragment } from '@dxos/text-model';
6
- /**
7
- * State field makes the model available to other extensions.
8
- */
9
- export declare const modelState: StateField<EditorModel | undefined>;
10
- export type Range = {
11
- from: number;
12
- to: number;
13
- };
14
- export type CommentRange = {
15
- id: string;
16
- cursor: string;
17
- };
18
- export type EditorModel = {
19
- id: string;
20
- text: () => string;
21
- extension?: Extension;
22
- content: string | YText | YXmlFragment | DocAccessor;
23
- /**
24
- * @deprecated Use CursorConverter.
25
- */
26
- getCursorFromRange?: (value: Range) => string;
27
- getRangeFromCursor?: (cursor: string) => Range | undefined;
28
- awareness?: YP.Awareness;
29
- peer?: {
30
- id: string;
31
- name?: string;
32
- };
33
- };
4
+ import { type EditorModel } from './defs';
34
5
  export type UseTextModelProps = {
35
6
  identity?: Identity | null;
36
7
  space?: Space;
37
8
  text?: TextObject;
38
9
  };
39
10
  export declare const useTextModel: (props: UseTextModelProps) => EditorModel | undefined;
11
+ /**
12
+ * For use primarily in stories & tests so the dependence on TextObject can be avoided.
13
+ * @param id
14
+ * @param defaultContent
15
+ */
16
+ export declare const useInMemoryTextModel: ({ id, defaultContent, }: {
17
+ id: string;
18
+ defaultContent?: string | undefined;
19
+ }) => EditorModel & {
20
+ setContent: Dispatch<SetStateAction<string>>;
21
+ };
40
22
  //# sourceMappingURL=useTextModel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTextModel.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useTextModel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC3G,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAO5D;;GAEG;AACH,eAAO,MAAM,UAAU,qCAGrB,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtB,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC;IACrD;;OAEG;IACH,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IAC9C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,GAAG,SAAS,CAAC;IAE3D,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;IAEzB,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAIF,eAAO,MAAM,YAAY,UAAW,iBAAiB,KAAG,WAAW,GAAG,SAKrE,CAAC"}
1
+ {"version":3,"file":"useTextModel.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useTextModel.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAuB,MAAM,OAAO,CAAC;AAKhF,OAAO,EAAqB,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,QAAQ,CAAC;AAKtD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,YAAY,UAAW,iBAAiB,KAAG,WAAW,GAAG,SAKrE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;QAI3B,MAAM;;;gBAEoB,SAAS,eAAe,MAAM,CAAC,CAAC;CAG/D,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export { TextKind } from '@dxos/protocols/proto/dxos/echo/model/text';
2
2
  export { Doc, YText, YXmlFragment } from '@dxos/text-model';
3
3
  export { type Extension } from '@codemirror/state';
4
+ export { type EditorView, keymap } from '@codemirror/view';
4
5
  export * from './components';
5
6
  export * from './extensions';
6
7
  export * from './hooks';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AACtE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AACtE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE3D,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
2
- export declare const headings: Record<HeadingLevel, string[]>;
3
- export declare const heading: (level: HeadingLevel, readonly?: boolean) => string;
2
+ export declare const headings: Record<HeadingLevel, string>;
3
+ export declare const heading: (level: HeadingLevel) => string;
4
4
  export declare const text = "text-neutral-800 dark:text-neutral-200";
5
5
  export declare const light = "text-neutral-200 dark:text-neutral-800";
6
6
  export declare const mark: string;
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../../src/styles/markdown.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAIjD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAOnD,CAAC;AAEF,eAAO,MAAM,OAAO,UAAW,YAAY,aAAa,OAAO,WAG9D,CAAC;AAEF,eAAO,MAAM,IAAI,2CAA2C,CAAC;AAC7D,eAAO,MAAM,KAAK,2CAA2C,CAAC;AAE9D,eAAO,MAAM,IAAI,QAAmE,CAAC;AAErF,eAAO,MAAM,SAAS,UAAU,CAAC;AAEjC,eAAO,MAAM,IAAI,cAAc,CAAC;AAChC,eAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAE5C,eAAO,MAAM,IAAI,mEAAmE,CAAC;AACrF,eAAO,MAAM,QAAQ,+BAA+B,CAAC;AACrD,eAAO,MAAM,SAAS,kDAAkD,CAAC;AAEzE,eAAO,MAAM,SAAS,QAAmB,CAAC;AAG1C,eAAO,MAAM,UAAU,QAAsF,CAAC;AAG9G,eAAO,MAAM,cAAc,0GAC8E,CAAC;AAG1G,eAAO,MAAM,aAAa,wHAC6F,CAAC;AACxH,eAAO,MAAM,WAAW,+IACkH,CAAC;AAE3I,eAAO,MAAM,QAAQ,gDAAgD,CAAC"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../../src/styles/markdown.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAIjD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAOjD,CAAC;AAEF,eAAO,MAAM,OAAO,UAAW,YAAY,WAE1C,CAAC;AAEF,eAAO,MAAM,IAAI,2CAA2C,CAAC;AAC7D,eAAO,MAAM,KAAK,2CAA2C,CAAC;AAE9D,eAAO,MAAM,IAAI,QAAmE,CAAC;AAErF,eAAO,MAAM,SAAS,UAAU,CAAC;AAEjC,eAAO,MAAM,IAAI,cAAc,CAAC;AAChC,eAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAE5C,eAAO,MAAM,IAAI,mEAAmE,CAAC;AACrF,eAAO,MAAM,QAAQ,+BAA+B,CAAC;AACrD,eAAO,MAAM,SAAS,kDAAkD,CAAC;AAEzE,eAAO,MAAM,SAAS,QAAmB,CAAC;AAE1C,eAAO,MAAM,UAAU,QAAsF,CAAC;AAE9G,eAAO,MAAM,cAAc,0GAC8E,CAAC;AAG1G,eAAO,MAAM,aAAa,wHAC6F,CAAC;AACxH,eAAO,MAAM,WAAW,+IACkH,CAAC;AAE3I,eAAO,MAAM,QAAQ,gDAAgD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../../src/themes/default.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,WAAW,CAAC;AAKrD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,WAoQ1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,WAOvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAK3B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,WAOvB,CAAC"}
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../../src/themes/default.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,WAAW,CAAC;AAKrD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,WAoO1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,WAOvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAO3B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,WAOvB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Transaction } from '@codemirror/state';
2
+ /**
3
+ * CodeMirror callbacks swallow errors so wrap handlers.
4
+ */
5
+ export declare const callbackWrapper: <T extends Function>(fn: T) => T;
6
+ export declare const logChanges: (trs: readonly Transaction[]) => void;
7
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD;;GAEG;AAEH,eAAO,MAAM,eAAe,kCAOR,CAAC;AAErB,eAAO,MAAM,UAAU,QAAS,SAAS,WAAW,EAAE,SAmBrD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-editor",
3
- "version": "0.3.11-main.e8c477a",
3
+ "version": "0.3.11-main.ea1c9ce",
4
4
  "description": "Document editing experience within a DXOS shell.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -13,20 +13,21 @@
13
13
  "src"
14
14
  ],
15
15
  "dependencies": {
16
- "@codemirror/autocomplete": "^6.11.1",
17
- "@codemirror/commands": "^6.3.2",
18
- "@codemirror/lang-markdown": "^6.2.3",
19
- "@codemirror/language": "^6.9.3",
16
+ "@codemirror/autocomplete": "^6.12.0",
17
+ "@codemirror/commands": "^6.3.3",
18
+ "@codemirror/lang-markdown": "^6.2.4",
19
+ "@codemirror/language": "^6.10.0",
20
20
  "@codemirror/language-data": "^6.3.1",
21
21
  "@codemirror/lint": "^6.4.2",
22
22
  "@codemirror/search": "^6.5.5",
23
- "@codemirror/state": "^6.3.3",
23
+ "@codemirror/state": "^6.4.0",
24
24
  "@codemirror/theme-one-dark": "^6.1.2",
25
- "@codemirror/view": "^6.22.2",
26
- "@fluentui/react-tabster": "^9.16.1",
27
- "@lezer/common": "^1.1.1",
25
+ "@codemirror/view": "^6.23.0",
26
+ "@fluentui/react-tabster": "^9.17.4",
27
+ "@lezer/common": "^1.2.1",
28
28
  "@lezer/highlight": "^1.2.0",
29
- "@lezer/markdown": "^1.1.1",
29
+ "@lezer/markdown": "^1.2.0",
30
+ "@radix-ui/react-context": "^1.0.0",
30
31
  "@replit/codemirror-vim": "^6.0.14",
31
32
  "codemirror": "6.0.1",
32
33
  "lib0": "^0.2.65",
@@ -35,55 +36,65 @@
35
36
  "lodash.pick": "^4.4.0",
36
37
  "lodash.sortby": "^4.7.0",
37
38
  "style-mod": "^4.1.0",
38
- "y-codemirror.next": "^0.3.2",
39
- "y-protocols": "^1.0.5",
40
- "yjs": "^13.6.10",
41
- "@dxos/async": "0.3.11-main.e8c477a",
42
- "@dxos/automerge": "0.3.11-main.e8c477a",
43
- "@dxos/context": "0.3.11-main.e8c477a",
44
- "@dxos/debug": "0.3.11-main.e8c477a",
45
- "@dxos/echo-schema": "0.3.11-main.e8c477a",
46
- "@dxos/display-name": "0.3.11-main.e8c477a",
47
- "@dxos/invariant": "0.3.11-main.e8c477a",
48
- "@dxos/log": "0.3.11-main.e8c477a",
49
- "@dxos/protocols": "0.3.11-main.e8c477a",
50
- "@dxos/react-async": "0.3.11-main.e8c477a",
51
- "@dxos/react-ui-theme": "0.3.11-main.e8c477a",
52
- "@dxos/react-ui": "0.3.11-main.e8c477a",
53
- "@dxos/text-model": "0.3.11-main.e8c477a",
54
- "@dxos/util": "0.3.11-main.e8c477a"
39
+ "@dxos/async": "0.3.11-main.ea1c9ce",
40
+ "@dxos/context": "0.3.11-main.ea1c9ce",
41
+ "@dxos/automerge": "0.3.11-main.ea1c9ce",
42
+ "@dxos/display-name": "0.3.11-main.ea1c9ce",
43
+ "@dxos/debug": "0.3.11-main.ea1c9ce",
44
+ "@dxos/echo-schema": "0.3.11-main.ea1c9ce",
45
+ "@dxos/invariant": "0.3.11-main.ea1c9ce",
46
+ "@dxos/log": "0.3.11-main.ea1c9ce",
47
+ "@dxos/protocols": "0.3.11-main.ea1c9ce",
48
+ "@dxos/react-async": "0.3.11-main.ea1c9ce",
49
+ "@dxos/react-ui": "0.3.11-main.ea1c9ce",
50
+ "@dxos/text-model": "0.3.11-main.ea1c9ce",
51
+ "@dxos/react-ui-theme": "0.3.11-main.ea1c9ce",
52
+ "@dxos/util": "0.3.11-main.ea1c9ce"
55
53
  },
56
54
  "devDependencies": {
57
- "@automerge/automerge-repo-network-broadcastchannel": "^1.0.19",
58
- "@faker-js/faker": "^8.0.2",
55
+ "@automerge/automerge-repo-network-broadcastchannel": "^1.1.0",
56
+ "@faker-js/faker": "^8.3.1",
59
57
  "@phosphor-icons/react": "^2.0.5",
60
58
  "@preact/signals-react": "^1.3.6",
59
+ "@testing-library/dom": "^8.17.1",
60
+ "@testing-library/react": "^13.4.0",
61
+ "@testing-library/user-event": "^14.4.3",
61
62
  "@types/lodash.defaultsdeep": "^4.6.6",
62
63
  "@types/lodash.get": "^4.4.7",
63
64
  "@types/lodash.pick": "^4.4.7",
64
65
  "@types/lodash.sortby": "^4.7.7",
65
66
  "@types/react": "^18.0.21",
66
67
  "@types/react-dom": "^18.0.6",
68
+ "@types/react-test-renderer": "^17.0.2",
69
+ "@vitest/ui": "^1.2.1",
67
70
  "deepsignal": "1.4.0-shallow.0",
71
+ "happy-dom": "^13.3.1",
72
+ "jsdom": "^20.0.1",
68
73
  "react": "^18.2.0",
69
74
  "react-dom": "^18.2.0",
70
- "@dxos/config": "0.3.11-main.e8c477a",
71
- "@dxos/echo-typegen": "0.3.11-main.e8c477a",
72
- "@dxos/react-client": "0.3.11-main.e8c477a",
73
- "@dxos/echo-signals": "0.3.11-main.e8c477a",
74
- "@dxos/react-ui": "0.3.11-main.e8c477a",
75
- "@dxos/storybook-utils": "0.3.11-main.e8c477a"
75
+ "react-test-renderer": "^18.2.0",
76
+ "vite": "^5.0.12",
77
+ "vite-plugin-top-level-await": "^1.4.1",
78
+ "vite-plugin-wasm": "^3.3.0",
79
+ "vitest": "^1.2.1",
80
+ "@dxos/config": "0.3.11-main.ea1c9ce",
81
+ "@dxos/echo-signals": "0.3.11-main.ea1c9ce",
82
+ "@dxos/echo-typegen": "0.3.11-main.ea1c9ce",
83
+ "@dxos/keyboard": "0.3.11-main.ea1c9ce",
84
+ "@dxos/storybook-utils": "0.3.11-main.ea1c9ce",
85
+ "@dxos/react-client": "0.3.11-main.ea1c9ce",
86
+ "@dxos/react-ui": "0.3.11-main.ea1c9ce"
76
87
  },
77
88
  "peerDependencies": {
78
89
  "@phosphor-icons/react": "^2.0.5",
79
90
  "react": "^18.2.0",
80
91
  "react-dom": "^18.2.0",
81
- "@dxos/react-client": "0.3.11-main.e8c477a"
92
+ "@dxos/react-client": "0.3.11-main.ea1c9ce"
82
93
  },
83
94
  "publishConfig": {
84
95
  "access": "public"
85
96
  },
86
97
  "scripts": {
87
- "prebuild": "dxtype src/testing/proto/schema.proto src/testing/proto/gen/schema.ts"
98
+ "vitest": "vitest --ui"
88
99
  }
89
100
  }
@@ -4,7 +4,7 @@
4
4
 
5
5
  import '@dxosTheme';
6
6
 
7
- import { EditorView } from '@codemirror/view';
7
+ import { type EditorView } from '@codemirror/view';
8
8
  import { faker } from '@faker-js/faker';
9
9
  import { ArrowSquareOut } from '@phosphor-icons/react';
10
10
  import defaultsDeep from 'lodash.defaultsdeep';
@@ -12,33 +12,32 @@ import React, { type FC, StrictMode, useRef, useState } from 'react';
12
12
  import { createRoot } from 'react-dom/client';
13
13
 
14
14
  import { TextObject } from '@dxos/echo-schema';
15
+ import { keySymbols, parseShortcut } from '@dxos/keyboard';
15
16
  import { PublicKey } from '@dxos/keys';
16
17
  import { fixedInsetFlexLayout, getSize, groupSurface, mx } from '@dxos/react-ui-theme';
17
18
  import { withTheme } from '@dxos/storybook-utils';
18
19
 
19
- import { MarkdownEditor, type TextEditorProps, type TextEditorRef } from './TextEditor';
20
+ import { MarkdownEditor, type TextEditorProps } from './TextEditor';
20
21
  import {
22
+ type CommentsOptions,
23
+ type LinkOptions,
21
24
  autocomplete,
22
25
  blast,
23
26
  code,
24
27
  comments,
25
28
  defaultOptions,
29
+ heading,
26
30
  hr,
27
31
  image,
28
- listener,
29
32
  link,
30
33
  mention,
31
34
  table,
32
35
  tasklist,
33
36
  typewriter,
34
- type CommentsOptions,
35
- type LinkOptions,
37
+ useComments,
38
+ formatting,
36
39
  } from '../../extensions';
37
- import { type CommentRange, useTextModel } from '../../hooks';
38
-
39
- // Extensions:
40
- // TODO(burdon): Table of contents.
41
- // TODO(burdon): Front-matter
40
+ import { type Comment, useTextModel } from '../../hooks';
42
41
 
43
42
  faker.seed(101);
44
43
 
@@ -54,8 +53,8 @@ const text = {
54
53
  '- [x] decorator',
55
54
  '- [ ] checkbox',
56
55
  ' - [ ] state',
57
- ' - [ ] indent',
58
- ' - [x] style',
56
+ ' - [ ] indent',
57
+ ' - [x] style',
59
58
  '',
60
59
  ),
61
60
 
@@ -81,7 +80,7 @@ const text = {
81
80
  '## Code',
82
81
  '',
83
82
  '```',
84
- 'const x = 100;',
83
+ '$ ls -las',
85
84
  '```',
86
85
  '',
87
86
  '```tsx',
@@ -161,6 +160,8 @@ const links = [
161
160
  { label: 'StackEdit', apply: '[StackEdit](https://stackedit.io/app)' },
162
161
  ];
163
162
 
163
+ const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
164
+
164
165
  const hover =
165
166
  'rounded-sm text-base text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200';
166
167
 
@@ -182,15 +183,15 @@ const Key: FC<{ char: string }> = ({ char }) => (
182
183
  </span>
183
184
  );
184
185
 
185
- const onCommentsHover: CommentsOptions['onHover'] = (el) => {
186
+ const onCommentsHover: CommentsOptions['onHover'] = (el, shortcut) => {
186
187
  createRoot(el).render(
187
188
  <StrictMode>
188
189
  <div className='flex items-center gap-2 px-2 py-2 bg-neutral-700 text-white text-xs rounded'>
189
190
  <div>Create comment</div>
190
- {/* TODO(burdon): Unify shortcuts. */}
191
191
  <div className='flex gap-1'>
192
- <Key char='⌘' />
193
- <Key char="'" />
192
+ {keySymbols(parseShortcut(shortcut)).map((char) => (
193
+ <Key key={char} char={char} />
194
+ ))}
194
195
  </div>
195
196
  </div>
196
197
  </StrictMode>,
@@ -201,7 +202,7 @@ const onRenderLink: LinkOptions['onRender'] = (el, url) => {
201
202
  createRoot(el).render(
202
203
  <StrictMode>
203
204
  <a href={url} target='_blank' rel='noreferrer' className={hover}>
204
- <ArrowSquareOut weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 mb-1')} />
205
+ <ArrowSquareOut weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 mb-[2px]')} />
205
206
  </a>
206
207
  </StrictMode>,
207
208
  );
@@ -209,23 +210,23 @@ const onRenderLink: LinkOptions['onRender'] = (el, url) => {
209
210
 
210
211
  type StoryProps = {
211
212
  text?: string;
212
- automerge?: boolean;
213
- } & Pick<TextEditorProps, 'comments' | 'readonly' | 'extensions' | 'slots'>;
213
+ comments?: Comment[];
214
+ } & Pick<TextEditorProps, 'readonly' | 'placeholder' | 'slots' | 'extensions'>;
214
215
 
215
- const Story = ({ text, automerge, ...props }: StoryProps) => {
216
- const ref = useRef<TextEditorRef>(null);
217
- const [item] = useState({ text: new TextObject(text, undefined, undefined, { automerge }) });
216
+ const Story = ({ text, comments, placeholder = 'New document.', ...props }: StoryProps) => {
217
+ const [item] = useState({ text: new TextObject(text) });
218
+ const view = useRef<EditorView>(null);
218
219
  const model = useTextModel({ text: item.text });
220
+ useComments(view.current, comments);
219
221
  if (!model) {
220
222
  return null;
221
223
  }
222
224
 
223
225
  return (
224
226
  <div className={mx(fixedInsetFlexLayout, groupSurface)}>
225
- <div className='flex justify-center overflow-y-scroll'>
226
- <div className='flex flex-col w-[800px] py-16'>
227
- <MarkdownEditor ref={ref} model={model} {...props} />
228
- <div className='flex shrink-0 h-[300px]'></div>
227
+ <div className='flex h-full justify-center'>
228
+ <div className='flex flex-col h-full w-[800px]'>
229
+ <MarkdownEditor ref={view} model={model} placeholder={placeholder} {...props} />
229
230
  </div>
230
231
  </div>
231
232
  </div>
@@ -239,11 +240,13 @@ export default {
239
240
  render: Story,
240
241
  };
241
242
 
242
- const extensions = [
243
+ const defaults = [
243
244
  autocomplete({
244
245
  onSearch: (text) => links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase())),
245
246
  }),
246
247
  code(),
248
+ formatting(),
249
+ heading(),
247
250
  hr(),
248
251
  image(),
249
252
  link({ onRender: onRenderLink, onHover: onHoverLinkTooltip }),
@@ -252,31 +255,25 @@ const extensions = [
252
255
  ];
253
256
 
254
257
  export const Default = {
255
- render: () => <Story text={document} extensions={extensions} />,
258
+ render: () => <Story text={document} extensions={defaults} />,
256
259
  };
257
260
 
258
261
  export const Readonly = {
259
- render: () => <Story text={document} extensions={extensions} readonly />,
260
- };
261
-
262
- const large = faker.helpers.multiple(() => faker.lorem.paragraph({ min: 8, max: 16 }), { count: 20 }).join('\n\n');
263
-
264
- export const Large = {
265
- render: () => <Story text={str('# Large Document', '', large)} extensions={[]} />,
262
+ render: () => <Story text={document} extensions={defaults} readonly />,
266
263
  };
267
264
 
268
265
  export const NoExtensions = {
269
266
  render: () => <Story text={document} />,
270
267
  };
271
268
 
272
- // TODO(burdon): Cursor bug if no newline after BR (cursor down just loops back to start of each paragraph).
273
- export const HorizontalRule = {
274
- render: () => (
275
- <Story
276
- text={str('# Horizontal Rule', '', text.paragraphs, '---', '', text.paragraphs, '---', '', text.paragraphs)}
277
- extensions={[hr()]}
278
- />
279
- ),
269
+ const large = faker.helpers.multiple(() => faker.lorem.paragraph({ min: 8, max: 16 }), { count: 20 }).join('\n\n');
270
+
271
+ export const Empty = {
272
+ render: () => <Story />,
273
+ };
274
+
275
+ export const Scrolling = {
276
+ render: () => <Story text={str('# Large Document', '', large)} extensions={[]} />,
280
277
  };
281
278
 
282
279
  export const Links = {
@@ -289,37 +286,36 @@ export const Links = {
289
286
  };
290
287
 
291
288
  export const Code = {
292
- render: () => <Story text={str(text.code, text.footer)} extensions={[code()]} readonly />,
293
- };
294
-
295
- export const Table = {
296
- render: () => <Story text={str(text.table, text.footer)} extensions={[table()]} />,
289
+ render: () => <Story text={str(text.code, text.footer)} extensions={[code()]} />,
297
290
  };
298
291
 
299
292
  export const Image = {
300
- render: () => <Story text={str(text.image, text.footer)} readonly extensions={[image()]} />,
293
+ render: () => <Story text={str(text.image, text.footer)} extensions={[image()]} />,
301
294
  };
302
295
 
303
- export const Tasklist = {
296
+ export const Lists = {
304
297
  render: () => (
305
- <Story
306
- text={str(text.tasks, '', text.list, text.footer)}
307
- extensions={[
308
- tasklist(),
309
- listener({
310
- onChange: (text) => {
311
- console.log(text);
312
- },
313
- }),
314
- ]}
315
- />
298
+ <Story text={str(text.tasks, '', text.list, '', text.numbered, text.footer)} extensions={[tasklist()]} />
316
299
  ),
317
300
  };
318
301
 
302
+ export const Table = {
303
+ render: () => <Story text={str(text.table, text.footer)} extensions={[table()]} />,
304
+ };
305
+
306
+ // export const Outliner = {
307
+ // render: () => (
308
+ // <Story
309
+ // text={str('# Outliner', '', 'Block', ': this is a block', ': with multiple lines', text.footer)}
310
+ // extensions={[outliner()]}
311
+ // />
312
+ // ),
313
+ // };
314
+
319
315
  export const Autocomplete = {
320
316
  render: () => (
321
317
  <Story
322
- text={str('# Autocomplete', '', 'Press CTRL-SPACE', text.footer)}
318
+ text={str('# Autocomplete', '', 'Press Ctrl-Space...', text.footer)}
323
319
  extensions={[
324
320
  link({ onRender: onRenderLink }),
325
321
  autocomplete({
@@ -330,8 +326,6 @@ export const Autocomplete = {
330
326
  ),
331
327
  };
332
328
 
333
- const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
334
-
335
329
  export const Mention = {
336
330
  render: () => (
337
331
  <Story
@@ -347,18 +341,18 @@ export const Mention = {
347
341
 
348
342
  export const Comments = {
349
343
  render: () => {
350
- const [commentsStates, setCommentStates] = useState<CommentRange[]>([]);
344
+ const [_comments, setComments] = useState<Comment[]>([]);
351
345
 
352
346
  return (
353
347
  <Story
354
348
  text={str('# Comments', '', text.paragraphs, text.footer)}
355
- comments={commentsStates}
349
+ comments={_comments}
356
350
  extensions={[
357
351
  comments({
358
352
  onHover: onCommentsHover,
359
- onCreate: (relPos) => {
353
+ onCreate: (range) => {
360
354
  const id = PublicKey.random().toHex();
361
- setCommentStates((comments) => [...comments, { id, cursor: relPos }]);
355
+ setComments((commentRanges) => [...commentRanges, { id, cursor: range }]);
362
356
  return id;
363
357
  },
364
358
  onSelect: (state) => {
@@ -367,9 +361,9 @@ export const Comments = {
367
361
  console.log(
368
362
  'update',
369
363
  JSON.stringify({
370
- active: state.active?.slice(0, 8),
371
- closest: state.closest?.slice(0, 8),
372
- ranges: state.ranges.length,
364
+ comments: state.comments.length,
365
+ active: state.selection.current?.slice(0, 8),
366
+ closest: state.selection.closest?.slice(0, 8),
373
367
  }),
374
368
  );
375
369
  }
@@ -381,8 +375,24 @@ export const Comments = {
381
375
  },
382
376
  };
383
377
 
378
+ export const HorizontalRule = {
379
+ render: () => (
380
+ <Story
381
+ text={str('# Horizontal Rule', '', text.paragraphs, '---', text.paragraphs, '---', text.paragraphs)}
382
+ extensions={[hr()]}
383
+ />
384
+ ),
385
+ };
386
+
387
+ const typewriterItems = localStorage.getItem('dxos.org/plugin/markdown/typewriter')?.split(',');
388
+
384
389
  export const Typewriter = {
385
- render: () => <Story text={str('# Typewriter', '', text.paragraphs, text.footer)} extensions={[typewriter()]} />,
390
+ render: () => (
391
+ <Story
392
+ text={str('# Typewriter', '', text.paragraphs, text.footer)}
393
+ extensions={[typewriter({ items: typewriterItems })]}
394
+ />
395
+ ),
386
396
  };
387
397
 
388
398
  export const Blast = {
@@ -390,9 +400,7 @@ export const Blast = {
390
400
  <Story
391
401
  text={str('# Blast', '', text.paragraphs, text.code, text.paragraphs)}
392
402
  extensions={[
393
- typewriter({
394
- items: localStorage.getItem('dxos.composer.extension.demo')?.split(','),
395
- }),
403
+ typewriter({ items: typewriterItems }),
396
404
  blast(
397
405
  defaultsDeep(
398
406
  {
@@ -409,17 +417,3 @@ export const Blast = {
409
417
  />
410
418
  ),
411
419
  };
412
-
413
- export const Diagnostics = {
414
- render: () => (
415
- <Story
416
- text={document}
417
- extensions={[
418
- // Cursor moved.
419
- EditorView.updateListener.of((update) => {
420
- console.log('update', update.view.state.selection.main.head);
421
- }),
422
- ]}
423
- />
424
- ),
425
- };