@kerebron/extension-yjs 0.6.7 → 0.7.0

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 (90) hide show
  1. package/esm/ExtensionYjs.d.ts +3 -11
  2. package/esm/ExtensionYjs.d.ts.map +1 -1
  3. package/esm/ExtensionYjs.js +38 -45
  4. package/esm/ExtensionYjs.js.map +1 -1
  5. package/esm/WebsocketProvider.d.ts +69 -0
  6. package/esm/WebsocketProvider.d.ts.map +1 -0
  7. package/esm/WebsocketProvider.js +354 -0
  8. package/esm/WebsocketProvider.js.map +1 -0
  9. package/esm/YjsProvider.d.ts +48 -0
  10. package/esm/YjsProvider.d.ts.map +1 -0
  11. package/esm/YjsProvider.js +12 -0
  12. package/esm/YjsProvider.js.map +1 -0
  13. package/esm/_dnt.shims.d.ts +2 -0
  14. package/esm/_dnt.shims.d.ts.map +1 -0
  15. package/esm/_dnt.shims.js +58 -0
  16. package/esm/_dnt.shims.js.map +1 -0
  17. package/esm/binding/BindingMetadata.d.ts +6 -0
  18. package/esm/binding/BindingMetadata.d.ts.map +1 -0
  19. package/esm/binding/BindingMetadata.js +2 -0
  20. package/esm/binding/BindingMetadata.js.map +1 -0
  21. package/esm/binding/PmYjsBinding.d.ts +41 -0
  22. package/esm/binding/PmYjsBinding.d.ts.map +1 -0
  23. package/esm/binding/PmYjsBinding.js +190 -0
  24. package/esm/binding/PmYjsBinding.js.map +1 -0
  25. package/esm/binding/convertUtils.d.ts +48 -0
  26. package/esm/binding/convertUtils.d.ts.map +1 -0
  27. package/esm/binding/convertUtils.js +80 -0
  28. package/esm/binding/convertUtils.js.map +1 -0
  29. package/esm/{createNodeFromYElement.d.ts → binding/createNodeFromYElement.d.ts} +1 -1
  30. package/esm/binding/createNodeFromYElement.d.ts.map +1 -0
  31. package/esm/{createNodeFromYElement.js → binding/createNodeFromYElement.js} +2 -2
  32. package/esm/binding/createNodeFromYElement.js.map +1 -0
  33. package/esm/{updateYFragment.d.ts → binding/updateYFragment.d.ts} +3 -3
  34. package/esm/binding/updateYFragment.d.ts.map +1 -0
  35. package/esm/{updateYFragment.js → binding/updateYFragment.js} +10 -7
  36. package/esm/binding/updateYFragment.js.map +1 -0
  37. package/esm/lib.d.ts +1 -7
  38. package/esm/lib.d.ts.map +1 -1
  39. package/esm/lib.js +1 -200
  40. package/esm/lib.js.map +1 -1
  41. package/esm/position.d.ts +8 -0
  42. package/esm/position.d.ts.map +1 -0
  43. package/esm/position.js +165 -0
  44. package/esm/position.js.map +1 -0
  45. package/esm/ui/selection.d.ts +29 -0
  46. package/esm/ui/selection.d.ts.map +1 -0
  47. package/esm/ui/selection.js +129 -0
  48. package/esm/ui/selection.js.map +1 -0
  49. package/esm/yPositionPlugin.d.ts +6 -1
  50. package/esm/yPositionPlugin.d.ts.map +1 -1
  51. package/esm/yPositionPlugin.js +91 -50
  52. package/esm/yPositionPlugin.js.map +1 -1
  53. package/esm/ySyncPlugin.d.ts +5 -22
  54. package/esm/ySyncPlugin.d.ts.map +1 -1
  55. package/esm/ySyncPlugin.js +54 -116
  56. package/esm/ySyncPlugin.js.map +1 -1
  57. package/esm/yUndoPlugin.d.ts +11 -10
  58. package/esm/yUndoPlugin.d.ts.map +1 -1
  59. package/esm/yUndoPlugin.js +90 -52
  60. package/esm/yUndoPlugin.js.map +1 -1
  61. package/package.json +9 -6
  62. package/src/ExtensionYjs.ts +55 -67
  63. package/src/WebsocketProvider.ts +516 -0
  64. package/src/YjsProvider.ts +75 -0
  65. package/src/_dnt.shims.ts +60 -0
  66. package/src/binding/BindingMetadata.ts +6 -0
  67. package/src/binding/PmYjsBinding.ts +300 -0
  68. package/src/binding/convertUtils.ts +124 -0
  69. package/src/{createNodeFromYElement.ts → binding/createNodeFromYElement.ts} +3 -3
  70. package/src/{updateYFragment.ts → binding/updateYFragment.ts} +15 -8
  71. package/src/lib.ts +4 -230
  72. package/src/position.ts +191 -0
  73. package/src/ui/selection.ts +216 -0
  74. package/src/yPositionPlugin.ts +122 -74
  75. package/src/ySyncPlugin.ts +87 -170
  76. package/src/yUndoPlugin.ts +113 -62
  77. package/esm/ProsemirrorBinding.d.ts +0 -60
  78. package/esm/ProsemirrorBinding.d.ts.map +0 -1
  79. package/esm/ProsemirrorBinding.js +0 -405
  80. package/esm/ProsemirrorBinding.js.map +0 -1
  81. package/esm/createNodeFromYElement.d.ts.map +0 -1
  82. package/esm/createNodeFromYElement.js.map +0 -1
  83. package/esm/updateYFragment.d.ts.map +0 -1
  84. package/esm/updateYFragment.js.map +0 -1
  85. package/esm/userColors.d.ts +0 -5
  86. package/esm/userColors.d.ts.map +0 -1
  87. package/esm/userColors.js +0 -11
  88. package/esm/userColors.js.map +0 -1
  89. package/src/ProsemirrorBinding.ts +0 -607
  90. package/src/userColors.ts +0 -10
