@hereugo/open-collaboration-monaco 0.3.3

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.
@@ -0,0 +1,606 @@
1
+ // ******************************************************************************
2
+ // Copyright 2024 TypeFox GmbH
3
+ // This program and the accompanying materials are made available under the
4
+ // terms of the MIT License, which is available in the project root.
5
+ // ******************************************************************************
6
+ import { Deferred, DisposableCollection, encodeUserPermission, getUserPermissionKey, resolveReadonly } from '@hereugo/open-collaboration-protocol';
7
+ import * as Y from 'yjs';
8
+ import * as monaco from 'monaco-editor';
9
+ import * as awarenessProtocol from 'y-protocols/awareness';
10
+ import * as types from '@hereugo/open-collaboration-protocol';
11
+ import { LOCAL_ORIGIN, OpenCollaborationYjsProvider, YTextChangeDelta } from '@hereugo/open-collaboration-yjs';
12
+ import { createMutex } from 'lib0/mutex';
13
+ import { debounce } from 'lodash';
14
+ import { DisposablePeer } from './collaboration-peer.js';
15
+ export class CollaborationInstance {
16
+ options;
17
+ yjs = new Y.Doc();
18
+ yjsAwareness;
19
+ yjsProvider;
20
+ yjsMutex = createMutex();
21
+ identity = new Deferred();
22
+ documentDisposables = new Map();
23
+ peers = new Map();
24
+ throttles = new Map();
25
+ decorations = new Map();
26
+ usersChangedCallbacks = [];
27
+ fileNameChangeCallbacks = [];
28
+ _permissions = { readonly: false };
29
+ effectiveReadonly = false;
30
+ currentPath;
31
+ stopPropagation = false;
32
+ _following;
33
+ _fileName;
34
+ previousFileName;
35
+ _workspaceName;
36
+ connection;
37
+ get following() {
38
+ return this._following;
39
+ }
40
+ get connectedUsers() {
41
+ return Array.from(this.peers.values());
42
+ }
43
+ get ownUserData() {
44
+ return this.identity.promise;
45
+ }
46
+ get isHost() {
47
+ return this.options.host;
48
+ }
49
+ get host() {
50
+ return 'host' in this.options.roomClaim ? this.options.roomClaim.host : undefined;
51
+ }
52
+ get roomId() {
53
+ return this.options.roomClaim.roomId;
54
+ }
55
+ get fileName() {
56
+ return this._fileName;
57
+ }
58
+ get workspaceName() {
59
+ return this._workspaceName;
60
+ }
61
+ set workspaceName(_workspaceName) {
62
+ this._workspaceName = _workspaceName;
63
+ }
64
+ /**
65
+ * access token for the room. allow to join or reconnect as host
66
+ */
67
+ get roomToken() {
68
+ return this.options.roomClaim.roomToken;
69
+ }
70
+ onUsersChanged(callback) {
71
+ this.usersChangedCallbacks.push(callback);
72
+ }
73
+ onFileNameChange(callback) {
74
+ this.fileNameChangeCallbacks.push(callback);
75
+ }
76
+ constructor(options) {
77
+ this.options = options;
78
+ this.connection = options.connection;
79
+ this.yjsAwareness = new awarenessProtocol.Awareness(this.yjs);
80
+ this.yjsProvider = new OpenCollaborationYjsProvider(this.options.connection, this.yjs, this.yjsAwareness, {
81
+ resyncTimer: 10_000
82
+ });
83
+ this.yjsProvider.connect();
84
+ this._fileName = 'myFile.txt';
85
+ this._workspaceName = this.roomId;
86
+ this.setupConnectionHandlers();
87
+ this.setupFileSystemHandlers();
88
+ this.options.editor && this.registerEditorEvents();
89
+ }
90
+ setupConnectionHandlers() {
91
+ this.connection.peer.onJoinRequest(async (_, user) => {
92
+ const result = await this.options.callbacks.onUserRequestsAccess(user);
93
+ return result ? {
94
+ workspace: {
95
+ name: this.workspaceName,
96
+ folders: [this.workspaceName]
97
+ }
98
+ } : undefined;
99
+ });
100
+ this.connection.room.onJoin(async (_, peer) => {
101
+ this.peers.set(peer.id, new DisposablePeer(this.yjsAwareness, peer));
102
+ const initData = {
103
+ protocol: '0.0.1',
104
+ host: await this.identity.promise,
105
+ guests: Array.from(this.peers.values()).map(e => e.peer),
106
+ capabilities: {},
107
+ permissions: {
108
+ ...this._permissions,
109
+ [getUserPermissionKey(peer.id)]: encodeUserPermission(true)
110
+ },
111
+ workspace: {
112
+ name: this.workspaceName,
113
+ folders: [this.workspaceName]
114
+ }
115
+ };
116
+ this.connection.peer.init(peer.id, initData);
117
+ this.notifyUsersChanged();
118
+ });
119
+ this.connection.room.onLeave(async (_, peer) => {
120
+ const disposable = this.peers.get(peer.id);
121
+ if (disposable) {
122
+ this.peers.delete(peer.id);
123
+ this.notifyUsersChanged();
124
+ }
125
+ this.rerenderPresence();
126
+ });
127
+ this.connection.peer.onInfo((_, peer) => {
128
+ this.yjsAwareness.setLocalStateField('peer', peer.id);
129
+ this.identity.resolve(peer);
130
+ });
131
+ this.connection.peer.onInit(async (_, initData) => {
132
+ await this.initialize(initData);
133
+ });
134
+ this.connection.room.onPermissions((_, permissions) => {
135
+ void this.applyPermissionsUpdate(permissions);
136
+ });
137
+ }
138
+ async applyPermissionsUpdate(permissions) {
139
+ this._permissions = permissions;
140
+ const peer = await this.identity.promise;
141
+ const readonly = resolveReadonly(permissions, peer.id);
142
+ this.effectiveReadonly = readonly;
143
+ this.updateEditorReadonly(readonly);
144
+ }
145
+ updateEditorReadonly(readonly) {
146
+ if (this.options.editor) {
147
+ this.options.editor.updateOptions({ readOnly: readonly });
148
+ }
149
+ }
150
+ setupFileSystemHandlers() {
151
+ this.connection.fs.onReadFile(this.handleReadFile.bind(this));
152
+ this.connection.fs.onStat(this.handleStat.bind(this));
153
+ this.connection.fs.onReaddir(this.handleReaddir.bind(this));
154
+ this.connection.fs.onChange(this.handleFileChange.bind(this));
155
+ }
156
+ async handleReadFile(_, path) {
157
+ if (path === this._fileName && this.options.editor) {
158
+ const text = this.options.editor.getModel()?.getValue();
159
+ const encoder = new TextEncoder();
160
+ const content = encoder.encode(text);
161
+ return { content };
162
+ }
163
+ throw new Error('Could not read file');
164
+ }
165
+ async handleStat(_, path) {
166
+ return {
167
+ type: path === this.workspaceName ? types.FileType.Directory : types.FileType.File,
168
+ mtime: 0,
169
+ ctime: 0,
170
+ size: 0
171
+ };
172
+ }
173
+ async handleReaddir(_, path) {
174
+ const uri = this.getResourceUri(path);
175
+ if (uri) {
176
+ return {
177
+ [this._fileName]: types.FileType.File
178
+ };
179
+ }
180
+ throw new Error('Could not read directory');
181
+ }
182
+ handleFileChange(_, change) {
183
+ const deleteChange = change.changes.find(c => c.type === types.FileChangeEventType.Delete);
184
+ const createChange = change.changes.find(c => c.type === types.FileChangeEventType.Create);
185
+ if (deleteChange && createChange) {
186
+ this._fileName = createChange.path;
187
+ const model = this.options.editor?.getModel();
188
+ if (model) {
189
+ this.registerTextDocument(model);
190
+ }
191
+ }
192
+ }
193
+ notifyUsersChanged() {
194
+ this.usersChangedCallbacks.forEach(callback => callback());
195
+ }
196
+ notifyFileNameChanged(fileName) {
197
+ this.fileNameChangeCallbacks.forEach(callback => callback(fileName));
198
+ }
199
+ setEditor(editor) {
200
+ this.options.editor = editor;
201
+ this.updateEditorReadonly(this.effectiveReadonly);
202
+ this.registerEditorEvents();
203
+ }
204
+ async setFileName(fileName) {
205
+ const oldFileName = this._fileName;
206
+ this._fileName = fileName;
207
+ const model = this.options.editor?.getModel();
208
+ if (model) {
209
+ await this.registerTextDocument(model);
210
+ this.connection.fs.change({
211
+ changes: [
212
+ {
213
+ type: types.FileChangeEventType.Create,
214
+ path: fileName
215
+ },
216
+ {
217
+ type: types.FileChangeEventType.Delete,
218
+ path: oldFileName
219
+ }
220
+ ]
221
+ });
222
+ }
223
+ }
224
+ dispose() {
225
+ this.peers.clear();
226
+ this.documentDisposables.forEach(e => e.dispose());
227
+ this.documentDisposables.clear();
228
+ }
229
+ leaveRoom() {
230
+ this.options.connection.room.leave();
231
+ }
232
+ getCurrentConnection() {
233
+ return this.options.connection;
234
+ }
235
+ pushDocumentDisposable(path, disposable) {
236
+ let disposables = this.documentDisposables.get(path);
237
+ if (!disposables) {
238
+ disposables = new DisposableCollection();
239
+ this.documentDisposables.set(path, disposables);
240
+ }
241
+ disposables.push(disposable);
242
+ }
243
+ registerEditorEvents() {
244
+ if (!this.options.editor) {
245
+ return;
246
+ }
247
+ const text = this.options.editor.getModel();
248
+ if (text) {
249
+ this.registerTextDocument(text);
250
+ }
251
+ this.options.editor.onDidChangeModelContent(event => {
252
+ if (text && !this.stopPropagation) {
253
+ this.updateTextDocument(event, text);
254
+ }
255
+ });
256
+ this.options.editor.onDidChangeCursorSelection(() => {
257
+ if (this.options.editor && !this.stopPropagation) {
258
+ this.updateTextSelection(this.options.editor);
259
+ }
260
+ });
261
+ const awarenessDebounce = debounce(() => {
262
+ this.rerenderPresence();
263
+ }, 2000);
264
+ this.yjsAwareness.on('change', async (_, origin) => {
265
+ if (origin !== LOCAL_ORIGIN) {
266
+ this.updateFollow();
267
+ this.rerenderPresence();
268
+ awarenessDebounce();
269
+ }
270
+ });
271
+ }
272
+ followUser(id) {
273
+ this._following = id;
274
+ if (id) {
275
+ this.updateFollow();
276
+ }
277
+ }
278
+ updateFollow() {
279
+ if (this._following) {
280
+ let userState = undefined;
281
+ const states = this.yjsAwareness.getStates();
282
+ for (const state of states.values()) {
283
+ const peer = this.peers.get(state.peer);
284
+ if (peer?.peer.id === this._following) {
285
+ userState = state;
286
+ }
287
+ }
288
+ if (userState) {
289
+ if (types.ClientTextSelection.is(userState.selection)) {
290
+ this.followSelection(userState.selection);
291
+ }
292
+ }
293
+ }
294
+ }
295
+ async followSelection(selection) {
296
+ if (!this.options.editor) {
297
+ return;
298
+ }
299
+ const uri = this.getResourceUri(selection.path);
300
+ const text = this.yjs.getText(selection.path);
301
+ const prevPath = this.currentPath;
302
+ this.currentPath = selection.path;
303
+ if (prevPath !== selection.path) {
304
+ this.stopPropagation = true;
305
+ this.options.editor.setValue(text.toString());
306
+ this.stopPropagation = false;
307
+ }
308
+ const filename = this.getHostPath(selection.path);
309
+ if (this._fileName !== filename) {
310
+ this._fileName = filename;
311
+ this.previousFileName = filename;
312
+ this.notifyFileNameChanged(this._fileName);
313
+ }
314
+ this.registerTextObserver(selection.path, this.options.editor.getModel(), text);
315
+ if (uri && selection.visibleRanges && selection.visibleRanges.length > 0) {
316
+ const visibleRange = selection.visibleRanges[0];
317
+ const range = new monaco.Range(visibleRange.start.line, visibleRange.start.character, visibleRange.end.line, visibleRange.end.character);
318
+ this.options.editor && this.options.editor.revealRange(range);
319
+ }
320
+ }
321
+ updateTextSelection(editor) {
322
+ const document = editor.getModel();
323
+ const selections = editor.getSelections();
324
+ if (!document || !selections) {
325
+ return;
326
+ }
327
+ const path = this.currentPath;
328
+ if (path) {
329
+ const ytext = this.yjs.getText(path);
330
+ const textSelections = [];
331
+ for (const selection of selections) {
332
+ const start = document.getOffsetAt(selection.getStartPosition());
333
+ const end = document.getOffsetAt(selection.getEndPosition());
334
+ const direction = selection.getDirection() === monaco.SelectionDirection.RTL
335
+ ? types.SelectionDirection.RightToLeft
336
+ : types.SelectionDirection.LeftToRight;
337
+ const editorSelection = {
338
+ start: Y.createRelativePositionFromTypeIndex(ytext, start),
339
+ end: Y.createRelativePositionFromTypeIndex(ytext, end),
340
+ direction
341
+ };
342
+ textSelections.push(editorSelection);
343
+ }
344
+ const textSelection = {
345
+ path,
346
+ textSelections,
347
+ visibleRanges: editor.getVisibleRanges().map(range => ({
348
+ start: {
349
+ line: range.startLineNumber,
350
+ character: range.startColumn
351
+ },
352
+ end: {
353
+ line: range.endLineNumber,
354
+ character: range.endColumn
355
+ }
356
+ }))
357
+ };
358
+ this.setSharedSelection(textSelection);
359
+ }
360
+ }
361
+ async registerTextDocument(document) {
362
+ const uri = this.getResourceUri(`${this._workspaceName}/${this._fileName}`);
363
+ const path = this.getProtocolPath(uri);
364
+ if (!this.currentPath || this.currentPath !== path) {
365
+ this.currentPath = path;
366
+ }
367
+ if (path) {
368
+ const text = document.getValue();
369
+ const yjsText = this.yjs.getText(path);
370
+ let ytextContent = '';
371
+ if (this.isHost) {
372
+ this.yjs.transact(() => {
373
+ yjsText.delete(0, yjsText.length);
374
+ yjsText.insert(0, text);
375
+ });
376
+ ytextContent = yjsText.toString();
377
+ }
378
+ else {
379
+ ytextContent = await this.readFile();
380
+ if (this._fileName !== this.previousFileName) {
381
+ this.previousFileName = this._fileName;
382
+ this.notifyFileNameChanged(this._fileName);
383
+ }
384
+ }
385
+ if (text !== ytextContent) {
386
+ this.yjsMutex(() => {
387
+ document.setValue(ytextContent);
388
+ });
389
+ }
390
+ this.registerTextObserver(path, document, yjsText);
391
+ }
392
+ }
393
+ registerTextObserver(path, document, yjsText) {
394
+ const textObserver = this.documentDisposables.get(path);
395
+ if (textObserver) {
396
+ textObserver.dispose();
397
+ }
398
+ const resyncThrottle = this.getOrCreateThrottle(path, document);
399
+ const observer = (textEvent) => {
400
+ this.yjsMutex(async () => {
401
+ if (this.options.editor) {
402
+ const changes = YTextChangeDelta.toChanges(textEvent.delta);
403
+ const edits = this.createEditsFromTextEvent(changes, document);
404
+ this.updateDocument(document, edits);
405
+ resyncThrottle();
406
+ }
407
+ });
408
+ };
409
+ yjsText.observe(observer);
410
+ this.pushDocumentDisposable(path, { dispose: () => yjsText.unobserve(observer) });
411
+ }
412
+ updateDocument(document, edits) {
413
+ document.pushStackElement();
414
+ document.pushEditOperations(null, edits, () => null);
415
+ document.pushStackElement();
416
+ }
417
+ createEditsFromTextEvent(changes, document) {
418
+ const edits = [];
419
+ changes.forEach(change => {
420
+ const start = document.getPositionAt(change.start);
421
+ const end = document.getPositionAt(change.end);
422
+ edits.push({
423
+ range: new monaco.Range(start.lineNumber, start.column, end.lineNumber, end.column),
424
+ text: change.text
425
+ });
426
+ });
427
+ return edits;
428
+ }
429
+ updateTextDocument(event, document) {
430
+ if (this.effectiveReadonly) {
431
+ return;
432
+ }
433
+ const path = this.currentPath;
434
+ if (path) {
435
+ this.yjsMutex(() => {
436
+ const ytext = this.yjs.getText(path);
437
+ this.yjs.transact(() => {
438
+ for (const change of event.changes) {
439
+ ytext.delete(change.rangeOffset, change.rangeLength);
440
+ ytext.insert(change.rangeOffset, change.text);
441
+ }
442
+ });
443
+ this.getOrCreateThrottle(path, document)();
444
+ });
445
+ }
446
+ }
447
+ getOrCreateThrottle(path, document) {
448
+ let value = this.throttles.get(path);
449
+ if (!value) {
450
+ value = debounce(() => {
451
+ this.yjsMutex(() => {
452
+ const yjsText = this.yjs.getText(path);
453
+ const newContent = yjsText.toString();
454
+ if (newContent !== document.getValue()) {
455
+ this.updateDocumentContent(document, newContent);
456
+ }
457
+ });
458
+ }, 100, {
459
+ leading: false,
460
+ trailing: true
461
+ });
462
+ this.throttles.set(path, value);
463
+ }
464
+ return value;
465
+ }
466
+ updateDocumentContent(document, newContent) {
467
+ this.yjsMutex(() => {
468
+ if (this.options.editor) {
469
+ const edits = [{
470
+ range: document.getFullModelRange(),
471
+ text: newContent
472
+ }];
473
+ this.updateDocument(document, edits);
474
+ }
475
+ });
476
+ }
477
+ rerenderPresence() {
478
+ const states = this.yjsAwareness.getStates();
479
+ for (const [clientID, state] of states.entries()) {
480
+ if (clientID === this.yjs.clientID) {
481
+ // Ignore own awareness state
482
+ continue;
483
+ }
484
+ const peerId = state.peer;
485
+ const peer = this.peers.get(peerId);
486
+ if (!state.selection || !peer) {
487
+ continue;
488
+ }
489
+ if (!types.ClientTextSelection.is(state.selection)) {
490
+ continue;
491
+ }
492
+ const { path, textSelections } = state.selection;
493
+ const selection = textSelections[0];
494
+ if (!selection) {
495
+ continue;
496
+ }
497
+ const uri = this.getResourceUri(path);
498
+ if (uri && this.options.editor) {
499
+ const model = this.options.editor.getModel();
500
+ const forward = selection.direction === 1;
501
+ let startIndex = Y.createAbsolutePositionFromRelativePosition(selection.start, this.yjs);
502
+ let endIndex = Y.createAbsolutePositionFromRelativePosition(selection.end, this.yjs);
503
+ if (model && startIndex && endIndex) {
504
+ if (startIndex.index > endIndex.index) {
505
+ [startIndex, endIndex] = [endIndex, startIndex];
506
+ }
507
+ const start = model.getPositionAt(startIndex.index);
508
+ const end = model.getPositionAt(endIndex.index);
509
+ const inverted = (forward && end.lineNumber === 1) || (!forward && start.lineNumber === 1);
510
+ const range = {
511
+ startLineNumber: start.lineNumber,
512
+ startColumn: start.column,
513
+ endLineNumber: end.lineNumber,
514
+ endColumn: end.column
515
+ };
516
+ const contentClassNames = [peer.decoration.cursorClassName];
517
+ if (inverted) {
518
+ contentClassNames.push(peer.decoration.cursorInvertedClassName);
519
+ }
520
+ this.setDecorations(peer, [{
521
+ range,
522
+ options: {
523
+ className: peer.decoration.selectionClassName,
524
+ beforeContentClassName: !forward ? contentClassNames.join(' ') : undefined,
525
+ afterContentClassName: forward ? contentClassNames.join(' ') : undefined,
526
+ stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges
527
+ }
528
+ }]);
529
+ }
530
+ }
531
+ }
532
+ }
533
+ setDecorations(peer, decorations) {
534
+ if (this.decorations.has(peer)) {
535
+ this.decorations.get(peer)?.set(decorations);
536
+ }
537
+ else if (this.options.editor) {
538
+ this.decorations.set(peer, this.options.editor.createDecorationsCollection(decorations));
539
+ }
540
+ }
541
+ setSharedSelection(selection) {
542
+ this.yjsAwareness.setLocalStateField('selection', selection);
543
+ }
544
+ updateSelectionPath(newPath) {
545
+ const currentState = this.yjsAwareness.getLocalState();
546
+ if (currentState?.selection && types.ClientTextSelection.is(currentState.selection)) {
547
+ const newSelection = {
548
+ ...currentState.selection,
549
+ path: newPath
550
+ };
551
+ this.setSharedSelection(newSelection);
552
+ }
553
+ }
554
+ createSelectionFromRelative(selection, model) {
555
+ const start = Y.createAbsolutePositionFromRelativePosition(selection.start, this.yjs);
556
+ const end = Y.createAbsolutePositionFromRelativePosition(selection.end, this.yjs);
557
+ if (start && end) {
558
+ let anchor = model.getPositionAt(start.index);
559
+ let head = model.getPositionAt(end.index);
560
+ if (selection.direction === types.SelectionDirection.RightToLeft) {
561
+ [anchor, head] = [head, anchor];
562
+ }
563
+ return new monaco.Selection(anchor.lineNumber, anchor.column, head.lineNumber, head.column);
564
+ }
565
+ return undefined;
566
+ }
567
+ getHostPath(path) {
568
+ // When creating a URI as a guest, we always prepend it with the name of the workspace
569
+ // This just removes the workspace name from the path to get the path expected by the protocol
570
+ const subpath = path.substring(1).split('/');
571
+ return subpath.slice(1).join('/');
572
+ }
573
+ async initialize(data) {
574
+ for (const peer of [data.host, ...data.guests]) {
575
+ this.peers.set(peer.id, new DisposablePeer(this.yjsAwareness, peer));
576
+ }
577
+ await this.applyPermissionsUpdate(data.permissions);
578
+ this.workspaceName = data.workspace.name;
579
+ this.notifyUsersChanged();
580
+ }
581
+ getProtocolPath(uri) {
582
+ if (!uri) {
583
+ return undefined;
584
+ }
585
+ return uri.path.startsWith('/') ? uri.path.substring(1) : uri.path;
586
+ }
587
+ getResourceUri(path) {
588
+ return new monaco.Uri().with({ path });
589
+ }
590
+ async readFile() {
591
+ if (!this.currentPath) {
592
+ return '';
593
+ }
594
+ const path = this.getHostPath(this.currentPath);
595
+ if (this.yjs.share.has(path)) {
596
+ const stringValue = this.yjs.getText(path);
597
+ return stringValue.toString();
598
+ }
599
+ else {
600
+ const file = await this.connection.fs.readFile(this.host?.id, path);
601
+ const decoder = new TextDecoder();
602
+ return decoder.decode(file.content);
603
+ }
604
+ }
605
+ }
606
+ //# sourceMappingURL=collaboration-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collaboration-instance.js","sourceRoot":"","sources":["../src/collaboration-instance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import * as types from '@hereugo/open-collaboration-protocol';
2
+ import * as awarenessProtocol from 'y-protocols/awareness';
3
+ type PeerDecorationOptions = {
4
+ selectionClassName: string;
5
+ cursorClassName: string;
6
+ cursorInvertedClassName: string;
7
+ };
8
+ export declare class DisposablePeer {
9
+ readonly peer: types.Peer;
10
+ color: string | undefined;
11
+ private yjsAwareness;
12
+ readonly decoration: PeerDecorationOptions;
13
+ get clientId(): number | undefined;
14
+ get lastUpdated(): number | undefined;
15
+ constructor(yAwareness: awarenessProtocol.Awareness, peer: types.Peer);
16
+ private createDecorations;
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=collaboration-peer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collaboration-peer.d.ts","sourceRoot":"","sources":["../src/collaboration-peer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,sCAAsC,CAAC;AAC9D,OAAO,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAE3D,KAAK,qBAAqB,GAAG;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,qBAAa,cAAc;IAEvB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1B,OAAO,CAAC,YAAY,CAA8B;IAElD,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;IAE3C,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAQjC;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CASpC;gBAEW,UAAU,EAAE,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;IAMrE,OAAO,CAAC,iBAAiB;CA+C5B"}