@myrmidon/cadmus-refs-asserted-ids 1.0.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/esm2022/lib/asserted-id/asserted-id.component.mjs +133 -0
  2. package/esm2022/lib/asserted-ids/asserted-ids.component.mjs +147 -0
  3. package/esm2022/lib/cadmus-refs-asserted-ids.module.mjs +92 -0
  4. package/esm2022/lib/scoped-pin-lookup/scoped-pin-lookup.component.mjs +130 -0
  5. package/esm2022/lib/services/pin-ref-lookup.service.mjs +73 -0
  6. package/{esm2020 → esm2022}/myrmidon-cadmus-refs-asserted-ids.mjs +4 -4
  7. package/{esm2020 → esm2022}/public-api.mjs +8 -8
  8. package/{fesm2020 → fesm2022}/myrmidon-cadmus-refs-asserted-ids.mjs +500 -498
  9. package/fesm2022/myrmidon-cadmus-refs-asserted-ids.mjs.map +1 -0
  10. package/index.d.ts +5 -5
  11. package/lib/asserted-id/asserted-id.component.d.ts +49 -50
  12. package/lib/asserted-ids/asserted-ids.component.d.ts +44 -44
  13. package/lib/cadmus-refs-asserted-ids.module.d.ts +22 -22
  14. package/lib/scoped-pin-lookup/scoped-pin-lookup.component.d.ts +39 -39
  15. package/lib/services/pin-ref-lookup.service.d.ts +18 -18
  16. package/package.json +8 -14
  17. package/public-api.d.ts +5 -5
  18. package/esm2020/lib/asserted-id/asserted-id.component.mjs +0 -130
  19. package/esm2020/lib/asserted-ids/asserted-ids.component.mjs +0 -146
  20. package/esm2020/lib/cadmus-refs-asserted-ids.module.mjs +0 -91
  21. package/esm2020/lib/scoped-pin-lookup/scoped-pin-lookup.component.mjs +0 -129
  22. package/esm2020/lib/services/pin-ref-lookup.service.mjs +0 -72
  23. package/fesm2015/myrmidon-cadmus-refs-asserted-ids.mjs +0 -552
  24. package/fesm2015/myrmidon-cadmus-refs-asserted-ids.mjs.map +0 -1
  25. package/fesm2020/myrmidon-cadmus-refs-asserted-ids.mjs.map +0 -1
