@dxos/react-ui-editor 0.3.11-main.927e4ba → 0.3.11-main.9b81c36

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 (121) hide show
  1. package/dist/lib/browser/index.mjs +1267 -662
  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 +1 -2
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  7. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +1 -1
  8. package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +1 -1
  9. package/dist/types/src/components/TextEditor/{comments.stories.d.ts → hooks.stories.d.ts} +9 -12
  10. package/dist/types/src/components/TextEditor/hooks.stories.d.ts.map +1 -0
  11. package/dist/types/src/components/Toolbar/Toolbar.d.ts +25 -0
  12. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -0
  13. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +23 -0
  14. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -0
  15. package/dist/types/src/components/Toolbar/index.d.ts +2 -0
  16. package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
  17. package/dist/types/src/components/index.d.ts +1 -0
  18. package/dist/types/src/components/index.d.ts.map +1 -1
  19. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  20. package/dist/types/src/extensions/automerge/automerge.spec.d.ts +2 -0
  21. package/dist/types/src/extensions/automerge/automerge.spec.d.ts.map +1 -0
  22. package/dist/types/src/extensions/automerge/automerge.test.d.ts +2 -0
  23. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +1 -0
  24. package/dist/types/src/extensions/automerge/defs.d.ts +5 -5
  25. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  26. package/dist/types/src/extensions/automerge/semaphore.d.ts +2 -1
  27. package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -1
  28. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  29. package/dist/types/src/extensions/awareness.d.ts +1 -1
  30. package/dist/types/src/extensions/basic.d.ts +1 -1
  31. package/dist/types/src/extensions/basic.d.ts.map +1 -1
  32. package/dist/types/src/extensions/comments.d.ts +6 -2
  33. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  34. package/dist/types/src/extensions/index.d.ts +0 -6
  35. package/dist/types/src/extensions/index.d.ts.map +1 -1
  36. package/dist/types/src/extensions/markdown/bundle.d.ts +2 -2
  37. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  38. package/dist/types/src/extensions/markdown/code.d.ts.map +1 -0
  39. package/dist/types/src/extensions/markdown/formatting.d.ts +13 -0
  40. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -0
  41. package/dist/types/src/extensions/markdown/heading.d.ts +6 -0
  42. package/dist/types/src/extensions/markdown/heading.d.ts.map +1 -0
  43. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  44. package/dist/types/src/extensions/markdown/hr.d.ts.map +1 -0
  45. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -0
  46. package/dist/types/src/extensions/markdown/index.d.ts +8 -0
  47. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -1
  48. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -0
  49. package/dist/types/src/extensions/markdown/table.d.ts.map +1 -0
  50. package/dist/types/src/extensions/markdown/tasklist.d.ts.map +1 -0
  51. package/dist/types/src/hooks/index.d.ts +2 -0
  52. package/dist/types/src/hooks/index.d.ts.map +1 -1
  53. package/dist/types/src/hooks/useActionHandler.d.ts +4 -0
  54. package/dist/types/src/hooks/useActionHandler.d.ts.map +1 -0
  55. package/dist/types/src/hooks/useEditorView.d.ts +17 -0
  56. package/dist/types/src/hooks/useEditorView.d.ts.map +1 -0
  57. package/dist/types/src/hooks/useTextEditor.d.ts +36 -14
  58. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  59. package/dist/types/src/hooks/useTextModel.d.ts +12 -0
  60. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  61. package/dist/types/src/index.d.ts +1 -1
  62. package/dist/types/src/index.d.ts.map +1 -1
  63. package/dist/types/src/styles/markdown.d.ts +2 -2
  64. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  65. package/dist/types/src/themes/default.d.ts.map +1 -1
  66. package/package.json +39 -26
  67. package/src/components/TextEditor/MarkdownEditor.stories.tsx +14 -18
  68. package/src/components/TextEditor/TextEditor.tsx +27 -16
  69. package/src/components/TextEditor/automerge.stories.tsx +1 -2
  70. package/src/components/TextEditor/hooks.stories.tsx +106 -0
  71. package/src/components/Toolbar/Toolbar.stories.tsx +90 -0
  72. package/src/components/Toolbar/Toolbar.tsx +166 -0
  73. package/src/components/Toolbar/index.ts +5 -0
  74. package/src/components/index.ts +1 -0
  75. package/src/extensions/automerge/automerge.spec.tsx +76 -0
  76. package/src/extensions/automerge/automerge.test.ts +13 -0
  77. package/src/extensions/automerge/automerge.ts +26 -11
  78. package/src/extensions/automerge/cursor.ts +3 -3
  79. package/src/extensions/automerge/defs.ts +9 -9
  80. package/src/extensions/automerge/semaphore.ts +17 -19
  81. package/src/extensions/automerge/update-automerge.ts +12 -6
  82. package/src/extensions/automerge/update-codemirror.ts +5 -5
  83. package/src/extensions/awareness.ts +7 -4
  84. package/src/extensions/basic.ts +15 -13
  85. package/src/extensions/blast.ts +4 -1
  86. package/src/extensions/comments.ts +113 -65
  87. package/src/extensions/index.ts +0 -6
  88. package/src/extensions/markdown/bundle.ts +9 -8
  89. package/src/extensions/markdown/code.ts +150 -0
  90. package/src/extensions/markdown/formatting.ts +188 -0
  91. package/src/extensions/markdown/heading.ts +59 -0
  92. package/src/extensions/markdown/highlight.ts +9 -15
  93. package/src/extensions/{hr.ts → markdown/hr.ts} +3 -4
  94. package/src/extensions/markdown/index.ts +8 -0
  95. package/src/extensions/{link.ts → markdown/link.ts} +13 -4
  96. package/src/extensions/{tasklist.ts → markdown/tasklist.ts} +2 -3
  97. package/src/hooks/index.ts +2 -0
  98. package/src/hooks/useActionHandler.ts +62 -0
  99. package/src/hooks/useEditorView.ts +29 -0
  100. package/src/hooks/useTextEditor.ts +143 -19
  101. package/src/hooks/useTextModel.ts +28 -9
  102. package/src/index.ts +1 -1
  103. package/src/styles/markdown.ts +9 -10
  104. package/src/themes/default.ts +9 -6
  105. package/dist/types/src/components/TextEditor/comments.stories.d.ts.map +0 -1
  106. package/dist/types/src/extensions/code.d.ts.map +0 -1
  107. package/dist/types/src/extensions/hr.d.ts.map +0 -1
  108. package/dist/types/src/extensions/image.d.ts.map +0 -1
  109. package/dist/types/src/extensions/link.d.ts.map +0 -1
  110. package/dist/types/src/extensions/table.d.ts.map +0 -1
  111. package/dist/types/src/extensions/tasklist.d.ts.map +0 -1
  112. package/src/components/TextEditor/comments.stories.tsx +0 -357
  113. package/src/extensions/code.ts +0 -104
  114. /package/dist/types/src/extensions/{code.d.ts → markdown/code.d.ts} +0 -0
  115. /package/dist/types/src/extensions/{hr.d.ts → markdown/hr.d.ts} +0 -0
  116. /package/dist/types/src/extensions/{image.d.ts → markdown/image.d.ts} +0 -0
  117. /package/dist/types/src/extensions/{link.d.ts → markdown/link.d.ts} +0 -0
  118. /package/dist/types/src/extensions/{table.d.ts → markdown/table.d.ts} +0 -0
  119. /package/dist/types/src/extensions/{tasklist.d.ts → markdown/tasklist.d.ts} +0 -0
  120. /package/src/extensions/{image.ts → markdown/image.ts} +0 -0
  121. /package/src/extensions/{table.ts → markdown/table.ts} +0 -0
