@myrmidon/gve-core 0.0.4 → 0.0.6
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/README.md +45 -77
- package/esm2022/lib/components/animation-timeline/animation-timeline.component.mjs +50 -19
- package/esm2022/lib/components/animation-timeline-set/animation-timeline-set.component.mjs +32 -8
- package/esm2022/lib/components/animation-tween/animation-tween.component.mjs +48 -25
- package/esm2022/lib/components/base-text-char/base-text-char.component.mjs +13 -4
- package/esm2022/lib/components/base-text-editor/base-text-editor.component.mjs +10 -6
- package/esm2022/lib/components/base-text-view/base-text-view.component.mjs +39 -5
- package/esm2022/lib/components/batch-operation-editor/batch-operation-editor.component.mjs +111 -0
- package/esm2022/lib/components/chain-operation-editor/chain-operation-editor.component.mjs +97 -39
- package/esm2022/lib/components/chain-result-view/chain-result-view.component.mjs +48 -13
- package/esm2022/lib/components/feature-editor/feature-editor.component.mjs +27 -12
- package/esm2022/lib/components/feature-set-editor/feature-set-editor.component.mjs +32 -9
- package/esm2022/lib/components/feature-set-view/feature-set-view.component.mjs +28 -8
- package/esm2022/lib/components/ln-heights-editor/ln-heights-editor.component.mjs +38 -7
- package/esm2022/lib/components/operation-source-editor/operation-source-editor.component.mjs +29 -4
- package/esm2022/lib/components/simple-tree/simple-tree.component.mjs +20 -4
- package/esm2022/lib/components/snapshot-editor/snapshot-editor.component.mjs +471 -159
- package/esm2022/lib/components/steps-map/steps-map.component.mjs +37 -9
- package/esm2022/lib/models.mjs +1 -1
- package/esm2022/lib/services/gve-api.service.mjs +4 -4
- package/esm2022/lib/services/settings.service.mjs +6 -5
- package/esm2022/lib/validators/svg-validators.mjs +7 -1
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/myrmidon-gve-core.mjs +1159 -487
- package/fesm2022/myrmidon-gve-core.mjs.map +1 -1
- package/lib/components/animation-timeline/animation-timeline.component.d.ts +31 -9
- package/lib/components/animation-timeline-set/animation-timeline-set.component.d.ts +28 -4
- package/lib/components/animation-tween/animation-tween.component.d.ts +25 -12
- package/lib/components/base-text-char/base-text-char.component.d.ts +16 -0
- package/lib/components/base-text-editor/base-text-editor.component.d.ts +5 -1
- package/lib/components/base-text-view/base-text-view.component.d.ts +37 -0
- package/lib/components/batch-operation-editor/batch-operation-editor.component.d.ts +46 -0
- package/lib/components/chain-operation-editor/chain-operation-editor.component.d.ts +53 -5
- package/lib/components/chain-result-view/chain-result-view.component.d.ts +21 -4
- package/lib/components/feature-editor/feature-editor.component.d.ts +20 -6
- package/lib/components/feature-set-editor/feature-set-editor.component.d.ts +27 -4
- package/lib/components/feature-set-view/feature-set-view.component.d.ts +23 -3
- package/lib/components/ln-heights-editor/ln-heights-editor.component.d.ts +22 -0
- package/lib/components/operation-source-editor/operation-source-editor.component.d.ts +31 -0
- package/lib/components/simple-tree/simple-tree.component.d.ts +19 -0
- package/lib/components/snapshot-editor/snapshot-editor.component.d.ts +184 -19
- package/lib/components/steps-map/steps-map.component.d.ts +22 -3
- package/lib/models.d.ts +8 -0
- package/lib/services/gve-api.service.d.ts +33 -0
- package/lib/services/settings.service.d.ts +2 -1
- package/lib/validators/svg-validators.d.ts +6 -0
- package/package.json +10 -10
- package/public-api.d.ts +1 -1
- package/esm2022/lib/components/animation-vars/animation-vars.component.mjs +0 -141
- package/lib/components/animation-vars/animation-vars.component.d.ts +0 -30
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { ReactiveFormsModule, Validators, } from '@angular/forms';
|
|
4
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
6
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
7
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
-
import { MatInputModule } from '@angular/material/input';
|
|
9
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
10
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@angular/forms";
|
|
13
|
-
import * as i2 from "@angular/common";
|
|
14
|
-
import * as i3 from "@angular/material/button";
|
|
15
|
-
import * as i4 from "@angular/material/form-field";
|
|
16
|
-
import * as i5 from "@angular/material/icon";
|
|
17
|
-
import * as i6 from "@angular/material/input";
|
|
18
|
-
import * as i7 from "@angular/material/tooltip";
|
|
19
|
-
export class AnimationVarsComponent {
|
|
20
|
-
get vars() {
|
|
21
|
-
return this._vars;
|
|
22
|
-
}
|
|
23
|
-
set vars(value) {
|
|
24
|
-
if (this._vars === value) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
this._vars = value;
|
|
28
|
-
this.updateForm(value);
|
|
29
|
-
}
|
|
30
|
-
constructor(formBuilder) {
|
|
31
|
-
this._vars = {};
|
|
32
|
-
this.varsChange = new EventEmitter();
|
|
33
|
-
this.editedVars = [];
|
|
34
|
-
this.name = formBuilder.control('', {
|
|
35
|
-
nonNullable: true,
|
|
36
|
-
validators: [Validators.required, Validators.maxLength(100)],
|
|
37
|
-
});
|
|
38
|
-
this.value = formBuilder.control('', {
|
|
39
|
-
nonNullable: true,
|
|
40
|
-
validators: [Validators.required, Validators.maxLength(1000)],
|
|
41
|
-
});
|
|
42
|
-
this.form = formBuilder.group({
|
|
43
|
-
name: this.name,
|
|
44
|
-
value: this.value,
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
updateForm(vars) {
|
|
48
|
-
this.editedVars = Object.entries(vars)
|
|
49
|
-
.map(([name, value]) => ({ name, value }))
|
|
50
|
-
.sort((a, b) => a.name.localeCompare(b.name));
|
|
51
|
-
}
|
|
52
|
-
getVars() {
|
|
53
|
-
return this.editedVars.reduce((acc, { name, value }) => ({ ...acc, [name]: value }), {});
|
|
54
|
-
}
|
|
55
|
-
addVar() {
|
|
56
|
-
this.form.reset();
|
|
57
|
-
// focus the name input
|
|
58
|
-
setTimeout(() => this.nameInput?.nativeElement.focus(), 0);
|
|
59
|
-
}
|
|
60
|
-
editVar(index) {
|
|
61
|
-
const { name, value } = this.editedVars[index];
|
|
62
|
-
this.form.setValue({ name, value });
|
|
63
|
-
this.form.markAsPristine();
|
|
64
|
-
// focus the name input
|
|
65
|
-
setTimeout(() => this.nameInput?.nativeElement.focus(), 0);
|
|
66
|
-
}
|
|
67
|
-
deleteVar(index) {
|
|
68
|
-
this.editedVars = this.editedVars.filter((_, i) => i !== index);
|
|
69
|
-
this.varsChange.emit(this.getVars());
|
|
70
|
-
}
|
|
71
|
-
parseValue(value) {
|
|
72
|
-
if (!value) {
|
|
73
|
-
return '';
|
|
74
|
-
}
|
|
75
|
-
if (value === 'true') {
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
else if (value === 'false') {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
else if (/^\d+$/.test(value)) {
|
|
82
|
-
return parseInt(value, 10);
|
|
83
|
-
}
|
|
84
|
-
else if (/^\d+\.\d+$/.test(value)) {
|
|
85
|
-
return parseFloat(value);
|
|
86
|
-
}
|
|
87
|
-
return value;
|
|
88
|
-
}
|
|
89
|
-
saveVar() {
|
|
90
|
-
if (this.form.invalid) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const { name, value } = this.form.value;
|
|
94
|
-
// parse value assuming that if it looks like a boolean/number
|
|
95
|
-
// its value should be a boolean/number rather than a string
|
|
96
|
-
const v = this.parseValue(value);
|
|
97
|
-
const editedVars = [...this.editedVars];
|
|
98
|
-
// if name already exists, update the value; else add it
|
|
99
|
-
const existingIndex = this.editedVars.findIndex((vr) => vr.name === name);
|
|
100
|
-
if (existingIndex !== -1) {
|
|
101
|
-
editedVars[existingIndex] = { name, value: v };
|
|
102
|
-
this.editedVars = editedVars;
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
editedVars.push({ name, value: v });
|
|
107
|
-
this.editedVars = editedVars.sort((a, b) => a.name.localeCompare(b.name));
|
|
108
|
-
}
|
|
109
|
-
this.varsChange.emit(this.getVars());
|
|
110
|
-
setTimeout(() => {
|
|
111
|
-
this.nameInput?.nativeElement.focus();
|
|
112
|
-
this.form.reset();
|
|
113
|
-
this.form.markAsPristine();
|
|
114
|
-
this.form.updateValueAndValidity();
|
|
115
|
-
}, 0);
|
|
116
|
-
}
|
|
117
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AnimationVarsComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
118
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: AnimationVarsComponent, isStandalone: true, selector: "gve-animation-vars", inputs: { vars: "vars" }, outputs: { varsChange: "varsChange" }, viewQueries: [{ propertyName: "nameInput", first: true, predicate: ["vname"], descendants: true, static: true }], ngImport: i0, template: "<div>\r\n <div>\r\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"addVar()\">\r\n <mat-icon>add</mat-icon>\r\n property\r\n </button>\r\n </div>\r\n\r\n @if (editedVars.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>name</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (v of editedVars; track v.name; let index=$index) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"editVar(index)\"\r\n matTooltip=\"Edit this property\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"deleteVar(index)\"\r\n matTooltip=\"Delete this property\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ v.name }}</td>\r\n <td>{{ v.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @else {\r\n <p class=\"muted\">(no vars)</p>\r\n }\r\n\r\n <form [formGroup]=\"form\" (submit)=\"saveVar()\">\r\n <fieldset>\r\n <div class=\"form-row\">\r\n <!-- name -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput [formControl]=\"name\" #vname />\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >name required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.maxLength && (name.dirty || name.touched)\"\r\n >name too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput [formControl]=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(value).errors?.required && (value.dirty || value.touched)\r\n \"\r\n >value required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"\r\n $any(value).errors?.maxLength && (value.dirty || value.touched)\r\n \"\r\n >value too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\r\n </button>\r\n </div>\r\n </fieldset>\r\n </form>\r\n</div>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}fieldset{border:1px solid silver;border-radius:4px;padding:8px;margin:8px 0}table{width:100%;border-collapse:collapse}th{color:#909090;font-weight:400;text-align:left;background-color:#e1e0e0}th,td{padding:4px;border-bottom:1px solid silver}tbody tr:nth-child(2n){background-color:#e8e8e8}td.fit-width{width:1px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
119
|
-
}
|
|
120
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AnimationVarsComponent, decorators: [{
|
|
121
|
-
type: Component,
|
|
122
|
-
args: [{ selector: 'gve-animation-vars', standalone: true, imports: [
|
|
123
|
-
CommonModule,
|
|
124
|
-
ReactiveFormsModule,
|
|
125
|
-
MatButtonModule,
|
|
126
|
-
MatCheckboxModule,
|
|
127
|
-
MatFormFieldModule,
|
|
128
|
-
MatIconModule,
|
|
129
|
-
MatInputModule,
|
|
130
|
-
MatSelectModule,
|
|
131
|
-
MatTooltipModule,
|
|
132
|
-
], template: "<div>\r\n <div>\r\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"addVar()\">\r\n <mat-icon>add</mat-icon>\r\n property\r\n </button>\r\n </div>\r\n\r\n @if (editedVars.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>name</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (v of editedVars; track v.name; let index=$index) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"editVar(index)\"\r\n matTooltip=\"Edit this property\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"deleteVar(index)\"\r\n matTooltip=\"Delete this property\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ v.name }}</td>\r\n <td>{{ v.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @else {\r\n <p class=\"muted\">(no vars)</p>\r\n }\r\n\r\n <form [formGroup]=\"form\" (submit)=\"saveVar()\">\r\n <fieldset>\r\n <div class=\"form-row\">\r\n <!-- name -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput [formControl]=\"name\" #vname />\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >name required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.maxLength && (name.dirty || name.touched)\"\r\n >name too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput [formControl]=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(value).errors?.required && (value.dirty || value.touched)\r\n \"\r\n >value required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"\r\n $any(value).errors?.maxLength && (value.dirty || value.touched)\r\n \"\r\n >value too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\r\n </button>\r\n </div>\r\n </fieldset>\r\n </form>\r\n</div>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}fieldset{border:1px solid silver;border-radius:4px;padding:8px;margin:8px 0}table{width:100%;border-collapse:collapse}th{color:#909090;font-weight:400;text-align:left;background-color:#e1e0e0}th,td{padding:4px;border-bottom:1px solid silver}tbody tr:nth-child(2n){background-color:#e8e8e8}td.fit-width{width:1px;white-space:nowrap}\n"] }]
|
|
133
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { vars: [{
|
|
134
|
-
type: Input
|
|
135
|
-
}], varsChange: [{
|
|
136
|
-
type: Output
|
|
137
|
-
}], nameInput: [{
|
|
138
|
-
type: ViewChild,
|
|
139
|
-
args: ['vname', { static: true }]
|
|
140
|
-
}] } });
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLXZhcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2FuaW1hdGlvbi12YXJzL2FuaW1hdGlvbi12YXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9hbmltYXRpb24tdmFycy9hbmltYXRpb24tdmFycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUlMLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7OztBQTBCN0QsTUFBTSxPQUFPLHNCQUFzQjtJQUdqQyxJQUNXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLEtBQXVCO1FBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQWVELFlBQVksV0FBd0I7UUEzQjVCLFVBQUssR0FBcUIsRUFBRSxDQUFDO1FBZTlCLGVBQVUsR0FDZixJQUFJLFlBQVksRUFBb0IsQ0FBQztRQVNoQyxlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUdyQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQVMsRUFBRSxFQUFFO1lBQzFDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3RCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQVMsRUFBRSxFQUFFO1lBQzNDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5RCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBc0I7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzthQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ3pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxPQUFPO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FDM0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ3JELEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLHVCQUF1QjtRQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFhO1FBQzFCLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0IsdUJBQXVCO1FBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDN0IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7YUFBTSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFeEMsOERBQThEO1FBQzlELDREQUE0RDtRQUM1RCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEMsd0RBQXdEO1FBQ3hELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQzFFLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUM3QixPQUFPO1FBQ1QsQ0FBQzthQUFNLENBQUM7WUFDTixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUVyQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNyQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDOzhHQXpIVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixpUUNqRG5DLDB5RkFpR0EsaWVEN0RJLFlBQVksa0lBQ1osbUJBQW1CLCs5QkFDbkIsZUFBZSx3VUFDZixpQkFBaUIsOEJBQ2pCLGtCQUFrQix1WUFDbEIsYUFBYSxtTEFDYixjQUFjLDBXQUNkLGVBQWUsOEJBQ2YsZ0JBQWdCOzsyRkFLUCxzQkFBc0I7a0JBakJsQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGdCQUFnQjtxQkFDakI7Z0ZBUVUsSUFBSTtzQkFEZCxLQUFLO2dCQWFDLFVBQVU7c0JBRGhCLE1BQU07Z0JBS0EsU0FBUztzQkFEZixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBHdmVBbmltYXRpb25WYXJzIH0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuXHJcbmludGVyZmFjZSBWYXJWaWV3TW9kZWwge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtYW5pbWF0aW9uLXZhcnMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hbmltYXRpb24tdmFycy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2FuaW1hdGlvbi12YXJzLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uVmFyc0NvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfdmFyczogR3ZlQW5pbWF0aW9uVmFycyA9IHt9O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgdmFycygpOiBHdmVBbmltYXRpb25WYXJzIHtcclxuICAgIHJldHVybiB0aGlzLl92YXJzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHZhcnModmFsdWU6IEd2ZUFuaW1hdGlvblZhcnMpIHtcclxuICAgIGlmICh0aGlzLl92YXJzID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl92YXJzID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm0odmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHZhcnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxHdmVBbmltYXRpb25WYXJzPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPEd2ZUFuaW1hdGlvblZhcnM+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ZuYW1lJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwdWJsaWMgbmFtZUlucHV0PzogRWxlbWVudFJlZjtcclxuXHJcbiAgcHVibGljIG5hbWU6IEZvcm1Db250cm9sPHN0cmluZz47XHJcbiAgcHVibGljIHZhbHVlOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHB1YmxpYyBlZGl0ZWRWYXJzOiBWYXJWaWV3TW9kZWxbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMubmFtZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2w8c3RyaW5nPignJywge1xyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCldLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnZhbHVlID0gZm9ybUJ1aWxkZXIuY29udHJvbDxzdHJpbmc+KCcnLCB7XHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwMCldLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybSh2YXJzOiBHdmVBbmltYXRpb25WYXJzKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRlZFZhcnMgPSBPYmplY3QuZW50cmllcyh2YXJzKVxyXG4gICAgICAubWFwKChbbmFtZSwgdmFsdWVdKSA9PiAoeyBuYW1lLCB2YWx1ZSB9KSlcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRWYXJzKCk6IEd2ZUFuaW1hdGlvblZhcnMge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkVmFycy5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIHsgbmFtZSwgdmFsdWUgfSkgPT4gKHsgLi4uYWNjLCBbbmFtZV06IHZhbHVlIH0pLFxyXG4gICAgICB7fVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRWYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgIC8vIGZvY3VzIHRoZSBuYW1lIGlucHV0XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmFtZUlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRWYXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZSB9ID0gdGhpcy5lZGl0ZWRWYXJzW2luZGV4XTtcclxuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh7IG5hbWUsIHZhbHVlIH0pO1xyXG4gICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAvLyBmb2N1cyB0aGUgbmFtZSBpbnB1dFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5hbWVJbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpLCAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVWYXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0ZWRWYXJzID0gdGhpcy5lZGl0ZWRWYXJzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gICAgdGhpcy52YXJzQ2hhbmdlLmVtaXQodGhpcy5nZXRWYXJzKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICB9IGVsc2UgaWYgKC9eXFxkK1xcLlxcZCskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZVZhcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSB0aGlzLmZvcm0udmFsdWU7XHJcblxyXG4gICAgLy8gcGFyc2UgdmFsdWUgYXNzdW1pbmcgdGhhdCBpZiBpdCBsb29rcyBsaWtlIGEgYm9vbGVhbi9udW1iZXJcclxuICAgIC8vIGl0cyB2YWx1ZSBzaG91bGQgYmUgYSBib29sZWFuL251bWJlciByYXRoZXIgdGhhbiBhIHN0cmluZ1xyXG4gICAgY29uc3QgdiA9IHRoaXMucGFyc2VWYWx1ZSh2YWx1ZSk7XHJcblxyXG4gICAgY29uc3QgZWRpdGVkVmFycyA9IFsuLi50aGlzLmVkaXRlZFZhcnNdO1xyXG5cclxuICAgIC8vIGlmIG5hbWUgYWxyZWFkeSBleGlzdHMsIHVwZGF0ZSB0aGUgdmFsdWU7IGVsc2UgYWRkIGl0XHJcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5lZGl0ZWRWYXJzLmZpbmRJbmRleCgodnIpID0+IHZyLm5hbWUgPT09IG5hbWUpO1xyXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XHJcbiAgICAgIGVkaXRlZFZhcnNbZXhpc3RpbmdJbmRleF0gPSB7IG5hbWUsIHZhbHVlOiB2IH07XHJcbiAgICAgIHRoaXMuZWRpdGVkVmFycyA9IGVkaXRlZFZhcnM7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVkaXRlZFZhcnMucHVzaCh7IG5hbWUsIHZhbHVlOiB2IH0pO1xyXG4gICAgICB0aGlzLmVkaXRlZFZhcnMgPSBlZGl0ZWRWYXJzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52YXJzQ2hhbmdlLmVtaXQodGhpcy5nZXRWYXJzKCkpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm5hbWVJbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdj5cclxuICA8ZGl2PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImFkZFZhcigpXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICBwcm9wZXJ0eVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIEBpZiAoZWRpdGVkVmFycy5sZW5ndGgpIHtcclxuICA8dGFibGU+XHJcbiAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICA8dGg+bmFtZTwvdGg+XHJcbiAgICAgICAgPHRoPnZhbHVlPC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8dGJvZHk+XHJcbiAgICAgIEBmb3IgKHYgb2YgZWRpdGVkVmFyczsgdHJhY2sgdi5uYW1lOyBsZXQgaW5kZXg9JGluZGV4KSB7XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGQgY2xhc3M9XCJmaXQtd2lkdGhcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdFZhcihpbmRleClcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCB0aGlzIHByb3BlcnR5XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXByaW1hcnlcIj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVWYXIoaW5kZXgpXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSB0aGlzIHByb3BlcnR5XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXdhcm5cIj5yZW1vdmVfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IHYubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IHYudmFsdWUgfX08L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICB9XHJcbiAgICA8L3Rib2R5PlxyXG4gIDwvdGFibGU+XHJcbiAgfSBAZWxzZSB7XHJcbiAgPHAgY2xhc3M9XCJtdXRlZFwiPihubyB2YXJzKTwvcD5cclxuICB9XHJcblxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZVZhcigpXCI+XHJcbiAgICA8ZmllbGRzZXQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgIDwhLS0gbmFtZSAtLT5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPm5hbWU8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwibmFtZVwiICN2bmFtZSAvPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAqbmdJZj1cIiRhbnkobmFtZSkuZXJyb3JzPy5yZXF1aXJlZCAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgPm5hbWUgcmVxdWlyZWQ8L21hdC1lcnJvclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAqbmdJZj1cIiRhbnkobmFtZSkuZXJyb3JzPy5tYXhMZW5ndGggJiYgKG5hbWUuZGlydHkgfHwgbmFtZS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgID5uYW1lIHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICA8IS0tIHZhbHVlIC0tPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+dmFsdWU8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwidmFsdWVcIiAvPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICRhbnkodmFsdWUpLmVycm9ycz8ucmVxdWlyZWQgJiYgKHZhbHVlLmRpcnR5IHx8IHZhbHVlLnRvdWNoZWQpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID52YWx1ZSByZXF1aXJlZDwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgJGFueSh2YWx1ZSkuZXJyb3JzPy5tYXhMZW5ndGggJiYgKHZhbHVlLmRpcnR5IHx8IHZhbHVlLnRvdWNoZWQpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID52YWx1ZSB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtcHJpbWFyeVwiPmFkZF9jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZmllbGRzZXQ+XHJcbiAgPC9mb3JtPlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { ElementRef, EventEmitter } from '@angular/core';
|
|
2
|
-
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
|
|
3
|
-
import { GveAnimationVars } from '@myrmidon/gve-snapshot-view';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
interface VarViewModel {
|
|
6
|
-
name: string;
|
|
7
|
-
value: string | number | boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare class AnimationVarsComponent {
|
|
10
|
-
private _vars;
|
|
11
|
-
get vars(): GveAnimationVars;
|
|
12
|
-
set vars(value: GveAnimationVars);
|
|
13
|
-
varsChange: EventEmitter<GveAnimationVars>;
|
|
14
|
-
nameInput?: ElementRef;
|
|
15
|
-
name: FormControl<string>;
|
|
16
|
-
value: FormControl<string>;
|
|
17
|
-
form: FormGroup;
|
|
18
|
-
editedVars: VarViewModel[];
|
|
19
|
-
constructor(formBuilder: FormBuilder);
|
|
20
|
-
private updateForm;
|
|
21
|
-
private getVars;
|
|
22
|
-
addVar(): void;
|
|
23
|
-
editVar(index: number): void;
|
|
24
|
-
deleteVar(index: number): void;
|
|
25
|
-
private parseValue;
|
|
26
|
-
saveVar(): void;
|
|
27
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AnimationVarsComponent, never>;
|
|
28
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AnimationVarsComponent, "gve-animation-vars", never, { "vars": { "alias": "vars"; "required": false; }; }, { "varsChange": "varsChange"; }, never, never, true, never>;
|
|
29
|
-
}
|
|
30
|
-
export {};
|