@@ -0,0 +1,133 @@
1
+ import { Component, EventEmitter, Inject, Input, Output, } from '@angular/core';
2
+ import { Validators, } from '@angular/forms';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "../services/pin-ref-lookup.service";
7
+ import * as i3 from "@angular/common";
8
+ import * as i4 from "@angular/material/button";
9
+ import * as i5 from "@angular/material/expansion";
10
+ import * as i6 from "@angular/material/form-field";
11
+ import * as i7 from "@angular/material/icon";
12
+ import * as i8 from "@angular/material/input";
13
+ import * as i9 from "@angular/material/select";
14
+ import * as i10 from "@angular/material/core";
15
+ import * as i11 from "@myrmidon/cadmus-refs-assertion";
16
+ import * as i12 from "../scoped-pin-lookup/scoped-pin-lookup.component";
17
+ class AssertedIdComponent {
18
+ get id() {
19
+ return this._id;
20
+ }
21
+ set id(value) {
22
+ if (this._id !== value) {
23
+ this._id = value || undefined;
24
+ this.updateForm(this._id);
25
+ }
26
+ }
27
+ constructor(formBuilder, lookupService, lookupDefs) {
28
+ this.lookupService = lookupService;
29
+ this.lookupDefs = lookupDefs;
30
+ this.tag = formBuilder.control(null, Validators.maxLength(50));
31
+ this.value = formBuilder.control(null, [
32
+ Validators.required,
33
+ Validators.maxLength(500),
34
+ ]);
35
+ this.scope = formBuilder.control(null, Validators.maxLength(500));
36
+ this.assertion = formBuilder.control(null);
37
+ this.form = formBuilder.group({
38
+ tag: this.tag,
39
+ value: this.value,
40
+ scope: this.scope,
41
+ assertion: this.assertion
42
+ });
43
+ this.lookupExpanded = false;
44
+ // events
45
+ this.idChange = new EventEmitter();
46
+ this.editorClose = new EventEmitter();
47
+ }
48
+ ngOnInit() {
49
+ this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {
50
+ if (!this._updatingForm) {
51
+ this.emitIdChange();
52
+ }
53
+ });
54
+ }
55
+ onAssertionChange(assertion) {
56
+ this.assertion.setValue(assertion || null);
57
+ }
58
+ onIdPick(id) {
59
+ this.value.setValue(id);
60
+ this.value.markAsDirty();
61
+ this.value.updateValueAndValidity();
62
+ this.lookupExpanded = false;
63
+ }
64
+ updateForm(value) {
65
+ this._updatingForm = true;
66
+ if (!value) {
67
+ this.form.reset();
68
+ }
69
+ else {
70
+ this.tag.setValue(value.tag || null);
71
+ this.value.setValue(value.value);
72
+ this.scope.setValue(value.scope);
73
+ this.assertion.setValue(value.assertion || null);
74
+ this.form.markAsPristine();
75
+ }
76
+ this._updatingForm = false;
77
+ // this.emitIdChange();
78
+ }
79
+ getId() {
80
+ return {
81
+ tag: this.tag.value?.trim(),
82
+ value: this.value.value?.trim() || '',
83
+ scope: this.scope.value?.trim() || '',
84
+ assertion: this.assertion.value || undefined,
85
+ };
86
+ }
87
+ emitIdChange() {
88
+ if (!this.hasSubmit) {
89
+ this._id = this.getId();
90
+ this.idChange.emit(this._id);
91
+ }
92
+ }
93
+ cancel() {
94
+ this.editorClose.emit();
95
+ }
96
+ save() {
97
+ if (this.form.valid) {
98
+ this._id = this.getId();
99
+ this.idChange.emit(this._id);
100
+ }
101
+ }
102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AssertedIdComponent, deps: [{ token: i1.FormBuilder }, { token: i2.PinRefLookupService }, { token: 'indexLookupDefinitions' }], target: i0.ɵɵFactoryTarget.Component }); }
103
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AssertedIdComponent, selector: "cadmus-refs-asserted-id", inputs: { idScopeEntries: "idScopeEntries", idTagEntries: "idTagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries", id: "id", noEidLookup: "noEidLookup", hasSubmit: "hasSubmit" }, outputs: { idChange: "idChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n <mat-form-field *ngIf=\"idTagEntries?.length\" style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n <mat-option *ngFor=\"let e of idTagEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- tag (free) -->\n <mat-form-field *ngIf=\"!idTagEntries?.length\" style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n <mat-error *ngIf=\"tag.errors?.maxLength && (tag.dirty || tag.touched)\"\n >tag too long</mat-error\n >\n </mat-form-field>\n\n <!-- scope (bound) -->\n <mat-form-field *ngIf=\"idScopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n <mat-option *ngFor=\"let e of idScopeEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- scope (free) -->\n <mat-form-field *ngIf=\"!idScopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n <mat-error\n *ngIf=\"scope.errors?.maxLength && (scope.dirty || scope.touched)\"\n >scope too long</mat-error\n >\n </mat-form-field>\n\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput [formControl]=\"value\" />\n <mat-error\n *ngIf=\"value.errors?.required && (value.dirty || value.touched)\"\n >value required</mat-error\n >\n <mat-error\n *ngIf=\"value.errors?.maxLength && (value.dirty || value.touched)\"\n >value too long</mat-error\n >\n </mat-form-field>\n\n <!-- lookup -->\n <div *ngIf=\"!noEidLookup\" style=\"margin-top: 4px\">\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\n <cadmus-scoped-pin-lookup\n (idPick)=\"onIdPick($event)\"\n ></cadmus-scoped-pin-lookup>\n </mat-expansion-panel>\n </div>\n </div>\n\n <!-- assertion -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [assertion]=\"assertion.value\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n\n <!-- buttons -->\n <div *ngIf=\"hasSubmit\">\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </button>\n <button\n mat-icon-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"form.invalid\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n</form>\n", styles: [".form-row{display:flex;gap:8px;align-items:flex-start;flex-wrap:wrap}.form-row *{flex:0 0 auto}.pin-info{font-size:90%;color:silver}fieldset{border:1px solid silver;border-radius:6px;padding:6px}@media only screen and (max-width: 959px){div#container{grid-template-rows:1fr auto;grid-template-columns:1fr;grid-template-areas:\"editor\" \"lookup\"}}\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.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.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.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: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i11.AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion"], outputs: ["assertionChange"] }, { kind: "component", type: i12.ScopedPinLookupComponent, selector: "cadmus-scoped-pin-lookup", outputs: ["idPick"] }] }); }
104
+ }
105
+ export { AssertedIdComponent };
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AssertedIdComponent, decorators: [{
107
+ type: Component,
108
+ args: [{ selector: 'cadmus-refs-asserted-id', template: "<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n <mat-form-field *ngIf=\"idTagEntries?.length\" style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n <mat-option *ngFor=\"let e of idTagEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- tag (free) -->\n <mat-form-field *ngIf=\"!idTagEntries?.length\" style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n <mat-error *ngIf=\"tag.errors?.maxLength && (tag.dirty || tag.touched)\"\n >tag too long</mat-error\n >\n </mat-form-field>\n\n <!-- scope (bound) -->\n <mat-form-field *ngIf=\"idScopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n <mat-option *ngFor=\"let e of idScopeEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- scope (free) -->\n <mat-form-field *ngIf=\"!idScopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n <mat-error\n *ngIf=\"scope.errors?.maxLength && (scope.dirty || scope.touched)\"\n >scope too long</mat-error\n >\n </mat-form-field>\n\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput [formControl]=\"value\" />\n <mat-error\n *ngIf=\"value.errors?.required && (value.dirty || value.touched)\"\n >value required</mat-error\n >\n <mat-error\n *ngIf=\"value.errors?.maxLength && (value.dirty || value.touched)\"\n >value too long</mat-error\n >\n </mat-form-field>\n\n <!-- lookup -->\n <div *ngIf=\"!noEidLookup\" style=\"margin-top: 4px\">\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\n <cadmus-scoped-pin-lookup\n (idPick)=\"onIdPick($event)\"\n ></cadmus-scoped-pin-lookup>\n </mat-expansion-panel>\n </div>\n </div>\n\n <!-- assertion -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [assertion]=\"assertion.value\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n\n <!-- buttons -->\n <div *ngIf=\"hasSubmit\">\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </button>\n <button\n mat-icon-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"form.invalid\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n</form>\n", styles: [".form-row{display:flex;gap:8px;align-items:flex-start;flex-wrap:wrap}.form-row *{flex:0 0 auto}.pin-info{font-size:90%;color:silver}fieldset{border:1px solid silver;border-radius:6px;padding:6px}@media only screen and (max-width: 959px){div#container{grid-template-rows:1fr auto;grid-template-columns:1fr;grid-template-areas:\"editor\" \"lookup\"}}\n"] }]
109
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.PinRefLookupService }, { type: undefined, decorators: [{
110
+ type: Inject,
111
+ args: ['indexLookupDefinitions']
112
+ }] }]; }, propDecorators: { idScopeEntries: [{
113
+ type: Input
114
+ }], idTagEntries: [{
115
+ type: Input
116
+ }], assTagEntries: [{
117
+ type: Input
118
+ }], refTypeEntries: [{
119
+ type: Input
120
+ }], refTagEntries: [{
121
+ type: Input
122
+ }], id: [{
123
+ type: Input
124
+ }], noEidLookup: [{
125
+ type: Input
126
+ }], hasSubmit: [{
127
+ type: Input
128
+ }], idChange: [{
129
+ type: Output
130
+ }], editorClose: [{
131
+ type: Output
132
+ }] } });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0ZWQtaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtaWQvYXNzZXJ0ZWQtaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtaWQvYXNzZXJ0ZWQtaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjOUMsTUFLYSxtQkFBbUI7SUFnQzlCLElBQ1csRUFBRTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBVyxFQUFFLENBQUMsS0FBb0M7UUFDaEQsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRTtZQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxTQUFTLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBaUJELFlBQ0UsV0FBd0IsRUFDakIsYUFBa0MsRUFFbEMsVUFBa0M7UUFGbEMsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBRWxDLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBRXpDLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVB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QyxRQUFRO3NCQURkLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEluZGV4TG9va3VwRGVmaW5pdGlvbnMsIFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgQXNzZXJ0aW9uIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGlvbic7XHJcblxyXG5pbXBvcnQgeyBQaW5SZWZMb29rdXBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGluLXJlZi1sb29rdXAuc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFzc2VydGVkSWQge1xyXG4gIHRhZz86IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIHNjb3BlOiBzdHJpbmc7XHJcbiAgYXNzZXJ0aW9uPzogQXNzZXJ0aW9uO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NhZG11cy1yZWZzLWFzc2VydGVkLWlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXJ0ZWQtaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2VydGVkLWlkLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFzc2VydGVkSWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByaXZhdGUgX3VwZGF0aW5nRm9ybTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9pZDogQXNzZXJ0ZWRJZCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIHRhZzogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIHZhbHVlOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgc2NvcGU6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBhc3NlcnRpb246IEZvcm1Db250cm9sPEFzc2VydGlvbiB8IG51bGw+O1xyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHB1YmxpYyBsb29rdXBFeHBhbmRlZDogYm9vbGVhbjtcclxuXHJcbiAgLy8gYXNzZXJ0ZWQtaWQtc2NvcGVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaWRTY29wZUVudHJpZXM/OiBUaGVzYXVydXNFbnRyeVtdO1xyXG5cclxuICAvLyBhc3NlcnRlZC1pZC10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaWRUYWdFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgLy8gYXNzZXJ0aW9uLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhc3NUYWdFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgLy8gZG9jLXJlZmVyZW5jZS10eXBlc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlZlR5cGVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvLyBkb2MtcmVmZXJlbmNlLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWZUYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaWQoKTogQXNzZXJ0ZWRJZCB8IHVuZGVmaW5lZCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBBc3NlcnRlZElkIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuX2lkICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9pZCA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy51cGRhdGVGb3JtKHRoaXMuX2lkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgdG8gaGlkZSB0aGUgcGluLWJhc2VkIEVJRCBsb29rdXAgVUkuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbm9FaWRMb29rdXA6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGhhc1N1Ym1pdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXNzZXJ0ZWRJZD47XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBlZGl0b3JDbG9zZTogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHVibGljIGxvb2t1cFNlcnZpY2U6IFBpblJlZkxvb2t1cFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdpbmRleExvb2t1cERlZmluaXRpb25zJylcclxuICAgIHB1YmxpYyBsb29rdXBEZWZzOiBJbmRleExvb2t1cERlZmluaXRpb25zXHJcbiAgKSB7XHJcbiAgICB0aGlzLnRhZyA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApKTtcclxuICAgIHRoaXMudmFsdWUgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFtcclxuICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTAwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5zY29wZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTAwKSk7XHJcbiAgICB0aGlzLmFzc2VydGlvbiA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCk7XHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHRhZzogdGhpcy50YWcsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICBzY29wZTogdGhpcy5zY29wZSxcclxuICAgICAgYXNzZXJ0aW9uOiB0aGlzLmFzc2VydGlvblxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmxvb2t1cEV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAvLyBldmVudHNcclxuICAgIHRoaXMuaWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFzc2VydGVkSWQ+KCk7XHJcbiAgICB0aGlzLmVkaXRvckNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMzAwKSkuc3Vic2NyaWJlKChfKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5fdXBkYXRpbmdGb3JtKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0SWRDaGFuZ2UoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Bc3NlcnRpb25DaGFuZ2UoYXNzZXJ0aW9uOiBBc3NlcnRpb24gfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIHRoaXMuYXNzZXJ0aW9uLnNldFZhbHVlKGFzc2VydGlvbiB8fCBudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbklkUGljayhpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlLnNldFZhbHVlKGlkKTtcclxuICAgIHRoaXMudmFsdWUubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMudmFsdWUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5sb29rdXBFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtKHZhbHVlOiBBc3NlcnRlZElkIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICB0aGlzLl91cGRhdGluZ0Zvcm0gPSB0cnVlO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFnLnNldFZhbHVlKHZhbHVlLnRhZyB8fCBudWxsKTtcclxuICAgICAgdGhpcy52YWx1ZS5zZXRWYWx1ZSh2YWx1ZS52YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2NvcGUuc2V0VmFsdWUodmFsdWUuc2NvcGUpO1xyXG4gICAgICB0aGlzLmFzc2VydGlvbi5zZXRWYWx1ZSh2YWx1ZS5hc3NlcnRpb24gfHwgbnVsbCk7XHJcbiAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRpbmdGb3JtID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLmVtaXRJZENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJZCgpOiBBc3NlcnRlZElkIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRhZzogdGhpcy50YWcudmFsdWU/LnRyaW0oKSxcclxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUudmFsdWU/LnRyaW0oKSB8fCAnJyxcclxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGUudmFsdWU/LnRyaW0oKSB8fCAnJyxcclxuICAgICAgYXNzZXJ0aW9uOiB0aGlzLmFzc2VydGlvbi52YWx1ZSB8fCB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVtaXRJZENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5oYXNTdWJtaXQpIHtcclxuICAgICAgdGhpcy5faWQgPSB0aGlzLmdldElkKCk7XHJcbiAgICAgIHRoaXMuaWRDaGFuZ2UuZW1pdCh0aGlzLl9pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0b3JDbG9zZS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcclxuICAgICAgdGhpcy5faWQgPSB0aGlzLmdldElkKCk7XHJcbiAgICAgIHRoaXMuaWRDaGFuZ2UuZW1pdCh0aGlzLl9pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZSgpXCI+XG4gIDxkaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICA8IS0tIHRhZyAoYm91bmQpIC0tPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiaWRUYWdFbnRyaWVzPy5sZW5ndGhcIiBzdHlsZT1cIndpZHRoOiA4ZW1cIj5cbiAgICAgICAgPG1hdC1sYWJlbD50YWc8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInRhZ1wiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlIG9mIGlkVGFnRW50cmllc1wiIFt2YWx1ZV09XCJlLmlkXCI+e3tcbiAgICAgICAgICAgIGUudmFsdWVcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwhLS0gdGFnIChmcmVlKSAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFpZFRhZ0VudHJpZXM/Lmxlbmd0aFwiIHN0eWxlPVwid2lkdGg6IDhlbVwiPlxuICAgICAgICA8bWF0LWxhYmVsPnRhZzwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInRhZ1wiIC8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJ0YWcuZXJyb3JzPy5tYXhMZW5ndGggJiYgKHRhZy5kaXJ0eSB8fCB0YWcudG91Y2hlZClcIlxuICAgICAgICAgID50YWcgdG9vIGxvbmc8L21hdC1lcnJvclxuICAgICAgICA+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8IS0tIHNjb3BlIChib3VuZCkgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJpZFNjb3BlRW50cmllcz8ubGVuZ3RoXCIgc3R5bGU9XCJ3aWR0aDogOGVtXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+c2NvcGU8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInNjb3BlXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGUgb2YgaWRTY29wZUVudHJpZXNcIiBbdmFsdWVdPVwiZS5pZFwiPnt7XG4gICAgICAgICAgICBlLnZhbHVlXG4gICAgICAgICAgfX08L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8IS0tIHNjb3BlIChmcmVlKSAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFpZFNjb3BlRW50cmllcz8ubGVuZ3RoXCIgc3R5bGU9XCJ3aWR0aDogOGVtXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+c2NvcGU8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJzY29wZVwiIC8+XG4gICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAqbmdJZj1cInNjb3BlLmVycm9ycz8ubWF4TGVuZ3RoICYmIChzY29wZS5kaXJ0eSB8fCBzY29wZS50b3VjaGVkKVwiXG4gICAgICAgICAgPnNjb3BlIHRvbyBsb25nPC9tYXQtZXJyb3JcbiAgICAgICAgPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgPCEtLSB2YWx1ZSAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1sYWJlbD52YWx1ZTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInZhbHVlXCIgLz5cbiAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICpuZ0lmPVwidmFsdWUuZXJyb3JzPy5yZXF1aXJlZCAmJiAodmFsdWUuZGlydHkgfHwgdmFsdWUudG91Y2hlZClcIlxuICAgICAgICAgID52YWx1ZSByZXF1aXJlZDwvbWF0LWVycm9yXG4gICAgICAgID5cbiAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICpuZ0lmPVwidmFsdWUuZXJyb3JzPy5tYXhMZW5ndGggJiYgKHZhbHVlLmRpcnR5IHx8IHZhbHVlLnRvdWNoZWQpXCJcbiAgICAgICAgICA+dmFsdWUgdG9vIGxvbmc8L21hdC1lcnJvclxuICAgICAgICA+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8IS0tIGxvb2t1cCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCIhbm9FaWRMb29rdXBcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDRweFwiPlxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbKGV4cGFuZGVkKV09XCJsb29rdXBFeHBhbmRlZFwiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5sb29rdXA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxjYWRtdXMtc2NvcGVkLXBpbi1sb29rdXBcbiAgICAgICAgICAgIChpZFBpY2spPVwib25JZFBpY2soJGV2ZW50KVwiXG4gICAgICAgICAgPjwvY2FkbXVzLXNjb3BlZC1waW4tbG9va3VwPlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gYXNzZXJ0aW9uIC0tPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPmFzc2VydGlvbjwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICA8Y2FkbXVzLXJlZnMtYXNzZXJ0aW9uXG4gICAgICAgIFthc3NUYWdFbnRyaWVzXT1cImFzc1RhZ0VudHJpZXNcIlxuICAgICAgICBbcmVmVHlwZUVudHJpZXNdPVwicmVmVHlwZUVudHJpZXNcIlxuICAgICAgICBbcmVmVGFnRW50cmllc109XCJyZWZUYWdFbnRyaWVzXCJcbiAgICAgICAgW2Fzc2VydGlvbl09XCJhc3NlcnRpb24udmFsdWVcIlxuICAgICAgICAoYXNzZXJ0aW9uQ2hhbmdlKT1cIm9uQXNzZXJ0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgPC9jYWRtdXMtcmVmcy1hc3NlcnRpb24+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8L2Rpdj5cblxuICA8IS0tIGJ1dHRvbnMgLS0+XG4gIDxkaXYgKm5nSWY9XCJoYXNTdWJtaXRcIj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
@@ -0,0 +1,147 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { take } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ import * as i2 from "@myrmidon/ng-mat-tools";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "@angular/material/button";
8
+ import * as i5 from "@angular/material/expansion";
9
+ import * as i6 from "@angular/material/icon";
10
+ import * as i7 from "../asserted-id/asserted-id.component";
11
+ /**
12
+ * Asserted IDs editor.
13
+ */
14
+ class AssertedIdsComponent {
15
+ /**
16
+ * The asserted IDs.
17
+ */
18
+ get ids() {
19
+ return this._ids;
20
+ }
21
+ set ids(value) {
22
+ if (this._ids !== value) {
23
+ this._ids = value || [];
24
+ this.updateForm(value);
25
+ }
26
+ }
27
+ constructor(formBuilder, _dialogService) {
28
+ this._dialogService = _dialogService;
29
+ this._ids = [];
30
+ this._editedIndex = -1;
31
+ this.idsChange = new EventEmitter();
32
+ this.entries = formBuilder.control([], { nonNullable: true });
33
+ // form
34
+ this.form = formBuilder.group({
35
+ ids: this.entries,
36
+ });
37
+ }
38
+ updateForm(ids) {
39
+ if (!ids?.length) {
40
+ this.form.reset();
41
+ return;
42
+ }
43
+ this.entries.setValue(ids, { emitEvent: false });
44
+ this.entries.updateValueAndValidity();
45
+ this.form.markAsPristine();
46
+ }
47
+ emitIdsChange() {
48
+ this.idsChange.emit(this.entries.value);
49
+ }
50
+ addId() {
51
+ this.editId({
52
+ scope: '',
53
+ value: '',
54
+ }, -1);
55
+ }
56
+ editId(id, index) {
57
+ this._editedIndex = index;
58
+ this.edited = id;
59
+ }
60
+ closeId() {
61
+ this._editedIndex = -1;
62
+ this.edited = undefined;
63
+ }
64
+ saveId(entry) {
65
+ const entries = [...this.entries.value];
66
+ if (this._editedIndex === -1) {
67
+ entries.push(entry);
68
+ }
69
+ else {
70
+ entries.splice(this._editedIndex, 1, entry);
71
+ }
72
+ this.entries.setValue(entries);
73
+ this.entries.markAsDirty();
74
+ this.entries.updateValueAndValidity();
75
+ this.closeId();
76
+ }
77
+ deleteId(index) {
78
+ this._dialogService
79
+ .confirm('Confirmation', 'Delete ID?')
80
+ .pipe(take(1))
81
+ .subscribe((yes) => {
82
+ if (yes) {
83
+ if (this._editedIndex === index) {
84
+ this.closeId();
85
+ }
86
+ const entries = [...this.entries.value];
87
+ entries.splice(index, 1);
88
+ this.entries.setValue(entries);
89
+ this.entries.markAsDirty();
90
+ this.entries.updateValueAndValidity();
91
+ this.emitIdsChange();
92
+ }
93
+ });
94
+ }
95
+ moveIdUp(index) {
96
+ if (index < 1) {
97
+ return;
98
+ }
99
+ const entry = this.entries.value[index];
100
+ const entries = [...this.entries.value];
101
+ entries.splice(index, 1);
102
+ entries.splice(index - 1, 0, entry);
103
+ this.entries.setValue(entries);
104
+ this.entries.markAsDirty();
105
+ this.entries.updateValueAndValidity();
106
+ this.emitIdsChange();
107
+ }
108
+ moveIdDown(index) {
109
+ if (index + 1 >= this.entries.value.length) {
110
+ return;
111
+ }
112
+ const entry = this.entries.value[index];
113
+ const entries = [...this.entries.value];
114
+ entries.splice(index, 1);
115
+ entries.splice(index + 1, 0, entry);
116
+ this.entries.setValue(entries);
117
+ this.entries.markAsDirty();
118
+ this.entries.updateValueAndValidity();
119
+ this.emitIdsChange();
120
+ }
121
+ onIdChange(id) {
122
+ this.saveId(id);
123
+ this.emitIdsChange();
124
+ }
125
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AssertedIdsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
126
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AssertedIdsComponent, selector: "cadmus-refs-asserted-ids", inputs: { ids: "ids", idScopeEntries: "idScopeEntries", idTagEntries: "idTagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries" }, outputs: { idsChange: "idsChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div>\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n </div>\r\n <table *ngIf=\"entries.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let entry of entries.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\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 ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry.value }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header>ID {{edited?.value}}</mat-expansion-panel-header>\r\n <cadmus-refs-asserted-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-id>\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["th{font-weight:400;color:silver;text-align:left}\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.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.AssertedIdComponent, selector: "cadmus-refs-asserted-id", inputs: ["idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "id", "noEidLookup", "hasSubmit"], outputs: ["idChange", "editorClose"] }] }); }
127
+ }
128
+ export { AssertedIdsComponent };
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AssertedIdsComponent, decorators: [{
130
+ type: Component,
131
+ args: [{ selector: 'cadmus-refs-asserted-ids', template: "<form [formGroup]=\"form\">\r\n <div>\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n </div>\r\n <table *ngIf=\"entries.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let entry of entries.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\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 ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry.value }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header>ID {{edited?.value}}</mat-expansion-panel-header>\r\n <cadmus-refs-asserted-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-id>\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["th{font-weight:400;color:silver;text-align:left}\n"] }]
132
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.DialogService }]; }, propDecorators: { ids: [{
133
+ type: Input
134
+ }], idScopeEntries: [{
135
+ type: Input
136
+ }], idTagEntries: [{
137
+ type: Input
138
+ }], assTagEntries: [{
139
+ type: Input
140
+ }], refTypeEntries: [{
141
+ type: Input
142
+ }], refTagEntries: [{
143
+ type: Input
144
+ }], idsChange: [{
145
+ type: Output
146
+ }] } });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0ZWQtaWRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGVkLWlkcy9zcmMvbGliL2Fzc2VydGVkLWlkcy9hc3NlcnRlZC1pZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtaWRzL2Fzc2VydGVkLWlkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3ZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQUk1Qjs7R0FFRztBQUNILE1BS2Esb0JBQW9CO0lBSy9COztPQUVHO0lBQ0gsSUFDVyxHQUFHO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFXLEdBQUcsQ0FBQyxLQUFtQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQStCRCxZQUFZLFdBQXdCLEVBQVUsY0FBNkI7UUFBN0IsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDekUsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDbEQsSUFBSSxDQUFD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LE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxVQUFVLENBQUMsRUFBYztRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDOzhHQTVKVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwrUkNqQmpDLGc5RUFrRkE7O1NEakVhLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLDBCQUEwQjs4SEFhekIsR0FBRztzQkFEYixLQUFLO2dCQWFDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBS0MsWUFBWTtzQkFEbEIsS0FBSztnQkFLQyxhQUFhO3NCQURuQixLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBS0MsYUFBYTtzQkFEbkIsS0FBSztnQkFPQyxTQUFTO3NCQURmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BteXJtaWRvbi9uZy1tYXQtdG9vbHMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBBc3NlcnRlZElkIH0gZnJvbSAnLi4vYXNzZXJ0ZWQtaWQvYXNzZXJ0ZWQtaWQuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBBc3NlcnRlZCBJRHMgZWRpdG9yLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjYWRtdXMtcmVmcy1hc3NlcnRlZC1pZHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NlcnRlZC1pZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2VydGVkLWlkcy5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc3NlcnRlZElkc0NvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfaWRzOiBBc3NlcnRlZElkW107XHJcbiAgcHJpdmF0ZSBfZWRpdGVkSW5kZXg6IG51bWJlcjtcclxuICBwdWJsaWMgZWRpdGVkPzogQXNzZXJ0ZWRJZDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGFzc2VydGVkIElEcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaWRzKCk6IEFzc2VydGVkSWRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faWRzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGlkcyh2YWx1ZTogQXNzZXJ0ZWRJZFtdKSB7XHJcbiAgICBpZiAodGhpcy5faWRzICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9pZHMgPSB2YWx1ZSB8fCBbXTtcclxuICAgICAgdGhpcy51cGRhdGVGb3JtKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFzc2VydGVkLWlkLXNjb3Blc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlkU2NvcGVFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgLy8gYXNzZXJ0ZWQtaWQtdGFnc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlkVGFnRW50cmllcz86IFRoZXNhdXJ1c0VudHJ5W107XHJcblxyXG4gIC8vIGFzc2VydGlvbi10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYXNzVGFnRW50cmllcz86IFRoZXNhdXJ1c0VudHJ5W107XHJcblxyXG4gIC8vIGRvYy1yZWZlcmVuY2UtdHlwZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWZUeXBlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gZG9jLXJlZmVyZW5jZS10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVmVGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuZXZlciBhbnkgSUQgY2hhbmdlcy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgaWRzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXNzZXJ0ZWRJZFtdPjtcclxuXHJcbiAgcHVibGljIGVudHJpZXM6IEZvcm1Db250cm9sPEFzc2VydGVkSWRbXT47XHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLl9pZHMgPSBbXTtcclxuICAgIHRoaXMuX2VkaXRlZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLmlkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXNzZXJ0ZWRJZFtdPigpO1xyXG4gICAgdGhpcy5lbnRyaWVzID0gZm9ybUJ1aWxkZXIuY29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIC8vIGZvcm1cclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgaWRzOiB0aGlzLmVudHJpZXMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShpZHM6IEFzc2VydGVkSWRbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFpZHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGlkcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5lbnRyaWVzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0SWRzQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pZHNDaGFuZ2UuZW1pdCh0aGlzLmVudHJpZXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZElkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0SWQoXHJcbiAgICAgIHtcclxuICAgICAgICBzY29wZTogJycsXHJcbiAgICAgICAgdmFsdWU6ICcnLFxyXG4gICAgICB9LFxyXG4gICAgICAtMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0SWQoaWQ6IEFzc2VydGVkSWQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2VkaXRlZEluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLmVkaXRlZCA9IGlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlSWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9lZGl0ZWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5lZGl0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUlkKGVudHJ5OiBBc3NlcnRlZElkKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbnRyaWVzID0gWy4uLnRoaXMuZW50cmllcy52YWx1ZV07XHJcbiAgICBpZiAodGhpcy5fZWRpdGVkSW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGVudHJpZXMucHVzaChlbnRyeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbnRyaWVzLnNwbGljZSh0aGlzLl9lZGl0ZWRJbmRleCwgMSwgZW50cnkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGVudHJpZXMpO1xyXG4gICAgdGhpcy5lbnRyaWVzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmVudHJpZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jbG9zZUlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlSWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nU2VydmljZVxyXG4gICAgICAuY29uZmlybSgnQ29uZmlybWF0aW9uJywgJ0RlbGV0ZSBJRD8nKVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh5ZXMpID0+IHtcclxuICAgICAgICBpZiAoeWVzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZWRpdGVkSW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VJZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZW50cmllcyA9IFsuLi50aGlzLmVudHJpZXMudmFsdWVdO1xyXG4gICAgICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGVudHJpZXMpO1xyXG4gICAgICAgICAgdGhpcy5lbnRyaWVzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICB0aGlzLmVudHJpZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlSWRVcChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggPCAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLnZhbHVlW2luZGV4XTtcclxuICAgIGNvbnN0IGVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzLnZhbHVlXTtcclxuICAgIGVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIGVudHJpZXMuc3BsaWNlKGluZGV4IC0gMSwgMCwgZW50cnkpO1xyXG4gICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGVudHJpZXMpO1xyXG4gICAgdGhpcy5lbnRyaWVzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmVudHJpZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW92ZUlkRG93bihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggKyAxID49IHRoaXMuZW50cmllcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMudmFsdWVbaW5kZXhdO1xyXG4gICAgY29uc3QgZW50cmllcyA9IFsuLi50aGlzLmVudHJpZXMudmFsdWVdO1xyXG4gICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgZW50cmllcy5zcGxpY2UoaW5kZXggKyAxLCAwLCBlbnRyeSk7XHJcbiAgICB0aGlzLmVudHJpZXMuc2V0VmFsdWUoZW50cmllcyk7XHJcbiAgICB0aGlzLmVudHJpZXMubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMuZW50cmllcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmVtaXRJZHNDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbklkQ2hhbmdlKGlkOiBBc3NlcnRlZElkKTogdm9pZCB7XHJcbiAgICB0aGlzLnNhdmVJZChpZCk7XHJcbiAgICB0aGlzLmVtaXRJZHNDaGFuZ2UoKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPGRpdj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYWRkSWQoKVwiPlxyXG4gICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+IElEXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8dGFibGUgKm5nSWY9XCJlbnRyaWVzLnZhbHVlPy5sZW5ndGhcIj5cclxuICAgIDx0aGVhZD5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgIDx0aD5zY29wZTwvdGg+XHJcbiAgICAgICAgPHRoPnZhbHVlPC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8dGJvZHk+XHJcbiAgICAgIDx0clxyXG4gICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgbGV0IGVudHJ5IG9mIGVudHJpZXMudmFsdWU7XHJcbiAgICAgICAgICBsZXQgaSA9IGluZGV4O1xyXG4gICAgICAgICAgbGV0IGZpcnN0ID0gZmlyc3Q7XHJcbiAgICAgICAgICBsZXQgbGFzdCA9IGxhc3RcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFZGl0IHRoaXMgSURcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdElkKGVudHJ5LCBpKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJNb3ZlIHRoaXMgSUQgdXBcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlyc3RcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibW92ZUlkVXAoaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfdXB3YXJkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJNb3ZlIHRoaXMgSUQgZG93blwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsYXN0XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJZERvd24oaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSB0aGlzIElEXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUlkKGkpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnJlbW92ZV9jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+e3sgZW50cnkuc2NvcGUgfX08L3RkPlxyXG4gICAgICAgIDx0ZD57eyBlbnRyeS52YWx1ZSB9fTwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3Rib2R5PlxyXG4gIDwvdGFibGU+XHJcblxyXG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJlZGl0ZWRcIiBbZGlzYWJsZWRdPVwiIWVkaXRlZFwiPlxyXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPklEIHt7ZWRpdGVkPy52YWx1ZX19PC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgIDxjYWRtdXMtcmVmcy1hc3NlcnRlZC1pZFxyXG4gICAgICBbaWRTY29wZUVudHJpZXNdPVwiaWRTY29wZUVudHJpZXNcIlxyXG4gICAgICBbaWRUYWdFbnRyaWVzXT1cImlkVGFnRW50cmllc1wiXHJcbiAgICAgIFthc3NUYWdFbnRyaWVzXT1cImFzc1RhZ0VudHJpZXNcIlxyXG4gICAgICBbcmVmVHlwZUVudHJpZXNdPVwicmVmVHlwZUVudHJpZXNcIlxyXG4gICAgICBbcmVmVGFnRW50cmllc109XCJyZWZUYWdFbnRyaWVzXCJcclxuICAgICAgW2hhc1N1Ym1pdF09XCJ0cnVlXCJcclxuICAgICAgW2lkXT1cImVkaXRlZFwiXHJcbiAgICAgIChpZENoYW5nZSk9XCJvbklkQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoZWRpdG9yQ2xvc2UpPVwiY2xvc2VJZCgpXCJcclxuICAgID48L2NhZG11cy1yZWZzLWFzc2VydGVkLWlkPlxyXG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuPC9mb3JtPlxyXG4iXX0=
@@ -0,0 +1,92 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { MatExpansionModule } from '@angular/material/expansion';
6
+ import { MatFormFieldModule } from '@angular/material/form-field';
7
+ import { MatIconModule } from '@angular/material/icon';
8
+ import { MatInputModule } from '@angular/material/input';
9
+ import { MatSelectModule } from '@angular/material/select';
10
+ import { CadmusCoreModule } from '@myrmidon/cadmus-core';
11
+ import { CadmusApiModule } from '@myrmidon/cadmus-api';
12
+ import { CadmusRefsAssertionModule } from '@myrmidon/cadmus-refs-assertion';
13
+ import { CadmusRefsDocReferencesModule } from '@myrmidon/cadmus-refs-doc-references';
14
+ import { CadmusRefsLookupModule } from '@myrmidon/cadmus-refs-lookup';
15
+ import { AssertedIdComponent } from './asserted-id/asserted-id.component';
16
+ import { AssertedIdsComponent } from './asserted-ids/asserted-ids.component';
17
+ import { ScopedPinLookupComponent } from './scoped-pin-lookup/scoped-pin-lookup.component';
18
+ import * as i0 from "@angular/core";
19
+ class CadmusRefsAssertedIdsModule {
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: CadmusRefsAssertedIdsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
21
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: CadmusRefsAssertedIdsModule, declarations: [AssertedIdComponent,
22
+ AssertedIdsComponent,
23
+ ScopedPinLookupComponent], imports: [CommonModule,
24
+ FormsModule,
25
+ ReactiveFormsModule,
26
+ // material
27
+ MatButtonModule,
28
+ MatExpansionModule,
29
+ MatFormFieldModule,
30
+ MatIconModule,
31
+ MatInputModule,
32
+ MatSelectModule,
33
+ // Cadmus
34
+ CadmusCoreModule,
35
+ CadmusRefsDocReferencesModule,
36
+ CadmusRefsAssertionModule,
37
+ CadmusRefsLookupModule,
38
+ CadmusApiModule], exports: [AssertedIdComponent,
39
+ AssertedIdsComponent,
40
+ ScopedPinLookupComponent] }); }
41
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: CadmusRefsAssertedIdsModule, imports: [CommonModule,
42
+ FormsModule,
43
+ ReactiveFormsModule,
44
+ // material
45
+ MatButtonModule,
46
+ MatExpansionModule,
47
+ MatFormFieldModule,
48
+ MatIconModule,
49
+ MatInputModule,
50
+ MatSelectModule,
51
+ // Cadmus
52
+ CadmusCoreModule,
53
+ CadmusRefsDocReferencesModule,
54
+ CadmusRefsAssertionModule,
55
+ CadmusRefsLookupModule,
56
+ CadmusApiModule] }); }
57
+ }
58
+ export { CadmusRefsAssertedIdsModule };
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: CadmusRefsAssertedIdsModule, decorators: [{
60
+ type: NgModule,
61
+ args: [{
62
+ declarations: [
63
+ AssertedIdComponent,
64
+ AssertedIdsComponent,
65
+ ScopedPinLookupComponent,
66
+ ],
67
+ imports: [
68
+ CommonModule,
69
+ FormsModule,
70
+ ReactiveFormsModule,
71
+ // material
72
+ MatButtonModule,
73
+ MatExpansionModule,
74
+ MatFormFieldModule,
75
+ MatIconModule,
76
+ MatInputModule,
77
+ MatSelectModule,
78
+ // Cadmus
79
+ CadmusCoreModule,
80
+ CadmusRefsDocReferencesModule,
81
+ CadmusRefsAssertionModule,
82
+ CadmusRefsLookupModule,
83
+ CadmusApiModule,
84
+ ],
85
+ exports: [
86
+ AssertedIdComponent,
87
+ AssertedIdsComponent,
88
+ ScopedPinLookupComponent,
89
+ ],
90
+ }]
91
+ }] });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGVkLWlkcy9zcmMvbGliL2NhZG11cy1yZWZzLWFzc2VydGVkLWlkcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7O0FBRTNGLE1BOEJhLDJCQUEyQjs4R0FBM0IsMkJBQTJCOytHQUEzQiwyQkFBMkIsaUJBNUJwQyxtQkFBbUI7WUFDbkIsb0JBQW9CO1lBQ3BCLHdCQUF3QixhQUd4QixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixXQUFXO1lBQ1gsZUFBZTtZQUNmLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIsYUFBYTtZQUNiLGNBQWM7WUFDZCxlQUFlO1lBQ2YsU0FBUztZQUNULGdCQUFnQjtZQUNoQiw2QkFBNkI7WUFDN0IseUJBQXlCO1lBQ3pCLHNCQUFzQjtZQUN0QixlQUFlLGFBR2YsbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQix3QkFBd0I7K0dBR2YsMkJBQTJCLFlBdkJwQyxZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixXQUFXO1lBQ1gsZUFBZTtZQUNmLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIsYUFBYTtZQUNiLGNBQWM7WUFDZCxlQUFlO1lBQ2YsU0FBUztZQUNULGdCQUFnQjtZQUNoQiw2QkFBNkI7WUFDN0IseUJBQXlCO1lBQ3pCLHNCQUFzQjtZQUN0QixlQUFlOztTQVFOLDJCQUEyQjsyRkFBM0IsMkJBQTJCO2tCQTlCdkMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLHdCQUF3QjtxQkFDekI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLDZCQUE2Qjt3QkFDN0IseUJBQXlCO3dCQUN6QixzQkFBc0I7d0JBQ3RCLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3FCQUN6QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5cbmltcG9ydCB7IENhZG11c0NvcmVNb2R1bGUgfSBmcm9tICdAbXlybWlkb24vY2FkbXVzLWNvcmUnO1xuaW1wb3J0IHsgQ2FkbXVzQXBpTW9kdWxlIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1hcGknO1xuaW1wb3J0IHsgQ2FkbXVzUmVmc0Fzc2VydGlvbk1vZHVsZSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtcmVmcy1hc3NlcnRpb24nO1xuaW1wb3J0IHsgQ2FkbXVzUmVmc0RvY1JlZmVyZW5jZXNNb2R1bGUgfSBmcm9tICdAbXlybWlkb24vY2FkbXVzLXJlZnMtZG9jLXJlZmVyZW5jZXMnO1xuaW1wb3J0IHsgQ2FkbXVzUmVmc0xvb2t1cE1vZHVsZSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtcmVmcy1sb29rdXAnO1xuXG5pbXBvcnQgeyBBc3NlcnRlZElkQ29tcG9uZW50IH0gZnJvbSAnLi9hc3NlcnRlZC1pZC9hc3NlcnRlZC1pZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXNzZXJ0ZWRJZHNDb21wb25lbnQgfSBmcm9tICcuL2Fzc2VydGVkLWlkcy9hc3NlcnRlZC1pZHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNjb3BlZFBpbkxvb2t1cENvbXBvbmVudCB9IGZyb20gJy4vc2NvcGVkLXBpbi1sb29rdXAvc2NvcGVkLXBpbi1sb29rdXAuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQXNzZXJ0ZWRJZENvbXBvbmVudCxcbiAgICBBc3NlcnRlZElkc0NvbXBvbmVudCxcbiAgICBTY29wZWRQaW5Mb29rdXBDb21wb25lbnQsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAvLyBtYXRlcmlhbFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIC8vIENhZG11c1xuICAgIENhZG11c0NvcmVNb2R1bGUsXG4gICAgQ2FkbXVzUmVmc0RvY1JlZmVyZW5jZXNNb2R1bGUsXG4gICAgQ2FkbXVzUmVmc0Fzc2VydGlvbk1vZHVsZSxcbiAgICBDYWRtdXNSZWZzTG9va3VwTW9kdWxlLFxuICAgIENhZG11c0FwaU1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEFzc2VydGVkSWRDb21wb25lbnQsXG4gICAgQXNzZXJ0ZWRJZHNDb21wb25lbnQsXG4gICAgU2NvcGVkUGluTG9va3VwQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYWRtdXNSZWZzQXNzZXJ0ZWRJZHNNb2R1bGUge31cbiJdfQ==