@@ -3,17 +3,11 @@ export * from './automerge';
3
3
  export * from './awareness';
4
4
  export * from './basic';
5
5
  export * from './blast';
6
- export * from './code';
7
6
  export * from './comments';
8
7
  export * from './cursor';
9
- export * from './hr';
10
- export * from './image';
11
- export * from './link';
12
8
  export * from './listener';
13
9
  export * from './markdown';
14
10
  export * from './mention';
15
11
  export * from './outliner';
16
- export * from './table';
17
- export * from './tasklist';
18
12
  export * from './typewriter';
19
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/extensions/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/extensions/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -3,12 +3,12 @@ import type { ThemeMode } from '@dxos/react-ui';
3
3
  import { type TextEditorProps } from '../../components';
4
4
  export type MarkdownBundleOptions = {
5
5
  themeMode?: ThemeMode;
6
- } & Pick<TextEditorProps, 'readonly' | 'placeholder'>;
6
+ } & Pick<TextEditorProps, 'placeholder' | 'lineWrapping'>;
7
7
  /**
8
8
  * Markdown bundle.
9
9
  * Refs:
10
10
  * https://codemirror.net/docs/community
11
11
  * https://codemirror.net/docs/ref/#codemirror.basicSetup
12
12
  */
13
- export declare const markdownBundle: ({ readonly, themeMode, placeholder: _placeholder, }: MarkdownBundleOptions) => Extension[];
13
+ export declare const createMarkdownExtensions: ({ themeMode, placeholder: _placeholder, lineWrapping, }?: MarkdownBundleOptions) => Extension[];
14
14
  //# sourceMappingURL=bundle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/bundle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAYhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC;AAEtD;;;;;GAKG;AAEH,eAAO,MAAM,cAAc,wDAIxB,qBAAqB,KAAG,SAAS,EAyDnC,CAAC"}
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/bundle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAYhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC;AAE1D;;;;;GAKG;AAEH,eAAO,MAAM,wBAAwB,6DAIlC,qBAAqB,KAAQ,SAAS,EAyDxC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/code.ts"],"names":[],"mappings":"AAkIA,eAAO,MAAM,IAAI,+CAmBhB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type Extension } from '@codemirror/state';
2
+ import { type Command, type EditorView } from '@codemirror/view';
3
+ export type FormattingOptions = {};
4
+ export declare const setHeading: (level: number) => Command;
5
+ export declare const toggleStyle: (mark: string) => Command;
6
+ export declare const insertCodeblock: (view: EditorView) => void;
7
+ export declare const insertTable: (view: EditorView) => void;
8
+ export declare const toggleBold: Command;
9
+ export declare const toggleItalic: Command;
10
+ export declare const toggleStrikethrough: Command;
11
+ export declare const toggleList: (view: EditorView) => void;
12
+ export declare const formatting: (options?: FormattingOptions) => Extension;
13
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/formatting.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,UAAU,EAIhB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEnC,eAAO,MAAM,UAAU,UACb,MAAM,KAAG,OA6BhB,CAAC;AAEJ,eAAO,MAAM,WAAW,SACf,MAAM,KAAG,OAwBf,CAAC;AAUJ,eAAO,MAAM,eAAe,SAAU,UAAU,SAQ/C,CAAC;AAEF,eAAO,MAAM,WAAW,SAAU,UAAU,SAQ3C,CAAC;AAEF,eAAO,MAAM,UAAU,SAAoB,CAAC;AAC5C,eAAO,MAAM,YAAY,SAAmB,CAAC;AAC7C,eAAO,MAAM,mBAAmB,SAAoB,CAAC;AAErD,eAAO,MAAM,UAAU,SAAU,UAAU,SAAO,CAAC;AAEnD,eAAO,MAAM,UAAU,aAAa,iBAAiB,KAAQ,SAU5D,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type DecorationSet, ViewPlugin, type ViewUpdate } from '@codemirror/view';
2
+ export declare const heading: () => ViewPlugin<{
3
+ decorations: DecorationSet;
4
+ update(update: ViewUpdate): void;
5
+ }>[];
6
+ //# sourceMappingURL=heading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/heading.ts"],"names":[],"mappings":"AAMA,OAAO,EAAc,KAAK,aAAa,EAAmB,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkChH,eAAO,MAAM,OAAO;;mBASG,UAAU;IAShC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/highlight.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAmB,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,KAAK,cAAc,EAAS,MAAM,iBAAiB,CAAC;AAe7D;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAexB,CAAC;AAaF,eAAO,MAAM,sBAAsB,EAAE,cAAc,EAKlD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,cAAe,OAAO,mBAyHxD,CAAC"}
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/highlight.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAmB,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,KAAK,cAAc,EAAS,MAAM,iBAAiB,CAAC;AAe7D;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAexB,CAAC;AAaF,eAAO,MAAM,sBAAsB,EAAE,cAAc,EAKlD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,cAAe,OAAO,mBAmHxD,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hr.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/hr.ts"],"names":[],"mappings":"AAmDA,eAAO,MAAM,EAAE,+CAmBd,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/image.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,KAAK,SAAS,EAA4C,MAAM,mBAAmB,CAAC;AAG/G,MAAM,MAAM,YAAY,GAAG,EAAE,CAAC;AAE9B,eAAO,MAAM,KAAK,aAAa,YAAY,KAAQ,SA8BlD,CAAC"}
@@ -1,3 +1,11 @@
1
1
  export * from './bundle';
