@dxos/react-ui-editor 0.3.11-main.a996413 → 0.3.11-main.b00882f

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 (166) hide show
  1. package/dist/lib/browser/index.mjs +2010 -1505
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +16 -13
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +20 -17
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +6 -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/{hooks/yjs → components/TextEditor}/yjs.stories.d.ts +1 -1
  16. package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +1 -0
  17. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
  18. package/dist/types/src/extensions/automerge/automerge.d.ts +9 -0
  19. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -0
  20. package/dist/types/src/extensions/automerge/cursor.d.ts +5 -0
  21. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -0
  22. package/dist/types/src/extensions/automerge/defs.d.ts +24 -0
  23. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -0
  24. package/dist/types/src/extensions/automerge/index.d.ts +3 -0
  25. package/dist/types/src/extensions/automerge/index.d.ts.map +1 -0
  26. package/dist/types/src/extensions/automerge/semaphore.d.ts +14 -0
  27. package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -0
  28. package/dist/types/src/extensions/automerge/update-automerge.d.ts +5 -0
  29. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -0
  30. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +1 -0
  31. package/dist/types/src/extensions/awareness.d.ts +48 -0
  32. package/dist/types/src/extensions/awareness.d.ts.map +1 -0
  33. package/dist/types/src/extensions/basic.d.ts +4 -5
  34. package/dist/types/src/extensions/basic.d.ts.map +1 -1
  35. package/dist/types/src/extensions/code.d.ts.map +1 -1
  36. package/dist/types/src/extensions/comments.d.ts +32 -19
  37. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  38. package/dist/types/src/extensions/cursor.d.ts +25 -0
  39. package/dist/types/src/extensions/cursor.d.ts.map +1 -0
  40. package/dist/types/src/extensions/hr.d.ts.map +1 -1
  41. package/dist/types/src/extensions/image.d.ts.map +1 -1
  42. package/dist/types/src/extensions/index.d.ts +5 -1
  43. package/dist/types/src/extensions/index.d.ts.map +1 -1
  44. package/dist/types/src/extensions/link.d.ts.map +1 -1
  45. package/dist/types/src/extensions/markdown/bundle.d.ts +2 -5
  46. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  47. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  48. package/dist/types/src/extensions/mention.d.ts.map +1 -1
  49. package/dist/types/src/extensions/outliner.d.ts +4 -0
  50. package/dist/types/src/extensions/outliner.d.ts.map +1 -0
  51. package/dist/types/src/extensions/tasklist.d.ts.map +1 -1
  52. package/dist/types/src/extensions/yjs/cursor.d.ts +4 -0
  53. package/dist/types/src/extensions/yjs/cursor.d.ts.map +1 -0
  54. package/dist/types/src/extensions/yjs/index.d.ts +2 -0
  55. package/dist/types/src/extensions/yjs/index.d.ts.map +1 -0
  56. package/dist/types/src/extensions/yjs/yjs.d.ts +4 -0
  57. package/dist/types/src/extensions/yjs/yjs.d.ts.map +1 -0
  58. package/dist/types/src/extensions/yjs/yjs.test.d.ts.map +1 -0
  59. package/dist/types/src/hooks/automerge.d.ts +4 -0
  60. package/dist/types/src/hooks/automerge.d.ts.map +1 -0
  61. package/dist/types/src/hooks/awareness-provider.d.ts +28 -0
  62. package/dist/types/src/hooks/awareness-provider.d.ts.map +1 -0
  63. package/dist/types/src/hooks/defs.d.ts +28 -0
  64. package/dist/types/src/hooks/defs.d.ts.map +1 -0
  65. package/dist/types/src/hooks/index.d.ts +5 -1
  66. package/dist/types/src/hooks/index.d.ts.map +1 -1
  67. package/dist/types/src/hooks/useTextEditor.d.ts +17 -0
  68. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -0
  69. package/dist/types/src/hooks/useTextModel.d.ts +2 -31
  70. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  71. package/dist/types/src/hooks/{yjs/space-provider.d.ts → yjs.d.ts} +9 -8
  72. package/dist/types/src/hooks/yjs.d.ts.map +1 -0
  73. package/dist/types/src/index.d.ts +3 -0
  74. package/dist/types/src/index.d.ts.map +1 -1
  75. package/dist/types/src/styles/cursors.d.ts.map +1 -0
  76. package/dist/types/src/styles/index.d.ts +1 -0
  77. package/dist/types/src/styles/index.d.ts.map +1 -1
  78. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  79. package/dist/types/src/styles/tokens.d.ts +1 -0
  80. package/dist/types/src/styles/tokens.d.ts.map +1 -1
  81. package/dist/types/src/testing/replicator.d.ts +2 -2
  82. package/dist/types/src/testing/replicator.d.ts.map +1 -1
  83. package/dist/types/src/themes/default.d.ts.map +1 -1
  84. package/dist/types/src/util.d.ts +7 -0
  85. package/dist/types/src/util.d.ts.map +1 -0
  86. package/package.json +32 -30
  87. package/src/components/TextEditor/MarkdownEditor.stories.tsx +77 -80
  88. package/src/components/TextEditor/TextEditor.stories.tsx +13 -34
  89. package/src/components/TextEditor/TextEditor.tsx +125 -93
  90. package/src/{hooks/automerge → components/TextEditor}/automerge.stories.tsx +66 -6
  91. package/src/components/TextEditor/codemirror.stories.ts +3 -2
  92. package/src/components/TextEditor/comments.stories.tsx +357 -0
  93. package/src/{hooks/yjs → components/TextEditor}/yjs.stories.tsx +1 -1
  94. package/src/extensions/autocomplete.ts +23 -19
  95. package/src/extensions/automerge/automerge.ts +88 -0
  96. package/src/extensions/automerge/cursor.ts +52 -0
  97. package/src/extensions/automerge/defs.ts +41 -0
  98. package/src/extensions/automerge/index.ts +6 -0
  99. package/src/{hooks → extensions}/automerge/semaphore.ts +34 -29
  100. package/src/{hooks → extensions}/automerge/update-automerge.ts +5 -6
  101. package/src/{hooks → extensions}/automerge/update-codemirror.ts +13 -5
  102. package/src/extensions/awareness.ts +327 -0
  103. package/src/extensions/basic.ts +22 -17
  104. package/src/extensions/code.ts +28 -23
  105. package/src/extensions/comments.ts +252 -229
  106. package/src/extensions/cursor.ts +50 -0
  107. package/src/extensions/hr.ts +50 -52
  108. package/src/extensions/image.ts +40 -22
  109. package/src/extensions/index.ts +5 -1
  110. package/src/extensions/link.ts +86 -88
  111. package/src/extensions/markdown/bundle.ts +18 -24
  112. package/src/extensions/markdown/highlight.ts +3 -12
  113. package/src/extensions/mention.ts +9 -2
  114. package/src/extensions/outliner.ts +12 -0
  115. package/src/extensions/table.ts +10 -4
  116. package/src/extensions/tasklist.ts +78 -88
  117. package/src/extensions/yjs/cursor.ts +22 -0
  118. package/src/extensions/yjs/index.ts +5 -0
  119. package/src/{hooks → extensions}/yjs/yjs.test.ts +2 -26
  120. package/src/extensions/yjs/yjs.ts +16 -0
  121. package/src/hooks/automerge.ts +53 -0
  122. package/src/hooks/awareness-provider.ts +120 -0
  123. package/src/hooks/defs.ts +47 -0
  124. package/src/hooks/index.ts +6 -1
  125. package/src/hooks/useTextEditor.ts +29 -0
  126. package/src/hooks/useTextModel.ts +9 -129
  127. package/src/hooks/{yjs/space-provider.ts → yjs.ts} +50 -19
  128. package/src/index.ts +3 -0
  129. package/src/styles/index.ts +1 -0
  130. package/src/styles/markdown.ts +0 -2
  131. package/src/styles/tokens.ts +3 -0
  132. package/src/testing/replicator.ts +10 -15
  133. package/src/themes/default.ts +51 -78
  134. package/src/util.ts +41 -0
  135. package/dist/types/src/extensions/mermaid.d.ts +0 -3
  136. package/dist/types/src/extensions/mermaid.d.ts.map +0 -1
  137. package/dist/types/src/extensions/util.d.ts +0 -5
  138. package/dist/types/src/extensions/util.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 +0 -19
  147. package/dist/types/src/hooks/automerge/semaphore.d.ts.map +0 -1
  148. package/dist/types/src/hooks/automerge/update-automerge.d.ts +0 -6
  149. package/dist/types/src/hooks/automerge/update-automerge.d.ts.map +0 -1
  150. package/dist/types/src/hooks/automerge/update-codemirror.d.ts.map +0 -1
  151. package/dist/types/src/hooks/yjs/cursors.d.ts.map +0 -1
  152. package/dist/types/src/hooks/yjs/index.d.ts +0 -3
  153. package/dist/types/src/hooks/yjs/index.d.ts.map +0 -1
  154. package/dist/types/src/hooks/yjs/space-provider.d.ts.map +0 -1
  155. package/dist/types/src/hooks/yjs/yjs.stories.d.ts.map +0 -1
  156. package/dist/types/src/hooks/yjs/yjs.test.d.ts.map +0 -1
  157. package/src/extensions/mermaid.ts +0 -11
  158. package/src/extensions/util.ts +0 -18
  159. package/src/hooks/automerge/handle.ts +0 -14
  160. package/src/hooks/automerge/index.ts +0 -6
  161. package/src/hooks/automerge/plugin.ts +0 -132
  162. package/src/hooks/yjs/index.ts +0 -6
  163. /package/dist/types/src/{hooks → extensions}/automerge/update-codemirror.d.ts +0 -0
  164. /package/dist/types/src/{hooks → extensions}/yjs/yjs.test.d.ts +0 -0
  165. /package/dist/types/src/{hooks/yjs → styles}/cursors.d.ts +0 -0
  166. /package/src/{hooks/yjs → styles}/cursors.ts +0 -0
