@myrmidon/cadmus-ui 4.0.2 → 4.0.4

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.
@@ -30,8 +30,8 @@ import { ThesaurusTreeComponent } from './components/thesaurus-tree/thesaurus-tr
30
30
  import * as i0 from "@angular/core";
31
31
  export class CadmusUiModule {
32
32
  }
33
- CadmusUiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: CadmusUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
34
- CadmusUiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: CadmusUiModule, declarations: [CloseSaveButtonsComponent,
33
+ CadmusUiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CadmusUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
34
+ CadmusUiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: CadmusUiModule, declarations: [CloseSaveButtonsComponent,
35
35
  DecoratedTokenTextComponent,
36
36
  ErrorListComponent,
37
37
  FacetBadgeComponent,
@@ -67,7 +67,7 @@ CadmusUiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
67
67
  LookupPinComponent,
68
68
  PartBadgeComponent,
69
69
  ThesaurusTreeComponent] });
70
- CadmusUiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: CadmusUiModule, imports: [CommonModule,
70
+ CadmusUiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CadmusUiModule, imports: [CommonModule,
71
71
  FormsModule,
72
72
  RouterModule,
73
73
  ReactiveFormsModule,
@@ -87,7 +87,7 @@ CadmusUiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
87
87
  NgToolsModule,
88
88
  CadmusCoreModule,
89
89
  CadmusRefsLookupModule] });
