@dxos/react-ui-editor 0.3.11-main.9bacd9f → 0.3.11-main.9c729f3

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 +1460 -986
  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/TextEditor.d.ts.map +1 -1
  5. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +3 -0
  6. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  7. package/dist/types/src/{hooks/automerge → components/TextEditor}/automerge.stories.d.ts +6 -1
  8. package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +1 -0
  9. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/TextEditor/index.d.ts +0 -2
  11. package/dist/types/src/components/TextEditor/index.d.ts.map +1 -1
  12. package/dist/types/src/{hooks/yjs → components/TextEditor}/yjs.stories.d.ts +1 -1
  13. package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +1 -0
  14. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -0
  15. package/dist/types/src/extensions/automerge/automerge.d.ts +9 -0
  16. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -0
  17. package/dist/types/src/extensions/automerge/cursor.d.ts +5 -0
  18. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -0
  19. package/dist/types/src/extensions/automerge/defs.d.ts +26 -0
  20. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -0
  21. package/dist/types/src/extensions/automerge/index.d.ts +3 -0
  22. package/dist/types/src/extensions/automerge/index.d.ts.map +1 -0
  23. package/dist/types/src/{hooks → extensions}/automerge/semaphore.d.ts +4 -4
  24. package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -0
  25. package/dist/types/src/extensions/automerge/update-automerge.d.ts +5 -0
  26. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -0
  27. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +1 -0
  28. package/dist/types/src/extensions/awareness.d.ts +46 -0
  29. package/dist/types/src/extensions/awareness.d.ts.map +1 -0
  30. package/dist/types/src/extensions/basic.d.ts.map +1 -0
  31. package/dist/types/src/extensions/blast.d.ts.map +1 -0
  32. package/dist/types/src/extensions/code.d.ts.map +1 -0
  33. package/dist/types/src/{components/TextEditor/extensions → extensions}/comments.d.ts +4 -2
  34. package/dist/types/src/extensions/comments.d.ts.map +1 -0
  35. package/dist/types/src/extensions/hr.d.ts.map +1 -0
  36. package/dist/types/src/extensions/image.d.ts.map +1 -0
  37. package/dist/types/src/{components/TextEditor/extensions → extensions}/index.d.ts +3 -0
  38. package/dist/types/src/extensions/index.d.ts.map +1 -0
  39. package/dist/types/src/extensions/link.d.ts.map +1 -0
  40. package/dist/types/src/extensions/listener.d.ts.map +1 -0
  41. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -0
  42. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -0
  43. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -0
  44. package/dist/types/src/extensions/mention.d.ts.map +1 -0
  45. package/dist/types/src/extensions/mermaid.d.ts.map +1 -0
  46. package/dist/types/src/extensions/table.d.ts.map +1 -0
  47. package/dist/types/src/extensions/tasklist.d.ts.map +1 -0
  48. package/dist/types/src/extensions/typewriter.d.ts.map +1 -0
  49. package/dist/types/src/extensions/yjs/cursor.d.ts +4 -0
  50. package/dist/types/src/extensions/yjs/cursor.d.ts.map +1 -0
  51. package/dist/types/src/extensions/yjs/index.d.ts +2 -0
  52. package/dist/types/src/extensions/yjs/index.d.ts.map +1 -0
  53. package/dist/types/src/extensions/yjs/yjs.d.ts +4 -0
  54. package/dist/types/src/extensions/yjs/yjs.d.ts.map +1 -0
  55. package/dist/types/src/extensions/yjs/yjs.test.d.ts.map +1 -0
  56. package/dist/types/src/hooks/automerge.d.ts +3 -0
  57. package/dist/types/src/hooks/automerge.d.ts.map +1 -0
  58. package/dist/types/src/hooks/awareness-provider.d.ts +28 -0
  59. package/dist/types/src/hooks/awareness-provider.d.ts.map +1 -0
  60. package/dist/types/src/hooks/index.d.ts +2 -0
  61. package/dist/types/src/hooks/index.d.ts.map +1 -1
  62. package/dist/types/src/hooks/useTextModel.d.ts +9 -8
  63. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  64. package/dist/types/src/hooks/{yjs/space-provider.d.ts → yjs.d.ts} +8 -8
  65. package/dist/types/src/hooks/yjs.d.ts.map +1 -0
  66. package/dist/types/src/index.d.ts +2 -0
  67. package/dist/types/src/index.d.ts.map +1 -1
  68. package/dist/types/src/styles/cursors.d.ts.map +1 -0
  69. package/dist/types/src/styles/index.d.ts +1 -0
  70. package/dist/types/src/styles/index.d.ts.map +1 -1
  71. package/dist/types/src/testing/replicator.d.ts +2 -2
  72. package/dist/types/src/testing/replicator.d.ts.map +1 -1
  73. package/dist/types/src/{components/TextEditor/themes → themes}/default.d.ts +1 -1
  74. package/dist/types/src/themes/default.d.ts.map +1 -0
  75. package/dist/types/src/themes/index.d.ts.map +1 -0
  76. package/dist/types/src/util/cursor.d.ts +17 -0
  77. package/dist/types/src/util/cursor.d.ts.map +1 -0
  78. package/dist/types/src/util/index.d.ts +3 -0
  79. package/dist/types/src/util/index.d.ts.map +1 -0
  80. package/dist/types/src/util/util.d.ts.map +1 -0
  81. package/package.json +22 -21
  82. package/src/components/TextEditor/MarkdownEditor.stories.tsx +1 -1
  83. package/src/components/TextEditor/TextEditor.stories.tsx +14 -1
  84. package/src/components/TextEditor/TextEditor.tsx +3 -3
  85. package/src/{hooks/automerge → components/TextEditor}/automerge.stories.tsx +66 -6
  86. package/src/components/TextEditor/codemirror.stories.ts +3 -2
  87. package/src/components/TextEditor/index.ts +0 -3
  88. package/src/{hooks/yjs → components/TextEditor}/yjs.stories.tsx +1 -1
  89. package/src/extensions/automerge/automerge.ts +94 -0
  90. package/src/extensions/automerge/cursor.ts +51 -0
  91. package/src/extensions/automerge/defs.ts +62 -0
  92. package/src/extensions/automerge/index.ts +6 -0
  93. package/src/{hooks → extensions}/automerge/semaphore.ts +14 -12
  94. package/src/{hooks → extensions}/automerge/update-automerge.ts +5 -6
  95. package/src/{hooks → extensions}/automerge/update-codemirror.ts +13 -5
  96. package/src/extensions/awareness.ts +316 -0
  97. package/src/{components/TextEditor/extensions → extensions}/code.ts +1 -1
  98. package/src/{components/TextEditor/extensions → extensions}/comments.ts +51 -19
  99. package/src/{components/TextEditor/extensions → extensions}/hr.ts +1 -1
  100. package/src/{components/TextEditor/extensions → extensions}/index.ts +3 -0
  101. package/src/{components/TextEditor/extensions → extensions}/markdown/highlight.ts +1 -1
  102. package/src/{components/TextEditor/extensions → extensions}/typewriter.ts +1 -1
  103. package/src/extensions/yjs/cursor.ts +21 -0
  104. package/src/extensions/yjs/index.ts +5 -0
  105. package/src/{hooks → extensions}/yjs/yjs.test.ts +1 -25
  106. package/src/extensions/yjs/yjs.ts +16 -0
  107. package/src/hooks/automerge.ts +52 -0
  108. package/src/hooks/awareness-provider.ts +120 -0
  109. package/src/hooks/index.ts +2 -0
  110. package/src/hooks/useTextModel.ts +20 -93
  111. package/src/hooks/{yjs/space-provider.ts → yjs.ts} +71 -19
  112. package/src/index.ts +2 -0
  113. package/src/styles/index.ts +1 -0
  114. package/src/testing/replicator.ts +10 -15
  115. package/src/{components/TextEditor/themes → themes}/default.ts +1 -1
  116. package/src/util/cursor.ts +29 -0
  117. package/src/util/index.ts +6 -0
  118. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts.map +0 -1
  119. package/dist/types/src/components/TextEditor/extensions/basic.d.ts.map +0 -1
  120. package/dist/types/src/components/TextEditor/extensions/blast.d.ts.map +0 -1
  121. package/dist/types/src/components/TextEditor/extensions/code.d.ts.map +0 -1
  122. package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +0 -1
  123. package/dist/types/src/components/TextEditor/extensions/hr.d.ts.map +0 -1
  124. package/dist/types/src/components/TextEditor/extensions/image.d.ts.map +0 -1
  125. package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +0 -1
  126. package/dist/types/src/components/TextEditor/extensions/link.d.ts.map +0 -1
  127. package/dist/types/src/components/TextEditor/extensions/listener.d.ts.map +0 -1
  128. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts.map +0 -1
  129. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +0 -1
  130. package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts.map +0 -1
  131. package/dist/types/src/components/TextEditor/extensions/mention.d.ts.map +0 -1
  132. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts.map +0 -1
  133. package/dist/types/src/components/TextEditor/extensions/table.d.ts.map +0 -1
  134. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts.map +0 -1
  135. package/dist/types/src/components/TextEditor/extensions/typewriter.d.ts.map +0 -1
  136. package/dist/types/src/components/TextEditor/extensions/util.d.ts.map +0 -1
  137. package/dist/types/src/components/TextEditor/themes/default.d.ts.map +0 -1
  138. package/dist/types/src/components/TextEditor/themes/index.d.ts.map +0 -1
  139. package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +0 -1
  140. package/dist/types/src/hooks/automerge/handle.d.ts +0 -9
  141. package/dist/types/src/hooks/automerge/handle.d.ts.map +0 -1
  142. package/dist/types/src/hooks/automerge/index.d.ts +0 -3
  143. package/dist/types/src/hooks/automerge/index.d.ts.map +0 -1
  144. package/dist/types/src/hooks/automerge/plugin.d.ts +0 -26
  145. package/dist/types/src/hooks/automerge/plugin.d.ts.map +0 -1
  146. package/dist/types/src/hooks/automerge/semaphore.d.ts.map +0 -1
  147. package/dist/types/src/hooks/automerge/update-automerge.d.ts +0 -6
  148. package/dist/types/src/hooks/automerge/update-automerge.d.ts.map +0 -1
  149. package/dist/types/src/hooks/automerge/update-codemirror.d.ts.map +0 -1
  150. package/dist/types/src/hooks/yjs/cursors.d.ts.map +0 -1
  151. package/dist/types/src/hooks/yjs/index.d.ts +0 -3
  152. package/dist/types/src/hooks/yjs/index.d.ts.map +0 -1
  153. package/dist/types/src/hooks/yjs/space-provider.d.ts.map +0 -1
  154. package/dist/types/src/hooks/yjs/yjs.stories.d.ts.map +0 -1
  155. package/dist/types/src/hooks/yjs/yjs.test.d.ts.map +0 -1
  156. package/src/hooks/automerge/handle.ts +0 -14
  157. package/src/hooks/automerge/index.ts +0 -6
  158. package/src/hooks/automerge/plugin.ts +0 -134
  159. package/src/hooks/yjs/index.ts +0 -6
  160. /package/dist/types/src/{components/TextEditor/extensions → extensions}/autocomplete.d.ts +0 -0
  161. /package/dist/types/src/{hooks → extensions}/automerge/update-codemirror.d.ts +0 -0
  162. /package/dist/types/src/{components/TextEditor/extensions → extensions}/basic.d.ts +0 -0
  163. /package/dist/types/src/{components/TextEditor/extensions → extensions}/blast.d.ts +0 -0
  164. /package/dist/types/src/{components/TextEditor/extensions → extensions}/code.d.ts +0 -0
  165. /package/dist/types/src/{components/TextEditor/extensions → extensions}/hr.d.ts +0 -0
  166. /package/dist/types/src/{components/TextEditor/extensions → extensions}/image.d.ts +0 -0
  167. /package/dist/types/src/{components/TextEditor/extensions → extensions}/link.d.ts +0 -0
  168. /package/dist/types/src/{components/TextEditor/extensions → extensions}/listener.d.ts +0 -0
  169. /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/bundle.d.ts +0 -0
  170. /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/highlight.d.ts +0 -0
  171. /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/index.d.ts +0 -0
  172. /package/dist/types/src/{components/TextEditor/extensions → extensions}/mention.d.ts +0 -0
  173. /package/dist/types/src/{components/TextEditor/extensions → extensions}/mermaid.d.ts +0 -0
  174. /package/dist/types/src/{components/TextEditor/extensions → extensions}/table.d.ts +0 -0
  175. /package/dist/types/src/{components/TextEditor/extensions → extensions}/tasklist.d.ts +0 -0
  176. /package/dist/types/src/{components/TextEditor/extensions → extensions}/typewriter.d.ts +0 -0
  177. /package/dist/types/src/{hooks → extensions}/yjs/yjs.test.d.ts +0 -0
  178. /package/dist/types/src/{hooks/yjs → styles}/cursors.d.ts +0 -0
  179. /package/dist/types/src/{components/TextEditor/themes → themes}/index.d.ts +0 -0
  180. /package/dist/types/src/{components/TextEditor/extensions → util}/util.d.ts +0 -0
  181. /package/src/{components/TextEditor/extensions → extensions}/autocomplete.ts +0 -0
  182. /package/src/{components/TextEditor/extensions → extensions}/basic.ts +0 -0
  183. /package/src/{components/TextEditor/extensions → extensions}/blast.ts +0 -0
  184. /package/src/{components/TextEditor/extensions → extensions}/image.ts +0 -0
  185. /package/src/{components/TextEditor/extensions → extensions}/link.ts +0 -0
  186. /package/src/{components/TextEditor/extensions → extensions}/listener.ts +0 -0
  187. /package/src/{components/TextEditor/extensions → extensions}/markdown/bundle.ts +0 -0
  188. /package/src/{components/TextEditor/extensions → extensions}/markdown/index.ts +0 -0
  189. /package/src/{components/TextEditor/extensions → extensions}/mention.ts +0 -0
  190. /package/src/{components/TextEditor/extensions → extensions}/mermaid.ts +0 -0
  191. /package/src/{components/TextEditor/extensions → extensions}/table.ts +0 -0
  192. /package/src/{components/TextEditor/extensions → extensions}/tasklist.ts +0 -0
  193. /package/src/{hooks/yjs → styles}/cursors.ts +0 -0
  194. /package/src/{components/TextEditor/themes → themes}/index.ts +0 -0
  195. /package/src/{components/TextEditor/extensions → util}/util.ts +0 -0