2
+ export * from './code';
3
+ export * from './formatting';
4
+ export * from './heading';
2
5
  export * from './highlight';
6
+ export * from './hr';
7
+ export * from './image';
8
+ export * from './link';
9
+ export * from './table';
10
+ export * from './tasklist';
3
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/link.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAmBpE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,IAAI,aAAa,WAAW,KAAQ,SAuDhD,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/table.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,KAAK,QAAQ,EAAmB,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AASnH,MAAM,MAAM,YAAY,GAAG,EAAE,CAAC;AAE9B;;;GAGG;AACH,eAAO,MAAM,KAAK,aAAa,YAAY,8BAM1C,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasklist.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/markdown/tasklist.ts"],"names":[],"mappings":"AAsFA,MAAM,MAAM,eAAe,GAAG,EAAE,CAAC;AAEjC,eAAO,MAAM,QAAQ,aAAa,eAAe,4CAqBhD,CAAC"}
@@ -1,5 +1,7 @@
1
1
  export * from './awareness-provider';
2
2
  export * from './defs';
3
+ export * from './useActionHandler';
4
+ export * from './useEditorView';
3
5
  export * from './useTextEditor';
4
6
  export * from './useTextModel';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,cAAc,sBAAsB,CAAC;AACrC,cAAc,QAAQ,CAAC;AAEvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,cAAc,sBAAsB,CAAC;AACrC,cAAc,QAAQ,CAAC;AAEvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { EditorView } from '@codemirror/view';
