@dxos/react-ui-editor 0.3.11-main.bd26370 → 0.3.11-main.c244d7e

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 (222) hide show
  1. package/dist/lib/browser/index.mjs +2065 -1565
  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 +17 -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 +19 -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 -3
  9. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  10. package/dist/types/src/{hooks/automerge → components/TextEditor}/automerge.stories.d.ts +6 -1
  11. package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +1 -0
  12. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts.map +1 -1
  13. package/dist/types/src/components/TextEditor/comments.stories.d.ts +26 -0
  14. package/dist/types/src/components/TextEditor/comments.stories.d.ts.map +1 -0
  15. package/dist/types/src/components/TextEditor/index.d.ts +0 -2
  16. package/dist/types/src/components/TextEditor/index.d.ts.map +1 -1
  17. package/dist/types/src/{hooks/yjs → components/TextEditor}/yjs.stories.d.ts +1 -1
  18. package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +1 -0
  19. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -0
  20. package/dist/types/src/extensions/automerge/automerge.d.ts +9 -0
  21. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -0
  22. package/dist/types/src/extensions/automerge/cursor.d.ts +5 -0
  23. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -0
  24. package/dist/types/src/extensions/automerge/defs.d.ts +24 -0
  25. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -0
  26. package/dist/types/src/extensions/automerge/index.d.ts +3 -0
  27. package/dist/types/src/extensions/automerge/index.d.ts.map +1 -0
  28. package/dist/types/src/extensions/automerge/semaphore.d.ts +14 -0
  29. package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -0
  30. package/dist/types/src/extensions/automerge/update-automerge.d.ts +5 -0
  31. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -0
  32. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +1 -0
  33. package/dist/types/src/extensions/awareness.d.ts +48 -0
  34. package/dist/types/src/extensions/awareness.d.ts.map +1 -0
  35. package/dist/types/src/extensions/basic.d.ts +8 -0
  36. package/dist/types/src/extensions/basic.d.ts.map +1 -0
  37. package/dist/types/src/extensions/blast.d.ts.map +1 -0
  38. package/dist/types/src/extensions/code.d.ts.map +1 -0
  39. package/dist/types/src/{components/TextEditor/extensions → extensions}/comments.d.ts +32 -17
  40. package/dist/types/src/extensions/comments.d.ts.map +1 -0
  41. package/dist/types/src/extensions/cursor.d.ts +25 -0
  42. package/dist/types/src/extensions/cursor.d.ts.map +1 -0
  43. package/dist/types/src/extensions/hr.d.ts.map +1 -0
  44. package/dist/types/src/extensions/image.d.ts.map +1 -0
  45. package/dist/types/src/{components/TextEditor/extensions → extensions}/index.d.ts +5 -2
  46. package/dist/types/src/extensions/index.d.ts.map +1 -0
  47. package/dist/types/src/{components/TextEditor/extensions → extensions}/link.d.ts +1 -0
  48. package/dist/types/src/extensions/link.d.ts.map +1 -0
  49. package/dist/types/src/extensions/listener.d.ts +10 -0
  50. package/dist/types/src/extensions/listener.d.ts.map +1 -0
  51. package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/bundle.d.ts +2 -5
  52. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -0
  53. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -0
  54. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -0
  55. package/dist/types/src/extensions/mention.d.ts.map +1 -0
  56. package/dist/types/src/extensions/outliner.d.ts +4 -0
  57. package/dist/types/src/extensions/outliner.d.ts.map +1 -0
  58. package/dist/types/src/extensions/table.d.ts.map +1 -0
  59. package/dist/types/src/extensions/tasklist.d.ts.map +1 -0
  60. package/dist/types/src/extensions/typewriter.d.ts.map +1 -0
  61. package/dist/types/src/extensions/yjs/cursor.d.ts +4 -0
  62. package/dist/types/src/extensions/yjs/cursor.d.ts.map +1 -0
  63. package/dist/types/src/extensions/yjs/index.d.ts +2 -0
  64. package/dist/types/src/extensions/yjs/index.d.ts.map +1 -0
  65. package/dist/types/src/extensions/yjs/yjs.d.ts +4 -0
  66. package/dist/types/src/extensions/yjs/yjs.d.ts.map +1 -0
  67. package/dist/types/src/extensions/yjs/yjs.test.d.ts.map +1 -0
  68. package/dist/types/src/hooks/automerge.d.ts +4 -0
  69. package/dist/types/src/hooks/automerge.d.ts.map +1 -0
  70. package/dist/types/src/hooks/awareness-provider.d.ts +28 -0
  71. package/dist/types/src/hooks/awareness-provider.d.ts.map +1 -0
  72. package/dist/types/src/hooks/defs.d.ts +28 -0
  73. package/dist/types/src/hooks/defs.d.ts.map +1 -0
  74. package/dist/types/src/hooks/index.d.ts +4 -1
  75. package/dist/types/src/hooks/index.d.ts.map +1 -1
  76. package/dist/types/src/hooks/useTextModel.d.ts +2 -31
  77. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  78. package/dist/types/src/hooks/{yjs/space-provider.d.ts → yjs.d.ts} +9 -8
  79. package/dist/types/src/hooks/yjs.d.ts.map +1 -0
  80. package/dist/types/src/index.d.ts +5 -0
  81. package/dist/types/src/index.d.ts.map +1 -1
  82. package/dist/types/src/styles/cursors.d.ts.map +1 -0
  83. package/dist/types/src/styles/index.d.ts +1 -0
  84. package/dist/types/src/styles/index.d.ts.map +1 -1
  85. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  86. package/dist/types/src/styles/tokens.d.ts +1 -0
  87. package/dist/types/src/styles/tokens.d.ts.map +1 -1
  88. package/dist/types/src/testing/replicator.d.ts +2 -2
  89. package/dist/types/src/testing/replicator.d.ts.map +1 -1
  90. package/dist/types/src/{components/TextEditor/themes → themes}/default.d.ts +1 -1
  91. package/dist/types/src/themes/default.d.ts.map +1 -0
  92. package/dist/types/src/themes/index.d.ts.map +1 -0
  93. package/dist/types/src/util.d.ts +7 -0
  94. package/dist/types/src/util.d.ts.map +1 -0
  95. package/package.json +25 -23
  96. package/src/components/TextEditor/MarkdownEditor.stories.tsx +77 -81
  97. package/src/components/TextEditor/TextEditor.stories.tsx +13 -34
  98. package/src/components/TextEditor/TextEditor.tsx +115 -94
  99. package/src/{hooks/automerge → components/TextEditor}/automerge.stories.tsx +66 -6
  100. package/src/components/TextEditor/codemirror.stories.ts +3 -2
  101. package/src/components/TextEditor/comments.stories.tsx +357 -0
  102. package/src/components/TextEditor/index.ts +0 -3
  103. package/src/{hooks/yjs → components/TextEditor}/yjs.stories.tsx +1 -1
  104. package/src/{components/TextEditor/extensions → extensions}/autocomplete.ts +23 -19
  105. package/src/extensions/automerge/automerge.ts +70 -0
  106. package/src/extensions/automerge/cursor.ts +52 -0
  107. package/src/extensions/automerge/defs.ts +41 -0
  108. package/src/extensions/automerge/index.ts +6 -0
  109. package/src/{hooks → extensions}/automerge/semaphore.ts +37 -28
  110. package/src/{hooks → extensions}/automerge/update-automerge.ts +5 -6
  111. package/src/{hooks → extensions}/automerge/update-codemirror.ts +13 -5
  112. package/src/extensions/awareness.ts +327 -0
  113. package/src/extensions/basic.ts +37 -0
  114. package/src/{components/TextEditor/extensions → extensions}/code.ts +28 -23
  115. package/src/extensions/comments.ts +428 -0
  116. package/src/extensions/cursor.ts +50 -0
  117. package/src/extensions/hr.ts +72 -0
  118. package/src/extensions/image.ts +87 -0
  119. package/src/{components/TextEditor/extensions → extensions}/index.ts +5 -2
  120. package/src/{components/TextEditor/extensions → extensions}/link.ts +116 -62
  121. package/src/extensions/listener.ts +35 -0
  122. package/src/{components/TextEditor/extensions → extensions}/markdown/bundle.ts +18 -24
  123. package/src/{components/TextEditor/extensions → extensions}/markdown/highlight.ts +4 -13
  124. package/src/{components/TextEditor/extensions → extensions}/mention.ts +6 -1
  125. package/src/extensions/outliner.ts +12 -0
  126. package/src/{components/TextEditor/extensions → extensions}/table.ts +10 -4
  127. package/src/extensions/tasklist.ts +111 -0
  128. package/src/{components/TextEditor/extensions → extensions}/typewriter.ts +1 -1
  129. package/src/extensions/yjs/cursor.ts +22 -0
  130. package/src/extensions/yjs/index.ts +5 -0
  131. package/src/{hooks → extensions}/yjs/yjs.test.ts +2 -26
  132. package/src/extensions/yjs/yjs.ts +16 -0
  133. package/src/hooks/automerge.ts +53 -0
  134. package/src/hooks/awareness-provider.ts +120 -0
  135. package/src/hooks/defs.ts +47 -0
  136. package/src/hooks/index.ts +5 -1
  137. package/src/hooks/useTextModel.ts +9 -128
  138. package/src/hooks/{yjs/space-provider.ts → yjs.ts} +50 -19
  139. package/src/index.ts +5 -0
  140. package/src/styles/index.ts +1 -0
  141. package/src/styles/markdown.ts +0 -2
  142. package/src/styles/tokens.ts +3 -0
  143. package/src/testing/replicator.ts +10 -15
  144. package/src/{components/TextEditor/themes → themes}/default.ts +52 -79
  145. package/src/util.ts +41 -0
  146. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts.map +0 -1
  147. package/dist/types/src/components/TextEditor/extensions/basic.d.ts +0 -9
  148. package/dist/types/src/components/TextEditor/extensions/basic.d.ts.map +0 -1
  149. package/dist/types/src/components/TextEditor/extensions/blast.d.ts.map +0 -1
  150. package/dist/types/src/components/TextEditor/extensions/code.d.ts.map +0 -1
  151. package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +0 -1
  152. package/dist/types/src/components/TextEditor/extensions/hr.d.ts.map +0 -1
  153. package/dist/types/src/components/TextEditor/extensions/image.d.ts.map +0 -1
  154. package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +0 -1
  155. package/dist/types/src/components/TextEditor/extensions/link.d.ts.map +0 -1
  156. package/dist/types/src/components/TextEditor/extensions/listener.d.ts +0 -9
  157. package/dist/types/src/components/TextEditor/extensions/listener.d.ts.map +0 -1
  158. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts.map +0 -1
  159. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +0 -1
  160. package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts.map +0 -1
  161. package/dist/types/src/components/TextEditor/extensions/mention.d.ts.map +0 -1
  162. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts +0 -3
  163. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts.map +0 -1
  164. package/dist/types/src/components/TextEditor/extensions/table.d.ts.map +0 -1
  165. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts.map +0 -1
  166. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts +0 -12
  167. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts.map +0 -1
  168. package/dist/types/src/components/TextEditor/extensions/typewriter.d.ts.map +0 -1
  169. package/dist/types/src/components/TextEditor/extensions/util.d.ts +0 -5
  170. package/dist/types/src/components/TextEditor/extensions/util.d.ts.map +0 -1
  171. package/dist/types/src/components/TextEditor/themes/default.d.ts.map +0 -1
  172. package/dist/types/src/components/TextEditor/themes/index.d.ts.map +0 -1
  173. package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +0 -1
  174. package/dist/types/src/hooks/automerge/handle.d.ts +0 -9
  175. package/dist/types/src/hooks/automerge/handle.d.ts.map +0 -1
  176. package/dist/types/src/hooks/automerge/index.d.ts +0 -3
  177. package/dist/types/src/hooks/automerge/index.d.ts.map +0 -1
  178. package/dist/types/src/hooks/automerge/plugin.d.ts +0 -26
  179. package/dist/types/src/hooks/automerge/plugin.d.ts.map +0 -1
  180. package/dist/types/src/hooks/automerge/semaphore.d.ts +0 -19
  181. package/dist/types/src/hooks/automerge/semaphore.d.ts.map +0 -1
  182. package/dist/types/src/hooks/automerge/update-automerge.d.ts +0 -6
  183. package/dist/types/src/hooks/automerge/update-automerge.d.ts.map +0 -1
  184. package/dist/types/src/hooks/automerge/update-codemirror.d.ts.map +0 -1
  185. package/dist/types/src/hooks/yjs/cursors.d.ts.map +0 -1
  186. package/dist/types/src/hooks/yjs/index.d.ts +0 -3
  187. package/dist/types/src/hooks/yjs/index.d.ts.map +0 -1
  188. package/dist/types/src/hooks/yjs/space-provider.d.ts.map +0 -1
  189. package/dist/types/src/hooks/yjs/yjs.stories.d.ts.map +0 -1
  190. package/dist/types/src/hooks/yjs/yjs.test.d.ts.map +0 -1
  191. package/src/components/TextEditor/extensions/basic.ts +0 -32
  192. package/src/components/TextEditor/extensions/comments.ts +0 -388
  193. package/src/components/TextEditor/extensions/hr.ts +0 -74
  194. package/src/components/TextEditor/extensions/image.ts +0 -69
  195. package/src/components/TextEditor/extensions/listener.ts +0 -23
  196. package/src/components/TextEditor/extensions/mermaid.ts +0 -11
  197. package/src/components/TextEditor/extensions/tasklist.ts +0 -121
  198. package/src/components/TextEditor/extensions/tooltip.ts +0 -61
  199. package/src/components/TextEditor/extensions/util.ts +0 -18
  200. package/src/hooks/automerge/handle.ts +0 -14
  201. package/src/hooks/automerge/index.ts +0 -6
  202. package/src/hooks/automerge/plugin.ts +0 -134
  203. package/src/hooks/yjs/index.ts +0 -6
  204. /package/dist/types/src/{components/TextEditor/extensions → extensions}/autocomplete.d.ts +0 -0
  205. /package/dist/types/src/{hooks → extensions}/automerge/update-codemirror.d.ts +0 -0
  206. /package/dist/types/src/{components/TextEditor/extensions → extensions}/blast.d.ts +0 -0
  207. /package/dist/types/src/{components/TextEditor/extensions → extensions}/code.d.ts +0 -0
  208. /package/dist/types/src/{components/TextEditor/extensions → extensions}/hr.d.ts +0 -0
  209. /package/dist/types/src/{components/TextEditor/extensions → extensions}/image.d.ts +0 -0
  210. /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/highlight.d.ts +0 -0
  211. /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/index.d.ts +0 -0
  212. /package/dist/types/src/{components/TextEditor/extensions → extensions}/mention.d.ts +0 -0
  213. /package/dist/types/src/{components/TextEditor/extensions → extensions}/table.d.ts +0 -0
  214. /package/dist/types/src/{components/TextEditor/extensions → extensions}/tasklist.d.ts +0 -0
  215. /package/dist/types/src/{components/TextEditor/extensions → extensions}/typewriter.d.ts +0 -0
  216. /package/dist/types/src/{hooks → extensions}/yjs/yjs.test.d.ts +0 -0
  217. /package/dist/types/src/{hooks/yjs → styles}/cursors.d.ts +0 -0
  218. /package/dist/types/src/{components/TextEditor/themes → themes}/index.d.ts +0 -0
  219. /package/src/{components/TextEditor/extensions → extensions}/blast.ts +0 -0
  220. /package/src/{components/TextEditor/extensions → extensions}/markdown/index.ts +0 -0
  221. /package/src/{hooks/yjs → styles}/cursors.ts +0 -0
  222. /package/src/{components/TextEditor/themes → themes}/index.ts +0 -0