@@ -0,0 +1,4 @@
1
+ import * as Y from 'yjs';
2
+ import { type CursorConverter } from '../../util';
3
+ export declare const cursorConverter: (text: Y.Text) => CursorConverter;
4
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/yjs/cursor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,eAU7C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './yjs';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/yjs/index.ts"],"names":[],"mappings":"AAIA,cAAc,OAAO,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type * as YP from 'y-protocols/awareness';
2
+ import type { YText } from '@dxos/text-model';
3
+ export declare const yjs: (content: YText, awareness?: YP.Awareness) => import("@codemirror/state").Extension[];
4
+ //# sourceMappingURL=yjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yjs.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/yjs/yjs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAK9C,eAAO,MAAM,GAAG,YAAa,KAAK,cAAc,GAAG,SAAS,4CAG3D,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yjs.test.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/yjs/yjs.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { type EditorModel, type UseTextModelProps } from './useTextModel';
2
+ export declare const createAutomergeModel: ({ space, identity, text }: UseTextModelProps) => EditorModel;
3
+ //# sourceMappingURL=automerge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automerge.d.ts","sourceRoot":"","sources":["../../../../src/hooks/automerge.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,WAAW,EAAc,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAItF,eAAO,MAAM,oBAAoB,8BAA+B,iBAAiB,KAAG,WAqCnF,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Event } from '@dxos/async';
2
+ import { type Space } from '@dxos/react-client/echo';
3
+ import { type AwarenessInfo, type AwarenessPosition, type AwarenessProvider, type AwarenessState } from '../extensions';
4
+ export type AwarenessProviderParams = {
5
+ space: Space;
6
+ channel: string;
7
+ peerId: string;
8
+ info: AwarenessInfo;
9
+ };
10
+ export declare class SpaceAwarenessProvider implements AwarenessProvider {
11
+ readonly remoteStateChange: Event<void>;
12
+ private readonly _remoteStates;
13
+ private readonly _space;
14
+ private readonly _channel;
15
+ private readonly _peerId;
16
+ private readonly _info;
17
+ private _localState?;
18
+ private _postTask?;
19
+ private _ctx?;
20
+ constructor(params: AwarenessProviderParams);
21
+ open(): void;
22
+ close(): void;
23
+ update(position: AwarenessPosition | undefined): void;
24
+ getRemoteStates(): AwarenessState[];
25
+ private _handleQueryMessage;
26
+ private _handlePostMessage;
27
+ }
28
+ //# sourceMappingURL=awareness-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awareness-provider.d.ts","sourceRoot":"","sources":["../../../../src/hooks/awareness-provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,EAAS,MAAM,aAAa,CAAC;AAIzD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAaxH,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,SAAgB,iBAAiB,cAAqB;IAEtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqC;IAEnE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAEtC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,SAAS,CAAC,CAAe;IACjC,OAAO,CAAC,IAAI,CAAC,CAAU;gBAEX,MAAM,EAAE,uBAAuB;IAO3C,IAAI;IAoCJ,KAAK;IAML,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI;IAWrD,eAAe,IAAI,cAAc,EAAE;IAInC,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,kBAAkB;CAK3B"}
@@ -1,3 +1,5 @@
1
+ export * from './automerge';
2
+ export * from './awareness-provider';
1
3
  export * from './useTextModel';
