@pluv/crdt-yjs 5.0.1 → 5.0.2
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/dist/index.d.mts +209 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +569 -0
- package/dist/index.mjs.map +1 -0
- package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
- package/package.json +8 -5
- package/CHANGELOG.md +0 -1626
- package/eslint.config.mjs +0 -4
- package/src/array/YjsArray.ts +0 -18
- package/src/array/array.ts +0 -9
- package/src/array/index.ts +0 -2
- package/src/awareness/PluvYjsAwareness.ts +0 -220
- package/src/awareness/awareness.ts +0 -15
- package/src/awareness/index.ts +0 -2
- package/src/constants.ts +0 -2
- package/src/doc/CrdtYjsDoc.ts +0 -241
- package/src/doc/CrdtYjsDocFactory.ts +0 -33
- package/src/doc/builder.ts +0 -71
- package/src/doc/doc.ts +0 -9
- package/src/doc/index.ts +0 -4
- package/src/index.ts +0 -5
- package/src/map/YjsMap.ts +0 -19
- package/src/map/index.ts +0 -2
- package/src/map/map.ts +0 -9
- package/src/provider/PluvYjsProvider.ts +0 -132
- package/src/provider/index.ts +0 -2
- package/src/provider/provider.ts +0 -15
- package/src/text/YjsText.ts +0 -16
- package/src/text/index.ts +0 -2
- package/src/text/text.ts +0 -7
- package/src/types.ts +0 -35
- package/src/utils/index.ts +0 -1
- package/src/utils/oneLine.ts +0 -7
- package/src/xmlElement/YjsXmlElement.ts +0 -25
- package/src/xmlElement/index.ts +0 -2
- package/src/xmlElement/xmlElement.ts +0 -9
- package/src/xmlFragment/YjsXmlFragment.ts +0 -19
- package/src/xmlFragment/index.ts +0 -2
- package/src/xmlFragment/xmlFragment.ts +0 -8
- package/src/xmlText/YjsXmlText.ts +0 -16
- package/src/xmlText/index.ts +0 -2
- package/src/xmlText/xmlText.ts +0 -7
- package/src/yjs.ts +0 -12
- package/tsconfig.json +0 -8
- package/tsdown.config.ts +0 -14
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Array, Doc, Map as Map$1, Text, XmlElement, XmlFragment, XmlText } from "yjs";
|
|
2
|
+
import { ObservableV2 } from "lib0/observable";
|
|
3
|
+
import { AbstractCrdtDocFactory, CrdtType, DocApplyEncodedStateParams, DocBatchApplyEncodedStateParams, DocSubscribeCallbackParams, InferCrdtJson } from "@pluv/crdt";
|
|
4
|
+
import { CrdtDocLike, CrdtType as CrdtType$1, IOLike, PluvRouterEventConfig, RoomLike } from "@pluv/types";
|
|
5
|
+
//#region src/types.d.ts
|
|
6
|
+
type YjsType<TValue extends unknown, TJson extends unknown = any> = CrdtType<TValue, TJson> & {
|
|
7
|
+
initialValue?: any;
|
|
8
|
+
toJSON: () => any;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* @description Type internally defined by Yjs.Awareness
|
|
12
|
+
* @see https://github.com/yjs/y-protocols/blob/master/awareness.js
|
|
13
|
+
*/
|
|
14
|
+
interface YjsAwarenessUpdate {
|
|
15
|
+
added: number[];
|
|
16
|
+
updated: number[];
|
|
17
|
+
removed: number[];
|
|
18
|
+
}
|
|
19
|
+
type YjsProviderStatus = "connecting" | "connected" | "disconnected";
|
|
20
|
+
/**
|
|
21
|
+
* @description Type internally defined by Yjs.Awareness
|
|
22
|
+
* @see https://github.com/yjs/y-protocols/blob/master/awareness.js
|
|
23
|
+
*/
|
|
24
|
+
interface MetaClientState {
|
|
25
|
+
clock: number;
|
|
26
|
+
lastUpdated: number;
|
|
27
|
+
}
|
|
28
|
+
type AwarenessPresence<TPresence extends Record<string, any>, TField extends keyof TPresence | null> = TField extends null ? TPresence : TField extends keyof TPresence ? TPresence[TField] : never;
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/array/array.d.ts
|
|
31
|
+
declare const array: <T extends unknown>(value?: T[] | readonly T[]) => YjsType<Array<T>, T[]>;
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region src/awareness/PluvYjsAwareness.d.ts
|
|
34
|
+
interface PluvYjsAwarenessParams<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null> {
|
|
35
|
+
presenceField?: TField;
|
|
36
|
+
room: RoomLike<TIO, Doc, TPresence, TStorage, TEvents>;
|
|
37
|
+
}
|
|
38
|
+
declare class PluvYjsAwareness<TIO extends IOLike, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null> extends ObservableV2<{
|
|
39
|
+
change: (updates: YjsAwarenessUpdate, kind: "presence") => void;
|
|
40
|
+
destroy: (awareness: PluvYjsAwareness<TIO, TPresence, TStorage, TEvents, TField>) => void;
|
|
41
|
+
update: (updates: YjsAwarenessUpdate, kind: "local" | "presence") => void;
|
|
42
|
+
}> {
|
|
43
|
+
readonly doc: Doc;
|
|
44
|
+
private readonly _field;
|
|
45
|
+
private readonly _idMap;
|
|
46
|
+
private readonly _room;
|
|
47
|
+
private readonly _unsubscribe;
|
|
48
|
+
get clientID(): number;
|
|
49
|
+
get states(): Map<number, TPresence>;
|
|
50
|
+
constructor(params: PluvYjsAwarenessParams<TIO, TPresence, TStorage, TEvents, TField>);
|
|
51
|
+
destroy(): void;
|
|
52
|
+
getLocalState(): AwarenessPresence<TPresence, TField>;
|
|
53
|
+
setLocalState(state: AwarenessPresence<TPresence, TField>): void;
|
|
54
|
+
setLocalStateField<TLocalField extends keyof AwarenessPresence<TPresence, TField>>(field: TLocalField, value: AwarenessPresence<TPresence, TField>[TLocalField]): void;
|
|
55
|
+
/**
|
|
56
|
+
* !HACK
|
|
57
|
+
* @description We're building the awareness presences from the states stored on the room's
|
|
58
|
+
* presense instead of using the map defined in the awareness interface.
|
|
59
|
+
* @see https://github.com/yjs/y-protocols/blob/master/awareness.js
|
|
60
|
+
* @date May 13, 2025
|
|
61
|
+
*/
|
|
62
|
+
getStates(): Map<number, AwarenessPresence<TPresence, TField>>;
|
|
63
|
+
private _adaptPresence;
|
|
64
|
+
private _deriveUpdates;
|
|
65
|
+
private _resetIdMap;
|
|
66
|
+
/**
|
|
67
|
+
* !HACK
|
|
68
|
+
* @description We dgaf about these. We're just mirroring the fields that exist in the
|
|
69
|
+
* og awareness to make sure everything aligns.
|
|
70
|
+
* @see https://github.com/yjs/y-protocols/blob/master/awareness.js
|
|
71
|
+
* @date May 13, 2025
|
|
72
|
+
*/
|
|
73
|
+
readonly meta: Map<any, MetaClientState>;
|
|
74
|
+
readonly _checkInterval: number;
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region src/awareness/awareness.d.ts
|
|
78
|
+
declare const awareness: <TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null>(params: PluvYjsAwarenessParams<TIO, TPresence, TStorage, TEvents, TField>) => PluvYjsAwareness<TIO, TPresence, TStorage, TEvents, TField>;
|
|
79
|
+
//#endregion
|
|
80
|
+
//#region src/doc/builder.d.ts
|
|
81
|
+
type YjsBuilder = ReturnType<typeof builder>;
|
|
82
|
+
declare const builder: (doc: Doc) => {
|
|
83
|
+
array<T extends unknown>(name: string, value?: T[] | readonly T[]): YjsType<Array<T>, T[]>;
|
|
84
|
+
map<T extends unknown>(name: string, value?: readonly (readonly [key: string, value: T])[]): YjsType<Map$1<T>, Record<string, T>>;
|
|
85
|
+
text(name: string, value?: string): YjsType<Text, string>;
|
|
86
|
+
xmlElement(name: string, children?: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]): YjsType<XmlElement, string>;
|
|
87
|
+
xmlFragment(name: string, children?: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]): YjsType<XmlFragment, string>;
|
|
88
|
+
xmlText(name: string): YjsType<XmlText, string>;
|
|
89
|
+
};
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/doc/CrdtYjsDoc.d.ts
|
|
92
|
+
type CrdtYjsDocParams<TStorage extends Record<string, YjsType<any, any>>> = (builder: YjsBuilder) => TStorage;
|
|
93
|
+
declare class CrdtYjsDoc<TStorage extends Record<string, YjsType<any, any>>> implements CrdtDocLike<Doc, TStorage> {
|
|
94
|
+
#private;
|
|
95
|
+
value: Doc;
|
|
96
|
+
constructor(params?: CrdtYjsDocParams<TStorage>);
|
|
97
|
+
applyEncodedState(params: DocApplyEncodedStateParams): this;
|
|
98
|
+
batchApplyEncodedState(params: DocBatchApplyEncodedStateParams): this;
|
|
99
|
+
canRedo(): boolean;
|
|
100
|
+
canUndo(): boolean;
|
|
101
|
+
destroy(): void;
|
|
102
|
+
get(key?: undefined): TStorage;
|
|
103
|
+
get<TKey extends keyof TStorage>(type: TKey): TStorage[TKey];
|
|
104
|
+
getEncodedState(): string;
|
|
105
|
+
isEmpty(): boolean;
|
|
106
|
+
rebuildStorage(reference: TStorage): this;
|
|
107
|
+
redo(): this;
|
|
108
|
+
subscribe(listener: (params: DocSubscribeCallbackParams<Doc, TStorage>) => void): () => void;
|
|
109
|
+
track(): this;
|
|
110
|
+
transact(fn: () => void): this;
|
|
111
|
+
toJson(): InferCrdtJson<TStorage>;
|
|
112
|
+
toJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]>;
|
|
113
|
+
undo(): this;
|
|
114
|
+
}
|
|
115
|
+
//#endregion
|
|
116
|
+
//#region src/doc/CrdtYjsDocFactory.d.ts
|
|
117
|
+
declare class CrdtYjsDocFactory<TStorage extends Record<string, YjsType<any, any>> = {}> extends AbstractCrdtDocFactory<Doc, TStorage> {
|
|
118
|
+
readonly _initialStorage: (builder: YjsBuilder) => TStorage;
|
|
119
|
+
constructor(initialStorage?: (builder: YjsBuilder) => TStorage);
|
|
120
|
+
getEmpty(): CrdtYjsDoc<TStorage>;
|
|
121
|
+
getFactory(initialStorage: (builder: YjsBuilder) => TStorage): CrdtYjsDocFactory<TStorage>;
|
|
122
|
+
getInitialized(initialStorage?: (builder: YjsBuilder) => TStorage): CrdtYjsDoc<TStorage>;
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region src/doc/doc.d.ts
|
|
126
|
+
declare const doc: <TStorage extends Record<string, YjsType<any, any>>>(value?: (buidler: YjsBuilder) => TStorage) => CrdtYjsDocFactory<TStorage>;
|
|
127
|
+
//#endregion
|
|
128
|
+
//#region src/map/map.d.ts
|
|
129
|
+
declare const map: <T extends unknown>(value?: readonly (readonly [key: string, value: T])[]) => YjsType<Map$1<T>, Record<string, T>>;
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region src/provider/PluvYjsProvider.d.ts
|
|
132
|
+
interface PluvYjsProviderParams<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null> {
|
|
133
|
+
presenceField?: TField;
|
|
134
|
+
room: RoomLike<TIO, Doc, TPresence, TStorage, TEvents>;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* !HACK
|
|
138
|
+
* @description This doesn't really do anything but emit states in a Yjs.Provider compatible way.
|
|
139
|
+
* Connections and document syncing are handled by the PluvRoom already.
|
|
140
|
+
* @date May 13, 2025
|
|
141
|
+
*/
|
|
142
|
+
declare class PluvYjsProvider<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null> extends ObservableV2<{
|
|
143
|
+
"connection-close": (event: CloseEvent | null, provider: PluvYjsProvider<TIO, TPresence, TStorage, TEvents, TField>) => void;
|
|
144
|
+
"connection-error": (event: Event, provider: PluvYjsProvider<TIO, TPresence, TStorage, TEvents, TField>) => void;
|
|
145
|
+
status: (event: {
|
|
146
|
+
status: YjsProviderStatus;
|
|
147
|
+
}) => void;
|
|
148
|
+
sync: (state: boolean) => void;
|
|
149
|
+
synced: (state: boolean) => void;
|
|
150
|
+
}> {
|
|
151
|
+
readonly awareness: PluvYjsAwareness<TIO, TPresence, TStorage, TEvents, TField>;
|
|
152
|
+
readonly doc: Doc;
|
|
153
|
+
private readonly _room;
|
|
154
|
+
private readonly _unsubscribe;
|
|
155
|
+
private _synced;
|
|
156
|
+
constructor(params: PluvYjsProviderParams<TIO, TPresence, TStorage, TEvents, TField>);
|
|
157
|
+
get synced(): boolean;
|
|
158
|
+
set synced(state: boolean);
|
|
159
|
+
destroy(): void;
|
|
160
|
+
private _toProviderStatus;
|
|
161
|
+
/**
|
|
162
|
+
* !HACK
|
|
163
|
+
* @description We dgaf about these, since the room manages these already. We're just mirroring
|
|
164
|
+
* the fields that exist in the og provider to make sure everything aligns.
|
|
165
|
+
* @see https://github.com/yjs/y-websocket/blob/master/src/y-websocket.js
|
|
166
|
+
* @date May 13, 2025
|
|
167
|
+
*/
|
|
168
|
+
connect(): void;
|
|
169
|
+
disconnect(): void;
|
|
170
|
+
}
|
|
171
|
+
//#endregion
|
|
172
|
+
//#region src/provider/provider.d.ts
|
|
173
|
+
declare const provider: <TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null>(params: PluvYjsProviderParams<TIO, TPresence, TStorage, TEvents, TField>) => PluvYjsProvider<TIO, TPresence, TStorage, TEvents, TField>;
|
|
174
|
+
//#endregion
|
|
175
|
+
//#region src/text/text.d.ts
|
|
176
|
+
declare const text: (value?: string) => YjsType<Text, string>;
|
|
177
|
+
//#endregion
|
|
178
|
+
//#region src/xmlElement/YjsXmlElement.d.ts
|
|
179
|
+
declare class YjsXmlElement<T extends Record<string, any> = Record<string, any>> extends XmlElement<T> implements YjsType<XmlElement, string> {
|
|
180
|
+
initialValue?: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[];
|
|
181
|
+
constructor(name: string, value: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]);
|
|
182
|
+
__pluvType(): any;
|
|
183
|
+
}
|
|
184
|
+
//#endregion
|
|
185
|
+
//#region src/xmlElement/xmlElement.d.ts
|
|
186
|
+
declare const xmlElement: <T extends Record<string, any> = Record<string, any>>(name: string, children: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]) => YjsXmlElement<T>;
|
|
187
|
+
//#endregion
|
|
188
|
+
//#region src/xmlFragment/YjsXmlFragment.d.ts
|
|
189
|
+
declare class YjsXmlFragment extends XmlFragment implements YjsType<XmlFragment, string> {
|
|
190
|
+
initialValue?: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[];
|
|
191
|
+
constructor(value: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]);
|
|
192
|
+
__pluvType(): any;
|
|
193
|
+
}
|
|
194
|
+
//#endregion
|
|
195
|
+
//#region src/xmlFragment/xmlFragment.d.ts
|
|
196
|
+
declare const xmlFragment: (children: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]) => YjsXmlFragment;
|
|
197
|
+
//#endregion
|
|
198
|
+
//#region src/xmlText/xmlText.d.ts
|
|
199
|
+
declare const xmlText: () => YjsType<XmlText, string>;
|
|
200
|
+
declare namespace yjs_d_exports {
|
|
201
|
+
export { YjsBuilder, YjsType, array, awareness, doc, kind, map, provider, text, xmlElement, xmlFragment, xmlText };
|
|
202
|
+
}
|
|
203
|
+
declare const kind: "yjs";
|
|
204
|
+
//#endregion
|
|
205
|
+
//#region src/index.d.ts
|
|
206
|
+
type YjsLibraryType = typeof yjs_d_exports;
|
|
207
|
+
//#endregion
|
|
208
|
+
export { YjsLibraryType, yjs_d_exports as yjs };
|
|
209
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/array/array.ts","../src/awareness/PluvYjsAwareness.ts","../src/awareness/awareness.ts","../src/doc/builder.ts","../src/doc/CrdtYjsDoc.ts","../src/doc/CrdtYjsDocFactory.ts","../src/doc/doc.ts","../src/map/map.ts","../src/provider/PluvYjsProvider.ts","../src/provider/provider.ts","../src/text/text.ts","../src/xmlElement/YjsXmlElement.ts","../src/xmlElement/xmlElement.ts","../src/xmlFragment/YjsXmlFragment.ts","../src/xmlFragment/xmlFragment.ts","../src/xmlText/xmlText.ts","../src/yjs.ts","../src/index.ts"],"mappings":";;;;;KAEY,QAAQ,wBAAwB,+BAA+B,SACvE,QACA;EAEA;EACA;;;;;;UAOa;EACb;EACA;EACA;;KAGQ;;;;;UAMK;EACb;EACA;;KAGQ,kBACR,kBAAkB,qBAClB,qBAAqB,oBACrB,sBAAsB,YAAY,qBAAqB,YAAY,UAAU;;;cC9BpE,QAAS,mBAClB,QAAO,eAAe,QACvB,QAAQ,MAAO,IAAI;;;UCOL,uBACb,YAAY,uBACZ,kBAAkB,qBAClB,iBAAiB,eAAe,uBAChC,gBAAgB,uBAChB,qBAAqB;EAErB,gBAAgB;EAChB,MAAM,SAAS,KAAK,KAAM,WAAW,UAAU;;cAGtC,iBACT,YAAY,QACZ,kBAAkB,qBAClB,iBAAiB,eAAe,uBAChC,gBAAgB,uBAChB,qBAAqB,iCACf;EACN,SAAS,SAAS,oBAAoB;EACtC,UAAU,WAAW,iBAAiB,KAAK,WAAW,UAAU,SAAS;EACzE,SAAS,SAAS,oBAAoB;;WAEtB,KAAK;mBAEJ;mBACA;mBACA;mBACA;MAEN;MAIA,UAAU,YAAY;EAIrB,YAAA,QAAQ,uBAAuB,KAAK,WAAW,UAAU,SAAS;EA8BvE;EAMA,iBAAiB,kBAAkB,WAAW;EAI9C,cAAc,OAAO,kBAAkB,WAAW;EAUlD,mBAAmB,0BAA0B,kBAAkB,WAAW,SAC7E,OAAO,aACP,OAAO,kBAAkB,WAAW,QAAQ;;;;;;;;EAsBzC,aAAa,YAAY,kBAAkB,WAAW;UAoBrD;UAOA;UA+CA;;;;;;;;WAmBQ,MAAI,SAAA;WACJ;;;;cCtNP,YACT,YAAY,uBACZ,kBAAkB,qBAClB,iBAAiB,eAAe,uBAChC,gBAAgB,uBAChB,qBAAqB,yBAErB,QAAQ,uBAAuB,KAAK,WAAW,UAAU,SAAS,YACnE,iBAAiB,KAAK,WAAW,UAAU,SAAS;;;KCD3C,aAAa,kBAAkB;cAE9B,UAAW,KAAK;EAEf,MAAA,mBAAiB,cACP,QACL,eAAe,MACvB,QAAQ,MAAO,IAAI;EAOlB,IAAA,mBAAiB,cACL,4BACe,aAAa,OAAO,QAChD,QAAQ,MAAK,IAAI,eAAe;EASxB,KAAA,cAAM,iBAAuB,QAAQ;EAQtC,WAAA,cAAM,YACD,aAAc,uBAAwB,aAAc,aAChE,QAAQ;EAQD,YAAA,cAAM,YACD,aAAc,uBAAwB,aAAc,aAChE,QAAQ;EAOG,QAAA,eAAS,QAAQ;;;;KCnC3B,iBAAiB,iBAAiB,eAAe,uBACzD,SAAS,eACR;cAEQ,WAAW,iBAAiB,eAAe,+BAA+B,YACnF,KACA;;EAEO,OAAO;EAKF,YAAA,SAAQ,iBAAiB;EAW9B,kBAAkB,QAAQ;EAY1B,uBAAuB,QAAQ;EA2B/B;EAIA;EAIA;EAKA,IAAI,kBAAkB;EACtB,IAAI,mBAAmB,UAAU,MAAM,OAAO,SAAS;EAOvD;EAIA;EAIA,eAAe,WAAW;EAgC1B;EAMA,UACH,WAAW,QAAQ,2BAA2B,KAAM;EAkBjD;EAiCA,SAAS;EAMT,UAAU,cAAc;EACxB,OAAO,mBAAmB,UAAU,MAAM,OAAO,cAAc,SAAS;EAUxE;;;;cC9NE,kBACT,iBAAiB,eAAe,iCAC1B,uBAAuB,KAAM;WACnB,kBAAkB,SAAS,eAAe;EAE9C,YAAA,kBAAiB,SAAS,eAAe;EAM9C,YAAY,WAAW;EAIvB,WACH,iBAAiB,SAAS,eAAe,WAC1C,kBAAkB;EAId,eACH,kBAAkB,SAAS,eAAe,WAC3C,WAAW;;;;cCzBL,MAAO,iBAAiB,eAAe,oBAChD,SAAQ,SAAS,eAAe,aACjC,kBAAkB;;;cCFR,MAAO,mBAChB,4BAA2B,aAAa,OAAO,UAChD,QAAQ,MAAK,IAAI,eAAe;;;UCElB,sBACb,YAAY,uBACZ,kBAAkB,qBAClB,iBAAiB,eAAe,uBAChC,gBAAgB,uBAChB,qBAAqB;EAErB,gBAAgB;EAChB,MAAM,SAAS,KAAK,KAAM,WAAW,UAAU;;;;;;;;cAStC,gBACT,YAAY,uBACZ,kBAAkB,qBAClB,iBAAiB,eAAe,uBAChC,gBAAgB,uBAChB,qBAAqB,iCACf;EACN,qBACI,OAAO,mBACP,UAAU,gBAAgB,KAAK,WAAW,UAAU,SAAS;EAEjE,qBACI,OAAO,OACP,UAAU,gBAAgB,KAAK,WAAW,UAAU,SAAS;EAEjE,SAAS;IAAS,QAAQ;;EAC1B,OAAO;EACP,SAAS;;WAEO,WAAW,iBAAiB,KAAK,WAAW,UAAU,SAAS;WAC/D,KAAK;mBAEJ;mBACA;UAET;EAEI,YAAA,QAAQ,sBAAsB,KAAK,WAAW,UAAU,SAAS;MAmClE;MAIA,OAAO;EAQX;UAMC;;;;;;;;EAwBD;EACA;;;;cC9HE,WACT,YAAY,uBACZ,kBAAkB,qBAClB,iBAAiB,eAAe,uBAChC,gBAAgB,uBAChB,qBAAqB,yBAErB,QAAQ,sBAAsB,KAAK,WAAW,UAAU,SAAS,YAAO,gBAAA,KAAA,WAAA,UAAA,SAAA;;;cCP/D,OAAQ,mBAAqB,QAAQ;;;cCArC,cAAc,UAAU,sBAAsB,6BAC/C,WAAY,cACT,QAAQ;EAEZ,gBAAgB,aAAc,uBAAwB,aAAc;EAGvE,YAAA,cACA,QAAQ,aAAc,uBAAwB,aAAc;EASzD;;;;cClBE,aAAc,UAAU,sBAAsB,qBACvD,cACA,WAAW,aAAc,uBAAwB,aAAc,eAChE,cAAc;;;cCFJ,uBAAuB,uBAAwB,QAAQ;EACzD,gBAAgB,aAAc,uBAAwB,aAAc;EAE/D,YAAA,QAAQ,aAAc,uBAAwB,aAAc;EAQjE;;;;cCZE,cACT,WAAW,aAAc,uBAAwB,aAAc,eAChE;;;cCDU,eAAc,QAAQ;;;;cCOtB;;;KCPD,wBAAwB"}
|