@myrmidon/cadmus-refs-asserted-ids 5.1.6 → 6.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myrmidon/cadmus-refs-asserted-ids",
3
- "version": "5.1.6",
3
+ "version": "6.0.0",
4
4
  "description": "Cadmus - asserted IDs components.",
5
5
  "keywords": [
6
6
  "Cadmus",
@@ -15,10 +15,10 @@
15
15
  "name": "Daniele Fusi"
16
16
  },
17
17
  "peerDependencies": {
18
- "@angular/common": "^18.0.0",
19
- "@angular/core": "^18.0.0",
20
- "@myrmidon/ng-mat-tools": "^3.1.0",
21
- "@myrmidon/cadmus-refs-assertion": "^5.1.0"
18
+ "@angular/common": "^19.0.0",
19
+ "@angular/core": "^19.0.0",
20
+ "@myrmidon/ng-mat-tools": "^4.0.0",
21
+ "@myrmidon/cadmus-refs-assertion": "^5.1.1"
22
22
  },
23
23
  "dependencies": {
24
24
  "tslib": "^2.3.0"
@@ -32,8 +32,6 @@
32
32
  },
33
33
  ".": {
34
34
  "types": "./index.d.ts",
35
- "esm2022": "./esm2022/myrmidon-cadmus-refs-asserted-ids.mjs",
36
- "esm": "./esm2022/myrmidon-cadmus-refs-asserted-ids.mjs",
37
35
  "default": "./fesm2022/myrmidon-cadmus-refs-asserted-ids.mjs"
38
36
  }
39
37
  }