@@ -0,0 +1,48 @@
1
+ import * as Y from 'yjs';
2
+ import * as awarenessProtocol from 'y-protocols/awareness';
3
+ import * as encoding from 'lib0/encoding';
4
+ import * as decoding from 'lib0/decoding';
5
+ export declare const messageSync = 0;
6
+ export declare const messageQueryAwareness = 3;
7
+ export declare const messageAwareness = 1;
8
+ export declare const messageAuth = 2;
9
+ export type CreateYjsProvider = (roomId: string) => [YjsProvider, Y.Doc];
10
+ export declare const MessageType: {
11
+ readonly Sync: 0;
12
+ readonly Awareness: 1;
13
+ readonly Auth: 2;
14
+ readonly QueryAwareness: 3;
15
+ };
16
+ export type MessageType = typeof MessageType[keyof typeof MessageType];
17
+ export type MessageHandler<T extends YjsProvider> = (encoder: encoding.Encoder, decoder: decoding.Decoder, provider: T, emitSynced: boolean, messageType: MessageType) => void;
18
+ export interface YjsProviderEventMap {
19
+ status: CustomEvent<{
20
+ status: 'connected' | 'disconnected' | 'connecting';
21
+ }>;
22
+ sync: CustomEvent<{
23
+ state: boolean;
24
+ }>;
25
+ synced: CustomEvent<{
26
+ state: boolean;
27
+ }>;
28
+ 'connection-error': CustomEvent<{
29
+ event: Event;
30
+ provider: YjsProvider;
31
+ }>;
32
+ 'connection-close': CustomEvent<{
33
+ event: CloseEvent | null;
34
+ provider: YjsProvider;
35
+ }>;
36
+ }
37
+ export interface YjsProvider extends EventTarget {
38
+ awareness: awarenessProtocol.Awareness;
39
+ doc: Y.Doc;
40
+ synced: boolean;
41
+ destroy(): any;
42
+ addEventListener<K extends keyof YjsProviderEventMap>(type: K, listener: (event: YjsProviderEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
43
+ removeEventListener<K extends keyof YjsProviderEventMap>(type: K, listener: (event: YjsProviderEventMap[K]) => void, options?: boolean | EventListenerOptions): void;
44
+ dispatchEvent(event: Event): boolean;
45
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void;
46
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions): void;
47
+ }
48
+ //# sourceMappingURL=YjsProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YjsProvider.d.ts","sourceRoot":"","sources":["../src/YjsProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzE,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,IAAI,CAClD,OAAO,EAAE,QAAQ,CAAC,OAAO,EACzB,OAAO,EAAE,QAAQ,CAAC,OAAO,EACzB,QAAQ,EAAE,CAAC,EACX,UAAU,EAAE,OAAO,EACnB,WAAW,EAAE,WAAW,KACrB,IAAI,CAAC;AAEV,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;QAAE,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,YAAY,CAAA;KAAE,CAAC,CAAC;IAC7E,IAAI,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtC,MAAM,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACxC,kBAAkB,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IACzE,kBAAkB,EAAE,WAAW,CAC7B;QAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAA;KAAE,CACpD,CAAC;CACH;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,SAAS,EAAE,iBAAiB,CAAC,SAAS,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAEhB,OAAO,QAAG;IAEV,gBAAgB,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAClD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,EACjD,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI,CAAC;IAER,mBAAmB,CAAC,CAAC,SAAS,MAAM,mBAAmB,EACrD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,EACjD,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACvC,IAAI,CAAC;IAER,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAGrC,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,GAAG,IAAI,EACnD,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI,CAAC;IAER,mBAAmB,CACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,GAAG,IAAI,EACnD,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACvC,IAAI,CAAC;CACT"}
@@ -0,0 +1,12 @@
1
+ // y-websocket is forked because we need better state connection handling
2
+ export const messageSync = 0;
3
+ export const messageQueryAwareness = 3;
4
+ export const messageAwareness = 1;
5
+ export const messageAuth = 2;
6
+ export const MessageType = {
7
+ Sync: 0,
8
+ Awareness: 1,
9
+ Auth: 2,
10
+ QueryAwareness: 3,
11
+ };
12
+ //# sourceMappingURL=YjsProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YjsProvider.js","sourceRoot":"","sources":["../src/YjsProvider.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAOzE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAI7B,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC;IACZ,IAAI,EAAE,CAAC;IACP,cAAc,EAAE,CAAC;CACT,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const dntGlobalThis: Omit<typeof globalThis, never>;
2
+ //# sourceMappingURL=_dnt.shims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_dnt.shims.d.ts","sourceRoot":"","sources":["../src/_dnt.shims.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,gCAA2C,CAAC"}
@@ -0,0 +1,58 @@
1
+ const dntGlobals = {};
2
+ export const dntGlobalThis = createMergeProxy(globalThis, dntGlobals);
3
+ function createMergeProxy(baseObj, extObj) {
4
+ return new Proxy(baseObj, {
5
+ get(_target, prop, _receiver) {
6
+ if (prop in extObj) {
7
+ return extObj[prop];
8
+ }
9
+ else {
10
+ return baseObj[prop];
11
+ }
12
+ },
13
+ set(_target, prop, value) {
14
+ if (prop in extObj) {
15
+ delete extObj[prop];
16
+ }
17
+ baseObj[prop] = value;
18
+ return true;
19
+ },
20
+ deleteProperty(_target, prop) {
21
+ let success = false;
22
+ if (prop in extObj) {
23
+ delete extObj[prop];
24
+ success = true;
25
+ }
26
+ if (prop in baseObj) {
27
+ delete baseObj[prop];
28
+ success = true;
29
+ }
30
+ return success;
31
+ },
32
+ ownKeys(_target) {
33
+ const baseKeys = Reflect.ownKeys(baseObj);
34
+ const extKeys = Reflect.ownKeys(extObj);
35
+ const extKeysSet = new Set(extKeys);
36
+ return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];
37
+ },
38
+ defineProperty(_target, prop, desc) {
39
+ if (prop in extObj) {
40
+ delete extObj[prop];
41
+ }
42
+ Reflect.defineProperty(baseObj, prop, desc);
43
+ return true;
44
+ },
45
+ getOwnPropertyDescriptor(_target, prop) {
46
+ if (prop in extObj) {
47
+ return Reflect.getOwnPropertyDescriptor(extObj, prop);
48
+ }
49
+ else {
50
+ return Reflect.getOwnPropertyDescriptor(baseObj, prop);
51
+ }
52
+ },
53
+ has(_target, prop) {
54
+ return prop in extObj || prop in baseObj;
55
+ },
56
+ });
57
+ }
58
+ //# sourceMappingURL=_dnt.shims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_dnt.shims.js","sourceRoot":"","sources":["../src/_dnt.shims.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,EAClB,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAEtE,SAAS,gBAAgB,CACvB,OAAU,EACV,MAAS;IAET,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;QACxB,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS;YAC1B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAQ,OAAe,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK;YACtB,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YACA,OAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,IAAI;YAC1B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;gBACpB,OAAQ,OAAe,CAAC,IAAI,CAAC,CAAC;gBAC9B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,OAAO;YACb,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC;QACrE,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI;YAChC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,wBAAwB,CAAC,OAAO,EAAE,IAAI;YACpC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,OAAO,OAAO,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,IAAI;YACf,OAAO,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC;QAC3C,CAAC;KACF,CAAQ,CAAC;AACZ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ProsemirrorMapping } from '../lib.js';
2
+ export interface BindingMetadata {
3
+ mapping: ProsemirrorMapping;
4
+ isOverlappingMark: Map<string, boolean>;
5
+ }
6
+ //# sourceMappingURL=BindingMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BindingMetadata.d.ts","sourceRoot":"","sources":["../../src/binding/BindingMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BindingMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BindingMetadata.js","sourceRoot":"","sources":["../../src/binding/BindingMetadata.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import * as Y from 'yjs';
2
+ import { Transaction } from 'prosemirror-state';
3
+ import { CoreEditor } from '@kerebron/editor';
4
+ import { User } from '@kerebron/editor/user';
5
+ import { CreateYjsProvider } from '../YjsProvider.js';
6
+ import { ProsemirrorMapping } from '../lib.js';
7
+ import { SelectionStash } from '../ui/selection.js';
8
+ type Mutex = (f: () => void, g?: () => void) => void;
9
+ export declare const createMutex: () => Mutex;
10
+ export type YjsData = {
11
+ ydoc: Y.Doc;
12
+ xmlFragment: Y.XmlFragment;
13
+ };
14
+ export declare class PmYjsBinding extends EventTarget {
15
+ private readonly editor;
16
+ private provider;
17
+ private connectionState;
18
+ private yjs;
19
+ private selectionStash;
20
+ addToYjsHistory: boolean;
21
+ private hasImported;
22
+ private mux;
23
+ private bindingMetadata;
24
+ private syncedHandler;
25
+ private _observeFunction;
26
+ constructor(editor: CoreEditor);
27
+ destroy(): void;
28
+ changeUser(user: User): void;
29
+ changeRoom(roomId: string, createYjsProvider: CreateYjsProvider, tr: Transaction): void;
30
+ leaveRoom(tr: Transaction): void;
31
+ importRemoteYdoc(): void;
32
+ yXmlChanged(events: Array<Y.YEvent<any>>, ytr: Y.Transaction): void;
33
+ pmChanged(): void;
34
+ createFromProseMirror(yjs: YjsData): void;
35
+ overwriteProseMirror(yXmlFragment: Y.XmlFragment): void;
36
+ getYjs(): YjsData | undefined;
37
+ getMapping(): ProsemirrorMapping;
38
+ getSelectionStash(): SelectionStash | undefined;
39
+ }
40
+ export {};
41
+ //# sourceMappingURL=PmYjsBinding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PmYjsBinding.d.ts","sourceRoot":"","sources":["../../src/binding/PmYjsBinding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAe,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQpD,KAAK,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AAErD,eAAO,MAAM,WAAW,QAAO,KAc9B,CAAC;AAIF,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;IAAC,WAAW,EAAE,CAAC,CAAC,WAAW,CAAA;CAAE,CAAC;AAElE,qBAAa,YAAa,SAAQ,WAAW;IAsB/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IArBnC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,eAAe,CAA2B;IAElD,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,cAAc,CAA6B;IAE5C,eAAe,UAAQ;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,aAAa,CAIX;IACV,OAAO,CAAC,gBAAgB,CAGd;gBAEmB,MAAM,EAAE,UAAU;IAyB/C,OAAO;IAOP,UAAU,CAAC,IAAI,EAAE,IAAI;IAOrB,UAAU,CACR,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,iBAAiB,EACpC,EAAE,EAAE,WAAW;IAkCjB,SAAS,CAAC,EAAE,EAAE,WAAW;IAsBzB,gBAAgB;IAiBhB,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW;IAoD5D,SAAS;IA6BT,qBAAqB,CAAC,GAAG,EAAE,OAAO;IAYlC,oBAAoB,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW;IAkBhD,MAAM,IAAI,OAAO,GAAG,SAAS;IAI7B,UAAU,IAAI,kBAAkB;IAIhC,iBAAiB,IAAI,cAAc,GAAG,SAAS;CAGhD"}
@@ -0,0 +1,190 @@
1
+ import * as Y from 'yjs';
2
+ import { Fragment, Slice } from 'prosemirror-model';
3
+ import { SelectionStash } from '../ui/selection.js';
4
+ import { ySyncPluginKey } from '../keys.js';
5
+ import { yXmlFragmentToProseMirrorRootNode } from './convertUtils.js';
6
+ import { updateYFragment } from './updateYFragment.js';
7
+ import { createNodeIfNotExists } from './createNodeFromYElement.js';
8
+ export const createMutex = () => {
9
+ let token = true;
10
+ return (f, g) => {
11
+ if (token) {
12
+ token = false;
13
+ try {
14
+ f();
15
+ }
16
+ finally {
17
+ token = true;
18
+ }
19
+ }
20
+ else if (g !== undefined) {
21
+ g();
22
+ }
23
+ };
24
+ };
25
+ export class PmYjsBinding extends EventTarget {
26
+ editor;
27
+ provider;
28
+ connectionState = 'idle';
29
+ yjs;
30
+ selectionStash;
31
+ addToYjsHistory = true;
32
+ hasImported = false;
33
+ mux;
34
+ bindingMetadata;
35
+ syncedHandler;
36
+ _observeFunction;
37
+ constructor(editor) {
38
+ super();
39
+ this.editor = editor;
40
+ this.bindingMetadata = { mapping: new Map(), isOverlappingMark: new Map() };
41
+ this.mux = createMutex();
42
+ this.syncedHandler = (event) => {
43
+ const synced = event.detail.state;
44
+ if (synced && !this.hasImported) {
45
+ this.importRemoteYdoc();
46
+ }
47
+ else {
48
+ // this.ydocChanged();
49
+ }
50
+ };
51
+ this._observeFunction = (events, transaction) => {
52
+ this.yXmlChanged(events, transaction);
53
+ };
54
+ }
55
+ destroy() {
56
+ this.connectionState = 'idle';
57
+ const tr = this.editor.state.tr;
58
+ this.leaveRoom(tr);
59
+ this.editor.dispatchTransaction(tr);
60
+ }
61
+ changeUser(user) {
62
+ if (!this.provider) {
63
+ return;
64
+ }
65
+ this.provider.awareness.setLocalStateField('kerebron:user', user);
66
+ }
67
+ changeRoom(roomId, createYjsProvider, tr) {
68
+ if (this.provider) {
69
+ this.provider.removeEventListener('synced', this.syncedHandler);
70
+ this.provider.destroy();
71
+ this.hasImported = false;
72
+ this.provider = undefined;
73
+ }
74
+ this.addToYjsHistory = true;
75
+ this.connectionState = 'joining';
76
+ const [provider, ydoc] = createYjsProvider(roomId);
77
+ this.bindingMetadata.mapping.clear();
78
+ this.bindingMetadata.isOverlappingMark.clear();
79
+ this.provider = provider;
80
+ const fieldName = 'kerebron:' + this.editor.schema.topNodeType.name;
81
+ this.yjs = { ydoc, xmlFragment: ydoc.getXmlFragment(fieldName) };
82
+ this.selectionStash = new SelectionStash(this.yjs, this.getMapping(), this.editor);
83
+ this.yjs.xmlFragment.observeDeep(this._observeFunction);
84
+ this.provider.addEventListener('synced', this.syncedHandler);
85
+ tr.setMeta('yjs:setAwareness', provider.awareness);
86
+ tr.setMeta('setYjs', this.yjs);
87
+ }
88
+ leaveRoom(tr) {
89
+ this.connectionState = 'leaving';
90
+ if (this.provider) {
91
+ this.provider.removeEventListener('synced', this.syncedHandler);
92
+ this.provider.destroy();
93
+ }
94
+ this.addToYjsHistory = true;
95
+ this.provider = undefined;
96
+ this.selectionStash?.destroy();
97
+ this.selectionStash = undefined;
98
+ this.yjs?.xmlFragment.unobserveDeep(this._observeFunction);
99
+ this.yjs = undefined;
100
+ this.hasImported = false;
101
+ tr.setMeta('addToYjsHistory', false);
102
+ tr.setMeta('yjs:removeAwareness', true);
103
+ tr.setMeta('clearYjs', true);
104
+ }
105
+ importRemoteYdoc() {
106
+ if (!this.yjs) {
107
+ return;
108
+ }
109
+ this.addToYjsHistory = this.editor.state.doc.content.size > 2; // Non empty para
110
+ if (this.yjs.xmlFragment.length === 0) {
111
+ this.createFromProseMirror(this.yjs);
112
+ }
113
+ else {
114
+ this.overwriteProseMirror(this.yjs.xmlFragment);
115
+ }
116
+ this.connectionState = 'synced';
117
+ this.hasImported = true;
118
+ }
119
+ yXmlChanged(events, ytr) {
120
+ this.mux(() => {
121
+ if (!this.yjs) {
122
+ return;
123
+ }
124
+ const state = this.editor.state;
125
+ const { xmlFragment } = this.yjs;
126
+ // TODO handleSnapShot
127
+ const mapping = this.bindingMetadata.mapping;
128
+ const delType = (_, type) => mapping.delete(type);
129
+ Y.iterateDeletedStructs(ytr, ytr.deleteSet, (struct) => {
130
+ if (struct.constructor === Y.Item) {
131
+ const type = struct.content.type;
132
+ type && mapping.delete(type);
133
+ }
134
+ });
135
+ ytr.changed.forEach(delType);
136
+ ytr.changedParentTypes.forEach(delType);
137
+ const fragmentContent = xmlFragment.toArray().map((t) => createNodeIfNotExists(t, state.schema, this.bindingMetadata)).filter((n) => n !== null);
138
+ const tr = state.tr;
139
+ if (ytr.origin instanceof Y.UndoManager) {
140
+ }
141
+ else {
142
+ }
143
+ tr.setMeta('addToYjsHistory', false);
144
+ tr.replace(0, state.doc.content.size, new Slice(Fragment.from(fragmentContent), 0, 0));
145
+ this.selectionStash?.restore(tr);
146
+ this.editor.dispatchTransaction(tr);
147
+ });
148
+ }
149
+ pmChanged() {
150
+ if (!this.hasImported) {
151
+ return;
152
+ }
153
+ if (!this.yjs) {
154
+ return;
155
+ }
156
+ const doc = this.editor.state.doc;
157
+ const { ydoc, xmlFragment } = this.yjs;
158
+ this.mux(() => {
159
+ const origin = ySyncPluginKey;
160
+ ydoc.transact((ytr) => {
161
+ ytr.meta.set('addToYjsHistory', this.addToYjsHistory);
162
+ updateYFragment(ydoc, xmlFragment, doc, this.bindingMetadata, this.addToYjsHistory);
163
+ this.selectionStash?.store();
164
+ }, origin);
165
+ });
166
+ }
167
+ createFromProseMirror(yjs) {
168
+ const doc = this.editor.state.doc;
169
+ const { ydoc, xmlFragment } = yjs;
170
+ updateYFragment(ydoc, xmlFragment, doc, this.bindingMetadata, this.addToYjsHistory);
171
+ }
172
+ overwriteProseMirror(yXmlFragment) {
173
+ const state = this.editor.state;
174
+ const newRoot = yXmlFragmentToProseMirrorRootNode(yXmlFragment, state.schema);
175
+ const tr = state.tr;
176
+ tr.setMeta('addToYjsHistory', false);
177
+ tr.replaceWith(0, state.doc.content.size, newRoot);
178
+ this.editor.dispatchTransaction(tr);
179
+ }
180
+ getYjs() {
181
+ return this.yjs;
182
+ }
183
+ getMapping() {
184
+ return this.bindingMetadata.mapping;
185
+ }
186
+ getSelectionStash() {
187
+ return this.selectionStash;
188
+ }
189
+ }
190
+ //# sourceMappingURL=PmYjsBinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PmYjsBinding.js","sourceRoot":"","sources":["../../src/binding/PmYjsBinding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import * as Y from 'yjs';
2
+ import { Fragment, Node, type Schema } from 'prosemirror-model';
3
+ import { BindingMetadata } from './BindingMetadata.js';
4
+ export declare const createEmptyMeta: () => BindingMetadata;
5
+ /**
6
+ * Utility function for converting an Y.Fragment to a ProseMirror fragment.
7
+ */
8
+ export declare const yXmlFragmentToProseMirrorFragment: (yXmlFragment: Y.XmlFragment, schema: Schema) => Fragment;
9
+ /**
10
+ * Utility function for converting an Y.Fragment to a ProseMirror node.
11
+ */
12
+ export declare const yXmlFragmentToProseMirrorRootNode: (yXmlFragment: Y.XmlFragment, schema: Schema) => Node;
13
+ /**
14
+ * Utility method to convert a Prosemirror Doc Node into a Y.Doc.
15
+ *
16
+ * This can be used when importing existing content to Y.Doc for the first time,
17
+ * note that this should not be used to rehydrate a Y.Doc from a database once
18
+ * collaboration has begun as all history will be lost
19
+ */
20
+ export declare function prosemirrorToYDoc(doc: Node, xmlFragment?: string): Y.Doc;
21
+ /**
22
+ * Utility method to update an empty Y.XmlFragment with content from a Prosemirror Doc Node.
23
+ *
24
+ * This can be used when importing existing content to Y.Doc for the first time,
25
+ * note that this should not be used to rehydrate a Y.Doc from a database once
26
+ * collaboration has begun as all history will be lost
27
+ *
28
+ * Note: The Y.XmlFragment does not need to be part of a Y.Doc document at the time that this
29
+ * method is called, but it must be added before any other operations are performed on it.
30
+ */
31
+ export declare function prosemirrorToYXmlFragment(doc: Node, xmlFragment: Y.XmlFragment): Y.XmlFragment;
32
+ /**
33
+ * Utility method to convert Prosemirror compatible JSON into a Y.Doc.
34
+ *
35
+ * This can be used when importing existing content to Y.Doc for the first time,
36
+ * note that this should not be used to rehydrate a Y.Doc from a database once
37
+ * collaboration has begun as all history will be lost
38
+ */
39
+ export declare function prosemirrorJSONToYDoc(schema: Schema, state: any, xmlFragment?: string): Y.Doc;
40
+ /**
41
+ * Utility method to convert Prosemirror compatible JSON to a Y.XmlFragment
42
+ *
43
+ * This can be used when importing existing content to Y.Doc for the first time,
44
+ * note that this should not be used to rehydrate a Y.Doc from a database once
45
+ * collaboration has begun as all history will be lost
46
+ */
47
+ export declare function prosemirrorJSONToYXmlFragment(schema: Schema, state: any, xmlFragment: Y.XmlFragment): Y.XmlFragment;
48
+ //# sourceMappingURL=convertUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertUtils.d.ts","sourceRoot":"","sources":["../../src/binding/convertUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,eAAO,MAAM,eAAe,QAAO,eAGjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iCAAiC,GAC5C,cAAc,CAAC,CAAC,WAAW,EAC3B,QAAQ,MAAM,aAaf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iCAAiC,GAC5C,cAAc,CAAC,CAAC,WAAW,EAC3B,QAAQ,MAAM,SAKb,CAAC;AAEJ;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,IAAI,EACT,WAAW,GAAE,MAAsB,GAClC,CAAC,CAAC,GAAG,CASP;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,IAAI,EACT,WAAW,EAAE,CAAC,CAAC,WAAW,GACzB,CAAC,CAAC,WAAW,CAUf;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,EACV,WAAW,GAAE,MAAsB,GAClC,CAAC,CAAC,GAAG,CAGP;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,EACV,WAAW,EAAE,CAAC,CAAC,WAAW,GACzB,CAAC,CAAC,WAAW,CAGf"}
@@ -0,0 +1,80 @@
1
+ import * as Y from 'yjs';
2
+ import { Fragment, Node } from 'prosemirror-model';
3
+ import { updateYFragment } from './updateYFragment.js';
4
+ import { createNodeFromYElement } from './createNodeFromYElement.js';
5
+ export const createEmptyMeta = () => ({
6
+ mapping: new Map(),
7
+ isOverlappingMark: new Map(),
8
+ });
9
+ /**
10
+ * Utility function for converting an Y.Fragment to a ProseMirror fragment.
11
+ */
12
+ export const yXmlFragmentToProseMirrorFragment = (yXmlFragment, schema) => {
13
+ const elements = yXmlFragment.toArray().filter((i) => i instanceof Y.XmlElement);
14
+ const fragmentContent = elements.map((t) => createNodeFromYElement(t, schema, createEmptyMeta())).filter((n) => n !== null);
15
+ return Fragment.fromArray(fragmentContent);
16
+ };
17
+ /**
18
+ * Utility function for converting an Y.Fragment to a ProseMirror node.
19
+ */
20
+ export const yXmlFragmentToProseMirrorRootNode = (yXmlFragment, schema) => schema.topNodeType.create(null, yXmlFragmentToProseMirrorFragment(yXmlFragment, schema));
21
+ /**
22
+ * Utility method to convert a Prosemirror Doc Node into a Y.Doc.
23
+ *
24
+ * This can be used when importing existing content to Y.Doc for the first time,
25
+ * note that this should not be used to rehydrate a Y.Doc from a database once
26
+ * collaboration has begun as all history will be lost
27
+ */
28
+ export function prosemirrorToYDoc(doc, xmlFragment = 'prosemirror') {
29
+ const ydoc = new Y.Doc();
30
+ const type = ydoc.get(xmlFragment, Y.XmlFragment);
31
+ if (!type.doc) {
32
+ return ydoc;
33
+ }
34
+ prosemirrorToYXmlFragment(doc, type);
35
+ return type.doc;
36
+ }
37
+ /**
38
+ * Utility method to update an empty Y.XmlFragment with content from a Prosemirror Doc Node.
39
+ *
40
+ * This can be used when importing existing content to Y.Doc for the first time,
41
+ * note that this should not be used to rehydrate a Y.Doc from a database once
42
+ * collaboration has begun as all history will be lost
43
+ *
44
+ * Note: The Y.XmlFragment does not need to be part of a Y.Doc document at the time that this
45
+ * method is called, but it must be added before any other operations are performed on it.
46
+ */
47
+ export function prosemirrorToYXmlFragment(doc, xmlFragment) {
48
+ const type = xmlFragment || new Y.XmlFragment();
49
+ const ydoc = type.doc
50
+ ? type.doc
51
+ : { transact: (transaction) => transaction(undefined) };
52
+ updateYFragment(ydoc, type, doc, {
53
+ mapping: new Map(),
54
+ isOverlappingMark: new Map(),
55
+ });
56
+ return type;
57
+ }
58
+ /**
59
+ * Utility method to convert Prosemirror compatible JSON into a Y.Doc.
60
+ *
61
+ * This can be used when importing existing content to Y.Doc for the first time,
62
+ * note that this should not be used to rehydrate a Y.Doc from a database once
63
+ * collaboration has begun as all history will be lost
64
+ */
65
+ export function prosemirrorJSONToYDoc(schema, state, xmlFragment = 'prosemirror') {
66
+ const doc = Node.fromJSON(schema, state);
67
+ return prosemirrorToYDoc(doc, xmlFragment);
68
+ }
69
+ /**
70
+ * Utility method to convert Prosemirror compatible JSON to a Y.XmlFragment
71
+ *
72
+ * This can be used when importing existing content to Y.Doc for the first time,
73
+ * note that this should not be used to rehydrate a Y.Doc from a database once
74
+ * collaboration has begun as all history will be lost
75
+ */
76
+ export function prosemirrorJSONToYXmlFragment(schema, state, xmlFragment) {
77
+ const doc = Node.fromJSON(schema, state);
78
+ return prosemirrorToYXmlFragment(doc, xmlFragment);
79
+ }
80
+ //# sourceMappingURL=convertUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertUtils.js","sourceRoot":"","sources":["../../src/binding/convertUtils.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as PModel from 'prosemirror-model';
2
2
  import { Schema } from 'prosemirror-model';
