@textbus/collaborate 2.0.0-beta.3 → 2.0.0-beta.33
Sign up to get free protection for your applications and to get access to all the features.
- package/bundles/{collab/collaborate-cursor.d.ts → collaborate-cursor.d.ts} +17 -6
- package/bundles/collaborate-cursor.js +323 -0
- package/bundles/collaborate.d.ts +5 -5
- package/bundles/collaborate.js +59 -43
- package/bundles/fixed-caret.plugin.d.ts +9 -0
- package/bundles/fixed-caret.plugin.js +41 -0
- package/bundles/public-api.d.ts +4 -1
- package/bundles/public-api.js +16 -2
- package/bundles/unknown.component.d.ts +1 -0
- package/bundles/unknown.component.js +22 -0
- package/package.json +6 -6
- package/src/collaborate-cursor.ts +289 -0
- package/src/collaborate.ts +64 -52
- package/src/fixed-caret.plugin.ts +35 -0
- package/src/public-api.ts +18 -1
- package/src/unknown.component.ts +22 -0
- package/bundles/collab/_api.d.ts +0 -1
- package/bundles/collab/_api.js +0 -2
- package/bundles/collab/collaborate-cursor.js +0 -245
- package/src/collab/_api.ts +0 -1
- package/src/collab/collaborate-cursor.ts +0 -225
@@ -1,33 +1,44 @@
|
|
1
1
|
import { SelectionBridge } from '@textbus/browser';
|
2
|
-
import { Selection, SelectionPaths } from '@textbus/core';
|
2
|
+
import { Selection, SelectionPaths, Range as TBRange } from '@textbus/core';
|
3
3
|
export interface RemoteSelection {
|
4
4
|
color: string;
|
5
5
|
username: string;
|
6
6
|
paths: SelectionPaths;
|
7
7
|
}
|
8
|
-
export interface
|
9
|
-
color: string;
|
10
|
-
username: string;
|
8
|
+
export interface Rect {
|
11
9
|
x: number;
|
12
10
|
y: number;
|
13
11
|
width: number;
|
14
12
|
height: number;
|
15
13
|
}
|
14
|
+
export interface SelectionRect extends Rect {
|
15
|
+
color: string;
|
16
|
+
username: string;
|
17
|
+
}
|
16
18
|
export interface RemoteSelectionCursor {
|
17
19
|
cursor: HTMLElement;
|
18
20
|
anchor: HTMLElement;
|
19
21
|
userTip: HTMLElement;
|
20
22
|
}
|
23
|
+
export declare abstract class CollaborateCursorAwarenessDelegate {
|
24
|
+
abstract getRects(range: TBRange, nativeRange: Range): false | Rect[];
|
25
|
+
}
|
21
26
|
export declare class CollaborateCursor {
|
22
27
|
private container;
|
23
|
-
private
|
28
|
+
private awarenessDelegate;
|
24
29
|
private nativeSelection;
|
25
30
|
private selection;
|
31
|
+
private host;
|
32
|
+
private canvasContainer;
|
26
33
|
private canvas;
|
27
34
|
private context;
|
28
35
|
private tooltips;
|
29
36
|
private onRectsChange;
|
30
|
-
|
37
|
+
private subscription;
|
38
|
+
private currentSelection;
|
39
|
+
constructor(container: HTMLElement, awarenessDelegate: CollaborateCursorAwarenessDelegate, nativeSelection: SelectionBridge, selection: Selection);
|
40
|
+
refresh(): void;
|
41
|
+
destroy(): void;
|
31
42
|
draw(paths: RemoteSelection[]): void;
|
32
43
|
private drawUserCursor;
|
33
44
|
private getUserCursor;
|
@@ -0,0 +1,323 @@
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
6
|
+
};
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
9
|
+
};
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
12
|
+
};
|
13
|
+
import { Inject, Injectable, Optional } from '@tanbo/di';
|
14
|
+
import { createElement, VIEW_CONTAINER, getLayoutRectByRange, SelectionBridge } from '@textbus/browser';
|
15
|
+
import { Selection } from '@textbus/core';
|
16
|
+
import { fromEvent, Subject, Subscription } from '@tanbo/stream';
|
17
|
+
export class CollaborateCursorAwarenessDelegate {
|
18
|
+
}
|
19
|
+
let CollaborateCursor = class CollaborateCursor {
|
20
|
+
constructor(container, awarenessDelegate, nativeSelection, selection) {
|
21
|
+
Object.defineProperty(this, "container", {
|
22
|
+
enumerable: true,
|
23
|
+
configurable: true,
|
24
|
+
writable: true,
|
25
|
+
value: container
|
26
|
+
});
|
27
|
+
Object.defineProperty(this, "awarenessDelegate", {
|
28
|
+
enumerable: true,
|
29
|
+
configurable: true,
|
30
|
+
writable: true,
|
31
|
+
value: awarenessDelegate
|
32
|
+
});
|
33
|
+
Object.defineProperty(this, "nativeSelection", {
|
34
|
+
enumerable: true,
|
35
|
+
configurable: true,
|
36
|
+
writable: true,
|
37
|
+
value: nativeSelection
|
38
|
+
});
|
39
|
+
Object.defineProperty(this, "selection", {
|
40
|
+
enumerable: true,
|
41
|
+
configurable: true,
|
42
|
+
writable: true,
|
43
|
+
value: selection
|
44
|
+
});
|
45
|
+
Object.defineProperty(this, "host", {
|
46
|
+
enumerable: true,
|
47
|
+
configurable: true,
|
48
|
+
writable: true,
|
49
|
+
value: createElement('div', {
|
50
|
+
styles: {
|
51
|
+
position: 'absolute',
|
52
|
+
left: 0,
|
53
|
+
top: 0,
|
54
|
+
width: '100%',
|
55
|
+
height: '100%',
|
56
|
+
pointerEvents: 'none',
|
57
|
+
zIndex: 1
|
58
|
+
}
|
59
|
+
})
|
60
|
+
});
|
61
|
+
Object.defineProperty(this, "canvasContainer", {
|
62
|
+
enumerable: true,
|
63
|
+
configurable: true,
|
64
|
+
writable: true,
|
65
|
+
value: createElement('div', {
|
66
|
+
styles: {
|
67
|
+
position: 'absolute',
|
68
|
+
left: 0,
|
69
|
+
top: 0,
|
70
|
+
width: '100%',
|
71
|
+
height: '100%',
|
72
|
+
overflow: 'hidden'
|
73
|
+
}
|
74
|
+
})
|
75
|
+
});
|
76
|
+
Object.defineProperty(this, "canvas", {
|
77
|
+
enumerable: true,
|
78
|
+
configurable: true,
|
79
|
+
writable: true,
|
80
|
+
value: createElement('canvas', {
|
81
|
+
styles: {
|
82
|
+
position: 'absolute',
|
83
|
+
opacity: 0.5,
|
84
|
+
left: 0,
|
85
|
+
top: 0,
|
86
|
+
width: '100%',
|
87
|
+
height: document.documentElement.clientHeight + 'px',
|
88
|
+
pointerEvents: 'none',
|
89
|
+
}
|
90
|
+
})
|
91
|
+
});
|
92
|
+
Object.defineProperty(this, "context", {
|
93
|
+
enumerable: true,
|
94
|
+
configurable: true,
|
95
|
+
writable: true,
|
96
|
+
value: this.canvas.getContext('2d')
|
97
|
+
});
|
98
|
+
Object.defineProperty(this, "tooltips", {
|
99
|
+
enumerable: true,
|
100
|
+
configurable: true,
|
101
|
+
writable: true,
|
102
|
+
value: createElement('div', {
|
103
|
+
styles: {
|
104
|
+
position: 'absolute',
|
105
|
+
left: 0,
|
106
|
+
top: 0,
|
107
|
+
width: '100%',
|
108
|
+
height: '100%',
|
109
|
+
pointerEvents: 'none',
|
110
|
+
fontSize: '12px',
|
111
|
+
zIndex: 10
|
112
|
+
}
|
113
|
+
})
|
114
|
+
});
|
115
|
+
Object.defineProperty(this, "onRectsChange", {
|
116
|
+
enumerable: true,
|
117
|
+
configurable: true,
|
118
|
+
writable: true,
|
119
|
+
value: new Subject()
|
120
|
+
});
|
121
|
+
Object.defineProperty(this, "subscription", {
|
122
|
+
enumerable: true,
|
123
|
+
configurable: true,
|
124
|
+
writable: true,
|
125
|
+
value: new Subscription()
|
126
|
+
});
|
127
|
+
Object.defineProperty(this, "currentSelection", {
|
128
|
+
enumerable: true,
|
129
|
+
configurable: true,
|
130
|
+
writable: true,
|
131
|
+
value: []
|
132
|
+
});
|
133
|
+
this.canvasContainer.append(this.canvas);
|
134
|
+
this.host.append(this.canvasContainer, this.tooltips);
|
135
|
+
container.prepend(this.host);
|
136
|
+
this.subscription.add(this.onRectsChange.subscribe(rects => {
|
137
|
+
for (const rect of rects) {
|
138
|
+
this.context.fillStyle = rect.color;
|
139
|
+
this.context.beginPath();
|
140
|
+
this.context.rect(rect.x, rect.y, rect.width, rect.height);
|
141
|
+
this.context.fill();
|
142
|
+
this.context.closePath();
|
143
|
+
}
|
144
|
+
}), fromEvent(window, 'resize').subscribe(() => {
|
145
|
+
this.canvas.style.height = document.documentElement.clientHeight + 'px';
|
146
|
+
this.refresh();
|
147
|
+
}));
|
148
|
+
}
|
149
|
+
refresh() {
|
150
|
+
this.draw(this.currentSelection);
|
151
|
+
}
|
152
|
+
destroy() {
|
153
|
+
this.subscription.unsubscribe();
|
154
|
+
}
|
155
|
+
draw(paths) {
|
156
|
+
this.currentSelection = paths;
|
157
|
+
const containerRect = this.container.getBoundingClientRect();
|
158
|
+
this.canvas.style.top = containerRect.y * -1 + 'px';
|
159
|
+
this.canvas.width = this.canvas.offsetWidth;
|
160
|
+
this.canvas.height = this.canvas.offsetHeight;
|
161
|
+
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
162
|
+
const users = [];
|
163
|
+
paths.filter(i => {
|
164
|
+
return i.paths.anchor.length && i.paths.focus.length;
|
165
|
+
}).forEach(item => {
|
166
|
+
const anchorPaths = [...item.paths.anchor];
|
167
|
+
const focusPaths = [...item.paths.focus];
|
168
|
+
const anchorOffset = anchorPaths.pop();
|
169
|
+
const anchorSlot = this.selection.findSlotByPaths(anchorPaths);
|
170
|
+
const focusOffset = focusPaths.pop();
|
171
|
+
const focusSlot = this.selection.findSlotByPaths(focusPaths);
|
172
|
+
if (!anchorSlot || !focusSlot) {
|
173
|
+
return;
|
174
|
+
}
|
175
|
+
const { focus, anchor } = this.nativeSelection.getPositionByRange({
|
176
|
+
focusOffset,
|
177
|
+
anchorOffset,
|
178
|
+
focusSlot,
|
179
|
+
anchorSlot
|
180
|
+
});
|
181
|
+
if (!focus || !anchor) {
|
182
|
+
return;
|
183
|
+
}
|
184
|
+
const nativeRange = document.createRange();
|
185
|
+
nativeRange.setStart(anchor.node, anchor.offset);
|
186
|
+
nativeRange.setEnd(focus.node, focus.offset);
|
187
|
+
if ((anchor.node !== focus.node || anchor.offset !== focus.offset) && nativeRange.collapsed) {
|
188
|
+
nativeRange.setStart(focus.node, focus.offset);
|
189
|
+
nativeRange.setEnd(anchor.node, anchor.offset);
|
190
|
+
}
|
191
|
+
let rects = false;
|
192
|
+
if (this.awarenessDelegate) {
|
193
|
+
rects = this.awarenessDelegate.getRects({
|
194
|
+
focusOffset,
|
195
|
+
anchorOffset,
|
196
|
+
focusSlot,
|
197
|
+
anchorSlot
|
198
|
+
}, nativeRange);
|
199
|
+
}
|
200
|
+
if (!rects) {
|
201
|
+
rects = nativeRange.getClientRects();
|
202
|
+
}
|
203
|
+
const selectionRects = [];
|
204
|
+
for (let i = rects.length - 1; i >= 0; i--) {
|
205
|
+
const rect = rects[i];
|
206
|
+
selectionRects.push({
|
207
|
+
color: item.color,
|
208
|
+
username: item.username,
|
209
|
+
x: rect.x - containerRect.x,
|
210
|
+
y: rect.y,
|
211
|
+
width: rect.width,
|
212
|
+
height: rect.height,
|
213
|
+
});
|
214
|
+
}
|
215
|
+
this.onRectsChange.next(selectionRects);
|
216
|
+
const cursorRange = nativeRange.cloneRange();
|
217
|
+
cursorRange.setStart(focus.node, focus.offset);
|
218
|
+
cursorRange.collapse(true);
|
219
|
+
const cursorRect = getLayoutRectByRange(cursorRange);
|
220
|
+
users.push({
|
221
|
+
username: item.username,
|
222
|
+
color: item.color,
|
223
|
+
x: cursorRect.x - containerRect.x,
|
224
|
+
y: cursorRect.y - containerRect.y,
|
225
|
+
width: 2,
|
226
|
+
height: cursorRect.height
|
227
|
+
});
|
228
|
+
});
|
229
|
+
this.drawUserCursor(users);
|
230
|
+
}
|
231
|
+
drawUserCursor(rects) {
|
232
|
+
for (let i = 0; i < rects.length; i++) {
|
233
|
+
const rect = rects[i];
|
234
|
+
const { cursor, userTip, anchor } = this.getUserCursor(i);
|
235
|
+
Object.assign(cursor.style, {
|
236
|
+
left: rect.x + 'px',
|
237
|
+
top: rect.y + 'px',
|
238
|
+
width: rect.width + 'px',
|
239
|
+
height: rect.height + 'px',
|
240
|
+
background: rect.color,
|
241
|
+
display: 'block'
|
242
|
+
});
|
243
|
+
anchor.style.background = rect.color;
|
244
|
+
userTip.innerText = rect.username;
|
245
|
+
userTip.style.background = rect.color;
|
246
|
+
}
|
247
|
+
for (let i = rects.length; i < this.tooltips.children.length; i++) {
|
248
|
+
this.tooltips.removeChild(this.tooltips.children[i]);
|
249
|
+
}
|
250
|
+
}
|
251
|
+
getUserCursor(index) {
|
252
|
+
let child = this.tooltips.children[index];
|
253
|
+
if (child) {
|
254
|
+
const anchor = child.children[0];
|
255
|
+
return {
|
256
|
+
cursor: child,
|
257
|
+
anchor,
|
258
|
+
userTip: anchor.children[0]
|
259
|
+
};
|
260
|
+
}
|
261
|
+
const userTip = createElement('span', {
|
262
|
+
styles: {
|
263
|
+
position: 'absolute',
|
264
|
+
display: 'none',
|
265
|
+
left: '50%',
|
266
|
+
transform: 'translateX(-50%)',
|
267
|
+
marginBottom: '2px',
|
268
|
+
bottom: '100%',
|
269
|
+
whiteSpace: 'nowrap',
|
270
|
+
color: '#fff',
|
271
|
+
boxShadow: '0 1px 2px rgba(0,0,0,.1)',
|
272
|
+
borderRadius: '3px',
|
273
|
+
padding: '3px 5px',
|
274
|
+
pointerEvents: 'none',
|
275
|
+
}
|
276
|
+
});
|
277
|
+
const anchor = createElement('span', {
|
278
|
+
styles: {
|
279
|
+
position: 'absolute',
|
280
|
+
top: '-2px',
|
281
|
+
left: '-2px',
|
282
|
+
width: '6px',
|
283
|
+
height: '6px',
|
284
|
+
pointerEvents: 'auto',
|
285
|
+
pointer: 'cursor',
|
286
|
+
},
|
287
|
+
children: [userTip],
|
288
|
+
on: {
|
289
|
+
mouseenter() {
|
290
|
+
userTip.style.display = 'block';
|
291
|
+
},
|
292
|
+
mouseleave() {
|
293
|
+
userTip.style.display = 'none';
|
294
|
+
}
|
295
|
+
}
|
296
|
+
});
|
297
|
+
child = createElement('span', {
|
298
|
+
styles: {
|
299
|
+
position: 'absolute',
|
300
|
+
},
|
301
|
+
children: [
|
302
|
+
anchor
|
303
|
+
]
|
304
|
+
});
|
305
|
+
this.tooltips.append(child);
|
306
|
+
return {
|
307
|
+
cursor: child,
|
308
|
+
anchor,
|
309
|
+
userTip
|
310
|
+
};
|
311
|
+
}
|
312
|
+
};
|
313
|
+
CollaborateCursor = __decorate([
|
314
|
+
Injectable(),
|
315
|
+
__param(0, Inject(VIEW_CONTAINER)),
|
316
|
+
__param(1, Optional()),
|
317
|
+
__metadata("design:paramtypes", [HTMLElement,
|
318
|
+
CollaborateCursorAwarenessDelegate,
|
319
|
+
SelectionBridge,
|
320
|
+
Selection])
|
321
|
+
], CollaborateCursor);
|
322
|
+
export { CollaborateCursor };
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFib3JhdGUtY3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbGxhYm9yYXRlLWN1cnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDeEQsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDaEIsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsU0FBUyxFQUFvQyxNQUFNLGVBQWUsQ0FBQTtBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUEwQmhFLE1BQU0sT0FBZ0Isa0NBQWtDO0NBRXZEO0FBR0QsSUFBYSxpQkFBaUIsR0FBOUIsTUFBYSxpQkFBaUI7SUFvRDVCLFlBQTRDLFNBQXNCLEVBQ2xDLGlCQUFxRCxFQUNqRSxlQUFnQyxFQUNoQyxTQUFvQjs7Ozs7bUJBSEk7Ozs7OzttQkFDWjs7Ozs7O21CQUNaOzs7Ozs7bUJBQ0E7O1FBdERwQjs7OzttQkFBZSxhQUFhLENBQUMsS0FBSyxFQUFFO2dCQUNsQyxNQUFNLEVBQUU7b0JBQ04sUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLElBQUksRUFBRSxDQUFDO29CQUNQLEdBQUcsRUFBRSxDQUFDO29CQUNOLEtBQUssRUFBRSxNQUFNO29CQUNiLE1BQU0sRUFBRSxNQUFNO29CQUNkLGFBQWEsRUFBRSxNQUFNO29CQUNyQixNQUFNLEVBQUUsQ0FBQztpQkFDVjthQUNGLENBQUM7V0FBQTtRQUNGOzs7O21CQUEwQixhQUFhLENBQUMsS0FBSyxFQUFFO2dCQUM3QyxNQUFNLEVBQUU7b0JBQ04sUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLElBQUksRUFBRSxDQUFDO29CQUNQLEdBQUcsRUFBRSxDQUFDO29CQUNOLEtBQUssRUFBRSxNQUFNO29CQUNiLE1BQU0sRUFBRSxNQUFNO29CQUNkLFFBQVEsRUFBRSxRQUFRO2lCQUNuQjthQUNGLENBQUM7V0FBQTtRQUNGOzs7O21CQUFpQixhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxNQUFNLEVBQUU7b0JBQ04sUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLE9BQU8sRUFBRSxHQUFHO29CQUNaLElBQUksRUFBRSxDQUFDO29CQUNQLEdBQUcsRUFBRSxDQUFDO29CQUNOLEtBQUssRUFBRSxNQUFNO29CQUNiLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxJQUFJO29CQUNwRCxhQUFhLEVBQUUsTUFBTTtpQkFDdEI7YUFDRixDQUFzQjtXQUFBO1FBQ3ZCOzs7O21CQUFrQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUU7V0FBQTtRQUMvQzs7OzttQkFBbUIsYUFBYSxDQUFDLEtBQUssRUFBRTtnQkFDdEMsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxVQUFVO29CQUNwQixJQUFJLEVBQUUsQ0FBQztvQkFDUCxHQUFHLEVBQUUsQ0FBQztvQkFDTixLQUFLLEVBQUUsTUFBTTtvQkFDYixNQUFNLEVBQUUsTUFBTTtvQkFDZCxhQUFhLEVBQUUsTUFBTTtvQkFDckIsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLE1BQU0sRUFBRSxFQUFFO2lCQUNYO2FBQ0YsQ0FBQztXQUFBO1FBRUY7Ozs7bUJBQXdCLElBQUksT0FBTyxFQUFtQjtXQUFBO1FBRXREOzs7O21CQUF1QixJQUFJLFlBQVksRUFBRTtXQUFBO1FBQ3pDOzs7O21CQUE4QyxFQUFFO1dBQUE7UUFNOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3JELFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO2dCQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUE7YUFDekI7UUFDSCxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtZQUN2RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDaEIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDakMsQ0FBQztJQUVELElBQUksQ0FBQyxLQUF3QjtRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO1FBQzdCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtRQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUE7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUE7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRW5FLE1BQU0sS0FBSyxHQUFvQixFQUFFLENBQUE7UUFFakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNmLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUN0RCxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDMUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDeEMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRyxDQUFBO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzlELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUcsQ0FBQTtZQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUM1RCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUM3QixPQUFNO2FBQ1A7WUFFRCxNQUFNLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUM7Z0JBQzlELFdBQVc7Z0JBQ1gsWUFBWTtnQkFDWixTQUFTO2dCQUNULFVBQVU7YUFDWCxDQUFDLENBQUE7WUFDRixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNyQixPQUFNO2FBQ1A7WUFDRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDMUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNoRCxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRTtnQkFDM0YsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDOUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTthQUMvQztZQUVELElBQUksS0FBSyxHQUFpQyxLQUFLLENBQUE7WUFDL0MsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFCLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO29CQUN0QyxXQUFXO29CQUNYLFlBQVk7b0JBQ1osU0FBUztvQkFDVCxVQUFVO2lCQUNYLEVBQUUsV0FBVyxDQUFDLENBQUE7YUFDaEI7WUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUE7YUFDckM7WUFDRCxNQUFNLGNBQWMsR0FBb0IsRUFBRSxDQUFBO1lBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNyQixjQUFjLENBQUMsSUFBSSxDQUFDO29CQUNsQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7b0JBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7b0JBQzNCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7b0JBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtpQkFDcEIsQ0FBQyxDQUFBO2FBQ0g7WUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUV2QyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUE7WUFDNUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM5QyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRTFCLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRXBELEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztnQkFDakMsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2FBQzFCLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQXNCO1FBQzNDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNyQixNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDMUIsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSTtnQkFDbkIsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSTtnQkFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSTtnQkFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSTtnQkFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUN0QixPQUFPLEVBQUUsT0FBTzthQUNqQixDQUFDLENBQUE7WUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1lBQ3BDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1NBQ3RDO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNyRDtJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsS0FBYTtRQUNqQyxJQUFJLEtBQUssR0FBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFnQixDQUFBO1FBQ3JFLElBQUksS0FBSyxFQUFFO1lBQ1QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQWdCLENBQUE7WUFDL0MsT0FBTztnQkFDTCxNQUFNLEVBQUUsS0FBSztnQkFDYixNQUFNO2dCQUNOLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBZ0I7YUFDM0MsQ0FBQTtTQUNGO1FBQ0QsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRTtZQUNwQyxNQUFNLEVBQUU7Z0JBQ04sUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLE9BQU8sRUFBRSxNQUFNO2dCQUNmLElBQUksRUFBRSxLQUFLO2dCQUNYLFNBQVMsRUFBRSxrQkFBa0I7Z0JBQzdCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxVQUFVLEVBQUUsUUFBUTtnQkFDcEIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsU0FBUyxFQUFFLDBCQUEwQjtnQkFDckMsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixhQUFhLEVBQUUsTUFBTTthQUN0QjtTQUNGLENBQUMsQ0FBQTtRQUVGLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDbkMsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixHQUFHLEVBQUUsTUFBTTtnQkFDWCxJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsS0FBSztnQkFDWixNQUFNLEVBQUUsS0FBSztnQkFDYixhQUFhLEVBQUUsTUFBTTtnQkFDckIsT0FBTyxFQUFFLFFBQVE7YUFDbEI7WUFDRCxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDbkIsRUFBRSxFQUFFO2dCQUNGLFVBQVU7b0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO2dCQUNqQyxDQUFDO2dCQUNELFVBQVU7b0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO2dCQUNoQyxDQUFDO2FBQ0Y7U0FDRixDQUFDLENBQUE7UUFDRixLQUFLLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRTtZQUM1QixNQUFNLEVBQUU7Z0JBQ04sUUFBUSxFQUFFLFVBQVU7YUFDckI7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsTUFBTTthQUNQO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0IsT0FBTztZQUNMLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTTtZQUNOLE9BQU87U0FDUixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUF6UFksaUJBQWlCO0lBRDdCLFVBQVUsRUFBRTtJQXFERSxXQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUN0QixXQUFBLFFBQVEsRUFBRSxDQUFBO3FDQURnQyxXQUFXO1FBQ2Ysa0NBQWtDO1FBQ2hELGVBQWU7UUFDckIsU0FBUztHQXZEN0IsaUJBQWlCLENBeVA3QjtTQXpQWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQHRhbmJvL2RpJ1xuaW1wb3J0IHtcbiAgY3JlYXRlRWxlbWVudCxcbiAgVklFV19DT05UQUlORVIsXG4gIGdldExheW91dFJlY3RCeVJhbmdlLFxuICBTZWxlY3Rpb25CcmlkZ2Vcbn0gZnJvbSAnQHRleHRidXMvYnJvd3NlcidcbmltcG9ydCB7IFNlbGVjdGlvbiwgU2VsZWN0aW9uUGF0aHMsIFJhbmdlIGFzIFRCUmFuZ2UgfSBmcm9tICdAdGV4dGJ1cy9jb3JlJ1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdAdGFuYm8vc3RyZWFtJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZVNlbGVjdGlvbiB7XG4gIGNvbG9yOiBzdHJpbmdcbiAgdXNlcm5hbWU6IHN0cmluZ1xuICBwYXRoczogU2VsZWN0aW9uUGF0aHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWN0IHtcbiAgeDogbnVtYmVyXG4gIHk6IG51bWJlclxuICB3aWR0aDogbnVtYmVyXG4gIGhlaWdodDogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uUmVjdCBleHRlbmRzIFJlY3Qge1xuICBjb2xvcjogc3RyaW5nXG4gIHVzZXJuYW1lOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdGVTZWxlY3Rpb25DdXJzb3Ige1xuICBjdXJzb3I6IEhUTUxFbGVtZW50XG4gIGFuY2hvcjogSFRNTEVsZW1lbnRcbiAgdXNlclRpcDogSFRNTEVsZW1lbnRcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbGxhYm9yYXRlQ3Vyc29yQXdhcmVuZXNzRGVsZWdhdGUge1xuICBhYnN0cmFjdCBnZXRSZWN0cyhyYW5nZTogVEJSYW5nZSwgbmF0aXZlUmFuZ2U6IFJhbmdlKTogZmFsc2UgfCBSZWN0W11cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbGxhYm9yYXRlQ3Vyc29yIHtcbiAgcHJpdmF0ZSBob3N0ID0gY3JlYXRlRWxlbWVudCgnZGl2Jywge1xuICAgIHN0eWxlczoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgekluZGV4OiAxXG4gICAgfVxuICB9KVxuICBwcml2YXRlIGNhbnZhc0NvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIHtcbiAgICBzdHlsZXM6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgIH1cbiAgfSlcbiAgcHJpdmF0ZSBjYW52YXMgPSBjcmVhdGVFbGVtZW50KCdjYW52YXMnLCB7XG4gICAgc3R5bGVzOiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIG9wYWNpdHk6IDAuNSxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgJ3B4JyxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB9XG4gIH0pIGFzIEhUTUxDYW52YXNFbGVtZW50XG4gIHByaXZhdGUgY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJykhXG4gIHByaXZhdGUgdG9vbHRpcHMgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCB7XG4gICAgc3R5bGVzOiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgekluZGV4OiAxMFxuICAgIH1cbiAgfSlcblxuICBwcml2YXRlIG9uUmVjdHNDaGFuZ2UgPSBuZXcgU3ViamVjdDxTZWxlY3Rpb25SZWN0W10+KClcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKVxuICBwcml2YXRlIGN1cnJlbnRTZWxlY3Rpb246IFJlbW90ZVNlbGVjdGlvbltdID0gW11cblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFZJRVdfQ09OVEFJTkVSKSBwcml2YXRlIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgYXdhcmVuZXNzRGVsZWdhdGU6IENvbGxhYm9yYXRlQ3Vyc29yQXdhcmVuZXNzRGVsZWdhdGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgbmF0aXZlU2VsZWN0aW9uOiBTZWxlY3Rpb25CcmlkZ2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgc2VsZWN0aW9uOiBTZWxlY3Rpb24pIHtcbiAgICB0aGlzLmNhbnZhc0NvbnRhaW5lci5hcHBlbmQodGhpcy5jYW52YXMpXG4gICAgdGhpcy5ob3N0LmFwcGVuZCh0aGlzLmNhbnZhc0NvbnRhaW5lciwgdGhpcy50b29sdGlwcylcbiAgICBjb250YWluZXIucHJlcGVuZCh0aGlzLmhvc3QpXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMub25SZWN0c0NoYW5nZS5zdWJzY3JpYmUocmVjdHMgPT4ge1xuICAgICAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSByZWN0LmNvbG9yXG4gICAgICAgIHRoaXMuY29udGV4dC5iZWdpblBhdGgoKVxuICAgICAgICB0aGlzLmNvbnRleHQucmVjdChyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpXG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsKClcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsb3NlUGF0aCgpXG4gICAgICB9XG4gICAgfSksIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCArICdweCdcbiAgICAgIHRoaXMucmVmcmVzaCgpXG4gICAgfSkpXG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMuZHJhdyh0aGlzLmN1cnJlbnRTZWxlY3Rpb24pXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgfVxuXG4gIGRyYXcocGF0aHM6IFJlbW90ZVNlbGVjdGlvbltdKSB7XG4gICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gcGF0aHNcbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS50b3AgPSBjb250YWluZXJSZWN0LnkgKiAtMSArICdweCdcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuY2FudmFzLm9mZnNldFdpZHRoXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5jYW52YXMub2Zmc2V0SGVpZ2h0XG4gICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KVxuXG4gICAgY29uc3QgdXNlcnM6IFNlbGVjdGlvblJlY3RbXSA9IFtdXG5cbiAgICBwYXRocy5maWx0ZXIoaSA9PiB7XG4gICAgICByZXR1cm4gaS5wYXRocy5hbmNob3IubGVuZ3RoICYmIGkucGF0aHMuZm9jdXMubGVuZ3RoXG4gICAgfSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGFuY2hvclBhdGhzID0gWy4uLml0ZW0ucGF0aHMuYW5jaG9yXVxuICAgICAgY29uc3QgZm9jdXNQYXRocyA9IFsuLi5pdGVtLnBhdGhzLmZvY3VzXVxuICAgICAgY29uc3QgYW5jaG9yT2Zmc2V0ID0gYW5jaG9yUGF0aHMucG9wKCkhXG4gICAgICBjb25zdCBhbmNob3JTbG90ID0gdGhpcy5zZWxlY3Rpb24uZmluZFNsb3RCeVBhdGhzKGFuY2hvclBhdGhzKVxuICAgICAgY29uc3QgZm9jdXNPZmZzZXQgPSBmb2N1c1BhdGhzLnBvcCgpIVxuICAgICAgY29uc3QgZm9jdXNTbG90ID0gdGhpcy5zZWxlY3Rpb24uZmluZFNsb3RCeVBhdGhzKGZvY3VzUGF0aHMpXG4gICAgICBpZiAoIWFuY2hvclNsb3QgfHwgIWZvY3VzU2xvdCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qge2ZvY3VzLCBhbmNob3J9ID0gdGhpcy5uYXRpdmVTZWxlY3Rpb24uZ2V0UG9zaXRpb25CeVJhbmdlKHtcbiAgICAgICAgZm9jdXNPZmZzZXQsXG4gICAgICAgIGFuY2hvck9mZnNldCxcbiAgICAgICAgZm9jdXNTbG90LFxuICAgICAgICBhbmNob3JTbG90XG4gICAgICB9KVxuICAgICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbmF0aXZlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICBuYXRpdmVSYW5nZS5zZXRTdGFydChhbmNob3Iubm9kZSwgYW5jaG9yLm9mZnNldClcbiAgICAgIG5hdGl2ZVJhbmdlLnNldEVuZChmb2N1cy5ub2RlLCBmb2N1cy5vZmZzZXQpXG4gICAgICBpZiAoKGFuY2hvci5ub2RlICE9PSBmb2N1cy5ub2RlIHx8IGFuY2hvci5vZmZzZXQgIT09IGZvY3VzLm9mZnNldCkgJiYgbmF0aXZlUmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgICAgIG5hdGl2ZVJhbmdlLnNldFN0YXJ0KGZvY3VzLm5vZGUsIGZvY3VzLm9mZnNldClcbiAgICAgICAgbmF0aXZlUmFuZ2Uuc2V0RW5kKGFuY2hvci5ub2RlLCBhbmNob3Iub2Zmc2V0KVxuICAgICAgfVxuXG4gICAgICBsZXQgcmVjdHM6IFJlY3RbXSB8IERPTVJlY3RMaXN0IHwgZmFsc2UgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMuYXdhcmVuZXNzRGVsZWdhdGUpIHtcbiAgICAgICAgcmVjdHMgPSB0aGlzLmF3YXJlbmVzc0RlbGVnYXRlLmdldFJlY3RzKHtcbiAgICAgICAgICBmb2N1c09mZnNldCxcbiAgICAgICAgICBhbmNob3JPZmZzZXQsXG4gICAgICAgICAgZm9jdXNTbG90LFxuICAgICAgICAgIGFuY2hvclNsb3RcbiAgICAgICAgfSwgbmF0aXZlUmFuZ2UpXG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzKSB7XG4gICAgICAgIHJlY3RzID0gbmF0aXZlUmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKVxuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZWN0aW9uUmVjdHM6IFNlbGVjdGlvblJlY3RbXSA9IFtdXG4gICAgICBmb3IgKGxldCBpID0gcmVjdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2ldXG4gICAgICAgIHNlbGVjdGlvblJlY3RzLnB1c2goe1xuICAgICAgICAgIGNvbG9yOiBpdGVtLmNvbG9yLFxuICAgICAgICAgIHVzZXJuYW1lOiBpdGVtLnVzZXJuYW1lLFxuICAgICAgICAgIHg6IHJlY3QueCAtIGNvbnRhaW5lclJlY3QueCxcbiAgICAgICAgICB5OiByZWN0LnksXG4gICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMub25SZWN0c0NoYW5nZS5uZXh0KHNlbGVjdGlvblJlY3RzKVxuXG4gICAgICBjb25zdCBjdXJzb3JSYW5nZSA9IG5hdGl2ZVJhbmdlLmNsb25lUmFuZ2UoKVxuICAgICAgY3Vyc29yUmFuZ2Uuc2V0U3RhcnQoZm9jdXMubm9kZSwgZm9jdXMub2Zmc2V0KVxuICAgICAgY3Vyc29yUmFuZ2UuY29sbGFwc2UodHJ1ZSlcblxuICAgICAgY29uc3QgY3Vyc29yUmVjdCA9IGdldExheW91dFJlY3RCeVJhbmdlKGN1cnNvclJhbmdlKVxuXG4gICAgICB1c2Vycy5wdXNoKHtcbiAgICAgICAgdXNlcm5hbWU6IGl0ZW0udXNlcm5hbWUsXG4gICAgICAgIGNvbG9yOiBpdGVtLmNvbG9yLFxuICAgICAgICB4OiBjdXJzb3JSZWN0LnggLSBjb250YWluZXJSZWN0LngsXG4gICAgICAgIHk6IGN1cnNvclJlY3QueSAtIGNvbnRhaW5lclJlY3QueSxcbiAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgIGhlaWdodDogY3Vyc29yUmVjdC5oZWlnaHRcbiAgICAgIH0pXG4gICAgfSlcbiAgICB0aGlzLmRyYXdVc2VyQ3Vyc29yKHVzZXJzKVxuICB9XG5cbiAgcHJpdmF0ZSBkcmF3VXNlckN1cnNvcihyZWN0czogU2VsZWN0aW9uUmVjdFtdKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2ldXG4gICAgICBjb25zdCB7Y3Vyc29yLCB1c2VyVGlwLCBhbmNob3J9ID0gdGhpcy5nZXRVc2VyQ3Vyc29yKGkpXG4gICAgICBPYmplY3QuYXNzaWduKGN1cnNvci5zdHlsZSwge1xuICAgICAgICBsZWZ0OiByZWN0LnggKyAncHgnLFxuICAgICAgICB0b3A6IHJlY3QueSArICdweCcsXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoICsgJ3B4JyxcbiAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCArICdweCcsXG4gICAgICAgIGJhY2tncm91bmQ6IHJlY3QuY29sb3IsXG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH0pXG4gICAgICBhbmNob3Iuc3R5bGUuYmFja2dyb3VuZCA9IHJlY3QuY29sb3JcbiAgICAgIHVzZXJUaXAuaW5uZXJUZXh0ID0gcmVjdC51c2VybmFtZVxuICAgICAgdXNlclRpcC5zdHlsZS5iYWNrZ3JvdW5kID0gcmVjdC5jb2xvclxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSByZWN0cy5sZW5ndGg7IGkgPCB0aGlzLnRvb2x0aXBzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnRvb2x0aXBzLnJlbW92ZUNoaWxkKHRoaXMudG9vbHRpcHMuY2hpbGRyZW5baV0pXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRVc2VyQ3Vyc29yKGluZGV4OiBudW1iZXIpOiBSZW1vdGVTZWxlY3Rpb25DdXJzb3Ige1xuICAgIGxldCBjaGlsZDogSFRNTEVsZW1lbnQgPSB0aGlzLnRvb2x0aXBzLmNoaWxkcmVuW2luZGV4XSBhcyBIVE1MRWxlbWVudFxuICAgIGlmIChjaGlsZCkge1xuICAgICAgY29uc3QgYW5jaG9yID0gY2hpbGQuY2hpbGRyZW5bMF0gYXMgSFRNTEVsZW1lbnRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnNvcjogY2hpbGQsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgdXNlclRpcDogYW5jaG9yLmNoaWxkcmVuWzBdIGFzIEhUTUxFbGVtZW50XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHVzZXJUaXAgPSBjcmVhdGVFbGVtZW50KCdzcGFuJywge1xuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICBkaXNwbGF5OiAnbm9uZScsXG4gICAgICAgIGxlZnQ6ICc1MCUnLFxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC01MCUpJyxcbiAgICAgICAgbWFyZ2luQm90dG9tOiAnMnB4JyxcbiAgICAgICAgYm90dG9tOiAnMTAwJScsXG4gICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLDAsMCwuMSknLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICczcHgnLFxuICAgICAgICBwYWRkaW5nOiAnM3B4IDVweCcsXG4gICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgYW5jaG9yID0gY3JlYXRlRWxlbWVudCgnc3BhbicsIHtcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgdG9wOiAnLTJweCcsXG4gICAgICAgIGxlZnQ6ICctMnB4JyxcbiAgICAgICAgd2lkdGg6ICc2cHgnLFxuICAgICAgICBoZWlnaHQ6ICc2cHgnLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gICAgICAgIHBvaW50ZXI6ICdjdXJzb3InLFxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdXNlclRpcF0sXG4gICAgICBvbjoge1xuICAgICAgICBtb3VzZWVudGVyKCkge1xuICAgICAgICAgIHVzZXJUaXAuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICAgICAgfSxcbiAgICAgICAgbW91c2VsZWF2ZSgpIHtcbiAgICAgICAgICB1c2VyVGlwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgY2hpbGQgPSBjcmVhdGVFbGVtZW50KCdzcGFuJywge1xuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIGFuY2hvclxuICAgICAgXVxuICAgIH0pXG4gICAgdGhpcy50b29sdGlwcy5hcHBlbmQoY2hpbGQpXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnNvcjogY2hpbGQsXG4gICAgICBhbmNob3IsXG4gICAgICB1c2VyVGlwXG4gICAgfVxuICB9XG59XG4iXX0=
|
package/bundles/collaborate.d.ts
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
import { Observable } from '@tanbo/stream';
|
2
|
-
import {
|
2
|
+
import { History, Registry, RootComponentRef, Scheduler, Selection, SelectionPaths, Starter, Translator } from '@textbus/core';
|
3
3
|
import { Doc as YDoc } from 'yjs';
|
4
|
-
import { CollaborateCursor, RemoteSelection } from './
|
4
|
+
import { CollaborateCursor, RemoteSelection } from './collaborate-cursor';
|
5
5
|
export declare class Collaborate implements History {
|
6
6
|
private rootComponentRef;
|
7
7
|
private collaborateCursor;
|
8
|
+
private scheduler;
|
8
9
|
private translator;
|
9
|
-
private renderer;
|
10
10
|
private registry;
|
11
11
|
private selection;
|
12
12
|
private starter;
|
@@ -31,14 +31,14 @@ export declare class Collaborate implements History {
|
|
31
31
|
private componentStateSyncCaches;
|
32
32
|
private selectionChangeEvent;
|
33
33
|
private updateRemoteActions;
|
34
|
-
constructor(rootComponentRef: RootComponentRef, collaborateCursor: CollaborateCursor,
|
34
|
+
constructor(rootComponentRef: RootComponentRef, collaborateCursor: CollaborateCursor, scheduler: Scheduler, translator: Translator, registry: Registry, selection: Selection, starter: Starter);
|
35
35
|
setup(): void;
|
36
36
|
updateRemoteSelection(paths: RemoteSelection[]): void;
|
37
37
|
listen(): void;
|
38
38
|
back(): void;
|
39
39
|
forward(): void;
|
40
40
|
destroy(): void;
|
41
|
-
private
|
41
|
+
private syncRootComponent;
|
42
42
|
private syncContent;
|
43
43
|
private syncSlot;
|
44
44
|
private syncSlots;
|