package/src/util.ts ADDED
@@ -0,0 +1,41 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import type { Transaction } from '@codemirror/state';
6
+
7
+ import { log } from '@dxos/log';
8
+
9
+ /**
10
+ * CodeMirror callbacks swallow errors so wrap handlers.
11
+ */
12
+ // TODO(burdon): EditorView.exceptionSink should catch errors.
13
+ export const callbackWrapper = <T extends Function>(fn: T): T =>
14
+ ((...args: any[]) => {
15
+ try {
16
+ return fn(...args);
17
+ } catch (err) {
18
+ log.catch(err);
19
+ }
20
+ }) as unknown as T;
21
+
22
+ export const logChanges = (trs: readonly Transaction[]) => {
23
+ const changes = trs
24
+ .flatMap((tr) => {
25
+ if (tr.changes.empty) {
26
+ return undefined;
27
+ }
28
+
29
+ const changes: any[] = [];
30
+ tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) =>
31
+ changes.push(JSON.stringify({ fromA, toA, fromB, toB, inserted: inserted.toString() })),
32
+ );
33
+
34
+ return changes;
35
+ })
36
+ .filter(Boolean);
37
+
38
+ if (changes.length) {
39
+ console.log('changes', changes);
40
+ }
41
+ };
@@ -1,3 +0,0 @@
1
- import { type Extension } from '@codemirror/state';
2
- export declare const mermaid: () => Extension;
3
- //# sourceMappingURL=mermaid.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../../../src/extensions/mermaid.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD,eAAO,MAAM,OAAO,QAAO,SAE1B,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * CodeMirror callbacks swallow errors so wrap handlers.
3
- */
4
- export declare const callbackWrapper: <T extends Function>(fn: T) => T;
5
- //# sourceMappingURL=util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/extensions/util.ts"],"names":[],"mappings":"AAMA;;GAEG;AAEH,eAAO,MAAM,eAAe,kCAOR,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"automerge.stories.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/automerge/automerge.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,uBAAuB,CAAC;AAQ/B,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAGtD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,IAAI,EAAE,CAAC;CACd,CAAC;;;;;;AA+DF,wBAIE;AAEF,eAAO,MAAM,OAAO,IAAK,CAAC"}
@@ -1,9 +0,0 @@
1
- import type * as A from '@dxos/automerge/automerge';
2
- export type IDocHandle<T = any> = {
3
- docSync(): A.Doc<T> | undefined;
4
- change(callback: A.ChangeFn<T>, options?: A.ChangeOptions<T>): void;
5
- changeAt(heads: A.Heads, callback: A.ChangeFn<T>, options?: A.ChangeOptions<T>): string[] | undefined;
6
- addListener(event: 'change', listener: () => void): void;
7
- removeListener(event: 'change', listener: () => void): void;
8
- };
9
- //# sourceMappingURL=handle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/automerge/handle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,CAAC,MAAM,2BAA2B,CAAC;AAEpD,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,GAAG,IAAI;IAChC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IAEtG,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACzD,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAC7D,CAAC"}
@@ -1,3 +0,0 @@
1
- export { type IDocHandle } from './handle';
2
- export { automergePlugin, type AutomergePlugin } from './plugin';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/automerge/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -1,26 +0,0 @@
1
- import { type EditorState, type Extension, StateEffect, StateField, type Transaction, type TransactionSpec } from '@codemirror/state';
2
- import * as automerge from '@dxos/automerge/automerge';
3
- import { type Heads, type Prop } from '@dxos/automerge/automerge';
4
- import { type IDocHandle } from './handle';
5
- export type Value = {
6
- lastHeads: Heads;
7
- path: Prop[];
8
- unreconciledTransactions: Transaction[];
9
- };
10
- type UpdateHeads = {
11
- newHeads: Heads;
12
- };
13
- export declare const effectType: import("@codemirror/state").StateEffectType<UpdateHeads>;
14
- export declare const updateHeads: (newHeads: automerge.next.Heads) => StateEffect<UpdateHeads>;
15
- export declare const getLastHeads: (state: EditorState, field: Field) => automerge.next.Heads;
16
- export declare const getPath: (state: EditorState, field: Field) => Prop[];
17
- export type Field = StateField<Value>;
18
- export type AutomergePlugin = {
19
- extension: Extension;
20
- };
21
- export declare const automergePlugin: (handle: IDocHandle, path: Prop[]) => AutomergePlugin;
22
- export declare const reconcileAnnotationType: import("@codemirror/state").AnnotationType<unknown>;
23
- export declare const isReconcileTx: (tr: Transaction) => boolean;
24
- export declare const makeReconcile: (tr: TransactionSpec) => void;
25
- export {};
26
- //# sourceMappingURL=plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/automerge/plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,WAAW,EACX,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,EAAE,KAAK,CAAC;IACjB,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,wBAAwB,EAAE,WAAW,EAAE,CAAC;CACzC,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,UAAU,0DAAsC,CAAC;AAE9D,eAAO,MAAM,WAAW,sCAAsB,YAAY,WAAW,CAAgC,CAAC;AAEtG,eAAO,MAAM,YAAY,UAAW,WAAW,uCAAsD,CAAC;AAEtG,eAAO,MAAM,OAAO,UAAW,WAAW,mBAAiB,IAAI,EAA6B,CAAC;AAE7F,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAMtC,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,UAAU,QAAQ,IAAI,EAAE,KAAG,eA6DlE,CAAC;AAEF,eAAO,MAAM,uBAAuB,qDAA+B,CAAC;AAEpE,eAAO,MAAM,aAAa,OAAQ,WAAW,KAAG,OAAmD,CAAC;AAEpG,eAAO,MAAM,aAAa,OAAQ,eAAe,SAchD,CAAC"}
@@ -1,19 +0,0 @@
1
- import { type EditorView } from '@codemirror/view';
2
- import { next as automerge } from '@dxos/automerge/automerge';
3
- import { type IDocHandle } from './handle';
4
- import { type Field } from './plugin';
5
- type Doc<T> = automerge.Doc<T>;
6
- type Heads = automerge.Heads;
7
- type ChangeFn = (atHeads: Heads, change: (doc: Doc<unknown>) => void) => Heads | undefined;
8
- /**
9
- * TODO(burdon): Comment.
10
- */
11
- export declare class PatchSemaphore {
12
- _field: Field;
13
- _inReconcile: boolean;
14
- _queue: Array<ChangeFn>;
15
- constructor(field?: Field);
16
- reconcile: (handle: IDocHandle, view: EditorView) => void;
17
- }
18
- export {};
19
- //# sourceMappingURL=semaphore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semaphore.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/automerge/semaphore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,KAAK,KAAK,EAA8E,MAAM,UAAU,CAAC;AAIlH,KAAK,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAK,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAE7B,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG,SAAS,CAAC;AAE3F;;GAEG;AACH,qBAAa,cAAc;IACzB,MAAM,EAAG,KAAK,CAAC;IACf,YAAY,UAAS;IACrB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAM;gBAEjB,KAAK,CAAC,EAAE,KAAK;IAMzB,SAAS,WAAY,UAAU,QAAQ,UAAU,UA0C/C;CACH"}
@@ -1,6 +0,0 @@
1
- import { type EditorState, type Transaction } from '@codemirror/state';
2
- import { type Heads } from '@dxos/automerge/automerge';
3
- import { type IDocHandle } from './handle';
4
- import { type Field } from './plugin';
5
- export declare const updateAutomerge: (field: Field, handle: IDocHandle, transactions: Transaction[], state: EditorState) => Heads | undefined;
6
- //# sourceMappingURL=update-automerge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-automerge.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/automerge/update-automerge.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,WAAW,EAAa,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElF,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,eAAO,MAAM,eAAe,yBAElB,UAAU,gBACJ,WAAW,EAAE,SACpB,WAAW,KACjB,KAAK,GAAG,SAyBV,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-codemirror.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/automerge/update-codemirror.ts"],"names":[],"mappings":"AAMA,OAAO,EAA8B,KAAK,eAAe,EAAoB,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,IAAI,EAGV,MAAM,2BAA2B,CAAC;AAInC,eAAO,MAAM,gBAAgB,SAAU,UAAU,aAAa,eAAe,UAAU,IAAI,EAAE,WAAW,KAAK,EAAE,SAiB9G,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursors.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/yjs/cursors.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,WAAW;;;CAAsD,CAAC"}
@@ -1,3 +0,0 @@
1
- export * from './cursors';
2
- export * from './space-provider';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/yjs/index.ts"],"names":[],"mappings":"AAIA,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"space-provider.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/yjs/space-provider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAG/B,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGrD,KAAK,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAO7C;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU,CAAC,GAAG,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE;IA+BlH,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,mBAAmB;CAG5B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"yjs.stories.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/yjs/yjs.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,YAAY,CAAC;AAEpB,OAAO,KAAmB,MAAM,OAAO,CAAC;;;;;;AAWxC,wBAIE;AA+BF,eAAO,MAAM,OAAO;;CAGnB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"yjs.test.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/yjs/yjs.test.ts"],"names":[],"mappings":""}
@@ -1,11 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type Extension } from '@codemirror/state';
6
-
7
- // TODO(burdon): How will this interact with the code extension?
8
- // TODO(burdon): Move to mermaid-plugin (which should contribute this extension).
9
- export const mermaid = (): Extension => {
10
- return [];
11
- };
@@ -1,18 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { log } from '@dxos/log';
6
-
7
- /**
8
- * CodeMirror callbacks swallow errors so wrap handlers.
9
- */
10
- // TODO(burdon): Figure out how to systematize this.
11
- export const callbackWrapper = <T extends Function>(fn: T): T =>
12
- ((...args: any[]) => {
13
- try {
14
- return fn(...args);
15
- } catch (error) {
16
- log.catch(error);
17
- }
18
- }) as unknown as T;
@@ -1,14 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import type * as A from '@dxos/automerge/automerge';
6
-
7
- export type IDocHandle<T = any> = {
8
- docSync(): A.Doc<T> | undefined;
9
- change(callback: A.ChangeFn<T>, options?: A.ChangeOptions<T>): void;
10
- changeAt(heads: A.Heads, callback: A.ChangeFn<T>, options?: A.ChangeOptions<T>): string[] | undefined;
11
-
12
- addListener(event: 'change', listener: () => void): void;
13
- removeListener(event: 'change', listener: () => void): void;
14
- };
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export { type IDocHandle } from './handle';
6
- export { automergePlugin, type AutomergePlugin } from './plugin';
@@ -1,132 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import {
6
- Annotation,
7
- type EditorState,
8
- type Extension,
9
- Facet,
10
- StateEffect,
11
- StateField,
12
- type Transaction,
13
- type TransactionSpec,
14
- } from '@codemirror/state';
15
- import { ViewPlugin, type EditorView, type PluginValue, type ViewUpdate } from '@codemirror/view';
16
-
17
- import * as automerge from '@dxos/automerge/automerge';
18
- import { type Heads, type Prop } from '@dxos/automerge/automerge';
19
-
20
- import { type IDocHandle } from './handle';
21
- import { PatchSemaphore } from './semaphore';
22
-
23
- export type Value = {
24
- lastHeads: Heads;
25
- path: Prop[];
26
- unreconciledTransactions: Transaction[];
27
- };
28
-
29
- type UpdateHeads = {
30
- newHeads: Heads;
31
- };
32
-
33
- export const effectType = StateEffect.define<UpdateHeads>({});
34
-
35
- export const updateHeads = (newHeads: Heads): StateEffect<UpdateHeads> => effectType.of({ newHeads });
36
-
37
- export const getLastHeads = (state: EditorState, field: Field): Heads => state.field(field).lastHeads;
38
-
39
- export const getPath = (state: EditorState, field: Field): Prop[] => state.field(field).path;
40
-
41
- export type Field = StateField<Value>;
42
-
43
- const semaphoreFacet = Facet.define<PatchSemaphore, PatchSemaphore>({
44
- combine: (values) => values.at(-1)!, // Take last.
45
- });
46
-
47
- export type AutomergePlugin = {
48
- extension: Extension;
49
- };
50
-
51
- export const automergePlugin = (handle: IDocHandle, path: Prop[]): AutomergePlugin => {
52
- const stateField: StateField<Value> = StateField.define({
53
- create: () => ({
54
- lastHeads: automerge.getHeads(handle.docSync()!),
55
- unreconciledTransactions: [],
56
- path: path.slice(),
57
- }),
58
- update: (value: Value, tr: Transaction) => {
59
- const result: Value = {
60
- lastHeads: value.lastHeads,
61
- unreconciledTransactions: value.unreconciledTransactions.slice(),
62
- path: path.slice(),
63
- };
64
- let clearUnreconciled = false;
65
- for (const effect of tr.effects) {
66
- if (effect.is(effectType)) {
67
- result.lastHeads = effect.value.newHeads;
68
- clearUnreconciled = true;
69
- }
70
- }
71
- if (clearUnreconciled) {
72
- result.unreconciledTransactions = [];
73
- } else {
74
- if (!isReconcileTx(tr)) {
75
- result.unreconciledTransactions.push(tr);
76
- }
77
- }
78
- return result;
79
- },
80
- });
81
-
82
- const semaphore = new PatchSemaphore(stateField);
83
-
84
- const viewPlugin = ViewPlugin.fromClass(
85
- class AutomergeCodemirrorViewPlugin implements PluginValue {
86
- constructor(private readonly _view: EditorView) {
87
- handle.addListener('change', this._handleChange);
88
- }
89
-
90
- update(update: ViewUpdate) {
91
- if (update.transactions.length > 0 && update.transactions.some((tr) => !isReconcileTx(tr))) {
92
- // TODO(burdon): This is a hack to ensure that the view is updated after the transaction is applied.
93
- queueMicrotask(() => {
94
- this._view.state.facet(semaphoreFacet).reconcile(handle, this._view);
95
- });
96
- }
97
- }
98
-
99
- destroy() {
100
- handle.addListener('change', this._handleChange);
101
- }
102
-
103
- private _handleChange = () => {
104
- this._view.state.facet(semaphoreFacet).reconcile(handle, this._view);
105
- };
106
- },
107
- );
108
-
109
- return {
110
- extension: [stateField, semaphoreFacet.of(semaphore), viewPlugin],
111
- };
112
- };
113
-
114
- export const reconcileAnnotationType = Annotation.define<unknown>();
115
-
116
- export const isReconcileTx = (tr: Transaction): boolean => !!tr.annotation(reconcileAnnotationType);
117
-
118
- export const makeReconcile = (tr: TransactionSpec) => {
119
- if (tr.annotations != null) {
120
- if (tr.annotations instanceof Array) {
121
- tr.annotations = [...tr.annotations, reconcileAnnotationType.of({})];
122
- } else {
123
- tr.annotations = [tr.annotations, reconcileAnnotationType.of({})];
124
- }
125
- } else {
126
- tr.annotations = [reconcileAnnotationType.of({})];
127
- }
128
- // return {
129
- // ...tr,
130
- // annotations: reconcileAnnotationType.of({})
131
- // }
132
- };
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './cursors';
6
- export * from './space-provider';
File without changes