@kerebron/extension-yjs 0.6.6 → 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.
- package/esm/ExtensionYjs.d.ts +3 -11
- package/esm/ExtensionYjs.d.ts.map +1 -1
- package/esm/ExtensionYjs.js +38 -45
- package/esm/ExtensionYjs.js.map +1 -1
- package/esm/WebsocketProvider.d.ts +69 -0
- package/esm/WebsocketProvider.d.ts.map +1 -0
- package/esm/WebsocketProvider.js +354 -0
- package/esm/WebsocketProvider.js.map +1 -0
- package/esm/YjsProvider.d.ts +48 -0
- package/esm/YjsProvider.d.ts.map +1 -0
- package/esm/YjsProvider.js +12 -0
- package/esm/YjsProvider.js.map +1 -0
- package/esm/_dnt.shims.d.ts +2 -0
- package/esm/_dnt.shims.d.ts.map +1 -0
- package/esm/_dnt.shims.js +58 -0
- package/esm/_dnt.shims.js.map +1 -0
- package/esm/binding/BindingMetadata.d.ts +6 -0
- package/esm/binding/BindingMetadata.d.ts.map +1 -0
- package/esm/binding/BindingMetadata.js +2 -0
- package/esm/binding/BindingMetadata.js.map +1 -0
- package/esm/binding/PmYjsBinding.d.ts +41 -0
- package/esm/binding/PmYjsBinding.d.ts.map +1 -0
- package/esm/binding/PmYjsBinding.js +190 -0
- package/esm/binding/PmYjsBinding.js.map +1 -0
- package/esm/binding/convertUtils.d.ts +48 -0
- package/esm/binding/convertUtils.d.ts.map +1 -0
- package/esm/binding/convertUtils.js +80 -0
- package/esm/binding/convertUtils.js.map +1 -0
- package/esm/{createNodeFromYElement.d.ts → binding/createNodeFromYElement.d.ts} +1 -1
- package/esm/binding/createNodeFromYElement.d.ts.map +1 -0
- package/esm/{createNodeFromYElement.js → binding/createNodeFromYElement.js} +2 -2
- package/esm/binding/createNodeFromYElement.js.map +1 -0
- package/esm/{updateYFragment.d.ts → binding/updateYFragment.d.ts} +3 -3
- package/esm/binding/updateYFragment.d.ts.map +1 -0
- package/esm/{updateYFragment.js → binding/updateYFragment.js} +10 -7
- package/esm/binding/updateYFragment.js.map +1 -0
- package/esm/lib.d.ts +1 -7
- package/esm/lib.d.ts.map +1 -1
- package/esm/lib.js +1 -200
- package/esm/lib.js.map +1 -1
- package/esm/position.d.ts +8 -0
- package/esm/position.d.ts.map +1 -0
- package/esm/position.js +165 -0
- package/esm/position.js.map +1 -0
- package/esm/ui/selection.d.ts +29 -0
- package/esm/ui/selection.d.ts.map +1 -0
- package/esm/ui/selection.js +129 -0
- package/esm/ui/selection.js.map +1 -0
- package/esm/yPositionPlugin.d.ts +6 -1
- package/esm/yPositionPlugin.d.ts.map +1 -1
- package/esm/yPositionPlugin.js +91 -50
- package/esm/yPositionPlugin.js.map +1 -1
- package/esm/ySyncPlugin.d.ts +5 -22
- package/esm/ySyncPlugin.d.ts.map +1 -1
- package/esm/ySyncPlugin.js +54 -116
- package/esm/ySyncPlugin.js.map +1 -1
- package/esm/yUndoPlugin.d.ts +11 -10
- package/esm/yUndoPlugin.d.ts.map +1 -1
- package/esm/yUndoPlugin.js +90 -52
- package/esm/yUndoPlugin.js.map +1 -1
- package/package.json +9 -6
- package/src/ExtensionYjs.ts +55 -67
- package/src/WebsocketProvider.ts +516 -0
- package/src/YjsProvider.ts +75 -0
- package/src/_dnt.shims.ts +60 -0
- package/src/binding/BindingMetadata.ts +6 -0
- package/src/binding/PmYjsBinding.ts +300 -0
- package/src/binding/convertUtils.ts +124 -0
- package/src/{createNodeFromYElement.ts → binding/createNodeFromYElement.ts} +3 -3
- package/src/{updateYFragment.ts → binding/updateYFragment.ts} +15 -8
- package/src/lib.ts +4 -230
- package/src/position.ts +191 -0
- package/src/ui/selection.ts +216 -0
- package/src/yPositionPlugin.ts +122 -74
- package/src/ySyncPlugin.ts +87 -170
- package/src/yUndoPlugin.ts +113 -62
- package/esm/ProsemirrorBinding.d.ts +0 -60
- package/esm/ProsemirrorBinding.d.ts.map +0 -1
- package/esm/ProsemirrorBinding.js +0 -405
- package/esm/ProsemirrorBinding.js.map +0 -1
- package/esm/createNodeFromYElement.d.ts.map +0 -1
- package/esm/createNodeFromYElement.js.map +0 -1
- package/esm/updateYFragment.d.ts.map +0 -1
- package/esm/updateYFragment.js.map +0 -1
- package/esm/userColors.d.ts +0 -5
- package/esm/userColors.d.ts.map +0 -1
- package/esm/userColors.js +0 -11
- package/esm/userColors.js.map +0 -1
- package/src/ProsemirrorBinding.ts +0 -607
- package/src/userColors.ts +0 -10
package/src/yUndoPlugin.ts
CHANGED
|
@@ -1,38 +1,48 @@
|
|
|
1
1
|
import { EditorState, Plugin } from 'prosemirror-state';
|
|
2
2
|
import { ContentType, Item, Text, UndoManager, XmlElement } from 'yjs';
|
|
3
|
+
import * as Y from 'yjs';
|
|
3
4
|
|
|
4
5
|
import type { Command } from '@kerebron/editor/commands';
|
|
5
6
|
|
|
6
7
|
import { ySyncPluginKey, yUndoPluginKey } from './keys.js';
|
|
7
|
-
import { getRelativeSelection } from './
|
|
8
|
+
import { getRelativeSelection } from './ui/selection.js';
|
|
9
|
+
import { YjsData } from './binding/PmYjsBinding.js';
|
|
10
|
+
import { YSyncPluginState } from './ySyncPlugin.js';
|
|
8
11
|
|
|
9
12
|
export interface UndoPluginState {
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
xmlFragment?: Y.XmlFragment;
|
|
14
|
+
undoManager?: UndoManager;
|
|
15
|
+
prevSel?: ReturnType<typeof getRelativeSelection>;
|
|
12
16
|
hasUndoOps: boolean;
|
|
13
17
|
hasRedoOps: boolean;
|
|
14
18
|
}
|
|
15
19
|
|
|
16
|
-
export const undo = (state: EditorState): boolean =>
|
|
17
|
-
|
|
20
|
+
export const undo: Command = (state: EditorState): boolean => {
|
|
21
|
+
const tr = state.tr;
|
|
22
|
+
tr.setMeta('preventDispatch', true);
|
|
23
|
+
return !!(yUndoPluginKey.getState(state)?.undoManager?.undo());
|
|
24
|
+
};
|
|
18
25
|
|
|
19
|
-
export const redo = (state: EditorState): boolean =>
|
|
20
|
-
|
|
26
|
+
export const redo: Command = (state: EditorState): boolean => {
|
|
27
|
+
const tr = state.tr;
|
|
28
|
+
tr.setMeta('preventDispatch', true);
|
|
29
|
+
return !!(yUndoPluginKey.getState(state)?.undoManager?.redo());
|
|
30
|
+
};
|
|
21
31
|
|
|
22
32
|
export const undoCommand: Command = (state, dispatch) =>
|
|
23
|
-
dispatch
|
|
24
|
-
? yUndoPluginKey.getState(state)?.undoManager?.canUndo()
|
|
33
|
+
!dispatch
|
|
34
|
+
? !!(yUndoPluginKey.getState(state)?.undoManager?.canUndo())
|
|
25
35
|
: undo(state);
|
|
26
36
|
|
|
27
37
|
export const redoCommand: Command = (state, dispatch) =>
|
|
28
|
-
dispatch
|
|
29
|
-
? yUndoPluginKey.getState(state)?.undoManager?.canRedo()
|
|
38
|
+
!dispatch
|
|
39
|
+
? !!(yUndoPluginKey.getState(state)?.undoManager?.canRedo())
|
|
30
40
|
: redo(state);
|
|
31
41
|
|
|
32
42
|
export const defaultProtectedNodes = new Set(['paragraph']);
|
|
33
43
|
|
|
34
44
|
export const defaultDeleteFilter = (
|
|
35
|
-
item:
|
|
45
|
+
item: Y.Item,
|
|
36
46
|
protectedNodes: Set<string>,
|
|
37
47
|
): boolean =>
|
|
38
48
|
!(item instanceof Item) ||
|
|
@@ -45,78 +55,119 @@ export const defaultDeleteFilter = (
|
|
|
45
55
|
export const yUndoPlugin = ({
|
|
46
56
|
protectedNodes = defaultProtectedNodes,
|
|
47
57
|
trackedOrigins = [],
|
|
48
|
-
undoManager = null,
|
|
49
58
|
}: {
|
|
50
59
|
protectedNodes?: Set<string>;
|
|
51
60
|
trackedOrigins?: any[];
|
|
52
|
-
undoManager?: import('yjs').UndoManager | null;
|
|
53
61
|
} = {}) =>
|
|
54
|
-
new Plugin({
|
|
62
|
+
new Plugin<UndoPluginState>({
|
|
55
63
|
key: yUndoPluginKey,
|
|
56
64
|
state: {
|
|
57
|
-
init: (
|
|
58
|
-
// TODO: check if plugin order matches and fix
|
|
59
|
-
const ystate = ySyncPluginKey.getState(state);
|
|
60
|
-
const _undoManager = undoManager || new UndoManager(ystate.type, {
|
|
61
|
-
trackedOrigins: new Set([ySyncPluginKey].concat(trackedOrigins)),
|
|
62
|
-
deleteFilter: (item) => defaultDeleteFilter(item, protectedNodes),
|
|
63
|
-
captureTransaction: (tr) => tr.meta.get('addToHistory') !== false,
|
|
64
|
-
});
|
|
65
|
+
init: (_initargs, _state) => {
|
|
65
66
|
return {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
xmlFragment: undefined,
|
|
68
|
+
undoManager: undefined,
|
|
69
|
+
prevSel: undefined,
|
|
70
|
+
hasUndoOps: false,
|
|
71
|
+
hasRedoOps: false,
|
|
70
72
|
};
|
|
71
73
|
},
|
|
72
|
-
apply: (tr, val, oldState, state) => {
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
apply: (tr, val: UndoPluginState, oldState, state) => {
|
|
75
|
+
const clearYjs = tr.getMeta('clearYjs');
|
|
76
|
+
if (clearYjs) {
|
|
77
|
+
const undoManager = val.undoManager;
|
|
78
|
+
if (undoManager) {
|
|
79
|
+
undoManager?.destroy();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
xmlFragment: undefined,
|
|
84
|
+
undoManager: undefined,
|
|
85
|
+
prevSel: undefined,
|
|
86
|
+
hasUndoOps: false,
|
|
87
|
+
hasRedoOps: false,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const setYjs: YjsData | undefined = tr.getMeta('setYjs');
|
|
92
|
+
if (setYjs) {
|
|
93
|
+
const { xmlFragment } = setYjs;
|
|
94
|
+
const undoManager = new UndoManager(xmlFragment, {
|
|
95
|
+
trackedOrigins: new Set([ySyncPluginKey].concat(trackedOrigins)),
|
|
96
|
+
deleteFilter: (item) => defaultDeleteFilter(item, protectedNodes),
|
|
97
|
+
captureTransaction: (ytr) => {
|
|
98
|
+
return ytr.meta.get('addToYjsHistory') !== false;
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const ystate: YSyncPluginState = ySyncPluginKey.getState(oldState)!;
|
|
103
|
+
undoManager.on('stack-item-added', ({ stackItem }) => {
|
|
104
|
+
const yUndoPluginState = yUndoPluginKey.getState(oldState);
|
|
105
|
+
const binding = ystate.binding;
|
|
106
|
+
if (binding && yUndoPluginState) {
|
|
107
|
+
stackItem.meta.set(
|
|
108
|
+
binding,
|
|
109
|
+
yUndoPluginState.prevSel,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
undoManager.on('stack-item-popped', ({ stackItem }) => {
|
|
114
|
+
const binding = ystate.binding;
|
|
115
|
+
if (binding) {
|
|
116
|
+
const beforeTransactionSelection = stackItem.meta.get(binding);
|
|
117
|
+
if (beforeTransactionSelection) {
|
|
118
|
+
const selectionStash = binding.getSelectionStash();
|
|
119
|
+
if (selectionStash) {
|
|
120
|
+
selectionStash.overwrite(beforeTransactionSelection);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
|
|
78
126
|
return {
|
|
79
127
|
undoManager,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
128
|
+
xmlFragment,
|
|
129
|
+
prevSel: undefined,
|
|
130
|
+
hasUndoOps: undoManager.undoStack.length > 0,
|
|
131
|
+
hasRedoOps: undoManager.redoStack.length > 0,
|
|
83
132
|
};
|
|
84
|
-
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (val.undoManager && val.xmlFragment) {
|
|
136
|
+
const undoManager = val.undoManager;
|
|
137
|
+
const hasUndoOps = undoManager.undoStack.length > 0;
|
|
138
|
+
const hasRedoOps = undoManager.redoStack.length > 0;
|
|
139
|
+
|
|
140
|
+
const ystate = ySyncPluginKey.getState(state)!;
|
|
141
|
+
const binding = ystate.binding;
|
|
142
|
+
if (binding) {
|
|
143
|
+
return {
|
|
144
|
+
...val,
|
|
145
|
+
prevSel: getRelativeSelection(
|
|
146
|
+
val.xmlFragment,
|
|
147
|
+
binding.getMapping(),
|
|
148
|
+
oldState,
|
|
149
|
+
),
|
|
150
|
+
hasUndoOps,
|
|
151
|
+
hasRedoOps,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
85
155
|
if (hasUndoOps !== val.hasUndoOps || hasRedoOps !== val.hasRedoOps) {
|
|
86
|
-
return
|
|
156
|
+
return {
|
|
157
|
+
...val,
|
|
87
158
|
hasUndoOps: undoManager.undoStack.length > 0,
|
|
88
159
|
hasRedoOps: undoManager.redoStack.length > 0,
|
|
89
|
-
}
|
|
90
|
-
} else { // nothing changed
|
|
91
|
-
return val;
|
|
160
|
+
};
|
|
92
161
|
}
|
|
93
162
|
}
|
|
163
|
+
return val;
|
|
94
164
|
},
|
|
95
165
|
},
|
|
96
166
|
view: (view) => {
|
|
97
|
-
const ystate = ySyncPluginKey.getState(view.state);
|
|
98
|
-
const yUndoPlugin = yUndoPluginKey.getState(view.state);
|
|
99
|
-
const undoManager = yUndoPlugin?.undoManager;
|
|
100
|
-
if (undoManager) {
|
|
101
|
-
undoManager.on('stack-item-added', ({ stackItem }) => {
|
|
102
|
-
const binding = ystate.binding;
|
|
103
|
-
if (binding) {
|
|
104
|
-
stackItem.meta.set(
|
|
105
|
-
binding,
|
|
106
|
-
yUndoPlugin.prevSel,
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
undoManager.on('stack-item-popped', ({ stackItem }) => {
|
|
111
|
-
const binding = ystate.binding;
|
|
112
|
-
if (binding) {
|
|
113
|
-
binding.beforeTransactionSelection = stackItem.meta.get(binding) ||
|
|
114
|
-
binding.beforeTransactionSelection;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
167
|
return {
|
|
119
168
|
destroy: () => {
|
|
169
|
+
const yUndoPluginState = yUndoPluginKey.getState(view.state);
|
|
170
|
+
const undoManager = yUndoPluginState?.undoManager;
|
|
120
171
|
undoManager?.destroy();
|
|
121
172
|
},
|
|
122
173
|
};
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { mutex } from 'lib0/mutex';
|
|
2
|
-
import { Node } from 'prosemirror-model';
|
|
3
|
-
import { EditorState, Transaction } from 'prosemirror-state';
|
|
4
|
-
import * as Y from 'yjs';
|
|
5
|
-
import { ProsemirrorMapping } from './lib.js';
|
|
6
|
-
import { type ColorDef, type YSyncPluginState } from './ySyncPlugin.js';
|
|
7
|
-
export declare const defaultColors: Array<ColorDef>;
|
|
8
|
-
export interface BindingMetadata {
|
|
9
|
-
mapping: ProsemirrorMapping;
|
|
10
|
-
isOMark: Map<string, boolean>;
|
|
11
|
-
}
|
|
12
|
-
interface TransactionSelection {
|
|
13
|
-
type: string;
|
|
14
|
-
anchor: Y.RelativePosition;
|
|
15
|
-
head: Y.RelativePosition;
|
|
16
|
-
}
|
|
17
|
-
export declare const getRelativeSelection: (pmbinding: ProsemirrorBinding, state: EditorState) => TransactionSelection;
|
|
18
|
-
interface IEditorView {
|
|
19
|
-
state: EditorState;
|
|
20
|
-
dispatch(tr: Transaction): void;
|
|
21
|
-
fake?: boolean;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Binding for prosemirror.
|
|
25
|
-
*
|
|
26
|
-
* @protected
|
|
27
|
-
*/
|
|
28
|
-
export declare class ProsemirrorBinding implements BindingMetadata {
|
|
29
|
-
readonly mapping: ProsemirrorMapping;
|
|
30
|
-
ydoc: Y.Doc;
|
|
31
|
-
isOMark: Map<string, boolean>;
|
|
32
|
-
type: Y.XmlFragment;
|
|
33
|
-
readonly mux: mutex;
|
|
34
|
-
prosemirrorView?: IEditorView;
|
|
35
|
-
private _beforeTransactionSelection;
|
|
36
|
-
private readonly beforeAllTransactions;
|
|
37
|
-
private readonly afterAllTransactions;
|
|
38
|
-
private _observeFunction;
|
|
39
|
-
private _domSelectionInView;
|
|
40
|
-
get beforeTransactionSelection(): TransactionSelection | null;
|
|
41
|
-
set beforeTransactionSelection(value: TransactionSelection);
|
|
42
|
-
constructor(yXmlFragment: Y.XmlFragment, mapping?: ProsemirrorMapping);
|
|
43
|
-
changeRoom(yXmlFragment: Y.XmlFragment): void;
|
|
44
|
-
debug(msg?: string): void;
|
|
45
|
-
_isLocalCursorInView(): boolean;
|
|
46
|
-
_isDomSelectionInView(): boolean;
|
|
47
|
-
renderSnapshot(snapshot: Y.Snapshot | undefined, prevSnapshot: Y.Snapshot | undefined): void;
|
|
48
|
-
unrenderSnapshot(): void;
|
|
49
|
-
_forceRerender(): void;
|
|
50
|
-
_renderSnapshot(snapshot: Y.Snapshot | Uint8Array | undefined, prevSnapshot: Y.Snapshot | Uint8Array, pluginState: YSyncPluginState): void;
|
|
51
|
-
yXmlChanged(events: Array<Y.YEvent<any>>, transaction: Y.Transaction): void;
|
|
52
|
-
prosemirrorChanged(doc: Node): void;
|
|
53
|
-
/**
|
|
54
|
-
* View is ready to listen to changes. Register observers.
|
|
55
|
-
*/
|
|
56
|
-
initView(prosemirrorView?: IEditorView): void;
|
|
57
|
-
destroy(): void;
|
|
58
|
-
}
|
|
59
|
-
export {};
|
|
60
|
-
//# sourceMappingURL=ProsemirrorBinding.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProsemirrorBinding.d.ts","sourceRoot":"","sources":["../src/ProsemirrorBinding.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,EAAE,MAAM,YAAY,CAAC;AAIhD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAEL,WAAW,EAIX,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAKzB,OAAO,EAEL,kBAAkB,EAEnB,MAAM,UAAU,CAAC;AAMlB,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGxE,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,QAAQ,CAGxC,CAAC;AAmBH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,CAAC,gBAAgB,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,gBAAgB,CAAC;CAC1B;AAyDD,eAAO,MAAM,oBAAoB,GAC/B,WAAW,kBAAkB,EAC7B,OAAO,WAAW,KACjB,oBAYD,CAAC;AAEH,UAAU,WAAW;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,eAAe;aAsBtC,OAAO,EAAE,kBAAkB;IArBtC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC;IAC3B,SAAgB,GAAG,EAAE,KAAK,CAAC;IACpB,eAAe,CAAC,EAAE,WAAW,CAAC;IAErC,OAAO,CAAC,2BAA2B,CAAqC;IACxE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAa;IACnD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAa;IAElD,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,IAAI,0BAA0B,IAAI,oBAAoB,GAAG,IAAI,CAE5D;IACD,IAAI,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,EAEzD;gBAGC,YAAY,EAAE,CAAC,CAAC,WAAW,EACX,OAAO,GAAE,kBAA8B;IAsCzD,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW;IAUtC,KAAK,CAAC,GAAG,SAAqB;IAI9B,oBAAoB,IAAI,OAAO;IAY/B,qBAAqB,IAAI,OAAO;IA6BhC,cAAc,CACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ,GAAG,SAAS,EAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,GAAG,SAAS;IAgBtC,gBAAgB;IA+BhB,cAAc;IAsDd,eAAe,CACb,QAAQ,EAAE,CAAC,CAAC,QAAQ,GAAG,UAAU,GAAG,SAAS,EAC7C,YAAY,EAAE,CAAC,CAAC,QAAQ,GAAG,UAAU,EACrC,WAAW,EAAE,gBAAgB;IA+H/B,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW;IAiEpE,kBAAkB,CAAC,GAAG,EAAE,IAAI;IAa5B;;OAEG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW;IAUtC,OAAO;CAcR"}
|