90
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: CadmusUiModule, decorators: [{
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CadmusUiModule, decorators: [{
91
91
  type: NgModule,
92
92
  args: [{
93
93
  imports: [
@@ -11,9 +11,9 @@ export class CloseSaveButtonsComponent {
11
11
  this.closeRequest.emit();
12
12
  }
13
13
  }
14
- CloseSaveButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: CloseSaveButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
- CloseSaveButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: { form: "form", noSave: "noSave" }, outputs: { closeRequest: "closeRequest" }, ngImport: i0, template: "<ng-container *ngIf=\"form\">\r\n <button type=\"button\" mat-raised-button color=\"warn\" (click)=\"close()\">\r\n <mat-icon>cancel</mat-icon>\r\n close\r\n </button>\r\n <button\r\n *ngIf=\"!noSave\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n mat-raised-button\r\n color=\"primary\"\r\n style=\"margin-left:8px\"\r\n >\r\n <mat-icon>check_circle</mat-icon>\r\n save\r\n </button>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: CloseSaveButtonsComponent, decorators: [{
14
+ CloseSaveButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CloseSaveButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
+ CloseSaveButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: { form: "form", noSave: "noSave" }, outputs: { closeRequest: "closeRequest" }, ngImport: i0, template: "<ng-container *ngIf=\"form\">\r\n <button type=\"button\" mat-raised-button color=\"warn\" (click)=\"close()\">\r\n <mat-icon>cancel</mat-icon>\r\n close\r\n </button>\r\n <button\r\n *ngIf=\"!noSave\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n mat-raised-button\r\n color=\"primary\"\r\n style=\"margin-left:8px\"\r\n >\r\n <mat-icon>check_circle</mat-icon>\r\n save\r\n </button>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CloseSaveButtonsComponent, decorators: [{
17
17
  type: Component,
18
18
  args: [{ selector: 'cadmus-close-save-buttons', template: "<ng-container *ngIf=\"form\">\r\n <button type=\"button\" mat-raised-button color=\"warn\" (click)=\"close()\">\r\n <mat-icon>cancel</mat-icon>\r\n close\r\n </button>\r\n <button\r\n *ngIf=\"!noSave\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n mat-raised-button\r\n color=\"primary\"\r\n style=\"margin-left:8px\"\r\n >\r\n <mat-icon>check_circle</mat-icon>\r\n save\r\n </button>\r\n</ng-container>\r\n" }]
19
19
  }], ctorParameters: function () { return []; }, propDecorators: { form: [{
@@ -49,9 +49,9 @@ export class DecoratedTokenTextComponent {
49
49
  this.text = this._textLayerService.render(this._baseText, this._locations, this._selectedLoc);
50
50
  }
51
51
  }
52
- DecoratedTokenTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DecoratedTokenTextComponent, deps: [{ token: i1.TextLayerService }], target: i0.ɵɵFactoryTarget.Component });
53
- DecoratedTokenTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: DecoratedTokenTextComponent, selector: "cadmus-decorated-token-text", inputs: { baseText: "baseText", locations: "locations", selectedLocation: "selectedLocation" }, viewQueries: [{ propertyName: "_textElement", first: true, predicate: ["textElem"], descendants: true }], ngImport: i0, template: "<div [innerHtml]=\"text | safeHtml: 'html'\" id=\"text\" #textElem></div>\r\n", styles: [":host ::ng-deep div#text{counter-reset:text-y-counter}:host ::ng-deep div#text p:before{content:counter(text-y-counter);counter-increment:text-y-counter;margin-right:6px;color:#a0a0a0}:host ::ng-deep span.fr{background-color:#ff0;border:1px solid silver;border-radius:6px;padding:0 4px}:host ::ng-deep span.fr-sel{background-color:orange;font-weight:700;border:1px solid #404040}\n"], dependencies: [{ kind: "pipe", type: i2.SafeHtmlPipe, name: "safeHtml" }] });
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DecoratedTokenTextComponent, decorators: [{
52
+ DecoratedTokenTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DecoratedTokenTextComponent, deps: [{ token: i1.TextLayerService }], target: i0.ɵɵFactoryTarget.Component });
53
+ DecoratedTokenTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: DecoratedTokenTextComponent, selector: "cadmus-decorated-token-text", inputs: { baseText: "baseText", locations: "locations", selectedLocation: "selectedLocation" }, viewQueries: [{ propertyName: "_textElement", first: true, predicate: ["textElem"], descendants: true }], ngImport: i0, template: "<div [innerHtml]=\"text | safeHtml: 'html'\" id=\"text\" #textElem></div>\r\n", styles: [":host ::ng-deep div#text{counter-reset:text-y-counter}:host ::ng-deep div#text p:before{content:counter(text-y-counter);counter-increment:text-y-counter;margin-right:6px;color:#a0a0a0}:host ::ng-deep span.fr{background-color:#ff0;border:1px solid silver;border-radius:6px;padding:0 4px}:host ::ng-deep span.fr-sel{background-color:orange;font-weight:700;border:1px solid #404040}\n"], dependencies: [{ kind: "pipe", type: i2.SafeHtmlPipe, name: "safeHtml" }] });
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DecoratedTokenTextComponent, decorators: [{
55
55
  type: Component,
56
56
  args: [{ selector: 'cadmus-decorated-token-text', template: "<div [innerHtml]=\"text | safeHtml: 'html'\" id=\"text\" #textElem></div>\r\n", styles: [":host ::ng-deep div#text{counter-reset:text-y-counter}:host ::ng-deep div#text p:before{content:counter(text-y-counter);counter-increment:text-y-counter;margin-right:6px;color:#a0a0a0}:host ::ng-deep span.fr{background-color:#ff0;border:1px solid silver;border-radius:6px;padding:0 4px}:host ::ng-deep span.fr-sel{background-color:orange;font-weight:700;border:1px solid #404040}\n"] }]
57
57
  }], ctorParameters: function () { return [{ type: i1.TextLayerService }]; }, propDecorators: { _textElement: [{
@@ -6,9 +6,9 @@ export class ErrorListComponent {
6
6
  ngOnInit() {
7
7
  }
8
8
  }
9
- ErrorListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ErrorListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
- ErrorListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: ErrorListComponent, selector: "cadmus-error-list", inputs: { errors: "errors" }, ngImport: i0, template: "<ul *ngIf=\"errors\">\r\n <li *ngFor=\"let error of errors\">{{error}}</li>\r\n</ul>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ErrorListComponent, decorators: [{
9
+ ErrorListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ErrorListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
+ ErrorListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ErrorListComponent, selector: "cadmus-error-list", inputs: { errors: "errors" }, ngImport: i0, template: "<ul *ngIf=\"errors\">\r\n <li *ngFor=\"let error of errors\">{{error}}</li>\r\n</ul>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ErrorListComponent, decorators: [{
12
12
  type: Component,
13
13
  args: [{ selector: 'cadmus-error-list', template: "<ul *ngIf=\"errors\">\r\n <li *ngFor=\"let error of errors\">{{error}}</li>\r\n</ul>\r\n" }]
14
14
  }], ctorParameters: function () { return []; }, propDecorators: { errors: [{
@@ -89,9 +89,9 @@ export class FacetBadgeComponent {
89
89
  this.tip = this.getFacetTip(this._facetId) ?? undefined;
90
90
  }
91
91
  }
92
- FacetBadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: FacetBadgeComponent, deps: [{ token: i1.ColorService }], target: i0.ɵɵFactoryTarget.Component });
93
- FacetBadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: FacetBadgeComponent, selector: "cadmus-facet-badge", inputs: { facetId: "facetId", facetDefinitions: "facetDefinitions" }, ngImport: i0, template: "<span\r\n class=\"model-type\"\r\n [style.background-color]=\"color\"\r\n [style.color]=\"contrastColor\"\r\n matTooltip=\"{{ tip }}\"\r\n >{{ facetId }}\r\n</span>\r\n", styles: ["span.model-type{padding:4px;border-radius:6px}\n"], dependencies: [{ kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: FacetBadgeComponent, decorators: [{
92
+ FacetBadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FacetBadgeComponent, deps: [{ token: i1.ColorService }], target: i0.ɵɵFactoryTarget.Component });
93
+ FacetBadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: FacetBadgeComponent, selector: "cadmus-facet-badge", inputs: { facetId: "facetId", facetDefinitions: "facetDefinitions" }, ngImport: i0, template: "<span\r\n class=\"model-type\"\r\n [style.background-color]=\"color\"\r\n [style.color]=\"contrastColor\"\r\n matTooltip=\"{{ tip }}\"\r\n >{{ facetId }}\r\n</span>\r\n", styles: ["span.model-type{padding:4px;border-radius:6px}\n"], dependencies: [{ kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FacetBadgeComponent, decorators: [{
95
95
  type: Component,
96
96
  args: [{ selector: 'cadmus-facet-badge', template: "<span\r\n class=\"model-type\"\r\n [style.background-color]=\"color\"\r\n [style.color]=\"contrastColor\"\r\n matTooltip=\"{{ tip }}\"\r\n >{{ facetId }}\r\n</span>\r\n", styles: ["span.model-type{padding:4px;border-radius:6px}\n"] }]
97
97
  }], ctorParameters: function () { return [{ type: i1.ColorService }]; }, propDecorators: { facetId: [{
@@ -40,9 +40,9 @@ export class FlagsBadgeComponent {
40
40
  });
41
41
  }
42
42
  }
43
- FlagsBadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: FlagsBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
44
- FlagsBadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: FlagsBadgeComponent, selector: "cadmus-flags-badge", inputs: { flags: "flags", flagDefinitions: "flagDefinitions" }, ngImport: i0, template: "<div>\r\n <span\r\n class=\"badge-flag\"\r\n *ngFor=\"let def of badgeFlags\"\r\n [style.color]=\"'#' + def.colorKey\"\r\n [matTooltip]=\"def.label\"\r\n >\r\n &#x25cf;\r\n </span>\r\n</div>\r\n", styles: ["span.badge-flag{margin-right:4px;font-size:24px;cursor:default}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: FlagsBadgeComponent, decorators: [{
43
+ FlagsBadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FlagsBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
44
+ FlagsBadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: FlagsBadgeComponent, selector: "cadmus-flags-badge", inputs: { flags: "flags", flagDefinitions: "flagDefinitions" }, ngImport: i0, template: "<div>\r\n <span\r\n class=\"badge-flag\"\r\n *ngFor=\"let def of badgeFlags\"\r\n [style.color]=\"'#' + def.colorKey\"\r\n [matTooltip]=\"def.label\"\r\n >\r\n &#x25cf;\r\n </span>\r\n</div>\r\n", styles: ["span.badge-flag{margin-right:4px;font-size:24px;cursor:default}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FlagsBadgeComponent, decorators: [{
46
46
  type: Component,
47
47
  args: [{ selector: 'cadmus-flags-badge', template: "<div>\r\n <span\r\n class=\"badge-flag\"\r\n *ngFor=\"let def of badgeFlags\"\r\n [style.color]=\"'#' + def.colorKey\"\r\n [matTooltip]=\"def.label\"\r\n >\r\n &#x25cf;\r\n </span>\r\n</div>\r\n", styles: ["span.badge-flag{margin-right:4px;font-size:24px;cursor:default}\n"] }]
48
48
  }], ctorParameters: function () { return []; }, propDecorators: { flags: [{
@@ -76,9 +76,9 @@ export class LayerHintsComponent {
76
76
  });
77
77
  }
78
78
  }
79
- LayerHintsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: LayerHintsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component });
80
- LayerHintsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: LayerHintsComponent, selector: "cadmus-layer-hints", inputs: { hints: "hints", targetLocation: "targetLocation", disabled: "disabled", readonly: "readonly" }, outputs: { requestEdit: "requestEdit", requestDelete: "requestDelete", requestMove: "requestMove", requestPatch: "requestPatch" }, ngImport: i0, template: "<form *ngIf=\"hints\" [formGroup]=\"form\" (submit)=\"emitRequestPatch()\">\r\n <table class=\"patches\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>location</th>\r\n <th>description</th>\r\n <th>patch</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let hint of hints; let i = index\">\r\n <td *ngIf=\"!readonly\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this fragment\"\r\n [disabled]=\"disabled\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this fragment to {{ targetLocation }}\"\r\n [disabled]=\"\r\n disabled || !targetLocation || targetLocation === hint.location\r\n \"\r\n (click)=\"emitRequestMove(hint)\"\r\n >\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this fragment\"\r\n color=\"warn\"\r\n [disabled]=\"disabled\"\r\n (click)=\"emitRequestDelete(hint)\"\r\n >\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ hint.location }}</td>\r\n <td>{{ hint.description }}</td>\r\n <td>\r\n <mat-checkbox\r\n *ngIf=\"hint.patchOperation\"\r\n matTooltip=\"Apply this patch\"\r\n [disabled]=\"disabled\"\r\n [value]=\"(i + 1).toString()\"\r\n >\r\n {{ hint.patchOperation }}\r\n </mat-checkbox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div *ngIf=\"targetLocation\">move target: {{ targetLocation }}</div>\r\n <button\r\n type=\"submit\"\r\n mat-raised-button\r\n [disabled]=\"readonly || disabled || form.invalid\"\r\n >\r\n apply patches\r\n </button>\r\n</form>\r\n", styles: ["table.patches th{font-weight:400;color:#bdbdbd}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
81
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: LayerHintsComponent, decorators: [{
79
+ LayerHintsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: LayerHintsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component });
80
+ LayerHintsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: LayerHintsComponent, selector: "cadmus-layer-hints", inputs: { hints: "hints", targetLocation: "targetLocation", disabled: "disabled", readonly: "readonly" }, outputs: { requestEdit: "requestEdit", requestDelete: "requestDelete", requestMove: "requestMove", requestPatch: "requestPatch" }, ngImport: i0, template: "<form *ngIf=\"hints\" [formGroup]=\"form\" (submit)=\"emitRequestPatch()\">\r\n <table class=\"patches\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>location</th>\r\n <th>description</th>\r\n <th>patch</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let hint of hints; let i = index\">\r\n <td *ngIf=\"!readonly\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this fragment\"\r\n [disabled]=\"disabled\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this fragment to {{ targetLocation }}\"\r\n [disabled]=\"\r\n disabled || !targetLocation || targetLocation === hint.location\r\n \"\r\n (click)=\"emitRequestMove(hint)\"\r\n >\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this fragment\"\r\n color=\"warn\"\r\n [disabled]=\"disabled\"\r\n (click)=\"emitRequestDelete(hint)\"\r\n >\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ hint.location }}</td>\r\n <td>{{ hint.description }}</td>\r\n <td>\r\n <mat-checkbox\r\n *ngIf=\"hint.patchOperation\"\r\n matTooltip=\"Apply this patch\"\r\n [disabled]=\"disabled\"\r\n [value]=\"(i + 1).toString()\"\r\n >\r\n {{ hint.patchOperation }}\r\n </mat-checkbox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div *ngIf=\"targetLocation\">move target: {{ targetLocation }}</div>\r\n <button\r\n type=\"submit\"\r\n mat-raised-button\r\n [disabled]=\"readonly || disabled || form.invalid\"\r\n >\r\n apply patches\r\n </button>\r\n</form>\r\n", styles: ["table.patches th{font-weight:400;color:#bdbdbd}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: LayerHintsComponent, decorators: [{
82
82
  type: Component,
83
83
  args: [{ selector: 'cadmus-layer-hints', template: "<form *ngIf=\"hints\" [formGroup]=\"form\" (submit)=\"emitRequestPatch()\">\r\n <table class=\"patches\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>location</th>\r\n <th>description</th>\r\n <th>patch</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let hint of hints; let i = index\">\r\n <td *ngIf=\"!readonly\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this fragment\"\r\n [disabled]=\"disabled\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this fragment to {{ targetLocation }}\"\r\n [disabled]=\"\r\n disabled || !targetLocation || targetLocation === hint.location\r\n \"\r\n (click)=\"emitRequestMove(hint)\"\r\n >\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this fragment\"\r\n color=\"warn\"\r\n [disabled]=\"disabled\"\r\n (click)=\"emitRequestDelete(hint)\"\r\n >\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ hint.location }}</td>\r\n <td>{{ hint.description }}</td>\r\n <td>\r\n <mat-checkbox\r\n *ngIf=\"hint.patchOperation\"\r\n matTooltip=\"Apply this patch\"\r\n [disabled]=\"disabled\"\r\n [value]=\"(i + 1).toString()\"\r\n >\r\n {{ hint.patchOperation }}\r\n </mat-checkbox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div *ngIf=\"targetLocation\">move target: {{ targetLocation }}</div>\r\n <button\r\n type=\"submit\"\r\n mat-raised-button\r\n [disabled]=\"readonly || disabled || form.invalid\"\r\n >\r\n apply patches\r\n </button>\r\n</form>\r\n", styles: ["table.patches th{font-weight:400;color:#bdbdbd}\n"] }]
84
84
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.DialogService }]; }, propDecorators: { hints: [{
@@ -111,9 +111,9 @@ export class LookupPinComponent {
111
111
  }
112
112
  }
113
113
  }
114
- LookupPinComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: LookupPinComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.ItemService }, { token: 'indexLookupDefinitions' }], target: i0.ɵɵFactoryTarget.Component });
115
- LookupPinComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: LookupPinComponent, selector: "cadmus-lookup-pin", inputs: { initialValue: "initialValue", label: "label", limit: "limit", resetOnPick: "resetOnPick", lookupKey: "lookupKey" }, outputs: { entryChange: "entryChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <mat-autocomplete #lookupAuto=\"matAutocomplete\" [displayWith]=\"entryToName\">\r\n <mat-option\r\n *ngFor=\"let entry of entries$ | async\"\r\n [value]=\"entry\"\r\n (onSelectionChange)=\"pickEntry(entry)\"\r\n >\r\n {{ entry?.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-form-field>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"label\"\r\n [formControl]=\"lookup\"\r\n [matAutocomplete]=\"lookupAuto\"\r\n />\r\n </mat-form-field>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"clear()\"\r\n [disabled]=\"!entry\"\r\n matTooltip=\"Clear\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.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: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
116
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: LookupPinComponent, decorators: [{
114
+ LookupPinComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: LookupPinComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.ItemService }, { token: 'indexLookupDefinitions' }], target: i0.ɵɵFactoryTarget.Component });
115
+ LookupPinComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: LookupPinComponent, selector: "cadmus-lookup-pin", inputs: { initialValue: "initialValue", label: "label", limit: "limit", resetOnPick: "resetOnPick", lookupKey: "lookupKey" }, outputs: { entryChange: "entryChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <mat-autocomplete #lookupAuto=\"matAutocomplete\" [displayWith]=\"entryToName\">\r\n <mat-option\r\n *ngFor=\"let entry of entries$ | async\"\r\n [value]=\"entry\"\r\n (onSelectionChange)=\"pickEntry(entry)\"\r\n >\r\n {{ entry?.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-form-field>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"label\"\r\n [formControl]=\"lookup\"\r\n [matAutocomplete]=\"lookupAuto\"\r\n />\r\n </mat-form-field>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"clear()\"\r\n [disabled]=\"!entry\"\r\n matTooltip=\"Clear\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.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: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: LookupPinComponent, decorators: [{
117
117
  type: Component,
118
118
  args: [{ selector: 'cadmus-lookup-pin', template: "<form [formGroup]=\"form\">\r\n <mat-autocomplete #lookupAuto=\"matAutocomplete\" [displayWith]=\"entryToName\">\r\n <mat-option\r\n *ngFor=\"let entry of entries$ | async\"\r\n [value]=\"entry\"\r\n (onSelectionChange)=\"pickEntry(entry)\"\r\n >\r\n {{ entry?.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-form-field>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"label\"\r\n [formControl]=\"lookup\"\r\n [matAutocomplete]=\"lookupAuto\"\r\n />\r\n </mat-form-field>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"clear()\"\r\n [disabled]=\"!entry\"\r\n matTooltip=\"Clear\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n</form>\r\n" }]
119
119
  }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.ItemService }, { type: undefined, decorators: [{
@@ -30,6 +30,22 @@ export class ModelEditorComponentBase {
30
30
  this._dirtyStore$ = new BehaviorSubject({});
31
31
  this.isDirty$ = of(false);
32
32
  }
33
+ /**
34
+ * The identity of the edited model.
35
+ */
36
+ get identity() {
37
+ return this._identity;
38
+ }
39
+ set identity(value) {
40
+ this._identity = value;
41
+ if (this.identity?.partId) {
42
+ const part = this._data?.value;
43
+ if (part && !part.id) {
44
+ console.log('part identity updated');
45
+ part.id = this.identity.partId;
46
+ }
47
+ }
48
+ }
33
49
  /**
34
50
  * The data being edited.
35
51
  */
@@ -175,9 +191,9 @@ export class ModelEditorComponentBase {
175
191
  this.form.markAsPristine();
176
192
  }
177
193
  }
178
- ModelEditorComponentBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ModelEditorComponentBase, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
179
- ModelEditorComponentBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: ModelEditorComponentBase, selector: "ng-component", inputs: { identity: "identity", data: "data", disabled: "disabled" }, outputs: { dataChange: "dataChange", dirtyChange: "dirtyChange", editorClose: "editorClose" }, ngImport: i0, template: '', isInline: true });
180
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ModelEditorComponentBase, decorators: [{
194
+ ModelEditorComponentBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelEditorComponentBase, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
195
+ ModelEditorComponentBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ModelEditorComponentBase, selector: "ng-component", inputs: { identity: "identity", data: "data", disabled: "disabled" }, outputs: { dataChange: "dataChange", dirtyChange: "dirtyChange", editorClose: "editorClose" }, ngImport: i0, template: '', isInline: true });
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ModelEditorComponentBase, decorators: [{
181
197
  type: Component,
182
198
  args: [{
183
199
  template: '',
@@ -195,4 +211,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
195
211
  }], editorClose: [{
196
212
  type: Output
197
213
  }] } });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZWRpdG9yLWNvbXBvbmVudC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXVpL3NyYy9saWIvY29tcG9uZW50cy9tb2RlbC1lZGl0b3ItY29tcG9uZW50LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTOUMsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxlQUFlLEVBQ2Ysb0JBQW9CLEVBRXBCLEVBQUUsR0FFSCxNQUFNLE1BQU0sQ0FBQzs7OztBQStCZDs7Ozs7O0dBTUc7QUFJSCxNQUFNLE9BQWdCLHdCQUF3QjtJQWdGNUM7Ozs7O09BS0c7SUFDSCxZQUNZLFdBQTJCLEVBQzNCLFdBQXdCO1FBRHhCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUVsQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMs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bnRlbnQiOlsiaW1wb3J0IHtcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIENvbXBvbmVudCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgZGVlcENvcHkgfSBmcm9tICdAbXlybWlkb24vbmctdG9vbHMnO1xyXG5pbXBvcnQgeyBBdXRoSnd0U2VydmljZSwgVXNlciB9IGZyb20gJ0BteXJtaWRvbi9hdXRoLWp3dC1sb2dpbic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZyYWdtZW50LFxyXG4gIFBhcnQsXHJcbiAgVGV4dExheWVyUGFydCxcclxuICBUaGVzYXVyaVNldCxcclxufSBmcm9tICdAbXlybWlkb24vY2FkbXVzLWNvcmUnO1xyXG5pbXBvcnQgeyBkaXJ0eUNoZWNrLCBIYXNEaXJ0eSB9IGZyb20gJ0BteXJtaWRvbi9uZ3gtZGlydHktY2hlY2snO1xyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCxcclxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICBPYnNlcnZhYmxlLFxyXG4gIG9mLFxyXG4gIFN1YnNjcmlwdGlvbixcclxufSBmcm9tICdyeGpzJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgaWRlbnRpZmllcnMgZm9yIGFuIGVkaXRlZCBwYXJ0LlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBQYXJ0SWRlbnRpdHkge1xyXG4gIGl0ZW1JZDogc3RyaW5nO1xyXG4gIHR5cGVJZDogc3RyaW5nO1xyXG4gIHBhcnRJZDogc3RyaW5nIHwgbnVsbDtcclxuICByb2xlSWQ6IHN0cmluZyB8IG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgaWRlbnRpZmllcnMgZm9yIGFuIGVkaXRlZCBmcmFnbWVudC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRnJhZ21lbnRJZGVudGl0eSBleHRlbmRzIFBhcnRJZGVudGl0eSB7XHJcbiAgZnJUeXBlSWQ6IHN0cmluZztcclxuICBmclJvbGVJZDogc3RyaW5nIHwgbnVsbDtcclxuICBsb2M6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGVkaXRlZCBwYXJ0IG9yIGZyYWdtZW50LlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBFZGl0ZWRPYmplY3Q8VCBleHRlbmRzIFBhcnQgfCBGcmFnbWVudD4ge1xyXG4gIHZhbHVlOiBUO1xyXG4gIHRoZXNhdXJpOiBUaGVzYXVyaVNldDtcclxuICBsYXllclBhcnQ/OiBUZXh0TGF5ZXJQYXJ0O1xyXG4gIGJhc2VUZXh0Pzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgcGFydC9mcmFnbWVudCBlZGl0b3JzIGR1bWIgY29tcG9uZW50cy5cclxuICogVGhlIG1vZGVsIHR5cGUgaXMgdGhlIHRlbXBsYXRlZCBhcmd1bWVudCBULlxyXG4gKlxyXG4gKiBXaGVuIGRlcml2aW5nIGZyb20gdGhpcyBlZGl0b3IsIGJlIHN1cmUgdG8gY2FsbCBzdXBlci5uZ09uSW5pdCgpXHJcbiAqIGZyb20gdGhlIGRlcml2ZWQgZWRpdG9yJ3MgbmdPbkluaXQgaGFuZGxlci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlOiAnJyxcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1vZGVsRWRpdG9yQ29tcG9uZW50QmFzZTxUIGV4dGVuZHMgUGFydCB8IEZyYWdtZW50PlxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEhhc0RpcnR5XHJcbntcclxuICBwcml2YXRlIF9kaXJ0eVN1Yj86IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9kaXJ0eUV2U3ViPzogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX2F1dGhTdWI/OiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfZGF0YT86IEVkaXRlZE9iamVjdDxUPjtcclxuICBwcml2YXRlIF9kaXJ0eVN0b3JlJDogQmVoYXZpb3JTdWJqZWN0PG9iamVjdD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSByb290IGZvcm0gb2YgdGhlIGVkaXRvci5cclxuICAgKi9cclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwIHwgVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGN1cnJlbnQgdXNlci5cclxuICAgKi9cclxuICBwdWJsaWMgdXNlcj86IFVzZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB1c2VyIGF1dGhvcml6YXRpb24gbGV2ZWwgKDAtNCkuXHJcbiAgICovXHJcbiAgcHVibGljIHVzZXJMZXZlbDogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBBbiBvYnNlcnZhYmxlIHdpdGggdGhlIGN1cnJlbnQgZGlydHkgc3RhdGUgb2YgdGhlIGVkaXRvci5cclxuICAgKi9cclxuICBwdWJsaWMgaXNEaXJ0eSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpZGVudGl0eSBvZiB0aGUgZWRpdGVkIG1vZGVsLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlkZW50aXR5OiBQYXJ0SWRlbnRpdHkgfCBGcmFnbWVudElkZW50aXR5IHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZGF0YSBiZWluZyBlZGl0ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRhdGEoKTogRWRpdGVkT2JqZWN0PFQ+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IEVkaXRlZE9iamVjdDxUPiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZGF0YSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vbkRhdGFTZXQodmFsdWUpO1xyXG4gICAgdGhpcy5fZGlydHlTdG9yZSQubmV4dCh0aGlzLmZvcm0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlZGl0ZWQgZGF0YSBpcyBzYXZlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPFQ+O1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGRpcnR5IHN0YXRlIGhhcyBjaGFuZ2VkLlxyXG4gICAqIFRoaXMgZXZlbnQganVzdCByZWZsZWN0cyBjaGFuZ2VzIGluIGlzRGlydHkkLCBhbmQgaXMgYSBmYWNpbGl0eVxyXG4gICAqIGZvciBwcm9wYWdhdGluZyBpdCB0byB0aGUgcGFyZW50J3MgY29tcG9uZW50LlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBkaXJ0eUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+O1xyXG5cclxuICAvKipcclxuICAgKiBUcnVlIHRvIGRpc2FibGUgdGhlIGVkaXRvci5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgcmVxdWVzdHMgdG8gY2xvc2UgdGhlIGVkaXRvci5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZWRpdG9yQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGVkaXRvci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBhdXRoU2VydmljZSBUaGUgYXV0aGVudGljYXRpb24gc2VydmljZS5cclxuICAgKiBAcGFyYW0gZm9ybUJ1aWxkZXIgRm9ybSBidWlsZGVyLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGF1dGhTZXJ2aWNlOiBBdXRoSnd0U2VydmljZSxcclxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcclxuICApIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIHRoaXMuZGlydHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7fSk7XHJcbiAgICB0aGlzLnVzZXJMZXZlbCA9IDA7XHJcbiAgICB0aGlzLl9kaXJ0eVN0b3JlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8b2JqZWN0Pih7fSk7XHJcbiAgICB0aGlzLmlzRGlydHkkID0gb2YoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gZm9ybVxyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5idWlsZEZvcm0odGhpcy5mb3JtQnVpbGRlcik7XHJcblxyXG4gICAgLy8gZGlydHkgY2hlY2sgb24gZm9ybVxyXG4gICAgdGhpcy5pc0RpcnR5JCA9IGRpcnR5Q2hlY2sodGhpcy5mb3JtLCB0aGlzLl9kaXJ0eVN0b3JlJCk7XHJcbiAgICB0aGlzLl9kaXJ0eUV2U3ViID0gdGhpcy5pc0RpcnR5JFxyXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaXJ0eUNoYW5nZS5lbWl0KHYpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBhdXRoIHNlcnZpY2VcclxuICAgIHRoaXMudXNlckxldmVsID0gdGhpcy5nZXRDdXJyZW50VXNlckxldmVsKCk7XHJcbiAgICB0aGlzLl9hdXRoU3ViID0gdGhpcy5hdXRoU2VydmljZS5jdXJyZW50VXNlciQuc3Vic2NyaWJlKFxyXG4gICAgICAodXNlcjogVXNlciB8IG51bGwpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJQcm9wZXJ0aWVzKHVzZXIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlydHlTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLl9kaXJ0eUV2U3ViPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5fYXV0aFN1Yj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudCBpbiB0aGUgZGVyaXZlZCBjbGFzcyB0byBidWlsZCB0aGUgcm9vdCBmb3JtIG9mIHRoaXMgZWRpdG9yLlxyXG4gICAqIFRoZSBmb3JtIGJ1aWx0IHdpbGwgdGhlbiBiZSBhdHRhY2hlZCB0byB0aGUgZGlydHkgY2hlY2sgbWVjaGFuaXNtXHJcbiAgICogcHJvdmlkZWQgYnkgdGhpcyBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZvcm1CdWlsZGVyIFRoZSBmb3JtIGJ1aWxkZXIuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJ1aWxkRm9ybShcclxuICAgIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlclxyXG4gICk6IEZvcm1Hcm91cCB8IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgYXV0aG9yaXphdGlvbiBsZXZlbCBvZiB0aGUgY3VycmVudCB1c2VyIGlmIGFueS5cclxuICAgKiBAcmV0dXJucyA0LTEgZm9yIGFkbWluLCBlZGl0b3IsIG9wZXJhdG9yLCB2aXNpdG9yOyBlbHNlIDAuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlckxldmVsKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCB1c2VyID0gdGhpcy5hdXRoU2VydmljZS5jdXJyZW50VXNlclZhbHVlO1xyXG4gICAgaWYgKCF1c2VyIHx8ICF1c2VyLnJvbGVzKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgaWYgKHVzZXIucm9sZXMuaW5kZXhPZignYWRtaW4nKSA+IC0xKSB7XHJcbiAgICAgIHJldHVybiA0O1xyXG4gICAgfVxyXG4gICAgaWYgKHVzZXIucm9sZXMuaW5kZXhPZignZWRpdG9yJykgPiAtMSkge1xyXG4gICAgICByZXR1cm4gMztcclxuICAgIH1cclxuICAgIGlmICh1c2VyLnJvbGVzLmluZGV4T2YoJ29wZXJhdG9yJykgPiAtMSkge1xyXG4gICAgICByZXR1cm4gMjtcclxuICAgIH1cclxuICAgIGlmICh1c2VyLnJvbGVzLmluZGV4T2YoJ3Zpc2l0b3InKSA+IC0xKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVVzZXJQcm9wZXJ0aWVzKHVzZXI6IFVzZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAoIXVzZXIpIHtcclxuICAgICAgdGhpcy51c2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnVzZXJMZXZlbCA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXIgPSB1c2VyO1xyXG4gICAgICB0aGlzLnVzZXJMZXZlbCA9IHRoaXMuZ2V0Q3VycmVudFVzZXJMZXZlbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBkYXRhIHZhbHVlIHByb3BlcnR5IGFuZCBlbWl0IHRoZSBjb3JyZXNwb25kaW5nXHJcbiAgICogbW9kZWxDaGFuZ2UgZXZlbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCB1cGRhdGVWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGF0YSA9IHsgLi4uKHRoaXMuX2RhdGEgfHwgeyB0aGVzYXVyaToge30gfSksIHZhbHVlOiB2YWx1ZSB9O1xyXG4gICAgdGhpcy5fZGlydHlTdG9yZSQubmV4dCh0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW52b2tlZCB3aGVuZXZlciB0aGUgbW9kZWwgcHJvcGVydHkgaXMgc2V0ICg9ZGF0YSBjb21lcyBmcm9tIGlucHV0IG1vZGVsXHJcbiAgICogcHJvcGVydHkpLCB1bmxlc3Mgc2V0dGluZyBpdCB2aWEgdXBkYXRlTW9kZWwuIEltcGxlbWVudCB0byB1cGRhdGUgdGhlIGZvcm1cclxuICAgKiBjb250cm9scyB0byByZWZsZWN0IHRoZSBuZXcgbW9kZWwgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHNldCwgb3IgdW5kZWZpbmVkLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvbkRhdGFTZXQoZGF0YT86IEVkaXRlZE9iamVjdDxUPik6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIG5ldyBvYmplY3QgZnJvbSB0aGUgZWRpdGVkIHBhcnQgaWYgYW55LCBlbHNlIGFzIGEgbmV3IHBhcnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZUlkIFRoZSBwYXJ0J3MgdHlwZSBJRC4gVGhpcyBpcyBhIGNvbnN0YW50IHJlY2VpdmVkXHJcbiAgICogZnJvbSB0aGUgaW1wbGVtZW50b3IuXHJcbiAgICogQHJldHVybnMgUGFydCBvYmplY3QuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldEVkaXRlZFBhcnQodHlwZUlkOiBzdHJpbmcpOiBQYXJ0IHtcclxuICAgIGNvbnN0IHBhcnQgPSBkZWVwQ29weSh0aGlzLmRhdGE/LnZhbHVlKSBhcyBQYXJ0IHwgbnVsbDtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHBhcnQgfHwge1xyXG4gICAgICAgIGl0ZW1JZDogdGhpcy5pZGVudGl0eSEuaXRlbUlkIHx8ICcnLFxyXG4gICAgICAgIGlkOiAnJyxcclxuICAgICAgICB0eXBlSWQ6IHR5cGVJZCxcclxuICAgICAgICByb2xlSWQ6IHRoaXMuaWRlbnRpdHkhLnJvbGVJZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgdGltZUNyZWF0ZWQ6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgY3JlYXRvcklkOiAnJyxcclxuICAgICAgICB0aW1lTW9kaWZpZWQ6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgdXNlcklkOiAnJyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIG5ldyBvYmplY3QgZnJvbSB0aGUgZWRpdGVkIGZyYWdtZW50IGlmIGFueSwgZWxzZSBhIG5ldyBmcmFnbWVudC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIEZyYWdtZW50IG9iamVjdC5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0RWRpdGVkRnJhZ21lbnQoKTogRnJhZ21lbnQge1xyXG4gICAgY29uc3QgZnIgPSBkZWVwQ29weSh0aGlzLmRhdGE/LnZhbHVlKSBhcyBGcmFnbWVudCB8IG51bGw7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBmciB8fCB7XHJcbiAgICAgICAgbG9jYXRpb246ICh0aGlzLmlkZW50aXR5IGFzIEZyYWdtZW50SWRlbnRpdHkpLmxvYyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudCBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gZ2V0IHRoZSBkYXRhIGZyb20gZm9ybSdzIGNvbnRyb2xzLlxyXG4gICAqIFRoaXMgaXMgdXNlZCB3aGVuIHNhdmluZy5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VmFsdWUoKTogVDtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSBpZiB0aGlzIGVkaXRvciBoYXMgdGhlIHRoZXNhdXJ1cyBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkgaW4gdGhlXHJcbiAgICogbG9hZGVkIHRoZXNhdXJpIHNldC5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaGFzVGhlc2F1cnVzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy50aGVzYXVyaSAmJiB0aGlzLmRhdGEudGhlc2F1cmlba2V5XSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgYSByZXF1ZXN0IHRvIGNsb3NlIHRoZSBlZGl0b3IuXHJcbiAgICovXHJcbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0b3JDbG9zZS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIHRoZSBlZGl0ZWQgZGF0YSBpZiB2YWxpZC5cclxuICAgKi9cclxuICBwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1NhdmUgaW52b2tlZCB3aXRoIGludmFsaWQgZm9ybScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xyXG4gICAgLy8gdGhlIGZvcm0gaXMgbm8gbW9yZSBkaXJ0eVxyXG4gICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZWRpdG9yLWNvbXBvbmVudC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXVpL3NyYy9saWIvY29tcG9uZW50cy9tb2RlbC1lZGl0b3ItY29tcG9uZW50LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTOUMsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxlQUFlLEVBQ2Ysb0JBQW9CLEVBRXBCLEVBQUUsR0FFSCxNQUFNLE1BQU0sQ0FBQzs7OztBQStCZDs7Ozs7O0dBTUc7QUFJSCxNQUFNLE9BQWdCLHdCQUF3QjtJQTZGNUM7Ozs7O09BS0c7SUFDSCxZQUNZLFdBQTJCLEVBQzNCLFdBQXdCO1FBRHhCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUVsQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMs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TSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDN0IsQ0FBQzs7cUhBblJtQix3QkFBd0I7eUdBQXhCLHdCQUF3Qix5TkFGbEMsRUFBRTsyRkFFUSx3QkFBd0I7a0JBSDdDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7K0hBbUNZLFFBQVE7c0JBRGxCLEtBQUs7Z0JBbUJLLElBQUk7c0JBRGQsS0FBSztnQkFjQyxVQUFVO3NCQURoQixNQUFNO2dCQVNBLFdBQVc7c0JBRGpCLE1BQU07Z0JBT0gsUUFBUTtzQkFEWCxLQUFLO2dCQWFDLFdBQVc7c0JBRGpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBkZWVwQ29weSB9IGZyb20gJ0BteXJtaWRvbi9uZy10b29scyc7XHJcbmltcG9ydCB7IEF1dGhKd3RTZXJ2aWNlLCBVc2VyIH0gZnJvbSAnQG15cm1pZG9uL2F1dGgtand0LWxvZ2luJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRnJhZ21lbnQsXHJcbiAgUGFydCxcclxuICBUZXh0TGF5ZXJQYXJ0LFxyXG4gIFRoZXNhdXJpU2V0LFxyXG59IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtY29yZSc7XHJcbmltcG9ydCB7IGRpcnR5Q2hlY2ssIEhhc0RpcnR5IH0gZnJvbSAnQG15cm1pZG9uL25neC1kaXJ0eS1jaGVjayc7XHJcbmltcG9ydCB7XHJcbiAgQmVoYXZpb3JTdWJqZWN0LFxyXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gIE9ic2VydmFibGUsXHJcbiAgb2YsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG59IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBpZGVudGlmaWVycyBmb3IgYW4gZWRpdGVkIHBhcnQuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRJZGVudGl0eSB7XHJcbiAgaXRlbUlkOiBzdHJpbmc7XHJcbiAgdHlwZUlkOiBzdHJpbmc7XHJcbiAgcGFydElkOiBzdHJpbmcgfCBudWxsO1xyXG4gIHJvbGVJZDogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBpZGVudGlmaWVycyBmb3IgYW4gZWRpdGVkIGZyYWdtZW50LlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBGcmFnbWVudElkZW50aXR5IGV4dGVuZHMgUGFydElkZW50aXR5IHtcclxuICBmclR5cGVJZDogc3RyaW5nO1xyXG4gIGZyUm9sZUlkOiBzdHJpbmcgfCBudWxsO1xyXG4gIGxvYzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogQW4gZWRpdGVkIHBhcnQgb3IgZnJhZ21lbnQuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRlZE9iamVjdDxUIGV4dGVuZHMgUGFydCB8IEZyYWdtZW50PiB7XHJcbiAgdmFsdWU6IFQgfCBudWxsO1xyXG4gIHRoZXNhdXJpOiBUaGVzYXVyaVNldDtcclxuICBsYXllclBhcnQ/OiBUZXh0TGF5ZXJQYXJ0O1xyXG4gIGJhc2VUZXh0Pzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgcGFydC9mcmFnbWVudCBlZGl0b3JzIGR1bWIgY29tcG9uZW50cy5cclxuICogVGhlIG1vZGVsIHR5cGUgaXMgdGhlIHRlbXBsYXRlZCBhcmd1bWVudCBULlxyXG4gKlxyXG4gKiBXaGVuIGRlcml2aW5nIGZyb20gdGhpcyBlZGl0b3IsIGJlIHN1cmUgdG8gY2FsbCBzdXBlci5uZ09uSW5pdCgpXHJcbiAqIGZyb20gdGhlIGRlcml2ZWQgZWRpdG9yJ3MgbmdPbkluaXQgaGFuZGxlci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlOiAnJyxcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1vZGVsRWRpdG9yQ29tcG9uZW50QmFzZTxUIGV4dGVuZHMgUGFydCB8IEZyYWdtZW50PlxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEhhc0RpcnR5XHJcbntcclxuICBwcml2YXRlIF9kaXJ0eVN1Yj86IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9kaXJ0eUV2U3ViPzogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX2F1dGhTdWI/OiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfaWRlbnRpdHk6IFBhcnRJZGVudGl0eSB8IEZyYWdtZW50SWRlbnRpdHkgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZGF0YT86IEVkaXRlZE9iamVjdDxUPjtcclxuICBwcml2YXRlIF9kaXJ0eVN0b3JlJDogQmVoYXZpb3JTdWJqZWN0PG9iamVjdD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSByb290IGZvcm0gb2YgdGhlIGVkaXRvci5cclxuICAgKi9cclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwIHwgVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGN1cnJlbnQgdXNlci5cclxuICAgKi9cclxuICBwdWJsaWMgdXNlcj86IFVzZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB1c2VyIGF1dGhvcml6YXRpb24gbGV2ZWwgKDAtNCkuXHJcbiAgICovXHJcbiAgcHVibGljIHVzZXJMZXZlbDogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBBbiBvYnNlcnZhYmxlIHdpdGggdGhlIGN1cnJlbnQgZGlydHkgc3RhdGUgb2YgdGhlIGVkaXRvci5cclxuICAgKi9cclxuICBwdWJsaWMgaXNEaXJ0eSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpZGVudGl0eSBvZiB0aGUgZWRpdGVkIG1vZGVsLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBpZGVudGl0eSgpOiBQYXJ0SWRlbnRpdHkgfCBGcmFnbWVudElkZW50aXR5IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pZGVudGl0eTtcclxuICB9XHJcbiAgcHVibGljIHNldCBpZGVudGl0eSh2YWx1ZTogUGFydElkZW50aXR5IHwgRnJhZ21lbnRJZGVudGl0eSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5faWRlbnRpdHkgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmlkZW50aXR5Py5wYXJ0SWQpIHtcclxuICAgICAgY29uc3QgcGFydCA9IHRoaXMuX2RhdGE/LnZhbHVlIGFzIFBhcnQ7XHJcbiAgICAgIGlmIChwYXJ0ICYmICFwYXJ0LmlkKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3BhcnQgaWRlbnRpdHkgdXBkYXRlZCcpO1xyXG4gICAgICAgIHBhcnQuaWQgPSB0aGlzLmlkZW50aXR5LnBhcnRJZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGRhdGEgYmVpbmcgZWRpdGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkYXRhKCk6IEVkaXRlZE9iamVjdDxUPiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcbiAgcHVibGljIHNldCBkYXRhKHZhbHVlOiBFZGl0ZWRPYmplY3Q8VD4gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2RhdGEgPSB2YWx1ZTtcclxuICAgIHRoaXMub25EYXRhU2V0KHZhbHVlKTtcclxuICAgIHRoaXMuX2RpcnR5U3RvcmUkLm5leHQodGhpcy5mb3JtLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZWRpdGVkIGRhdGEgaXMgc2F2ZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUPjtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkaXJ0eSBzdGF0ZSBoYXMgY2hhbmdlZC5cclxuICAgKiBUaGlzIGV2ZW50IGp1c3QgcmVmbGVjdHMgY2hhbmdlcyBpbiBpc0RpcnR5JCwgYW5kIGlzIGEgZmFjaWxpdHlcclxuICAgKiBmb3IgcHJvcGFnYXRpbmcgaXQgdG8gdGhlIHBhcmVudCdzIGNvbXBvbmVudC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZGlydHlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSB0byBkaXNhYmxlIHRoZSBlZGl0b3IuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIHJlcXVlc3RzIHRvIGNsb3NlIHRoZSBlZGl0b3IuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGVkaXRvckNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBlZGl0b3IuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYXV0aFNlcnZpY2UgVGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UuXHJcbiAgICogQHBhcmFtIGZvcm1CdWlsZGVyIEZvcm0gYnVpbGRlci5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBhdXRoU2VydmljZTogQXV0aEp3dFNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcbiAgICB0aGlzLmVkaXRvckNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICB0aGlzLmRpcnR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe30pO1xyXG4gICAgdGhpcy51c2VyTGV2ZWwgPSAwO1xyXG4gICAgdGhpcy5fZGlydHlTdG9yZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG9iamVjdD4oe30pO1xyXG4gICAgdGhpcy5pc0RpcnR5JCA9IG9mKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIGZvcm1cclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuYnVpbGRGb3JtKHRoaXMuZm9ybUJ1aWxkZXIpO1xyXG5cclxuICAgIC8vIGRpcnR5IGNoZWNrIG9uIGZvcm1cclxuICAgIHRoaXMuaXNEaXJ0eSQgPSBkaXJ0eUNoZWNrKHRoaXMuZm9ybSwgdGhpcy5fZGlydHlTdG9yZSQpO1xyXG4gICAgdGhpcy5fZGlydHlFdlN1YiA9IHRoaXMuaXNEaXJ0eSRcclxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgLnN1YnNjcmliZSgodikgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh2KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gYXV0aCBzZXJ2aWNlXHJcbiAgICB0aGlzLnVzZXJMZXZlbCA9IHRoaXMuZ2V0Q3VycmVudFVzZXJMZXZlbCgpO1xyXG4gICAgdGhpcy5fYXV0aFN1YiA9IHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXIkLnN1YnNjcmliZShcclxuICAgICAgKHVzZXI6IFVzZXIgfCBudWxsKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVVc2VyUHJvcGVydGllcyh1c2VyKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpcnR5U3ViPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5fZGlydHlFdlN1Yj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX2F1dGhTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBsZW1lbnQgaW4gdGhlIGRlcml2ZWQgY2xhc3MgdG8gYnVpbGQgdGhlIHJvb3QgZm9ybSBvZiB0aGlzIGVkaXRvci5cclxuICAgKiBUaGUgZm9ybSBidWlsdCB3aWxsIHRoZW4gYmUgYXR0YWNoZWQgdG8gdGhlIGRpcnR5IGNoZWNrIG1lY2hhbmlzbVxyXG4gICAqIHByb3ZpZGVkIGJ5IHRoaXMgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBmb3JtQnVpbGRlciBUaGUgZm9ybSBidWlsZGVyLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBidWlsZEZvcm0oXHJcbiAgICBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcclxuICApOiBGb3JtR3JvdXAgfCBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGF1dGhvcml6YXRpb24gbGV2ZWwgb2YgdGhlIGN1cnJlbnQgdXNlciBpZiBhbnkuXHJcbiAgICogQHJldHVybnMgNC0xIGZvciBhZG1pbiwgZWRpdG9yLCBvcGVyYXRvciwgdmlzaXRvcjsgZWxzZSAwLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJMZXZlbCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgdXNlciA9IHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXJWYWx1ZTtcclxuICAgIGlmICghdXNlciB8fCAhdXNlci5yb2xlcykge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGlmICh1c2VyLnJvbGVzLmluZGV4T2YoJ2FkbWluJykgPiAtMSkge1xyXG4gICAgICByZXR1cm4gNDtcclxuICAgIH1cclxuICAgIGlmICh1c2VyLnJvbGVzLmluZGV4T2YoJ2VkaXRvcicpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIDM7XHJcbiAgICB9XHJcbiAgICBpZiAodXNlci5yb2xlcy5pbmRleE9mKCdvcGVyYXRvcicpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIDI7XHJcbiAgICB9XHJcbiAgICBpZiAodXNlci5yb2xlcy5pbmRleE9mKCd2aXNpdG9yJykgPiAtMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVVc2VyUHJvcGVydGllcyh1c2VyOiBVc2VyIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKCF1c2VyKSB7XHJcbiAgICAgIHRoaXMudXNlciA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy51c2VyTGV2ZWwgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51c2VyID0gdXNlcjtcclxuICAgICAgdGhpcy51c2VyTGV2ZWwgPSB0aGlzLmdldEN1cnJlbnRVc2VyTGV2ZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgZGF0YSB2YWx1ZSBwcm9wZXJ0eSBhbmQgZW1pdCB0aGUgY29ycmVzcG9uZGluZ1xyXG4gICAqIG1vZGVsQ2hhbmdlIGV2ZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZS5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgdXBkYXRlVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RhdGEgPSB7IC4uLih0aGlzLl9kYXRhIHx8IHsgdGhlc2F1cmk6IHt9IH0pLCB2YWx1ZTogdmFsdWUgfTtcclxuICAgIHRoaXMuX2RpcnR5U3RvcmUkLm5leHQodGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEludm9rZWQgd2hlbmV2ZXIgdGhlIG1vZGVsIHByb3BlcnR5IGlzIHNldCAoPWRhdGEgY29tZXMgZnJvbSBpbnB1dCBtb2RlbFxyXG4gICAqIHByb3BlcnR5KSwgdW5sZXNzIHNldHRpbmcgaXQgdmlhIHVwZGF0ZU1vZGVsLiBJbXBsZW1lbnQgdG8gdXBkYXRlIHRoZSBmb3JtXHJcbiAgICogY29udHJvbHMgdG8gcmVmbGVjdCB0aGUgbmV3IG1vZGVsIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSBzZXQsIG9yIHVuZGVmaW5lZC5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25EYXRhU2V0KGRhdGE/OiBFZGl0ZWRPYmplY3Q8VD4pOiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSBuZXcgb2JqZWN0IGZyb20gdGhlIGVkaXRlZCBwYXJ0IGlmIGFueSwgZWxzZSBhcyBhIG5ldyBwYXJ0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHR5cGVJZCBUaGUgcGFydCdzIHR5cGUgSUQuIFRoaXMgaXMgYSBjb25zdGFudCByZWNlaXZlZFxyXG4gICAqIGZyb20gdGhlIGltcGxlbWVudG9yLlxyXG4gICAqIEByZXR1cm5zIFBhcnQgb2JqZWN0LlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRFZGl0ZWRQYXJ0KHR5cGVJZDogc3RyaW5nKTogUGFydCB7XHJcbiAgICBjb25zdCBwYXJ0ID0gZGVlcENvcHkodGhpcy5kYXRhPy52YWx1ZSkgYXMgUGFydCB8IG51bGw7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBwYXJ0IHx8IHtcclxuICAgICAgICBpdGVtSWQ6IHRoaXMuaWRlbnRpdHkhLml0ZW1JZCB8fCAnJyxcclxuICAgICAgICBpZDogJycsXHJcbiAgICAgICAgdHlwZUlkOiB0eXBlSWQsXHJcbiAgICAgICAgcm9sZUlkOiB0aGlzLmlkZW50aXR5IS5yb2xlSWQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIHRpbWVDcmVhdGVkOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgIGNyZWF0b3JJZDogJycsXHJcbiAgICAgICAgdGltZU1vZGlmaWVkOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgIHVzZXJJZDogJycsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSBuZXcgb2JqZWN0IGZyb20gdGhlIGVkaXRlZCBmcmFnbWVudCBpZiBhbnksIGVsc2UgYSBuZXcgZnJhZ21lbnQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBGcmFnbWVudCBvYmplY3QuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldEVkaXRlZEZyYWdtZW50KCk6IEZyYWdtZW50IHtcclxuICAgIGNvbnN0IGZyID0gZGVlcENvcHkodGhpcy5kYXRhPy52YWx1ZSkgYXMgRnJhZ21lbnQgfCBudWxsO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZnIgfHwge1xyXG4gICAgICAgIGxvY2F0aW9uOiAodGhpcy5pZGVudGl0eSBhcyBGcmFnbWVudElkZW50aXR5KS5sb2MsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBsZW1lbnQgaW4gZGVyaXZlZCBjbGFzc2VzIHRvIGdldCB0aGUgZGF0YSBmcm9tIGZvcm0ncyBjb250cm9scy5cclxuICAgKiBUaGlzIGlzIHVzZWQgd2hlbiBzYXZpbmcuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFZhbHVlKCk6IFQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgaWYgdGhpcyBlZGl0b3IgaGFzIHRoZSB0aGVzYXVydXMgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IGluIHRoZVxyXG4gICAqIGxvYWRlZCB0aGVzYXVyaSBzZXQuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGhhc1RoZXNhdXJ1cyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8udGhlc2F1cmkgJiYgdGhpcy5kYXRhLnRoZXNhdXJpW2tleV0gPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IGEgcmVxdWVzdCB0byBjbG9zZSB0aGUgZWRpdG9yLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSB0aGUgZWRpdGVkIGRhdGEgaWYgdmFsaWQuXHJcbiAgICovXHJcbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdTYXZlIGludm9rZWQgd2l0aCBpbnZhbGlkIGZvcm0nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcclxuICAgIC8vIHRoZSBmb3JtIGlzIG5vIG1vcmUgZGlydHlcclxuICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -85,9 +85,9 @@ export class PartBadgeComponent {
85
85
  this.contrastColor = this._colorService.getContrastColor(this.color);
86
86
  }