2
+ import type { ToolbarProps } from '../components';
3
+ export declare const useActionHandler: (view?: EditorView | null) => ToolbarProps['onAction'];
4
+ //# sourceMappingURL=useActionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useActionHandler.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useActionHandler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAYlD,eAAO,MAAM,gBAAgB,UAAW,UAAU,GAAG,IAAI,KAAG,YAAY,CAAC,UAAU,CA2ClF,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type EditorView } from '@codemirror/view';
2
+ import { type RefCallback } from 'react';
3
+ /**
4
+ * Hook for accessing the editor view.
5
+ *
6
+ * ```tsx
7
+ * const Test = () => {
8
+ * const [editorRef, editorView] = useEditorView();
9
+ * useEffect(() => {
10
+ * editorView?.focus();
11
+ * }, [editorView]);
12
+ * return <TextEditor ref={editorRef} />;
13
+ * };
14
+ * ```
15
+ */
16
+ export declare const useEditorView: () => [RefCallback<EditorView | null>, EditorView | null];
17
+ //# sourceMappingURL=useEditorView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEditorView.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useEditorView.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,OAAO,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,QAAO,CAAC,YAAY,UAAU,GAAG,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAQlF,CAAC"}
@@ -1,17 +1,39 @@
1
- import { type EditorView } from '@codemirror/view';
2
- import { type RefCallback } from 'react';
1
+ import { type EditorStateConfig, type Extension, type StateEffect } from '@codemirror/state';
2
+ import { EditorView } from '@codemirror/view';
3
+ import { type RefObject } from 'react';
4
+ import { type ThemeMode } from '@dxos/react-ui';
5
+ import { type ThemeStyles } from '..//styles';
6
+ export type UseTextEditorOptions = {
7
+ autoFocus?: boolean;
8
+ scrollTo?: StateEffect<any>;
9
+ debug?: boolean;
10
+ } & EditorStateConfig;
11
+ export type UseTextEditor = {
12
+ parentRef: RefObject<HTMLDivElement>;
13
+ view?: EditorView;
14
+ };
3
15
  /**
4
- * Hook for accessing the editor view.
5
- *
6
- * ```tsx
7
- * const Test = () => {
8
- * const [editorRef, editorView] = useTextEditor();
9
- * useEffect(() => {
10
- * editorView?.focus();
11
- * }, [editorView]);
12
- * return <TextEditor ref={editorRef} />;
13
- * };
14
- * ```
16
+ * Hook for creating editor.
15
17
  */