@@ -1,10 +1,10 @@
1
1
  import { Observable } from 'lib0/observable';
2
- import * as awarenessProtocol from 'y-protocols/awareness';
2
+ import * as YP from 'y-protocols/awareness';
3
3
  import { Doc } from 'yjs';
4
4
  import { Event } from '@dxos/async';
5
5
  import { TextKind } from '@dxos/protocols/proto/dxos/echo/model/text';
6
6
  import { type EditorModel } from '../hooks';
7
- type Awareness = awarenessProtocol.Awareness;
7
+ type Awareness = YP.Awareness;
8
8
  /**
9
9
  * Yjs awareness provider in-memory.
10
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"replicator.d.ts","sourceRoot":"","sources":["../../../../src/testing/replicator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AAEtE,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEzD,KAAK,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAM7C;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,UAAU,CAAC,GAAG,CAAC;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;gBAEf,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE;IA+BtG,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,mBAAmB;CAG5B;AAED;;GAEG;AACH,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,MAAM,CAAqB;gBAEN,KAAK,EAAE,QAAQ;IAE5C,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE;IAI7B,UAAU,OAAQ,MAAM,QAAO,GAAG,KAAe,WAAW,CAoB1D;CACH;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,eAAO,MAAM,WAAW,4BAA6B,kBAAkB,KAAG,WAEzE,CAAC"}
1
+ {"version":3,"file":"replicator.d.ts","sourceRoot":"","sources":["../../../../src/testing/replicator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AAEtE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,KAAK,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;AAM9B;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,UAAU,CAAC,GAAG,CAAC;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;gBAEf,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE;IA4BtG,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,mBAAmB;CAG5B;AAED;;GAEG;AACH,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,MAAM,CAAqB;gBAEN,KAAK,EAAE,QAAQ;IAE5C,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE;IAI7B,UAAU,OAAQ,MAAM,QAAO,GAAG,KAAe,WAAW,CAoB1D;CACH;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,eAAO,MAAM,WAAW,4BAA6B,kBAAkB,KAAG,WAEzE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type ThemeStyles } from '../../../styles';
1
+ import { type ThemeStyles } from '../styles';
2
2
  /**
3
3
  * Minimal styles.
4
4
  * https://codemirror.net/examples/styling
@@ -0,0 +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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/themes/index.ts"],"names":[],"mappings":"AAIA,cAAc,WAAW,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.bd26370",
3
+ "version": "0.3.11-main.c244d7e",
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",
@@ -15,7 +15,7 @@
15
15
  "dependencies": {
16
16
  "@codemirror/autocomplete": "^6.11.1",
17
17
  "@codemirror/commands": "^6.3.2",
18
- "@codemirror/lang-markdown": "^6.2.3",
18
+ "@codemirror/lang-markdown": "^6.2.4",
19
19
  "@codemirror/language": "^6.9.3",
20
20
  "@codemirror/language-data": "^6.3.1",
21
21
  "@codemirror/lint": "^6.4.2",
@@ -38,23 +38,24 @@
38
38
  "y-codemirror.next": "^0.3.2",
39
39
  "y-protocols": "^1.0.5",
40
40
  "yjs": "^13.6.10",
41
- "@dxos/async": "0.3.11-main.bd26370",
42
- "@dxos/automerge": "0.3.11-main.bd26370",
43
- "@dxos/display-name": "0.3.11-main.bd26370",
44
- "@dxos/echo-schema": "0.3.11-main.bd26370",
45
- "@dxos/invariant": "0.3.11-main.bd26370",
46
- "@dxos/debug": "0.3.11-main.bd26370",
47
- "@dxos/protocols": "0.3.11-main.bd26370",
48
- "@dxos/react-async": "0.3.11-main.bd26370",
49
- "@dxos/react-ui": "0.3.11-main.bd26370",
50
- "@dxos/react-ui-theme": "0.3.11-main.bd26370",
51
- "@dxos/text-model": "0.3.11-main.bd26370",
52
- "@dxos/util": "0.3.11-main.bd26370",
53
- "@dxos/log": "0.3.11-main.bd26370"
41
+ "@dxos/async": "0.3.11-main.c244d7e",
42
+ "@dxos/automerge": "0.3.11-main.c244d7e",
43
+ "@dxos/context": "0.3.11-main.c244d7e",
44
+ "@dxos/debug": "0.3.11-main.c244d7e",
45
+ "@dxos/display-name": "0.3.11-main.c244d7e",
46
+ "@dxos/echo-schema": "0.3.11-main.c244d7e",
47
+ "@dxos/invariant": "0.3.11-main.c244d7e",
48
+ "@dxos/log": "0.3.11-main.c244d7e",
49
+ "@dxos/protocols": "0.3.11-main.c244d7e",
50
+ "@dxos/react-ui-theme": "0.3.11-main.c244d7e",
51
+ "@dxos/react-async": "0.3.11-main.c244d7e",
52
+ "@dxos/react-ui": "0.3.11-main.c244d7e",
53
+ "@dxos/text-model": "0.3.11-main.c244d7e",
54
+ "@dxos/util": "0.3.11-main.c244d7e"
54
55
  },
55
56
  "devDependencies": {
56
57
  "@automerge/automerge-repo-network-broadcastchannel": "^1.0.19",
57
- "@faker-js/faker": "^8.0.2",
58
+ "@faker-js/faker": "^8.3.1",
58
59
  "@phosphor-icons/react": "^2.0.5",
59
60
  "@preact/signals-react": "^1.3.6",
60
61
  "@types/lodash.defaultsdeep": "^4.6.6",
@@ -66,18 +67,19 @@
66
67
  "deepsignal": "1.4.0-shallow.0",
67
68
  "react": "^18.2.0",
68
69
  "react-dom": "^18.2.0",
69
- "@dxos/config": "0.3.11-main.bd26370",
70
- "@dxos/echo-signals": "0.3.11-main.bd26370",
71
- "@dxos/react-client": "0.3.11-main.bd26370",
72
- "@dxos/echo-typegen": "0.3.11-main.bd26370",
73
- "@dxos/react-ui": "0.3.11-main.bd26370",
74
- "@dxos/storybook-utils": "0.3.11-main.bd26370"
70
+ "@dxos/config": "0.3.11-main.c244d7e",
71
+ "@dxos/echo-signals": "0.3.11-main.c244d7e",
72
+ "@dxos/echo-typegen": "0.3.11-main.c244d7e",
73
+ "@dxos/storybook-utils": "0.3.11-main.c244d7e",
74
+ "@dxos/react-ui": "0.3.11-main.c244d7e",
75
+ "@dxos/react-client": "0.3.11-main.c244d7e",
76
+ "@dxos/keyboard": "0.3.11-main.c244d7e"
75
77
  },
76
78
  "peerDependencies": {
77
79
  "@phosphor-icons/react": "^2.0.5",
78
80
  "react": "^18.2.0",
79
81
  "react-dom": "^18.2.0",
80
- "@dxos/react-client": "0.3.11-main.bd26370"
82
+ "@dxos/react-client": "0.3.11-main.c244d7e"
81
83
  },
82
84
  "publishConfig": {
83
85
  "access": "public"
@@ -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,11 +12,12 @@ 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 {
21
22
  autocomplete,
22
23
  blast,
@@ -25,19 +26,17 @@ import {
25
26
  defaultOptions,
26
27
  hr,
27
28
  image,
28
- listener,
29
29
  link,
30
30
  mention,
31
31
  table,
32
32
  tasklist,
33
- tooltip,
34
33
  typewriter,
35
34
  type CommentsOptions,
36
- type TooltipOptions,
37
35
  type LinkOptions,
38
- mermaid,
39
- } from './extensions';
40
- import { type CommentRange, useTextModel } from '../../hooks';
36
+ outliner,
37
+ useComments,
38
+ } from '../../extensions';
39
+ import { type Comment, useTextModel } from '../../hooks';
41
40
 
42
41
  // Extensions:
43
42
  // TODO(burdon): Table of contents.
@@ -57,8 +56,8 @@ const text = {
57
56
  '- [x] decorator',
58
57
  '- [ ] checkbox',
59
58
  ' - [ ] state',
60
- ' - [ ] indent',
61
- ' - [x] style',
59
+ ' - [ ] indent',
60
+ ' - [x] style',
62
61
  '',
63
62
  ),
64
63
 
@@ -125,8 +124,6 @@ const text = {
125
124
 
126
125
  paragraphs: str(...faker.helpers.multiple(() => [faker.lorem.paragraph(), ''], { count: 3 }).flat()),
127
126
 
128
- mermaid: str('```mermaid', 'graph TD;', 'A-->B;', 'A-->C;', 'B-->D;', 'C-->D;', '```'),
129
-
130
127
  footer: str('', '', '', '', '')
131
128
  };
132
129
 
@@ -166,10 +163,12 @@ const links = [
166
163
  { label: 'StackEdit', apply: '[StackEdit](https://stackedit.io/app)' },
167
164
  ];
168
165
 
166
+ const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
167
+
169
168
  const hover =
170
169
  'rounded-sm text-base text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200';
171
170
 
172
- const onTooltipHover: TooltipOptions['onHover'] = (el, url) => {
171
+ const onHoverLinkTooltip: LinkOptions['onHover'] = (el, url) => {
173
172
  const web = new URL(url);
174
173
  createRoot(el).render(
175
174
  <StrictMode>
@@ -187,26 +186,26 @@ const Key: FC<{ char: string }> = ({ char }) => (
187
186
  </span>
188
187
  );
189
188
 
190
- const onCommentsHover: CommentsOptions['onHover'] = (el) => {
189
+ const onCommentsHover: CommentsOptions['onHover'] = (el, shortcut) => {
191
190
  createRoot(el).render(
192
191
  <StrictMode>
193
192
  <div className='flex items-center gap-2 px-2 py-2 bg-neutral-700 text-white text-xs rounded'>
194
193
  <div>Create comment</div>
195
- {/* TODO(burdon): Unify shortcuts. */}
196
194
  <div className='flex gap-1'>
