@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
package/esm2022/lib/components/operation-source-editor/operation-source-editor.component.mjs
CHANGED
|
@@ -16,7 +16,26 @@ import * as i5 from "@angular/material/input";
|
|
|
16
16
|
import * as i6 from "@angular/material/select";
|
|
17
17
|
import * as i7 from "@angular/material/core";
|
|
18
18
|
import * as i8 from "@angular/material/tooltip";
|
|
19
|
+
/**
|
|
20
|
+
* 🔑 `gve-operation-source-editor`
|
|
21
|
+
*
|
|
22
|
+
* A component to edit an operation source.
|
|
23
|
+
* Used by chain operation editor component.
|
|
24
|
+
*
|
|
25
|
+
* - ▶️ `source` (`OperationSource`): the source to edit.
|
|
26
|
+
* - ▶️ `ids` (`LabeledId[]`): the list of source IDs, when using a closed
|
|
27
|
+
* list for them.
|
|
28
|
+
* - ▶️ `types` (`LabeledId[]`): the list of source types, when using a closed
|
|
29
|
+
* list for them.
|
|
30
|
+
* - 🔥 `sourceChange` (`EventEmitter<OperationSource>`): the event emitted
|
|
31
|
+
* when the source changes.
|
|
32
|
+
* - 🔥 `sourceCancel` (`EventEmitter<void>`): the event emitted when the
|
|
33
|
+
* edit is canceled.
|
|
34
|
+
*/
|
|
19
35
|
export class OperationSourceEditorComponent {
|
|
36
|
+
/**
|
|
37
|
+
* The source to edit.
|
|
38
|
+
*/
|
|
20
39
|
get source() {
|
|
21
40
|
return this._source;
|
|
22
41
|
}
|
|
@@ -28,7 +47,13 @@ export class OperationSourceEditorComponent {
|
|
|
28
47
|
this.updateForm(this._source);
|
|
29
48
|
}
|
|
30
49
|
constructor(formBuilder) {
|
|
50
|
+
/**
|
|
51
|
+
* The event emitted when the source changes.
|
|
52
|
+
*/
|
|
31
53
|
this.sourceChange = new EventEmitter();
|
|
54
|
+
/**
|
|
55
|
+
* The event emitted when the edit is canceled.
|
|
56
|
+
*/
|
|
32
57
|
this.sourceCancel = new EventEmitter();
|
|
33
58
|
this.id = new FormControl('', {
|
|
34
59
|
validators: [Validators.required, Validators.maxLength(50)],
|
|
@@ -77,10 +102,10 @@ export class OperationSourceEditorComponent {
|
|
|
77
102
|
};
|
|
78
103
|
this.sourceChange.emit(this._source);
|
|
79
104
|
}
|
|
80
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
81
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.
|
|
105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OperationSourceEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: OperationSourceEditorComponent, isStandalone: true, selector: "gve-operation-source-editor", inputs: { source: "source", ids: "ids", types: "types" }, outputs: { sourceChange: "sourceChange", sourceCancel: "sourceCancel" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n <!-- id -->\r\n <!-- id (bound) -->\r\n @if (ids?.length) {\r\n <mat-form-field>\r\n <mat-label>id</mat-label>\r\n <mat-select [formControl]=\"id\">\r\n @for (i of ids; track i.id) {\r\n <mat-option [value]=\"i.id\">{{ i.label }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ($any(id.errors)?.required && (id.dirty || id.touched)) {\r\n <mat-error>ID required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- id (free) -->\r\n <mat-form-field>\r\n <mat-label>id</mat-label>\r\n <input matInput [formControl]=\"id\" />\r\n @if ($any(id.errors)?.required && (id.dirty || id.touched)) {\r\n <mat-error>ID required</mat-error>\r\n } @if ($any(id.errors)?.maxLength && (id.dirty || id.touched)) {\r\n <mat-error>id too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- type (bound) -->\r\n @if (types?.length) {\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <mat-select [formControl]=\"type\">\r\n @for (i of types; track i.id) {\r\n <mat-option [value]=\"i.id\">{{ i.label }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ($any(type.errors)?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- type (free) -->\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <input matInput [formControl]=\"type\" />\r\n @if ($any(type.errors)?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n } @if ($any(type.errors)?.maxLength && (type.dirty || type.touched)) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- rank -->\r\n <mat-form-field class=\"nr\">\r\n <mat-label>rank</mat-label>\r\n <input matInput [formControl]=\"rank\" type=\"number\" min=\"0\" />\r\n </mat-form-field>\r\n </div>\r\n <!-- note -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput [formControl]=\"note\" class=\"long-text\"></textarea>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div class=\"form-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Accept changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".long-text{width:100%;max-width:800px}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.nr{width:5em}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: "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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { 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: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.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: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
82
107
|
}
|
|
83
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OperationSourceEditorComponent, decorators: [{
|
|
84
109
|
type: Component,
|
|
85
110
|
args: [{ selector: 'gve-operation-source-editor', standalone: true, imports: [
|
|
86
111
|
CommonModule,
|
|
@@ -103,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
103
128
|
}], sourceCancel: [{
|
|
104
129
|
type: Output
|
|
105
130
|
}] } });
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLXNvdXJjZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL29wZXJhdGlvbi1zb3VyY2UtZWRpdG9yL29wZXJhdGlvbi1zb3VyY2UtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9vcGVyYXRpb24tc291cmNlLWVkaXRvci9vcGVyYXRpb24tc291cmNlLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBRUwsV0FBVyxFQUVYLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7QUFvQjdELE1BQU0sT0FBTyw4QkFBOEI7SUFHekMsSUFDVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENB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LElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDOzhHQXJGVSw4QkFBOEI7a0dBQTlCLDhCQUE4QiwwTkNuQzNDLGk0RkEyRkEseWNEcEVJLFlBQVksOEJBQ1osbUJBQW1CLDR6Q0FDbkIsZUFBZSwySUFDZixrQkFBa0IsdVlBQ2xCLGFBQWEsbUxBQ2IsY0FBYywwV0FDZCxlQUFlLG1yQkFDZixnQkFBZ0I7OzJGQUtQLDhCQUE4QjtrQkFoQjFDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBQzNCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGdCQUFnQjtxQkFDakI7Z0ZBUVUsTUFBTTtzQkFEaEIsS0FBSztnQkFhQyxHQUFHO3NCQURULEtBQUs7Z0JBSUMsS0FBSztzQkFEWCxLQUFLO2dCQUlVLFlBQVk7c0JBRDNCLE1BQU07Z0JBTUEsWUFBWTtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgTGFiZWxlZElkLCBPcGVyYXRpb25Tb3VyY2UgfSBmcm9tICdAbXlybWlkb24vZ3ZlLXNuYXBzaG90LXZpZXcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtb3BlcmF0aW9uLXNvdXJjZS1lZGl0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vb3BlcmF0aW9uLXNvdXJjZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9vcGVyYXRpb24tc291cmNlLWVkaXRvci5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvblNvdXJjZUVkaXRvckNvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfc291cmNlOiBPcGVyYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzb3VyY2UoKTogT3BlcmF0aW9uU291cmNlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgc291cmNlKHZhbHVlOiBPcGVyYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fc291cmNlID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm0odGhpcy5fc291cmNlKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlkcz86IExhYmVsZWRJZFtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB0eXBlcz86IExhYmVsZWRJZFtdO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuICAgIE9wZXJhdGlvblNvdXJjZSB8IHVuZGVmaW5lZFxyXG4gID4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHNvdXJjZUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGlkOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyB0eXBlOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyByYW5rOiBGb3JtQ29udHJvbDxudW1iZXI+O1xyXG4gIHB1YmxpYyBub3RlOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuaWQgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtcclxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV0sXHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnR5cGUgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtcclxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV0sXHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJhbmsgPSBuZXcgRm9ybUNvbnRyb2woMCwge1xyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5ub3RlID0gbmV3IEZvcm1Db250cm9sKG51bGwsIHtcclxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMDApXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICByYW5rOiB0aGlzLnJhbmssXHJcbiAgICAgIG5vdGU6IHRoaXMubm90ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtKHNvdXJjZT86IE9wZXJhdGlvblNvdXJjZSk6IHZvaWQge1xyXG4gICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaWQuc2V0VmFsdWUoc291cmNlLmlkKTtcclxuICAgIHRoaXMudHlwZS5zZXRWYWx1ZShzb3VyY2UudHlwZSk7XHJcbiAgICB0aGlzLnJhbmsuc2V0VmFsdWUoc291cmNlLnJhbmsgfHwgMCk7XHJcbiAgICB0aGlzLm5vdGUuc2V0VmFsdWUoc291cmNlLm5vdGUgfHwgbnVsbCk7XHJcbiAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvdXJjZUNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zb3VyY2UgPSB7XHJcbiAgICAgIGlkOiB0aGlzLmlkLnZhbHVlLFxyXG4gICAgICB0eXBlOiB0aGlzLnR5cGUudmFsdWUsXHJcbiAgICAgIHJhbms6IHRoaXMucmFuay52YWx1ZSxcclxuICAgICAgbm90ZTogdGhpcy5ub3RlLnZhbHVlIHx8IHVuZGVmaW5lZCxcclxuICAgIH07XHJcbiAgICB0aGlzLnNvdXJjZUNoYW5nZS5lbWl0KHRoaXMuX3NvdXJjZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICA8IS0tIGlkIC0tPlxyXG4gICAgPCEtLSBpZCAoYm91bmQpIC0tPlxyXG4gICAgQGlmIChpZHM/Lmxlbmd0aCkge1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPmlkPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJpZFwiPlxyXG4gICAgICAgIEBmb3IgKGkgb2YgaWRzOyB0cmFjayBpLmlkKSB7XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImkuaWRcIj57eyBpLmxhYmVsIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICBAaWYgKCRhbnkoaWQuZXJyb3JzKT8ucmVxdWlyZWQgJiYgKGlkLmRpcnR5IHx8IGlkLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+SUQgcmVxdWlyZWQ8L21hdC1lcnJvcj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPCEtLSBpZCAoZnJlZSkgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+aWQ8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJpZFwiIC8+XHJcbiAgICAgIEBpZiAoJGFueShpZC5lcnJvcnMpPy5yZXF1aXJlZCAmJiAoaWQuZGlydHkgfHwgaWQudG91Y2hlZCkpIHtcclxuICAgICAgPG1hdC1lcnJvcj5JRCByZXF1aXJlZDwvbWF0LWVycm9yPlxyXG4gICAgICB9IEBpZiAoJGFueShpZC5lcnJvcnMpPy5tYXhMZW5ndGggJiYgKGlkLmRpcnR5IHx8IGlkLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+aWQgdG9vIGxvbmc8L21hdC1lcnJvcj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIHR5cGUgKGJvdW5kKSAtLT5cclxuICAgIEBpZiAodHlwZXM/Lmxlbmd0aCkge1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnR5cGU8L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInR5cGVcIj5cclxuICAgICAgICBAZm9yIChpIG9mIHR5cGVzOyB0cmFjayBpLmlkKSB7XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImkuaWRcIj57eyBpLmxhYmVsIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICBAaWYgKCRhbnkodHlwZS5lcnJvcnMpPy5yZXF1aXJlZCAmJiAodHlwZS5kaXJ0eSB8fCB0eXBlLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+dHlwZSByZXF1aXJlZDwvbWF0LWVycm9yPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICA8IS0tIHR5cGUgKGZyZWUpIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnR5cGU8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJ0eXBlXCIgLz5cclxuICAgICAgQGlmICgkYW55KHR5cGUuZXJyb3JzKT8ucmVxdWlyZWQgJiYgKHR5cGUuZGlydHkgfHwgdHlwZS50b3VjaGVkKSkge1xyXG4gICAgICA8bWF0LWVycm9yPnR5cGUgcmVxdWlyZWQ8L21hdC1lcnJvcj5cclxuICAgICAgfSBAaWYgKCRhbnkodHlwZS5lcnJvcnMpPy5tYXhMZW5ndGggJiYgKHR5cGUuZGlydHkgfHwgdHlwZS50b3VjaGVkKSkge1xyXG4gICAgICA8bWF0LWVycm9yPnR5cGUgdG9vIGxvbmc8L21hdC1lcnJvcj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIHJhbmsgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJuclwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnJhbms8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJyYW5rXCIgdHlwZT1cIm51bWJlclwiIG1pbj1cIjBcIiAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuICA8IS0tIG5vdGUgLS0+XHJcbiAgPGRpdj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImxvbmctdGV4dFwiPlxyXG4gICAgICA8bWF0LWxhYmVsPm5vdGU8L21hdC1sYWJlbD5cclxuICAgICAgPHRleHRhcmVhIG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJub3RlXCIgY2xhc3M9XCJsb25nLXRleHRcIj48L3RleHRhcmVhPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBidXR0b25zIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIG1hdFRvb2x0aXA9XCJEaXNjYXJkIGNoYW5nZXNcIlxyXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtd2FyblwiPmNsZWFyPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIG1hdFRvb2x0aXA9XCJBY2NlcHQgY2hhbmdlc1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWQgfHwgZm9ybS5wcmlzdGluZVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1wcmltYXJ5XCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLXNvdXJjZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL29wZXJhdGlvbi1zb3VyY2UtZWRpdG9yL29wZXJhdGlvbi1zb3VyY2UtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9vcGVyYXRpb24tc291cmNlLWVkaXRvci9vcGVyYXRpb24tc291cmNlLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBRUwsV0FBVyxFQUVYLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7QUFJN0Q7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBaUJILE1BQU0sT0FBTyw4QkFBOEI7SUFHekM7O09BRUc7SUFDSCxJQUNXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQVcsTUFBTSxDQUFDLEtBQXlDO1FBQ3pELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBa0NELFlBQVksV0FBd0I7UUFwQnBDOztXQUVHO1FBRWEsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFFNUMsQ0FBQztRQUVKOztXQUVHO1FBRUksaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBUzdDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQzVCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRCxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUM5QixVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0QsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLEVBQUU7WUFDN0IsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDaEMsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVLENBQUMsTUFBd0I7UUFDekMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxJQUFJO1FBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUs7WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTO1NBQ25DLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQzsrR0FwR1UsOEJBQThCO21HQUE5Qiw4QkFBOEIsME5DbkQzQyxpNEZBMkZBLHljRHBESSxZQUFZLDhCQUNaLG1CQUFtQiw0ekNBQ25CLGVBQWUsMklBQ2Ysa0JBQWtCLHVZQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsZUFBZSxtckJBQ2YsZ0JBQWdCOzs0RkFLUCw4QkFBOEI7a0JBaEIxQyxTQUFTOytCQUNFLDZCQUE2QixjQUMzQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQkFBZ0I7cUJBQ2pCO2dGQVdVLE1BQU07c0JBRGhCLEtBQUs7Z0JBZ0JDLEdBQUc7c0JBRFQsS0FBSztnQkFPQyxLQUFLO3NCQURYLEtBQUs7Z0JBT1UsWUFBWTtzQkFEM0IsTUFBTTtnQkFTQSxZQUFZO3NCQURsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBMYWJlbGVkSWQsIE9wZXJhdGlvblNvdXJjZSB9IGZyb20gJ0BteXJtaWRvbi9ndmUtc25hcHNob3Qtdmlldyc7XHJcblxyXG4vKipcclxuICog8J+UkSBgZ3ZlLW9wZXJhdGlvbi1zb3VyY2UtZWRpdG9yYFxyXG4gKlxyXG4gKiBBIGNvbXBvbmVudCB0byBlZGl0IGFuIG9wZXJhdGlvbiBzb3VyY2UuXHJcbiAqIFVzZWQgYnkgY2hhaW4gb3BlcmF0aW9uIGVkaXRvciBjb21wb25lbnQuXHJcbiAqXHJcbiAqIC0g4pa277iPIGBzb3VyY2VgIChgT3BlcmF0aW9uU291cmNlYCk6IHRoZSBzb3VyY2UgdG8gZWRpdC5cclxuICogLSDilrbvuI8gYGlkc2AgKGBMYWJlbGVkSWRbXWApOiB0aGUgbGlzdCBvZiBzb3VyY2UgSURzLCB3aGVuIHVzaW5nIGEgY2xvc2VkXHJcbiAqIGxpc3QgZm9yIHRoZW0uXHJcbiAqIC0g4pa277iPIGB0eXBlc2AgKGBMYWJlbGVkSWRbXWApOiB0aGUgbGlzdCBvZiBzb3VyY2UgdHlwZXMsIHdoZW4gdXNpbmcgYSBjbG9zZWRcclxuICogbGlzdCBmb3IgdGhlbS5cclxuICogLSDwn5SlIGBzb3VyY2VDaGFuZ2VgIChgRXZlbnRFbWl0dGVyPE9wZXJhdGlvblNvdXJjZT5gKTogdGhlIGV2ZW50IGVtaXR0ZWRcclxuICogd2hlbiB0aGUgc291cmNlIGNoYW5nZXMuXHJcbiAqIC0g8J+UpSBgc291cmNlQ2FuY2VsYCAoYEV2ZW50RW1pdHRlcjx2b2lkPmApOiB0aGUgZXZlbnQgZW1pdHRlZCB3aGVuIHRoZVxyXG4gKiBlZGl0IGlzIGNhbmNlbGVkLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtb3BlcmF0aW9uLXNvdXJjZS1lZGl0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vb3BlcmF0aW9uLXNvdXJjZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9vcGVyYXRpb24tc291cmNlLWVkaXRvci5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvblNvdXJjZUVkaXRvckNvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfc291cmNlOiBPcGVyYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBzb3VyY2UgdG8gZWRpdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgc291cmNlKCk6IE9wZXJhdGlvblNvdXJjZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc291cmNlO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNvdXJjZSh2YWx1ZTogT3BlcmF0aW9uU291cmNlIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuX3NvdXJjZSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc291cmNlID0gdmFsdWUgfHwgdW5kZWZpbmVkO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtKHRoaXMuX3NvdXJjZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbGlzdCBvZiBzb3VyY2UgSURzIHdoZW4gaXQncyBjbG9zZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaWRzPzogTGFiZWxlZElkW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIHNvdXJjZSB0eXBlcyB3aGVuIGl0J3MgY2xvc2VkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHR5cGVzPzogTGFiZWxlZElkW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBldmVudCBlbWl0dGVkIHdoZW4gdGhlIHNvdXJjZSBjaGFuZ2VzLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG4gICAgT3BlcmF0aW9uU291cmNlIHwgdW5kZWZpbmVkXHJcbiAgPigpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlZGl0IGlzIGNhbmNlbGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBzb3VyY2VDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBpZDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcclxuICBwdWJsaWMgdHlwZTogRm9ybUNvbnRyb2w8c3RyaW5nPjtcclxuICBwdWJsaWMgcmFuazogRm9ybUNvbnRyb2w8bnVtYmVyPjtcclxuICBwdWJsaWMgbm90ZTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLmlkID0gbmV3IEZvcm1Db250cm9sKCcnLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy50eXBlID0gbmV3IEZvcm1Db250cm9sKCcnLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yYW5rID0gbmV3IEZvcm1Db250cm9sKDAsIHtcclxuICAgICAgbm9uTnVsbGFibGU6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMubm90ZSA9IG5ldyBGb3JtQ29udHJvbChudWxsLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1heExlbmd0aCgxMDAwKV0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgcmFuazogdGhpcy5yYW5rLFxyXG4gICAgICBub3RlOiB0aGlzLm5vdGUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShzb3VyY2U/OiBPcGVyYXRpb25Tb3VyY2UpOiB2b2lkIHtcclxuICAgIGlmICghc291cmNlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlkLnNldFZhbHVlKHNvdXJjZS5pZCk7XHJcbiAgICB0aGlzLnR5cGUuc2V0VmFsdWUoc291cmNlLnR5cGUpO1xyXG4gICAgdGhpcy5yYW5rLnNldFZhbHVlKHNvdXJjZS5yYW5rIHx8IDApO1xyXG4gICAgdGhpcy5ub3RlLnNldFZhbHVlKHNvdXJjZS5ub3RlIHx8IG51bGwpO1xyXG4gICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3VyY2VDYW5jZWwuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc291cmNlID0ge1xyXG4gICAgICBpZDogdGhpcy5pZC52YWx1ZSxcclxuICAgICAgdHlwZTogdGhpcy50eXBlLnZhbHVlLFxyXG4gICAgICByYW5rOiB0aGlzLnJhbmsudmFsdWUsXHJcbiAgICAgIG5vdGU6IHRoaXMubm90ZS52YWx1ZSB8fCB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zb3VyY2VDaGFuZ2UuZW1pdCh0aGlzLl9zb3VyY2UpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgPCEtLSBpZCAtLT5cclxuICAgIDwhLS0gaWQgKGJvdW5kKSAtLT5cclxuICAgIEBpZiAoaWRzPy5sZW5ndGgpIHtcclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD5pZDwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiaWRcIj5cclxuICAgICAgICBAZm9yIChpIG9mIGlkczsgdHJhY2sgaS5pZCkge1xyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpLmlkXCI+e3sgaS5sYWJlbCB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgQGlmICgkYW55KGlkLmVycm9ycyk/LnJlcXVpcmVkICYmIChpZC5kaXJ0eSB8fCBpZC50b3VjaGVkKSkge1xyXG4gICAgICA8bWF0LWVycm9yPklEIHJlcXVpcmVkPC9tYXQtZXJyb3I+XHJcbiAgICAgIH1cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgIDwhLS0gaWQgKGZyZWUpIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPmlkPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiaWRcIiAvPlxyXG4gICAgICBAaWYgKCRhbnkoaWQuZXJyb3JzKT8ucmVxdWlyZWQgJiYgKGlkLmRpcnR5IHx8IGlkLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+SUQgcmVxdWlyZWQ8L21hdC1lcnJvcj5cclxuICAgICAgfSBAaWYgKCRhbnkoaWQuZXJyb3JzKT8ubWF4TGVuZ3RoICYmIChpZC5kaXJ0eSB8fCBpZC50b3VjaGVkKSkge1xyXG4gICAgICA8bWF0LWVycm9yPmlkIHRvbyBsb25nPC9tYXQtZXJyb3I+XHJcbiAgICAgIH1cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICB9XHJcblxyXG4gICAgPCEtLSB0eXBlIChib3VuZCkgLS0+XHJcbiAgICBAaWYgKHR5cGVzPy5sZW5ndGgpIHtcclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD50eXBlPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJ0eXBlXCI+XHJcbiAgICAgICAgQGZvciAoaSBvZiB0eXBlczsgdHJhY2sgaS5pZCkge1xyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpLmlkXCI+e3sgaS5sYWJlbCB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgQGlmICgkYW55KHR5cGUuZXJyb3JzKT8ucmVxdWlyZWQgJiYgKHR5cGUuZGlydHkgfHwgdHlwZS50b3VjaGVkKSkge1xyXG4gICAgICA8bWF0LWVycm9yPnR5cGUgcmVxdWlyZWQ8L21hdC1lcnJvcj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPCEtLSB0eXBlIChmcmVlKSAtLT5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD50eXBlPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwidHlwZVwiIC8+XHJcbiAgICAgIEBpZiAoJGFueSh0eXBlLmVycm9ycyk/LnJlcXVpcmVkICYmICh0eXBlLmRpcnR5IHx8IHR5cGUudG91Y2hlZCkpIHtcclxuICAgICAgPG1hdC1lcnJvcj50eXBlIHJlcXVpcmVkPC9tYXQtZXJyb3I+XHJcbiAgICAgIH0gQGlmICgkYW55KHR5cGUuZXJyb3JzKT8ubWF4TGVuZ3RoICYmICh0eXBlLmRpcnR5IHx8IHR5cGUudG91Y2hlZCkpIHtcclxuICAgICAgPG1hdC1lcnJvcj50eXBlIHRvbyBsb25nPC9tYXQtZXJyb3I+XHJcbiAgICAgIH1cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICB9XHJcblxyXG4gICAgPCEtLSByYW5rIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibnJcIj5cclxuICAgICAgPG1hdC1sYWJlbD5yYW5rPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwicmFua1wiIHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBub3RlIC0tPlxyXG4gIDxkaXY+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJsb25nLXRleHRcIj5cclxuICAgICAgPG1hdC1sYWJlbD5ub3RlPC9tYXQtbGFiZWw+XHJcbiAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwibm90ZVwiIGNsYXNzPVwibG9uZy10ZXh0XCI+PC90ZXh0YXJlYT5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gYnV0dG9ucyAtLT5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBtYXRUb29sdGlwPVwiRGlzY2FyZCBjaGFuZ2VzXCJcclxuICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXdhcm5cIj5jbGVhcjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBtYXRUb29sdGlwPVwiQWNjZXB0IGNoYW5nZXNcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkIHx8IGZvcm0ucHJpc3RpbmVcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtcHJpbWFyeVwiPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG4iXX0=
|
|
@@ -7,11 +7,27 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
import * as i1 from "@angular/common";
|
|
8
8
|
import * as i2 from "@angular/material/button";
|
|
9
9
|
import * as i3 from "@angular/material/icon";
|
|
10
|
+
/**
|
|
11
|
+
* 🔑 `gve-simple-tree`
|
|
12
|
+
*
|
|
13
|
+
* A simple tree component.
|
|
14
|
+
*
|
|
15
|
+
* - ▶️ `node` (`TreeNode<any>`): the node to display.
|
|
16
|
+
* - ▶️ `selectedNode` (`TreeNode<any> | null`): the selected node.
|
|
17
|
+
* - 🔥 `selectedNodeChange` (`EventEmitter<TreeNode<any> | null>`): the event
|
|
18
|
+
* emitted when the selected node changes.
|
|
19
|
+
*/
|
|
10
20
|
export class SimpleTreeComponent {
|
|
11
21
|
constructor() {
|
|
22
|
+
/**
|
|
23
|
+
* The event emitted when the selected node changes.
|
|
24
|
+
*/
|
|
12
25
|
this.selectedNodeChange = new EventEmitter();
|
|
13
26
|
this.level = 0;
|
|
14
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* The node to display.
|
|
30
|
+
*/
|
|
15
31
|
get node() {
|
|
16
32
|
return this._node;
|
|
17
33
|
}
|
|
@@ -40,10 +56,10 @@ export class SimpleTreeComponent {
|
|
|
40
56
|
this.selectedNode = node;
|
|
41
57
|
this.selectedNodeChange.emit(node);
|
|
42
58
|
}
|
|
43
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
44
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SimpleTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: SimpleTreeComponent, isStandalone: true, selector: "gve-simple-tree", inputs: { node: "node", selectedNode: "selectedNode" }, outputs: { selectedNodeChange: "selectedNodeChange" }, ngImport: i0, template: "@if (node) {\r\n<div [style.margin-left]=\"level * 8 + 'px'\">\r\n <ng-template\r\n #tree\r\n let-node\r\n let-parentLevel=\"level\"\r\n let-selectedNode=\"selectedNode\"\r\n >\r\n <div\r\n [style.margin-left]=\"parentLevel * 8 + 'px'\"\r\n [class.selected]=\"node === selectedNode\"\r\n >\r\n <div class=\"toolbar-row\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"node.isExpanded = !node.isExpanded\"\r\n >\r\n <mat-icon>{{\r\n node.isExpanded ? \"expand_more\" : \"chevron_right\"\r\n }}</mat-icon>\r\n </button>\r\n <span class=\"label\" (click)=\"selectNode(node)\">\r\n {{ node.label }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"node.children && node.isExpanded\">\r\n <ng-container *ngFor=\"let child of node.children\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tree;\r\n context: {\r\n $implicit: child,\r\n level: parentLevel + 1,\r\n selectedNode: selectedNode\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- $implicit is the source of let-node -->\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tree;\r\n context: { $implicit: node, level: level, selectedNode: selectedNode }\r\n \"\r\n ></ng-container>\r\n</div>\r\n}\r\n", styles: [".label{cursor:pointer}.toolbar-row{display:flex;align-items:center;flex-wrap:wrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }] }); }
|
|
45
61
|
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SimpleTreeComponent, decorators: [{
|
|
47
63
|
type: Component,
|
|
48
64
|
args: [{ selector: 'gve-simple-tree', standalone: true, imports: [CommonModule, MatButtonModule, MatIconModule, MatTooltipModule], template: "@if (node) {\r\n<div [style.margin-left]=\"level * 8 + 'px'\">\r\n <ng-template\r\n #tree\r\n let-node\r\n let-parentLevel=\"level\"\r\n let-selectedNode=\"selectedNode\"\r\n >\r\n <div\r\n [style.margin-left]=\"parentLevel * 8 + 'px'\"\r\n [class.selected]=\"node === selectedNode\"\r\n >\r\n <div class=\"toolbar-row\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"node.isExpanded = !node.isExpanded\"\r\n >\r\n <mat-icon>{{\r\n node.isExpanded ? \"expand_more\" : \"chevron_right\"\r\n }}</mat-icon>\r\n </button>\r\n <span class=\"label\" (click)=\"selectNode(node)\">\r\n {{ node.label }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"node.children && node.isExpanded\">\r\n <ng-container *ngFor=\"let child of node.children\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tree;\r\n context: {\r\n $implicit: child,\r\n level: parentLevel + 1,\r\n selectedNode: selectedNode\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- $implicit is the source of let-node -->\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tree;\r\n context: { $implicit: node, level: level, selectedNode: selectedNode }\r\n \"\r\n ></ng-container>\r\n</div>\r\n}\r\n", styles: [".label{cursor:pointer}.toolbar-row{display:flex;align-items:center;flex-wrap:wrap}\n"] }]
|
|
49
65
|
}], propDecorators: { node: [{
|
|
@@ -53,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
53
69
|
}], selectedNodeChange: [{
|
|
54
70
|
type: Output
|
|
55
71
|
}] } });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NpbXBsZS10cmVlL3NpbXBsZS10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9zaW1wbGUtdHJlZS9zaW1wbGUtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUk3RDs7Ozs7Ozs7O0dBU0c7QUFRSCxNQUFNLE9BQU8sbUJBQW1CO0lBUGhDO1FBK0JFOztXQUVHO1FBQ08sdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFFakUsVUFBSyxHQUFXLENBQUMsQ0FBQztLQXNCMUI7SUFoREM7O09BRUc7SUFDSCxJQUNXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLEtBQWdDO1FBQzlDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBZU0sUUFBUTtRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUErQjtRQUNwRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLEdBQThCLElBQUksQ0FBQztZQUN4QyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFtQjtRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7K0dBbERVLG1CQUFtQjttR0FBbkIsbUJBQW1CLDBMQzFCaEMsNC9DQW9EQSw2SUQ5QlksWUFBWSxzYUFBRSxlQUFlLDJJQUFFLGFBQWEsbUxBQUUsZ0JBQWdCOzs0RkFJN0QsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDOzhCQVc5RCxJQUFJO3NCQURkLEtBQUs7Z0JBZ0JDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBTUksa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ0BteXJtaWRvbi9ndmUtc25hcHNob3Qtdmlldyc7XHJcblxyXG4vKipcclxuICog8J+UkSBgZ3ZlLXNpbXBsZS10cmVlYFxyXG4gKlxyXG4gKiBBIHNpbXBsZSB0cmVlIGNvbXBvbmVudC5cclxuICpcclxuICogLSDilrbvuI8gYG5vZGVgIChgVHJlZU5vZGU8YW55PmApOiB0aGUgbm9kZSB0byBkaXNwbGF5LlxyXG4gKiAtIOKWtu+4jyBgc2VsZWN0ZWROb2RlYCAoYFRyZWVOb2RlPGFueT4gfCBudWxsYCk6IHRoZSBzZWxlY3RlZCBub2RlLlxyXG4gKiAtIPCflKUgYHNlbGVjdGVkTm9kZUNoYW5nZWAgKGBFdmVudEVtaXR0ZXI8VHJlZU5vZGU8YW55PiB8IG51bGw+YCk6IHRoZSBldmVudFxyXG4gKiBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIG5vZGUgY2hhbmdlcy5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZ3ZlLXNpbXBsZS10cmVlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NpbXBsZS10cmVlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2ltcGxlLXRyZWUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaW1wbGVUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIF9ub2RlOiBUcmVlTm9kZTxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbm9kZSB0byBkaXNwbGF5LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBub2RlKCk6IFRyZWVOb2RlPGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX25vZGU7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgbm9kZSh2YWx1ZTogVHJlZU5vZGU8YW55PiB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX25vZGUgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX25vZGUgPSB2YWx1ZTtcclxuICAgIHRoaXMubGV2ZWwgPSB0aGlzLmNhbGN1bGF0ZUxldmVsKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBzZWxlY3RlZCBub2RlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNlbGVjdGVkTm9kZT86IFRyZWVOb2RlPGFueT4gfCBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCBub2RlIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkTm9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZU5vZGU8YW55PiB8IG51bGw+KCk7XHJcblxyXG4gIHB1YmxpYyBsZXZlbDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sZXZlbCA9IHRoaXMuY2FsY3VsYXRlTGV2ZWwodGhpcy5ub2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlTGV2ZWwobm9kZTogVHJlZU5vZGU8YW55PiB8IHVuZGVmaW5lZCk6IG51bWJlciB7XHJcbiAgICBsZXQgbGV2ZWwgPSAwO1xyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgbGV0IG46IFRyZWVOb2RlPGFueT4gfCB1bmRlZmluZWQgPSBub2RlO1xyXG4gICAgICB3aGlsZSAobi5wYXJlbnQpIHtcclxuICAgICAgICBsZXZlbCsrO1xyXG4gICAgICAgIG4gPSBuLnBhcmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdE5vZGUobm9kZTogVHJlZU5vZGU8YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xyXG4gICAgdGhpcy5zZWxlY3RlZE5vZGVDaGFuZ2UuZW1pdChub2RlKTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChub2RlKSB7XHJcbjxkaXYgW3N0eWxlLm1hcmdpbi1sZWZ0XT1cImxldmVsICogOCArICdweCdcIj5cclxuICA8bmctdGVtcGxhdGVcclxuICAgICN0cmVlXHJcbiAgICBsZXQtbm9kZVxyXG4gICAgbGV0LXBhcmVudExldmVsPVwibGV2ZWxcIlxyXG4gICAgbGV0LXNlbGVjdGVkTm9kZT1cInNlbGVjdGVkTm9kZVwiXHJcbiAgPlxyXG4gICAgPGRpdlxyXG4gICAgICBbc3R5bGUubWFyZ2luLWxlZnRdPVwicGFyZW50TGV2ZWwgKiA4ICsgJ3B4J1wiXHJcbiAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJub2RlID09PSBzZWxlY3RlZE5vZGVcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yb3dcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgKGNsaWNrKT1cIm5vZGUuaXNFeHBhbmRlZCA9ICFub2RlLmlzRXhwYW5kZWRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj57e1xyXG4gICAgICAgICAgICBub2RlLmlzRXhwYW5kZWQgPyBcImV4cGFuZF9tb3JlXCIgOiBcImNoZXZyb25fcmlnaHRcIlxyXG4gICAgICAgICAgfX08L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiAoY2xpY2spPVwic2VsZWN0Tm9kZShub2RlKVwiPlxyXG4gICAgICAgICAge3sgbm9kZS5sYWJlbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJub2RlLmNoaWxkcmVuICYmIG5vZGUuaXNFeHBhbmRlZFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW5cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICB0cmVlO1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXHJcbiAgICAgICAgICAgICAgICBsZXZlbDogcGFyZW50TGV2ZWwgKyAxLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlOiBzZWxlY3RlZE5vZGVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSAkaW1wbGljaXQgaXMgdGhlIHNvdXJjZSBvZiBsZXQtbm9kZSAtLT5cclxuICA8bmctY29udGFpbmVyXHJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICB0cmVlO1xyXG4gICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSwgbGV2ZWw6IGxldmVsLCBzZWxlY3RlZE5vZGU6IHNlbGVjdGVkTm9kZSB9XHJcbiAgICBcIlxyXG4gID48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbn1cclxuIl19
|