3
3
  import * as Y from 'yjs';
4
- import type { BindingMetadata } from './ProsemirrorBinding.js';
4
+ import type { BindingMetadata } from './BindingMetadata.js';
5
5
  export declare const attributesToMarks: (attrs: {
6
6
  [s: string]: any;
7
7
  }, schema: Schema) => PModel.Mark[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNodeFromYElement.d.ts","sourceRoot":"","sources":["../../src/binding/createNodeFromYElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAQ,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAK5D,eAAO,MAAM,iBAAiB,GAC5B,OAAO;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC3B,QAAQ,MAAM,kBAQf,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,IAAI,CAAC,CAAC,UAAU,EAChB,QAAQ,MAAM,CAAC,MAAM,EACrB,MAAM,eAAe,EACrB,WAAW,CAAC,CAAC,QAAQ,EACrB,eAAe,CAAC,CAAC,QAAQ,EACzB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,KAC9D,MAAM,CAAC,IAAI,GAAG,IAiBhB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,IAAI,CAAC,CAAC,UAAU,EAChB,QAAQ,MAAM,EACd,MAAM,eAAe,EACrB,WAAW,CAAC,CAAC,QAAQ,EACrB,eAAe,CAAC,CAAC,QAAQ,EACzB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,KAC9D,MAAM,CAAC,IAAI,GAAG,IA2FhB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import * as Y from 'yjs';
2
- import { ySyncPluginKey } from './keys.js';
3
- import { isVisible } from './utils.js';
2
+ import { ySyncPluginKey } from '../keys.js';
3
+ import { isVisible } from '../utils.js';
4
4
  import { yattr2markname } from './updateYFragment.js';
5
5
  export const attributesToMarks = (attrs, schema) => {
6
6
  const marks = [];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNodeFromYElement.js","sourceRoot":"","sources":["../../src/binding/createNodeFromYElement.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as Y from 'yjs';
2
2
  import { Node } from 'prosemirror-model';
3
- import type { BindingMetadata } from './ProsemirrorBinding.js';
4
- import { TransactFunc } from './ySyncPlugin.js';
3
+ import type { BindingMetadata } from './BindingMetadata.js';
4
+ import { TransactFunc } from '../lib.js';
5
5
  export declare const yattr2markname: (attrName: string) => string;
6
6
  /**
7
7
  * Update a yDom node by syncing the current content of the prosemirror node.
@@ -13,5 +13,5 @@ export declare const yattr2markname: (attrName: string) => string;
13
13
  */
14
14
  export declare const updateYFragment: (ydoc: {
15
15
  transact: TransactFunc<void>;
16
- }, yDomFragment: Y.XmlFragment, pNode: Node, meta: BindingMetadata) => void;
16
+ }, yDomFragment: Y.XmlFragment, pNode: Node, meta: BindingMetadata, addToYjsHistory?: boolean) => void;
17
17
  //# sourceMappingURL=updateYFragment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateYFragment.d.ts","sourceRoot":"","sources":["../../src/binding/updateYFragment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAQ,IAAI,EAAU,MAAM,mBAAmB,CAAC;AAMvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,WACM,CAAC;AAiQtD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM;IAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;CAAE,EACtC,cAAc,CAAC,CAAC,WAAW,EAC3B,OAAO,IAAI,EACX,MAAM,eAAe,EACrB,kBAAkB,OAAO,SAkK1B,CAAC"}