@@ -1,195 +0,0 @@
1
- import { Component, EventEmitter, Inject, Input, Output, } from '@angular/core';
2
- import { FormsModule, ReactiveFormsModule, Validators, } from '@angular/forms';
3
- import { debounceTime } from 'rxjs/operators';
4
- import { MatFormFieldModule } from '@angular/material/form-field';
5
- import { MatInputModule } from '@angular/material/input';
6
- import { MatSelectModule } from '@angular/material/select';
7
- import { MatExpansionModule } from '@angular/material/expansion';
8
- import { MatIconModule } from '@angular/material/icon';
9
- import { MatButtonModule } from '@angular/material/button';
10
- import { AssertionComponent } from '@myrmidon/cadmus-refs-assertion';
11
- import { PinTargetLookupComponent, } from '../pin-target-lookup/pin-target-lookup.component';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/forms";
14
- import * as i2 from "../services/pin-ref-lookup.service";
15
- import * as i3 from "@myrmidon/ng-tools";
16
- import * as i4 from "@angular/material/button";
17
- import * as i5 from "@angular/material/expansion";
18
- import * as i6 from "@angular/material/form-field";
19
- import * as i7 from "@angular/material/icon";
20
- import * as i8 from "@angular/material/input";
21
- import * as i9 from "@angular/material/select";
22
- import * as i10 from "@angular/material/core";
23
- /**
24
- * The key to be used to retrieve the external lookup configs from the
25
- * settings storage. This is equal to the selector of
26
- * AssertedCompositeIdComponent plus ".configs".
27
- */
28
- export const ASSERTED_COMPOSITE_ID_CONFIGS_KEY = 'cadmus-refs-asserted-composite-id.configs';
29
- /**
30
- * An asserted composite ID editor. This allows the user to edit an asserted
31
- * composite ID, which can be an external ID or a lookup ID.
32
- */
33
- export class AssertedCompositeIdComponent {
34
- /**
35
- * The ID being edited.
36
- */
37
- get id() {
38
- return this._id;
39
- }
40
- set id(value) {
41
- if (this._id !== value) {
42
- this._id = value || undefined;
43
- this.updateForm(this._id);
44
- }
45
- }
46
- constructor(formBuilder, lookupService, lookupDefs, settings) {
47
- this.lookupService = lookupService;
48
- this.lookupDefs = lookupDefs;
49
- this.target = formBuilder.control(null, Validators.required);
50
- this.scope = formBuilder.control(null, Validators.maxLength(500));
51
- this.tag = formBuilder.control(null, Validators.maxLength(50));
52
- this.assertion = formBuilder.control(null);
53
- this.form = formBuilder.group({
54
- target: this.target,
55
- scope: this.scope,
56
- tag: this.tag,
57
- assertion: this.assertion,
58
- });
59
- this.targetExpanded = false;
60
- this.extLookupConfigs =
61
- settings.retrieve(ASSERTED_COMPOSITE_ID_CONFIGS_KEY) ||
62
- [];
63
- // events
64
- this.idChange = new EventEmitter();
65
- this.editorClose = new EventEmitter();
66
- this.extMoreRequest = new EventEmitter();
67
- }
68
- ngOnInit() {
69
- this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {
70
- if (!this._updatingForm) {
71
- this.emitIdChange();
72
- }
73
- });
74
- }
75
- onAssertionChange(assertion) {
76
- this.assertion.setValue(assertion || null);
77
- }
78
- onTargetChange(target) {
79
- this.target.setValue(target);
80
- this.target.markAsDirty();
81
- this.target.updateValueAndValidity();
82
- this.targetExpanded = false;
83
- }
84
- updateForm(id) {
85
- this._updatingForm = true;
86
- if (!id) {
87
- this.form.reset();
88
- }
89
- else {
90
- this.target.setValue(id.target);
91
- this.scope.setValue(id.scope || null);
92
- this.tag.setValue(id.tag || null);
93
- this.assertion.setValue(id.assertion || null);
94
- this.form.markAsPristine();
95
- }
96
- this._updatingForm = false;
97
- }
98
- getId() {
99
- const external = !this.target.value?.name;
100
- const target = this.target.value;
101
- return {
102
- target: external
103
- ? {
104
- gid: target?.gid || '',
105
- label: target?.label || target?.gid || '',
106
- }
107
- : target,
108
- scope: this.scope.value?.trim() || '',
109
- tag: this.tag.value?.trim(),
110
- assertion: this.assertion.value || undefined,
111
- };
112
- }
113
- emitIdChange() {
114
- if (!this.hasSubmit) {
115
- this._id = this.getId();
116
- this.idChange.emit(this._id);
117
- }
118
- }
119
- onEditorClose() {
120
- this.targetExpanded = false;
121
- }
122
- onExtMoreRequest(event) {
123
- this.extMoreRequest.emit(event);
124
- }
125
- onExtLookupConfigChange(config) {
126
- if (!this.scope.value ||
127
- this.extLookupConfigs.some((c) => c.name === this.scope.value)) {
128
- this.scope.setValue(config.name || null);
129
- this.scope.markAsDirty();
130
- this.scope.updateValueAndValidity();
131
- }
132
- }
133
- cancel() {
134
- this.editorClose.emit();
135
- }
136
- save() {
137
- if (this.form.valid) {
138
- this._id = this.getId();
139
- this.idChange.emit(this._id);
140
- }
141
- }
142
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AssertedCompositeIdComponent, deps: [{ token: i1.FormBuilder }, { token: i2.PinRefLookupService }, { token: 'indexLookupDefinitions' }, { token: i3.RamStorageService }], target: i0.ɵɵFactoryTarget.Component }); }
143
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: AssertedCompositeIdComponent, isStandalone: true, selector: "cadmus-refs-asserted-composite-id", inputs: { idScopeEntries: "idScopeEntries", idTagEntries: "idTagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries", id: "id", internalDefault: "internalDefault", hasSubmit: "hasSubmit", pinByTypeMode: "pinByTypeMode", canSwitchMode: "canSwitchMode", canEditTarget: "canEditTarget", lookupDefinitions: "lookupDefinitions", defaultPartTypeKey: "defaultPartTypeKey" }, outputs: { idChange: "idChange", editorClose: "editorClose", extMoreRequest: "extMoreRequest" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <div class=\"form-row\">\r\n <!-- tag (bound) -->\r\n @if (idTagEntries?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of idTagEntries; track e) {\r\n <mat-option [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @if (!idTagEntries?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error\r\n >tag too long</mat-error\r\n >\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- scope (bound) -->\r\n @if (idScopeEntries?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n @for (e of idScopeEntries; track e) {\r\n <mat-option [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- scope (free) -->\r\n @if (!idScopeEntries?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n @if (\r\n $any(scope.errors)?.maxLength && (scope.dirty || scope.touched)\r\n ) {\r\n <mat-error\r\n >scope too long</mat-error\r\n >\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- label and GID -->\r\n @if (target.value?.label) {\r\n <div class=\"info\">\r\n <span class=\"label\">label</span>{{ target.value?.label }}\r\n </div>\r\n }\r\n @if (target.value?.gid) {\r\n <div class=\"info\">\r\n <span class=\"label\">GID</span>{{ target.value?.gid }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- target -->\r\n <div class=\"boxed\">\r\n <mat-expansion-panel [(expanded)]=\"targetExpanded\">\r\n <mat-expansion-panel-header>target</mat-expansion-panel-header>\r\n <cadmus-pin-target-lookup\r\n [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [target]=\"target.value\"\r\n [internalDefault]=\"internalDefault\"\r\n [extLookupConfigs]=\"extLookupConfigs\"\r\n (targetChange)=\"onTargetChange($event)\"\r\n (editorClose)=\"onEditorClose()\"\r\n (extMoreRequest)=\"onExtMoreRequest($event)\"\r\n (extLookupConfigChange)=\"onExtLookupConfigChange($event)\"\r\n ></cadmus-pin-target-lookup>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- assertion -->\r\n <br />\r\n <div class=\"boxed\">\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [assertion]=\"assertion.value\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n >\r\n </cadmus-refs-assertion>\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n\r\n <!-- buttons -->\r\n @if (hasSubmit) {\r\n <div>\r\n <button\r\n mat-icon-button\r\n color=\"warn\"\r\n type=\"button\"\r\n (click)=\"cancel()\"\r\n [disabled]=\"!this.target.value?.gid || !this.target.value?.label\"\r\n >\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n color=\"primary\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.boxed{border:1px solid silver;border-radius:6px;padding:6px}.short-text{width:8em}.pin-info{font-size:90%;color:silver}fieldset{border:1px solid silver;border-radius:6px;padding:6px}.info{border:1px solid silver;border-radius:6px;background-color:silver;color:#fff;padding:4px}.info .label{background-color:#fff;color:silver;margin:0 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: "ngmodule", type: FormsModule }, { 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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatFormFieldModule }, { 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: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { 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: "ngmodule", type: MatSelectModule }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion"], outputs: ["assertionChange"] }, { kind: "component", type: PinTargetLookupComponent, selector: "cadmus-pin-target-lookup", inputs: ["pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "extLookupConfigs", "internalDefault", "target", "defaultPartTypeKey"], outputs: ["editorClose", "targetChange", "extMoreRequest", "extLookupConfigChange"] }] }); }
144
- }
145
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AssertedCompositeIdComponent, decorators: [{
146
- type: Component,
147
- args: [{ standalone: true, selector: 'cadmus-refs-asserted-composite-id', imports: [
148
- FormsModule,
149
- ReactiveFormsModule,
150
- MatButtonModule,
151
- MatExpansionModule,
152
- MatFormFieldModule,
153
- MatIconModule,
154
- MatInputModule,
155
- MatSelectModule,
156
- AssertionComponent,
157
- PinTargetLookupComponent,
158
- ], template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <div class=\"form-row\">\r\n <!-- tag (bound) -->\r\n @if (idTagEntries?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of idTagEntries; track e) {\r\n <mat-option [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @if (!idTagEntries?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error\r\n >tag too long</mat-error\r\n >\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- scope (bound) -->\r\n @if (idScopeEntries?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n @for (e of idScopeEntries; track e) {\r\n <mat-option [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- scope (free) -->\r\n @if (!idScopeEntries?.length) {\r\n <mat-form-field class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n @if (\r\n $any(scope.errors)?.maxLength && (scope.dirty || scope.touched)\r\n ) {\r\n <mat-error\r\n >scope too long</mat-error\r\n >\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- label and GID -->\r\n @if (target.value?.label) {\r\n <div class=\"info\">\r\n <span class=\"label\">label</span>{{ target.value?.label }}\r\n </div>\r\n }\r\n @if (target.value?.gid) {\r\n <div class=\"info\">\r\n <span class=\"label\">GID</span>{{ target.value?.gid }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- target -->\r\n <div class=\"boxed\">\r\n <mat-expansion-panel [(expanded)]=\"targetExpanded\">\r\n <mat-expansion-panel-header>target</mat-expansion-panel-header>\r\n <cadmus-pin-target-lookup\r\n [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [target]=\"target.value\"\r\n [internalDefault]=\"internalDefault\"\r\n [extLookupConfigs]=\"extLookupConfigs\"\r\n (targetChange)=\"onTargetChange($event)\"\r\n (editorClose)=\"onEditorClose()\"\r\n (extMoreRequest)=\"onExtMoreRequest($event)\"\r\n (extLookupConfigChange)=\"onExtLookupConfigChange($event)\"\r\n ></cadmus-pin-target-lookup>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- assertion -->\r\n <br />\r\n <div class=\"boxed\">\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [assertion]=\"assertion.value\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n >\r\n </cadmus-refs-assertion>\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n\r\n <!-- buttons -->\r\n @if (hasSubmit) {\r\n <div>\r\n <button\r\n mat-icon-button\r\n color=\"warn\"\r\n type=\"button\"\r\n (click)=\"cancel()\"\r\n [disabled]=\"!this.target.value?.gid || !this.target.value?.label\"\r\n >\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n color=\"primary\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.boxed{border:1px solid silver;border-radius:6px;padding:6px}.short-text{width:8em}.pin-info{font-size:90%;color:silver}fieldset{border:1px solid silver;border-radius:6px;padding:6px}.info{border:1px solid silver;border-radius:6px;background-color:silver;color:#fff;padding:4px}.info .label{background-color:#fff;color:silver;margin:0 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"] }]
159
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.PinRefLookupService }, { type: undefined, decorators: [{
160
- type: Inject,
161
- args: ['indexLookupDefinitions']
162
- }] }, { type: i3.RamStorageService }], propDecorators: { idScopeEntries: [{
163
- type: Input
164
- }], idTagEntries: [{
165
- type: Input
166
- }], assTagEntries: [{
167
- type: Input
168
- }], refTypeEntries: [{
169
- type: Input
170
- }], refTagEntries: [{
171
- type: Input
172
- }], id: [{
173
- type: Input
174
- }], internalDefault: [{
175
- type: Input
176
- }], hasSubmit: [{
177
- type: Input
178
- }], pinByTypeMode: [{
179
- type: Input
180
- }], canSwitchMode: [{
181
- type: Input
182
- }], canEditTarget: [{
183
- type: Input
184
- }], lookupDefinitions: [{
185
- type: Input
186
- }], defaultPartTypeKey: [{
187
- type: Input
188
- }], idChange: [{
189
- type: Output
190
- }], editorClose: [{
191
- type: Output
192
- }], extMoreRequest: [{
193
- type: Output
194
- }] } });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0ZWQtY29tcG9zaXRlLWlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGVkLWlkcy9zcmMvbGliL2Fzc2VydGVkLWNvbXBvc2l0ZS1pZC9hc3NlcnRlZC1jb21wb3NpdGUtaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtY29tcG9zaXRlLWlkL2Fzc2VydGVkLWNvbXBvc2l0ZS1pZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSTNELE9BQU8sRUFBYSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBT2hGLE9BQU8sRUFFTCx3QkFBd0IsR0FDekIsTUFBTSxrREFB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QixNQUFNO2dCQUlBLGNBQWM7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIEZvcm1zTW9kdWxlLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5cclxuaW1wb3J0IHsgUmFtU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAbXlybWlkb24vbmctdG9vbHMnO1xyXG5pbXBvcnQgeyBJbmRleExvb2t1cERlZmluaXRpb25zLCBUaGVzYXVydXNFbnRyeSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtY29yZSc7XHJcbmltcG9ydCB7IEFzc2VydGlvbiwgQXNzZXJ0aW9uQ29tcG9uZW50IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGlvbic7XHJcbmltcG9ydCB7XHJcbiAgUmVmTG9va3VwQ29uZmlnLFxyXG4gIFJlZkxvb2t1cFNldEV2ZW50LFxyXG59IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtcmVmcy1sb29rdXAnO1xyXG5cclxuaW1wb3J0IHsgUGluUmVmTG9va3VwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Bpbi1yZWYtbG9va3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFBpblRhcmdldCxcclxuICBQaW5UYXJnZXRMb29rdXBDb21wb25lbnQsXHJcbn0gZnJvbSAnLi4vcGluLXRhcmdldC1sb29rdXAvcGluLXRhcmdldC1sb29rdXAuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBBbiBhc3NlcnRlZCBjb21wb3NpdGUgSUQuIFRoaXMgY2FuIGJlIGFuIGV4dGVybmFsIElELCBoYXZpbmcgb25seSB0aGUgSUQgdmFsdWVcclxuICogYXMgaXRzIHRhcmdldC5naWQgcHJvcGVydHk7IG9yIGEgbG9va3VwIElELCB3aXRoIGEgcGluLWJhc2VkIHRhcmdldC5cclxuICogSW4gYm90aCBjYXNlcywgd2UgY2FuIGFkZCBhIHRhZywgYSBzY29wZSwgYW5kIGFuIGFzc2VydGlvbi5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXJ0ZWRDb21wb3NpdGVJZCB7XHJcbiAgdGFyZ2V0OiBQaW5UYXJnZXQ7XHJcbiAgdGFnPzogc3RyaW5nO1xyXG4gIHNjb3BlPzogc3RyaW5nO1xyXG4gIGFzc2VydGlvbj86IEFzc2VydGlvbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBrZXkgdG8gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgZXh0ZXJuYWwgbG9va3VwIGNvbmZpZ3MgZnJvbSB0aGVcclxuICogc2V0dGluZ3Mgc3RvcmFnZS4gVGhpcyBpcyBlcXVhbCB0byB0aGUgc2VsZWN0b3Igb2ZcclxuICogQXNzZXJ0ZWRDb21wb3NpdGVJZENvbXBvbmVudCBwbHVzIFwiLmNvbmZpZ3NcIi5cclxuICovXHJcbmV4cG9ydCBjb25zdCBBU1NFUlRFRF9DT01QT1NJVEVfSURfQ09ORklHU19LRVkgPVxyXG4gICdjYWRtdXMtcmVmcy1hc3NlcnRlZC1jb21wb3NpdGUtaWQuY29uZmlncyc7XHJcblxyXG4vKipcclxuICogQW4gYXNzZXJ0ZWQgY29tcG9zaXRlIElEIGVkaXRvci4gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZWRpdCBhbiBhc3NlcnRlZFxyXG4gKiBjb21wb3NpdGUgSUQsIHdoaWNoIGNhbiBiZSBhbiBleHRlcm5hbCBJRCBvciBhIGxvb2t1cCBJRC5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc2VsZWN0b3I6ICdjYWRtdXMtcmVmcy1hc3NlcnRlZC1jb21wb3NpdGUtaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NlcnRlZC1jb21wb3NpdGUtaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2VydGVkLWNvbXBvc2l0ZS1pZC5jb21wb25lbnQuY3NzJ10sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgQXNzZXJ0aW9uQ29tcG9uZW50LFxyXG4gICAgUGluVGFyZ2V0TG9va3VwQ29tcG9uZW50LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc3NlcnRlZENvbXBvc2l0ZUlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIF91cGRhdGluZ0Zvcm06IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfaWQ6IEFzc2VydGVkQ29tcG9zaXRlSWQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBleHRMb29rdXBDb25maWdzOiBSZWZMb29rdXBDb25maWdbXTtcclxuICBwdWJsaWMgdGFyZ2V0RXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgLy8gZm9ybVxyXG4gIHB1YmxpYyB0YXJnZXQ6IEZvcm1Db250cm9sPFBpblRhcmdldCB8IG51bGw+O1xyXG4gIHB1YmxpYyBzY29wZTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIHRhZzogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGFzc2VydGlvbjogRm9ybUNvbnRyb2w8QXNzZXJ0aW9uIHwgbnVsbD47XHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgLy8gYXNzZXJ0ZWQtaWQtc2NvcGVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaWRTY29wZUVudHJpZXM/OiBUaGVzYXVydXNFbnRyeVtdO1xyXG5cclxuICAvLyBhc3NlcnRlZC1pZC10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaWRUYWdFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgLy8gYXNzZXJ0aW9uLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhc3NUYWdFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgLy8gZG9jLXJlZmVyZW5jZS10eXBlc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlZlR5cGVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvLyBkb2MtcmVmZXJlbmNlLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWZUYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgSUQgYmVpbmcgZWRpdGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBpZCgpOiBBc3NlcnRlZENvbXBvc2l0ZUlkIHwgdW5kZWZpbmVkIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgaWQodmFsdWU6IEFzc2VydGVkQ29tcG9zaXRlSWQgfCB1bmRlZmluZWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5faWQgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX2lkID0gdmFsdWUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm0odGhpcy5faWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSBpZiB3aGVuIGEgbmV3IElEIGlzIHNldCBpdCBzaG91bGQgYmUgaW50ZXJuYWwgcmF0aGVyIHRoYW5cclxuICAgKiBleHRlcm5hbCBieSBkZWZhdWx0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGludGVybmFsRGVmYXVsdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSBpZiB0aGUgVUkgaGFzIGEgc3VibWl0IGJ1dHRvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBoYXNTdWJtaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgaW50ZXJuYWwgVUkgcHJlc2VsZWN0ZWQgbW9kZSBzaG91bGQgYmUgYnkgdHlwZSByYXRoZXIgdGhhblxyXG4gICAqIGJ5IGl0ZW0uIFVzZXIgY2FuIGNoYW5nZSBtb2RlIHVubGVzcyBtb2RlU3dpdGNoaW5nIGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHBpbkJ5VHlwZU1vZGU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgdXNlciBjYW4gc3dpdGNoIGJldHdlZW4gYnktdHlwZSBhbmQgYnktaXRlbSBtb2RlIGluXHJcbiAgICogdGhlIGludGVybmFsIFVJLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhblN3aXRjaE1vZGU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgdXNlciBjYW4gZWRpdCB0aGUgdGFyZ2V0J3MgZ2lkL2xhYmVsIGZvciBpbnRlcm5hbCB0YXJnZXRzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhbkVkaXRUYXJnZXQ/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBsb29rdXAgZGVmaW5pdGlvbnMgdG8gYmUgdXNlZCBmb3IgdGhlIGJ5LXR5cGUgbG9va3VwIGluIHRoZSBpbnRlcm5hbCBVSS5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgbG9va3VwIGRlZmluaXRpb25zIHdpbGwgYmUgZ290IHZpYSBpbmplY3Rpb25cclxuICAgKiB3aGVuIGF2YWlsYWJsZTsgaWYgdGhlIGluamVjdGVkIGRlZmluaXRpb25zIGFyZSBlbXB0eSwgdGhlXHJcbiAgICogbG9va3VwIGRlZmluaXRpb25zIHdpbGwgYmUgYnVpbHQgZnJvbSB0aGUgbW9kZWwtdHlwZXMgdGhlc2F1cnVzO1xyXG4gICAqIGlmIHRoaXMgaXMgbm90IGF2YWlsYWJsZSBlaXRoZXIsIHRoZSBieS10eXBlIGxvb2t1cCB3aWxsIGJlXHJcbiAgICogZGlzYWJsZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbG9va3VwRGVmaW5pdGlvbnM/OiBJbmRleExvb2t1cERlZmluaXRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZGVmYXVsdCBwYXJ0IHR5cGUga2V5IHRvIGJlIHVzZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGVmYXVsdFBhcnRUeXBlS2V5Pzogc3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuZXZlciB0aGUgSUQgY2hhbmdlcy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgaWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBc3NlcnRlZENvbXBvc2l0ZUlkPjtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuZXZlciB0aGUgdXNlciByZXF1ZXN0cyB0byBjbG9zZSB0aGUgZWRpdG9yLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBlZGl0b3JDbG9zZTogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBleHRNb3JlUmVxdWVzdDogRXZlbnRFbWl0dGVyPFJlZkxvb2t1cFNldEV2ZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwdWJsaWMgbG9va3VwU2VydmljZTogUGluUmVmTG9va3VwU2VydmljZSxcclxuICAgIEBJbmplY3QoJ2luZGV4TG9va3VwRGVmaW5pdGlvbnMnKVxyXG4gICAgcHVibGljIGxvb2t1cERlZnM6IEluZGV4TG9va3VwRGVmaW5pdGlvbnMsXHJcbiAgICBzZXR0aW5nczogUmFtU3RvcmFnZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMudGFyZ2V0ID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIHRoaXMuc2NvcGUgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwMCkpO1xyXG4gICAgdGhpcy50YWcgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSk7XHJcbiAgICB0aGlzLmFzc2VydGlvbiA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCk7XHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHRhcmdldDogdGhpcy50YXJnZXQsXHJcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICB0YWc6IHRoaXMudGFnLFxyXG4gICAgICBhc3NlcnRpb246IHRoaXMuYXNzZXJ0aW9uLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRhcmdldEV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmV4dExvb2t1cENvbmZpZ3MgPVxyXG4gICAgICBzZXR0aW5ncy5yZXRyaWV2ZTxSZWZMb29rdXBDb25maWdbXT4oQVNTRVJURURfQ09NUE9TSVRFX0lEX0NPTkZJR1NfS0VZKSB8fFxyXG4gICAgICBbXTtcclxuICAgIC8vIGV2ZW50c1xyXG4gICAgdGhpcy5pZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXNzZXJ0ZWRDb21wb3NpdGVJZD4oKTtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIHRoaXMuZXh0TW9yZVJlcXVlc3QgPSBuZXcgRXZlbnRFbWl0dGVyPFJlZkxvb2t1cFNldEV2ZW50PigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuX3VwZGF0aW5nRm9ybSkge1xyXG4gICAgICAgIHRoaXMuZW1pdElkQ2hhbmdlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQXNzZXJ0aW9uQ2hhbmdlKGFzc2VydGlvbjogQXNzZXJ0aW9uIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICB0aGlzLmFzc2VydGlvbi5zZXRWYWx1ZShhc3NlcnRpb24gfHwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25UYXJnZXRDaGFuZ2UodGFyZ2V0OiBQaW5UYXJnZXQpOiB2b2lkIHtcclxuICAgIHRoaXMudGFyZ2V0LnNldFZhbHVlKHRhcmdldCk7XHJcbiAgICB0aGlzLnRhcmdldC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgdGhpcy50YXJnZXQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy50YXJnZXRFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtKGlkOiBBc3NlcnRlZENvbXBvc2l0ZUlkIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICB0aGlzLl91cGRhdGluZ0Zvcm0gPSB0cnVlO1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFyZ2V0LnNldFZhbHVlKGlkLnRhcmdldCk7XHJcbiAgICAgIHRoaXMuc2NvcGUuc2V0VmFsdWUoaWQuc2NvcGUgfHwgbnVsbCk7XHJcbiAgICAgIHRoaXMudGFnLnNldFZhbHVlKGlkLnRhZyB8fCBudWxsKTtcclxuICAgICAgdGhpcy5hc3NlcnRpb24uc2V0VmFsdWUoaWQuYXNzZXJ0aW9uIHx8IG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0aW5nRm9ybSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJZCgpOiBBc3NlcnRlZENvbXBvc2l0ZUlkIHtcclxuICAgIGNvbnN0IGV4dGVybmFsID0gIXRoaXMudGFyZ2V0LnZhbHVlPy5uYW1lO1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXQudmFsdWU7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YXJnZXQ6IGV4dGVybmFsXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGdpZDogdGFyZ2V0Py5naWQgfHwgJycsXHJcbiAgICAgICAgICAgIGxhYmVsOiB0YXJnZXQ/LmxhYmVsIHx8IHRhcmdldD8uZ2lkIHx8ICcnLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDogdGFyZ2V0ISxcclxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGUudmFsdWU/LnRyaW0oKSB8fCAnJyxcclxuICAgICAgdGFnOiB0aGlzLnRhZy52YWx1ZT8udHJpbSgpLFxyXG4gICAgICBhc3NlcnRpb246IHRoaXMuYXNzZXJ0aW9uLnZhbHVlIHx8IHVuZGVmaW5lZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW1pdElkQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc1N1Ym1pdCkge1xyXG4gICAgICB0aGlzLl9pZCA9IHRoaXMuZ2V0SWQoKTtcclxuICAgICAgdGhpcy5pZENoYW5nZS5lbWl0KHRoaXMuX2lkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkVkaXRvckNsb3NlKCk6IHZvaWQge1xyXG4gICAgdGhpcy50YXJnZXRFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRXh0TW9yZVJlcXVlc3QoZXZlbnQ6IFJlZkxvb2t1cFNldEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmV4dE1vcmVSZXF1ZXN0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRXh0TG9va3VwQ29uZmlnQ2hhbmdlKGNvbmZpZzogUmVmTG9va3VwQ29uZmlnKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnNjb3BlLnZhbHVlIHx8XHJcbiAgICAgIHRoaXMuZXh0TG9va3VwQ29uZmlncy5zb21lKChjKSA9PiBjLm5hbWUgPT09IHRoaXMuc2NvcGUudmFsdWUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zY29wZS5zZXRWYWx1ZShjb25maWcubmFtZSB8fCBudWxsKTtcclxuICAgICAgdGhpcy5zY29wZS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICB0aGlzLnNjb3BlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRvckNsb3NlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xyXG4gICAgICB0aGlzLl9pZCA9IHRoaXMuZ2V0SWQoKTtcclxuICAgICAgdGhpcy5pZENoYW5nZS5lbWl0KHRoaXMuX2lkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKHN1Ym1pdCk9XCJzYXZlKClcIj5cclxuICA8ZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgIDwhLS0gdGFnIChib3VuZCkgLS0+XHJcbiAgICAgIEBpZiAoaWRUYWdFbnRyaWVzPy5sZW5ndGgpIHtcclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJzaG9ydC10ZXh0XCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnRhZzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInRhZ1wiPlxyXG4gICAgICAgICAgICBAZm9yIChlIG9mIGlkVGFnRW50cmllczsgdHJhY2sgZSkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJlLmlkXCI+e3tcclxuICAgICAgICAgICAgICAgIGUudmFsdWVcclxuICAgICAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIH1cclxuICAgICAgPCEtLSB0YWcgKGZyZWUpIC0tPlxyXG4gICAgICBAaWYgKCFpZFRhZ0VudHJpZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInNob3J0LXRleHRcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+dGFnPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInRhZ1wiIC8+XHJcbiAgICAgICAgICBAaWYgKCRhbnkodGFnLmVycm9ycyk/Lm1heExlbmd0aCAmJiAodGFnLmRpcnR5IHx8IHRhZy50b3VjaGVkKSkge1xyXG4gICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgPnRhZyB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPCEtLSBzY29wZSAoYm91bmQpIC0tPlxyXG4gICAgICAgIEBpZiAoaWRTY29wZUVudHJpZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwic2hvcnQtdGV4dFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnNjb3BlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJzY29wZVwiPlxyXG4gICAgICAgICAgICAgIEBmb3IgKGUgb2YgaWRTY29wZUVudHJpZXM7IHRyYWNrIGUpIHtcclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJlLmlkXCI+e3tcclxuICAgICAgICAgICAgICAgICAgZS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8IS0tIHNjb3BlIChmcmVlKSAtLT5cclxuICAgICAgICBAaWYgKCFpZFNjb3BlRW50cmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJzaG9ydC10ZXh0XCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+c2NvcGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJzY29wZVwiIC8+XHJcbiAgICAgICAgICAgIEBpZiAoXHJcbiAgICAgICAgICAgICAgJGFueShzY29wZS5lcnJvcnMpPy5tYXhMZW5ndGggJiYgKHNjb3BlLmRpcnR5IHx8IHNjb3BlLnRvdWNoZWQpXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgPnNjb3BlIHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgPCEtLSBsYWJlbCBhbmQgR0lEIC0tPlxyXG4gICAgICAgICAgQGlmICh0YXJnZXQudmFsdWU/LmxhYmVsKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPmxhYmVsPC9zcGFuPnt7IHRhcmdldC52YWx1ZT8ubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAaWYgKHRhcmdldC52YWx1ZT8uZ2lkKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkdJRDwvc3Bhbj57eyB0YXJnZXQudmFsdWU/LmdpZCB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSB0YXJnZXQgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJveGVkXCI+XHJcbiAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbKGV4cGFuZGVkKV09XCJ0YXJnZXRFeHBhbmRlZFwiPlxyXG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+dGFyZ2V0PC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgPGNhZG11cy1waW4tdGFyZ2V0LWxvb2t1cFxyXG4gICAgICAgICAgICAgIFtwaW5CeVR5cGVNb2RlXT1cInBpbkJ5VHlwZU1vZGVcIlxyXG4gICAgICAgICAgICAgIFtjYW5Td2l0Y2hNb2RlXT1cImNhblN3aXRjaE1vZGVcIlxyXG4gICAgICAgICAgICAgIFtjYW5FZGl0VGFyZ2V0XT1cImNhbkVkaXRUYXJnZXRcIlxyXG4gICAgICAgICAgICAgIFtsb29rdXBEZWZpbml0aW9uc109XCJsb29rdXBEZWZpbml0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW2RlZmF1bHRQYXJ0VHlwZUtleV09XCJkZWZhdWx0UGFydFR5cGVLZXlcIlxyXG4gICAgICAgICAgICAgIFt0YXJnZXRdPVwidGFyZ2V0LnZhbHVlXCJcclxuICAgICAgICAgICAgICBbaW50ZXJuYWxEZWZhdWx0XT1cImludGVybmFsRGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgW2V4dExvb2t1cENvbmZpZ3NdPVwiZXh0TG9va3VwQ29uZmlnc1wiXHJcbiAgICAgICAgICAgICAgKHRhcmdldENoYW5nZSk9XCJvblRhcmdldENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAoZWRpdG9yQ2xvc2UpPVwib25FZGl0b3JDbG9zZSgpXCJcclxuICAgICAgICAgICAgICAoZXh0TW9yZVJlcXVlc3QpPVwib25FeHRNb3JlUmVxdWVzdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAoZXh0TG9va3VwQ29uZmlnQ2hhbmdlKT1cIm9uRXh0TG9va3VwQ29uZmlnQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9jYWRtdXMtcGluLXRhcmdldC1sb29rdXA+XHJcbiAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gYXNzZXJ0aW9uIC0tPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3hlZFwiPlxyXG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5hc3NlcnRpb248L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICA8Y2FkbXVzLXJlZnMtYXNzZXJ0aW9uXHJcbiAgICAgICAgICAgICAgW2Fzc1RhZ0VudHJpZXNdPVwiYXNzVGFnRW50cmllc1wiXHJcbiAgICAgICAgICAgICAgW3JlZlR5cGVFbnRyaWVzXT1cInJlZlR5cGVFbnRyaWVzXCJcclxuICAgICAgICAgICAgICBbcmVmVGFnRW50cmllc109XCJyZWZUYWdFbnRyaWVzXCJcclxuICAgICAgICAgICAgICBbYXNzZXJ0aW9uXT1cImFzc2VydGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgKGFzc2VydGlvbkNoYW5nZSk9XCJvbkFzc2VydGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvY2FkbXVzLXJlZnMtYXNzZXJ0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gYnV0dG9ucyAtLT5cclxuICAgICAgQGlmIChoYXNTdWJtaXQpIHtcclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdGhpcy50YXJnZXQudmFsdWU/LmdpZCB8fCAhdGhpcy50YXJnZXQudmFsdWU/LmxhYmVsXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtd2FyblwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1wcmltYXJ5XCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Zvcm0+XHJcbiJdfQ==
@@ -1,173 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { FormsModule, ReactiveFormsModule, } from '@angular/forms';
3
- import { take } from 'rxjs';
4
- import { MatIconModule } from '@angular/material/icon';
5
- import { MatButtonModule } from '@angular/material/button';
6
- import { MatCheckboxModule } from '@angular/material/checkbox';
7
- import { MatExpansionModule } from '@angular/material/expansion';
8
- import { MatFormFieldModule } from '@angular/material/form-field';
9
- import { MatInputModule } from '@angular/material/input';
10
- import { AssertedCompositeIdComponent, } from '../asserted-composite-id/asserted-composite-id.component';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/forms";
13
- import * as i2 from "@myrmidon/ng-mat-tools";
14
- import * as i3 from "@angular/material/button";
15
- import * as i4 from "@angular/material/expansion";
16
- import * as i5 from "@angular/material/icon";
17
- /**
18
- * Asserted IDs editor.
19
- */
20
- export class AssertedCompositeIdsComponent {
21
- /**
22
- * The asserted IDs.
23
- */
24
- get ids() {
25
- return this._ids;
26
- }
27
- set ids(value) {
28
- if (this._ids !== value) {
29
- this._ids = value || [];
30
- this.updateForm(value);
31
- }
32
- }
33
- constructor(formBuilder, _dialogService) {
34
- this._dialogService = _dialogService;
35
- this._ids = [];
36
- this._editedIndex = -1;
37
- this.idsChange = new EventEmitter();
38
- this.entries = formBuilder.control([], { nonNullable: true });
39
- // form
40
- this.form = formBuilder.group({
41
- ids: this.entries,
42
- });
43
- }
44
- updateForm(ids) {
45
- if (!ids?.length) {
46
- this.form.reset();
47
- return;
48
- }
49
- this.entries.setValue(ids, { emitEvent: false });
50
- this.entries.updateValueAndValidity();
51
- this.form.markAsPristine();
52
- }
53
- emitIdsChange() {
54
- this.idsChange.emit(this.entries.value);
55
- }
56
- addId() {
57
- this.editId({
58
- target: { gid: '', label: '' },
59
- }, -1);
60
- }
61
- editId(id, index) {
62
- this._editedIndex = index;
63
- this.edited = id;
64
- }
65
- closeId() {
66
- this._editedIndex = -1;
67
- this.edited = undefined;
68
- }
69
- saveId(entry) {
70
- const entries = [...this.entries.value];
71
- if (this._editedIndex === -1) {
72
- entries.push(entry);
73
- }
74
- else {
75
- entries.splice(this._editedIndex, 1, entry);
76
- }
77
- this.entries.setValue(entries);
78
- this.entries.markAsDirty();
79
- this.entries.updateValueAndValidity();
80
- this.closeId();
81
- }
82
- deleteId(index) {
83
- this._dialogService
84
- .confirm('Confirmation', 'Delete ID?')
85
- .pipe(take(1))
86
- .subscribe((yes) => {
87
- if (yes) {
88
- if (this._editedIndex === index) {
89
- this.closeId();
90
- }
91
- const entries = [...this.entries.value];
92
- entries.splice(index, 1);
93
- this.entries.setValue(entries);
94
- this.entries.markAsDirty();
95
- this.entries.updateValueAndValidity();
96
- this.emitIdsChange();
97
- }
98
- });
99
- }
100
- moveIdUp(index) {
101
- if (index < 1) {
102
- return;
103
- }
104
- const entry = this.entries.value[index];
105
- const entries = [...this.entries.value];
106
- entries.splice(index, 1);
107
- entries.splice(index - 1, 0, entry);
108
- this.entries.setValue(entries);
109
- this.entries.markAsDirty();
110
- this.entries.updateValueAndValidity();
111
- this.emitIdsChange();
112
- }
113
- moveIdDown(index) {
114
- if (index + 1 >= this.entries.value.length) {
115
- return;
116
- }
117
- const entry = this.entries.value[index];
118
- const entries = [...this.entries.value];
119
- entries.splice(index, 1);
120
- entries.splice(index + 1, 0, entry);
121
- this.entries.setValue(entries);
122
- this.entries.markAsDirty();
123
- this.entries.updateValueAndValidity();
124
- this.emitIdsChange();
125
- }
126
- onIdChange(id) {
127
- this.saveId(id);
128
- this.emitIdsChange();
129
- }
130
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AssertedCompositeIdsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
131
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: AssertedCompositeIdsComponent, isStandalone: true, selector: "cadmus-refs-asserted-composite-ids", inputs: { ids: "ids", idScopeEntries: "idScopeEntries", idTagEntries: "idTagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries", pinByTypeMode: "pinByTypeMode", canSwitchMode: "canSwitchMode", canEditTarget: "canEditTarget", lookupDefinitions: "lookupDefinitions", defaultPartTypeKey: "defaultPartTypeKey", internalDefault: "internalDefault" }, outputs: { idsChange: "idsChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n class=\"mat-primary\"\r\n mat-flat-button\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>value</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n 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 class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-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 [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [internalDefault]=\"internalDefault\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-composite-id>\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["th{font-weight:400;color:silver;text-align:left}td{padding-right:4px}td.fit-width{width:1px;white-space:nowrap;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "component", type: AssertedCompositeIdComponent, selector: "cadmus-refs-asserted-composite-id", inputs: ["idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "id", "internalDefault", "hasSubmit", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idChange", "editorClose", "extMoreRequest"] }] }); }
132
- }
133
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AssertedCompositeIdsComponent, decorators: [{
134
- type: Component,
135
- args: [{ standalone: true, selector: 'cadmus-refs-asserted-composite-ids', imports: [
136
- FormsModule,
137
- ReactiveFormsModule,
138
- MatButtonModule,
139
- MatCheckboxModule,
140
- MatExpansionModule,
141
- MatFormFieldModule,
142
- MatIconModule,
143
- MatInputModule,
144
- AssertedCompositeIdComponent
145
- ], template: "<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n class=\"mat-primary\"\r\n mat-flat-button\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>value</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n 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 class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-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 [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [internalDefault]=\"internalDefault\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-composite-id>\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["th{font-weight:400;color:silver;text-align:left}td{padding-right:4px}td.fit-width{width:1px;white-space:nowrap;padding:0}\n"] }]
146
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.DialogService }], propDecorators: { ids: [{
147
- type: Input
148
- }], idScopeEntries: [{
149
- type: Input
150
- }], idTagEntries: [{
151
- type: Input
152
- }], assTagEntries: [{
153
- type: Input
154
- }], refTypeEntries: [{
155
- type: Input
156
- }], refTagEntries: [{
157
- type: Input
158
- }], pinByTypeMode: [{
159
- type: Input
160
- }], canSwitchMode: [{
161
- type: Input
162
- }], canEditTarget: [{
163
- type: Input
164
- }], lookupDefinitions: [{
165
- type: Input
166
- }], defaultPartTypeKey: [{
167
- type: Input
168
- }], internalDefault: [{
169
- type: Input
170
- }], idsChange: [{
171
- type: Output
172
- }] } });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0ZWQtY29tcG9zaXRlLWlkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJtaWRvbi9jYWRtdXMtcmVmcy1hc3NlcnRlZC1pZHMvc3JjL2xpYi9hc3NlcnRlZC1jb21wb3NpdGUtaWRzL2Fzc2VydGVkLWNvbXBvc2l0ZS1pZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtY29tcG9zaXRlLWlkcy9hc3NlcnRlZC1jb21wb3NpdGUtaWRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUlMLFdBQVcsRUFDWCxtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS3pELE9BQU8sRUFFTCw0QkFBNEIsR0FDN0IsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7OztBQUVsRTs7R0FFRztBQWtCSCxNQUFNLE9BQU8sNkJBQTZCO0lBS3hDOztPQUVH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QzlDMUMsb2pHQW1HQSxvTERoRUksV0FBVyxtU0FDWCxtQkFBbUIsK0tBQ25CLGVBQWUsd1VBQ2YsaUJBQWlCLDhCQUNqQixrQkFBa0Isb1lBQ2xCLGtCQUFrQiw4QkFDbEIsYUFBYSxtTEFDYixjQUFjLCtCQUNkLDRCQUE0Qjs7MkZBR25CLDZCQUE2QjtrQkFqQnpDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLG9DQUFvQyxXQUdyQzt3QkFDUCxXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsNEJBQTRCO3FCQUMvQjs0R0FXWSxHQUFHO3NCQURiLEtBQUs7Z0JBYUMsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxZQUFZO3NCQURsQixLQUFLO2dCQUtDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxhQUFhO3NCQURuQixLQUFLO2dCQVFDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBT0MsYUFBYTtzQkFEbkIsS0FBSztnQkFNQyxhQUFhO3NCQURuQixLQUFLO2dCQVdDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFPQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBUUMsZUFBZTtzQkFEckIsS0FBSztnQkFPQyxTQUFTO3NCQURmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgRm9ybXNNb2R1bGUsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuXHJcbmltcG9ydCB7IEluZGV4TG9va3VwRGVmaW5pdGlvbnMsIFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BteXJtaWRvbi9uZy1tYXQtdG9vbHMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBc3NlcnRlZENvbXBvc2l0ZUlkLFxyXG4gIEFzc2VydGVkQ29tcG9zaXRlSWRDb21wb25lbnQsXHJcbn0gZnJvbSAnLi4vYXNzZXJ0ZWQtY29tcG9zaXRlLWlkL2Fzc2VydGVkLWNvbXBvc2l0ZS1pZC5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEFzc2VydGVkIElEcyBlZGl0b3IuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHNlbGVjdG9yOiAnY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtY29tcG9zaXRlLWlkcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2VydGVkLWNvbXBvc2l0ZS1pZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2VydGVkLWNvbXBvc2l0ZS1pZHMuY29tcG9uZW50LmNzcyddLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgQXNzZXJ0ZWRDb21wb3NpdGVJZENvbXBvbmVudFxyXG5dLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNzZXJ0ZWRDb21wb3NpdGVJZHNDb21wb25lbnQge1xyXG4gIHByaXZhdGUgX2lkczogQXNzZXJ0ZWRDb21wb3NpdGVJZFtdO1xyXG4gIHByaXZhdGUgX2VkaXRlZEluZGV4OiBudW1iZXI7XHJcbiAgcHVibGljIGVkaXRlZD86IEFzc2VydGVkQ29tcG9zaXRlSWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBhc3NlcnRlZCBJRHMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGlkcygpOiBBc3NlcnRlZENvbXBvc2l0ZUlkW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkcztcclxuICB9XHJcbiAgcHVibGljIHNldCBpZHModmFsdWU6IEFzc2VydGVkQ29tcG9zaXRlSWRbXSkge1xyXG4gICAgaWYgKHRoaXMuX2lkcyAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5faWRzID0gdmFsdWUgfHwgW107XHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhc3NlcnRlZC1pZC1zY29wZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpZFNjb3BlRW50cmllcz86IFRoZXNhdXJ1c0VudHJ5W107XHJcblxyXG4gIC8vIGFzc2VydGVkLWlkLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpZFRhZ0VudHJpZXM/OiBUaGVzYXVydXNFbnRyeVtdO1xyXG5cclxuICAvLyBhc3NlcnRpb24tdGFnc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFzc1RhZ0VudHJpZXM/OiBUaGVzYXVydXNFbnRyeVtdO1xyXG5cclxuICAvLyBkb2MtcmVmZXJlbmNlLXR5cGVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVmVHlwZUVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vIGRvYy1yZWZlcmVuY2UtdGFnc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlZlRhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgaW50ZXJuYWwgVUkgcHJlc2VsZWN0ZWQgbW9kZSBzaG91bGQgYmUgYnkgdHlwZSByYXRoZXIgdGhhblxyXG4gICAqIGJ5IGl0ZW0uIFVzZXIgY2FuIGNoYW5nZSBtb2RlIHVubGVzcyBtb2RlU3dpdGNoaW5nIGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHBpbkJ5VHlwZU1vZGU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgdXNlciBjYW4gc3dpdGNoIGJldHdlZW4gYnktdHlwZSBhbmQgYnktaXRlbSBtb2RlIGluXHJcbiAgICogdGhlIGludGVybmFsIFVJLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhblN3aXRjaE1vZGU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgdXNlciBjYW4gZWRpdCB0aGUgdGFyZ2V0J3MgZ2lkL2xhYmVsIGZvciBpbnRlcm5hbCB0YXJnZXRzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhbkVkaXRUYXJnZXQ/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBsb29rdXAgZGVmaW5pdGlvbnMgdG8gYmUgdXNlZCBmb3IgdGhlIGJ5LXR5cGUgbG9va3VwIGluIHRoZSBpbnRlcm5hbCBVSS5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgbG9va3VwIGRlZmluaXRpb25zIHdpbGwgYmUgZ290IHZpYSBpbmplY3Rpb25cclxuICAgKiB3aGVuIGF2YWlsYWJsZTsgaWYgdGhlIGluamVjdGVkIGRlZmluaXRpb25zIGFyZSBlbXB0eSwgdGhlXHJcbiAgICogbG9va3VwIGRlZmluaXRpb25zIHdpbGwgYmUgYnVpbHQgZnJvbSB0aGUgbW9kZWwtdHlwZXMgdGhlc2F1cnVzO1xyXG4gICAqIGlmIHRoaXMgaXMgbm90IGF2YWlsYWJsZSBlaXRoZXIsIHRoZSBieS10eXBlIGxvb2t1cCB3aWxsIGJlXHJcbiAgICogZGlzYWJsZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbG9va3VwRGVmaW5pdGlvbnM/OiBJbmRleExvb2t1cERlZmluaXRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZGVmYXVsdCBwYXJ0IHR5cGUga2V5LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlZmF1bHRQYXJ0VHlwZUtleT86IHN0cmluZyB8IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgaWYgd2hlbiBhIG5ldyBJRCBpcyBzZXQgaXQgc2hvdWxkIGJlIGludGVybmFsIHJhdGhlciB0aGFuXHJcbiAgICogZXh0ZXJuYWwgYnkgZGVmYXVsdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpbnRlcm5hbERlZmF1bHQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbmV2ZXIgYW55IElEIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGlkc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFzc2VydGVkQ29tcG9zaXRlSWRbXT47XHJcblxyXG4gIHB1YmxpYyBlbnRyaWVzOiBGb3JtQ29udHJvbDxBc3NlcnRlZENvbXBvc2l0ZUlkW10+O1xyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgdGhpcy5faWRzID0gW107XHJcbiAgICB0aGlzLl9lZGl0ZWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5pZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFzc2VydGVkQ29tcG9zaXRlSWRbXT4oKTtcclxuICAgIHRoaXMuZW50cmllcyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICAvLyBmb3JtXHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIGlkczogdGhpcy5lbnRyaWVzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm0oaWRzOiBBc3NlcnRlZENvbXBvc2l0ZUlkW10pOiB2b2lkIHtcclxuICAgIGlmICghaWRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZW50cmllcy5zZXRWYWx1ZShpZHMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuZW50cmllcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdElkc0NoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaWRzQ2hhbmdlLmVtaXQodGhpcy5lbnRyaWVzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRJZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdElkKFxyXG4gICAgICB7XHJcbiAgICAgICAgdGFyZ2V0OiB7IGdpZDogJycsIGxhYmVsOiAnJyB9LFxyXG4gICAgICB9LFxyXG4gICAgICAtMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0SWQoaWQ6IEFzc2VydGVkQ29tcG9zaXRlSWQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2VkaXRlZEluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLmVkaXRlZCA9IGlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlSWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9lZGl0ZWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5lZGl0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUlkKGVudHJ5OiBBc3NlcnRlZENvbXBvc2l0ZUlkKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbnRyaWVzID0gWy4uLnRoaXMuZW50cmllcy52YWx1ZV07XHJcbiAgICBpZiAodGhpcy5fZWRpdGVkSW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGVudHJpZXMucHVzaChlbnRyeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbnRyaWVzLnNwbGljZSh0aGlzLl9lZGl0ZWRJbmRleCwgMSwgZW50cnkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGVudHJpZXMpO1xyXG4gICAgdGhpcy5lbnRyaWVzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmVudHJpZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jbG9zZUlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlSWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nU2VydmljZVxyXG4gICAgICAuY29uZmlybSgnQ29uZmlybWF0aW9uJywgJ0RlbGV0ZSBJRD8nKVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh5ZXMpID0+IHtcclxuICAgICAgICBpZiAoeWVzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZWRpdGVkSW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VJZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZW50cmllcyA9IFsuLi50aGlzLmVudHJpZXMudmFsdWVdO1xyXG4gICAgICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGVudHJpZXMpO1xyXG4gICAgICAgICAgdGhpcy5lbnRyaWVzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICB0aGlzLmVudHJpZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlSWRVcChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggPCAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLnZhbHVlW2luZGV4XTtcclxuICAgIGNvbnN0IGVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzLnZhbHVlXTtcclxuICAgIGVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIGVudHJpZXMuc3BsaWNlKGluZGV4IC0gMSwgMCwgZW50cnkpO1xyXG4gICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGVudHJpZXMpO1xyXG4gICAgdGhpcy5lbnRyaWVzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmVudHJpZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW92ZUlkRG93bihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggKyAxID49IHRoaXMuZW50cmllcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMudmFsdWVbaW5kZXhdO1xyXG4gICAgY29uc3QgZW50cmllcyA9IFsuLi50aGlzLmVudHJpZXMudmFsdWVdO1xyXG4gICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgZW50cmllcy5zcGxpY2UoaW5kZXggKyAxLCAwLCBlbnRyeSk7XHJcbiAgICB0aGlzLmVudHJpZXMuc2V0VmFsdWUoZW50cmllcyk7XHJcbiAgICB0aGlzLmVudHJpZXMubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMuZW50cmllcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmVtaXRJZHNDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbklkQ2hhbmdlKGlkOiBBc3NlcnRlZENvbXBvc2l0ZUlkKTogdm9pZCB7XHJcbiAgICB0aGlzLnNhdmVJZChpZCk7XHJcbiAgICB0aGlzLmVtaXRJZHNDaGFuZ2UoKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPCEtLSBidXR0b25zIC0tPlxyXG4gIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgIGNsYXNzPVwibWF0LXByaW1hcnlcIlxyXG4gICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAoY2xpY2spPVwiYWRkSWQoKVwiXHJcbiAgPlxyXG4gICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPiBJRFxyXG4gIDwvYnV0dG9uPlxyXG4gIDwhLS0gbGlzdCAtLT5cclxuICBAaWYgKGVudHJpZXMudmFsdWUubGVuZ3RoKSB7XHJcbiAgPHRhYmxlPlxyXG4gICAgPHRoZWFkPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgPHRoPnNjb3BlPC90aD5cclxuICAgICAgICA8dGg+bGFiZWw8L3RoPlxyXG4gICAgICAgIDx0aD52YWx1ZTwvdGg+XHJcbiAgICAgICAgPHRoPmFzcy48L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keT5cclxuICAgICAgQGZvciAoIGVudHJ5IG9mIGVudHJpZXMudmFsdWU7IHRyYWNrIGVudHJ5OyBsZXQgaSA9ICRpbmRleDsgbGV0IGZpcnN0ID1cclxuICAgICAgJGZpcnN0OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGQgY2xhc3M9XCJmaXQtd2lkdGhcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCB0aGlzIElEXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRJZChlbnRyeSwgaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtcHJpbWFyeVwiPmVkaXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk1vdmUgdGhpcyBJRCB1cFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaXJzdFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSWRVcChpKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk1vdmUgdGhpcyBJRCBkb3duXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxhc3RcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibW92ZUlkRG93bihpKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIHRoaXMgSURcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlSWQoaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtd2FyblwiPnJlbW92ZV9jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+e3sgZW50cnkuc2NvcGUgfX08L3RkPlxyXG4gICAgICAgIDx0ZD57eyBlbnRyeT8udGFyZ2V0Py5sYWJlbCB9fTwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IGVudHJ5Py50YXJnZXQ/LmdpZCB9fTwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IGVudHJ5Py5hc3NlcnRpb24gPyBcIllcIiA6IFwiTlwiIH19PC90ZD5cclxuICAgICAgPC90cj5cclxuICAgICAgfVxyXG4gICAgPC90Ym9keT5cclxuICA8L3RhYmxlPlxyXG4gIH1cclxuXHJcbiAgPCEtLSBlZGl0b3IgLS0+XHJcbiAgPG1hdC1leHBhbnNpb24tcGFuZWwgW2V4cGFuZGVkXT1cImVkaXRlZFwiIFtkaXNhYmxlZF09XCIhZWRpdGVkXCI+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcclxuICAgICAgPklEIHt7IGVkaXRlZD8udGFyZ2V0Py5sYWJlbCB9fTwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcclxuICAgID5cclxuICAgIDxjYWRtdXMtcmVmcy1hc3NlcnRlZC1jb21wb3NpdGUtaWRcclxuICAgICAgW2lkU2NvcGVFbnRyaWVzXT1cImlkU2NvcGVFbnRyaWVzXCJcclxuICAgICAgW2lkVGFnRW50cmllc109XCJpZFRhZ0VudHJpZXNcIlxyXG4gICAgICBbYXNzVGFnRW50cmllc109XCJhc3NUYWdFbnRyaWVzXCJcclxuICAgICAgW3JlZlR5cGVFbnRyaWVzXT1cInJlZlR5cGVFbnRyaWVzXCJcclxuICAgICAgW3JlZlRhZ0VudHJpZXNdPVwicmVmVGFnRW50cmllc1wiXHJcbiAgICAgIFtoYXNTdWJtaXRdPVwidHJ1ZVwiXHJcbiAgICAgIFtwaW5CeVR5cGVNb2RlXT1cInBpbkJ5VHlwZU1vZGVcIlxyXG4gICAgICBbY2FuU3dpdGNoTW9kZV09XCJjYW5Td2l0Y2hNb2RlXCJcclxuICAgICAgW2NhbkVkaXRUYXJnZXRdPVwiY2FuRWRpdFRhcmdldFwiXHJcbiAgICAgIFtsb29rdXBEZWZpbml0aW9uc109XCJsb29rdXBEZWZpbml0aW9uc1wiXHJcbiAgICAgIFtkZWZhdWx0UGFydFR5cGVLZXldPVwiZGVmYXVsdFBhcnRUeXBlS2V5XCJcclxuICAgICAgW2ludGVybmFsRGVmYXVsdF09XCJpbnRlcm5hbERlZmF1bHRcIlxyXG4gICAgICBbaWRdPVwiZWRpdGVkXCJcclxuICAgICAgKGlkQ2hhbmdlKT1cIm9uSWRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChlZGl0b3JDbG9zZSk9XCJjbG9zZUlkKClcIlxyXG4gICAgPjwvY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtY29tcG9zaXRlLWlkPlxyXG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuPC9mb3JtPlxyXG4iXX0=