@myrmidon/cadmus-refs-asserted-ids 1.0.1 → 1.0.2

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.
@@ -184,10 +184,10 @@ export class AssertedIdsComponent {
184
184
  }
185
185
  }
186
186
  AssertedIdsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: AssertedIdsComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
187
- AssertedIdsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: AssertedIdsComponent, selector: "cadmus-refs-asserted-ids", inputs: { ids: "ids", scopeEntries: "scopeEntries", tagEntries: "tagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries" }, outputs: { idsChange: "idsChange" }, viewQueries: [{ propertyName: "idQueryList", predicate: ["id"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n matTooltip=\"Add a new ID\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.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: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i10.AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion"], outputs: ["assertionChange"] }] });
187
+ AssertedIdsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: AssertedIdsComponent, selector: "cadmus-refs-asserted-ids", inputs: { ids: "ids", scopeEntries: "scopeEntries", tagEntries: "tagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries" }, outputs: { idsChange: "idsChange" }, viewQueries: [{ propertyName: "idQueryList", predicate: ["id"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.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: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i10.AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion"], outputs: ["assertionChange"] }] });
188
188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: AssertedIdsComponent, decorators: [{
189
189
  type: Component,
190
- args: [{ selector: 'cadmus-refs-asserted-ids', template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n matTooltip=\"Add a new ID\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n" }]
190
+ args: [{ selector: 'cadmus-refs-asserted-ids', template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n" }]
191
191
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { idQueryList: [{
192
192
  type: ViewChildren,
193
193
  args: ['id']
@@ -206,4 +206,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
206
206
  }], idsChange: [{
207
207
  type: Output
208
208
  }] } });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0ZWQtaWRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGVkLWlkcy9zcmMvbGliL2Fzc2VydGVkLWlkcy9hc3NlcnRlZC1pZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtaWRzL2Fzc2VydGVkLWlkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUTlDLE1BQU0sT0FBTyxvQkFBb0I7SUF3RC9CLFlBQW9CLFlBQXlCO1FBQXpCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQzNDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixPQUFPO1FBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTFE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dHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgQXNzZXJ0aW9uIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGlvbic7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBc3NlcnRlZElkIH0gZnJvbSAnLi4vYXNzZXJ0ZWQtaWQvYXNzZXJ0ZWQtaWQuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXJ0ZWQtaWRzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hc3NlcnRlZC1pZHMuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNzZXJ0ZWRJZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2lkczogQXNzZXJ0ZWRJZFtdO1xyXG4gIHByaXZhdGUgX2lkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfaWRzU3ViczogU3Vic2NyaXB0aW9uW107XHJcbiAgcHJpdmF0ZSBfdXBkYXRpbmdGb3JtOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdpZCcpIGlkUXVlcnlMaXN0OiBRdWVyeUxpc3Q8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGFzc2VydGVkIElEcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaWRzKCk6IEFzc2VydGVkSWRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faWRzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGlkcyh2YWx1ZTogQXNzZXJ0ZWRJZFtdKSB7XHJcbiAgICB0aGlzLl9pZHMgPSB2YWx1ZSB8fCBbXTtcclxuICAgIHRoaXMudXBkYXRlRm9ybSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgSUQgc2NvcGVzIHRoZXNhdXJ1cyBlbnRyaWVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNjb3BlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIElEIHRhZ3MgdGhlc2F1cnVzIGVudHJpZXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gdGhlc2F1cmkgZm9yIGFzc2VydGlvbnNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhc3NUYWdFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVmVHlwZUVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlZlRhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbmV2ZXIgYW55IElEIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGlkc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFzc2VydGVkSWRbXT47XHJcblxyXG4gIHB1YmxpYyBpZHNBcnI6IEZvcm1BcnJheTtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG4gIC8vIGVkaXRlZCBhc3NlcnRpb25cclxuICBwdWJsaWMgYXNzRWRPcGVuOiBib29sZWFuO1xyXG4gIHB1YmxpYyBhc3NlcnRpb25Ocj86IG51bWJlcjtcclxuICBwdWJsaWMgaW5pdGlhbEFzc2VydGlvbj86IEFzc2VydGlvbjtcclxuICBwdWJsaWMgYXNzZXJ0aW9uPzogQXNzZXJ0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9mb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuX2lkcyA9IFtdO1xyXG4gICAgdGhpcy5faWRzU3VicyA9IFtdO1xyXG4gICAgdGhpcy5pZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFzc2VydGVkSWRbXT4oKTtcclxuICAgIHRoaXMuYXNzRWRPcGVuID0gZmFsc2U7XHJcbiAgICAvLyBmb3JtXHJcbiAgICB0aGlzLmlkc0FyciA9IF9mb3JtQnVpbGRlci5hcnJheShbXSk7XHJcbiAgICB0aGlzLmZvcm0gPSBfZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBpZHNBcnI6IHRoaXMuaWRzQXJyLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gZm9jdXMgb24gbmV3bHkgYWRkZWQgSURcclxuICAgIHRoaXMuX2lkU3Vic2NyaXB0aW9uID0gdGhpcy5pZFF1ZXJ5TGlzdD8uY2hhbmdlc1xyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgICAgLnN1YnNjcmliZSgobHN0OiBRdWVyeUxpc3Q8YW55PikgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fdXBkYXRpbmdGb3JtICYmIGxzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsc3QubGFzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVJZHMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2lkc1N1YnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5faWRzU3Vic1tpXS51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUlkcygpO1xyXG4gICAgdGhpcy5faWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElkR3JvdXAoaWQ/OiBBc3NlcnRlZElkKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHZhbHVlOiB0aGlzLl9mb3JtQnVpbGRlci5jb250cm9sKGlkPy52YWx1ZSwgW1xyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTAwKSxcclxuICAgICAgXSksXHJcbiAgICAgIHNjb3BlOiB0aGlzLl9mb3JtQnVpbGRlci5jb250cm9sKGlkPy5zY29wZSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApKSxcclxuICAgICAgdGFnOiB0aGlzLl9mb3JtQnVpbGRlci5jb250cm9sKGlkPy50YWcsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSksXHJcbiAgICAgIGFzc2VydGlvbjogdGhpcy5fZm9ybUJ1aWxkZXIuY29udHJvbChpZD8uYXNzZXJ0aW9uKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZElkKGlkPzogQXNzZXJ0ZWRJZCk6IHZvaWQge1xyXG4gICAgY29uc3QgZyA9IHRoaXMuZ2V0SWRHcm91cChpZCk7XHJcbiAgICB0aGlzLl9pZHNTdWJzLnB1c2goXHJcbiAgICAgIGcudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICAgIHRoaXMuZW1pdElkc0NoYW5nZSgpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuaWRzQXJyLnB1c2goZyk7XHJcbiAgICBpZiAoIXRoaXMuX3VwZGF0aW5nRm9ybSkge1xyXG4gICAgICB0aGlzLmVtaXRJZHNDaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVJZChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlQXNzZXJ0aW9uKCk7XHJcbiAgICB0aGlzLl9pZHNTdWJzW2luZGV4XS51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5faWRzU3Vicy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5pZHNBcnIucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN3YXBBcnJFbGVtcyhhOiBhbnlbXSwgaTogbnVtYmVyLCBqOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChpID09PSBqKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHQgPSBhW2ldO1xyXG4gICAgYVtpXSA9IGFbal07XHJcbiAgICBhW2pdID0gdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlSWRVcChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggPCAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VBc3NlcnRpb24oKTtcclxuICAgIGNvbnN0IGN0bCA9IHRoaXMuaWRzQXJyLmNvbnRyb2xzW2luZGV4XTtcclxuICAgIHRoaXMuaWRzQXJyLnJlbW92ZUF0KGluZGV4KTtcclxuICAgIHRoaXMuaWRzQXJyLmluc2VydChpbmRleCAtIDEsIGN0bCk7XHJcblxyXG4gICAgdGhpcy5zd2FwQXJyRWxlbXModGhpcy5faWRzU3VicywgaW5kZXgsIGluZGV4IC0gMSk7XHJcblxyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW92ZUlkRG93bihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggKyAxID49IHRoaXMuaWRzQXJyLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsb3NlQXNzZXJ0aW9uKCk7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pZHNBcnIuY29udHJvbHNbaW5kZXhdO1xyXG4gICAgdGhpcy5pZHNBcnIucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5pZHNBcnIuaW5zZXJ0KGluZGV4ICsgMSwgaXRlbSk7XHJcblxyXG4gICAgdGhpcy5zd2FwQXJyRWxlbXModGhpcy5faWRzU3VicywgaW5kZXgsIGluZGV4ICsgMSk7XHJcblxyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJJZHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlQXNzZXJ0aW9uKCk7XHJcbiAgICB0aGlzLmlkc0Fyci5jbGVhcigpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUlkcygpO1xyXG4gICAgdGhpcy5faWRzU3VicyA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLl91cGRhdGluZ0Zvcm0pIHtcclxuICAgICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEFzc2VydGlvbihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAvLyBzYXZlIHRoZSBjdXJyZW50bHkgZWRpdGVkIGFzc2VydGlvbiBpZiBhbnlcclxuICAgIHRoaXMuc2F2ZUFzc2VydGlvbigpO1xyXG4gICAgLy8gZWRpdCB0aGUgbmV3IGFzc2VydGlvblxyXG4gICAgdGhpcy5pbml0aWFsQXNzZXJ0aW9uID0gKFxyXG4gICAgICB0aGlzLmlkc0Fyci5hdChpbmRleCkgYXMgRm9ybUdyb3VwXHJcbiAgICApLmNvbnRyb2xzWydhc3NlcnRpb24nXS52YWx1ZTtcclxuICAgIHRoaXMuYXNzZXJ0aW9uTnIgPSBpbmRleCArIDE7XHJcbiAgICB0aGlzLmFzc0VkT3BlbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Bc3NlcnRpb25DaGFuZ2UoYXNzZXJ0aW9uOiBBc3NlcnRpb24gfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIHRoaXMuYXNzZXJ0aW9uID0gYXNzZXJ0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVBc3NlcnRpb24oKTogdm9pZCB7XHJcbiAgICAvLyBzYXZlIHRoZSBjdXJyZW50bHkgZWRpdGVkIGFzc2VydGlvbiBpZiBhbnlcclxuICAgIGlmICh0aGlzLmFzc2VydGlvbk5yKSB7XHJcbiAgICAgIGNvbnN0IGcgPSB0aGlzLmlkc0Fyci5hdCh0aGlzLmFzc2VydGlvbk5yIC0gMSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBnLmNvbnRyb2xzWydhc3NlcnRpb24nXS5zZXRWYWx1ZSh0aGlzLmFzc2VydGlvbik7XHJcbiAgICAgIHRoaXMuY2xvc2VBc3NlcnRpb24oKTtcclxuICAgICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlQXNzZXJ0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXNzZXJ0aW9uTnIpIHtcclxuICAgICAgdGhpcy5hc3NFZE9wZW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5hc3NlcnRpb25OciA9IDA7XHJcbiAgICAgIHRoaXMuaW5pdGlhbEFzc2VydGlvbiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShpZHM6IEFzc2VydGVkSWRbXSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlkc0Fycikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGluZ0Zvcm0gPSB0cnVlO1xyXG4gICAgdGhpcy5jbGVhcklkcygpO1xyXG5cclxuICAgIGlmICghaWRzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcclxuICAgICAgICB0aGlzLmFkZElkKGlkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0aW5nRm9ybSA9IGZhbHNlO1xyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElkcygpOiBBc3NlcnRlZElkW10ge1xyXG4gICAgY29uc3QgaWRzOiBBc3NlcnRlZElkW10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pZHNBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZyA9IHRoaXMuaWRzQXJyLmNvbnRyb2xzW2ldIGFzIEZvcm1Hcm91cDtcclxuICAgICAgaWRzLnB1c2goe1xyXG4gICAgICAgIHZhbHVlOiBnLmNvbnRyb2xzLnZhbHVlLnZhbHVlPy50cmltKCksXHJcbiAgICAgICAgc2NvcGU6IGcuY29udHJvbHMuc2NvcGUudmFsdWU/LnRyaW0oKSxcclxuICAgICAgICB0YWc6IGcuY29udHJvbHMudGFnLnZhbHVlPy50cmltKCksXHJcbiAgICAgICAgYXNzZXJ0aW9uOiBnLmNvbnRyb2xzLmFzc2VydGlvbi52YWx1ZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0SWRzQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pZHNDaGFuZ2UuZW1pdCh0aGlzLmdldElkcygpKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiaWRzQXJyXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAoY2xpY2spPVwiYWRkSWQoKVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcD1cIkFkZCBhIG5ldyBJRFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+IGFkZCBJRFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdGb3I9XCJcclxuICAgICAgICBsZXQgaXRlbSBvZiBpZHNBcnIuY29udHJvbHM7XHJcbiAgICAgICAgbGV0IGkgPSBpbmRleDtcclxuICAgICAgICBsZXQgZmlyc3QgPSBmaXJzdDtcclxuICAgICAgICBsZXQgbGFzdCA9IGxhc3RcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPCEtLSBjaGlsZCBmb3JtIC0tPlxyXG4gICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICA8IS0tIGNoaWxkIGFjdGlvbnMgLS0+XHJcbiAgICAgICAge3sgaSArIDEgfX0uXHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmUgdGhpcyBJRFwiXHJcbiAgICAgICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUlkKGkpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+cmVtb3ZlX2NpcmNsZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZpcnN0XCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiTW92ZSBJRCB1cFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW92ZUlkVXAoaSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJsYXN0XCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiTW92ZSBJRCBkb3duXCJcclxuICAgICAgICAgIChjbGljayk9XCJtb3ZlSWREb3duKGkpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8IS0tIGNoaWxkIGNvbnRyb2xzIC0tPlxyXG4gICAgICAgIDwhLS0gdmFsdWUgLS0+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5leHRlcm5hbCBJRDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0ICNpZCBhdXRvZm9jdXMgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiAvPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWU/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmXHJcbiAgICAgICAgICAgICAgKCRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWUuZGlydHkgfHxcclxuICAgICAgICAgICAgICAgICRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWUudG91Y2hlZClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPklEIHJlcXVpcmVkXHJcbiAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KGl0ZW0pWydjb250cm9scyddLnZhbHVlPy5oYXNFcnJvcignbWF4LWxlbmd0aCcpICYmXHJcbiAgICAgICAgICAgICAgKCRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWUuZGlydHkgfHxcclxuICAgICAgICAgICAgICAgICRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWUudG91Y2hlZClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPklEIHRvbyBsb25nXHJcbiAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAmbmJzcDtcclxuICAgICAgICA8IS0tIHNjb3BlIChib3VuZCkgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNjb3BlRW50cmllc1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDhlbVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnNjb3BlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNjb3BlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGUgb2Ygc2NvcGVFbnRyaWVzXCIgW3ZhbHVlXT1cImUuaWRcIj5cclxuICAgICAgICAgICAgICAgIHt7IGUudmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gc2NvcGUgKGZyZWUpIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2NvcGVFbnRyaWVzXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogOGVtXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+c2NvcGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInNjb3BlXCIgLz5cclxuICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAkYW55KGl0ZW0pWydjb250cm9scyddLnNjb3BlPy5oYXNFcnJvcignbWF4LWxlbmd0aCcpICYmXHJcbiAgICAgICAgICAgICAgICAoJGFueShpdGVtKVsnY29udHJvbHMnXS5zY29wZS5kaXJ0eSB8fFxyXG4gICAgICAgICAgICAgICAgICAkYW55KGl0ZW0pWydjb250cm9scyddLnNjb3BlLnRvdWNoZWQpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+c2NvcGUgdG9vIGxvbmdcclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAmbmJzcDtcclxuICAgICAgICA8IS0tIHRhZyAoYm91bmQpIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWdFbnRyaWVzXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogOGVtXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+dGFnPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInRhZ1wiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlIG9mIHRhZ0VudHJpZXNcIiBbdmFsdWVdPVwiZS5pZFwiPlxyXG4gICAgICAgICAgICAgICAge3sgZS52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSB0YWcgKGZyZWUpIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFnRW50cmllc1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDhlbVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnRhZzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGFnXCIgLz5cclxuICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAkYW55KGl0ZW0pWydjb250cm9scyddLnRhZz8uaGFzRXJyb3IoJ21heC1sZW5ndGgnKSAmJlxyXG4gICAgICAgICAgICAgICAgKCRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udGFnLmRpcnR5IHx8XHJcbiAgICAgICAgICAgICAgICAgICRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udGFnLnRvdWNoZWQpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+dGFnIHRvbyBsb25nXHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBhc3NlcnRpb24gLS0+XHJcbiAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCBhc3NlcnRpb25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImVkaXRBc3NlcnRpb24oaSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5mZWVkYmFjazwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIGFzc2VydGlvbiAtLT5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsXHJcbiAgICAgICpuZ0lmPVwiaWRzQXJyPy5sZW5ndGhcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWFzc2VydGlvbk5yXCJcclxuICAgICAgWyhleHBhbmRlZCldPVwiYXNzRWRPcGVuXCJcclxuICAgID5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyXHJcbiAgICAgICAgPiN7eyBhc3NlcnRpb25OciB9fSBhc3NlcnRpb248L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyXHJcbiAgICAgID5cclxuICAgICAgPGNhZG11cy1yZWZzLWFzc2VydGlvblxyXG4gICAgICAgIFthc3NlcnRpb25dPVwiaW5pdGlhbEFzc2VydGlvblwiXHJcbiAgICAgICAgW2Fzc1RhZ0VudHJpZXNdPVwiYXNzVGFnRW50cmllc1wiXHJcbiAgICAgICAgW3JlZlRhZ0VudHJpZXNdPVwicmVmVGFnRW50cmllc1wiXHJcbiAgICAgICAgW3JlZlR5cGVFbnRyaWVzXT1cInJlZlR5cGVFbnRyaWVzXCJcclxuICAgICAgICAoYXNzZXJ0aW9uQ2hhbmdlKT1cIm9uQXNzZXJ0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICA+PC9jYWRtdXMtcmVmcy1hc3NlcnRpb24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogNnB4O1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNhdmVBc3NlcnRpb24oKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj4gYXNzZXJ0aW9uXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0ZWQtaWRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGVkLWlkcy9zcmMvbGliL2Fzc2VydGVkLWlkcy9hc3NlcnRlZC1pZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtaWRzL2Fzc2VydGVkLWlkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUTlDLE1BQU0sT0FBTyxvQkFBb0I7SUF3RC9CLFlBQW9CLFlBQXlCO1FBQXpCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQzNDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixPQUFPO1FBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTFE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dHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgQXNzZXJ0aW9uIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGlvbic7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBc3NlcnRlZElkIH0gZnJvbSAnLi4vYXNzZXJ0ZWQtaWQvYXNzZXJ0ZWQtaWQuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXJ0ZWQtaWRzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hc3NlcnRlZC1pZHMuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNzZXJ0ZWRJZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2lkczogQXNzZXJ0ZWRJZFtdO1xyXG4gIHByaXZhdGUgX2lkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfaWRzU3ViczogU3Vic2NyaXB0aW9uW107XHJcbiAgcHJpdmF0ZSBfdXBkYXRpbmdGb3JtOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdpZCcpIGlkUXVlcnlMaXN0OiBRdWVyeUxpc3Q8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGFzc2VydGVkIElEcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaWRzKCk6IEFzc2VydGVkSWRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faWRzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGlkcyh2YWx1ZTogQXNzZXJ0ZWRJZFtdKSB7XHJcbiAgICB0aGlzLl9pZHMgPSB2YWx1ZSB8fCBbXTtcclxuICAgIHRoaXMudXBkYXRlRm9ybSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgSUQgc2NvcGVzIHRoZXNhdXJ1cyBlbnRyaWVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNjb3BlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIElEIHRhZ3MgdGhlc2F1cnVzIGVudHJpZXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gdGhlc2F1cmkgZm9yIGFzc2VydGlvbnNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhc3NUYWdFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVmVHlwZUVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlZlRhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbmV2ZXIgYW55IElEIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGlkc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFzc2VydGVkSWRbXT47XHJcblxyXG4gIHB1YmxpYyBpZHNBcnI6IEZvcm1BcnJheTtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG4gIC8vIGVkaXRlZCBhc3NlcnRpb25cclxuICBwdWJsaWMgYXNzRWRPcGVuOiBib29sZWFuO1xyXG4gIHB1YmxpYyBhc3NlcnRpb25Ocj86IG51bWJlcjtcclxuICBwdWJsaWMgaW5pdGlhbEFzc2VydGlvbj86IEFzc2VydGlvbjtcclxuICBwdWJsaWMgYXNzZXJ0aW9uPzogQXNzZXJ0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9mb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuX2lkcyA9IFtdO1xyXG4gICAgdGhpcy5faWRzU3VicyA9IFtdO1xyXG4gICAgdGhpcy5pZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFzc2VydGVkSWRbXT4oKTtcclxuICAgIHRoaXMuYXNzRWRPcGVuID0gZmFsc2U7XHJcbiAgICAvLyBmb3JtXHJcbiAgICB0aGlzLmlkc0FyciA9IF9mb3JtQnVpbGRlci5hcnJheShbXSk7XHJcbiAgICB0aGlzLmZvcm0gPSBfZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBpZHNBcnI6IHRoaXMuaWRzQXJyLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gZm9jdXMgb24gbmV3bHkgYWRkZWQgSURcclxuICAgIHRoaXMuX2lkU3Vic2NyaXB0aW9uID0gdGhpcy5pZFF1ZXJ5TGlzdD8uY2hhbmdlc1xyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgICAgLnN1YnNjcmliZSgobHN0OiBRdWVyeUxpc3Q8YW55PikgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fdXBkYXRpbmdGb3JtICYmIGxzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsc3QubGFzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVJZHMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2lkc1N1YnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5faWRzU3Vic1tpXS51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUlkcygpO1xyXG4gICAgdGhpcy5faWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElkR3JvdXAoaWQ/OiBBc3NlcnRlZElkKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHZhbHVlOiB0aGlzLl9mb3JtQnVpbGRlci5jb250cm9sKGlkPy52YWx1ZSwgW1xyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTAwKSxcclxuICAgICAgXSksXHJcbiAgICAgIHNjb3BlOiB0aGlzLl9mb3JtQnVpbGRlci5jb250cm9sKGlkPy5zY29wZSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApKSxcclxuICAgICAgdGFnOiB0aGlzLl9mb3JtQnVpbGRlci5jb250cm9sKGlkPy50YWcsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSksXHJcbiAgICAgIGFzc2VydGlvbjogdGhpcy5fZm9ybUJ1aWxkZXIuY29udHJvbChpZD8uYXNzZXJ0aW9uKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZElkKGlkPzogQXNzZXJ0ZWRJZCk6IHZvaWQge1xyXG4gICAgY29uc3QgZyA9IHRoaXMuZ2V0SWRHcm91cChpZCk7XHJcbiAgICB0aGlzLl9pZHNTdWJzLnB1c2goXHJcbiAgICAgIGcudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICAgIHRoaXMuZW1pdElkc0NoYW5nZSgpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuaWRzQXJyLnB1c2goZyk7XHJcbiAgICBpZiAoIXRoaXMuX3VwZGF0aW5nRm9ybSkge1xyXG4gICAgICB0aGlzLmVtaXRJZHNDaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVJZChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlQXNzZXJ0aW9uKCk7XHJcbiAgICB0aGlzLl9pZHNTdWJzW2luZGV4XS51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5faWRzU3Vicy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5pZHNBcnIucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN3YXBBcnJFbGVtcyhhOiBhbnlbXSwgaTogbnVtYmVyLCBqOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChpID09PSBqKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHQgPSBhW2ldO1xyXG4gICAgYVtpXSA9IGFbal07XHJcbiAgICBhW2pdID0gdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlSWRVcChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggPCAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VBc3NlcnRpb24oKTtcclxuICAgIGNvbnN0IGN0bCA9IHRoaXMuaWRzQXJyLmNvbnRyb2xzW2luZGV4XTtcclxuICAgIHRoaXMuaWRzQXJyLnJlbW92ZUF0KGluZGV4KTtcclxuICAgIHRoaXMuaWRzQXJyLmluc2VydChpbmRleCAtIDEsIGN0bCk7XHJcblxyXG4gICAgdGhpcy5zd2FwQXJyRWxlbXModGhpcy5faWRzU3VicywgaW5kZXgsIGluZGV4IC0gMSk7XHJcblxyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW92ZUlkRG93bihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggKyAxID49IHRoaXMuaWRzQXJyLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsb3NlQXNzZXJ0aW9uKCk7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pZHNBcnIuY29udHJvbHNbaW5kZXhdO1xyXG4gICAgdGhpcy5pZHNBcnIucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5pZHNBcnIuaW5zZXJ0KGluZGV4ICsgMSwgaXRlbSk7XHJcblxyXG4gICAgdGhpcy5zd2FwQXJyRWxlbXModGhpcy5faWRzU3VicywgaW5kZXgsIGluZGV4ICsgMSk7XHJcblxyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJJZHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlQXNzZXJ0aW9uKCk7XHJcbiAgICB0aGlzLmlkc0Fyci5jbGVhcigpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUlkcygpO1xyXG4gICAgdGhpcy5faWRzU3VicyA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLl91cGRhdGluZ0Zvcm0pIHtcclxuICAgICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEFzc2VydGlvbihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAvLyBzYXZlIHRoZSBjdXJyZW50bHkgZWRpdGVkIGFzc2VydGlvbiBpZiBhbnlcclxuICAgIHRoaXMuc2F2ZUFzc2VydGlvbigpO1xyXG4gICAgLy8gZWRpdCB0aGUgbmV3IGFzc2VydGlvblxyXG4gICAgdGhpcy5pbml0aWFsQXNzZXJ0aW9uID0gKFxyXG4gICAgICB0aGlzLmlkc0Fyci5hdChpbmRleCkgYXMgRm9ybUdyb3VwXHJcbiAgICApLmNvbnRyb2xzWydhc3NlcnRpb24nXS52YWx1ZTtcclxuICAgIHRoaXMuYXNzZXJ0aW9uTnIgPSBpbmRleCArIDE7XHJcbiAgICB0aGlzLmFzc0VkT3BlbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Bc3NlcnRpb25DaGFuZ2UoYXNzZXJ0aW9uOiBBc3NlcnRpb24gfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIHRoaXMuYXNzZXJ0aW9uID0gYXNzZXJ0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVBc3NlcnRpb24oKTogdm9pZCB7XHJcbiAgICAvLyBzYXZlIHRoZSBjdXJyZW50bHkgZWRpdGVkIGFzc2VydGlvbiBpZiBhbnlcclxuICAgIGlmICh0aGlzLmFzc2VydGlvbk5yKSB7XHJcbiAgICAgIGNvbnN0IGcgPSB0aGlzLmlkc0Fyci5hdCh0aGlzLmFzc2VydGlvbk5yIC0gMSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBnLmNvbnRyb2xzWydhc3NlcnRpb24nXS5zZXRWYWx1ZSh0aGlzLmFzc2VydGlvbik7XHJcbiAgICAgIHRoaXMuY2xvc2VBc3NlcnRpb24oKTtcclxuICAgICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlQXNzZXJ0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXNzZXJ0aW9uTnIpIHtcclxuICAgICAgdGhpcy5hc3NFZE9wZW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5hc3NlcnRpb25OciA9IDA7XHJcbiAgICAgIHRoaXMuaW5pdGlhbEFzc2VydGlvbiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShpZHM6IEFzc2VydGVkSWRbXSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlkc0Fycikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGluZ0Zvcm0gPSB0cnVlO1xyXG4gICAgdGhpcy5jbGVhcklkcygpO1xyXG5cclxuICAgIGlmICghaWRzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcclxuICAgICAgICB0aGlzLmFkZElkKGlkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0aW5nRm9ybSA9IGZhbHNlO1xyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElkcygpOiBBc3NlcnRlZElkW10ge1xyXG4gICAgY29uc3QgaWRzOiBBc3NlcnRlZElkW10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pZHNBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZyA9IHRoaXMuaWRzQXJyLmNvbnRyb2xzW2ldIGFzIEZvcm1Hcm91cDtcclxuICAgICAgaWRzLnB1c2goe1xyXG4gICAgICAgIHZhbHVlOiBnLmNvbnRyb2xzLnZhbHVlLnZhbHVlPy50cmltKCksXHJcbiAgICAgICAgc2NvcGU6IGcuY29udHJvbHMuc2NvcGUudmFsdWU/LnRyaW0oKSxcclxuICAgICAgICB0YWc6IGcuY29udHJvbHMudGFnLnZhbHVlPy50cmltKCksXHJcbiAgICAgICAgYXNzZXJ0aW9uOiBnLmNvbnRyb2xzLmFzc2VydGlvbi52YWx1ZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0SWRzQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pZHNDaGFuZ2UuZW1pdCh0aGlzLmdldElkcygpKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiaWRzQXJyXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAoY2xpY2spPVwiYWRkSWQoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+IGFkZCBJRFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdGb3I9XCJcclxuICAgICAgICBsZXQgaXRlbSBvZiBpZHNBcnIuY29udHJvbHM7XHJcbiAgICAgICAgbGV0IGkgPSBpbmRleDtcclxuICAgICAgICBsZXQgZmlyc3QgPSBmaXJzdDtcclxuICAgICAgICBsZXQgbGFzdCA9IGxhc3RcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPCEtLSBjaGlsZCBmb3JtIC0tPlxyXG4gICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICA8IS0tIGNoaWxkIGFjdGlvbnMgLS0+XHJcbiAgICAgICAge3sgaSArIDEgfX0uXHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmUgdGhpcyBJRFwiXHJcbiAgICAgICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUlkKGkpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+cmVtb3ZlX2NpcmNsZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZpcnN0XCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiTW92ZSBJRCB1cFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW92ZUlkVXAoaSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJsYXN0XCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiTW92ZSBJRCBkb3duXCJcclxuICAgICAgICAgIChjbGljayk9XCJtb3ZlSWREb3duKGkpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8IS0tIGNoaWxkIGNvbnRyb2xzIC0tPlxyXG4gICAgICAgIDwhLS0gdmFsdWUgLS0+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5leHRlcm5hbCBJRDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0ICNpZCBhdXRvZm9jdXMgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiAvPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWU/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmXHJcbiAgICAgICAgICAgICAgKCRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWUuZGlydHkgfHxcclxuICAgICAgICAgICAgICAgICRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWUudG91Y2hlZClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPklEIHJlcXVpcmVkXHJcbiAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KGl0ZW0pWydjb250cm9scyddLnZhbHVlPy5oYXNFcnJvcignbWF4LWxlbmd0aCcpICYmXHJcbiAgICAgICAgICAgICAgKCRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWUuZGlydHkgfHxcclxuICAgICAgICAgICAgICAgICRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udmFsdWUudG91Y2hlZClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPklEIHRvbyBsb25nXHJcbiAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAmbmJzcDtcclxuICAgICAgICA8IS0tIHNjb3BlIChib3VuZCkgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNjb3BlRW50cmllc1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDhlbVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnNjb3BlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNjb3BlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGUgb2Ygc2NvcGVFbnRyaWVzXCIgW3ZhbHVlXT1cImUuaWRcIj5cclxuICAgICAgICAgICAgICAgIHt7IGUudmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gc2NvcGUgKGZyZWUpIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2NvcGVFbnRyaWVzXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogOGVtXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+c2NvcGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInNjb3BlXCIgLz5cclxuICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAkYW55KGl0ZW0pWydjb250cm9scyddLnNjb3BlPy5oYXNFcnJvcignbWF4LWxlbmd0aCcpICYmXHJcbiAgICAgICAgICAgICAgICAoJGFueShpdGVtKVsnY29udHJvbHMnXS5zY29wZS5kaXJ0eSB8fFxyXG4gICAgICAgICAgICAgICAgICAkYW55KGl0ZW0pWydjb250cm9scyddLnNjb3BlLnRvdWNoZWQpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+c2NvcGUgdG9vIGxvbmdcclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAmbmJzcDtcclxuICAgICAgICA8IS0tIHRhZyAoYm91bmQpIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWdFbnRyaWVzXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogOGVtXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+dGFnPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInRhZ1wiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlIG9mIHRhZ0VudHJpZXNcIiBbdmFsdWVdPVwiZS5pZFwiPlxyXG4gICAgICAgICAgICAgICAge3sgZS52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSB0YWcgKGZyZWUpIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFnRW50cmllc1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDhlbVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnRhZzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGFnXCIgLz5cclxuICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAkYW55KGl0ZW0pWydjb250cm9scyddLnRhZz8uaGFzRXJyb3IoJ21heC1sZW5ndGgnKSAmJlxyXG4gICAgICAgICAgICAgICAgKCRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udGFnLmRpcnR5IHx8XHJcbiAgICAgICAgICAgICAgICAgICRhbnkoaXRlbSlbJ2NvbnRyb2xzJ10udGFnLnRvdWNoZWQpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+dGFnIHRvbyBsb25nXHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBhc3NlcnRpb24gLS0+XHJcbiAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCBhc3NlcnRpb25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImVkaXRBc3NlcnRpb24oaSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5mZWVkYmFjazwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIGFzc2VydGlvbiAtLT5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsXHJcbiAgICAgICpuZ0lmPVwiaWRzQXJyPy5sZW5ndGhcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWFzc2VydGlvbk5yXCJcclxuICAgICAgWyhleHBhbmRlZCldPVwiYXNzRWRPcGVuXCJcclxuICAgID5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyXHJcbiAgICAgICAgPiN7eyBhc3NlcnRpb25OciB9fSBhc3NlcnRpb248L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyXHJcbiAgICAgID5cclxuICAgICAgPGNhZG11cy1yZWZzLWFzc2VydGlvblxyXG4gICAgICAgIFthc3NlcnRpb25dPVwiaW5pdGlhbEFzc2VydGlvblwiXHJcbiAgICAgICAgW2Fzc1RhZ0VudHJpZXNdPVwiYXNzVGFnRW50cmllc1wiXHJcbiAgICAgICAgW3JlZlRhZ0VudHJpZXNdPVwicmVmVGFnRW50cmllc1wiXHJcbiAgICAgICAgW3JlZlR5cGVFbnRyaWVzXT1cInJlZlR5cGVFbnRyaWVzXCJcclxuICAgICAgICAoYXNzZXJ0aW9uQ2hhbmdlKT1cIm9uQXNzZXJ0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICA+PC9jYWRtdXMtcmVmcy1hc3NlcnRpb24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogNnB4O1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNhdmVBc3NlcnRpb24oKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj4gYXNzZXJ0aW9uXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
@@ -280,10 +280,10 @@ class AssertedIdsComponent {
280
280
  }
281
281
  }
282
282
  AssertedIdsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: AssertedIdsComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
283
- AssertedIdsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: AssertedIdsComponent, selector: "cadmus-refs-asserted-ids", inputs: { ids: "ids", scopeEntries: "scopeEntries", tagEntries: "tagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries" }, outputs: { idsChange: "idsChange" }, viewQueries: [{ propertyName: "idQueryList", predicate: ["id"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n matTooltip=\"Add a new ID\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion"], outputs: ["assertionChange"] }] });
283
+ AssertedIdsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: AssertedIdsComponent, selector: "cadmus-refs-asserted-ids", inputs: { ids: "ids", scopeEntries: "scopeEntries", tagEntries: "tagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries" }, outputs: { idsChange: "idsChange" }, viewQueries: [{ propertyName: "idQueryList", predicate: ["id"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion"], outputs: ["assertionChange"] }] });
284
284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: AssertedIdsComponent, decorators: [{
285
285
  type: Component,
286
- args: [{ selector: 'cadmus-refs-asserted-ids', template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n matTooltip=\"Add a new ID\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n" }]
286
+ args: [{ selector: 'cadmus-refs-asserted-ids', template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n" }]
287
287
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { idQueryList: [{
288
288
  type: ViewChildren,
289
289
  args: ['id']
@@ -368,3 +368,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
368
368
 
369
369
  export { AssertedIdComponent, AssertedIdsComponent, CadmusRefsAssertedIdsModule };
370
370
  //# sourceMappingURL=myrmidon-cadmus-refs-asserted-ids.mjs.map
371
+ //# sourceMappingURL=myrmidon-cadmus-refs-asserted-ids.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/cadmus-refs-asserted-ids.module.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n})\r\nexport class AssertedIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedId | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n public initialAssertion?: Assertion;\r\n public assertion?: Assertion;\r\n\r\n @Input()\r\n public scopeEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedId | undefined {\r\n return this._id;\r\n }\r\n public set id(value: AssertedId | undefined) {\r\n this._id = value;\r\n this.updateForm(value);\r\n }\r\n\r\n @Output()\r\n public idChange: EventEmitter<AssertedId>;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this.idChange = new EventEmitter<AssertedId>();\r\n // form\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n scope: this.scope,\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion = assertion;\r\n setTimeout(() => this.emitIdChange(), 0);\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n this.assertion = undefined;\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.scope.setValue(value.scope);\r\n this.initialAssertion = value.assertion;\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n this.emitIdChange();\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n this.idChange.emit(this.getId());\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\n <div>\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 &nbsp;\n\n <!-- scope (bound) -->\n <mat-form-field *ngIf=\"scopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- scope (free) -->\n <mat-form-field *ngIf=\"!scopeEntries?.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 <!-- value -->\n &nbsp;\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 </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]=\"initialAssertion\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n</form>\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { AssertedId } from '../asserted-id/asserted-id.component';\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n})\r\nexport class AssertedIdsComponent implements OnDestroy {\r\n private _ids: AssertedId[];\r\n private _idSubscription: Subscription | undefined;\r\n private _idsSubs: Subscription[];\r\n private _updatingForm: boolean | undefined;\r\n\r\n @ViewChildren('id') idQueryList: QueryList<any> | undefined;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedId[]) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n\r\n /**\r\n * The ID scopes thesaurus entries.\r\n */\r\n @Input()\r\n public scopeEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * The ID tags thesaurus entries.\r\n */\r\n @Input()\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n // thesauri for assertions\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedId[]>;\r\n\r\n public idsArr: FormArray;\r\n public form: FormGroup;\r\n // edited assertion\r\n public assEdOpen: boolean;\r\n public assertionNr?: number;\r\n public initialAssertion?: Assertion;\r\n public assertion?: Assertion;\r\n\r\n constructor(private _formBuilder: FormBuilder) {\r\n this._ids = [];\r\n this._idsSubs = [];\r\n this.idsChange = new EventEmitter<AssertedId[]>();\r\n this.assEdOpen = false;\r\n // form\r\n this.idsArr = _formBuilder.array([]);\r\n this.form = _formBuilder.group({\r\n idsArr: this.idsArr,\r\n });\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n // focus on newly added ID\r\n this._idSubscription = this.idQueryList?.changes\r\n .pipe(debounceTime(300))\r\n .subscribe((lst: QueryList<any>) => {\r\n if (!this._updatingForm && lst.length > 0) {\r\n lst.last.nativeElement.focus();\r\n }\r\n });\r\n }\r\n\r\n private unsubscribeIds(): void {\r\n for (let i = 0; i < this._idsSubs.length; i++) {\r\n this._idsSubs[i].unsubscribe();\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.unsubscribeIds();\r\n this._idSubscription?.unsubscribe();\r\n }\r\n\r\n private getIdGroup(id?: AssertedId): FormGroup {\r\n return this._formBuilder.group({\r\n value: this._formBuilder.control(id?.value, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]),\r\n scope: this._formBuilder.control(id?.scope, Validators.maxLength(50)),\r\n tag: this._formBuilder.control(id?.tag, Validators.maxLength(50)),\r\n assertion: this._formBuilder.control(id?.assertion),\r\n });\r\n }\r\n\r\n public addId(id?: AssertedId): void {\r\n const g = this.getIdGroup(id);\r\n this._idsSubs.push(\r\n g.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n this.emitIdsChange();\r\n })\r\n );\r\n this.idsArr.push(g);\r\n if (!this._updatingForm) {\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n public removeId(index: number): void {\r\n this.closeAssertion();\r\n this._idsSubs[index].unsubscribe();\r\n this._idsSubs.splice(index, 1);\r\n this.idsArr.removeAt(index);\r\n this.emitIdsChange();\r\n }\r\n\r\n private swapArrElems(a: any[], i: number, j: number): void {\r\n if (i === j) {\r\n return;\r\n }\r\n const t = a[i];\r\n a[i] = a[j];\r\n a[j] = t;\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n this.closeAssertion();\r\n const ctl = this.idsArr.controls[index];\r\n this.idsArr.removeAt(index);\r\n this.idsArr.insert(index - 1, ctl);\r\n\r\n this.swapArrElems(this._idsSubs, index, index - 1);\r\n\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.idsArr.length) {\r\n return;\r\n }\r\n this.closeAssertion();\r\n const item = this.idsArr.controls[index];\r\n this.idsArr.removeAt(index);\r\n this.idsArr.insert(index + 1, item);\r\n\r\n this.swapArrElems(this._idsSubs, index, index + 1);\r\n\r\n this.emitIdsChange();\r\n }\r\n\r\n public clearIds(): void {\r\n this.closeAssertion();\r\n this.idsArr.clear();\r\n this.unsubscribeIds();\r\n this._idsSubs = [];\r\n if (!this._updatingForm) {\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n public editAssertion(index: number): void {\r\n // save the currently edited assertion if any\r\n this.saveAssertion();\r\n // edit the new assertion\r\n this.initialAssertion = (\r\n this.idsArr.at(index) as FormGroup\r\n ).controls['assertion'].value;\r\n this.assertionNr = index + 1;\r\n this.assEdOpen = true;\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion = assertion;\r\n }\r\n\r\n public saveAssertion(): void {\r\n // save the currently edited assertion if any\r\n if (this.assertionNr) {\r\n const g = this.idsArr.at(this.assertionNr - 1) as FormGroup;\r\n g.controls['assertion'].setValue(this.assertion);\r\n this.closeAssertion();\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n private closeAssertion(): void {\r\n if (this.assertionNr) {\r\n this.assEdOpen = false;\r\n this.assertionNr = 0;\r\n this.initialAssertion = undefined;\r\n }\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!this.idsArr) {\r\n return;\r\n }\r\n this._updatingForm = true;\r\n this.clearIds();\r\n\r\n if (!ids) {\r\n this.form.reset();\r\n } else {\r\n for (const id of ids) {\r\n this.addId(id);\r\n }\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n this.emitIdsChange();\r\n }\r\n\r\n private getIds(): AssertedId[] {\r\n const ids: AssertedId[] = [];\r\n for (let i = 0; i < this.idsArr.length; i++) {\r\n const g = this.idsArr.controls[i] as FormGroup;\r\n ids.push({\r\n value: g.controls.value.value?.trim(),\r\n scope: g.controls.scope.value?.trim(),\r\n tag: g.controls.tag.value?.trim(),\r\n assertion: g.controls.assertion.value,\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.getIds());\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n matTooltip=\"Add a new ID\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { CadmusCoreModule } from '@myrmidon/cadmus-core';\nimport { CadmusRefsAssertionModule } from '@myrmidon/cadmus-refs-assertion';\nimport { CadmusRefsDocReferencesModule } from '@myrmidon/cadmus-refs-doc-references';\n\nimport { AssertedIdComponent } from './asserted-id/asserted-id.component';\nimport { AssertedIdsComponent } from './asserted-ids/asserted-ids.component';\n\n@NgModule({\n declarations: [AssertedIdComponent, AssertedIdsComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // material\n MatButtonModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n // Cadmus\n CadmusCoreModule,\n CadmusRefsDocReferencesModule,\n CadmusRefsAssertionModule,\n ],\n exports: [AssertedIdComponent, AssertedIdsComponent],\n})\nexport class CadmusRefsAssertedIdsModule {}\n","/*\n * Public API Surface of cadmus-refs-asserted-ids\n */\n\nexport * from './lib/asserted-id/asserted-id.component';\nexport * from './lib/asserted-ids/asserted-ids.component';\nexport * from './lib/cadmus-refs-asserted-ids.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i4","i5","i6","i7","i8","i9","i10"],"mappings":"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"}
1
+ {"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/cadmus-refs-asserted-ids.module.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n})\r\nexport class AssertedIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedId | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n public initialAssertion?: Assertion;\r\n public assertion?: Assertion;\r\n\r\n @Input()\r\n public scopeEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedId | undefined {\r\n return this._id;\r\n }\r\n public set id(value: AssertedId | undefined) {\r\n this._id = value;\r\n this.updateForm(value);\r\n }\r\n\r\n @Output()\r\n public idChange: EventEmitter<AssertedId>;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this.idChange = new EventEmitter<AssertedId>();\r\n // form\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n scope: this.scope,\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion = assertion;\r\n setTimeout(() => this.emitIdChange(), 0);\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n this.assertion = undefined;\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.scope.setValue(value.scope);\r\n this.initialAssertion = value.assertion;\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n this.emitIdChange();\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n this.idChange.emit(this.getId());\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\n <div>\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 &nbsp;\n\n <!-- scope (bound) -->\n <mat-form-field *ngIf=\"scopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- scope (free) -->\n <mat-form-field *ngIf=\"!scopeEntries?.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 <!-- value -->\n &nbsp;\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 </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]=\"initialAssertion\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n</form>\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { AssertedId } from '../asserted-id/asserted-id.component';\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n})\r\nexport class AssertedIdsComponent implements OnDestroy {\r\n private _ids: AssertedId[];\r\n private _idSubscription: Subscription | undefined;\r\n private _idsSubs: Subscription[];\r\n private _updatingForm: boolean | undefined;\r\n\r\n @ViewChildren('id') idQueryList: QueryList<any> | undefined;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedId[]) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n\r\n /**\r\n * The ID scopes thesaurus entries.\r\n */\r\n @Input()\r\n public scopeEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * The ID tags thesaurus entries.\r\n */\r\n @Input()\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n // thesauri for assertions\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedId[]>;\r\n\r\n public idsArr: FormArray;\r\n public form: FormGroup;\r\n // edited assertion\r\n public assEdOpen: boolean;\r\n public assertionNr?: number;\r\n public initialAssertion?: Assertion;\r\n public assertion?: Assertion;\r\n\r\n constructor(private _formBuilder: FormBuilder) {\r\n this._ids = [];\r\n this._idsSubs = [];\r\n this.idsChange = new EventEmitter<AssertedId[]>();\r\n this.assEdOpen = false;\r\n // form\r\n this.idsArr = _formBuilder.array([]);\r\n this.form = _formBuilder.group({\r\n idsArr: this.idsArr,\r\n });\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n // focus on newly added ID\r\n this._idSubscription = this.idQueryList?.changes\r\n .pipe(debounceTime(300))\r\n .subscribe((lst: QueryList<any>) => {\r\n if (!this._updatingForm && lst.length > 0) {\r\n lst.last.nativeElement.focus();\r\n }\r\n });\r\n }\r\n\r\n private unsubscribeIds(): void {\r\n for (let i = 0; i < this._idsSubs.length; i++) {\r\n this._idsSubs[i].unsubscribe();\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.unsubscribeIds();\r\n this._idSubscription?.unsubscribe();\r\n }\r\n\r\n private getIdGroup(id?: AssertedId): FormGroup {\r\n return this._formBuilder.group({\r\n value: this._formBuilder.control(id?.value, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]),\r\n scope: this._formBuilder.control(id?.scope, Validators.maxLength(50)),\r\n tag: this._formBuilder.control(id?.tag, Validators.maxLength(50)),\r\n assertion: this._formBuilder.control(id?.assertion),\r\n });\r\n }\r\n\r\n public addId(id?: AssertedId): void {\r\n const g = this.getIdGroup(id);\r\n this._idsSubs.push(\r\n g.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n this.emitIdsChange();\r\n })\r\n );\r\n this.idsArr.push(g);\r\n if (!this._updatingForm) {\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n public removeId(index: number): void {\r\n this.closeAssertion();\r\n this._idsSubs[index].unsubscribe();\r\n this._idsSubs.splice(index, 1);\r\n this.idsArr.removeAt(index);\r\n this.emitIdsChange();\r\n }\r\n\r\n private swapArrElems(a: any[], i: number, j: number): void {\r\n if (i === j) {\r\n return;\r\n }\r\n const t = a[i];\r\n a[i] = a[j];\r\n a[j] = t;\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n this.closeAssertion();\r\n const ctl = this.idsArr.controls[index];\r\n this.idsArr.removeAt(index);\r\n this.idsArr.insert(index - 1, ctl);\r\n\r\n this.swapArrElems(this._idsSubs, index, index - 1);\r\n\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.idsArr.length) {\r\n return;\r\n }\r\n this.closeAssertion();\r\n const item = this.idsArr.controls[index];\r\n this.idsArr.removeAt(index);\r\n this.idsArr.insert(index + 1, item);\r\n\r\n this.swapArrElems(this._idsSubs, index, index + 1);\r\n\r\n this.emitIdsChange();\r\n }\r\n\r\n public clearIds(): void {\r\n this.closeAssertion();\r\n this.idsArr.clear();\r\n this.unsubscribeIds();\r\n this._idsSubs = [];\r\n if (!this._updatingForm) {\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n public editAssertion(index: number): void {\r\n // save the currently edited assertion if any\r\n this.saveAssertion();\r\n // edit the new assertion\r\n this.initialAssertion = (\r\n this.idsArr.at(index) as FormGroup\r\n ).controls['assertion'].value;\r\n this.assertionNr = index + 1;\r\n this.assEdOpen = true;\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion = assertion;\r\n }\r\n\r\n public saveAssertion(): void {\r\n // save the currently edited assertion if any\r\n if (this.assertionNr) {\r\n const g = this.idsArr.at(this.assertionNr - 1) as FormGroup;\r\n g.controls['assertion'].setValue(this.assertion);\r\n this.closeAssertion();\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n private closeAssertion(): void {\r\n if (this.assertionNr) {\r\n this.assEdOpen = false;\r\n this.assertionNr = 0;\r\n this.initialAssertion = undefined;\r\n }\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!this.idsArr) {\r\n return;\r\n }\r\n this._updatingForm = true;\r\n this.clearIds();\r\n\r\n if (!ids) {\r\n this.form.reset();\r\n } else {\r\n for (const id of ids) {\r\n this.addId(id);\r\n }\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n this.emitIdsChange();\r\n }\r\n\r\n private getIds(): AssertedId[] {\r\n const ids: AssertedId[] = [];\r\n for (let i = 0; i < this.idsArr.length; i++) {\r\n const g = this.idsArr.controls[i] as FormGroup;\r\n ids.push({\r\n value: g.controls.value.value?.trim(),\r\n scope: g.controls.scope.value?.trim(),\r\n tag: g.controls.tag.value?.trim(),\r\n assertion: g.controls.assertion.value,\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.getIds());\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { CadmusCoreModule } from '@myrmidon/cadmus-core';\nimport { CadmusRefsAssertionModule } from '@myrmidon/cadmus-refs-assertion';\nimport { CadmusRefsDocReferencesModule } from '@myrmidon/cadmus-refs-doc-references';\n\nimport { AssertedIdComponent } from './asserted-id/asserted-id.component';\nimport { AssertedIdsComponent } from './asserted-ids/asserted-ids.component';\n\n@NgModule({\n declarations: [AssertedIdComponent, AssertedIdsComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // material\n MatButtonModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n // Cadmus\n CadmusCoreModule,\n CadmusRefsDocReferencesModule,\n CadmusRefsAssertionModule,\n ],\n exports: [AssertedIdComponent, AssertedIdsComponent],\n})\nexport class CadmusRefsAssertedIdsModule {}\n","/*\n * Public API Surface of cadmus-refs-asserted-ids\n */\n\nexport * from './lib/asserted-id/asserted-id.component';\nexport * from './lib/asserted-ids/asserted-ids.component';\nexport * from './lib/cadmus-refs-asserted-ids.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i4","i5","i6","i7","i8","i9","i10"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;MAuBa,mBAAmB,CAAA;AAuC9B,IAAA,WAAA,CAAY,WAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAc,CAAC;;AAE/C,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACrC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CAAC,CAAC;KACJ;AA1BD,IAAA,IACW,EAAE,GAAA;QACX,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB;IACD,IAAW,EAAE,CAAC,KAA6B,EAAA;AACzC,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACxB;IAqBD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC7D,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,iBAAiB,CAAC,SAAgC,EAAA;AACvD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;KAC1C;AAEO,IAAA,UAAU,CAAC,KAA6B,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC5B,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAEO,KAAK,GAAA;;QACX,OAAO;YACL,GAAG,EAAE,MAAA,IAAI,CAAC,GAAG,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE;AAC3B,YAAA,KAAK,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,KAAI,EAAE;AACrC,YAAA,KAAK,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,KAAI,EAAE;YACrC,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;KACH;IAEM,YAAY,GAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KAClC;;gHA/FU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,sRCvBhC,owEAoEA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD7Ca,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,owEAAA,EAAA,CAAA;kGAiB5B,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIK,EAAE,EAAA,CAAA;sBADZ,KAAK;gBAUC,QAAQ,EAAA,CAAA;sBADd,MAAM;;;MEpCI,oBAAoB,CAAA;AAwD/B,IAAA,WAAA,CAAoB,YAAyB,EAAA;AAAzB,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAa;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,EAAgB,CAAC;AAClD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;;QAEvB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ;AA1DD;;AAEG;AACH,IAAA,IACW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IACD,IAAW,GAAG,CAAC,KAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACxB;IAkDM,eAAe,GAAA;;;QAEpB,IAAI,CAAC,eAAe,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAC7C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,CACtB,SAAS,CAAC,CAAC,GAAmB,KAAI;YACjC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,gBAAA,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAChC,aAAA;AACH,SAAC,CAAC,CAAC;KACN;IAEO,cAAc,GAAA;AACpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAChC,SAAA;KACF;IAEM,WAAW,GAAA;;QAChB,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,CAAC;KACrC;AAEO,IAAA,UAAU,CAAC,EAAe,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAA,IAAA,IAAF,EAAE,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAF,EAAE,CAAE,KAAK,EAAE;AAC1C,gBAAA,UAAU,CAAC,QAAQ;AACnB,gBAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;aAC1B,CAAC;YACF,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAF,IAAA,IAAA,EAAE,uBAAF,EAAE,CAAE,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACrE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAF,IAAA,IAAA,EAAE,uBAAF,EAAE,CAAE,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACjE,YAAA,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAA,IAAA,IAAF,EAAE,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAF,EAAE,CAAE,SAAS,CAAC;AACpD,SAAA,CAAC,CAAC;KACJ;AAEM,IAAA,KAAK,CAAC,EAAe,EAAA;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YACrD,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB,CAAC,CACH,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;KACF;AAEM,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAEO,IAAA,YAAY,CAAC,CAAQ,EAAE,CAAS,EAAE,CAAS,EAAA;QACjD,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO;AACR,SAAA;AACD,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACV;AAEM,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC3B,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,OAAO;AACR,SAAA;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAEnC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAEM,IAAA,UAAU,CAAC,KAAa,EAAA;QAC7B,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACnC,OAAO;AACR,SAAA;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAEpC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;KACF;AAEM,IAAA,aAAa,CAAC,KAAa,EAAA;;QAEhC,IAAI,CAAC,aAAa,EAAE,CAAC;;AAErB,QAAA,IAAI,CAAC,gBAAgB,GACnB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CACrB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;AAEM,IAAA,iBAAiB,CAAC,SAAgC,EAAA;AACvD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IAEM,aAAa,GAAA;;QAElB,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAc,CAAC;AAC5D,YAAA,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;KACF;IAEO,cAAc,GAAA;QACpB,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACnC,SAAA;KACF;AAEO,IAAA,UAAU,CAAC,GAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACnB,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AACpB,gBAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChB,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,MAAM,GAAA;;QACZ,MAAM,GAAG,GAAiB,EAAE,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC;YAC/C,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK,EAAE,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE;gBACrC,KAAK,EAAE,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE;gBACrC,GAAG,EAAE,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE;AACjC,gBAAA,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK;AACtC,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAEO,aAAa,GAAA;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACpC;;iHA9OU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,6WCvBjC,ylLA8KA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvJa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,ylLAAA,EAAA,CAAA;kGAUhB,WAAW,EAAA,CAAA;sBAA9B,YAAY;uBAAC,IAAI,CAAA;gBAMP,GAAG,EAAA,CAAA;sBADb,KAAK;gBAaC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAOC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAOC,SAAS,EAAA,CAAA;sBADf,MAAM;;;ME9BI,2BAA2B,CAAA;;wHAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAnBvB,YAAA,EAAA,CAAA,mBAAmB,EAAE,oBAAoB,aAEtD,YAAY;QACZ,WAAW;QACX,mBAAmB;;QAEnB,eAAe;QACf,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,eAAe;;QAEf,gBAAgB;QAChB,6BAA6B;QAC7B,yBAAyB,CAAA,EAAA,OAAA,EAAA,CAEjB,mBAAmB,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAExC,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAjBpC,YAAY;QACZ,WAAW;QACX,mBAAmB;;QAEnB,eAAe;QACf,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,eAAe;;QAEf,gBAAgB;QAChB,6BAA6B;QAC7B,yBAAyB,CAAA,EAAA,CAAA,CAAA;2FAIhB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBApBvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;AACzD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;;wBAEnB,eAAe;wBACf,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;;wBAEf,gBAAgB;wBAChB,6BAA6B;wBAC7B,yBAAyB;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;iBACrD,CAAA;;;ACrCD;;AAEG;;ACFH;;AAEG;;;;"}
@@ -278,10 +278,10 @@ class AssertedIdsComponent {
278
278
  }
279
279
  }
280
280
  AssertedIdsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: AssertedIdsComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
281
- AssertedIdsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: AssertedIdsComponent, selector: "cadmus-refs-asserted-ids", inputs: { ids: "ids", scopeEntries: "scopeEntries", tagEntries: "tagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries" }, outputs: { idsChange: "idsChange" }, viewQueries: [{ propertyName: "idQueryList", predicate: ["id"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n matTooltip=\"Add a new ID\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion"], outputs: ["assertionChange"] }] });
281
+ AssertedIdsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: AssertedIdsComponent, selector: "cadmus-refs-asserted-ids", inputs: { ids: "ids", scopeEntries: "scopeEntries", tagEntries: "tagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries" }, outputs: { idsChange: "idsChange" }, viewQueries: [{ propertyName: "idQueryList", predicate: ["id"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion"], outputs: ["assertionChange"] }] });
282
282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: AssertedIdsComponent, decorators: [{
283
283
  type: Component,
284
- args: [{ selector: 'cadmus-refs-asserted-ids', template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n matTooltip=\"Add a new ID\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n" }]
284
+ args: [{ selector: 'cadmus-refs-asserted-ids', template: "<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n" }]
285
285
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { idQueryList: [{
286
286
  type: ViewChildren,
287
287
  args: ['id']
@@ -366,3 +366,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
366
366
 
367
367
  export { AssertedIdComponent, AssertedIdsComponent, CadmusRefsAssertedIdsModule };
368
368
  //# sourceMappingURL=myrmidon-cadmus-refs-asserted-ids.mjs.map
369
+ //# sourceMappingURL=myrmidon-cadmus-refs-asserted-ids.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/cadmus-refs-asserted-ids.module.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n})\r\nexport class AssertedIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedId | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n public initialAssertion?: Assertion;\r\n public assertion?: Assertion;\r\n\r\n @Input()\r\n public scopeEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedId | undefined {\r\n return this._id;\r\n }\r\n public set id(value: AssertedId | undefined) {\r\n this._id = value;\r\n this.updateForm(value);\r\n }\r\n\r\n @Output()\r\n public idChange: EventEmitter<AssertedId>;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this.idChange = new EventEmitter<AssertedId>();\r\n // form\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n scope: this.scope,\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion = assertion;\r\n setTimeout(() => this.emitIdChange(), 0);\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n this.assertion = undefined;\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.scope.setValue(value.scope);\r\n this.initialAssertion = value.assertion;\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n this.emitIdChange();\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n this.idChange.emit(this.getId());\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\n <div>\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 &nbsp;\n\n <!-- scope (bound) -->\n <mat-form-field *ngIf=\"scopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- scope (free) -->\n <mat-form-field *ngIf=\"!scopeEntries?.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 <!-- value -->\n &nbsp;\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 </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]=\"initialAssertion\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n</form>\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { AssertedId } from '../asserted-id/asserted-id.component';\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n})\r\nexport class AssertedIdsComponent implements OnDestroy {\r\n private _ids: AssertedId[];\r\n private _idSubscription: Subscription | undefined;\r\n private _idsSubs: Subscription[];\r\n private _updatingForm: boolean | undefined;\r\n\r\n @ViewChildren('id') idQueryList: QueryList<any> | undefined;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedId[]) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n\r\n /**\r\n * The ID scopes thesaurus entries.\r\n */\r\n @Input()\r\n public scopeEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * The ID tags thesaurus entries.\r\n */\r\n @Input()\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n // thesauri for assertions\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedId[]>;\r\n\r\n public idsArr: FormArray;\r\n public form: FormGroup;\r\n // edited assertion\r\n public assEdOpen: boolean;\r\n public assertionNr?: number;\r\n public initialAssertion?: Assertion;\r\n public assertion?: Assertion;\r\n\r\n constructor(private _formBuilder: FormBuilder) {\r\n this._ids = [];\r\n this._idsSubs = [];\r\n this.idsChange = new EventEmitter<AssertedId[]>();\r\n this.assEdOpen = false;\r\n // form\r\n this.idsArr = _formBuilder.array([]);\r\n this.form = _formBuilder.group({\r\n idsArr: this.idsArr,\r\n });\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n // focus on newly added ID\r\n this._idSubscription = this.idQueryList?.changes\r\n .pipe(debounceTime(300))\r\n .subscribe((lst: QueryList<any>) => {\r\n if (!this._updatingForm && lst.length > 0) {\r\n lst.last.nativeElement.focus();\r\n }\r\n });\r\n }\r\n\r\n private unsubscribeIds(): void {\r\n for (let i = 0; i < this._idsSubs.length; i++) {\r\n this._idsSubs[i].unsubscribe();\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.unsubscribeIds();\r\n this._idSubscription?.unsubscribe();\r\n }\r\n\r\n private getIdGroup(id?: AssertedId): FormGroup {\r\n return this._formBuilder.group({\r\n value: this._formBuilder.control(id?.value, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]),\r\n scope: this._formBuilder.control(id?.scope, Validators.maxLength(50)),\r\n tag: this._formBuilder.control(id?.tag, Validators.maxLength(50)),\r\n assertion: this._formBuilder.control(id?.assertion),\r\n });\r\n }\r\n\r\n public addId(id?: AssertedId): void {\r\n const g = this.getIdGroup(id);\r\n this._idsSubs.push(\r\n g.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n this.emitIdsChange();\r\n })\r\n );\r\n this.idsArr.push(g);\r\n if (!this._updatingForm) {\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n public removeId(index: number): void {\r\n this.closeAssertion();\r\n this._idsSubs[index].unsubscribe();\r\n this._idsSubs.splice(index, 1);\r\n this.idsArr.removeAt(index);\r\n this.emitIdsChange();\r\n }\r\n\r\n private swapArrElems(a: any[], i: number, j: number): void {\r\n if (i === j) {\r\n return;\r\n }\r\n const t = a[i];\r\n a[i] = a[j];\r\n a[j] = t;\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n this.closeAssertion();\r\n const ctl = this.idsArr.controls[index];\r\n this.idsArr.removeAt(index);\r\n this.idsArr.insert(index - 1, ctl);\r\n\r\n this.swapArrElems(this._idsSubs, index, index - 1);\r\n\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.idsArr.length) {\r\n return;\r\n }\r\n this.closeAssertion();\r\n const item = this.idsArr.controls[index];\r\n this.idsArr.removeAt(index);\r\n this.idsArr.insert(index + 1, item);\r\n\r\n this.swapArrElems(this._idsSubs, index, index + 1);\r\n\r\n this.emitIdsChange();\r\n }\r\n\r\n public clearIds(): void {\r\n this.closeAssertion();\r\n this.idsArr.clear();\r\n this.unsubscribeIds();\r\n this._idsSubs = [];\r\n if (!this._updatingForm) {\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n public editAssertion(index: number): void {\r\n // save the currently edited assertion if any\r\n this.saveAssertion();\r\n // edit the new assertion\r\n this.initialAssertion = (\r\n this.idsArr.at(index) as FormGroup\r\n ).controls['assertion'].value;\r\n this.assertionNr = index + 1;\r\n this.assEdOpen = true;\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion = assertion;\r\n }\r\n\r\n public saveAssertion(): void {\r\n // save the currently edited assertion if any\r\n if (this.assertionNr) {\r\n const g = this.idsArr.at(this.assertionNr - 1) as FormGroup;\r\n g.controls['assertion'].setValue(this.assertion);\r\n this.closeAssertion();\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n private closeAssertion(): void {\r\n if (this.assertionNr) {\r\n this.assEdOpen = false;\r\n this.assertionNr = 0;\r\n this.initialAssertion = undefined;\r\n }\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!this.idsArr) {\r\n return;\r\n }\r\n this._updatingForm = true;\r\n this.clearIds();\r\n\r\n if (!ids) {\r\n this.form.reset();\r\n } else {\r\n for (const id of ids) {\r\n this.addId(id);\r\n }\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n this.emitIdsChange();\r\n }\r\n\r\n private getIds(): AssertedId[] {\r\n const ids: AssertedId[] = [];\r\n for (let i = 0; i < this.idsArr.length; i++) {\r\n const g = this.idsArr.controls[i] as FormGroup;\r\n ids.push({\r\n value: g.controls.value.value?.trim(),\r\n scope: g.controls.scope.value?.trim(),\r\n tag: g.controls.tag.value?.trim(),\r\n assertion: g.controls.assertion.value,\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.getIds());\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n matTooltip=\"Add a new ID\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { CadmusCoreModule } from '@myrmidon/cadmus-core';\nimport { CadmusRefsAssertionModule } from '@myrmidon/cadmus-refs-assertion';\nimport { CadmusRefsDocReferencesModule } from '@myrmidon/cadmus-refs-doc-references';\n\nimport { AssertedIdComponent } from './asserted-id/asserted-id.component';\nimport { AssertedIdsComponent } from './asserted-ids/asserted-ids.component';\n\n@NgModule({\n declarations: [AssertedIdComponent, AssertedIdsComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // material\n MatButtonModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n // Cadmus\n CadmusCoreModule,\n CadmusRefsDocReferencesModule,\n CadmusRefsAssertionModule,\n ],\n exports: [AssertedIdComponent, AssertedIdsComponent],\n})\nexport class CadmusRefsAssertedIdsModule {}\n","/*\n * Public API Surface of cadmus-refs-asserted-ids\n */\n\nexport * from './lib/asserted-id/asserted-id.component';\nexport * from './lib/asserted-ids/asserted-ids.component';\nexport * from './lib/cadmus-refs-asserted-ids.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i4","i5","i6","i7","i8","i9","i10"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;MAuBa,mBAAmB,CAAA;AAuC9B,IAAA,WAAA,CAAY,WAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAc,CAAC;;AAE/C,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACrC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CAAC,CAAC;KACJ;AA1BD,IAAA,IACW,EAAE,GAAA;QACX,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB;IACD,IAAW,EAAE,CAAC,KAA6B,EAAA;AACzC,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACxB;IAqBD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC7D,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,iBAAiB,CAAC,SAAgC,EAAA;AACvD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;KAC1C;AAEO,IAAA,UAAU,CAAC,KAA6B,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC5B,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAEO,KAAK,GAAA;QACX,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;YACrC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;YACrC,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;KACH;IAEM,YAAY,GAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KAClC;;gHA/FU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,sRCvBhC,owEAoEA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD7Ca,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,owEAAA,EAAA,CAAA;kGAiB5B,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIK,EAAE,EAAA,CAAA;sBADZ,KAAK;gBAUC,QAAQ,EAAA,CAAA;sBADd,MAAM;;;MEpCI,oBAAoB,CAAA;AAwD/B,IAAA,WAAA,CAAoB,YAAyB,EAAA;QAAzB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAa;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,EAAgB,CAAC;AAClD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;;QAEvB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ;AA1DD;;AAEG;AACH,IAAA,IACW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IACD,IAAW,GAAG,CAAC,KAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACxB;IAkDM,eAAe,GAAA;;AAEpB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO;AAC7C,aAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACvB,aAAA,SAAS,CAAC,CAAC,GAAmB,KAAI;YACjC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,gBAAA,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAChC,aAAA;AACH,SAAC,CAAC,CAAC;KACN;IAEO,cAAc,GAAA;AACpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAChC,SAAA;KACF;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC;KACrC;AAEO,IAAA,UAAU,CAAC,EAAe,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE;AAC1C,gBAAA,UAAU,CAAC,QAAQ;AACnB,gBAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;aAC1B,CAAC;AACF,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACrE,YAAA,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACjE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC;AACpD,SAAA,CAAC,CAAC;KACJ;AAEM,IAAA,KAAK,CAAC,EAAe,EAAA;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YACrD,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB,CAAC,CACH,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;KACF;AAEM,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAEO,IAAA,YAAY,CAAC,CAAQ,EAAE,CAAS,EAAE,CAAS,EAAA;QACjD,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO;AACR,SAAA;AACD,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACV;AAEM,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC3B,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,OAAO;AACR,SAAA;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAEnC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAEM,IAAA,UAAU,CAAC,KAAa,EAAA;QAC7B,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACnC,OAAO;AACR,SAAA;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAEpC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;KACF;AAEM,IAAA,aAAa,CAAC,KAAa,EAAA;;QAEhC,IAAI,CAAC,aAAa,EAAE,CAAC;;AAErB,QAAA,IAAI,CAAC,gBAAgB,GACnB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CACrB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;AAEM,IAAA,iBAAiB,CAAC,SAAgC,EAAA;AACvD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IAEM,aAAa,GAAA;;QAElB,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAc,CAAC;AAC5D,YAAA,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;KACF;IAEO,cAAc,GAAA;QACpB,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACnC,SAAA;KACF;AAEO,IAAA,UAAU,CAAC,GAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACnB,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AACpB,gBAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChB,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,MAAM,GAAA;QACZ,MAAM,GAAG,GAAiB,EAAE,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC;YAC/C,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;gBACrC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;gBACrC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE;AACjC,gBAAA,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK;AACtC,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAEO,aAAa,GAAA;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACpC;;iHA9OU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,6WCvBjC,moLA+KA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDxJa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,moLAAA,EAAA,CAAA;kGAUhB,WAAW,EAAA,CAAA;sBAA9B,YAAY;uBAAC,IAAI,CAAA;gBAMP,GAAG,EAAA,CAAA;sBADb,KAAK;gBAaC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAOC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAOC,SAAS,EAAA,CAAA;sBADf,MAAM;;;ME9BI,2BAA2B,CAAA;;wHAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAnBvB,YAAA,EAAA,CAAA,mBAAmB,EAAE,oBAAoB,aAEtD,YAAY;QACZ,WAAW;QACX,mBAAmB;;QAEnB,eAAe;QACf,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,eAAe;;QAEf,gBAAgB;QAChB,6BAA6B;QAC7B,yBAAyB,CAAA,EAAA,OAAA,EAAA,CAEjB,mBAAmB,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAExC,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAjBpC,YAAY;QACZ,WAAW;QACX,mBAAmB;;QAEnB,eAAe;QACf,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,eAAe;;QAEf,gBAAgB;QAChB,6BAA6B;QAC7B,yBAAyB,CAAA,EAAA,CAAA,CAAA;2FAIhB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBApBvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;AACzD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;;wBAEnB,eAAe;wBACf,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,eAAe;;wBAEf,gBAAgB;wBAChB,6BAA6B;wBAC7B,yBAAyB;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;AACrD,iBAAA,CAAA;;;ACrCD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/cadmus-refs-asserted-ids.module.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n})\r\nexport class AssertedIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedId | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n public initialAssertion?: Assertion;\r\n public assertion?: Assertion;\r\n\r\n @Input()\r\n public scopeEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedId | undefined {\r\n return this._id;\r\n }\r\n public set id(value: AssertedId | undefined) {\r\n this._id = value;\r\n this.updateForm(value);\r\n }\r\n\r\n @Output()\r\n public idChange: EventEmitter<AssertedId>;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this.idChange = new EventEmitter<AssertedId>();\r\n // form\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n scope: this.scope,\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion = assertion;\r\n setTimeout(() => this.emitIdChange(), 0);\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n this.assertion = undefined;\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.scope.setValue(value.scope);\r\n this.initialAssertion = value.assertion;\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n this.emitIdChange();\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n this.idChange.emit(this.getId());\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\n <div>\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 &nbsp;\n\n <!-- scope (bound) -->\n <mat-form-field *ngIf=\"scopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- scope (free) -->\n <mat-form-field *ngIf=\"!scopeEntries?.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 <!-- value -->\n &nbsp;\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 </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]=\"initialAssertion\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n</form>\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { AssertedId } from '../asserted-id/asserted-id.component';\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n})\r\nexport class AssertedIdsComponent implements OnDestroy {\r\n private _ids: AssertedId[];\r\n private _idSubscription: Subscription | undefined;\r\n private _idsSubs: Subscription[];\r\n private _updatingForm: boolean | undefined;\r\n\r\n @ViewChildren('id') idQueryList: QueryList<any> | undefined;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedId[]) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n\r\n /**\r\n * The ID scopes thesaurus entries.\r\n */\r\n @Input()\r\n public scopeEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * The ID tags thesaurus entries.\r\n */\r\n @Input()\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n // thesauri for assertions\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedId[]>;\r\n\r\n public idsArr: FormArray;\r\n public form: FormGroup;\r\n // edited assertion\r\n public assEdOpen: boolean;\r\n public assertionNr?: number;\r\n public initialAssertion?: Assertion;\r\n public assertion?: Assertion;\r\n\r\n constructor(private _formBuilder: FormBuilder) {\r\n this._ids = [];\r\n this._idsSubs = [];\r\n this.idsChange = new EventEmitter<AssertedId[]>();\r\n this.assEdOpen = false;\r\n // form\r\n this.idsArr = _formBuilder.array([]);\r\n this.form = _formBuilder.group({\r\n idsArr: this.idsArr,\r\n });\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n // focus on newly added ID\r\n this._idSubscription = this.idQueryList?.changes\r\n .pipe(debounceTime(300))\r\n .subscribe((lst: QueryList<any>) => {\r\n if (!this._updatingForm && lst.length > 0) {\r\n lst.last.nativeElement.focus();\r\n }\r\n });\r\n }\r\n\r\n private unsubscribeIds(): void {\r\n for (let i = 0; i < this._idsSubs.length; i++) {\r\n this._idsSubs[i].unsubscribe();\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.unsubscribeIds();\r\n this._idSubscription?.unsubscribe();\r\n }\r\n\r\n private getIdGroup(id?: AssertedId): FormGroup {\r\n return this._formBuilder.group({\r\n value: this._formBuilder.control(id?.value, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]),\r\n scope: this._formBuilder.control(id?.scope, Validators.maxLength(50)),\r\n tag: this._formBuilder.control(id?.tag, Validators.maxLength(50)),\r\n assertion: this._formBuilder.control(id?.assertion),\r\n });\r\n }\r\n\r\n public addId(id?: AssertedId): void {\r\n const g = this.getIdGroup(id);\r\n this._idsSubs.push(\r\n g.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n this.emitIdsChange();\r\n })\r\n );\r\n this.idsArr.push(g);\r\n if (!this._updatingForm) {\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n public removeId(index: number): void {\r\n this.closeAssertion();\r\n this._idsSubs[index].unsubscribe();\r\n this._idsSubs.splice(index, 1);\r\n this.idsArr.removeAt(index);\r\n this.emitIdsChange();\r\n }\r\n\r\n private swapArrElems(a: any[], i: number, j: number): void {\r\n if (i === j) {\r\n return;\r\n }\r\n const t = a[i];\r\n a[i] = a[j];\r\n a[j] = t;\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n this.closeAssertion();\r\n const ctl = this.idsArr.controls[index];\r\n this.idsArr.removeAt(index);\r\n this.idsArr.insert(index - 1, ctl);\r\n\r\n this.swapArrElems(this._idsSubs, index, index - 1);\r\n\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.idsArr.length) {\r\n return;\r\n }\r\n this.closeAssertion();\r\n const item = this.idsArr.controls[index];\r\n this.idsArr.removeAt(index);\r\n this.idsArr.insert(index + 1, item);\r\n\r\n this.swapArrElems(this._idsSubs, index, index + 1);\r\n\r\n this.emitIdsChange();\r\n }\r\n\r\n public clearIds(): void {\r\n this.closeAssertion();\r\n this.idsArr.clear();\r\n this.unsubscribeIds();\r\n this._idsSubs = [];\r\n if (!this._updatingForm) {\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n public editAssertion(index: number): void {\r\n // save the currently edited assertion if any\r\n this.saveAssertion();\r\n // edit the new assertion\r\n this.initialAssertion = (\r\n this.idsArr.at(index) as FormGroup\r\n ).controls['assertion'].value;\r\n this.assertionNr = index + 1;\r\n this.assEdOpen = true;\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion = assertion;\r\n }\r\n\r\n public saveAssertion(): void {\r\n // save the currently edited assertion if any\r\n if (this.assertionNr) {\r\n const g = this.idsArr.at(this.assertionNr - 1) as FormGroup;\r\n g.controls['assertion'].setValue(this.assertion);\r\n this.closeAssertion();\r\n this.emitIdsChange();\r\n }\r\n }\r\n\r\n private closeAssertion(): void {\r\n if (this.assertionNr) {\r\n this.assEdOpen = false;\r\n this.assertionNr = 0;\r\n this.initialAssertion = undefined;\r\n }\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!this.idsArr) {\r\n return;\r\n }\r\n this._updatingForm = true;\r\n this.clearIds();\r\n\r\n if (!ids) {\r\n this.form.reset();\r\n } else {\r\n for (const id of ids) {\r\n this.addId(id);\r\n }\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n this.emitIdsChange();\r\n }\r\n\r\n private getIds(): AssertedId[] {\r\n const ids: AssertedId[] = [];\r\n for (let i = 0; i < this.idsArr.length; i++) {\r\n const g = this.idsArr.controls[i] as FormGroup;\r\n ids.push({\r\n value: g.controls.value.value?.trim(),\r\n scope: g.controls.scope.value?.trim(),\r\n tag: g.controls.tag.value?.trim(),\r\n assertion: g.controls.assertion.value,\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.getIds());\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <div formArrayName=\"idsArr\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> add ID\r\n </button>\r\n </div>\r\n <div\r\n *ngFor=\"\r\n let item of idsArr.controls;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\">\r\n <!-- child actions -->\r\n {{ i + 1 }}.\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this ID\"\r\n color=\"warn\"\r\n (click)=\"removeId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID up\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move ID down\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n\r\n <!-- child controls -->\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>external ID</mat-label>\r\n <input #id autofocus matInput formControlName=\"value\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('required') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID required\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].value?.hasError('max-length') &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched)\r\n \"\r\n >ID too long\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n &nbsp;\r\n <!-- scope (bound) -->\r\n <ng-container *ngIf=\"scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <mat-select formControlName=\"scope\">\r\n <mat-option *ngFor=\"let e of scopeEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- scope (free) -->\r\n <ng-container *ngIf=\"!scopeEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>scope</mat-label>\r\n <input matInput formControlName=\"scope\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].scope?.hasError('max-length') &&\r\n ($any(item)['controls'].scope.dirty ||\r\n $any(item)['controls'].scope.touched)\r\n \"\r\n >scope too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n &nbsp;\r\n <!-- tag (bound) -->\r\n <ng-container *ngIf=\"tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n <mat-option *ngFor=\"let e of tagEntries\" [value]=\"e.id\">\r\n {{ e.value }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- tag (free) -->\r\n <ng-container *ngIf=\"!tagEntries\">\r\n <mat-form-field style=\"width: 8em\">\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(item)['controls'].tag?.hasError('max-length') &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched)\r\n \"\r\n >tag too long\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- assertion -->\r\n &nbsp;\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit assertion\"\r\n (click)=\"editAssertion(i)\"\r\n >\r\n <mat-icon>feedback</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- assertion -->\r\n <mat-expansion-panel\r\n *ngIf=\"idsArr?.length\"\r\n [disabled]=\"!assertionNr\"\r\n [(expanded)]=\"assEdOpen\"\r\n >\r\n <mat-expansion-panel-header\r\n >#{{ assertionNr }} assertion</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-assertion\r\n [assertion]=\"initialAssertion\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n ></cadmus-refs-assertion>\r\n <button\r\n color=\"primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n style=\"margin-top: 6px;\"\r\n (click)=\"saveAssertion()\"\r\n >\r\n <mat-icon>check_circle</mat-icon> assertion\r\n </button>\r\n </mat-expansion-panel>\r\n </div>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { CadmusCoreModule } from '@myrmidon/cadmus-core';\nimport { CadmusRefsAssertionModule } from '@myrmidon/cadmus-refs-assertion';\nimport { CadmusRefsDocReferencesModule } from '@myrmidon/cadmus-refs-doc-references';\n\nimport { AssertedIdComponent } from './asserted-id/asserted-id.component';\nimport { AssertedIdsComponent } from './asserted-ids/asserted-ids.component';\n\n@NgModule({\n declarations: [AssertedIdComponent, AssertedIdsComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // material\n MatButtonModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n // Cadmus\n CadmusCoreModule,\n CadmusRefsDocReferencesModule,\n CadmusRefsAssertionModule,\n ],\n exports: [AssertedIdComponent, AssertedIdsComponent],\n})\nexport class CadmusRefsAssertedIdsModule {}\n","/*\n * Public API Surface of cadmus-refs-asserted-ids\n */\n\nexport * from './lib/asserted-id/asserted-id.component';\nexport * from './lib/asserted-ids/asserted-ids.component';\nexport * from './lib/cadmus-refs-asserted-ids.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i4","i5","i6","i7","i8","i9","i10"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myrmidon/cadmus-refs-asserted-ids",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Cadmus - asserted IDs components.",
5
5
  "keywords": [
6
6
  "Cadmus",