16
- export declare const useTextEditor: () => [RefCallback<EditorView | null>, EditorView | null];
18
+ export declare const useTextEditor: ({ autoFocus, scrollTo, debug, doc, selection, extensions, }?: UseTextEditorOptions) => UseTextEditor;
19
+ export type DataExtensionsOptions = {
20
+ readonly?: boolean;
21
+ };
22
+ export declare const createDataExtensions: ({ readonly }?: {
23
+ readonly?: boolean | undefined;
24
+ }) => Extension;
25
+ export type ThemeExtensionsOptions = {
26
+ theme?: ThemeStyles;
27
+ themeMode?: ThemeMode;
28
+ lineWrap?: boolean;
29
+ slots?: {
30
+ editor?: {
31
+ className?: string;
32
+ };
33
+ content?: {
34
+ className?: string;
35
+ };
36
+ };
37
+ };
38
+ export declare const createThemeExtensions: ({ theme, themeMode, slots }?: ThemeExtensionsOptions) => Extension;
17
39
  //# sourceMappingURL=useTextEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTextEditor.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useTextEditor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,OAAO,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,QAAO,CAAC,YAAY,UAAU,GAAG,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAQlF,CAAC"}
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,3 +1,4 @@
1
+ import { type Dispatch, type SetStateAction } from 'react';
1
2
  import { type Space, type TextObject } from '@dxos/react-client/echo';
2
3
  import { type Identity } from '@dxos/react-client/halo';
3
4
  import { type EditorModel } from './defs';
@@ -7,4 +8,15 @@ export type UseTextModelProps = {
7
8
  text?: TextObject;
8
9
  };
9
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
+ };
10
22
  //# sourceMappingURL=useTextModel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTextModel.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useTextModel.ts"],"names":[],"mappings":"AAUA,OAAO,EAAqB,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAIxD,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"}
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,7 +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 } from '@codemirror/view';
4
+ export { type EditorView, keymap } from '@codemirror/view';
5
5
  export * from './components';
6
6
  export * from './extensions';
7
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;AACnD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,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;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
+ {"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,WAiO1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,WAOvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAO3B,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-editor",
3
- "version": "0.3.11-main.927e4ba",
3
+ "version": "0.3.11-main.9b81c36",
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",
@@ -23,10 +23,11 @@
23
23
  "@codemirror/state": "^6.4.0",
24
24
  "@codemirror/theme-one-dark": "^6.1.2",
25
25
  "@codemirror/view": "^6.23.0",
26
- "@fluentui/react-tabster": "^9.16.1",
26
+ "@fluentui/react-tabster": "^9.17.4",
27
27
  "@lezer/common": "^1.2.1",
28
28
  "@lezer/highlight": "^1.2.0",
29
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,53 +36,65 @@
35
36
  "lodash.pick": "^4.4.0",
36
37
  "lodash.sortby": "^4.7.0",
37
38
  "style-mod": "^4.1.0",
38
- "@dxos/async": "0.3.11-main.927e4ba",
39
- "@dxos/automerge": "0.3.11-main.927e4ba",
40
- "@dxos/context": "0.3.11-main.927e4ba",
41
- "@dxos/debug": "0.3.11-main.927e4ba",
42
- "@dxos/display-name": "0.3.11-main.927e4ba",
43
- "@dxos/echo-schema": "0.3.11-main.927e4ba",
44
- "@dxos/invariant": "0.3.11-main.927e4ba",
45
- "@dxos/log": "0.3.11-main.927e4ba",
46
- "@dxos/protocols": "0.3.11-main.927e4ba",
47
- "@dxos/react-async": "0.3.11-main.927e4ba",
48
- "@dxos/react-ui": "0.3.11-main.927e4ba",
49
- "@dxos/react-ui-theme": "0.3.11-main.927e4ba",
50
- "@dxos/text-model": "0.3.11-main.927e4ba",
51
- "@dxos/util": "0.3.11-main.927e4ba"
39
+ "@dxos/automerge": "0.3.11-main.9b81c36",
40
+ "@dxos/debug": "0.3.11-main.9b81c36",
41
+ "@dxos/context": "0.3.11-main.9b81c36",
42
+ "@dxos/display-name": "0.3.11-main.9b81c36",
43
+ "@dxos/echo-schema": "0.3.11-main.9b81c36",
44
+ "@dxos/invariant": "0.3.11-main.9b81c36",
45
+ "@dxos/log": "0.3.11-main.9b81c36",
46
+ "@dxos/react-ui": "0.3.11-main.9b81c36",
47
+ "@dxos/protocols": "0.3.11-main.9b81c36",
48
+ "@dxos/react-ui-theme": "0.3.11-main.9b81c36",
49
+ "@dxos/react-async": "0.3.11-main.9b81c36",
50
+ "@dxos/async": "0.3.11-main.9b81c36",
51
+ "@dxos/util": "0.3.11-main.9b81c36",
52
+ "@dxos/text-model": "0.3.11-main.9b81c36"
52
53
  },