87
87
  }
88
- PartBadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: PartBadgeComponent, deps: [{ token: i1.FacetService }, { token: i2.ColorService }], target: i0.ɵɵFactoryTarget.Component });
89
- PartBadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: PartBadgeComponent, selector: "cadmus-part-badge", inputs: { badgeType: "badgeType", typeThesaurus: "typeThesaurus", facetDefinition: "facetDefinition", partTypeIds: "partTypeIds" }, ngImport: i0, template: "<span class=\"part-badge\"\r\n [style.background-color]=\"color\"\r\n [style.color]=\"contrastColor\"\r\n *ngIf=\"badgeType !== 2\"\r\n>\r\n {{ typeName }}\r\n</span>\r\n<span class=\"role-badge\" *ngIf=\"badgeType !== 1 && roleName\">\r\n {{ roleName }}\r\n</span>\r\n", styles: [".part-badge{padding:4px;border-radius:6px}.role-badge{padding:4px;border:1px solid silver;border-radius:6px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
90
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: PartBadgeComponent, decorators: [{
88
+ PartBadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: PartBadgeComponent, deps: [{ token: i1.FacetService }, { token: i2.ColorService }], target: i0.ɵɵFactoryTarget.Component });
89
+ PartBadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: PartBadgeComponent, selector: "cadmus-part-badge", inputs: { badgeType: "badgeType", typeThesaurus: "typeThesaurus", facetDefinition: "facetDefinition", partTypeIds: "partTypeIds" }, ngImport: i0, template: "<span class=\"part-badge\"\r\n [style.background-color]=\"color\"\r\n [style.color]=\"contrastColor\"\r\n *ngIf=\"badgeType !== 2\"\r\n>\r\n {{ typeName }}\r\n</span>\r\n<span class=\"role-badge\" *ngIf=\"badgeType !== 1 && roleName\">\r\n {{ roleName }}\r\n</span>\r\n", styles: [".part-badge{padding:4px;border-radius:6px}.role-badge{padding:4px;border:1px solid silver;border-radius:6px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: PartBadgeComponent, decorators: [{
91
91
  type: Component,
92
92
  args: [{ selector: 'cadmus-part-badge', template: "<span class=\"part-badge\"\r\n [style.background-color]=\"color\"\r\n [style.color]=\"contrastColor\"\r\n *ngIf=\"badgeType !== 2\"\r\n>\r\n {{ typeName }}\r\n</span>\r\n<span class=\"role-badge\" *ngIf=\"badgeType !== 1 && roleName\">\r\n {{ roleName }}\r\n</span>\r\n", styles: [".part-badge{padding:4px;border-radius:6px}.role-badge{padding:4px;border:1px solid silver;border-radius:6px}\n"] }]
93
93
  }], ctorParameters: function () { return [{ type: i1.FacetService }, { type: i2.ColorService }]; }, propDecorators: { badgeType: [{
@@ -203,9 +203,9 @@ export class ThesaurusTreeComponent {
203
203
  return this.foundNodes?.length > 0 && this.foundNodes.indexOf(node) > -1;
204
204
  }
205
205
  }
206
- ThesaurusTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ThesaurusTreeComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
207
- ThesaurusTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: ThesaurusTreeComponent, selector: "cadmus-thesaurus-tree", inputs: { entries: "entries", rootLabel: "rootLabel", renderLabel: "renderLabel" }, outputs: { entryChange: "entryChange" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"find()\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Expand all\"\r\n (click)=\"expandAll()\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Collapse all\"\r\n (click)=\"collapseAll()\"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n <mat-form-field>\r\n <mat-label>find</mat-label>\r\n <input matInput [formControl]=\"filter\" />\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"resetFilter()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n <span\r\n *ngIf=\"foundNodes\"\r\n [ngClass]=\"{\r\n 'found-count': foundNodes.length,\r\n 'not-found-count': foundNodes.length === 0\r\n }\"\r\n >{{ foundNodes.length }}</span\r\n >\r\n</form>\r\n<mat-tree\r\n [dataSource]=\"treeDataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"th-tree\"\r\n>\r\n <!-- leaf node -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\r\n <li>\r\n <div class=\"mat-tree-node\">\r\n <a\r\n mat-button\r\n (click)=\"onTreeNodeClick(node)\"\r\n [class.hilite]=\"isFoundNode(node)\"\r\n >\r\n {{ node.label }}\r\n </a>\r\n </div>\r\n </li>\r\n </mat-tree-node>\r\n\r\n <!-- root node -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: isRoot\">\r\n <div class=\"mat-tree-node\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTreeNodeToggle\r\n [attr.aria-label]=\"'Toggle ' + node.label\"\r\n >\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n {{ node.label }}\r\n </div>\r\n <ul class=\"tree-nested-node\">\r\n <div *ngIf=\"treeControl.isExpanded(node)\">\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </ul>\r\n </mat-nested-tree-node>\r\n\r\n <!-- parent node -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChildren\">\r\n <li class=\"tree-container\">\r\n <div class=\"mat-tree-node\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTreeNodeToggle\r\n [attr.aria-label]=\"'Toggle ' + node.label\"\r\n >\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n <a mat-button (click)=\"onTreeNodeClick(node)\">\r\n {{ node.label }}\r\n </a>\r\n </div>\r\n <ul class=\"tree-nested-node\">\r\n <div *ngIf=\"treeControl.isExpanded(node)\">\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </ul>\r\n </li>\r\n </mat-nested-tree-node>\r\n</mat-tree>\r\n", styles: [".th-tree-progress-bar{margin-left:30px}.th-tree-nested-node{padding-left:30px}mat-tree{margin-left:40px}.mat-tree-node{padding:0;background-color:#fff}.mat-nested-tree-node{top:-24px}ul,li{list-style:none;margin:0;padding:0}li.th-tree-container{border-bottom:0}ul{padding-left:40px}li{padding-left:40px;border:1px dotted grey;border-width:0 0 1px 1px;position:relative;top:-24px}li.mat-tree-node,li div{margin:0;position:relative;top:24px}li ul{border-top:1px dotted grey;margin-left:-40px;padding-left:60px}.mat-nested-tree-node:last-child ul{border-left:1px solid white;margin-left:-41px}.mat-mdc-icon-button{z-index:100}span.found-count{margin:0 4px;padding:2px 4px;color:#fff;background-color:#0cc078;border-radius:6px}span.not-found-count{margin:0 4px;padding:2px 4px;color:#fff;background-color:#fb6962;border-radius:6px}.hilite{background-color:#fdfd96}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { 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.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: "directive", type: i7.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["role", "disabled", "tabIndex", "matNestedTreeNode"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i7.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i7.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i7.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i7.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: i7.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
208
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ThesaurusTreeComponent, decorators: [{
206
+ ThesaurusTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ThesaurusTreeComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
207
+ ThesaurusTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ThesaurusTreeComponent, selector: "cadmus-thesaurus-tree", inputs: { entries: "entries", rootLabel: "rootLabel", renderLabel: "renderLabel" }, outputs: { entryChange: "entryChange" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"find()\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Expand all\"\r\n (click)=\"expandAll()\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Collapse all\"\r\n (click)=\"collapseAll()\"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n <mat-form-field>\r\n <mat-label>find</mat-label>\r\n <input matInput [formControl]=\"filter\" />\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"resetFilter()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n <span\r\n *ngIf=\"foundNodes\"\r\n [ngClass]=\"{\r\n 'found-count': foundNodes.length,\r\n 'not-found-count': foundNodes.length === 0\r\n }\"\r\n >{{ foundNodes.length }}</span\r\n >\r\n</form>\r\n<mat-tree\r\n [dataSource]=\"treeDataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"th-tree\"\r\n>\r\n <!-- leaf node -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\r\n <li>\r\n <div class=\"mat-tree-node\">\r\n <a\r\n mat-button\r\n (click)=\"onTreeNodeClick(node)\"\r\n [class.hilite]=\"isFoundNode(node)\"\r\n >\r\n {{ node.label }}\r\n </a>\r\n </div>\r\n </li>\r\n </mat-tree-node>\r\n\r\n <!-- root node -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: isRoot\">\r\n <div class=\"mat-tree-node\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTreeNodeToggle\r\n [attr.aria-label]=\"'Toggle ' + node.label\"\r\n >\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n {{ node.label }}\r\n </div>\r\n <ul class=\"tree-nested-node\">\r\n <div *ngIf=\"treeControl.isExpanded(node)\">\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </ul>\r\n </mat-nested-tree-node>\r\n\r\n <!-- parent node -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChildren\">\r\n <li class=\"tree-container\">\r\n <div class=\"mat-tree-node\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTreeNodeToggle\r\n [attr.aria-label]=\"'Toggle ' + node.label\"\r\n >\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n <a mat-button (click)=\"onTreeNodeClick(node)\">\r\n {{ node.label }}\r\n </a>\r\n </div>\r\n <ul class=\"tree-nested-node\">\r\n <div *ngIf=\"treeControl.isExpanded(node)\">\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </ul>\r\n </li>\r\n </mat-nested-tree-node>\r\n</mat-tree>\r\n", styles: [".th-tree-progress-bar{margin-left:30px}.th-tree-nested-node{padding-left:30px}mat-tree{margin-left:40px}.mat-tree-node{padding:0;background-color:#fff}.mat-nested-tree-node{top:-24px}ul,li{list-style:none;margin:0;padding:0}li.th-tree-container{border-bottom:0}ul{padding-left:40px}li{padding-left:40px;border:1px dotted grey;border-width:0 0 1px 1px;position:relative;top:-24px}li.mat-tree-node,li div{margin:0;position:relative;top:24px}li ul{border-top:1px dotted grey;margin-left:-40px;padding-left:60px}.mat-nested-tree-node:last-child ul{border-left:1px solid white;margin-left:-41px}.mat-mdc-icon-button{z-index:100}span.found-count{margin:0 4px;padding:2px 4px;color:#fff;background-color:#0cc078;border-radius:6px}span.not-found-count{margin:0 4px;padding:2px 4px;color:#fff;background-color:#fb6962;border-radius:6px}.hilite{background-color:#fdfd96}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { 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.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: "directive", type: i7.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["role", "disabled", "tabIndex", "matNestedTreeNode"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i7.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i7.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i7.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i7.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: i7.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ThesaurusTreeComponent, decorators: [{
209
209
  type: Component,
210
210
  args: [{ selector: 'cadmus-thesaurus-tree', template: "<form [formGroup]=\"form\" (submit)=\"find()\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Expand all\"\r\n (click)=\"expandAll()\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Collapse all\"\r\n (click)=\"collapseAll()\"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n <mat-form-field>\r\n <mat-label>find</mat-label>\r\n <input matInput [formControl]=\"filter\" />\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"resetFilter()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n <span\r\n *ngIf=\"foundNodes\"\r\n [ngClass]=\"{\r\n 'found-count': foundNodes.length,\r\n 'not-found-count': foundNodes.length === 0\r\n }\"\r\n >{{ foundNodes.length }}</span\r\n >\r\n</form>\r\n<mat-tree\r\n [dataSource]=\"treeDataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"th-tree\"\r\n>\r\n <!-- leaf node -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\r\n <li>\r\n <div class=\"mat-tree-node\">\r\n <a\r\n mat-button\r\n (click)=\"onTreeNodeClick(node)\"\r\n [class.hilite]=\"isFoundNode(node)\"\r\n >\r\n {{ node.label }}\r\n </a>\r\n </div>\r\n </li>\r\n </mat-tree-node>\r\n\r\n <!-- root node -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: isRoot\">\r\n <div class=\"mat-tree-node\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTreeNodeToggle\r\n [attr.aria-label]=\"'Toggle ' + node.label\"\r\n >\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n {{ node.label }}\r\n </div>\r\n <ul class=\"tree-nested-node\">\r\n <div *ngIf=\"treeControl.isExpanded(node)\">\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </ul>\r\n </mat-nested-tree-node>\r\n\r\n <!-- parent node -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChildren\">\r\n <li class=\"tree-container\">\r\n <div class=\"mat-tree-node\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTreeNodeToggle\r\n [attr.aria-label]=\"'Toggle ' + node.label\"\r\n >\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n <a mat-button (click)=\"onTreeNodeClick(node)\">\r\n {{ node.label }}\r\n </a>\r\n </div>\r\n <ul class=\"tree-nested-node\">\r\n <div *ngIf=\"treeControl.isExpanded(node)\">\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </ul>\r\n </li>\r\n </mat-nested-tree-node>\r\n</mat-tree>\r\n", styles: [".th-tree-progress-bar{margin-left:30px}.th-tree-nested-node{padding-left:30px}mat-tree{margin-left:40px}.mat-tree-node{padding:0;background-color:#fff}.mat-nested-tree-node{top:-24px}ul,li{list-style:none;margin:0;padding:0}li.th-tree-container{border-bottom:0}ul{padding-left:40px}li{padding-left:40px;border:1px dotted grey;border-width:0 0 1px 1px;position:relative;top:-24px}li.mat-tree-node,li div{margin:0;position:relative;top:24px}li ul{border-top:1px dotted grey;margin-left:-40px;padding-left:60px}.mat-nested-tree-node:last-child ul{border-left:1px solid white;margin-left:-41px}.mat-mdc-icon-button{z-index:100}span.found-count{margin:0 4px;padding:2px 4px;color:#fff;background-color:#0cc078;border-radius:6px}span.not-found-count{margin:0 4px;padding:2px 4px;color:#fff;background-color:#fb6962;border-radius:6px}.hilite{background-color:#fdfd96}\n"] }]
211
211
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { entries: [{
@@ -56,9 +56,9 @@ export class ColorService {
56
56
  : 'white';
57
57
  }
58
58
  }
59
- ColorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ColorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
60
- ColorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ColorService, providedIn: 'root' });
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ColorService, decorators: [{
59
+ ColorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ColorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
60
+ ColorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ColorService, providedIn: 'root' });
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ColorService, decorators: [{
62
62
  type: Injectable,
63
63
  args: [{
64
64
  providedIn: 'root',
@@ -22,9 +22,9 @@ export class UserRefLookupService {
22
22
  return item?.userName;
23
23
  }
24
24
  }
25
- UserRefLookupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: UserRefLookupService, deps: [{ token: i1.UserService }], target: i0.ɵɵFactoryTarget.Injectable });
26
- UserRefLookupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: UserRefLookupService, providedIn: 'root' });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: UserRefLookupService, decorators: [{
25
+ UserRefLookupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UserRefLookupService, deps: [{ token: i1.UserService }], target: i0.ɵɵFactoryTarget.Injectable });
26
+ UserRefLookupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UserRefLookupService, providedIn: 'root' });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UserRefLookupService, decorators: [{
28
28
  type: Injectable,
29
29
  args: [{
30
30
  providedIn: 'root',