197
- <Key char='⌘' />
198
- <Key char="'" />
195
+ {keySymbols(parseShortcut(shortcut)).map((char) => (
196
+ <Key key={char} char={char} />
197
+ ))}
199
198
  </div>
200
199
  </div>
201
200
  </StrictMode>,
202
201
  );
203
202
  };
204
203
 
205
- const onLinkRender: LinkOptions['onRender'] = (el, url) => {
204
+ const onRenderLink: LinkOptions['onRender'] = (el, url) => {
206
205
  createRoot(el).render(
207
206
  <StrictMode>
208
207
  <a href={url} target='_blank' rel='noreferrer' className={hover}>
209
- <ArrowSquareOut weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 mb-1')} />
208
+ <ArrowSquareOut weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 mb-[2px]')} />
210
209
  </a>
211
210
  </StrictMode>,
212
211
  );
@@ -214,23 +213,24 @@ const onLinkRender: LinkOptions['onRender'] = (el, url) => {
214
213
 
215
214
  type StoryProps = {
216
215
  text?: string;
216
+ comments?: Comment[];
217
217
  automerge?: boolean;
218
- } & Pick<TextEditorProps, 'comments' | 'readonly' | 'extensions' | 'slots'>;
218
+ } & Pick<TextEditorProps, 'readonly' | 'placeholder' | 'slots' | 'extensions'>;
219
219
 
220
- const Story = ({ text, automerge, ...props }: StoryProps) => {
221
- const ref = useRef<TextEditorRef>(null);
220
+ const Story = ({ text, comments, automerge, placeholder = 'New document.', ...props }: StoryProps) => {
222
221
  const [item] = useState({ text: new TextObject(text, undefined, undefined, { automerge }) });
222
+ const view = useRef<EditorView>(null);
223
223
  const model = useTextModel({ text: item.text });
224
+ useComments(view.current, comments);
224
225
  if (!model) {
225
226
  return null;
226
227
  }
227
228
 
228
229
  return (
229
230
  <div className={mx(fixedInsetFlexLayout, groupSurface)}>
230
- <div className='flex justify-center overflow-y-scroll'>
231
- <div className='flex flex-col w-[800px] py-16'>
232
- <MarkdownEditor ref={ref} model={model} {...props} />
233
- <div className='flex shrink-0 h-[300px]'></div>
231
+ <div className='flex h-full justify-center'>
232
+ <div className='flex flex-col h-full w-[800px]'>
233
+ <MarkdownEditor ref={view} model={model} placeholder={placeholder} {...props} />
234
234
  </div>
235
235
  </div>
236
236
  </div>
@@ -244,47 +244,59 @@ export default {
244
244
  render: Story,
245
245
  };
246
246
 
247
- const extensions = [
247
+ const defaults = [
248
248
  autocomplete({
249
249
  onSearch: (text) => links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase())),
250
250
  }),
251
251
  code(),
252
252
  hr(),
253
253
  image(),
254
- link({ onRender: onLinkRender }),
254
+ link({ onRender: onRenderLink, onHover: onHoverLinkTooltip }),
255
+ // mention({
256
+ // onSearch: (text) => names.filter((name) => name.toLowerCase().startsWith(text.toLowerCase())),
257
+ // }),
255
258
  table(),
256
259
  tasklist(),
257
- tooltip({ onHover: onTooltipHover }),
258
260
  ];
259
261
 
260
262
  export const Default = {
261
- render: () => <Story text={document} extensions={extensions} />,
263
+ render: () => <Story text={document} extensions={defaults} />,
262
264
  };
263
265
 
264
266
  export const Readonly = {
265
- render: () => <Story text={document} extensions={extensions} readonly />,
267
+ render: () => <Story text={document} extensions={defaults} readonly />,
268
+ };
269
+
270
+ const large = faker.helpers.multiple(() => faker.lorem.paragraph({ min: 8, max: 16 }), { count: 20 }).join('\n\n');
271
+
272
+ export const Large = {
273
+ render: () => <Story text={str('# Large Document', '', large)} extensions={[]} />,
274
+ };
275
+
276
+ export const Empty = {
277
+ render: () => <Story />,
266
278
  };
267
279
 
268
280
  export const NoExtensions = {
269
281
  render: () => <Story text={document} />,
270
282
  };
271
283
 
272
- // TODO(burdon): Cursor bug if no newline after BR (cursor down just loops back to start of each paragraph).
273
284
  export const HorizontalRule = {
274
285
  render: () => (
275
286
  <Story
276
- text={str('# Horizontal Rule', '', text.paragraphs, '---', '', text.paragraphs, '---', '', text.paragraphs)}
287
+ text={str('# Horizontal Rule', '', text.paragraphs, '---', text.paragraphs, '---', text.paragraphs)}
277
288
  extensions={[hr()]}
278
289
  />
279
290
  ),
280
291
  };
281
292
 
282
- export const Tooltips = {
283
- render: () => <Story text={str(text.links, text.footer)} extensions={[tooltip({ onHover: onTooltipHover })]} />,
284
- };
285
-
286
293
  export const Links = {
287
- render: () => <Story text={str(text.links, text.footer)} extensions={[link({ onRender: onLinkRender })]} />,
294
+ render: () => (
295
+ <Story
296
+ text={str(text.links, text.footer)}
297
+ extensions={[link({ onHover: onHoverLinkTooltip, onRender: onRenderLink })]}
298
+ />
299
+ ),
288
300
  };
289
301
 
290
302
  export const Code = {
@@ -299,18 +311,17 @@ export const Image = {
299
311
  render: () => <Story text={str(text.image, text.footer)} readonly extensions={[image()]} />,
300
312
  };
301
313
 
302
- export const Tasklist = {
314
+ export const Lists = {
315
+ render: () => (
316
+ <Story text={str(text.tasks, '', text.list, '', text.numbered, text.footer)} extensions={[tasklist()]} />
317
+ ),
318
+ };
319
+
320
+ export const Outliner = {
303
321
  render: () => (
304
322
  <Story
305
- text={str(text.tasks, '', text.list, text.footer)}
306
- extensions={[
307
- tasklist(),
308
- listener({
309
- onChange: (text) => {
310
- console.log(text);
311
- },
312
- }),
313
- ]}
323
+ text={str('# Outliner', '', 'Block', ': this is a block', ': with multiple lines', text.footer)}
324
+ extensions={[outliner()]}
314
325
  />
315
326
  ),
316
327
  };
@@ -318,9 +329,9 @@ export const Tasklist = {
318
329
  export const Autocomplete = {
319
330
  render: () => (
320
331
  <Story
321
- text={str('# Autocomplete', '', 'Press CTRL-SPACE', text.footer)}
332
+ text={str('# Autocomplete', '', 'Press Ctrl-Space...', text.footer)}
322
333
  extensions={[
323
- link({ onRender: onLinkRender }),
334
+ link({ onRender: onRenderLink }),
324
335
  autocomplete({
325
336
  onSearch: (text) => links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase())),
326
337
  }),
@@ -329,8 +340,6 @@ export const Autocomplete = {
329
340
  ),
330
341
  };
331
342
 
332
- const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
333
-
334
343
  export const Mention = {
335
344
  render: () => (
336
345
  <Story
@@ -344,24 +353,20 @@ export const Mention = {
344
353
  ),
345
354
  };
346
355
 
347
- export const Mermaid = {
348
- render: () => <Story text={str('# Mermaid', '', text.mermaid, text.footer)} extensions={[code(), mermaid()]} />,
349
- };
350
-
351
356
  export const Comments = {
352
357
  render: () => {
353
- const [commentsStates, setCommentStates] = useState<CommentRange[]>([]);
358
+ const [commentRanges, setCommentRanges] = useState<Comment[]>([]);
354
359
 
355
360
  return (
356
361
  <Story
357
362
  text={str('# Comments', '', text.paragraphs, text.footer)}
358
- comments={commentsStates}
363
+ comments={commentRanges}
359
364
  extensions={[
360
365
  comments({
361
366
  onHover: onCommentsHover,
362
- onCreate: (relPos) => {
367
+ onCreate: (range) => {
363
368
  const id = PublicKey.random().toHex();
364
- setCommentStates((comments) => [...comments, { id, cursor: relPos }]);
369
+ setCommentRanges((commentRanges) => [...commentRanges, { id, cursor: range }]);
365
370
  return id;
366
371
  },
367
372
  onSelect: (state) => {
@@ -370,9 +375,9 @@ export const Comments = {
370
375
  console.log(
371
376
  'update',
372
377
  JSON.stringify({
373
- active: state.active?.slice(0, 8),
374
- closest: state.closest?.slice(0, 8),
375
- ranges: state.ranges.length,
378
+ comments: state.comments.length,
379
+ active: state.selection.active?.slice(0, 8),
380
+ closest: state.selection.closest?.slice(0, 8),
376
381
  }),
377
382
  );
378
383
  }
@@ -384,8 +389,15 @@ export const Comments = {
384
389
  },
385
390
  };
386
391
 
392
+ const typewriterItems = localStorage.getItem('dxos.org/plugin/markdown/typewriter')?.split(',');
393
+
387
394
  export const Typewriter = {
388
- render: () => <Story text={str('# Typewriter', '', text.paragraphs, text.footer)} extensions={[typewriter()]} />,
395
+ render: () => (
396
+ <Story
397
+ text={str('# Typewriter', '', text.paragraphs, text.footer)}
398
+ extensions={[typewriter({ items: typewriterItems })]}
399
+ />
400
+ ),
389
401
  };
390
402
 
391
403
  export const Blast = {
@@ -393,9 +405,7 @@ export const Blast = {
393
405
  <Story
394
406
  text={str('# Blast', '', text.paragraphs, text.code, text.paragraphs)}
395
407
  extensions={[
396
- typewriter({
397
- items: localStorage.getItem('dxos.composer.extension.demo')?.split(','),
398
- }),
408
+ typewriter({ items: typewriterItems }),
399
409
  blast(
400
410
  defaultsDeep(
401
411
  {
@@ -412,17 +422,3 @@ export const Blast = {
412
422
  />
413
423
  ),
414
424
  };
415
-
416
- export const Diagnostics = {
417
- render: () => (
418
- <Story
419
- text={document}
420
- extensions={[
421
- // Cursor moved.
422
- EditorView.updateListener.of((update) => {
423
- console.log('update', update.view.state.selection.main.head);
424
- }),
425
- ]}
426
- />
427
- ),
428
- };
@@ -4,15 +4,14 @@
4
4
 
5
5
  import '@dxosTheme';
6
6
 
7
- import defaultsDeep from 'lodash.defaultsdeep';
8
- import React, { useRef, useState } from 'react';
7
+ import React, { useState } from 'react';
9
8
 
10
9
  import { TextObject } from '@dxos/echo-schema';
11
10
  import { fixedInsetFlexLayout, groupSurface, mx } from '@dxos/react-ui-theme';
12
11
  import { withTheme } from '@dxos/storybook-utils';
13
12
 
14
- import { defaultSlots, TextEditor, type TextEditorProps, type TextEditorRef, type TextEditorSlots } from './TextEditor';
15
- import { textTheme } from './themes';
13
+ import { TextEditor, type TextEditorProps } from './TextEditor';
14
+ import { listener } from '../../extensions';
16
15
  import { useTextModel } from '../../hooks';
17
16
 
18
17
  const initialText = [
@@ -29,8 +28,7 @@ const Story = ({
29
28
  text,
30
29
  automerge,
31
30
  ...props
32
- }: { text?: string; automerge?: boolean } & Pick<TextEditorProps, 'extensions' | 'slots'>) => {
33
- const ref = useRef<TextEditorRef>(null);
31
+ }: { text?: string; automerge?: boolean } & Pick<TextEditorProps, 'extensions' | 'placeholder' | 'slots'>) => {
34
32
  const [item] = useState({ text: new TextObject(text, undefined, undefined, { automerge }) });
35
33
  const model = useTextModel({ text: item.text });
36
34
  if (!model) {
@@ -39,10 +37,9 @@ const Story = ({
39
37
 
40
38
  return (
41
39
  <div className={mx(fixedInsetFlexLayout, groupSurface)}>
42
- <div className='flex justify-center overflow-y-scroll'>
40
+ <div className='flex justify-center'>
43
41
  <div className='flex flex-col w-[800px] py-16'>
44
- <TextEditor ref={ref} model={model} {...props} />
45
- <div className='flex shrink-0 h-[300px]'></div>
42
+ <TextEditor model={model} {...props} />
46
43
  </div>
47
44
  </div>
48
45
  </div>
@@ -57,37 +54,19 @@ export default {
57
54
  };
58
55
 
59
56
  export const Default = {
60
- render: () => (
61
- <Story
62
- slots={defaultsDeep(
63
- { editor: { theme: textTheme, placeholder: 'Enter text...' } } satisfies TextEditorSlots,
64
- defaultSlots,
65
- )}
66
- />
67
- ),
57
+ render: () => <Story placeholder='Enter text...' />,
68
58
  };
69
59
 
70
60
  export const Text = {
71
- render: () => (
72
- <Story
73
- text={initialText}
74
- slots={defaultsDeep(
75
- { editor: { theme: textTheme, placeholder: 'Enter text...' } } satisfies TextEditorSlots,
76
- defaultSlots,
77
- )}
78
- />
79
- ),
61
+ render: () => <Story text={initialText} placeholder='Enter text...' />,
80
62
  };
81
63
 
82
64
  export const Automerge = {
65
+ render: () => <Story text={initialText} placeholder='Enter text...' automerge />,
66
+ };
67
+
68
+ export const Listener = {
83
69
  render: () => (
84
- <Story
85
- automerge
86
- text={initialText}
87
- slots={defaultsDeep(
88
- { editor: { theme: textTheme, placeholder: 'Enter text...' } } satisfies TextEditorSlots,
89
- defaultSlots,
90
- )}
91
- />
70
+ <Story placeholder='Enter text...' extensions={[listener({ onChange: (text) => console.log(text) })]} />
92
71
  ),
93
72
  };