2
4
  export * from './yjs';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC"}
@@ -1,9 +1,8 @@
1
- import { type Extension, StateField } from '@codemirror/state';
2
- import type * as awarenessProtocol from 'y-protocols/awareness';
1
+ import { StateField, type Extension } from '@codemirror/state';
2
+ import type * as YP from 'y-protocols/awareness';
3
3
  import { type DocAccessor, type Space, type TextObject } from '@dxos/react-client/echo';
4
4
  import { type Identity } from '@dxos/react-client/halo';
5
5
  import type { YText, YXmlFragment } from '@dxos/text-model';
6
- type Awareness = awarenessProtocol.Awareness;
7
6
  /**
8
7
  * State field makes the model available to other extensions.
9
8
  */
@@ -18,12 +17,15 @@ export type CommentRange = {
18
17
  };
19
18
  export type EditorModel = {
20
19
  id: string;
21
- content: string | YText | YXmlFragment | DocAccessor;
22
20
  text: () => string;
23
- getCursorFromRange?: (value: Range) => string;
24
- getRangeFromCursor?: (cursor: string) => Range;
25
21
  extension?: Extension;
26
- awareness?: Awareness;
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;
27
29
  peer?: {
28
30
  id: string;
29
31
  name?: string;
@@ -35,5 +37,4 @@ export type UseTextModelProps = {
35
37
  text?: TextObject;
36
38
  };
37
39
  export declare const useTextModel: (props: UseTextModelProps) => EditorModel | undefined;
38
- export {};
39
40
  //# 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,KAAK,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/D,OAAO,KAAK,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAIhE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,UAAU,EAIhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAO5D,KAAK,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAE7C;;GAEG;AAEH,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;IAEX,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IAEX,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC;IACrD,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IAC9C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC;IAC/C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,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":"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,27 +1,27 @@
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 { type Doc } from 'yjs';
4
4
  import { type Space } from '@dxos/react-client/echo';
5
- type Awareness = awarenessProtocol.Awareness;
5
+ import { type EditorModel, type UseTextModelProps } from './useTextModel';
6
+ export declare const createYjsModel: ({ identity, space, text }: UseTextModelProps) => EditorModel;
6
7
  /**
7
8
  * Yjs awareness provider on top of a DXOS space.
8
9
  */
9
- export declare class SpaceAwarenessProvider extends Observable<any> {
10
+ export declare class YAwarenessProvider extends Observable<any> {
10
11
  private readonly _space;
11
12
  private readonly _awareness;
12
13
  private readonly _clientId;
13
14
  private readonly _channel;
14
- constructor({ space, doc, channel, awareness }: {
15
+ constructor({ space, doc, channel, awareness, }: {
15
16
  space: Space;
16
17
  doc: Doc;
17
18
  channel: string;
18
- awareness?: Awareness;
19
+ awareness?: YP.Awareness;
19
20
  });
20
- get awareness(): Awareness;
21
+ get awareness(): YP.Awareness;
21
22
  private _handleAwarenessUpdate;
22
23
  private _handleSpaceMessage;
23
24
  private _readMessage;
24
25
  private _handleBeforeUnload;
25
26
  }
26
- export {};
27
- //# sourceMappingURL=space-provider.d.ts.map
27
+ //# sourceMappingURL=yjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yjs.d.ts","sourceRoot":"","sources":["../../../../src/hooks/yjs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAKrD,OAAO,EAAE,KAAK,WAAW,EAA0B,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGlG,eAAO,MAAM,cAAc,8BAA+B,iBAAiB,KAAG,WAyC7E,CAAC;AAOF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,UAAU,CAAC,GAAG,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,EACV,KAAK,EACL,GAAG,EACH,OAAO,EACP,SAAS,GACV,EAAE;QACD,KAAK,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,GAAG,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;KAC1B;IA4BD,IAAI,SAAS,IAAI,EAAE,CAAC,SAAS,CAE5B;IAED,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,mBAAmB;CAG5B"}
@@ -2,5 +2,7 @@ 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
4
  export * from './components';
5
+ export * from './extensions';
5
6
  export * from './hooks';
7
+ export * from './themes';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -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,SAAS,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;AAEnD,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursors.d.ts","sourceRoot":"","sources":["../../../../src/styles/cursors.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,WAAW;;;CAAsD,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from './cursors';
1
2
  export * from './markdown';
2
3
  export * from './tokens';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/styles/index.ts"],"names":[],"mappings":"AAIA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/styles/index.ts"],"names":[],"mappings":"AAIA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC"}
@@ -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,WA8P1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,WAOvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAK3B,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,17 @@
1
+ import { Facet } from '@codemirror/state';
2
+ /**
3
+ * Converts indexes into the text document into stable peer-independent cursors.
4
+ *
5
+ * See:
6
+ * - https://automerge.org/automerge/api-docs/js/functions/next.getCursor.html
7
+ * - https://github.com/yjs/yjs?tab=readme-ov-file#relative-positions
8
+ *
9
+ * @param {assoc} number Negative values will associate the cursor with the previous character
10
+ * while positive - with the next one.
11
+ */
12
+ export interface CursorConverter {
13
+ toCursor(position: number, assoc?: -1 | 1 | undefined): string;
14
+ fromCursor(cursor: string): number;
15
+ }
16
+ export declare const CursorConverter: Facet<CursorConverter, CursorConverter>;
17
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../../src/util/cursor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACpC;AAOD,eAAO,MAAM,eAAe,yCAE1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './cursor';
2
+ export * from './util';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/util/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/util/util.ts"],"names":[],"mappings":"AAMA;;GAEG;AAEH,eAAO,MAAM,eAAe,kCAOR,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-editor",
3
- "version": "0.3.11-main.9bacd9f",
3
+ "version": "0.3.11-main.9c729f3",
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",
@@ -38,19 +38,20 @@
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.9bacd9f",
42
- "@dxos/automerge": "0.3.11-main.9bacd9f",
43
- "@dxos/display-name": "0.3.11-main.9bacd9f",
44
- "@dxos/echo-schema": "0.3.11-main.9bacd9f",
45
- "@dxos/protocols": "0.3.11-main.9bacd9f",
46
- "@dxos/debug": "0.3.11-main.9bacd9f",
47
- "@dxos/log": "0.3.11-main.9bacd9f",
48
- "@dxos/invariant": "0.3.11-main.9bacd9f",
49
- "@dxos/react-async": "0.3.11-main.9bacd9f",
50
- "@dxos/react-ui": "0.3.11-main.9bacd9f",
51
- "@dxos/react-ui-theme": "0.3.11-main.9bacd9f",
52
- "@dxos/util": "0.3.11-main.9bacd9f",
53
- "@dxos/text-model": "0.3.11-main.9bacd9f"
41
+ "@dxos/context": "0.3.11-main.9c729f3",
42
+ "@dxos/debug": "0.3.11-main.9c729f3",
43
+ "@dxos/automerge": "0.3.11-main.9c729f3",
44
+ "@dxos/display-name": "0.3.11-main.9c729f3",
45
+ "@dxos/echo-schema": "0.3.11-main.9c729f3",
46
+ "@dxos/async": "0.3.11-main.9c729f3",
47
+ "@dxos/log": "0.3.11-main.9c729f3",
48
+ "@dxos/invariant": "0.3.11-main.9c729f3",
49
+ "@dxos/protocols": "0.3.11-main.9c729f3",
50
+ "@dxos/react-async": "0.3.11-main.9c729f3",
51
+ "@dxos/react-ui": "0.3.11-main.9c729f3",
52
+ "@dxos/util": "0.3.11-main.9c729f3",
53
+ "@dxos/text-model": "0.3.11-main.9c729f3",
54
+ "@dxos/react-ui-theme": "0.3.11-main.9c729f3"
54
55
  },
55
56
  "devDependencies": {
56
57
  "@automerge/automerge-repo-network-broadcastchannel": "^1.0.19",
@@ -66,18 +67,18 @@
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.9bacd9f",
70
- "@dxos/echo-typegen": "0.3.11-main.9bacd9f",
71
- "@dxos/echo-signals": "0.3.11-main.9bacd9f",
72
- "@dxos/react-ui": "0.3.11-main.9bacd9f",
73
- "@dxos/react-client": "0.3.11-main.9bacd9f",
74
- "@dxos/storybook-utils": "0.3.11-main.9bacd9f"
70
+ "@dxos/config": "0.3.11-main.9c729f3",
71
+ "@dxos/echo-signals": "0.3.11-main.9c729f3",
72
+ "@dxos/echo-typegen": "0.3.11-main.9c729f3",
73
+ "@dxos/react-ui": "0.3.11-main.9c729f3",
74
+ "@dxos/react-client": "0.3.11-main.9c729f3",
75
+ "@dxos/storybook-utils": "0.3.11-main.9c729f3"
75
76
  },
76
77
  "peerDependencies": {
77
78
  "@phosphor-icons/react": "^2.0.5",
78
79
  "react": "^18.2.0",
79
80
  "react-dom": "^18.2.0",
80
- "@dxos/react-client": "0.3.11-main.9bacd9f"
81
+ "@dxos/react-client": "0.3.11-main.9c729f3"
81
82
  },
82
83
  "publishConfig": {
83
84
  "access": "public"
@@ -34,7 +34,7 @@ import {
34
34
  type CommentsOptions,
35
35
  type LinkOptions,
36
36
  mermaid,
37
- } from './extensions';
37
+ } from '../../extensions';
38
38
  import { type CommentRange, useTextModel } from '../../hooks';
39
39
 
40
40
  // Extensions:
@@ -12,8 +12,9 @@ import { fixedInsetFlexLayout, groupSurface, mx } from '@dxos/react-ui-theme';
12
12
  import { withTheme } from '@dxos/storybook-utils';
13
13
 
14
14
  import { defaultSlots, TextEditor, type TextEditorProps, type TextEditorRef, type TextEditorSlots } from './TextEditor';
15
- import { textTheme } from './themes';
15
+ import { listener } from '../../extensions';
16
16
  import { useTextModel } from '../../hooks';
17
+ import { textTheme } from '../../themes';
17
18
 
18
19
  const initialText = [
19
20
  '# TextEditor',
@@ -67,6 +68,18 @@ export const Default = {
67
68
  ),
68
69
  };
69
70
 
71
+ export const Listener = {
72
+ render: () => (
73
+ <Story
74
+ slots={defaultsDeep(
75
+ { editor: { theme: textTheme, placeholder: 'Enter text...' } } satisfies TextEditorSlots,
76
+ defaultSlots,
77
+ )}
78
+ extensions={[listener({ onChange: (text) => console.log(text) })]}
79
+ />
80
+ ),
81
+ };
82
+
70
83
  export const Text = {
71
84
  render: () => (
72
85
  <Story
@@ -21,10 +21,10 @@ import { generateName } from '@dxos/display-name';
21
21
  import { useThemeContext } from '@dxos/react-ui';
22
22
  import { getColorForValue, inputSurface, mx } from '@dxos/react-ui-theme';
23
23
 
24
- import { basicBundle, markdownBundle, setCommentRange } from './extensions';
25
- import { defaultTheme, markdownTheme, textTheme } from './themes';
24
+ import { basicBundle, markdownBundle, setCommentRange } from '../../extensions';
26
25
  import { type CommentRange, type EditorModel } from '../../hooks';
27
26
  import { type ThemeStyles } from '../../styles';
27
+ import { defaultTheme, markdownTheme, textTheme } from '../../themes';
28
28
 
29
29
  export const EditorModes = ['default', 'vim'] as const;
30
30
  export type EditorMode = (typeof EditorModes)[number];
@@ -77,7 +77,7 @@ export const BaseTextEditor = forwardRef<TextEditorRef, TextEditorProps>(
77
77
  >();
78
78
  useImperativeHandle(forwardedRef, () => ({ root, state, view }), [view, state, root]);
79
79
 
80
- // TODO(burdon): Factor out?
80
+ // TODO(burdon): Factor out as extension.
81
81
  const { awareness, peer } = model;
82
82
  useEffect(() => {
83
83
  if (awareness && peer) {
@@ -2,19 +2,29 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@preact/signals-react'; // Register react integration
5
+ import '@dxosTheme';
6
+
6
7
  import { BroadcastChannelNetworkAdapter } from '@automerge/automerge-repo-network-broadcastchannel';
7
8
  import { EditorView } from '@codemirror/view';
9
+ import '@preact/signals-react'; // Register react integration
8
10
  import { basicSetup } from 'codemirror';
9
11
  import get from 'lodash.get';
10
12
  import React, { useEffect, useRef, useState } from 'react';
11
13
 
12
- // TODO(burdon): Why separate imports?
13
14
  import { type Prop } from '@dxos/automerge/automerge';
14
- import { type DocHandle, Repo } from '@dxos/automerge/automerge-repo';
15
+ import { Repo, type DocHandle } from '@dxos/automerge/automerge-repo';
16
+ import { Filter, setGlobalAutomergePreference } from '@dxos/echo-schema';
17
+ import { type PublicKey } from '@dxos/keys';
18
+ import { Expando, TextObject, useSpace } from '@dxos/react-client/echo';
19
+ import { useIdentity } from '@dxos/react-client/halo';
20
+ import { ClientRepeater } from '@dxos/react-client/testing';
21
+ import { withTheme } from '@dxos/storybook-utils';
15
22
 
16
- import { type IDocHandle } from './handle';
17
- import { automergePlugin } from './plugin';
23
+ import { MarkdownEditor } from './TextEditor';
24
+ import { type IDocHandle, automerge, awareness } from '../../extensions';
25
+ import { useTextModel } from '../../hooks';
26
+
27
+ // TODO(burdon): Move to components.
18
28
 
19
29
  type EditorProps = {
20
30
  handle: IDocHandle;
@@ -28,7 +38,7 @@ const Editor = ({ handle, path }: EditorProps) => {
28
38
  useEffect(() => {
29
39
  const view = (editorRoot.current = new EditorView({
30
40
  doc: get(handle.docSync()!, path),
31
- extensions: [basicSetup, automergePlugin(handle, path)],
41
+ extensions: [basicSetup, automerge({ handle, path }), awareness()],
32
42
  parent: containerRef.current as any,
33
43
  }));
34
44
 
@@ -89,3 +99,53 @@ export default {
89
99
  };
90
100
 
91
101
  export const Default = {};
102
+
103
+ const EchoStory = ({ id, spaceKey }: { id: number; spaceKey: PublicKey }) => {
104
+ const identity = useIdentity();
105
+ const space = useSpace(spaceKey);
106
+ // TODO(dmaretskyi): useQuery doesn't work.
107
+ const [obj] = space?.db.query(Filter.from({ type: 'test' })).objects ?? [];
108
+
109
+ const model = useTextModel({
110
+ text: obj?.content,
111
+ identity,
112
+ space,
113
+ });
114
+
115
+ if (!model) {
116
+ return null;
117
+ }
118
+
119
+ return (
120
+ // <div className={mx(fixedInsetFlexLayout, groupSurface)}>
121
+ <div className='flex justify-center overflow-y-scroll'>
122
+ <div className='flex flex-col w-[800px] py-16'>
123
+ <MarkdownEditor model={model} />
124
+ <div className='flex shrink-0 h-[300px]'></div>
125
+ </div>
126
+ </div>
127
+ // </div>
128
+ );
129
+ };
130
+
131
+ export const WithEcho = {
132
+ render: () => {
133
+ setGlobalAutomergePreference(true);
134
+ return (
135
+ <ClientRepeater
136
+ count={2}
137
+ createSpace
138
+ onCreateSpace={async (space) => {
139
+ space.db.add(
140
+ new Expando({
141
+ type: 'test',
142
+ content: new TextObject('Hello world!'),
143
+ }),
144
+ );
145
+ }}
146
+ Component={EchoStory}
147
+ />
148
+ );
149
+ },
150
+ decorators: [withTheme],
151
+ };
@@ -17,7 +17,8 @@ import { type Identity } from '@dxos/react-client/halo';
17
17
  import { joinCommonSpace, TestBuilder, textGenerator } from '@dxos/react-client/testing';
18
18
  import { YText } from '@dxos/text-model';
19
19
 
20
- import { cursorColor, SpaceAwarenessProvider } from '../../hooks';
20
+ import { YAwarenessProvider } from '../../hooks';
21
+ import { cursorColor } from '../../styles';
21
22
  import { EditorDocument, types as schema } from '../../testing';
22
23
 
23
24
  export default {
@@ -35,7 +36,7 @@ const updateEditor = async (id: number, editor: HTMLDivElement, identity: Identi
35
36
  return;
36
37
  }
37
38
 
38
- const { awareness } = new SpaceAwarenessProvider({ space, doc, channel: `yjs.awareness.${text.id}` });
39
+ const { awareness } = new YAwarenessProvider({ space, doc, channel: `yjs.awareness.${text.id}` });
39
40
  awareness.setLocalStateField('user', {
40
41
  name: identity.profile?.displayName ?? generateName(identity.identityKey.toHex()),
41
42
  // TODO(wittjosiah): Pick colours from theme based on identity key.
@@ -5,7 +5,4 @@
5
5
  export { tags } from '@lezer/highlight';
6
6
  export { type Extension } from '@codemirror/state';
7
7
 
8
- export * from './extensions';
9
- export * from './themes';
10
-
11
8
  export * from './TextEditor';
@@ -12,7 +12,7 @@ import { ClientRepeater, textGenerator, useDataGenerator } from '@dxos/react-cli
12
12
  import { useId, Input } from '@dxos/react-ui';
13
13
  import { withTheme } from '@dxos/storybook-utils';
14
14
 
15
- import { MarkdownEditor } from '../../components';
15
+ import { MarkdownEditor } from './TextEditor';
16
16
  import { Replicator, useYjsModel } from '../../testing';
17
17
 
18
18
  export default {