ngx-vflow 1.10.0 → 1.11.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/esm2022/lib/vflow/components/edge/edge.component.mjs +3 -3
- package/esm2022/lib/vflow/components/node/node.component.mjs +3 -3
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +3 -9
- package/esm2022/lib/vflow/directives/selectable.directive.mjs +3 -3
- package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +11 -3
- package/esm2022/lib/vflow/services/edge-rendering.service.mjs +1 -3
- package/esm2022/lib/vflow/services/node-rendering.service.mjs +2 -6
- package/fesm2022/ngx-vflow.mjs +20 -262
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/vflow/vflow.component.d.ts +0 -4
- package/lib/vflow/public-components/resizable/resizable.component.d.ts +2 -0
- package/lib/vflow/services/edge-rendering.service.d.ts +0 -1
- package/lib/vflow/services/node-rendering.service.d.ts +0 -3
- package/package.json +1 -1
- package/esm2022/lib/vflow/directives/lazy-for.directive.mjs +0 -243
- package/esm2022/lib/vflow/utils/entities-per-frame.mjs +0 -2
- package/lib/vflow/directives/lazy-for.directive.d.ts +0 -94
- package/lib/vflow/utils/entities-per-frame.d.ts +0 -1
|
@@ -34,6 +34,8 @@ export class ResizableComponent {
|
|
|
34
34
|
this.zoom = computed(() => this.viewportService.readableViewport().zoom ?? 0);
|
|
35
35
|
this.minWidth = 0;
|
|
36
36
|
this.minHeight = 0;
|
|
37
|
+
this.maxWidth = Infinity;
|
|
38
|
+
this.maxHeight = Infinity;
|
|
37
39
|
// TODO: allow reszie beside the flow
|
|
38
40
|
this.resizeOnGlobalMouseMove = this.rootPointer.pointerMovement$
|
|
39
41
|
.pipe(filter(() => this.resizeSide !== null), filter((event) => event.movementX !== 0 || event.movementY !== 0), tap((event) => this.resize(event)), takeUntilDestroyed())
|
|
@@ -57,6 +59,8 @@ export class ResizableComponent {
|
|
|
57
59
|
ngAfterViewInit() {
|
|
58
60
|
this.minWidth = +getComputedStyle(this.hostRef.nativeElement).minWidth.replace('px', '') || 0;
|
|
59
61
|
this.minHeight = +getComputedStyle(this.hostRef.nativeElement).minHeight.replace('px', '') || 0;
|
|
62
|
+
this.maxWidth = +getComputedStyle(this.hostRef.nativeElement).maxWidth.replace('px', '') || Infinity;
|
|
63
|
+
this.maxHeight = +getComputedStyle(this.hostRef.nativeElement).maxHeight.replace('px', '') || Infinity;
|
|
60
64
|
}
|
|
61
65
|
startResize(side, event) {
|
|
62
66
|
event.stopPropagation();
|
|
@@ -68,7 +72,7 @@ export class ResizableComponent {
|
|
|
68
72
|
return;
|
|
69
73
|
const offset = calcOffset(event.movementX, event.movementY, this.zoom());
|
|
70
74
|
const resized = this.applyResize(this.resizeSide, this.model, offset, this.getDistanceToEdge(event));
|
|
71
|
-
const { x, y, width, height } = constrainRect(resized, this.model, this.resizeSide, this.minWidth, this.minHeight);
|
|
75
|
+
const { x, y, width, height } = constrainRect(resized, this.model, this.resizeSide, this.minWidth, this.minHeight, this.maxWidth, this.maxHeight);
|
|
72
76
|
this.model.setPoint({ x, y });
|
|
73
77
|
this.model.width.set(width);
|
|
74
78
|
this.model.height.set(height);
|
|
@@ -201,7 +205,7 @@ function calcOffset(movementX, movementY, zoom) {
|
|
|
201
205
|
y: round(movementY / zoom),
|
|
202
206
|
};
|
|
203
207
|
}
|
|
204
|
-
function constrainRect(rect, model, side, minWidth, minHeight) {
|
|
208
|
+
function constrainRect(rect, model, side, minWidth, minHeight, maxWidth, maxHeight) {
|
|
205
209
|
let { x, y, width, height } = rect;
|
|
206
210
|
// 1. Prevent negative dimensions
|
|
207
211
|
width = Math.max(width, 0);
|
|
@@ -209,9 +213,13 @@ function constrainRect(rect, model, side, minWidth, minHeight) {
|
|
|
209
213
|
// 2. Apply minimum size constraints
|
|
210
214
|
width = Math.max(minWidth, width);
|
|
211
215
|
height = Math.max(minHeight, height);
|
|
216
|
+
width = Math.min(maxWidth, width);
|
|
217
|
+
height = Math.min(maxHeight, height);
|
|
212
218
|
// Apply left/top constraints based on minimum size
|
|
213
219
|
x = Math.min(x, model.point().x + model.width() - minWidth);
|
|
214
220
|
y = Math.min(y, model.point().y + model.height() - minHeight);
|
|
221
|
+
x = Math.max(x, model.point().x + model.width() - maxWidth);
|
|
222
|
+
y = Math.max(y, model.point().y + model.height() - maxHeight);
|
|
215
223
|
const parent = model.parent();
|
|
216
224
|
// 3. Apply maximum size constraints based on parent size (if exists)
|
|
217
225
|
if (parent) {
|
|
@@ -257,4 +265,4 @@ function constrainRect(rect, model, side, minWidth, minHeight) {
|
|
|
257
265
|
height,
|
|
258
266
|
};
|
|
259
267
|
}
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUdOLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFJM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1C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Q0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvRSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsQ0FBQztRQUNELENBQUM7UUFDRCxLQUFLO1FBQ0wsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBpbnB1dCxcbiAgdmlld0NoaWxkLFxuICBlZmZlY3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RQb2ludGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yb290LXBvaW50ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSAnLi4vLi4vdXRpbHMvcm91bmQnO1xuaW1wb3J0IHsgTWljcm90YXNrIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9taWNyb3Rhc2suZGVjb3JhdG9yJztcbmltcG9ydCB7IGdldE5vZGVzQm91bmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbm9kZXMnO1xuaW1wb3J0IHsgTm9kZUFjY2Vzc29yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtYWNjZXNzb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBSZWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZWN0JztcbmltcG9ydCB7IFBvaW50ZXJFdmVudCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcm9vdC1wb2ludGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc3BhY2UtcG9pbnQtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9pbnRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcG9pbnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGFsaWduIH0gZnJvbSAnLi4vLi4vdXRpbHMvYWxpZ24tbnVtYmVyJztcblxudHlwZSBTaWRlID0gJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAndG9wLXJpZ2h0JyB8ICd0b3AtbGVmdCcgfCAnYm90dG9tLXJpZ2h0JyB8ICdib3R0b20tbGVmdCc7XG5cbmludGVyZmFjZSBEaXN0YW5jZVRvRWRnZSB7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbcmVzaXphYmxlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNpemFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNpemFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1BvaW50ZXJEaXJlY3RpdmVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUmVzaXphYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSBub2RlQWNjZXNzb3IgPSBpbmplY3QoTm9kZUFjY2Vzc29yU2VydmljZSk7XG4gIHByaXZhdGUgcm9vdFBvaW50ZXIgPSBpbmplY3QoUm9vdFBvaW50ZXJEaXJlY3RpdmUpO1xuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIHNwYWNlUG9pbnRDb250ZXh0ID0gaW5qZWN0KFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlKTtcbiAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG4gIHByaXZhdGUgaG9zdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICBwdWJsaWMgcmVzaXphYmxlID0gaW5wdXQ8Ym9vbGVhbiB8ICcnPigpO1xuXG4gIHB1YmxpYyByZXNpemVyQ29sb3IgPSBpbnB1dCgnIzJlNDE0YycpO1xuXG4gIHB1YmxpYyBnYXAgPSBpbnB1dCgxLjUpO1xuXG4gIHByaXZhdGUgcmVzaXplciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oJ3Jlc2l6ZXInKTtcblxuICBwcm90ZWN0ZWQgZ2V0IG1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGVBY2Nlc3Nvci5tb2RlbCgpITtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaW5lR2FwID0gMztcbiAgcHJvdGVjdGVkIGhhbmRsZVNpemUgPSA2O1xuXG4gIHByaXZhdGUgcmVzaXplU2lkZTogU2lkZSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgem9vbSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS56b29tID8/IDApO1xuXG4gIHByaXZhdGUgbWluV2lkdGggPSAwO1xuICBwcml2YXRlIG1pbkhlaWdodCA9IDA7XG5cbiAgLy8gVE9ETzogYWxsb3cgcmVzemllIGJlc2lkZSB0aGUgZmxvd1xuICBwcm90ZWN0ZWQgcmVzaXplT25HbG9iYWxNb3VzZU1vdmUgPSB0aGlzLnJvb3RQb2ludGVyLnBvaW50ZXJNb3ZlbWVudCRcbiAgICAucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnJlc2l6ZVNpZGUgIT09IG51bGwpLFxuICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQubW92ZW1lbnRYICE9PSAwIHx8IGV2ZW50Lm1vdmVtZW50WSAhPT0gMCksXG4gICAgICB0YXAoKGV2ZW50KSA9PiB0aGlzLnJlc2l6ZShldmVudCkpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICBwcm90ZWN0ZWQgZW5kUmVzaXplT25HbG9iYWxNb3VzZVVwID0gdGhpcy5yb290UG9pbnRlci5kb2N1bWVudFBvaW50ZXJFbmQkXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5lbmRSZXNpemUoKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICApXG4gICAgLnN1YnNjcmliZSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzaXphYmxlID0gdGhpcy5yZXNpemFibGUoKTtcblxuICAgICAgICBpZiAodHlwZW9mIHJlc2l6YWJsZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5yZXNpemFibGUuc2V0KHJlc2l6YWJsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5yZXNpemFibGUuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbC5yZXNpemVyVGVtcGxhdGUuc2V0KHRoaXMucmVzaXplcigpKTtcbiAgfVxuXG4gIEBNaWNyb3Rhc2tcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm1pbldpZHRoID0gK2dldENvbXB1dGVkU3R5bGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpLm1pbldpZHRoLnJlcGxhY2UoJ3B4JywgJycpIHx8IDA7XG4gICAgdGhpcy5taW5IZWlnaHQgPSArZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudCkubWluSGVpZ2h0LnJlcGxhY2UoJ3B4JywgJycpIHx8IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRSZXNpemUoc2lkZTogU2lkZSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZXNpemVTaWRlID0gc2lkZTtcbiAgICB0aGlzLm1vZGVsLnJlc2l6aW5nLnNldCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNpemUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICghdGhpcy5yZXNpemVTaWRlKSByZXR1cm47XG5cbiAgICBjb25zdCBvZmZzZXQgPSBjYWxjT2Zmc2V0KGV2ZW50Lm1vdmVtZW50WCwgZXZlbnQubW92ZW1lbnRZLCB0aGlzLnpvb20oKSk7XG5cbiAgICBjb25zdCByZXNpemVkID0gdGhpcy5hcHBseVJlc2l6ZSh0aGlzLnJlc2l6ZVNpZGUsIHRoaXMubW9kZWwsIG9mZnNldCwgdGhpcy5nZXREaXN0YW5jZVRvRWRnZShldmVudCkpO1xuXG4gICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBjb25zdHJhaW5SZWN0KHJlc2l6ZWQsIHRoaXMubW9kZWwsIHRoaXMucmVzaXplU2lkZSwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuXG4gICAgdGhpcy5tb2RlbC5zZXRQb2ludCh7IHgsIHkgfSk7XG4gICAgdGhpcy5tb2RlbC53aWR0aC5zZXQod2lkdGgpO1xuICAgIHRoaXMubW9kZWwuaGVpZ2h0LnNldChoZWlnaHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVuZFJlc2l6ZSgpIHtcbiAgICB0aGlzLnJlc2l6ZVNpZGUgPSBudWxsO1xuICAgIHRoaXMubW9kZWwucmVzaXppbmcuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlzdGFuY2VUb0VkZ2UoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IERpc3RhbmNlVG9FZGdlIHtcbiAgICBjb25zdCBmbG93UG9pbnQgPSB0aGlzLnNwYWNlUG9pbnRDb250ZXh0LmRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludCh7IHg6IGV2ZW50LngsIHk6IGV2ZW50LnkgfSk7XG4gICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLm1vZGVsLmdsb2JhbFBvaW50KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogZmxvd1BvaW50LnggLSB4LFxuICAgICAgcmlnaHQ6IGZsb3dQb2ludC54IC0gKHggKyB0aGlzLm1vZGVsLndpZHRoKCkpLFxuICAgICAgdG9wOiBmbG93UG9pbnQueSAtIHksXG4gICAgICBib3R0b206IGZsb3dQb2ludC55IC0gKHkgKyB0aGlzLm1vZGVsLmhlaWdodCgpKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVJlc2l6ZShzaWRlOiBTaWRlLCBtb2RlbDogTm9kZU1vZGVsLCBvZmZzZXQ6IFBvaW50LCBkaXN0YW5jZVRvRWRnZTogRGlzdGFuY2VUb0VkZ2UpOiBSZWN0IHtcbiAgICBjb25zdCB7IHgsIHkgfSA9IG1vZGVsLnBvaW50KCk7XG4gICAgY29uc3Qgd2lkdGggPSBtb2RlbC53aWR0aCgpO1xuICAgIGNvbnN0IGhlaWdodCA9IG1vZGVsLmhlaWdodCgpO1xuICAgIGNvbnN0IFtzbmFwWCwgc25hcFldID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc25hcEdyaWQoKTtcblxuICAgIHN3aXRjaCAoc2lkZSkge1xuICAgICAgY2FzZSAnbGVmdCc6IHtcbiAgICAgICAgY29uc3QgbW92ZW1lbnRYID0gb2Zmc2V0LnggKyBkaXN0YW5jZVRvRWRnZS5sZWZ0O1xuICAgICAgICBjb25zdCBuZXdYID0gYWxpZ24oeCArIG1vdmVtZW50WCwgc25hcFgpO1xuICAgICAgICBjb25zdCBkZWx0YVggPSBuZXdYIC0geDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IG5ld1gsXG4gICAgICAgICAgeSxcbiAgICAgICAgICB3aWR0aDogd2lkdGggLSBkZWx0YVgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WCA9IG9mZnNldC54ICsgZGlzdGFuY2VUb0VkZ2UucmlnaHQ7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gYWxpZ24od2lkdGggKyBtb3ZlbWVudFgsIHNuYXBYKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICB3aWR0aDogbmV3V2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSAndG9wJzoge1xuICAgICAgICBjb25zdCBtb3ZlbWVudFkgPSBvZmZzZXQueSArIGRpc3RhbmNlVG9FZGdlLnRvcDtcbiAgICAgICAgY29uc3QgbmV3WSA9IGFsaWduKHkgKyBtb3ZlbWVudFksIHNuYXBZKTtcbiAgICAgICAgY29uc3QgZGVsdGFZID0gbmV3WSAtIHk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHk6IG5ld1ksXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLSBkZWx0YVksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICdib3R0b20nOiB7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WSA9IG9mZnNldC55ICsgZGlzdGFuY2VUb0VkZ2UuYm90dG9tO1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBhbGlnbihoZWlnaHQgKyBtb3ZlbWVudFksIHNuYXBZKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IG5ld0hlaWdodCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RvcC1sZWZ0Jzoge1xuICAgICAgICBjb25zdCBtb3ZlbWVudFggPSBvZmZzZXQueCArIGRpc3RhbmNlVG9FZGdlLmxlZnQ7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WSA9IG9mZnNldC55ICsgZGlzdGFuY2VUb0VkZ2UudG9wO1xuICAgICAgICBjb25zdCBuZXdYID0gYWxpZ24oeCArIG1vdmVtZW50WCwgc25hcFgpO1xuICAgICAgICBjb25zdCBuZXdZID0gYWxpZ24oeSArIG1vdmVtZW50WSwgc25hcFkpO1xuICAgICAgICBjb25zdCBkZWx0YVggPSBuZXdYIC0geDtcbiAgICAgICAgY29uc3QgZGVsdGFZID0gbmV3WSAtIHk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBuZXdYLFxuICAgICAgICAgIHk6IG5ld1ksXG4gICAgICAgICAgd2lkdGg6IHdpZHRoIC0gZGVsdGFYLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC0gZGVsdGFZLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSAndG9wLXJpZ2h0Jzoge1xuICAgICAgICBjb25zdCBtb3ZlbWVudFggPSBvZmZzZXQueCArIGRpc3RhbmNlVG9FZGdlLnJpZ2h0O1xuICAgICAgICBjb25zdCBtb3ZlbWVudFkgPSBvZmZzZXQueSArIGRpc3RhbmNlVG9FZGdlLnRvcDtcbiAgICAgICAgY29uc3QgbmV3WSA9IGFsaWduKHkgKyBtb3ZlbWVudFksIHNuYXBZKTtcbiAgICAgICAgY29uc3QgZGVsdGFZID0gbmV3WSAtIHk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHk6IG5ld1ksXG4gICAgICAgICAgd2lkdGg6IGFsaWduKHdpZHRoICsgbW92ZW1lbnRYLCBzbmFwWCksXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLSBkZWx0YVksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6IHtcbiAgICAgICAgY29uc3QgbW92ZW1lbnRYID0gb2Zmc2V0LnggKyBkaXN0YW5jZVRvRWRnZS5sZWZ0O1xuICAgICAgICBjb25zdCBtb3ZlbWVudFkgPSBvZmZzZXQueSArIGRpc3RhbmNlVG9FZGdlLmJvdHRvbTtcbiAgICAgICAgY29uc3QgbmV3WCA9IGFsaWduKHggKyBtb3ZlbWVudFgsIHNuYXBYKTtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gbmV3WCAtIHg7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBuZXdYLFxuICAgICAgICAgIHksXG4gICAgICAgICAgd2lkdGg6IHdpZHRoIC0gZGVsdGFYLFxuICAgICAgICAgIGhlaWdodDogYWxpZ24oaGVpZ2h0ICsgbW92ZW1lbnRZLCBzbmFwWSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOiB7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WCA9IG9mZnNldC54ICsgZGlzdGFuY2VUb0VkZ2UucmlnaHQ7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WSA9IG9mZnNldC55ICsgZGlzdGFuY2VUb0VkZ2UuYm90dG9tO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5LFxuICAgICAgICAgIHdpZHRoOiBhbGlnbih3aWR0aCArIG1vdmVtZW50WCwgc25hcFgpLFxuICAgICAgICAgIGhlaWdodDogYWxpZ24oaGVpZ2h0ICsgbW92ZW1lbnRZLCBzbmFwWSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGNPZmZzZXQobW92ZW1lbnRYOiBudW1iZXIsIG1vdmVtZW50WTogbnVtYmVyLCB6b29tOiBudW1iZXIpOiBQb2ludCB7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQobW92ZW1lbnRYIC8gem9vbSksXG4gICAgeTogcm91bmQobW92ZW1lbnRZIC8gem9vbSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnN0cmFpblJlY3QocmVjdDogUmVjdCwgbW9kZWw6IE5vZGVNb2RlbCwgc2lkZTogU2lkZSwgbWluV2lkdGg6IG51bWJlciwgbWluSGVpZ2h0OiBudW1iZXIpIHtcbiAgbGV0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gcmVjdDtcblxuICAvLyAxLiBQcmV2ZW50IG5lZ2F0aXZlIGRpbWVuc2lvbnNcbiAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgMCk7XG4gIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgMCk7XG5cbiAgLy8gMi4gQXBwbHkgbWluaW11bSBzaXplIGNvbnN0cmFpbnRzXG4gIHdpZHRoID0gTWF0aC5tYXgobWluV2lkdGgsIHdpZHRoKTtcbiAgaGVpZ2h0ID0gTWF0aC5tYXgobWluSGVpZ2h0LCBoZWlnaHQpO1xuXG4gIC8vIEFwcGx5IGxlZnQvdG9wIGNvbnN0cmFpbnRzIGJhc2VkIG9uIG1pbmltdW0gc2l6ZVxuICB4ID0gTWF0aC5taW4oeCwgbW9kZWwucG9pbnQoKS54ICsgbW9kZWwud2lkdGgoKSAtIG1pbldpZHRoKTtcbiAgeSA9IE1hdGgubWluKHksIG1vZGVsLnBvaW50KCkueSArIG1vZGVsLmhlaWdodCgpIC0gbWluSGVpZ2h0KTtcblxuICBjb25zdCBwYXJlbnQgPSBtb2RlbC5wYXJlbnQoKTtcbiAgLy8gMy4gQXBwbHkgbWF4aW11bSBzaXplIGNvbnN0cmFpbnRzIGJhc2VkIG9uIHBhcmVudCBzaXplIChpZiBleGlzdHMpXG4gIGlmIChwYXJlbnQpIHtcbiAgICBjb25zdCBwYXJlbnRXaWR0aCA9IHBhcmVudC53aWR0aCgpO1xuICAgIGNvbnN0IHBhcmVudEhlaWdodCA9IHBhcmVudC5oZWlnaHQoKTtcbiAgICBjb25zdCBtb2RlbFggPSBtb2RlbC5wb2ludCgpLng7XG4gICAgY29uc3QgbW9kZWxZID0gbW9kZWwucG9pbnQoKS55O1xuXG4gICAgeCA9IE1hdGgubWF4KHgsIDApO1xuICAgIHkgPSBNYXRoLm1heCh5LCAwKTtcblxuICAgIC8vIFN0b3AgcmVzaXppbmcgd2hlbiBoaXR0aW5nIGxlZnQgb3IgdG9wIGJvdW5kYXJ5XG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ2xlZnQnKSAmJiB4ID09PSAwKSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWluKHdpZHRoLCBtb2RlbFggKyBtb2RlbC53aWR0aCgpKTtcbiAgICB9XG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ3RvcCcpICYmIHkgPT09IDApIHtcbiAgICAgIGhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgbW9kZWxZICsgbW9kZWwuaGVpZ2h0KCkpO1xuICAgIH1cblxuICAgIC8vIEFsbG93IHJpZ2h0L2JvdHRvbSByZXNpemluZyB3aXRob3V0IGJlaW5nIGJsb2NrZWRcbiAgICB3aWR0aCA9IE1hdGgubWluKHdpZHRoLCBwYXJlbnRXaWR0aCAtIHgpO1xuICAgIGhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgcGFyZW50SGVpZ2h0IC0geSk7XG4gIH1cblxuICBjb25zdCBib3VuZHMgPSBnZXROb2Rlc0JvdW5kcyhtb2RlbC5jaGlsZHJlbigpKTtcbiAgLy8gNC4gQXBwbHkgY2hpbGQgbm9kZSBjb25zdHJhaW50cyAoaWYgY2hpbGRyZW4gZXhpc3QpXG4gIGlmIChib3VuZHMpIHtcbiAgICBpZiAoc2lkZS5pbmNsdWRlcygnbGVmdCcpKSB7XG4gICAgICB4ID0gTWF0aC5taW4oeCwgbW9kZWwucG9pbnQoKS54ICsgbW9kZWwud2lkdGgoKSAtIChib3VuZHMueCArIGJvdW5kcy53aWR0aCkpO1xuICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgYm91bmRzLnggKyBib3VuZHMud2lkdGgpO1xuICAgIH1cblxuICAgIGlmIChzaWRlLmluY2x1ZGVzKCdyaWdodCcpKSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBib3VuZHMueCArIGJvdW5kcy53aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ2JvdHRvbScpKSB7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ3RvcCcpKSB7XG4gICAgICB5ID0gTWF0aC5taW4oeSwgbW9kZWwucG9pbnQoKS55ICsgbW9kZWwuaGVpZ2h0KCkgLSAoYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0KSk7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICB9O1xufVxuIiwiPG5nLXRlbXBsYXRlICNyZXNpemVyPlxuICA8c3ZnOmc+XG4gICAgPCEtLSB0b3AgbGluZSAtLT5cbiAgICA8c3ZnOmxpbmVcbiAgICAgIGNsYXNzPVwidG9wXCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgW2F0dHIueDFdPVwibGluZUdhcFwiXG4gICAgICBbYXR0ci55MV09XCItZ2FwKClcIlxuICAgICAgW2F0dHIueDJdPVwibW9kZWwuc2l6ZSgpLndpZHRoIC0gbGluZUdhcFwiXG4gICAgICBbYXR0ci55Ml09XCItZ2FwKClcIlxuICAgICAgW2F0dHIuc3Ryb2tlXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ3RvcCcsICRldmVudClcIiAvPlxuICAgIDwhLS0gTGVmdCBsaW5lIC0tPlxuICAgIDxzdmc6bGluZVxuICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgW2F0dHIueDFdPVwiLWdhcCgpXCJcbiAgICAgIFthdHRyLnkxXT1cImxpbmVHYXBcIlxuICAgICAgW2F0dHIueDJdPVwiLWdhcCgpXCJcbiAgICAgIFthdHRyLnkyXT1cIm1vZGVsLnNpemUoKS5oZWlnaHQgLSBsaW5lR2FwXCJcbiAgICAgIFthdHRyLnN0cm9rZV09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCdsZWZ0JywgJGV2ZW50KVwiIC8+XG4gICAgPCEtLSBCb3R0b20gbGluZSAtLT5cbiAgICA8c3ZnOmxpbmVcbiAgICAgIGNsYXNzPVwiYm90dG9tXCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgW2F0dHIueDFdPVwibGluZUdhcFwiXG4gICAgICBbYXR0ci55MV09XCJtb2RlbC5zaXplKCkuaGVpZ2h0ICsgZ2FwKClcIlxuICAgICAgW2F0dHIueDJdPVwibW9kZWwuc2l6ZSgpLndpZHRoIC0gbGluZUdhcFwiXG4gICAgICBbYXR0ci55Ml09XCJtb2RlbC5zaXplKCkuaGVpZ2h0ICsgZ2FwKClcIlxuICAgICAgW2F0dHIuc3Ryb2tlXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ2JvdHRvbScsICRldmVudClcIiAvPlxuICAgIDwhLS0gUmlnaHQgbGluZSAtLT5cbiAgICA8c3ZnOmxpbmVcbiAgICAgIGNsYXNzPVwicmlnaHRcIlxuICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICBbYXR0ci54MV09XCJtb2RlbC5zaXplKCkud2lkdGggKyBnYXAoKVwiXG4gICAgICBbYXR0ci55MV09XCJsaW5lR2FwXCJcbiAgICAgIFthdHRyLngyXT1cIm1vZGVsLnNpemUoKS53aWR0aCArIGdhcCgpXCJcbiAgICAgIFthdHRyLnkyXT1cIm1vZGVsLnNpemUoKS5oZWlnaHQgLSBsaW5lR2FwXCJcbiAgICAgIFthdHRyLnN0cm9rZV09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCdyaWdodCcsICRldmVudClcIiAvPlxuXG4gICAgPCEtLSBUb3AgTGVmdCAtLT5cbiAgICA8c3ZnOnJlY3RcbiAgICAgIGNsYXNzPVwidG9wLWxlZnRcIlxuICAgICAgW2F0dHIueF09XCItKGhhbmRsZVNpemUgLyAyKSAtIGdhcCgpXCJcbiAgICAgIFthdHRyLnldPVwiLShoYW5kbGVTaXplIC8gMikgLSBnYXAoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmZpbGxdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgndG9wLWxlZnQnLCAkZXZlbnQpXCIgLz5cblxuICAgIDwhLS0gVG9wIHJpZ2h0IC0tPlxuICAgIDxzdmc6cmVjdFxuICAgICAgY2xhc3M9XCJ0b3AtcmlnaHRcIlxuICAgICAgW2F0dHIueF09XCJtb2RlbC5zaXplKCkud2lkdGggLSBoYW5kbGVTaXplIC8gMiArIGdhcCgpXCJcbiAgICAgIFthdHRyLnldPVwiLShoYW5kbGVTaXplIC8gMikgLSBnYXAoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmZpbGxdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgndG9wLXJpZ2h0JywgJGV2ZW50KVwiIC8+XG5cbiAgICA8IS0tIEJvdHRvbSBsZWZ0IC0tPlxuICAgIDxzdmc6cmVjdFxuICAgICAgY2xhc3M9XCJib3R0b20tbGVmdFwiXG4gICAgICBbYXR0ci54XT1cIi0oaGFuZGxlU2l6ZSAvIDIpIC0gZ2FwKClcIlxuICAgICAgW2F0dHIueV09XCJtb2RlbC5zaXplKCkuaGVpZ2h0IC0gaGFuZGxlU2l6ZSAvIDIgKyBnYXAoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmZpbGxdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgnYm90dG9tLWxlZnQnLCAkZXZlbnQpXCIgLz5cblxuICAgIDwhLS0gQm90dG9tIHJpZ2h0IC0tPlxuICAgIDxzdmc6cmVjdFxuICAgICAgY2xhc3M9XCJib3R0b20tcmlnaHRcIlxuICAgICAgW2F0dHIueF09XCJtb2RlbC5zaXplKCkud2lkdGggLSBoYW5kbGVTaXplIC8gMiArIGdhcCgpXCJcbiAgICAgIFthdHRyLnldPVwibW9kZWwuc2l6ZSgpLmhlaWdodCAtIGhhbmRsZVNpemUgLyAyICsgZ2FwKClcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5maWxsXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ2JvdHRvbS1yaWdodCcsICRldmVudClcIiAvPlxuICA8L3N2ZzpnPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRlbnQgLz5cbiJdfQ==
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUdOLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFJM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1C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Q0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDL0UsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLENBQUM7UUFDRCxDQUFDO1FBQ0QsS0FBSztRQUNMLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgaW5wdXQsXG4gIHZpZXdDaGlsZCxcbiAgZWZmZWN0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb290UG9pbnRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcm9vdC1wb2ludGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gJy4uLy4uL3V0aWxzL3JvdW5kJztcbmltcG9ydCB7IE1pY3JvdGFzayB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvbWljcm90YXNrLmRlY29yYXRvcic7XG5pbXBvcnQgeyBnZXROb2Rlc0JvdW5kcyB9IGZyb20gJy4uLy4uL3V0aWxzL25vZGVzJztcbmltcG9ydCB7IE5vZGVBY2Nlc3NvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWFjY2Vzc29yLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgUmVjdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVjdCc7XG5pbXBvcnQgeyBQb2ludGVyRXZlbnQgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jvb3QtcG9pbnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NwYWNlLXBvaW50LWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvaW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3BvaW50ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBhbGlnbiB9IGZyb20gJy4uLy4uL3V0aWxzL2FsaWduLW51bWJlcic7XG5cbnR5cGUgU2lkZSA9ICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3RvcC1yaWdodCcgfCAndG9wLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCcgfCAnYm90dG9tLWxlZnQnO1xuXG5pbnRlcmZhY2UgRGlzdGFuY2VUb0VkZ2Uge1xuICBsZWZ0OiBudW1iZXI7XG4gIHJpZ2h0OiBudW1iZXI7XG4gIHRvcDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnW3Jlc2l6YWJsZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzaXphYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVzaXphYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtQb2ludGVyRGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgbm9kZUFjY2Vzc29yID0gaW5qZWN0KE5vZGVBY2Nlc3NvclNlcnZpY2UpO1xuICBwcml2YXRlIHJvb3RQb2ludGVyID0gaW5qZWN0KFJvb3RQb2ludGVyRGlyZWN0aXZlKTtcbiAgcHJpdmF0ZSB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzcGFjZVBvaW50Q29udGV4dCA9IGluamVjdChTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSk7XG4gIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpO1xuICBwcml2YXRlIGhvc3RSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgcHVibGljIHJlc2l6YWJsZSA9IGlucHV0PGJvb2xlYW4gfCAnJz4oKTtcblxuICBwdWJsaWMgcmVzaXplckNvbG9yID0gaW5wdXQoJyMyZTQxNGMnKTtcblxuICBwdWJsaWMgZ2FwID0gaW5wdXQoMS41KTtcblxuICBwcml2YXRlIHJlc2l6ZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCdyZXNpemVyJyk7XG5cbiAgcHJvdGVjdGVkIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlQWNjZXNzb3IubW9kZWwoKSE7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGluZUdhcCA9IDM7XG4gIHByb3RlY3RlZCBoYW5kbGVTaXplID0gNjtcblxuICBwcml2YXRlIHJlc2l6ZVNpZGU6IFNpZGUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHpvb20gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbSA/PyAwKTtcblxuICBwcml2YXRlIG1pbldpZHRoID0gMDtcbiAgcHJpdmF0ZSBtaW5IZWlnaHQgPSAwO1xuICBwcml2YXRlIG1heFdpZHRoID0gSW5maW5pdHk7XG4gIHByaXZhdGUgbWF4SGVpZ2h0ID0gSW5maW5pdHk7XG5cbiAgLy8gVE9ETzogYWxsb3cgcmVzemllIGJlc2lkZSB0aGUgZmxvd1xuICBwcm90ZWN0ZWQgcmVzaXplT25HbG9iYWxNb3VzZU1vdmUgPSB0aGlzLnJvb3RQb2ludGVyLnBvaW50ZXJNb3ZlbWVudCRcbiAgICAucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnJlc2l6ZVNpZGUgIT09IG51bGwpLFxuICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQubW92ZW1lbnRYICE9PSAwIHx8IGV2ZW50Lm1vdmVtZW50WSAhPT0gMCksXG4gICAgICB0YXAoKGV2ZW50KSA9PiB0aGlzLnJlc2l6ZShldmVudCkpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICBwcm90ZWN0ZWQgZW5kUmVzaXplT25HbG9iYWxNb3VzZVVwID0gdGhpcy5yb290UG9pbnRlci5kb2N1bWVudFBvaW50ZXJFbmQkXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5lbmRSZXNpemUoKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICApXG4gICAgLnN1YnNjcmliZSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzaXphYmxlID0gdGhpcy5yZXNpemFibGUoKTtcblxuICAgICAgICBpZiAodHlwZW9mIHJlc2l6YWJsZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5yZXNpemFibGUuc2V0KHJlc2l6YWJsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5yZXNpemFibGUuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbC5yZXNpemVyVGVtcGxhdGUuc2V0KHRoaXMucmVzaXplcigpKTtcbiAgfVxuXG4gIEBNaWNyb3Rhc2tcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm1pbldpZHRoID0gK2dldENvbXB1dGVkU3R5bGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpLm1pbldpZHRoLnJlcGxhY2UoJ3B4JywgJycpIHx8IDA7XG4gICAgdGhpcy5taW5IZWlnaHQgPSArZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudCkubWluSGVpZ2h0LnJlcGxhY2UoJ3B4JywgJycpIHx8IDA7XG4gICAgdGhpcy5tYXhXaWR0aCA9ICtnZXRDb21wdXRlZFN0eWxlKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50KS5tYXhXaWR0aC5yZXBsYWNlKCdweCcsICcnKSB8fCBJbmZpbml0eTtcbiAgICB0aGlzLm1heEhlaWdodCA9ICtnZXRDb21wdXRlZFN0eWxlKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50KS5tYXhIZWlnaHQucmVwbGFjZSgncHgnLCAnJykgfHwgSW5maW5pdHk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRSZXNpemUoc2lkZTogU2lkZSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZXNpemVTaWRlID0gc2lkZTtcbiAgICB0aGlzLm1vZGVsLnJlc2l6aW5nLnNldCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNpemUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICghdGhpcy5yZXNpemVTaWRlKSByZXR1cm47XG5cbiAgICBjb25zdCBvZmZzZXQgPSBjYWxjT2Zmc2V0KGV2ZW50Lm1vdmVtZW50WCwgZXZlbnQubW92ZW1lbnRZLCB0aGlzLnpvb20oKSk7XG5cbiAgICBjb25zdCByZXNpemVkID0gdGhpcy5hcHBseVJlc2l6ZSh0aGlzLnJlc2l6ZVNpZGUsIHRoaXMubW9kZWwsIG9mZnNldCwgdGhpcy5nZXREaXN0YW5jZVRvRWRnZShldmVudCkpO1xuXG4gICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBjb25zdHJhaW5SZWN0KFxuICAgICAgcmVzaXplZCxcbiAgICAgIHRoaXMubW9kZWwsXG4gICAgICB0aGlzLnJlc2l6ZVNpZGUsXG4gICAgICB0aGlzLm1pbldpZHRoLFxuICAgICAgdGhpcy5taW5IZWlnaHQsXG4gICAgICB0aGlzLm1heFdpZHRoLFxuICAgICAgdGhpcy5tYXhIZWlnaHQsXG4gICAgKTtcblxuICAgIHRoaXMubW9kZWwuc2V0UG9pbnQoeyB4LCB5IH0pO1xuICAgIHRoaXMubW9kZWwud2lkdGguc2V0KHdpZHRoKTtcbiAgICB0aGlzLm1vZGVsLmhlaWdodC5zZXQoaGVpZ2h0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmRSZXNpemUoKSB7XG4gICAgdGhpcy5yZXNpemVTaWRlID0gbnVsbDtcbiAgICB0aGlzLm1vZGVsLnJlc2l6aW5nLnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGdldERpc3RhbmNlVG9FZGdlKGV2ZW50OiBQb2ludGVyRXZlbnQpOiBEaXN0YW5jZVRvRWRnZSB7XG4gICAgY29uc3QgZmxvd1BvaW50ID0gdGhpcy5zcGFjZVBvaW50Q29udGV4dC5kb2N1bWVudFBvaW50VG9GbG93UG9pbnQoeyB4OiBldmVudC54LCB5OiBldmVudC55IH0pO1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5tb2RlbC5nbG9iYWxQb2ludCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IGZsb3dQb2ludC54IC0geCxcbiAgICAgIHJpZ2h0OiBmbG93UG9pbnQueCAtICh4ICsgdGhpcy5tb2RlbC53aWR0aCgpKSxcbiAgICAgIHRvcDogZmxvd1BvaW50LnkgLSB5LFxuICAgICAgYm90dG9tOiBmbG93UG9pbnQueSAtICh5ICsgdGhpcy5tb2RlbC5oZWlnaHQoKSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlSZXNpemUoc2lkZTogU2lkZSwgbW9kZWw6IE5vZGVNb2RlbCwgb2Zmc2V0OiBQb2ludCwgZGlzdGFuY2VUb0VkZ2U6IERpc3RhbmNlVG9FZGdlKTogUmVjdCB7XG4gICAgY29uc3QgeyB4LCB5IH0gPSBtb2RlbC5wb2ludCgpO1xuICAgIGNvbnN0IHdpZHRoID0gbW9kZWwud2lkdGgoKTtcbiAgICBjb25zdCBoZWlnaHQgPSBtb2RlbC5oZWlnaHQoKTtcbiAgICBjb25zdCBbc25hcFgsIHNuYXBZXSA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNuYXBHcmlkKCk7XG5cbiAgICBzd2l0Y2ggKHNpZGUpIHtcbiAgICAgIGNhc2UgJ2xlZnQnOiB7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WCA9IG9mZnNldC54ICsgZGlzdGFuY2VUb0VkZ2UubGVmdDtcbiAgICAgICAgY29uc3QgbmV3WCA9IGFsaWduKHggKyBtb3ZlbWVudFgsIHNuYXBYKTtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gbmV3WCAtIHg7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBuZXdYLFxuICAgICAgICAgIHksXG4gICAgICAgICAgd2lkdGg6IHdpZHRoIC0gZGVsdGFYLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JpZ2h0Jzoge1xuICAgICAgICBjb25zdCBtb3ZlbWVudFggPSBvZmZzZXQueCArIGRpc3RhbmNlVG9FZGdlLnJpZ2h0O1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGFsaWduKHdpZHRoICsgbW92ZW1lbnRYLCBzbmFwWCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgd2lkdGg6IG5ld1dpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RvcCc6IHtcbiAgICAgICAgY29uc3QgbW92ZW1lbnRZID0gb2Zmc2V0LnkgKyBkaXN0YW5jZVRvRWRnZS50b3A7XG4gICAgICAgIGNvbnN0IG5ld1kgPSBhbGlnbih5ICsgbW92ZW1lbnRZLCBzbmFwWSk7XG4gICAgICAgIGNvbnN0IGRlbHRhWSA9IG5ld1kgLSB5O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5OiBuZXdZLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC0gZGVsdGFZLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnYm90dG9tJzoge1xuICAgICAgICBjb25zdCBtb3ZlbWVudFkgPSBvZmZzZXQueSArIGRpc3RhbmNlVG9FZGdlLmJvdHRvbTtcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gYWxpZ24oaGVpZ2h0ICsgbW92ZW1lbnRZLCBzbmFwWSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBuZXdIZWlnaHQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICd0b3AtbGVmdCc6IHtcbiAgICAgICAgY29uc3QgbW92ZW1lbnRYID0gb2Zmc2V0LnggKyBkaXN0YW5jZVRvRWRnZS5sZWZ0O1xuICAgICAgICBjb25zdCBtb3ZlbWVudFkgPSBvZmZzZXQueSArIGRpc3RhbmNlVG9FZGdlLnRvcDtcbiAgICAgICAgY29uc3QgbmV3WCA9IGFsaWduKHggKyBtb3ZlbWVudFgsIHNuYXBYKTtcbiAgICAgICAgY29uc3QgbmV3WSA9IGFsaWduKHkgKyBtb3ZlbWVudFksIHNuYXBZKTtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gbmV3WCAtIHg7XG4gICAgICAgIGNvbnN0IGRlbHRhWSA9IG5ld1kgLSB5O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogbmV3WCxcbiAgICAgICAgICB5OiBuZXdZLFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCAtIGRlbHRhWCxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAtIGRlbHRhWSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6IHtcbiAgICAgICAgY29uc3QgbW92ZW1lbnRYID0gb2Zmc2V0LnggKyBkaXN0YW5jZVRvRWRnZS5yaWdodDtcbiAgICAgICAgY29uc3QgbW92ZW1lbnRZID0gb2Zmc2V0LnkgKyBkaXN0YW5jZVRvRWRnZS50b3A7XG4gICAgICAgIGNvbnN0IG5ld1kgPSBhbGlnbih5ICsgbW92ZW1lbnRZLCBzbmFwWSk7XG4gICAgICAgIGNvbnN0IGRlbHRhWSA9IG5ld1kgLSB5O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5OiBuZXdZLFxuICAgICAgICAgIHdpZHRoOiBhbGlnbih3aWR0aCArIG1vdmVtZW50WCwgc25hcFgpLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC0gZGVsdGFZLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOiB7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WCA9IG9mZnNldC54ICsgZGlzdGFuY2VUb0VkZ2UubGVmdDtcbiAgICAgICAgY29uc3QgbW92ZW1lbnRZID0gb2Zmc2V0LnkgKyBkaXN0YW5jZVRvRWRnZS5ib3R0b207XG4gICAgICAgIGNvbnN0IG5ld1ggPSBhbGlnbih4ICsgbW92ZW1lbnRYLCBzbmFwWCk7XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IG5ld1ggLSB4O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogbmV3WCxcbiAgICAgICAgICB5LFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCAtIGRlbHRhWCxcbiAgICAgICAgICBoZWlnaHQ6IGFsaWduKGhlaWdodCArIG1vdmVtZW50WSwgc25hcFkpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0Jzoge1xuICAgICAgICBjb25zdCBtb3ZlbWVudFggPSBvZmZzZXQueCArIGRpc3RhbmNlVG9FZGdlLnJpZ2h0O1xuICAgICAgICBjb25zdCBtb3ZlbWVudFkgPSBvZmZzZXQueSArIGRpc3RhbmNlVG9FZGdlLmJvdHRvbTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICB3aWR0aDogYWxpZ24od2lkdGggKyBtb3ZlbWVudFgsIHNuYXBYKSxcbiAgICAgICAgICBoZWlnaHQ6IGFsaWduKGhlaWdodCArIG1vdmVtZW50WSwgc25hcFkpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxjT2Zmc2V0KG1vdmVtZW50WDogbnVtYmVyLCBtb3ZlbWVudFk6IG51bWJlciwgem9vbTogbnVtYmVyKTogUG9pbnQge1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKG1vdmVtZW50WCAvIHpvb20pLFxuICAgIHk6IHJvdW5kKG1vdmVtZW50WSAvIHpvb20pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb25zdHJhaW5SZWN0KFxuICByZWN0OiBSZWN0LFxuICBtb2RlbDogTm9kZU1vZGVsLFxuICBzaWRlOiBTaWRlLFxuICBtaW5XaWR0aDogbnVtYmVyLFxuICBtaW5IZWlnaHQ6IG51bWJlcixcbiAgbWF4V2lkdGg6IG51bWJlcixcbiAgbWF4SGVpZ2h0OiBudW1iZXIsXG4pIHtcbiAgbGV0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gcmVjdDtcblxuICAvLyAxLiBQcmV2ZW50IG5lZ2F0aXZlIGRpbWVuc2lvbnNcbiAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgMCk7XG4gIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgMCk7XG5cbiAgLy8gMi4gQXBwbHkgbWluaW11bSBzaXplIGNvbnN0cmFpbnRzXG4gIHdpZHRoID0gTWF0aC5tYXgobWluV2lkdGgsIHdpZHRoKTtcbiAgaGVpZ2h0ID0gTWF0aC5tYXgobWluSGVpZ2h0LCBoZWlnaHQpO1xuICB3aWR0aCA9IE1hdGgubWluKG1heFdpZHRoLCB3aWR0aCk7XG4gIGhlaWdodCA9IE1hdGgubWluKG1heEhlaWdodCwgaGVpZ2h0KTtcblxuICAvLyBBcHBseSBsZWZ0L3RvcCBjb25zdHJhaW50cyBiYXNlZCBvbiBtaW5pbXVtIHNpemVcbiAgeCA9IE1hdGgubWluKHgsIG1vZGVsLnBvaW50KCkueCArIG1vZGVsLndpZHRoKCkgLSBtaW5XaWR0aCk7XG4gIHkgPSBNYXRoLm1pbih5LCBtb2RlbC5wb2ludCgpLnkgKyBtb2RlbC5oZWlnaHQoKSAtIG1pbkhlaWdodCk7XG4gIHggPSBNYXRoLm1heCh4LCBtb2RlbC5wb2ludCgpLnggKyBtb2RlbC53aWR0aCgpIC0gbWF4V2lkdGgpO1xuICB5ID0gTWF0aC5tYXgoeSwgbW9kZWwucG9pbnQoKS55ICsgbW9kZWwuaGVpZ2h0KCkgLSBtYXhIZWlnaHQpO1xuXG4gIGNvbnN0IHBhcmVudCA9IG1vZGVsLnBhcmVudCgpO1xuICAvLyAzLiBBcHBseSBtYXhpbXVtIHNpemUgY29uc3RyYWludHMgYmFzZWQgb24gcGFyZW50IHNpemUgKGlmIGV4aXN0cylcbiAgaWYgKHBhcmVudCkge1xuICAgIGNvbnN0IHBhcmVudFdpZHRoID0gcGFyZW50LndpZHRoKCk7XG4gICAgY29uc3QgcGFyZW50SGVpZ2h0ID0gcGFyZW50LmhlaWdodCgpO1xuICAgIGNvbnN0IG1vZGVsWCA9IG1vZGVsLnBvaW50KCkueDtcbiAgICBjb25zdCBtb2RlbFkgPSBtb2RlbC5wb2ludCgpLnk7XG5cbiAgICB4ID0gTWF0aC5tYXgoeCwgMCk7XG4gICAgeSA9IE1hdGgubWF4KHksIDApO1xuXG4gICAgLy8gU3RvcCByZXNpemluZyB3aGVuIGhpdHRpbmcgbGVmdCBvciB0b3AgYm91bmRhcnlcbiAgICBpZiAoc2lkZS5pbmNsdWRlcygnbGVmdCcpICYmIHggPT09IDApIHtcbiAgICAgIHdpZHRoID0gTWF0aC5taW4od2lkdGgsIG1vZGVsWCArIG1vZGVsLndpZHRoKCkpO1xuICAgIH1cbiAgICBpZiAoc2lkZS5pbmNsdWRlcygndG9wJykgJiYgeSA9PT0gMCkge1xuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4oaGVpZ2h0LCBtb2RlbFkgKyBtb2RlbC5oZWlnaHQoKSk7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgcmlnaHQvYm90dG9tIHJlc2l6aW5nIHdpdGhvdXQgYmVpbmcgYmxvY2tlZFxuICAgIHdpZHRoID0gTWF0aC5taW4od2lkdGgsIHBhcmVudFdpZHRoIC0geCk7XG4gICAgaGVpZ2h0ID0gTWF0aC5taW4oaGVpZ2h0LCBwYXJlbnRIZWlnaHQgLSB5KTtcbiAgfVxuXG4gIGNvbnN0IGJvdW5kcyA9IGdldE5vZGVzQm91bmRzKG1vZGVsLmNoaWxkcmVuKCkpO1xuICAvLyA0LiBBcHBseSBjaGlsZCBub2RlIGNvbnN0cmFpbnRzIChpZiBjaGlsZHJlbiBleGlzdClcbiAgaWYgKGJvdW5kcykge1xuICAgIGlmIChzaWRlLmluY2x1ZGVzKCdsZWZ0JykpIHtcbiAgICAgIHggPSBNYXRoLm1pbih4LCBtb2RlbC5wb2ludCgpLnggKyBtb2RlbC53aWR0aCgpIC0gKGJvdW5kcy54ICsgYm91bmRzLndpZHRoKSk7XG4gICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBib3VuZHMueCArIGJvdW5kcy53aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ3JpZ2h0JykpIHtcbiAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGJvdW5kcy54ICsgYm91bmRzLndpZHRoKTtcbiAgICB9XG5cbiAgICBpZiAoc2lkZS5pbmNsdWRlcygnYm90dG9tJykpIHtcbiAgICAgIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAoc2lkZS5pbmNsdWRlcygndG9wJykpIHtcbiAgICAgIHkgPSBNYXRoLm1pbih5LCBtb2RlbC5wb2ludCgpLnkgKyBtb2RlbC5oZWlnaHQoKSAtIChib3VuZHMueSArIGJvdW5kcy5oZWlnaHQpKTtcbiAgICAgIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gIH07XG59XG4iLCI8bmctdGVtcGxhdGUgI3Jlc2l6ZXI+XG4gIDxzdmc6Zz5cbiAgICA8IS0tIHRvcCBsaW5lIC0tPlxuICAgIDxzdmc6bGluZVxuICAgICAgY2xhc3M9XCJ0b3BcIlxuICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICBbYXR0ci54MV09XCJsaW5lR2FwXCJcbiAgICAgIFthdHRyLnkxXT1cIi1nYXAoKVwiXG4gICAgICBbYXR0ci54Ml09XCJtb2RlbC5zaXplKCkud2lkdGggLSBsaW5lR2FwXCJcbiAgICAgIFthdHRyLnkyXT1cIi1nYXAoKVwiXG4gICAgICBbYXR0ci5zdHJva2VdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgndG9wJywgJGV2ZW50KVwiIC8+XG4gICAgPCEtLSBMZWZ0IGxpbmUgLS0+XG4gICAgPHN2ZzpsaW5lXG4gICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICBbYXR0ci54MV09XCItZ2FwKClcIlxuICAgICAgW2F0dHIueTFdPVwibGluZUdhcFwiXG4gICAgICBbYXR0ci54Ml09XCItZ2FwKClcIlxuICAgICAgW2F0dHIueTJdPVwibW9kZWwuc2l6ZSgpLmhlaWdodCAtIGxpbmVHYXBcIlxuICAgICAgW2F0dHIuc3Ryb2tlXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ2xlZnQnLCAkZXZlbnQpXCIgLz5cbiAgICA8IS0tIEJvdHRvbSBsaW5lIC0tPlxuICAgIDxzdmc6bGluZVxuICAgICAgY2xhc3M9XCJib3R0b21cIlxuICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICBbYXR0ci54MV09XCJsaW5lR2FwXCJcbiAgICAgIFthdHRyLnkxXT1cIm1vZGVsLnNpemUoKS5oZWlnaHQgKyBnYXAoKVwiXG4gICAgICBbYXR0ci54Ml09XCJtb2RlbC5zaXplKCkud2lkdGggLSBsaW5lR2FwXCJcbiAgICAgIFthdHRyLnkyXT1cIm1vZGVsLnNpemUoKS5oZWlnaHQgKyBnYXAoKVwiXG4gICAgICBbYXR0ci5zdHJva2VdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgnYm90dG9tJywgJGV2ZW50KVwiIC8+XG4gICAgPCEtLSBSaWdodCBsaW5lIC0tPlxuICAgIDxzdmc6bGluZVxuICAgICAgY2xhc3M9XCJyaWdodFwiXG4gICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgIFthdHRyLngxXT1cIm1vZGVsLnNpemUoKS53aWR0aCArIGdhcCgpXCJcbiAgICAgIFthdHRyLnkxXT1cImxpbmVHYXBcIlxuICAgICAgW2F0dHIueDJdPVwibW9kZWwuc2l6ZSgpLndpZHRoICsgZ2FwKClcIlxuICAgICAgW2F0dHIueTJdPVwibW9kZWwuc2l6ZSgpLmhlaWdodCAtIGxpbmVHYXBcIlxuICAgICAgW2F0dHIuc3Ryb2tlXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ3JpZ2h0JywgJGV2ZW50KVwiIC8+XG5cbiAgICA8IS0tIFRvcCBMZWZ0IC0tPlxuICAgIDxzdmc6cmVjdFxuICAgICAgY2xhc3M9XCJ0b3AtbGVmdFwiXG4gICAgICBbYXR0ci54XT1cIi0oaGFuZGxlU2l6ZSAvIDIpIC0gZ2FwKClcIlxuICAgICAgW2F0dHIueV09XCItKGhhbmRsZVNpemUgLyAyKSAtIGdhcCgpXCJcbiAgICAgIFthdHRyLndpZHRoXT1cImhhbmRsZVNpemVcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cImhhbmRsZVNpemVcIlxuICAgICAgW2F0dHIuZmlsbF09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCd0b3AtbGVmdCcsICRldmVudClcIiAvPlxuXG4gICAgPCEtLSBUb3AgcmlnaHQgLS0+XG4gICAgPHN2ZzpyZWN0XG4gICAgICBjbGFzcz1cInRvcC1yaWdodFwiXG4gICAgICBbYXR0ci54XT1cIm1vZGVsLnNpemUoKS53aWR0aCAtIGhhbmRsZVNpemUgLyAyICsgZ2FwKClcIlxuICAgICAgW2F0dHIueV09XCItKGhhbmRsZVNpemUgLyAyKSAtIGdhcCgpXCJcbiAgICAgIFthdHRyLndpZHRoXT1cImhhbmRsZVNpemVcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cImhhbmRsZVNpemVcIlxuICAgICAgW2F0dHIuZmlsbF09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCd0b3AtcmlnaHQnLCAkZXZlbnQpXCIgLz5cblxuICAgIDwhLS0gQm90dG9tIGxlZnQgLS0+XG4gICAgPHN2ZzpyZWN0XG4gICAgICBjbGFzcz1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIFthdHRyLnhdPVwiLShoYW5kbGVTaXplIC8gMikgLSBnYXAoKVwiXG4gICAgICBbYXR0ci55XT1cIm1vZGVsLnNpemUoKS5oZWlnaHQgLSBoYW5kbGVTaXplIC8gMiArIGdhcCgpXCJcbiAgICAgIFthdHRyLndpZHRoXT1cImhhbmRsZVNpemVcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cImhhbmRsZVNpemVcIlxuICAgICAgW2F0dHIuZmlsbF09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCdib3R0b20tbGVmdCcsICRldmVudClcIiAvPlxuXG4gICAgPCEtLSBCb3R0b20gcmlnaHQgLS0+XG4gICAgPHN2ZzpyZWN0XG4gICAgICBjbGFzcz1cImJvdHRvbS1yaWdodFwiXG4gICAgICBbYXR0ci54XT1cIm1vZGVsLnNpemUoKS53aWR0aCAtIGhhbmRsZVNpemUgLyAyICsgZ2FwKClcIlxuICAgICAgW2F0dHIueV09XCJtb2RlbC5zaXplKCkuaGVpZ2h0IC0gaGFuZGxlU2l6ZSAvIDIgKyBnYXAoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmZpbGxdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgnYm90dG9tLXJpZ2h0JywgJGV2ZW50KVwiIC8+XG4gIDwvc3ZnOmc+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGVudCAvPlxuIl19
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Injectable, computed, inject } from '@angular/core';
|
|
2
2
|
import { FlowEntitiesService } from './flow-entities.service';
|
|
3
|
-
import { entitiesPerFrame } from '../utils/entities-per-frame';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
export class EdgeRenderingService {
|
|
6
5
|
constructor() {
|
|
@@ -8,7 +7,6 @@ export class EdgeRenderingService {
|
|
|
8
7
|
this.edges = computed(() => {
|
|
9
8
|
return this.flowEntitiesService.validEdges().sort((aNode, bNode) => aNode.renderOrder() - bNode.renderOrder());
|
|
10
9
|
});
|
|
11
|
-
this.edgesPerFrame = computed(() => entitiesPerFrame(this.edges().length, 10));
|
|
12
10
|
this.maxOrder = computed(() => {
|
|
13
11
|
return Math.max(...this.flowEntitiesService.validEdges().map((n) => n.renderOrder()));
|
|
14
12
|
});
|
|
@@ -27,4 +25,4 @@ export class EdgeRenderingService {
|
|
|
27
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EdgeRenderingService, decorators: [{
|
|
28
26
|
type: Injectable
|
|
29
27
|
}] });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1yZW5kZXJpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9zZXJ2aWNlcy9lZGdlLXJlbmRlcmluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFJOUQsTUFBTSxPQUFPLG9CQUFvQjtJQURqQztRQUVVLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTFDLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqSCxDQUFDLENBQUMsQ0FBQztRQUVLLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLENBQUM7S0FZSjtJQVZRLElBQUksQ0FBQyxJQUFlO1FBQ3pCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUUxRixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBRUQsWUFBWTtRQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQXBCVSxvQkFBb0I7bUhBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGNvbXB1dGVkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBFZGdlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZWRnZS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFZGdlUmVuZGVyaW5nU2VydmljZSB7XG4gIHByaXZhdGUgZmxvd0VudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZWRnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS52YWxpZEVkZ2VzKCkuc29ydCgoYU5vZGUsIGJOb2RlKSA9PiBhTm9kZS5yZW5kZXJPcmRlcigpIC0gYk5vZGUucmVuZGVyT3JkZXIoKSk7XG4gIH0pO1xuXG4gIHByaXZhdGUgbWF4T3JkZXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuZmxvd0VudGl0aWVzU2VydmljZS52YWxpZEVkZ2VzKCkubWFwKChuKSA9PiBuLnJlbmRlck9yZGVyKCkpKTtcbiAgfSk7XG5cbiAgcHVibGljIHB1bGwoZWRnZTogRWRnZU1vZGVsKSB7XG4gICAgY29uc3QgaXNBbHJlYWR5T25Ub3AgPSBlZGdlLnJlbmRlck9yZGVyKCkgIT09IDAgJiYgdGhpcy5tYXhPcmRlcigpID09PSBlZGdlLnJlbmRlck9yZGVyKCk7XG5cbiAgICBpZiAoaXNBbHJlYWR5T25Ub3ApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBwdWxsIG5vZGVcbiAgICBlZGdlLnJlbmRlck9yZGVyLnNldCh0aGlzLm1heE9yZGVyKCkgKyAxKTtcbiAgfVxufVxuIl19
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { Injectable, computed, inject } from '@angular/core';
|
|
2
2
|
import { FlowEntitiesService } from './flow-entities.service';
|
|
3
3
|
import { isGroupNode } from '../utils/is-group-node';
|
|
4
|
-
import { entitiesPerFrame } from '../utils/entities-per-frame';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
6
5
|
export class NodeRenderingService {
|
|
7
6
|
constructor() {
|
|
8
7
|
this.flowEntitiesService = inject(FlowEntitiesService);
|
|
9
8
|
this.nodes = computed(() => {
|
|
10
|
-
return this.flowEntitiesService.nodes().sort((aNode, bNode) => aNode.renderOrder() - bNode.renderOrder());
|
|
9
|
+
return [...this.flowEntitiesService.nodes().sort((aNode, bNode) => aNode.renderOrder() - bNode.renderOrder())];
|
|
11
10
|
});
|
|
12
11
|
this.groups = computed(() => {
|
|
13
12
|
return this.nodes().filter((n) => isGroupNode(n));
|
|
@@ -15,9 +14,6 @@ export class NodeRenderingService {
|
|
|
15
14
|
this.nonGroups = computed(() => {
|
|
16
15
|
return this.nodes().filter((n) => !isGroupNode(n));
|
|
17
16
|
});
|
|
18
|
-
this.nodesPerFrame = computed(() => entitiesPerFrame(this.nodes().length, 10));
|
|
19
|
-
this.groupsPerFrame = computed(() => entitiesPerFrame(this.groups().length, 10));
|
|
20
|
-
this.nonGroupsPerFrame = computed(() => entitiesPerFrame(this.nonGroups().length, 10));
|
|
21
17
|
this.maxOrder = computed(() => {
|
|
22
18
|
return Math.max(...this.flowEntitiesService.nodes().map((n) => n.renderOrder()));
|
|
23
19
|
});
|
|
@@ -34,4 +30,4 @@ export class NodeRenderingService {
|
|
|
34
30
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeRenderingService, decorators: [{
|
|
35
31
|
type: Injectable
|
|
36
32
|
}] });
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1yZW5kZXJpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9zZXJ2aWNlcy9ub2RlLXJlbmRlcmluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBR3JELE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFVSx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUxQyxVQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakgsQ0FBQyxDQUFDLENBQUM7UUFFYSxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBRWEsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUssYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztLQVNKO0lBUFEsUUFBUSxDQUFDLElBQWU7UUFDN0IsWUFBWTtRQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUxQyxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7K0dBekJVLG9CQUFvQjttSEFBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4vZmxvdy1lbnRpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IGlzR3JvdXBOb2RlIH0gZnJvbSAnLi4vdXRpbHMvaXMtZ3JvdXAtbm9kZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOb2RlUmVuZGVyaW5nU2VydmljZSB7XG4gIHByaXZhdGUgZmxvd0VudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmZsb3dFbnRpdGllc1NlcnZpY2Uubm9kZXMoKS5zb3J0KChhTm9kZSwgYk5vZGUpID0+IGFOb2RlLnJlbmRlck9yZGVyKCkgLSBiTm9kZS5yZW5kZXJPcmRlcigpKV07XG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBncm91cHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXMoKS5maWx0ZXIoKG4pID0+IGlzR3JvdXBOb2RlKG4pKTtcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IG5vbkdyb3VwcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5ub2RlcygpLmZpbHRlcigobikgPT4gIWlzR3JvdXBOb2RlKG4pKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBtYXhPcmRlciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkubWFwKChuKSA9PiBuLnJlbmRlck9yZGVyKCkpKTtcbiAgfSk7XG5cbiAgcHVibGljIHB1bGxOb2RlKG5vZGU6IE5vZGVNb2RlbCkge1xuICAgIC8vIHB1bGwgbm9kZVxuICAgIG5vZGUucmVuZGVyT3JkZXIuc2V0KHRoaXMubWF4T3JkZXIoKSArIDEpO1xuXG4gICAgLy8gcHVsbCBjaGlsZHJlblxuICAgIG5vZGUuY2hpbGRyZW4oKS5mb3JFYWNoKChuKSA9PiB0aGlzLnB1bGxOb2RlKG4pKTtcbiAgfVxufVxuIl19
|