53
54
  "devDependencies": {
54
- "@automerge/automerge-repo-network-broadcastchannel": "^1.0.19",
55
+ "@automerge/automerge-repo-network-broadcastchannel": "^1.1.0",
55
56
  "@faker-js/faker": "^8.3.1",
56
57
  "@phosphor-icons/react": "^2.0.5",
57
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",
58
62
  "@types/lodash.defaultsdeep": "^4.6.6",
59
63
  "@types/lodash.get": "^4.4.7",
60
64
  "@types/lodash.pick": "^4.4.7",
61
65
  "@types/lodash.sortby": "^4.7.7",
62
66
  "@types/react": "^18.0.21",
63
67
  "@types/react-dom": "^18.0.6",
68
+ "@types/react-test-renderer": "^17.0.2",
69
+ "@vitest/ui": "^1.2.1",
64
70
  "deepsignal": "1.4.0-shallow.0",
71
+ "happy-dom": "^13.3.1",
72
+ "jsdom": "^20.0.1",
65
73
  "react": "^18.2.0",
66
74
  "react-dom": "^18.2.0",
67
- "@dxos/config": "0.3.11-main.927e4ba",
68
- "@dxos/echo-typegen": "0.3.11-main.927e4ba",
69
- "@dxos/keyboard": "0.3.11-main.927e4ba",
70
- "@dxos/echo-signals": "0.3.11-main.927e4ba",
71
- "@dxos/storybook-utils": "0.3.11-main.927e4ba",
72
- "@dxos/react-ui": "0.3.11-main.927e4ba",
73
- "@dxos/react-client": "0.3.11-main.927e4ba"
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.9b81c36",
81
+ "@dxos/echo-signals": "0.3.11-main.9b81c36",
82
+ "@dxos/echo-typegen": "0.3.11-main.9b81c36",
83
+ "@dxos/keyboard": "0.3.11-main.9b81c36",
84
+ "@dxos/react-client": "0.3.11-main.9b81c36",
85
+ "@dxos/react-ui": "0.3.11-main.9b81c36",
86
+ "@dxos/storybook-utils": "0.3.11-main.9b81c36"
74
87
  },
75
88
  "peerDependencies": {
76
89
  "@phosphor-icons/react": "^2.0.5",
77
90
  "react": "^18.2.0",
78
91
  "react-dom": "^18.2.0",
79
- "@dxos/react-client": "0.3.11-main.927e4ba"
92
+ "@dxos/react-client": "0.3.11-main.9b81c36"
80
93
  },
81
94
  "publishConfig": {
82
95
  "access": "public"
83
96
  },
84
97
  "scripts": {
85
- "test": "true"
98
+ "vitest": "vitest --ui"
86
99
  }
87
100
  }
@@ -19,11 +19,14 @@ import { withTheme } from '@dxos/storybook-utils';
19
19
 
20
20
  import { MarkdownEditor, type TextEditorProps } from './TextEditor';
21
21
  import {
22
+ type CommentsOptions,
23
+ type LinkOptions,
22
24
  autocomplete,
23
25
  blast,
24
26
  code,
25
27
  comments,
26
28
  defaultOptions,
29
+ heading,
27
30
  hr,
28
31
  image,
29
32
  link,
@@ -31,16 +34,11 @@ import {
31
34
  table,
32
35
  tasklist,
33
36
  typewriter,
34
- type CommentsOptions,
35
- type LinkOptions,
36
37
  useComments,
38
+ formatting,
37
39
  } from '../../extensions';
38
40
  import { type Comment, useTextModel } from '../../hooks';
39
41
 
40
- // Extensions:
41
- // TODO(burdon): Table of contents.
42
- // TODO(burdon): Front-matter
43
-
44
42
  faker.seed(101);
45
43
 
46
44
  const str = (...lines: string[]) => lines.join('\n');
@@ -82,7 +80,7 @@ const text = {
82
80
  '## Code',
83
81
  '',
84
82
  '```',
85
- 'const x = 100;',
83
+ '$ ls -las',
86
84
  '```',
87
85
  '',
88
86
  '```tsx',
@@ -213,11 +211,10 @@ const onRenderLink: LinkOptions['onRender'] = (el, url) => {
213
211
  type StoryProps = {
214
212
  text?: string;
215
213
  comments?: Comment[];
216
- automerge?: boolean;
217
214
  } & Pick<TextEditorProps, 'readonly' | 'placeholder' | 'slots' | 'extensions'>;
218
215
 
219
- const Story = ({ text, comments, automerge, placeholder = 'New document.', ...props }: StoryProps) => {
220
- 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) });
221
218
  const view = useRef<EditorView>(null);
222
219
  const model = useTextModel({ text: item.text });
223
220
  useComments(view.current, comments);
@@ -248,12 +245,11 @@ const defaults = [
248
245
  onSearch: (text) => links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase())),
249
246
  }),
250
247
  code(),
248
+ formatting(),
249
+ heading(),
251
250
  hr(),
252
251
  image(),
253
252
  link({ onRender: onRenderLink, onHover: onHoverLinkTooltip }),
254
- // mention({
255
- // onSearch: (text) => names.filter((name) => name.toLowerCase().startsWith(text.toLowerCase())),
256
- // }),
257
253
  table(),
258
254
  tasklist(),
259
255
  ];
@@ -290,11 +286,11 @@ export const Links = {
290
286
  };
291
287
 
292
288
  export const Code = {
293
- render: () => <Story text={str(text.code, text.footer)} extensions={[code()]} readonly />,
289
+ render: () => <Story text={str(text.code, text.footer)} extensions={[code()]} />,
294
290
  };
295
291
 
296
292
  export const Image = {
297
- render: () => <Story text={str(text.image, text.footer)} readonly extensions={[image()]} />,
293
+ render: () => <Story text={str(text.image, text.footer)} extensions={[image()]} />,
298
294
  };
299
295
 
300
296
  export const Lists = {
@@ -345,18 +341,18 @@ export const Mention = {
345
341
 
346
342
  export const Comments = {
347
343
  render: () => {
348
- const [commentRanges, setCommentRanges] = useState<Comment[]>([]);
344
+ const [_comments, setComments] = useState<Comment[]>([]);
349
345
 
350
346
  return (
351
347
  <Story
352
348
  text={str('# Comments', '', text.paragraphs, text.footer)}
353
- comments={commentRanges}
349
+ comments={_comments}
354
350
  extensions={[
355
351
  comments({
356
352
  onHover: onCommentsHover,
357
353
  onCreate: (range) => {
358
354
  const id = PublicKey.random().toHex();
359
- setCommentRanges((commentRanges) => [...commentRanges, { id, cursor: range }]);
355
+ setComments((commentRanges) => [...commentRanges, { id, cursor: range }]);
360
356
  return id;
361
357
  },
362
358
  onSelect: (state) => {