@myrmidon/cadmus-part-general-ui 15.0.4 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,7 +24,7 @@ import { CommonModule, TitleCasePipe, DatePipe } from '@angular/common';
24
24
  import * as i5 from '@angular/material/card';
25
25
  import { MatCardModule, MatCard, MatCardHeader, MatCardAvatar, MatCardTitle, MatCardContent, MatCardActions, MatCardSubtitle } from '@angular/material/card';
26
26
  import { NgxToolsValidators, deepCopy, FlatLookupPipe } from '@myrmidon/ngx-tools';
27
- import { ModelEditorComponentBase, CloseSaveButtonsComponent, renderLabelFromLastColon, ThesaurusTreeComponent } from '@myrmidon/cadmus-ui';
27
+ import { ModelEditorComponentBase, CloseSaveButtonsComponent } from '@myrmidon/cadmus-ui';
28
28
  import * as i1 from '@myrmidon/auth-jwt-login';
29
29
  import * as i3 from '@myrmidon/ngx-mat-tools';
30
30
  import { distinctUntilChanged, take, debounceTime } from 'rxjs/operators';
@@ -32,15 +32,16 @@ import { MatTabGroup, MatTab } from '@angular/material/tabs';
32
32
  import { MatOption } from '@angular/material/core';
33
33
  import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker';
34
34
  import { MatBadge } from '@angular/material/badge';
35
+ import { renderLabelFromLastColon, ThesaurusTreeComponent } from '@myrmidon/cadmus-thesaurus-store';
35
36
  import { AssertedChronotopeComponent, AssertedChronotopesPipe, AssertedChronotopeSetComponent } from '@myrmidon/cadmus-refs-asserted-chronotope';
36
37
  import * as i4$4 from '@cisstech/nge/monaco';
37
38
  import { NgeMonacoModule } from '@cisstech/nge/monaco';
39
+ import * as i5$1 from '@cisstech/nge/markdown';
40
+ import { NgeMarkdownModule } from '@cisstech/nge/markdown';
38
41
  import { DocReferencesComponent } from '@myrmidon/cadmus-refs-doc-references';
39
42
  import { AssertedCompositeIdsComponent, AssertedIdsComponent, AssertedCompositeIdComponent } from '@myrmidon/cadmus-refs-asserted-ids';
40
43
  import * as i3$1 from '@myrmidon/cadmus-text-ed';
41
44
  import { CADMUS_TEXT_ED_BINDINGS_TOKEN, CadmusTextEdService } from '@myrmidon/cadmus-text-ed';
42
- import * as i5$1 from '@cisstech/nge/markdown';
43
- import { NgeMarkdownModule } from '@cisstech/nge/markdown';
44
45
  import { DecoratedCountsComponent } from '@myrmidon/cadmus-refs-decorated-counts';
45
46
  import { ProperNameComponent, CadmusProperNamePipe } from '@myrmidon/cadmus-refs-proper-name';
46
47
  import { LookupDocReferencesComponent } from '@myrmidon/cadmus-refs-lookup';
@@ -296,10 +297,10 @@ class AssertedHistoricalDateComponent {
296
297
  const date = this.getDate();
297
298
  this.date.set(date);
298
299
  }
299
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: AssertedHistoricalDateComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
300
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: AssertedHistoricalDateComponent, isStandalone: true, selector: "cadmus-asserted-historical-date", inputs: { date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: false, transformFunction: null }, tagEntries: { classPropertyName: "tagEntries", publicName: "tagEntries", isSignal: true, isRequired: false, transformFunction: null }, assertionTagEntries: { classPropertyName: "assertionTagEntries", publicName: "assertionTagEntries", isSignal: true, isRequired: false, transformFunction: null }, docReferenceTypeEntries: { classPropertyName: "docReferenceTypeEntries", publicName: "docReferenceTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, docReferenceTagEntries: { classPropertyName: "docReferenceTagEntries", publicName: "docReferenceTagEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { date: "dateChange", dateCancel: "dateCancel" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <!-- tag (bound) -->\r\n @if (tagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of tagEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if (tag.hasError('max-length') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <div>\r\n <!-- date -->\r\n <cadmus-refs-historical-date\r\n [date]=\"hd.value || undefined\"\r\n (dateChange)=\"onDateChange($event)\"\r\n />\r\n <mat-expansion-panel>\r\n <!-- assertion -->\r\n <mat-expansion-panel-header>date assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assertionTagEntries()\"\r\n [refTypeEntries]=\"docReferenceTypeEntries()\"\r\n [refTagEntries]=\"docReferenceTagEntries()\"\r\n [assertion]=\"assertion.value || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Discard changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Accept changes\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: HistoricalDateComponent, selector: "cadmus-refs-historical-date", inputs: ["date", "label", "disabled"], outputs: ["dateChange"] }, { kind: "component", type: AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion", "noLookup", "noCitation", "defaultPicker"], outputs: ["assertionChange"] }] });
300
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AssertedHistoricalDateComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
301
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: AssertedHistoricalDateComponent, isStandalone: true, selector: "cadmus-asserted-historical-date", inputs: { date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: false, transformFunction: null }, tagEntries: { classPropertyName: "tagEntries", publicName: "tagEntries", isSignal: true, isRequired: false, transformFunction: null }, assertionTagEntries: { classPropertyName: "assertionTagEntries", publicName: "assertionTagEntries", isSignal: true, isRequired: false, transformFunction: null }, docReferenceTypeEntries: { classPropertyName: "docReferenceTypeEntries", publicName: "docReferenceTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, docReferenceTagEntries: { classPropertyName: "docReferenceTagEntries", publicName: "docReferenceTagEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { date: "dateChange", dateCancel: "dateCancel" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <!-- tag (bound) -->\r\n @if (tagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of tagEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if (tag.hasError('max-length') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <div>\r\n <!-- date -->\r\n <cadmus-refs-historical-date\r\n [date]=\"hd.value || undefined\"\r\n (dateChange)=\"onDateChange($event)\"\r\n />\r\n <mat-expansion-panel>\r\n <!-- assertion -->\r\n <mat-expansion-panel-header>date assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assertionTagEntries()\"\r\n [refTypeEntries]=\"docReferenceTypeEntries()\"\r\n [refTagEntries]=\"docReferenceTagEntries()\"\r\n [assertion]=\"assertion.value || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Discard changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Accept changes\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: HistoricalDateComponent, selector: "cadmus-refs-historical-date", inputs: ["date", "label", "disabled"], outputs: ["dateChange"] }, { kind: "component", type: AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion", "noLookup", "noCitation", "defaultPicker"], outputs: ["assertionChange"] }] });
301
302
  }
302
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: AssertedHistoricalDateComponent, decorators: [{
303
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AssertedHistoricalDateComponent, decorators: [{
303
304
  type: Component,
304
305
  args: [{ selector: 'cadmus-asserted-historical-date', imports: [
305
306
  ReactiveFormsModule,
@@ -488,12 +489,12 @@ class AssertedHistoricalDatesPartComponent extends ModelEditorComponentBase {
488
489
  this.dates.markAsDirty();
489
490
  this.dates.updateValueAndValidity();
490
491
  }
491
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: AssertedHistoricalDatesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
492
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: AssertedHistoricalDatesPartComponent, isStandalone: true, selector: "cadmus-asserted-historical-dates-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Historical Dates\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n [disabled]=\"maxDateCount() > 0 && dates.value.length >= maxDateCount()\"\r\n (click)=\"addDate()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> date\r\n </button>\r\n </div>\r\n @if (dates.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>date</th>\r\n <th>tag</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (date of dates.value; track date; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n class=\"mat-primary\"\r\n matTooltip=\"Edit this date\"\r\n (click)=\"editDate(date, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this date up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveDateUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this date down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveDateDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n class=\"mat-warn\"\r\n matTooltip=\"Delete this date\"\r\n (click)=\"deleteDate(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ date | historicalDate }}</td>\r\n <td>{{ date.tag | flatLookup : tagEntries() : \"id\" : \"value\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @if (edited()) {\r\n <fieldset>\r\n <mat-expansion-panel [expanded]=\"edited()\" [disabled]=\"!edited()\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>Date #</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-asserted-historical-date\r\n [date]=\"edited()\"\r\n (dateChange)=\"saveDate($event!)\"\r\n [tagEntries]=\"tagEntries()\"\r\n [assertionTagEntries]=\"assertionTagEntries()\"\r\n [docReferenceTagEntries]=\"docReferenceTagEntries()\"\r\n [docReferenceTypeEntries]=\"docReferenceTypeEntries()\"\r\n (dateCancel)=\"closeDate()\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i5.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i5.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: AssertedHistoricalDateComponent, selector: "cadmus-asserted-historical-date", inputs: ["date", "tagEntries", "assertionTagEntries", "docReferenceTypeEntries", "docReferenceTagEntries"], outputs: ["dateChange", "dateCancel"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type:
492
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AssertedHistoricalDatesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
493
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: AssertedHistoricalDatesPartComponent, isStandalone: true, selector: "cadmus-asserted-historical-dates-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Historical Dates\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n [disabled]=\"maxDateCount() > 0 && dates.value.length >= maxDateCount()\"\r\n (click)=\"addDate()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> date\r\n </button>\r\n </div>\r\n @if (dates.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>date</th>\r\n <th>tag</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (date of dates.value; track date; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n class=\"mat-primary\"\r\n matTooltip=\"Edit this date\"\r\n (click)=\"editDate(date, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this date up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveDateUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this date down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveDateDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n class=\"mat-warn\"\r\n matTooltip=\"Delete this date\"\r\n (click)=\"deleteDate(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ date | historicalDate }}</td>\r\n <td>{{ date.tag | flatLookup : tagEntries() : \"id\" : \"value\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @if (edited()) {\r\n <fieldset>\r\n <mat-expansion-panel [expanded]=\"edited()\" [disabled]=\"!edited()\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>Date #</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-asserted-historical-date\r\n [date]=\"edited()\"\r\n (dateChange)=\"saveDate($event!)\"\r\n [tagEntries]=\"tagEntries()\"\r\n [assertionTagEntries]=\"assertionTagEntries()\"\r\n [docReferenceTagEntries]=\"docReferenceTagEntries()\"\r\n [docReferenceTypeEntries]=\"docReferenceTypeEntries()\"\r\n (dateCancel)=\"closeDate()\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i5.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i5.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: AssertedHistoricalDateComponent, selector: "cadmus-asserted-historical-date", inputs: ["date", "tagEntries", "assertionTagEntries", "docReferenceTypeEntries", "docReferenceTagEntries"], outputs: ["dateChange", "dateCancel"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type:
493
494
  // cadmus
494
495
  FlatLookupPipe, name: "flatLookup" }, { kind: "pipe", type: HistoricalDatePipe, name: "historicalDate" }] });
495
496
  }
496
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: AssertedHistoricalDatesPartComponent, decorators: [{
497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AssertedHistoricalDatesPartComponent, decorators: [{
497
498
  type: Component,
498
499
  args: [{ selector: 'cadmus-asserted-historical-dates-part', imports: [
499
500
  CommonModule,
@@ -594,10 +595,10 @@ class BibAuthorEditorComponent {
594
595
  this.form.markAsPristine();
595
596
  }
596
597
  }
597
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BibAuthorEditorComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
598
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: BibAuthorEditorComponent, isStandalone: true, selector: "cadmus-bib-author-editor", inputs: { author: { classPropertyName: "author", publicName: "author", isSignal: true, isRequired: false, transformFunction: null }, roleEntries: { classPropertyName: "roleEntries", publicName: "roleEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { author: "authorChange", cancelEdit: "cancelEdit" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n <!-- lastName -->\r\n <mat-form-field>\r\n <mat-label>last name</mat-label>\r\n <input matInput [formControl]=\"lastName\" />\r\n @if ($any(lastName).errors?.required && (lastName.dirty ||\r\n lastName.touched)) {\r\n <mat-error>last name required</mat-error>\r\n } @if ($any(lastName).errors?.maxLength && (lastName.dirty ||\r\n lastName.touched)) {\r\n <mat-error>last name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- firstName -->\r\n <mat-form-field>\r\n <mat-label>first name</mat-label>\r\n <input matInput [formControl]=\"firstName\" />\r\n @if ($any(firstName).errors?.maxLength && (firstName.dirty ||\r\n firstName.touched)) {\r\n <mat-error>first name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- role (bound) -->\r\n @if (roleEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>role</mat-label>\r\n <mat-select [formControl]=\"role\">\r\n <mat-option [value]=\"undefined\">-</mat-option>\r\n @for (e of roleEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n } @else {\r\n <!-- role (free) -->\r\n <mat-form-field>\r\n <mat-label>role</mat-label>\r\n <input matInput [formControl]=\"role\" />\r\n @if ($any(role).errors?.maxLength && (role.dirty || role.touched)) {\r\n <mat-error>role too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Discard changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Accept changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
598
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BibAuthorEditorComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
599
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: BibAuthorEditorComponent, isStandalone: true, selector: "cadmus-bib-author-editor", inputs: { author: { classPropertyName: "author", publicName: "author", isSignal: true, isRequired: false, transformFunction: null }, roleEntries: { classPropertyName: "roleEntries", publicName: "roleEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { author: "authorChange", cancelEdit: "cancelEdit" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n <!-- lastName -->\r\n <mat-form-field>\r\n <mat-label>last name</mat-label>\r\n <input matInput [formControl]=\"lastName\" />\r\n @if ($any(lastName).errors?.required && (lastName.dirty ||\r\n lastName.touched)) {\r\n <mat-error>last name required</mat-error>\r\n } @if ($any(lastName).errors?.maxLength && (lastName.dirty ||\r\n lastName.touched)) {\r\n <mat-error>last name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- firstName -->\r\n <mat-form-field>\r\n <mat-label>first name</mat-label>\r\n <input matInput [formControl]=\"firstName\" />\r\n @if ($any(firstName).errors?.maxLength && (firstName.dirty ||\r\n firstName.touched)) {\r\n <mat-error>first name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- role (bound) -->\r\n @if (roleEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>role</mat-label>\r\n <mat-select [formControl]=\"role\">\r\n <mat-option [value]=\"undefined\">-</mat-option>\r\n @for (e of roleEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n } @else {\r\n <!-- role (free) -->\r\n <mat-form-field>\r\n <mat-label>role</mat-label>\r\n <input matInput [formControl]=\"role\" />\r\n @if ($any(role).errors?.maxLength && (role.dirty || role.touched)) {\r\n <mat-error>role too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Discard changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Accept changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
599
600
  }
600
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BibAuthorEditorComponent, decorators: [{
601
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BibAuthorEditorComponent, decorators: [{
601
602
  type: Component,
602
603
  args: [{ selector: 'cadmus-bib-author-editor', imports: [
603
604
  ReactiveFormsModule,
@@ -683,10 +684,10 @@ class BibAuthorsEditorComponent {
683
684
  authors.splice(index + 1, 0, author);
684
685
  this.authors.set(authors);
685
686
  }
686
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BibAuthorsEditorComponent, deps: [{ token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
687
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: BibAuthorsEditorComponent, isStandalone: true, selector: "cadmus-bib-authors-editor", inputs: { authors: { classPropertyName: "authors", publicName: "authors", isSignal: true, isRequired: false, transformFunction: null }, roleEntries: { classPropertyName: "roleEntries", publicName: "roleEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { authors: "authorsChange" }, ngImport: i0, template: "<div>\r\n <div>\r\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addAuthor()\">\r\n <mat-icon>add_circle</mat-icon> author\r\n </button>\r\n </div>\r\n @if (authors().length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>last</th>\r\n <th>first</th>\r\n <th>role</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (author of authors(); track author; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"author === editedAuthor()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n class=\"mat-primary\"\r\n matTooltip=\"Edit this author\"\r\n (click)=\"editAuthor(author, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this author up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveAuthorUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this author down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveAuthorDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n class=\"mat-warn\"\r\n matTooltip=\"Delete this author\"\r\n (click)=\"deleteAuthor(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ author.lastName }}</td>\r\n <td>{{ author.firstName }}</td>\r\n <td>\r\n {{ author.roleId | flatLookup : roleEntries() : \"id\" : \"value\" }}\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @if (editedAuthor()) {\r\n <fieldset>\r\n <mat-expansion-panel\r\n [expanded]=\"editedAuthor()\"\r\n [disabled]=\"!editedAuthor()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>author #{{ editedAuthorIndex() + 1 }}</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-bib-author-editor\r\n [author]=\"editedAuthor()\"\r\n [roleEntries]=\"roleEntries()\"\r\n (authorChange)=\"saveAuthor($event!)\"\r\n (cancelEdit)=\"closeAuthor()\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n</div>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: BibAuthorEditorComponent, selector: "cadmus-bib-author-editor", inputs: ["author", "roleEntries"], outputs: ["authorChange", "cancelEdit"] }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
687
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BibAuthorsEditorComponent, deps: [{ token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
688
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: BibAuthorsEditorComponent, isStandalone: true, selector: "cadmus-bib-authors-editor", inputs: { authors: { classPropertyName: "authors", publicName: "authors", isSignal: true, isRequired: false, transformFunction: null }, roleEntries: { classPropertyName: "roleEntries", publicName: "roleEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { authors: "authorsChange" }, ngImport: i0, template: "<div>\r\n <div>\r\n <button type=\"button\" mat-flat-button class=\"mat-primary\" (click)=\"addAuthor()\">\r\n <mat-icon>add_circle</mat-icon> author\r\n </button>\r\n </div>\r\n @if (authors().length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>last</th>\r\n <th>first</th>\r\n <th>role</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (author of authors(); track author; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"author === editedAuthor()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n class=\"mat-primary\"\r\n matTooltip=\"Edit this author\"\r\n (click)=\"editAuthor(author, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this author up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveAuthorUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this author down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveAuthorDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n class=\"mat-warn\"\r\n matTooltip=\"Delete this author\"\r\n (click)=\"deleteAuthor(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ author.lastName }}</td>\r\n <td>{{ author.firstName }}</td>\r\n <td>\r\n {{ author.roleId | flatLookup : roleEntries() : \"id\" : \"value\" }}\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @if (editedAuthor()) {\r\n <fieldset>\r\n <mat-expansion-panel\r\n [expanded]=\"editedAuthor()\"\r\n [disabled]=\"!editedAuthor()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>author #{{ editedAuthorIndex() + 1 }}</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-bib-author-editor\r\n [author]=\"editedAuthor()\"\r\n [roleEntries]=\"roleEntries()\"\r\n (authorChange)=\"saveAuthor($event!)\"\r\n (cancelEdit)=\"closeAuthor()\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n</div>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: BibAuthorEditorComponent, selector: "cadmus-bib-author-editor", inputs: ["author", "roleEntries"], outputs: ["authorChange", "cancelEdit"] }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
688
689
  }
689
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BibAuthorsEditorComponent, decorators: [{
690
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BibAuthorsEditorComponent, decorators: [{
690
691
  type: Component,
691
692
  args: [{ selector: 'cadmus-bib-authors-editor', imports: [
692
693
  FormsModule,
@@ -953,10 +954,10 @@ class BibliographyEntryComponent {
953
954
  }
954
955
  this.entry.set(this.getEntry());
955
956
  }
956
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BibliographyEntryComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
957
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: BibliographyEntryComponent, isStandalone: true, selector: "cadmus-bibliography-entry", inputs: { entry: { classPropertyName: "entry", publicName: "entry", isSignal: true, isRequired: false, transformFunction: null }, langEntries: { classPropertyName: "langEntries", publicName: "langEntries", isSignal: true, isRequired: false, transformFunction: null }, typeEntries: { classPropertyName: "typeEntries", publicName: "typeEntries", isSignal: true, isRequired: false, transformFunction: null }, tagEntries: { classPropertyName: "tagEntries", publicName: "tagEntries", isSignal: true, isRequired: false, transformFunction: null }, roleEntries: { classPropertyName: "roleEntries", publicName: "roleEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { entry: "entryChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-tab-group>\r\n <!-- general -->\r\n <mat-tab label=\"General\">\r\n <!-- typeId -->\r\n <div class=\"form-row\">\r\n @if (typeEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <mat-select formControlName=\"type\">\r\n @for (e of typeEntries() || []; track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n } @else {\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n spellcheck=\"false\"\r\n formControlName=\"type\"\r\n />\r\n @if (type.hasError('required') && (type.dirty || type.touched)) {\r\n <mat-error>entry type required</mat-error>\r\n } @if (type.hasError('maxLength') && (type.dirty || type.touched)) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- tag (bound) -->\r\n @if (tagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of tagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- language (bound) -->\r\n @if (langEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <mat-select formControlName=\"language\">\r\n @for (e of langEntries() || []; track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- language (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <input matInput [formControl]=\"language\" />\r\n @if ( language.hasError('pattern') && (language.dirty ||\r\n language.touched) ) {\r\n <mat-error>invalid</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- key -->\r\n <mat-form-field>\r\n <mat-label>key</mat-label>\r\n <input matInput [formControl]=\"key\" />\r\n @if (key.hasError('maxLength') && (key.dirty || key.touched)) {\r\n <mat-error>key too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- authors -->\r\n <fieldset>\r\n <legend>author(s)</legend>\r\n <cadmus-bib-authors-editor\r\n [authors]=\"authors.value\"\r\n (authorsChange)=\"onAuthorsChange($event)\"\r\n [roleEntries]=\"roleEntries()\"\r\n />\r\n </fieldset>\r\n\r\n <!-- title -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>title</mat-label>\r\n <input matInput type=\"text\" formControlName=\"title\" />\r\n @if (title.hasError('required') && (title.dirty || title.touched)) {\r\n <mat-error>title required</mat-error>\r\n } @if ( title.hasError('maxLength') && (title.dirty || title.touched)\r\n ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- note -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput formControlName=\"note\" rows=\"2\"></textarea>\r\n @if (note.hasError('maxLength') && (note.dirty || note.touched)) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- container -->\r\n <mat-tab label=\"Container\">\r\n <!-- contributors -->\r\n <fieldset>\r\n <legend>container author(s)</legend>\r\n <cadmus-bib-authors-editor\r\n [authors]=\"contributors.value\"\r\n (authorsChange)=\"onContributorsChange($event)\"\r\n [roleEntries]=\"roleEntries()\"\r\n />\r\n </fieldset>\r\n\r\n <!-- container -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>container</mat-label>\r\n <input matInput type=\"text\" formControlName=\"container\" />\r\n @if ( container.hasError('maxLength') && (container.dirty ||\r\n container.touched) ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- number -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>number</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n spellcheck=\"false\"\r\n formControlName=\"number\"\r\n />\r\n @if ( number.hasError('maxLength') && (number.dirty || number.touched)\r\n ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- firstPage -->\r\n &nbsp;\r\n <mat-form-field [style.width.em]=\"5\">\r\n <mat-label>from</mat-label>\r\n <input matInput type=\"number\" formControlName=\"firstPage\" />\r\n @if ( firstPage.hasError('min') && (firstPage.dirty ||\r\n firstPage.touched) ) {\r\n <mat-error>page less than 0</mat-error>\r\n } @if ( firstPage.hasError('max') && (firstPage.dirty ||\r\n firstPage.touched) ) {\r\n <mat-error>page number too big</mat-error>\r\n }\r\n </mat-form-field>\r\n -\r\n <!-- lastPage -->\r\n <mat-form-field [style.width.em]=\"5\">\r\n <mat-label>to</mat-label>\r\n <input matInput type=\"number\" formControlName=\"lastPage\" />\r\n @if ( lastPage.hasError('min') && (lastPage.dirty || lastPage.touched)\r\n ) {\r\n <mat-error>page less than 0</mat-error>\r\n } @if ( lastPage.hasError('max') && (lastPage.dirty ||\r\n lastPage.touched) ) {\r\n <mat-error>page number too big</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- publisher -->\r\n <mat-form-field>\r\n <mat-label>publisher</mat-label>\r\n <input matInput [formControl]=\"publisher\" />\r\n @if ( publisher.hasError('maxLength') && (publisher.dirty ||\r\n publisher.touched) ) {\r\n <mat-error>publisher too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- placePub -->\r\n <mat-form-field>\r\n <mat-label>place</mat-label>\r\n <input matInput type=\"text\" formControlName=\"placePub\" />\r\n @if ( placePub.hasError('maxLength') && (placePub.dirty ||\r\n placePub.touched) ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- yearPub -->\r\n <mat-form-field class=\"nr\">\r\n <mat-label>year</mat-label>\r\n <input matInput type=\"number\" formControlName=\"yearPub\" />\r\n @if ( yearPub.hasError('min') && (yearPub.dirty || yearPub.touched) )\r\n {\r\n <mat-error>year less than 0</mat-error>\r\n } @if ( yearPub.hasError('max') && (yearPub.dirty || yearPub.touched)\r\n ) {\r\n <mat-error>year past the current one</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- edition -->\r\n <mat-form-field class=\"nr\">\r\n <mat-label>ed.</mat-label>\r\n <input matInput type=\"number\" formControlName=\"edition\" />\r\n @if ( edition.hasError('min') && (edition.dirty || edition.touched) )\r\n {\r\n <mat-error>edition less than 0</mat-error>\r\n } @if ( edition.hasError('max') && (edition.dirty || edition.touched)\r\n ) {\r\n <mat-error>edition greater than 100</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- location -->\r\n <div class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label>location</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"location\"\r\n spellcheck=\"false\"\r\n />\r\n @if ( location.hasError('maxLength') && (location.dirty ||\r\n location.touched) ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- accessDate -->\r\n <mat-form-field>\r\n <mat-label>access date</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker\"\r\n formControlName=\"accessDate\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- keywords -->\r\n <mat-tab label=\"Keywords\">\r\n <form [formGroup]=\"keyForm\" (submit)=\"addKeyword()\">\r\n <div class=\"form-row\">\r\n <!-- language (bound) -->\r\n @if (langEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <mat-select formControlName=\"keyLanguage\">\r\n @for (e of langEntries() || []; track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- language (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <input matInput [formControl]=\"keyLanguage\" />\r\n @if ( keyLanguage.hasError('required') && (keyLanguage.dirty ||\r\n keyLanguage.touched) ) {\r\n <mat-error>required</mat-error>\r\n } @if ( keyLanguage.hasError('pattern') && (keyLanguage.dirty ||\r\n keyLanguage.touched) ) {\r\n <mat-error>invalid</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput type=\"text\" formControlName=\"keyValue\" />\r\n @if ( keyValue.hasError('required') && (keyValue.dirty ||\r\n keyValue.touched) ) {\r\n <mat-error>required</mat-error>\r\n } @if ( keyValue.hasError('maxLength') && (keyValue.dirty ||\r\n keyValue.touched) ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <button\r\n mat-flat-button\r\n type=\"submit\"\r\n [disabled]=\"keyForm.invalid\"\r\n matTooltip=\"Add new keyword\"\r\n >\r\n <mat-icon class=\"mat-primary\">add_circle</mat-icon> keyword\r\n </button>\r\n </div>\r\n </form>\r\n <!-- list -->\r\n @if (keywords().length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>language</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( k of keywords(); track k; let i = $index; let first = $first;\r\n let last = $last) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this keyword\"\r\n (click)=\"deleteKeyword(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">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 keyword up\"\r\n (click)=\"moveKeywordUp(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 keyword down\"\r\n (click)=\"moveKeywordDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ k.language | flatLookup : langEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ k.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Cancel edit\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n mat-icon-button\r\n matTooltip=\"Save entry\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".long-text{width:90%;max-width:800px}.nr{width:6em}table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}fieldset{border:1px solid silver;border-radius:6px;padding:6px;margin-bottom:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: BibAuthorsEditorComponent, selector: "cadmus-bib-authors-editor", inputs: ["authors", "roleEntries"], outputs: ["authorsChange"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
957
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BibliographyEntryComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
958
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: BibliographyEntryComponent, isStandalone: true, selector: "cadmus-bibliography-entry", inputs: { entry: { classPropertyName: "entry", publicName: "entry", isSignal: true, isRequired: false, transformFunction: null }, langEntries: { classPropertyName: "langEntries", publicName: "langEntries", isSignal: true, isRequired: false, transformFunction: null }, typeEntries: { classPropertyName: "typeEntries", publicName: "typeEntries", isSignal: true, isRequired: false, transformFunction: null }, tagEntries: { classPropertyName: "tagEntries", publicName: "tagEntries", isSignal: true, isRequired: false, transformFunction: null }, roleEntries: { classPropertyName: "roleEntries", publicName: "roleEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { entry: "entryChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-tab-group>\r\n <!-- general -->\r\n <mat-tab label=\"General\">\r\n <!-- typeId -->\r\n <div class=\"form-row\">\r\n @if (typeEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <mat-select formControlName=\"type\">\r\n @for (e of typeEntries() || []; track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n } @else {\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n spellcheck=\"false\"\r\n formControlName=\"type\"\r\n />\r\n @if (type.hasError('required') && (type.dirty || type.touched)) {\r\n <mat-error>entry type required</mat-error>\r\n } @if (type.hasError('maxLength') && (type.dirty || type.touched)) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- tag (bound) -->\r\n @if (tagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of tagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- language (bound) -->\r\n @if (langEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <mat-select formControlName=\"language\">\r\n @for (e of langEntries() || []; track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- language (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <input matInput [formControl]=\"language\" />\r\n @if ( language.hasError('pattern') && (language.dirty ||\r\n language.touched) ) {\r\n <mat-error>invalid</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- key -->\r\n <mat-form-field>\r\n <mat-label>key</mat-label>\r\n <input matInput [formControl]=\"key\" />\r\n @if (key.hasError('maxLength') && (key.dirty || key.touched)) {\r\n <mat-error>key too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- authors -->\r\n <fieldset>\r\n <legend>author(s)</legend>\r\n <cadmus-bib-authors-editor\r\n [authors]=\"authors.value\"\r\n (authorsChange)=\"onAuthorsChange($event)\"\r\n [roleEntries]=\"roleEntries()\"\r\n />\r\n </fieldset>\r\n\r\n <!-- title -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>title</mat-label>\r\n <input matInput type=\"text\" formControlName=\"title\" />\r\n @if (title.hasError('required') && (title.dirty || title.touched)) {\r\n <mat-error>title required</mat-error>\r\n } @if ( title.hasError('maxLength') && (title.dirty || title.touched)\r\n ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- note -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput formControlName=\"note\" rows=\"2\"></textarea>\r\n @if (note.hasError('maxLength') && (note.dirty || note.touched)) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- container -->\r\n <mat-tab label=\"Container\">\r\n <!-- contributors -->\r\n <fieldset>\r\n <legend>container author(s)</legend>\r\n <cadmus-bib-authors-editor\r\n [authors]=\"contributors.value\"\r\n (authorsChange)=\"onContributorsChange($event)\"\r\n [roleEntries]=\"roleEntries()\"\r\n />\r\n </fieldset>\r\n\r\n <!-- container -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>container</mat-label>\r\n <input matInput type=\"text\" formControlName=\"container\" />\r\n @if ( container.hasError('maxLength') && (container.dirty ||\r\n container.touched) ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- number -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>number</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n spellcheck=\"false\"\r\n formControlName=\"number\"\r\n />\r\n @if ( number.hasError('maxLength') && (number.dirty || number.touched)\r\n ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- firstPage -->\r\n &nbsp;\r\n <mat-form-field [style.width.em]=\"5\">\r\n <mat-label>from</mat-label>\r\n <input matInput type=\"number\" formControlName=\"firstPage\" />\r\n @if ( firstPage.hasError('min') && (firstPage.dirty ||\r\n firstPage.touched) ) {\r\n <mat-error>page less than 0</mat-error>\r\n } @if ( firstPage.hasError('max') && (firstPage.dirty ||\r\n firstPage.touched) ) {\r\n <mat-error>page number too big</mat-error>\r\n }\r\n </mat-form-field>\r\n -\r\n <!-- lastPage -->\r\n <mat-form-field [style.width.em]=\"5\">\r\n <mat-label>to</mat-label>\r\n <input matInput type=\"number\" formControlName=\"lastPage\" />\r\n @if ( lastPage.hasError('min') && (lastPage.dirty || lastPage.touched)\r\n ) {\r\n <mat-error>page less than 0</mat-error>\r\n } @if ( lastPage.hasError('max') && (lastPage.dirty ||\r\n lastPage.touched) ) {\r\n <mat-error>page number too big</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- publisher -->\r\n <mat-form-field>\r\n <mat-label>publisher</mat-label>\r\n <input matInput [formControl]=\"publisher\" />\r\n @if ( publisher.hasError('maxLength') && (publisher.dirty ||\r\n publisher.touched) ) {\r\n <mat-error>publisher too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- placePub -->\r\n <mat-form-field>\r\n <mat-label>place</mat-label>\r\n <input matInput type=\"text\" formControlName=\"placePub\" />\r\n @if ( placePub.hasError('maxLength') && (placePub.dirty ||\r\n placePub.touched) ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- yearPub -->\r\n <mat-form-field class=\"nr\">\r\n <mat-label>year</mat-label>\r\n <input matInput type=\"number\" formControlName=\"yearPub\" />\r\n @if ( yearPub.hasError('min') && (yearPub.dirty || yearPub.touched) )\r\n {\r\n <mat-error>year less than 0</mat-error>\r\n } @if ( yearPub.hasError('max') && (yearPub.dirty || yearPub.touched)\r\n ) {\r\n <mat-error>year past the current one</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- edition -->\r\n <mat-form-field class=\"nr\">\r\n <mat-label>ed.</mat-label>\r\n <input matInput type=\"number\" formControlName=\"edition\" />\r\n @if ( edition.hasError('min') && (edition.dirty || edition.touched) )\r\n {\r\n <mat-error>edition less than 0</mat-error>\r\n } @if ( edition.hasError('max') && (edition.dirty || edition.touched)\r\n ) {\r\n <mat-error>edition greater than 100</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- location -->\r\n <div class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label>location</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"location\"\r\n spellcheck=\"false\"\r\n />\r\n @if ( location.hasError('maxLength') && (location.dirty ||\r\n location.touched) ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- accessDate -->\r\n <mat-form-field>\r\n <mat-label>access date</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker\"\r\n formControlName=\"accessDate\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- keywords -->\r\n <mat-tab label=\"Keywords\">\r\n <form [formGroup]=\"keyForm\" (submit)=\"addKeyword()\">\r\n <div class=\"form-row\">\r\n <!-- language (bound) -->\r\n @if (langEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <mat-select formControlName=\"keyLanguage\">\r\n @for (e of langEntries() || []; track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- language (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <input matInput [formControl]=\"keyLanguage\" />\r\n @if ( keyLanguage.hasError('required') && (keyLanguage.dirty ||\r\n keyLanguage.touched) ) {\r\n <mat-error>required</mat-error>\r\n } @if ( keyLanguage.hasError('pattern') && (keyLanguage.dirty ||\r\n keyLanguage.touched) ) {\r\n <mat-error>invalid</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput type=\"text\" formControlName=\"keyValue\" />\r\n @if ( keyValue.hasError('required') && (keyValue.dirty ||\r\n keyValue.touched) ) {\r\n <mat-error>required</mat-error>\r\n } @if ( keyValue.hasError('maxLength') && (keyValue.dirty ||\r\n keyValue.touched) ) {\r\n <mat-error>too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <button\r\n mat-flat-button\r\n type=\"submit\"\r\n [disabled]=\"keyForm.invalid\"\r\n matTooltip=\"Add new keyword\"\r\n >\r\n <mat-icon class=\"mat-primary\">add_circle</mat-icon> keyword\r\n </button>\r\n </div>\r\n </form>\r\n <!-- list -->\r\n @if (keywords().length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>language</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( k of keywords(); track k; let i = $index; let first = $first;\r\n let last = $last) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this keyword\"\r\n (click)=\"deleteKeyword(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">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 keyword up\"\r\n (click)=\"moveKeywordUp(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 keyword down\"\r\n (click)=\"moveKeywordDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ k.language | flatLookup : langEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ k.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Cancel edit\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n mat-icon-button\r\n matTooltip=\"Save entry\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".long-text{width:90%;max-width:800px}.nr{width:6em}table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}fieldset{border:1px solid silver;border-radius:6px;padding:6px;margin-bottom:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: BibAuthorsEditorComponent, selector: "cadmus-bib-authors-editor", inputs: ["authors", "roleEntries"], outputs: ["authorsChange"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
958
959
  }
959
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BibliographyEntryComponent, decorators: [{
960
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BibliographyEntryComponent, decorators: [{
960
961
  type: Component,
961
962
  args: [{ selector: 'cadmus-bibliography-entry', imports: [
962
963
  FormsModule,
@@ -1342,10 +1343,10 @@ class BibliographyPartComponent extends ModelEditorComponentBase {
1342
1343
  }
1343
1344
  return sb.join('');
1344
1345
  }
1345
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BibliographyPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
1346
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: BibliographyPartComponent, isStandalone: true, selector: "cadmus-bibliography-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Bibliography Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addEntry()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> entry\r\n </button>\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>author(s)</th>\r\n <th>title</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first\r\n = $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Edit entry\"\r\n (click)=\"editEntry(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move entry up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveEntryUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move entry down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveEntryDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this entry\"\r\n (click)=\"removeEntry(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ entry.typeId | flatLookup : typeEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ getAuthors(entry.authors || []) }}</td>\r\n <td>{{ entry.title }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n <!-- entry editor -->\r\n <mat-expansion-panel\r\n id=\"editor\"\r\n [expanded]=\"edited()\"\r\n [disabled]=\"!edited()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ edited()?.title || \"entry\" }}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-bibliography-entry\r\n [entry]=\"edited()\"\r\n [langEntries]=\"langEntries()\"\r\n [typeEntries]=\"typeEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n [roleEntries]=\"roleEntries()\"\r\n (editorClose)=\"closeEntry()\"\r\n (entryChange)=\"saveEntry($event!)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}#editor{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: BibliographyEntryComponent, selector: "cadmus-bibliography-entry", inputs: ["entry", "langEntries", "typeEntries", "tagEntries", "roleEntries"], outputs: ["entryChange", "editorClose"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
1346
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BibliographyPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
1347
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: BibliographyPartComponent, isStandalone: true, selector: "cadmus-bibliography-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Bibliography Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addEntry()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> entry\r\n </button>\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>author(s)</th>\r\n <th>title</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first\r\n = $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Edit entry\"\r\n (click)=\"editEntry(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move entry up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveEntryUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move entry down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveEntryDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this entry\"\r\n (click)=\"removeEntry(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ entry.typeId | flatLookup : typeEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ getAuthors(entry.authors || []) }}</td>\r\n <td>{{ entry.title }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n <!-- entry editor -->\r\n <mat-expansion-panel\r\n id=\"editor\"\r\n [expanded]=\"edited()\"\r\n [disabled]=\"!edited()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ edited()?.title || \"entry\" }}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-bibliography-entry\r\n [entry]=\"edited()\"\r\n [langEntries]=\"langEntries()\"\r\n [typeEntries]=\"typeEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n [roleEntries]=\"roleEntries()\"\r\n (editorClose)=\"closeEntry()\"\r\n (entryChange)=\"saveEntry($event!)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}#editor{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: BibliographyEntryComponent, selector: "cadmus-bibliography-entry", inputs: ["entry", "langEntries", "typeEntries", "tagEntries", "roleEntries"], outputs: ["entryChange", "editorClose"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
1347
1348
  }
1348
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BibliographyPartComponent, decorators: [{
1349
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BibliographyPartComponent, decorators: [{
1349
1350
  type: Component,
1350
1351
  args: [{ selector: 'cadmus-bibliography-part', imports: [
1351
1352
  FormsModule,
@@ -1519,10 +1520,10 @@ class CategoriesPartComponent extends ModelEditorComponentBase {
1519
1520
  renderLabel(label) {
1520
1521
  return renderLabelFromLastColon(label);
1521
1522
  }
1522
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: CategoriesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
1523
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: CategoriesPartComponent, isStandalone: true, selector: "cadmus-categories-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title\r\n [matBadge]=\"categories.value.length\"\r\n matBadgeOverlap=\"false\"\r\n >\r\n {{ (modelName() | titlecase) || \"Categories Part\" }}</mat-card-title\r\n >\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div id=\"container\">\r\n <!-- available categories (from thesaurus) -->\r\n <fieldset id=\"picker\">\r\n <legend>available categories</legend>\r\n <cadmus-thesaurus-tree\r\n [entries]=\"entries()\"\r\n rootLabel=\"categories\"\r\n [renderLabel]=\"renderLabel\"\r\n (entryChange)=\"onEntryChange($event)\"\r\n />\r\n </fieldset>\r\n\r\n <!-- categories -->\r\n @if (categories.value.length) {\r\n <fieldset id=\"list\">\r\n <legend>assigned categories</legend>\r\n <table>\r\n <tbody>\r\n @for (entry of categories.value; track entry; let i = $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this category\"\r\n (click)=\"removeCategory(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td [matTooltip]=\"entry.id\">{{ entry.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </fieldset>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".example-tree-progress-bar{margin-left:30px}.example-tree-nested-node{padding-left:30px}mat-tree{margin-left:40px}.mat-tree-node{padding:0;background-color:#fff}.mat-nested-tree-node{top:-24px}ul,li{list-style:none;margin:0;padding:0}li.example-tree-container{border-bottom:0}ul{padding-left:40px}li{padding-left:40px;border:1px dotted grey;border-width:0 0 1px 1px;position:relative;top:-24px}li.mat-tree-node,li div{margin:0;position:relative;top:24px}li ul{border-top:1px dotted grey;margin-left:-40px;padding-left:60px}.mat-nested-tree-node:last-child ul{border-left:1px solid white;margin-left:-41px}.mat-mdc-icon-button{z-index:100}h3{border-bottom:1px solid silver}div#picker{grid-area:picker}div#list{grid-area:list}div#container{display:grid;grid-template-rows:1fr;grid-template-columns:auto auto;grid-template-areas:\"picker list\";gap:8px}@media only screen and (max-width:959px){div#container{grid-template-rows:1fr auto;grid-template-columns:1fr;grid-template-areas:\"picker\" \"list\"}}fieldset{border:1px solid silver;border-radius:8px;padding:8px 16px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "component", type: ThesaurusTreeComponent, selector: "cadmus-thesaurus-tree", inputs: ["entries", "renderLabel"], outputs: ["entryChange"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
1523
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: CategoriesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
1524
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: CategoriesPartComponent, isStandalone: true, selector: "cadmus-categories-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title\r\n [matBadge]=\"categories.value.length\"\r\n matBadgeOverlap=\"false\"\r\n >\r\n {{ (modelName() | titlecase) || \"Categories Part\" }}</mat-card-title\r\n >\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div id=\"container\">\r\n <!-- available categories (from thesaurus) -->\r\n <fieldset id=\"picker\">\r\n <legend>available categories</legend>\r\n <cadmus-thesaurus-tree\r\n [entries]=\"entries()\"\r\n rootLabel=\"categories\"\r\n [renderLabel]=\"renderLabel\"\r\n (entryChange)=\"onEntryChange($event)\"\r\n />\r\n </fieldset>\r\n\r\n <!-- categories -->\r\n @if (categories.value.length) {\r\n <fieldset id=\"list\">\r\n <legend>assigned categories</legend>\r\n <table>\r\n <tbody>\r\n @for (entry of categories.value; track entry; let i = $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this category\"\r\n (click)=\"removeCategory(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td [matTooltip]=\"entry.id\">{{ entry.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </fieldset>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".example-tree-progress-bar{margin-left:30px}.example-tree-nested-node{padding-left:30px}mat-tree{margin-left:40px}.mat-tree-node{padding:0;background-color:#fff}.mat-nested-tree-node{top:-24px}ul,li{list-style:none;margin:0;padding:0}li.example-tree-container{border-bottom:0}ul{padding-left:40px}li{padding-left:40px;border:1px dotted grey;border-width:0 0 1px 1px;position:relative;top:-24px}li.mat-tree-node,li div{margin:0;position:relative;top:24px}li ul{border-top:1px dotted grey;margin-left:-40px;padding-left:60px}.mat-nested-tree-node:last-child ul{border-left:1px solid white;margin-left:-41px}.mat-mdc-icon-button{z-index:100}h3{border-bottom:1px solid silver}div#picker{grid-area:picker}div#list{grid-area:list}div#container{display:grid;grid-template-rows:1fr;grid-template-columns:auto auto;grid-template-areas:\"picker list\";gap:8px}@media only screen and (max-width:959px){div#container{grid-template-rows:1fr auto;grid-template-columns:1fr;grid-template-areas:\"picker\" \"list\"}}fieldset{border:1px solid silver;border-radius:8px;padding:8px 16px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "component", type: ThesaurusTreeComponent, selector: "cadmus-thesaurus-tree", inputs: ["entries", "renderLabel"], outputs: ["entryChange"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
1524
1525
  }
1525
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: CategoriesPartComponent, decorators: [{
1526
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: CategoriesPartComponent, decorators: [{
1526
1527
  type: Component,
1527
1528
  args: [{ selector: 'cadmus-categories-part', imports: [
1528
1529
  FormsModule,
@@ -1714,10 +1715,10 @@ class ChronologyFragmentComponent extends ModelEditorComponentBase {
1714
1715
  fr.tag = this.tag.value || undefined;
1715
1716
  return fr;
1716
1717
  }
1717
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: ChronologyFragmentComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
1718
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: ChronologyFragmentComponent, isStandalone: true, selector: "cadmus-chronology-fragment", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>\r\n {{ (modelName() | titlecase) || \"Chronology Fragment\" }}\r\n {{ data()?.value?.location }}</mat-card-title\r\n >\r\n <mat-card-subtitle>\r\n {{ data()?.value?.baseText }}\r\n </mat-card-subtitle>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <div class=\"form-row\">\r\n <!-- free tag -->\r\n @if (!tagEntries()) {\r\n <div>\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input type=\"text\" matInput formControlName=\"tag\" />\r\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n <!-- bound tag -->\r\n @else {\r\n <div>\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n @for (e of tagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n\r\n <!-- label -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput type=\"text\" formControlName=\"label\" />\r\n @if ( label.hasError('maxLength') && (label.dirty || label.touched)\r\n ) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- event ID -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>event ID</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"eventId\"\r\n spellcheck=\"false\"\r\n />\r\n @if ( eventId.hasError('maxLength') && (eventId.dirty ||\r\n eventId.touched) ) {\r\n <mat-error>event ID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <!-- date -->\r\n <div>\r\n <cadmus-refs-historical-date\r\n [date]=\"date.value || undefined\"\r\n (dateChange)=\"onDateChange($event!)\"\r\n />\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".tab-icon{margin-right:8px}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: HistoricalDateComponent, selector: "cadmus-refs-historical-date", inputs: ["date", "label", "disabled"], outputs: ["dateChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
1718
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ChronologyFragmentComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
1719
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: ChronologyFragmentComponent, isStandalone: true, selector: "cadmus-chronology-fragment", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>\r\n {{ (modelName() | titlecase) || \"Chronology Fragment\" }}\r\n {{ data()?.value?.location }}</mat-card-title\r\n >\r\n <mat-card-subtitle>\r\n {{ data()?.value?.baseText }}\r\n </mat-card-subtitle>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <div class=\"form-row\">\r\n <!-- free tag -->\r\n @if (!tagEntries()) {\r\n <div>\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input type=\"text\" matInput formControlName=\"tag\" />\r\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n <!-- bound tag -->\r\n @else {\r\n <div>\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n @for (e of tagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n\r\n <!-- label -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput type=\"text\" formControlName=\"label\" />\r\n @if ( label.hasError('maxLength') && (label.dirty || label.touched)\r\n ) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- event ID -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>event ID</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"eventId\"\r\n spellcheck=\"false\"\r\n />\r\n @if ( eventId.hasError('maxLength') && (eventId.dirty ||\r\n eventId.touched) ) {\r\n <mat-error>event ID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <!-- date -->\r\n <div>\r\n <cadmus-refs-historical-date\r\n [date]=\"date.value || undefined\"\r\n (dateChange)=\"onDateChange($event!)\"\r\n />\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".tab-icon{margin-right:8px}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: HistoricalDateComponent, selector: "cadmus-refs-historical-date", inputs: ["date", "label", "disabled"], outputs: ["dateChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
1719
1720
  }
1720
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: ChronologyFragmentComponent, decorators: [{
1721
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ChronologyFragmentComponent, decorators: [{
1721
1722
  type: Component,
1722
1723
  args: [{ selector: 'cadmus-chronology-fragment', imports: [
1723
1724
  FormsModule,
@@ -2126,10 +2127,10 @@ class ChronotopesPartComponent extends ModelEditorComponentBase {
2126
2127
  this.chronotopes.updateValueAndValidity();
2127
2128
  this.chronotopes.markAsDirty();
2128
2129
  }
2129
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: ChronotopesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
2130
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: ChronotopesPartComponent, isStandalone: true, selector: "cadmus-chronotopes-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Chronotopes Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addChronotope()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> chronotope\r\n </button>\r\n </div>\r\n @if (chronotopes.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>place</th>\r\n <th>date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of chronotopes.value; track entry; let i = $index; let\r\n first = $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this chronotope\"\r\n (click)=\"editChronotope(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this chronotope up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveChronotopeUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this chronotope down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveChronotopeDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this chronotope\"\r\n (click)=\"deleteChronotope(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.place?.value }}</td>\r\n <td>{{ entry.date | historicalDate }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <mat-expansion-panel\r\n [expanded]=\"edited()\"\r\n [disabled]=\"!edited()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ (edited() | assertedChronotopes) || \"chronotope\" }}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-refs-asserted-chronotope\r\n [tagEntries]=\"tagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [chronotope]=\"edited()\"\r\n (chronotopeChange)=\"onChronotopeChange($event!)\"\r\n />\r\n <div class=\"form-row\">\r\n <button type=\"button\" (click)=\"closeChronotope()\" mat-icon-button>\r\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n <button type=\"button\" (click)=\"saveChronotope()\" mat-icon-button>\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n <span>chronotope</span>\r\n </div>\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}#editor{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: AssertedChronotopeComponent, selector: "cadmus-refs-asserted-chronotope", inputs: ["chronotope", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries"], outputs: ["chronotopeChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: HistoricalDatePipe, name: "historicalDate" }, { kind: "pipe", type: AssertedChronotopesPipe, name: "assertedChronotopes" }] });
2130
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ChronotopesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
2131
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: ChronotopesPartComponent, isStandalone: true, selector: "cadmus-chronotopes-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Chronotopes Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addChronotope()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> chronotope\r\n </button>\r\n </div>\r\n @if (chronotopes.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>place</th>\r\n <th>date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of chronotopes.value; track entry; let i = $index; let\r\n first = $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this chronotope\"\r\n (click)=\"editChronotope(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this chronotope up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveChronotopeUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this chronotope down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveChronotopeDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this chronotope\"\r\n (click)=\"deleteChronotope(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.place?.value }}</td>\r\n <td>{{ entry.date | historicalDate }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <mat-expansion-panel\r\n [expanded]=\"edited()\"\r\n [disabled]=\"!edited()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ (edited() | assertedChronotopes) || \"chronotope\" }}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-refs-asserted-chronotope\r\n [tagEntries]=\"tagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [chronotope]=\"edited()\"\r\n (chronotopeChange)=\"onChronotopeChange($event!)\"\r\n />\r\n <div class=\"form-row\">\r\n <button type=\"button\" (click)=\"closeChronotope()\" mat-icon-button>\r\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n <button type=\"button\" (click)=\"saveChronotope()\" mat-icon-button>\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n <span>chronotope</span>\r\n </div>\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}#editor{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: AssertedChronotopeComponent, selector: "cadmus-refs-asserted-chronotope", inputs: ["chronotope", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries"], outputs: ["chronotopeChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: HistoricalDatePipe, name: "historicalDate" }, { kind: "pipe", type: AssertedChronotopesPipe, name: "assertedChronotopes" }] });
2131
2132
  }
2132
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: ChronotopesPartComponent, decorators: [{
2133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ChronotopesPartComponent, decorators: [{
2133
2134
  type: Component,
2134
2135
  args: [{ selector: 'cadmus-chronotopes-part', imports: [
2135
2136
  FormsModule,
@@ -2801,10 +2802,10 @@ class CommentEditorComponent extends ModelEditorComponentBase {
2801
2802
  }
2802
2803
  return entries.length ? entries : undefined;
2803
2804
  }
2804
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: CommentEditorComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3$1.CadmusTextEdService }, { token: CADMUS_TEXT_ED_BINDINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component });
2805
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: CommentEditorComponent, isStandalone: true, selector: "cadmus-comment-editor", providers: [CadmusTextEdService], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>Comment</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-tab-group>\r\n <mat-tab label=\"comment\">\r\n <!-- tag (bound) -->\r\n <div>\r\n @if (comTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of comTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- text -->\r\n <div>\r\n <nge-monaco-editor\r\n style=\"--editor-height: 800px\"\r\n (ready)=\"onCreateEditor($event)\"\r\n />\r\n @if (text.hasError('required') && (text.touched || text.dirty)) {\r\n <mat-error>text required</mat-error>\r\n }\r\n </div>\r\n <div id=\"pvw\">\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>preview</mat-expansion-panel-header>\r\n <nge-markdown [data]=\"text.value || undefined\" />\r\n </mat-expansion-panel>\r\n </div>\r\n </mat-tab>\r\n\r\n <mat-tab label=\"references\">\r\n <!-- references -->\r\n <fieldset>\r\n <legend>references</legend>\r\n <cadmus-refs-doc-references\r\n [references]=\"references.value\"\r\n [tagEntries]=\"refTagEntries()\"\r\n [typeEntries]=\"refTypeEntries()\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </fieldset>\r\n\r\n <!-- links -->\r\n <fieldset>\r\n <legend>links</legend>\r\n <cadmus-refs-asserted-composite-ids\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n [ids]=\"links.value\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </mat-tab>\r\n\r\n <!-- categories -->\r\n @if (catEntries()?.length) {\r\n <mat-tab label=\"categories\">\r\n <div id=\"container\">\r\n <div id=\"picker\">\r\n <fieldset>\r\n <legend>available categories</legend>\r\n <cadmus-thesaurus-tree\r\n [entries]=\"catEntries()\"\r\n rootLabel=\"categories\"\r\n [renderLabel]=\"renderLabel\"\r\n (entryChange)=\"onCategoryChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n @if (categories.value.length) {\r\n <div id=\"list\">\r\n <fieldset>\r\n <legend>assigned categories</legend>\r\n <table>\r\n <tbody>\r\n @for (entry of categories.value; track entry; let i =\r\n $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this category\"\r\n (click)=\"removeCategory(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td [matTooltip]=\"entry.id\">{{ entry.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </fieldset>\r\n </div>\r\n }\r\n </div>\r\n </mat-tab>\r\n }\r\n\r\n <!-- keywords -->\r\n <mat-tab label=\"keywords\">\r\n <div formArrayName=\"keywords\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addKeyword()\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n keyword\r\n </button>\r\n </div>\r\n <!-- keyword -->\r\n @for ( item of keywords.controls; track item; let i = $index; let\r\n first = $first; let last = $last) {\r\n <div>\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\" class=\"form-row\">\r\n <!-- child actions -->\r\n <span>{{ i + 1 }}.</span>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this keyword\"\r\n (click)=\"removeKeyword(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">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 keyword up\"\r\n (click)=\"moveKeywordUp(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 keyword down\"\r\n (click)=\"moveKeywordDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <!-- child controls -->\r\n <!-- indexId (bound) -->\r\n @if (idxEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>index</mat-label>\r\n <mat-select formControlName=\"indexId\">\r\n @for (e of idxEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- indexId (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>index</mat-label>\r\n <input matInput formControlName=\"indexId\" />\r\n @if ( $any(item)['controls'].indexId.errors?.maxLength &&\r\n ($any(item)['controls'].indexId.dirty ||\r\n $any(item)['controls'].indexId.touched) ) {\r\n <mat-error>ID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- tag (bound) -->\r\n @if (keyTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n @for (e of keyTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n @if ( $any(item)['controls'].tag.errors?.maxLength &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched) ) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- language (bound) -->\r\n @if (langEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <mat-select formControlName=\"language\">\r\n @for (e of langEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(item)['controls'].language.errors?.required &&\r\n ($any(item)['controls'].language.dirty ||\r\n $any(item)['controls'].language.touched) ) {\r\n <mat-error>language required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- language (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <input matInput formControlName=\"language\" />\r\n @if ( $any(item)['controls'].language.errors?.required &&\r\n ($any(item)['controls'].language.dirty ||\r\n $any(item)['controls'].language.touched) ) {\r\n <mat-error>language required</mat-error>\r\n } @if ( $any(item)['controls'].language.errors?.maxLength &&\r\n ($any(item)['controls'].language.dirty ||\r\n $any(item)['controls'].language.touched) ) {\r\n <mat-error>language too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput formControlName=\"value\" />\r\n @if ( $any(item)['controls'].value.errors?.required &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched) ) {\r\n <mat-error>value required</mat-error>\r\n } @if ( $any(item)['controls'].value.errors?.maxLength &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched) ) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- note -->\r\n <mat-form-field>\r\n <mat-label>note</mat-label>\r\n <input matInput formControlName=\"note\" />\r\n @if ( $any(item)['controls'].note.errors?.maxLength &&\r\n ($any(item)['controls'].note.dirty ||\r\n $any(item)['controls'].note.touched) ) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".ind-long-text{width:100%;max-width:600px;margin-left:4em}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}td.fit-width{width:1px;white-space:nowrap}fieldset{border:1px solid silver;border-radius:6px;padding:4px;margin:8px 0}legend{color:silver}div#pvw{border:1px solid silver;border-radius:6px;padding:6px;margin:16px 0}div#picker{grid-area:picker}div#list{grid-area:list}div#container{display:grid;grid-template-rows:1fr;grid-template-columns:auto auto;grid-template-areas:\"picker list\";gap:8px}@media only screen and (max-width:959px){div#container{grid-template-rows:1fr auto;grid-template-columns:1fr;grid-template-areas:\"picker\" \"list\"}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: NgeMonacoModule }, { kind: "component", type: i4$4.NgeMonacoEditorComponent, selector: "nge-monaco-editor", inputs: ["autoLayout", "options"], outputs: ["ready"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: NgeMarkdownModule }, { kind: "component", type: i5$1.NgeMarkdownComponent, selector: "nge-markdown, [nge-markdown]", inputs: ["file", "data", "theme"], outputs: ["render"] }, { kind: "component", type: DocReferencesComponent, selector: "cadmus-refs-doc-references", inputs: ["references", "typeEntries", "tagEntries"], outputs: ["referencesChange"] }, { kind: "component", type: AssertedCompositeIdsComponent, selector: "cadmus-refs-asserted-composite-ids", inputs: ["ids", "idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idsChange"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: ThesaurusTreeComponent, selector: "cadmus-thesaurus-tree", inputs: ["entries", "renderLabel"], outputs: ["entryChange"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }] });
2805
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: CommentEditorComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3$1.CadmusTextEdService }, { token: CADMUS_TEXT_ED_BINDINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component });
2806
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: CommentEditorComponent, isStandalone: true, selector: "cadmus-comment-editor", providers: [CadmusTextEdService], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>Comment</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-tab-group>\r\n <mat-tab label=\"comment\">\r\n <!-- tag (bound) -->\r\n <div>\r\n @if (comTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of comTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- text -->\r\n <div>\r\n <nge-monaco-editor\r\n style=\"--editor-height: 800px\"\r\n (ready)=\"onCreateEditor($event)\"\r\n />\r\n @if (text.hasError('required') && (text.touched || text.dirty)) {\r\n <mat-error>text required</mat-error>\r\n }\r\n </div>\r\n <div id=\"pvw\">\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>preview</mat-expansion-panel-header>\r\n <nge-markdown [data]=\"text.value || undefined\" />\r\n </mat-expansion-panel>\r\n </div>\r\n </mat-tab>\r\n\r\n <mat-tab label=\"references\">\r\n <!-- references -->\r\n <fieldset>\r\n <legend>references</legend>\r\n <cadmus-refs-doc-references\r\n [references]=\"references.value\"\r\n [tagEntries]=\"refTagEntries()\"\r\n [typeEntries]=\"refTypeEntries()\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </fieldset>\r\n\r\n <!-- links -->\r\n <fieldset>\r\n <legend>links</legend>\r\n <cadmus-refs-asserted-composite-ids\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n [ids]=\"links.value\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </fieldset>\r\n </mat-tab>\r\n\r\n <!-- categories -->\r\n @if (catEntries()?.length) {\r\n <mat-tab label=\"categories\">\r\n <div id=\"container\">\r\n <div id=\"picker\">\r\n <fieldset>\r\n <legend>available categories</legend>\r\n <cadmus-thesaurus-tree\r\n [entries]=\"catEntries()\"\r\n rootLabel=\"categories\"\r\n [renderLabel]=\"renderLabel\"\r\n (entryChange)=\"onCategoryChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n @if (categories.value.length) {\r\n <div id=\"list\">\r\n <fieldset>\r\n <legend>assigned categories</legend>\r\n <table>\r\n <tbody>\r\n @for (entry of categories.value; track entry; let i =\r\n $index) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this category\"\r\n (click)=\"removeCategory(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td [matTooltip]=\"entry.id\">{{ entry.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </fieldset>\r\n </div>\r\n }\r\n </div>\r\n </mat-tab>\r\n }\r\n\r\n <!-- keywords -->\r\n <mat-tab label=\"keywords\">\r\n <div formArrayName=\"keywords\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addKeyword()\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n keyword\r\n </button>\r\n </div>\r\n <!-- keyword -->\r\n @for ( item of keywords.controls; track item; let i = $index; let\r\n first = $first; let last = $last) {\r\n <div>\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\" class=\"form-row\">\r\n <!-- child actions -->\r\n <span>{{ i + 1 }}.</span>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this keyword\"\r\n (click)=\"removeKeyword(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">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 keyword up\"\r\n (click)=\"moveKeywordUp(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 keyword down\"\r\n (click)=\"moveKeywordDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <!-- child controls -->\r\n <!-- indexId (bound) -->\r\n @if (idxEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>index</mat-label>\r\n <mat-select formControlName=\"indexId\">\r\n @for (e of idxEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- indexId (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>index</mat-label>\r\n <input matInput formControlName=\"indexId\" />\r\n @if ( $any(item)['controls'].indexId.errors?.maxLength &&\r\n ($any(item)['controls'].indexId.dirty ||\r\n $any(item)['controls'].indexId.touched) ) {\r\n <mat-error>ID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- tag (bound) -->\r\n @if (keyTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select formControlName=\"tag\">\r\n @for (e of keyTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput formControlName=\"tag\" />\r\n @if ( $any(item)['controls'].tag.errors?.maxLength &&\r\n ($any(item)['controls'].tag.dirty ||\r\n $any(item)['controls'].tag.touched) ) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- language (bound) -->\r\n @if (langEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <mat-select formControlName=\"language\">\r\n @for (e of langEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(item)['controls'].language.errors?.required &&\r\n ($any(item)['controls'].language.dirty ||\r\n $any(item)['controls'].language.touched) ) {\r\n <mat-error>language required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- language (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <input matInput formControlName=\"language\" />\r\n @if ( $any(item)['controls'].language.errors?.required &&\r\n ($any(item)['controls'].language.dirty ||\r\n $any(item)['controls'].language.touched) ) {\r\n <mat-error>language required</mat-error>\r\n } @if ( $any(item)['controls'].language.errors?.maxLength &&\r\n ($any(item)['controls'].language.dirty ||\r\n $any(item)['controls'].language.touched) ) {\r\n <mat-error>language too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput formControlName=\"value\" />\r\n @if ( $any(item)['controls'].value.errors?.required &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched) ) {\r\n <mat-error>value required</mat-error>\r\n } @if ( $any(item)['controls'].value.errors?.maxLength &&\r\n ($any(item)['controls'].value.dirty ||\r\n $any(item)['controls'].value.touched) ) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- note -->\r\n <mat-form-field>\r\n <mat-label>note</mat-label>\r\n <input matInput formControlName=\"note\" />\r\n @if ( $any(item)['controls'].note.errors?.maxLength &&\r\n ($any(item)['controls'].note.dirty ||\r\n $any(item)['controls'].note.touched) ) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".ind-long-text{width:100%;max-width:600px;margin-left:4em}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}td.fit-width{width:1px;white-space:nowrap}fieldset{border:1px solid silver;border-radius:6px;padding:4px;margin:8px 0}legend{color:silver}div#pvw{border:1px solid silver;border-radius:6px;padding:6px;margin:16px 0}div#picker{grid-area:picker}div#list{grid-area:list}div#container{display:grid;grid-template-rows:1fr;grid-template-columns:auto auto;grid-template-areas:\"picker list\";gap:8px}@media only screen and (max-width:959px){div#container{grid-template-rows:1fr auto;grid-template-columns:1fr;grid-template-areas:\"picker\" \"list\"}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: NgeMonacoModule }, { kind: "component", type: i4$4.NgeMonacoEditorComponent, selector: "nge-monaco-editor", inputs: ["autoLayout", "options"], outputs: ["ready"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: NgeMarkdownModule }, { kind: "component", type: i5$1.NgeMarkdownComponent, selector: "nge-markdown, [nge-markdown]", inputs: ["file", "data", "theme"], outputs: ["render"] }, { kind: "component", type: DocReferencesComponent, selector: "cadmus-refs-doc-references", inputs: ["references", "typeEntries", "tagEntries"], outputs: ["referencesChange"] }, { kind: "component", type: AssertedCompositeIdsComponent, selector: "cadmus-refs-asserted-composite-ids", inputs: ["ids", "idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "featureEntries", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idsChange"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: ThesaurusTreeComponent, selector: "cadmus-thesaurus-tree", inputs: ["entries", "renderLabel"], outputs: ["entryChange"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }] });
2806
2807
  }
2807
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: CommentEditorComponent, decorators: [{
2808
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: CommentEditorComponent, decorators: [{
2808
2809
  type: Component,
2809
2810
  args: [{ selector: 'cadmus-comment-editor', imports: [
2810
2811
  FormsModule,
@@ -2995,10 +2996,10 @@ class DecoratedCountsPartComponent extends ModelEditorComponentBase {
2995
2996
  this.counts.markAsDirty();
2996
2997
  this.counts.updateValueAndValidity();
2997
2998
  }
2998
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: DecoratedCountsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
2999
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: DecoratedCountsPartComponent, isStandalone: true, selector: "cadmus-decorated-counts-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Decorated Counts Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-decorated-counts\r\n [idEntries]=\"idEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n [counts]=\"counts.value\"\r\n (countsChange)=\"onCountsChange($event!)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: DecoratedCountsComponent, selector: "cadmus-refs-decorated-counts", inputs: ["counts", "allowCustomId", "distinct", "idEntries", "tagEntries"], outputs: ["countsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
2999
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DecoratedCountsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3000
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.0", type: DecoratedCountsPartComponent, isStandalone: true, selector: "cadmus-decorated-counts-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Decorated Counts Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-decorated-counts\r\n [idEntries]=\"idEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n [counts]=\"counts.value\"\r\n (countsChange)=\"onCountsChange($event!)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: DecoratedCountsComponent, selector: "cadmus-refs-decorated-counts", inputs: ["counts", "allowCustomId", "distinct", "idEntries", "tagEntries"], outputs: ["countsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
3000
3001
  }
3001
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: DecoratedCountsPartComponent, decorators: [{
3002
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DecoratedCountsPartComponent, decorators: [{
3002
3003
  type: Component,
3003
3004
  args: [{ selector: 'cadmus-decorated-counts-part', imports: [
3004
3005
  FormsModule,
@@ -3182,10 +3183,10 @@ class DistrictLocationPartComponent extends ModelEditorComponentBase {
3182
3183
  part.note = this.note.value?.trim() || undefined;
3183
3184
  return part;
3184
3185
  }
3185
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: DistrictLocationPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3186
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: DistrictLocationPartComponent, isStandalone: true, selector: "cadmus-district-location-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"District Location Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <!-- place -->\r\n <div>\r\n <fieldset>\r\n <legend i18n>place</legend>\r\n <cadmus-refs-proper-name\r\n [langEntries]=\"langEntries()\"\r\n [typeEntries]=\"typeEntries()\"\r\n [name]=\"name()\"\r\n [hideAssertion]=\"true\"\r\n (nameChange)=\"onNameChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n\r\n <!-- note -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label i18n>note</mat-label>\r\n <textarea matInput [formControl]=\"note\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error i18n>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.long-text{width:100%;max-width:800px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: ProperNameComponent, selector: "cadmus-refs-proper-name", inputs: ["name", "typeEntries", "langEntries", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "hideAssertion"], outputs: ["nameChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
3186
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DistrictLocationPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3187
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: DistrictLocationPartComponent, isStandalone: true, selector: "cadmus-district-location-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"District Location Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <!-- place -->\r\n <div>\r\n <fieldset>\r\n <legend i18n>place</legend>\r\n <cadmus-refs-proper-name\r\n [langEntries]=\"langEntries()\"\r\n [typeEntries]=\"typeEntries()\"\r\n [name]=\"name()\"\r\n [hideAssertion]=\"true\"\r\n (nameChange)=\"onNameChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n\r\n <!-- note -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label i18n>note</mat-label>\r\n <textarea matInput [formControl]=\"note\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error i18n>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.long-text{width:100%;max-width:800px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: ProperNameComponent, selector: "cadmus-refs-proper-name", inputs: ["name", "typeEntries", "langEntries", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "hideAssertion"], outputs: ["nameChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
3187
3188
  }
3188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: DistrictLocationPartComponent, decorators: [{
3189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DistrictLocationPartComponent, decorators: [{
3189
3190
  type: Component,
3190
3191
  args: [{ selector: 'cadmus-district-location-part', imports: [
3191
3192
  FormsModule,
@@ -3367,10 +3368,10 @@ class DocReferencesPartComponent extends ModelEditorComponentBase {
3367
3368
  this.references.updateValueAndValidity();
3368
3369
  this.references.markAsDirty();
3369
3370
  }
3370
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: DocReferencesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3371
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: DocReferencesPartComponent, isStandalone: true, selector: "cadmus-doc-references-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Document References Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-lookup-doc-references\r\n [references]=\"references.value\"\r\n [typeEntries]=\"typeEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n [noLookup]=\"settings()?.noLookup\"\r\n [noCitation]=\"settings()?.noCitation\"\r\n [defaultPicker]=\"settings()?.defaultPicker || 'lookup'\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: LookupDocReferencesComponent, selector: "cadmus-refs-lookup-doc-references", inputs: ["references", "typeEntries", "tagEntries", "noLookup", "noCitation", "defaultPicker", "autoCloseOnPick"], outputs: ["referencesChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
3371
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DocReferencesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3372
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.0", type: DocReferencesPartComponent, isStandalone: true, selector: "cadmus-doc-references-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Document References Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-lookup-doc-references\r\n [references]=\"references.value\"\r\n [typeEntries]=\"typeEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n [noLookup]=\"settings()?.noLookup\"\r\n [noCitation]=\"settings()?.noCitation\"\r\n [defaultPicker]=\"settings()?.defaultPicker || 'lookup'\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: LookupDocReferencesComponent, selector: "cadmus-refs-lookup-doc-references", inputs: ["references", "typeEntries", "tagEntries", "noLookup", "noCitation", "defaultPicker", "autoCloseOnPick"], outputs: ["referencesChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
3372
3373
  }
3373
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: DocReferencesPartComponent, decorators: [{
3374
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DocReferencesPartComponent, decorators: [{
3374
3375
  type: Component,
3375
3376
  args: [{ selector: 'cadmus-doc-references-part', imports: [
3376
3377
  FormsModule,
@@ -3568,10 +3569,10 @@ class ExternalIdsPartComponent extends ModelEditorComponentBase {
3568
3569
  this.ids.markAsDirty();
3569
3570
  this.ids.updateValueAndValidity();
3570
3571
  }
3571
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: ExternalIdsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3572
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: ExternalIdsPartComponent, isStandalone: true, selector: "cadmus-refs-external-ids-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"External IDs Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-asserted-ids\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [ids]=\"ids.value\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: AssertedIdsComponent, selector: "cadmus-refs-asserted-ids", inputs: ["ids", "idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries"], outputs: ["idsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
3572
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ExternalIdsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3573
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.0", type: ExternalIdsPartComponent, isStandalone: true, selector: "cadmus-refs-external-ids-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"External IDs Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-asserted-ids\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [ids]=\"ids.value\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: AssertedIdsComponent, selector: "cadmus-refs-asserted-ids", inputs: ["ids", "idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries"], outputs: ["idsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
3573
3574
  }
3574
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: ExternalIdsPartComponent, decorators: [{
3575
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ExternalIdsPartComponent, decorators: [{
3575
3576
  type: Component,
3576
3577
  args: [{ selector: 'cadmus-refs-external-ids-part', imports: [
3577
3578
  FormsModule,
@@ -3770,12 +3771,12 @@ class FlagsPartComponent extends ModelEditorComponentBase {
3770
3771
  Object.keys(filteredNotes).length > 0 ? filteredNotes : undefined;
3771
3772
  return part;
3772
3773
  }
3773
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: FlagsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3774
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: FlagsPartComponent, isStandalone: true, selector: "cadmus-flags-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>\r\n {{ (modelName() | titlecase) || \"Flags Part\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n @if (flagEntries().length) {\r\n <div>\r\n <cadmus-ui-flag-set\r\n [flags]=\"featureFlags()\"\r\n [checkedIds]=\"flags.value\"\r\n (checkedIdsChange)=\"onFlagsCheckedIdsChange($event)\"\r\n />\r\n </div>\r\n } @if (settings()) {\r\n <div>\r\n <fieldset>\r\n <legend>notes</legend>\r\n <cadmus-ui-note-set\r\n [(set)]=\"notes.value\"\r\n (noteChange)=\"onNoteChange($event)\"\r\n (setChange)=\"onSetChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["fieldset{border:1px solid silver;border-radius:4px;padding:8px;margin:8px 0}fieldset legend{color:silver}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i5.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i5.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type:
3774
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: FlagsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3775
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: FlagsPartComponent, isStandalone: true, selector: "cadmus-flags-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>\r\n {{ (modelName() | titlecase) || \"Flags Part\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n @if (flagEntries().length) {\r\n <div>\r\n <cadmus-ui-flag-set\r\n [flags]=\"featureFlags()\"\r\n [checkedIds]=\"flags.value\"\r\n (checkedIdsChange)=\"onFlagsCheckedIdsChange($event)\"\r\n />\r\n </div>\r\n } @if (settings()) {\r\n <div>\r\n <fieldset>\r\n <legend>notes</legend>\r\n <cadmus-ui-note-set\r\n [(set)]=\"notes.value\"\r\n (noteChange)=\"onNoteChange($event)\"\r\n (setChange)=\"onSetChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["fieldset{border:1px solid silver;border-radius:4px;padding:8px;margin:8px 0}fieldset legend{color:silver}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i5.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i5.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type:
3775
3776
  // cadmus
3776
3777
  FlagSetComponent, selector: "cadmus-ui-flag-set", inputs: ["flags", "checkedIds", "allowCustom", "hideToolbar", "numbering"], outputs: ["checkedIdsChange"] }, { kind: "component", type: NoteSetComponent, selector: "cadmus-ui-note-set", inputs: ["set"], outputs: ["setChange", "noteChange"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }] });
3777
3778
  }
3778
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: FlagsPartComponent, decorators: [{
3779
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: FlagsPartComponent, decorators: [{
3779
3780
  type: Component,
3780
3781
  args: [{ selector: 'cadmus-flags-part', imports: [
3781
3782
  CommonModule,
@@ -4271,10 +4272,10 @@ class RelatedEntityComponent {
4271
4272
  }
4272
4273
  this.entity.set(this.getEntity());
4273
4274
  }
4274
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: RelatedEntityComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
4275
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: RelatedEntityComponent, isStandalone: true, selector: "cadmus-related-entity", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: false, transformFunction: null }, relationEntries: { classPropertyName: "relationEntries", publicName: "relationEntries", isSignal: true, isRequired: false, transformFunction: null }, idScopeEntries: { classPropertyName: "idScopeEntries", publicName: "idScopeEntries", isSignal: true, isRequired: false, transformFunction: null }, idTagEntries: { classPropertyName: "idTagEntries", publicName: "idTagEntries", isSignal: true, isRequired: false, transformFunction: null }, assTagEntries: { classPropertyName: "assTagEntries", publicName: "assTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTagEntries: { classPropertyName: "refTagEntries", publicName: "refTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTypeEntries: { classPropertyName: "refTypeEntries", publicName: "refTypeEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { entity: "entityChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"form-row\" (submit)=\"save()\">\r\n <!-- relation (bound) -->\r\n @if (relationEntries()?.length) {\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>relation</mat-label>\r\n <mat-select [formControl]=\"relation\">\r\n @for (e of relationEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(relation).errors?.required && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- relation (free) -->\r\n @else {\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>relation</mat-label>\r\n <input matInput [formControl]=\"relation\" />\r\n @if ( $any(relation).errors?.required && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation required</mat-error>\r\n } @if ( $any(relation).errors?.maxLength && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- id -->\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n [id]=\"id.value || undefined\"\r\n (idChange)=\"onIdChange($event!)\"\r\n />\r\n\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-icon-button type=\"submit\" matTooltip=\"Save entity\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n</form>\r\n", styles: [".long-text{width:100%;max-width:800px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: AssertedCompositeIdComponent, selector: "cadmus-refs-asserted-composite-id", inputs: ["idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "id", "hasSubmit", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idChange", "editorClose", "extMoreRequest"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
4275
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: RelatedEntityComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
4276
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: RelatedEntityComponent, isStandalone: true, selector: "cadmus-related-entity", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: false, transformFunction: null }, relationEntries: { classPropertyName: "relationEntries", publicName: "relationEntries", isSignal: true, isRequired: false, transformFunction: null }, idScopeEntries: { classPropertyName: "idScopeEntries", publicName: "idScopeEntries", isSignal: true, isRequired: false, transformFunction: null }, idTagEntries: { classPropertyName: "idTagEntries", publicName: "idTagEntries", isSignal: true, isRequired: false, transformFunction: null }, assTagEntries: { classPropertyName: "assTagEntries", publicName: "assTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTagEntries: { classPropertyName: "refTagEntries", publicName: "refTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTypeEntries: { classPropertyName: "refTypeEntries", publicName: "refTypeEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { entity: "entityChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"form-row\" (submit)=\"save()\">\r\n <!-- relation (bound) -->\r\n @if (relationEntries()?.length) {\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>relation</mat-label>\r\n <mat-select [formControl]=\"relation\">\r\n @for (e of relationEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(relation).errors?.required && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- relation (free) -->\r\n @else {\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>relation</mat-label>\r\n <input matInput [formControl]=\"relation\" />\r\n @if ( $any(relation).errors?.required && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation required</mat-error>\r\n } @if ( $any(relation).errors?.maxLength && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- id -->\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n [id]=\"id.value || undefined\"\r\n (idChange)=\"onIdChange($event!)\"\r\n />\r\n\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-icon-button type=\"submit\" matTooltip=\"Save entity\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n</form>\r\n", styles: [".long-text{width:100%;max-width:800px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: AssertedCompositeIdComponent, selector: "cadmus-refs-asserted-composite-id", inputs: ["idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "featureEntries", "id", "hasSubmit", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idChange", "editorClose", "extMoreRequest"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
4276
4277
  }
4277
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: RelatedEntityComponent, decorators: [{
4278
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: RelatedEntityComponent, decorators: [{
4278
4279
  type: Component,
4279
4280
  args: [{ selector: 'cadmus-related-entity', imports: [
4280
4281
  FormsModule,
@@ -4555,10 +4556,10 @@ class HistoricalEventEditorComponent {
4555
4556
  }
4556
4557
  this.event.set(this.getModel());
4557
4558
  }
4558
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: HistoricalEventEditorComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
4559
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: HistoricalEventEditorComponent, isStandalone: true, selector: "cadmus-historical-event-editor", inputs: { event: { classPropertyName: "event", publicName: "event", isSignal: true, isRequired: false, transformFunction: null }, eventTypeEntries: { classPropertyName: "eventTypeEntries", publicName: "eventTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, eventTagEntries: { classPropertyName: "eventTagEntries", publicName: "eventTagEntries", isSignal: true, isRequired: false, transformFunction: null }, relationEntries: { classPropertyName: "relationEntries", publicName: "relationEntries", isSignal: true, isRequired: false, transformFunction: null }, ctTagEntries: { classPropertyName: "ctTagEntries", publicName: "ctTagEntries", isSignal: true, isRequired: false, transformFunction: null }, idScopeEntries: { classPropertyName: "idScopeEntries", publicName: "idScopeEntries", isSignal: true, isRequired: false, transformFunction: null }, idTagEntries: { classPropertyName: "idTagEntries", publicName: "idTagEntries", isSignal: true, isRequired: false, transformFunction: null }, assTagEntries: { classPropertyName: "assTagEntries", publicName: "assTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTagEntries: { classPropertyName: "refTagEntries", publicName: "refTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTypeEntries: { classPropertyName: "refTypeEntries", publicName: "refTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, eventTypeTailCut: { classPropertyName: "eventTypeTailCut", publicName: "eventTypeTailCut", isSignal: true, isRequired: false, transformFunction: null }, noLookup: { classPropertyName: "noLookup", publicName: "noLookup", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { event: "eventChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-tab-group>\r\n <mat-tab label=\"general\">\r\n @if (eventTypeEntries()?.length) {\r\n <!-- bound type -->\r\n <div id=\"container\">\r\n <div id=\"ids\" class=\"form-row\">\r\n <!-- eid -->\r\n <mat-form-field>\r\n <mat-label>EID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n @if ($any(eid).errors?.required && (eid.dirty || eid.touched)) {\r\n <mat-error>EID required</mat-error>\r\n } @if ($any(eid).errors?.maxLength && (eid.dirty || eid.touched)) {\r\n <mat-error>EID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- tag (bound) -->\r\n @if (eventTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of eventTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- type (bound) -->\r\n <div id=\"type\">\r\n <fieldset>\r\n <legend>type</legend>\r\n @if (type.value) {\r\n <div class=\"sel-type\">\r\n {{\r\n type.value | flatLookup : eventTypeEntries() : \"id\" : \"value\"\r\n }}\r\n </div>\r\n } @else {\r\n <mat-error>no type</mat-error>\r\n }\r\n <cadmus-thesaurus-tree\r\n [entries]=\"eventTypeEntries()\"\r\n rootLabel=\"types\"\r\n [renderLabel]=\"renderLabel\"\r\n (entryChange)=\"onTypeEntryChange($event)\"\r\n />\r\n @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </fieldset>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- free type -->\r\n <div class=\"form-row\">\r\n <!-- eid -->\r\n <mat-form-field>\r\n <mat-label>EID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n @if ($any(eid).errors?.required && (eid.dirty || eid.touched)) {\r\n <mat-error>EID required</mat-error>\r\n } @if ($any(eid).errors?.maxLength && (eid.dirty || eid.touched)) {\r\n <mat-error>EID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- type (free) -->\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <input matInput [formControl]=\"type\" />\r\n @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n } @if ($any(type).errors?.maxLength && (type.dirty || type.touched)) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- tag (bound) -->\r\n @if (eventTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of eventTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n }\r\n <div>\r\n <!-- description -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>description</mat-label>\r\n <textarea matInput [formControl]=\"description\"></textarea>\r\n @if ( $any(description).errors?.maxLength && (description.dirty ||\r\n description.touched) ) {\r\n <mat-error>description too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <!-- note -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput [formControl]=\"note\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <!-- chronotopes -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>chronotopes</mat-expansion-panel-header>\r\n <fieldset>\r\n <legend>chronotopes</legend>\r\n <cadmus-asserted-chronotope-set\r\n [tagEntries]=\"ctTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [chronotopes]=\"chronotopes.value || undefined\"\r\n (chronotopesChange)=\"onChronotopesChange($event!)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n\r\n <!-- assertion -->\r\n <mat-checkbox [formControl]=\"hasAssertion\">assertion</mat-checkbox>\r\n <mat-expansion-panel\r\n [expanded]=\"hasAssertion.value\"\r\n [disabled]=\"!hasAssertion.value\"\r\n >\r\n <fieldset>\r\n <legend>assertion</legend>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [assertion]=\"assertion.value || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n\r\n <mat-tab label=\"related\">\r\n <!-- list -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addEntity()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> related\r\n </button>\r\n </div>\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>relation</th>\r\n <th>ID</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (e of relatedEntities.value; track e.id; let i = $index) {\r\n <tr [class.selected]=\"i === editedEntityIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"editEntity(e, i)\"\r\n matTooltip=\"Edit this entity\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"deleteEntity(i)\"\r\n matTooltip=\"Delete this entity\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ e.relation | flatLookup : relationEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ e.id.target.label }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- entity editor -->\r\n <mat-expansion-panel\r\n [disabled]=\"!editedEntity()\"\r\n [expanded]=\"editedEntity()\"\r\n >\r\n <mat-expansion-panel-header>entity</mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-related-entity\r\n [relationEntries]=\"currentRelEntries()\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [entity]=\"editedEntity()\"\r\n (entityChange)=\"onEntityChange($event!)\"\r\n (editorClose)=\"closeEntity()\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- buttons -->\r\n <hr />\r\n <div class=\"button-row\">\r\n <button type=\"button\" mat-icon-button (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Save event\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n <span>event</span>\r\n </div>\r\n</form>\r\n", styles: [".long-text{width:90%;max-width:800px}table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}legend{color:silver}.sel-type{background-color:#d8d8d8;border-radius:4px;padding:6px;margin-bottom:8px}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.button-row{display:flex;align-items:center;flex-wrap:wrap}div#container{display:grid;grid-template-rows:auto;grid-template-columns:auto 1fr;grid-template-areas:\"ids type\";gap:8px;margin-bottom:8px}div#ids{grid-area:ids}div#type{grid-area:type}@media only screen and (max-width:959px){div#container{grid-template-columns:1fr;grid-template-areas:\"ids\" \"type\"}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "component", type: AssertedChronotopeSetComponent, selector: "cadmus-asserted-chronotope-set", inputs: ["chronotopes", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries"], outputs: ["chronotopesChange"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion", "noLookup", "noCitation", "defaultPicker"], outputs: ["assertionChange"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: RelatedEntityComponent, selector: "cadmus-related-entity", inputs: ["entity", "relationEntries", "idScopeEntries", "idTagEntries", "assTagEntries", "refTagEntries", "refTypeEntries"], outputs: ["entityChange", "editorClose"] }, { kind: "component", type: ThesaurusTreeComponent, selector: "cadmus-thesaurus-tree", inputs: ["entries", "renderLabel"], outputs: ["entryChange"] }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
4559
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: HistoricalEventEditorComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
4560
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: HistoricalEventEditorComponent, isStandalone: true, selector: "cadmus-historical-event-editor", inputs: { event: { classPropertyName: "event", publicName: "event", isSignal: true, isRequired: false, transformFunction: null }, eventTypeEntries: { classPropertyName: "eventTypeEntries", publicName: "eventTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, eventTagEntries: { classPropertyName: "eventTagEntries", publicName: "eventTagEntries", isSignal: true, isRequired: false, transformFunction: null }, relationEntries: { classPropertyName: "relationEntries", publicName: "relationEntries", isSignal: true, isRequired: false, transformFunction: null }, ctTagEntries: { classPropertyName: "ctTagEntries", publicName: "ctTagEntries", isSignal: true, isRequired: false, transformFunction: null }, idScopeEntries: { classPropertyName: "idScopeEntries", publicName: "idScopeEntries", isSignal: true, isRequired: false, transformFunction: null }, idTagEntries: { classPropertyName: "idTagEntries", publicName: "idTagEntries", isSignal: true, isRequired: false, transformFunction: null }, assTagEntries: { classPropertyName: "assTagEntries", publicName: "assTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTagEntries: { classPropertyName: "refTagEntries", publicName: "refTagEntries", isSignal: true, isRequired: false, transformFunction: null }, refTypeEntries: { classPropertyName: "refTypeEntries", publicName: "refTypeEntries", isSignal: true, isRequired: false, transformFunction: null }, eventTypeTailCut: { classPropertyName: "eventTypeTailCut", publicName: "eventTypeTailCut", isSignal: true, isRequired: false, transformFunction: null }, noLookup: { classPropertyName: "noLookup", publicName: "noLookup", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { event: "eventChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-tab-group>\r\n <mat-tab label=\"general\">\r\n @if (eventTypeEntries()?.length) {\r\n <!-- bound type -->\r\n <div id=\"container\">\r\n <div id=\"ids\" class=\"form-row\">\r\n <!-- eid -->\r\n <mat-form-field>\r\n <mat-label>EID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n @if ($any(eid).errors?.required && (eid.dirty || eid.touched)) {\r\n <mat-error>EID required</mat-error>\r\n } @if ($any(eid).errors?.maxLength && (eid.dirty || eid.touched)) {\r\n <mat-error>EID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- tag (bound) -->\r\n @if (eventTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of eventTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- type (bound) -->\r\n <div id=\"type\">\r\n <fieldset>\r\n <legend>type</legend>\r\n @if (type.value) {\r\n <div class=\"sel-type\">\r\n {{\r\n type.value | flatLookup : eventTypeEntries() : \"id\" : \"value\"\r\n }}\r\n </div>\r\n } @else {\r\n <mat-error>no type</mat-error>\r\n }\r\n <cadmus-thesaurus-tree\r\n [entries]=\"eventTypeEntries()\"\r\n rootLabel=\"types\"\r\n [renderLabel]=\"renderLabel\"\r\n (entryChange)=\"onTypeEntryChange($event)\"\r\n />\r\n @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </fieldset>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- free type -->\r\n <div class=\"form-row\">\r\n <!-- eid -->\r\n <mat-form-field>\r\n <mat-label>EID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n @if ($any(eid).errors?.required && (eid.dirty || eid.touched)) {\r\n <mat-error>EID required</mat-error>\r\n } @if ($any(eid).errors?.maxLength && (eid.dirty || eid.touched)) {\r\n <mat-error>EID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- type (free) -->\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <input matInput [formControl]=\"type\" />\r\n @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n } @if ($any(type).errors?.maxLength && (type.dirty || type.touched)) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- tag (bound) -->\r\n @if (eventTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of eventTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n }\r\n <div>\r\n <!-- description -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>description</mat-label>\r\n <textarea matInput [formControl]=\"description\"></textarea>\r\n @if ( $any(description).errors?.maxLength && (description.dirty ||\r\n description.touched) ) {\r\n <mat-error>description too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <!-- note -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput [formControl]=\"note\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <!-- chronotopes -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>chronotopes</mat-expansion-panel-header>\r\n <fieldset>\r\n <legend>chronotopes</legend>\r\n <cadmus-asserted-chronotope-set\r\n [tagEntries]=\"ctTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [chronotopes]=\"chronotopes.value || undefined\"\r\n (chronotopesChange)=\"onChronotopesChange($event!)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n\r\n <!-- assertion -->\r\n <mat-checkbox [formControl]=\"hasAssertion\">assertion</mat-checkbox>\r\n <mat-expansion-panel\r\n [expanded]=\"hasAssertion.value\"\r\n [disabled]=\"!hasAssertion.value\"\r\n >\r\n <fieldset>\r\n <legend>assertion</legend>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [assertion]=\"assertion.value || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n\r\n <mat-tab label=\"related\">\r\n <!-- list -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addEntity()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> related\r\n </button>\r\n </div>\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>relation</th>\r\n <th>ID</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (e of relatedEntities.value; track e.id; let i = $index) {\r\n <tr [class.selected]=\"i === editedEntityIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"editEntity(e, i)\"\r\n matTooltip=\"Edit this entity\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"deleteEntity(i)\"\r\n matTooltip=\"Delete this entity\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ e.relation | flatLookup : relationEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ e.id.target.label }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- entity editor -->\r\n <mat-expansion-panel\r\n [disabled]=\"!editedEntity()\"\r\n [expanded]=\"editedEntity()\"\r\n >\r\n <mat-expansion-panel-header>entity</mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-related-entity\r\n [relationEntries]=\"currentRelEntries()\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [entity]=\"editedEntity()\"\r\n (entityChange)=\"onEntityChange($event!)\"\r\n (editorClose)=\"closeEntity()\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- buttons -->\r\n <hr />\r\n <div class=\"button-row\">\r\n <button type=\"button\" mat-icon-button (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Save event\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n <span>event</span>\r\n </div>\r\n</form>\r\n", styles: [".long-text{width:90%;max-width:800px}table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}legend{color:silver}.sel-type{background-color:#d8d8d8;border-radius:4px;padding:6px;margin-bottom:8px}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.button-row{display:flex;align-items:center;flex-wrap:wrap}div#container{display:grid;grid-template-rows:auto;grid-template-columns:auto 1fr;grid-template-areas:\"ids type\";gap:8px;margin-bottom:8px}div#ids{grid-area:ids}div#type{grid-area:type}@media only screen and (max-width:959px){div#container{grid-template-columns:1fr;grid-template-areas:\"ids\" \"type\"}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "component", type: AssertedChronotopeSetComponent, selector: "cadmus-asserted-chronotope-set", inputs: ["chronotopes", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries"], outputs: ["chronotopesChange"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion", "noLookup", "noCitation", "defaultPicker"], outputs: ["assertionChange"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: RelatedEntityComponent, selector: "cadmus-related-entity", inputs: ["entity", "relationEntries", "idScopeEntries", "idTagEntries", "assTagEntries", "refTagEntries", "refTypeEntries"], outputs: ["entityChange", "editorClose"] }, { kind: "component", type: ThesaurusTreeComponent, selector: "cadmus-thesaurus-tree", inputs: ["entries", "renderLabel"], outputs: ["entryChange"] }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
4560
4561
  }
4561
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: HistoricalEventEditorComponent, decorators: [{
4562
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: HistoricalEventEditorComponent, decorators: [{
4562
4563
  type: Component,
4563
4564
  args: [{ selector: 'cadmus-historical-event-editor', imports: [
4564
4565
  FormsModule,
@@ -4807,10 +4808,10 @@ class HistoricalDatePartComponent extends ModelEditorComponentBase {
4807
4808
  this.references.updateValueAndValidity();
4808
4809
  this.references.markAsDirty();
4809
4810
  }
4810
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: HistoricalDatePartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
4811
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: HistoricalDatePartComponent, isStandalone: true, selector: "cadmus-historical-date-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Historical Date Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-historical-date\r\n [date]=\"date.value\"\r\n (dateChange)=\"onDateChange($event!)\"\r\n />\r\n <!-- references -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>references</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-refs-doc-references\r\n [references]=\"references.value\"\r\n [typeEntries]=\"typeEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".tab-icon{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: HistoricalDateComponent, selector: "cadmus-refs-historical-date", inputs: ["date", "label", "disabled"], outputs: ["dateChange"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: DocReferencesComponent, selector: "cadmus-refs-doc-references", inputs: ["references", "typeEntries", "tagEntries"], outputs: ["referencesChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
4811
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: HistoricalDatePartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
4812
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.0", type: HistoricalDatePartComponent, isStandalone: true, selector: "cadmus-historical-date-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Historical Date Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-historical-date\r\n [date]=\"date.value\"\r\n (dateChange)=\"onDateChange($event!)\"\r\n />\r\n <!-- references -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>references</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-refs-doc-references\r\n [references]=\"references.value\"\r\n [typeEntries]=\"typeEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".tab-icon{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: HistoricalDateComponent, selector: "cadmus-refs-historical-date", inputs: ["date", "label", "disabled"], outputs: ["dateChange"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: DocReferencesComponent, selector: "cadmus-refs-doc-references", inputs: ["references", "typeEntries", "tagEntries"], outputs: ["referencesChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
4812
4813
  }
4813
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: HistoricalDatePartComponent, decorators: [{
4814
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: HistoricalDatePartComponent, decorators: [{
4814
4815
  type: Component,
4815
4816
  args: [{ selector: 'cadmus-historical-date-part', imports: [
4816
4817
  FormsModule,
@@ -5050,10 +5051,10 @@ class HistoricalEventsPartComponent extends ModelEditorComponentBase {
5050
5051
  this.events.updateValueAndValidity();
5051
5052
  this.events.markAsDirty();
5052
5053
  }
5053
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: HistoricalEventsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
5054
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: HistoricalEventsPartComponent, isStandalone: true, selector: "cadmus-historical-events-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Events Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <!-- events list -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addEvent()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> event\r\n </button>\r\n </div>\r\n @if (events.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>tag</th>\r\n <th>ID</th>\r\n <th>place/date</th>\r\n <th>rel.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of events.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedEventIndex()\">\r\n <td class=\"fit-width\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this event\"\r\n (click)=\"editEvent(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this event up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveEventUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this event down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveEventDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this event\"\r\n (click)=\"deleteEvent(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{\r\n entry.type | flatLookup : eventTypeEntries() : \"id\" : \"value\"\r\n }}\r\n </td>\r\n <td>{{ entry.tag }}</td>\r\n <td>{{ entry.eid }}</td>\r\n <td>{{ entry.chronotopes | assertedChronotopes }}</td>\r\n <td>{{ entry.relatedEntities?.length || 0 }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- event editor -->\r\n @if (editedEvent()) {\r\n <mat-expansion-panel\r\n [expanded]=\"editedEvent()\"\r\n [disabled]=\"!editedEvent()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <span class=\"edited-title\">event</span>\r\n <span class=\"nr\">{{ editedEventIndex() + 1 }}</span>\r\n </mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-historical-event-editor\r\n [eventTagEntries]=\"eventTagEntries()\"\r\n [eventTypeEntries]=\"eventTypeEntries()\"\r\n [relationEntries]=\"relationEntries()\"\r\n [ctTagEntries]=\"ctTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [event]=\"editedEvent()\"\r\n (eventChange)=\"onEventSave($event!)\"\r\n (editorClose)=\"closeEvent()\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}.edited-title{color:silver;margin-right:8px}.nr{color:#fff;background-color:silver;border:1px solid #c0c0c0;border-radius:4px;padding:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "component", type: HistoricalEventEditorComponent, selector: "cadmus-historical-event-editor", inputs: ["event", "eventTypeEntries", "eventTagEntries", "relationEntries", "ctTagEntries", "idScopeEntries", "idTagEntries", "assTagEntries", "refTagEntries", "refTypeEntries", "eventTypeTailCut", "noLookup"], outputs: ["eventChange", "editorClose"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: AssertedChronotopesPipe, name: "assertedChronotopes" }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
5054
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: HistoricalEventsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
5055
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: HistoricalEventsPartComponent, isStandalone: true, selector: "cadmus-historical-events-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Events Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <!-- events list -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addEvent()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> event\r\n </button>\r\n </div>\r\n @if (events.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>tag</th>\r\n <th>ID</th>\r\n <th>place/date</th>\r\n <th>rel.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of events.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedEventIndex()\">\r\n <td class=\"fit-width\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this event\"\r\n (click)=\"editEvent(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this event up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveEventUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this event down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveEventDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this event\"\r\n (click)=\"deleteEvent(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{\r\n entry.type | flatLookup : eventTypeEntries() : \"id\" : \"value\"\r\n }}\r\n </td>\r\n <td>{{ entry.tag }}</td>\r\n <td>{{ entry.eid }}</td>\r\n <td>{{ entry.chronotopes | assertedChronotopes }}</td>\r\n <td>{{ entry.relatedEntities?.length || 0 }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- event editor -->\r\n @if (editedEvent()) {\r\n <mat-expansion-panel\r\n [expanded]=\"editedEvent()\"\r\n [disabled]=\"!editedEvent()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <span class=\"edited-title\">event</span>\r\n <span class=\"nr\">{{ editedEventIndex() + 1 }}</span>\r\n </mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-historical-event-editor\r\n [eventTagEntries]=\"eventTagEntries()\"\r\n [eventTypeEntries]=\"eventTypeEntries()\"\r\n [relationEntries]=\"relationEntries()\"\r\n [ctTagEntries]=\"ctTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [event]=\"editedEvent()\"\r\n (eventChange)=\"onEventSave($event!)\"\r\n (editorClose)=\"closeEvent()\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}.edited-title{color:silver;margin-right:8px}.nr{color:#fff;background-color:silver;border:1px solid #c0c0c0;border-radius:4px;padding:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "component", type: HistoricalEventEditorComponent, selector: "cadmus-historical-event-editor", inputs: ["event", "eventTypeEntries", "eventTagEntries", "relationEntries", "ctTagEntries", "idScopeEntries", "idTagEntries", "assTagEntries", "refTagEntries", "refTypeEntries", "eventTypeTailCut", "noLookup"], outputs: ["eventChange", "editorClose"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: AssertedChronotopesPipe, name: "assertedChronotopes" }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
5055
5056
  }
5056
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: HistoricalEventsPartComponent, decorators: [{
5057
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: HistoricalEventsPartComponent, decorators: [{
5057
5058
  type: Component,
5058
5059
  args: [{ selector: 'cadmus-historical-events-part', imports: [
5059
5060
  FormsModule,
@@ -5147,10 +5148,10 @@ class IndexKeywordComponent {
5147
5148
  const keyword = this.getKeyword();
5148
5149
  this.keyword.set(keyword);
5149
5150
  }
5150
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: IndexKeywordComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
5151
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: IndexKeywordComponent, isStandalone: true, selector: "cadmus-index-keyword", inputs: { keyword: { classPropertyName: "keyword", publicName: "keyword", isSignal: true, isRequired: false, transformFunction: null }, idxEntries: { classPropertyName: "idxEntries", publicName: "idxEntries", isSignal: true, isRequired: false, transformFunction: null }, tagEntries: { classPropertyName: "tagEntries", publicName: "tagEntries", isSignal: true, isRequired: false, transformFunction: null }, langEntries: { classPropertyName: "langEntries", publicName: "langEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keyword: "keywordChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"submit()\">\n <div class=\"form-row\">\n <!-- index ID -->\n @if (idxEntries()?.length) {\n <div>\n <mat-form-field>\n <mat-label>index ID</mat-label>\n <mat-select [formControl]=\"indexId\">\n <mat-option [value]=\"''\">(default)</mat-option>\n @for (e of idxEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-form-field>\n <mat-label>index ID</mat-label>\n <input matInput type=\"text\" [formControl]=\"indexId\" />\n @if ( indexId.hasError('maxLength') && (indexId.dirty ||\n indexId.touched) ) {\n <mat-error>index ID too long</mat-error>\n } @if ( indexId.hasError('pattern') && (indexId.dirty ||\n indexId.touched) ) {\n <mat-error>invalid index ID</mat-error>\n }\n </mat-form-field>\n </div>\n }\n\n <!-- language -->\n @if (langEntries()?.length) {\n <div>\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select [formControl]=\"language\">\n <mat-option [value]=\"null\">(n/a)</mat-option>\n @for (e of langEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput type=\"text\" [formControl]=\"language\" />\n @if ( language.hasError('pattern') && (language.dirty ||\n language.touched) ) {\n <mat-error>invalid language</mat-error>\n }\n </mat-form-field>\n </div>\n }\n\n <!-- value -->\n <div>\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" [formControl]=\"value\" autofocus />\n @if (value.hasError('maxLength') && (value.dirty || value.touched)) {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- tag -->\n <div>\n <!-- tag (bound) -->\n @if (tagEntries()?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of tagEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n </div>\n\n <!-- note -->\n <div>\n <mat-form-field>\n <mat-label>note</mat-label>\n <input matInput type=\"text\" [formControl]=\"note\" />\n @if (note.hasError('maxLength') && (note.dirty || note.touched)) {\n <mat-error>note too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- buttons -->\n <div>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Close keyword\"\n (click)=\"cancel()\"\n >\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\n </button>\n <button\n type=\"submit\"\n [disabled]=\"form.invalid || form.pristine\"\n mat-icon-button\n matTooltip=\"Save keyword\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n</form>\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
5151
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: IndexKeywordComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
5152
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: IndexKeywordComponent, isStandalone: true, selector: "cadmus-index-keyword", inputs: { keyword: { classPropertyName: "keyword", publicName: "keyword", isSignal: true, isRequired: false, transformFunction: null }, idxEntries: { classPropertyName: "idxEntries", publicName: "idxEntries", isSignal: true, isRequired: false, transformFunction: null }, tagEntries: { classPropertyName: "tagEntries", publicName: "tagEntries", isSignal: true, isRequired: false, transformFunction: null }, langEntries: { classPropertyName: "langEntries", publicName: "langEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keyword: "keywordChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"submit()\">\n <div class=\"form-row\">\n <!-- index ID -->\n @if (idxEntries()?.length) {\n <div>\n <mat-form-field>\n <mat-label>index ID</mat-label>\n <mat-select [formControl]=\"indexId\">\n <mat-option [value]=\"''\">(default)</mat-option>\n @for (e of idxEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-form-field>\n <mat-label>index ID</mat-label>\n <input matInput type=\"text\" [formControl]=\"indexId\" />\n @if ( indexId.hasError('maxLength') && (indexId.dirty ||\n indexId.touched) ) {\n <mat-error>index ID too long</mat-error>\n } @if ( indexId.hasError('pattern') && (indexId.dirty ||\n indexId.touched) ) {\n <mat-error>invalid index ID</mat-error>\n }\n </mat-form-field>\n </div>\n }\n\n <!-- language -->\n @if (langEntries()?.length) {\n <div>\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select [formControl]=\"language\">\n <mat-option [value]=\"null\">(n/a)</mat-option>\n @for (e of langEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput type=\"text\" [formControl]=\"language\" />\n @if ( language.hasError('pattern') && (language.dirty ||\n language.touched) ) {\n <mat-error>invalid language</mat-error>\n }\n </mat-form-field>\n </div>\n }\n\n <!-- value -->\n <div>\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" [formControl]=\"value\" autofocus />\n @if (value.hasError('maxLength') && (value.dirty || value.touched)) {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- tag -->\n <div>\n <!-- tag (bound) -->\n @if (tagEntries()?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of tagEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n </div>\n\n <!-- note -->\n <div>\n <mat-form-field>\n <mat-label>note</mat-label>\n <input matInput type=\"text\" [formControl]=\"note\" />\n @if (note.hasError('maxLength') && (note.dirty || note.touched)) {\n <mat-error>note too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- buttons -->\n <div>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Close keyword\"\n (click)=\"cancel()\"\n >\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\n </button>\n <button\n type=\"submit\"\n [disabled]=\"form.invalid || form.pristine\"\n mat-icon-button\n matTooltip=\"Save keyword\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n</form>\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
5152
5153
  }
5153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: IndexKeywordComponent, decorators: [{
5154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: IndexKeywordComponent, decorators: [{
5154
5155
  type: Component,
5155
5156
  args: [{ selector: 'cadmus-index-keyword', imports: [
5156
5157
  FormsModule,
@@ -5404,10 +5405,10 @@ class IndexKeywordsPartComponent extends ModelEditorComponentBase {
5404
5405
  this.addKeyword(keyword);
5405
5406
  this.editedKeyword.set(undefined);
5406
5407
  }
5407
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: IndexKeywordsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
5408
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: IndexKeywordsPartComponent, isStandalone: true, selector: "cadmus-index-keywords-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title\r\n [matBadge]=\"keywords.value.length\"\r\n matBadgeOverlap=\"false\"\r\n >{{\r\n (modelName() | titlecase) || \"Index Keywords Part\"\r\n }}</mat-card-title\r\n >\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addNewKeyword()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> keyword\r\n </button>\r\n </div>\r\n\r\n @if (keywords.value.length) {\r\n <div id=\"list\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>index</th>\r\n <th>lang.</th>\r\n <th>keyword</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (k of keywords.value; track k) {\r\n <tr [class.selected]=\"editedKeyword() === k\">\r\n <td class=\"fit-width\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Edit this keyword\"\r\n (click)=\"editKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Delete this keyword\"\r\n (click)=\"deleteKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ k.indexId }}</td>\r\n <td>\r\n {{ k.language | flatLookup : langEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ k.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n } @if (editedKeyword()) {\r\n <fieldset>\r\n <mat-expansion-panel\r\n [disabled]=\"!editedKeyword()\"\r\n [expanded]=\"editedKeyword()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title> keyword </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-index-keyword\r\n [keyword]=\"editedKeyword()\"\r\n [idxEntries]=\"idxEntries()\"\r\n [langEntries]=\"langEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n (editorClose)=\"onKeywordClose()\"\r\n (keywordChange)=\"onKeywordChange($event!)\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}#list{margin-top:8px}fieldset{margin-top:8px;border:1px solid silver;border-radius:6px;padding:4px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: IndexKeywordComponent, selector: "cadmus-index-keyword", inputs: ["keyword", "idxEntries", "tagEntries", "langEntries"], outputs: ["keywordChange", "editorClose"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
5408
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: IndexKeywordsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
5409
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: IndexKeywordsPartComponent, isStandalone: true, selector: "cadmus-index-keywords-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title\r\n [matBadge]=\"keywords.value.length\"\r\n matBadgeOverlap=\"false\"\r\n >{{\r\n (modelName() | titlecase) || \"Index Keywords Part\"\r\n }}</mat-card-title\r\n >\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addNewKeyword()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> keyword\r\n </button>\r\n </div>\r\n\r\n @if (keywords.value.length) {\r\n <div id=\"list\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>index</th>\r\n <th>lang.</th>\r\n <th>keyword</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (k of keywords.value; track k) {\r\n <tr [class.selected]=\"editedKeyword() === k\">\r\n <td class=\"fit-width\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Edit this keyword\"\r\n (click)=\"editKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Delete this keyword\"\r\n (click)=\"deleteKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ k.indexId }}</td>\r\n <td>\r\n {{ k.language | flatLookup : langEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ k.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n } @if (editedKeyword()) {\r\n <fieldset>\r\n <mat-expansion-panel\r\n [disabled]=\"!editedKeyword()\"\r\n [expanded]=\"editedKeyword()\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title> keyword </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-index-keyword\r\n [keyword]=\"editedKeyword()\"\r\n [idxEntries]=\"idxEntries()\"\r\n [langEntries]=\"langEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n (editorClose)=\"onKeywordClose()\"\r\n (keywordChange)=\"onKeywordChange($event!)\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}#list{margin-top:8px}fieldset{margin-top:8px;border:1px solid silver;border-radius:6px;padding:4px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: IndexKeywordComponent, selector: "cadmus-index-keyword", inputs: ["keyword", "idxEntries", "tagEntries", "langEntries"], outputs: ["keywordChange", "editorClose"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
5409
5410
  }
5410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: IndexKeywordsPartComponent, decorators: [{
5411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: IndexKeywordsPartComponent, decorators: [{
5411
5412
  type: Component,
5412
5413
  args: [{ selector: 'cadmus-index-keywords-part', imports: [
5413
5414
  FormsModule,
@@ -5632,10 +5633,10 @@ class KeywordsPartComponent extends ModelEditorComponentBase {
5632
5633
  this.keywords.updateValueAndValidity();
5633
5634
  this.keywords.markAsDirty();
5634
5635
  }
5635
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: KeywordsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
5636
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: KeywordsPartComponent, isStandalone: true, selector: "cadmus-keywords-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title\r\n [matBadge]=\"keywords.value.length\"\r\n matBadgeOverlap=\"false\"\r\n >{{ (modelName() | titlecase) || \"Keywords Part\" }}</mat-card-title\r\n >\r\n </mat-card-header>\r\n <mat-card-content>\r\n <!-- language -->\r\n <form [formGroup]=\"newForm\" (ngSubmit)=\"addKeyword()\" class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <mat-select [formControl]=\"newLanguage\">\r\n @for (t of langEntries(); track t.id) {\r\n <mat-option [value]=\"t.id\">\r\n {{ t.value }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n <mat-error>select a language</mat-error>\r\n </mat-form-field>\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input\r\n matInput\r\n autofocus\r\n type=\"text\"\r\n id=\"value\"\r\n [formControl]=\"newValue\"\r\n />\r\n @if ( newValue.hasError('required') && (newValue.touched ||\r\n newValue.dirty) ) {\r\n <mat-error>enter a value</mat-error>\r\n } @if ( newValue.hasError('maxLength') && (newValue.touched ||\r\n newValue.dirty) ) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <button\r\n mat-flat-button\r\n type=\"submit\"\r\n class=\"mat-primary\"\r\n [disabled]=\"newForm.invalid\"\r\n >\r\n <mat-icon>add_circle</mat-icon> keyword\r\n </button>\r\n </form>\r\n <hr />\r\n @if (keywords.valid) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>lang.</th>\r\n <th>keyword</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (k of keywords.value; track k) {\r\n <tr>\r\n <td>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Delete this keyword\"\r\n (click)=\"deleteKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ k.language }}</td>\r\n <td>{{ k.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["th{text-align:left;font-weight:400;color:silver}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
5636
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: KeywordsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
5637
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: KeywordsPartComponent, isStandalone: true, selector: "cadmus-keywords-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title\r\n [matBadge]=\"keywords.value.length\"\r\n matBadgeOverlap=\"false\"\r\n >{{ (modelName() | titlecase) || \"Keywords Part\" }}</mat-card-title\r\n >\r\n </mat-card-header>\r\n <mat-card-content>\r\n <!-- language -->\r\n <form [formGroup]=\"newForm\" (ngSubmit)=\"addKeyword()\" class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <mat-select [formControl]=\"newLanguage\">\r\n @for (t of langEntries(); track t.id) {\r\n <mat-option [value]=\"t.id\">\r\n {{ t.value }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n <mat-error>select a language</mat-error>\r\n </mat-form-field>\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input\r\n matInput\r\n autofocus\r\n type=\"text\"\r\n id=\"value\"\r\n [formControl]=\"newValue\"\r\n />\r\n @if ( newValue.hasError('required') && (newValue.touched ||\r\n newValue.dirty) ) {\r\n <mat-error>enter a value</mat-error>\r\n } @if ( newValue.hasError('maxLength') && (newValue.touched ||\r\n newValue.dirty) ) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <button\r\n mat-flat-button\r\n type=\"submit\"\r\n class=\"mat-primary\"\r\n [disabled]=\"newForm.invalid\"\r\n >\r\n <mat-icon>add_circle</mat-icon> keyword\r\n </button>\r\n </form>\r\n <hr />\r\n @if (keywords.valid) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>lang.</th>\r\n <th>keyword</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (k of keywords.value; track k) {\r\n <tr>\r\n <td>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Delete this keyword\"\r\n (click)=\"deleteKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ k.language }}</td>\r\n <td>{{ k.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["th{text-align:left;font-weight:400;color:silver}.form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
5637
5638
  }
5638
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: KeywordsPartComponent, decorators: [{
5639
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: KeywordsPartComponent, decorators: [{
5639
5640
  type: Component,
5640
5641
  args: [{ selector: 'cadmus-keywords-part', imports: [
5641
5642
  FormsModule,
@@ -5896,10 +5897,10 @@ class MetadataPartComponent extends ModelEditorComponentBase {
5896
5897
  }
5897
5898
  return entries;
5898
5899
  }
5899
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: MetadataPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
5900
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: MetadataPartComponent, isStandalone: true, selector: "cadmus-metadata-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Metadata Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div formArrayName=\"metadata\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addMetadatum()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> metadatum\r\n </button>\r\n </div>\r\n @for ( g of metadata.controls; track g; let i = $index; let first =\r\n $first; let last = $last) {\r\n <div>\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\" class=\"form-row\">\r\n <!-- child actions -->\r\n <span style=\"flex: 0 0 auto\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this metadatum\"\r\n (click)=\"removeMetadatum(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">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 metadatum up\"\r\n (click)=\"moveMetadatumUp(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 metadatum down\"\r\n (click)=\"moveMetadatumDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </span>\r\n <!-- child controls -->\r\n <!-- type (bound) -->\r\n @if (typeEntries()?.length) {\r\n <mat-form-field class=\"type-col\">\r\n <mat-label>type</mat-label>\r\n <mat-select formControlName=\"type\">\r\n @for (e of typeEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(g)['controls'].type.errors?.required &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- type (free) -->\r\n @else {\r\n <mat-form-field class=\"type-col\">\r\n <mat-label>type</mat-label>\r\n <input matInput formControlName=\"type\" />\r\n @if ( $any(g)['controls'].type.errors?.required &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type required</mat-error>\r\n } @if ( $any(g)['controls'].type.errors?.maxLength &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (nameEntries()?.length) {\r\n <!-- name (bound) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <mat-select formControlName=\"name\">\r\n @for (e of nameEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(g)['controls'].name.errors?.required &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- name (free) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput formControlName=\"name\" />\r\n <mat-hint>eid = entity ID</mat-hint>\r\n @if ( $any(g)['controls'].name.errors?.required &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name required</mat-error>\r\n } @if ( $any(g)['controls'].name.errors?.maxLength &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput formControlName=\"value\" />\r\n @if ( $any(g)['controls'].value.errors?.required &&\r\n ($any(g)['controls'].value.dirty ||\r\n $any(g)['controls'].value.touched) ) {\r\n <mat-error>value required</mat-error>\r\n } @if ( $any(g)['controls'].value.errors?.maxLength &&\r\n ($any(g)['controls'].value.dirty ||\r\n $any(g)['controls'].value.touched) ) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:1 0 auto}.form-row .type-col{width:8em!important;flex:0 0 8em!important}.nr{color:#fff;background-color:silver;border:1px solid #c0c0c0;border-radius:4px;padding:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
5900
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: MetadataPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
5901
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: MetadataPartComponent, isStandalone: true, selector: "cadmus-metadata-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Metadata Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div formArrayName=\"metadata\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addMetadatum()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> metadatum\r\n </button>\r\n </div>\r\n @for ( g of metadata.controls; track g; let i = $index; let first =\r\n $first; let last = $last) {\r\n <div>\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\" class=\"form-row\">\r\n <!-- child actions -->\r\n <span style=\"flex: 0 0 auto\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this metadatum\"\r\n (click)=\"removeMetadatum(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">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 metadatum up\"\r\n (click)=\"moveMetadatumUp(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 metadatum down\"\r\n (click)=\"moveMetadatumDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </span>\r\n <!-- child controls -->\r\n <!-- type (bound) -->\r\n @if (typeEntries()?.length) {\r\n <mat-form-field class=\"type-col\">\r\n <mat-label>type</mat-label>\r\n <mat-select formControlName=\"type\">\r\n @for (e of typeEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(g)['controls'].type.errors?.required &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- type (free) -->\r\n @else {\r\n <mat-form-field class=\"type-col\">\r\n <mat-label>type</mat-label>\r\n <input matInput formControlName=\"type\" />\r\n @if ( $any(g)['controls'].type.errors?.required &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type required</mat-error>\r\n } @if ( $any(g)['controls'].type.errors?.maxLength &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (nameEntries()?.length) {\r\n <!-- name (bound) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <mat-select formControlName=\"name\">\r\n @for (e of nameEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(g)['controls'].name.errors?.required &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- name (free) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput formControlName=\"name\" />\r\n <mat-hint>eid = entity ID</mat-hint>\r\n @if ( $any(g)['controls'].name.errors?.required &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name required</mat-error>\r\n } @if ( $any(g)['controls'].name.errors?.maxLength &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput formControlName=\"value\" />\r\n @if ( $any(g)['controls'].value.errors?.required &&\r\n ($any(g)['controls'].value.dirty ||\r\n $any(g)['controls'].value.touched) ) {\r\n <mat-error>value required</mat-error>\r\n } @if ( $any(g)['controls'].value.errors?.maxLength &&\r\n ($any(g)['controls'].value.dirty ||\r\n $any(g)['controls'].value.touched) ) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:1 0 auto}.form-row .type-col{width:8em!important;flex:0 0 8em!important}.nr{color:#fff;background-color:silver;border:1px solid #c0c0c0;border-radius:4px;padding:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
5901
5902
  }
5902
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: MetadataPartComponent, decorators: [{
5903
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: MetadataPartComponent, decorators: [{
5903
5904
  type: Component,
5904
5905
  args: [{ selector: 'cadmus-metadata-part', imports: [
5905
5906
  FormsModule,
@@ -6248,10 +6249,10 @@ class NamesPartComponent extends ModelEditorComponentBase {
6248
6249
  this.names.updateValueAndValidity();
6249
6250
  this.names.markAsDirty();
6250
6251
  }
6251
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: NamesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
6252
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: NamesPartComponent, isStandalone: true, selector: "cadmus-names-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Names Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addName()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> name\r\n </button>\r\n </div>\r\n @if (names.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>name</th>\r\n <th>rank</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( name of names.value; track name; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this name\"\r\n (click)=\"editName(i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this name up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveNameUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this name down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveNameDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this name\"\r\n (click)=\"deleteName(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ name | cadmusProperName }}</td>\r\n <td>{{ name.assertion?.rank || 0 }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- name editor -->\r\n @if (edited()) {\r\n <fieldset>\r\n <mat-expansion-panel [expanded]=\"edited()\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ edited() | cadmusProperName }}</mat-panel-title\r\n ></mat-expansion-panel-header\r\n >\r\n <cadmus-refs-proper-name\r\n [langEntries]=\"langEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n [typeEntries]=\"typeEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [name]=\"edited()\"\r\n (nameChange)=\"onNameChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: ProperNameComponent, selector: "cadmus-refs-proper-name", inputs: ["name", "typeEntries", "langEntries", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "hideAssertion"], outputs: ["nameChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: CadmusProperNamePipe, name: "cadmusProperName" }] });
6252
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NamesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
6253
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NamesPartComponent, isStandalone: true, selector: "cadmus-names-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Names Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addName()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> name\r\n </button>\r\n </div>\r\n @if (names.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>name</th>\r\n <th>rank</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( name of names.value; track name; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this name\"\r\n (click)=\"editName(i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this name up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveNameUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this name down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveNameDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this name\"\r\n (click)=\"deleteName(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ name | cadmusProperName }}</td>\r\n <td>{{ name.assertion?.rank || 0 }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- name editor -->\r\n @if (edited()) {\r\n <fieldset>\r\n <mat-expansion-panel [expanded]=\"edited()\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ edited() | cadmusProperName }}</mat-panel-title\r\n ></mat-expansion-panel-header\r\n >\r\n <cadmus-refs-proper-name\r\n [langEntries]=\"langEntries()\"\r\n [tagEntries]=\"tagEntries()\"\r\n [typeEntries]=\"typeEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [name]=\"edited()\"\r\n (nameChange)=\"onNameChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: ProperNameComponent, selector: "cadmus-refs-proper-name", inputs: ["name", "typeEntries", "langEntries", "tagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "hideAssertion"], outputs: ["nameChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: CadmusProperNamePipe, name: "cadmusProperName" }] });
6253
6254
  }
6254
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: NamesPartComponent, decorators: [{
6255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NamesPartComponent, decorators: [{
6255
6256
  type: Component,
6256
6257
  args: [{ selector: 'cadmus-names-part', imports: [
6257
6258
  FormsModule,
@@ -6458,10 +6459,10 @@ class NotePartComponent extends ModelEditorComponentBase {
6458
6459
  part.text = this.text.value?.trim() || '';
6459
6460
  return part;
6460
6461
  }
6461
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: NotePartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3$1.CadmusTextEdService }, { token: CADMUS_TEXT_ED_BINDINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component });
6462
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: NotePartComponent, isStandalone: true, selector: "cadmus-note-part", providers: [CadmusTextEdService], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Note Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <div id=\"container\">\r\n <div id=\"tga\">\r\n @if (!tagEntries()) {\r\n <!-- free tag -->\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n [formControl]=\"tag\"\r\n spellcheck=\"false\"\r\n />\r\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- bound tag -->\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of tagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n\r\n <div id=\"content-wrapper\">\r\n <!-- text -->\r\n <div id=\"txt\">\r\n <nge-monaco-editor id=\"editor\" (ready)=\"onCreateEditor($event)\" />\r\n @if (text.hasError('required') && (text.touched || text.dirty)) {\r\n <mat-error>please enter some text</mat-error>\r\n }\r\n </div>\r\n <!-- preview -->\r\n <div id=\"pvw\">\r\n <nge-markdown [data]=\"text.value || undefined\" />\r\n </div>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["div#container{display:flex;flex-direction:column;min-height:800px}div#tga{width:100%}div#content-wrapper{display:flex;flex-direction:row;flex:1}div#txt,div#pvw{flex:1;min-height:800px}div#editor{height:100%}div#pvw{border:1px solid silver;border-radius:6px;padding:6px;margin-left:8px}@media only screen and (max-width:959px){div#content-wrapper{flex-direction:column}div#pvw{margin-left:0;margin-top:8px}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: NgeMonacoModule }, { kind: "component", type: i4$4.NgeMonacoEditorComponent, selector: "nge-monaco-editor", inputs: ["autoLayout", "options"], outputs: ["ready"] }, { kind: "ngmodule", type: NgeMarkdownModule }, { kind: "component", type: i5$1.NgeMarkdownComponent, selector: "nge-markdown, [nge-markdown]", inputs: ["file", "data", "theme"], outputs: ["render"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
6462
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NotePartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3$1.CadmusTextEdService }, { token: CADMUS_TEXT_ED_BINDINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component });
6463
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NotePartComponent, isStandalone: true, selector: "cadmus-note-part", providers: [CadmusTextEdService], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Note Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <div id=\"container\">\r\n <div id=\"tga\">\r\n @if (!tagEntries()) {\r\n <!-- free tag -->\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n [formControl]=\"tag\"\r\n spellcheck=\"false\"\r\n />\r\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- bound tag -->\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of tagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n\r\n <div id=\"content-wrapper\">\r\n <!-- text -->\r\n <div id=\"txt\">\r\n <nge-monaco-editor id=\"editor\" (ready)=\"onCreateEditor($event)\" />\r\n @if (text.hasError('required') && (text.touched || text.dirty)) {\r\n <mat-error>please enter some text</mat-error>\r\n }\r\n </div>\r\n <!-- preview -->\r\n <div id=\"pvw\">\r\n <nge-markdown [data]=\"text.value || undefined\" />\r\n </div>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["div#container{display:flex;flex-direction:column;min-height:800px}div#tga{width:100%}div#content-wrapper{display:flex;flex-direction:row;flex:1}div#txt,div#pvw{flex:1;min-height:800px}div#editor{height:100%}div#pvw{border:1px solid silver;border-radius:6px;padding:6px;margin-left:8px}@media only screen and (max-width:959px){div#content-wrapper{flex-direction:column}div#pvw{margin-left:0;margin-top:8px}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: NgeMonacoModule }, { kind: "component", type: i4$4.NgeMonacoEditorComponent, selector: "nge-monaco-editor", inputs: ["autoLayout", "options"], outputs: ["ready"] }, { kind: "ngmodule", type: NgeMarkdownModule }, { kind: "component", type: i5$1.NgeMarkdownComponent, selector: "nge-markdown, [nge-markdown]", inputs: ["file", "data", "theme"], outputs: ["render"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
6463
6464
  }
6464
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: NotePartComponent, decorators: [{
6465
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NotePartComponent, decorators: [{
6465
6466
  type: Component,
6466
6467
  args: [{ selector: 'cadmus-note-part', imports: [
6467
6468
  FormsModule,
@@ -6652,10 +6653,10 @@ class PhysicalMeasurementsPartComponent extends ModelEditorComponentBase {
6652
6653
  this.measurements.markAsDirty();
6653
6654
  this.measurements.updateValueAndValidity();
6654
6655
  }
6655
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PhysicalMeasurementsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
6656
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: PhysicalMeasurementsPartComponent, isStandalone: true, selector: "cadmus-physical-measurements-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Physical Measurements Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-mat-physical-measurement-set\r\n [nameEntries]=\"nameEntries()\"\r\n [unitEntries]=\"unitEntries() || []\"\r\n [dimTagEntries]=\"dimTagEntries()\"\r\n [measurements]=\"measurements.value\"\r\n (measurementsChange)=\"onMeasurementsChange($event!)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: PhysicalMeasurementSetComponent, selector: "cadmus-mat-physical-measurement-set", inputs: ["measurements", "allowCustomName", "defaultUnit", "distinct", "hideTag", "unitEntries", "dimTagEntries", "nameEntries"], outputs: ["measurementsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
6656
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PhysicalMeasurementsPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
6657
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.0", type: PhysicalMeasurementsPartComponent, isStandalone: true, selector: "cadmus-physical-measurements-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Physical Measurements Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-mat-physical-measurement-set\r\n [nameEntries]=\"nameEntries()\"\r\n [unitEntries]=\"unitEntries() || []\"\r\n [dimTagEntries]=\"dimTagEntries()\"\r\n [measurements]=\"measurements.value\"\r\n (measurementsChange)=\"onMeasurementsChange($event!)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: PhysicalMeasurementSetComponent, selector: "cadmus-mat-physical-measurement-set", inputs: ["measurements", "allowCustomName", "defaultUnit", "distinct", "hideTag", "unitEntries", "dimTagEntries", "nameEntries"], outputs: ["measurementsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
6657
6658
  }
6658
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PhysicalMeasurementsPartComponent, decorators: [{
6659
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PhysicalMeasurementsPartComponent, decorators: [{
6659
6660
  type: Component,
6660
6661
  args: [{ selector: 'cadmus-physical-measurements-part', imports: [
6661
6662
  FormsModule,
@@ -6908,10 +6909,10 @@ class PhysicalStatesPartComponent extends ModelEditorComponentBase {
6908
6909
  this.entries.markAsDirty();
6909
6910
  this.entries.updateValueAndValidity();
6910
6911
  }
6911
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PhysicalStatesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
6912
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: PhysicalStatesPartComponent, isStandalone: true, selector: "cadmus-physical-states-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Physical States Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addState()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> state\r\n </button>\r\n </div>\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this state\"\r\n (click)=\"editState(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this state up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveStateUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this state down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveStateDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this state\"\r\n (click)=\"deleteState(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ entry.type | flatLookup : stateEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ entry.date | date : \"yyyy-MM-dd\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n <mat-expansion-panel [expanded]=\"edited()\" [disabled]=\"!edited()\">\r\n @if (edited()) {\r\n <fieldset>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span class=\"state-title\">state</span>\r\n <span class=\"nr\">{{ editedIndex() + 1 }}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-mat-physical-state\r\n [featEntries]=\"featEntries()\"\r\n [stateEntries]=\"stateEntries()\"\r\n [reporterEntries]=\"reporterEntries()\"\r\n [state]=\"edited()\"\r\n (stateChange)=\"saveState($event!)\"\r\n (stateCancel)=\"closeState()\"\r\n />\r\n </fieldset>\r\n }\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}.state-title{color:silver;margin-right:8px}.nr{color:#fff;background-color:silver;border:1px solid #c0c0c0;border-radius:4px;padding:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: PhysicalStateComponent, selector: "cadmus-mat-physical-state", inputs: ["state", "noRecognition", "stateEntries", "reporterEntries", "featEntries"], outputs: ["stateChange", "stateCancel"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
6912
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PhysicalStatesPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
6913
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: PhysicalStatesPartComponent, isStandalone: true, selector: "cadmus-physical-states-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Physical States Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addState()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> state\r\n </button>\r\n </div>\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"i === editedIndex()\">\r\n <td class=\"fit-width\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this state\"\r\n (click)=\"editState(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this state up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveStateUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this state down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveStateDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this state\"\r\n (click)=\"deleteState(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ entry.type | flatLookup : stateEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ entry.date | date : \"yyyy-MM-dd\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n <mat-expansion-panel [expanded]=\"edited()\" [disabled]=\"!edited()\">\r\n @if (edited()) {\r\n <fieldset>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span class=\"state-title\">state</span>\r\n <span class=\"nr\">{{ editedIndex() + 1 }}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-mat-physical-state\r\n [featEntries]=\"featEntries()\"\r\n [stateEntries]=\"stateEntries()\"\r\n [reporterEntries]=\"reporterEntries()\"\r\n [state]=\"edited()\"\r\n (stateChange)=\"saveState($event!)\"\r\n (stateCancel)=\"closeState()\"\r\n />\r\n </fieldset>\r\n }\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: ["table{width:100%;border-collapse:collapse}tbody tr:nth-child(odd){background-color:#e2e2e2}th{text-align:left;font-weight:400;color:silver}td.fit-width{width:1px;white-space:nowrap}tr.selected{background-color:#d0d0d0!important}fieldset{border:1px solid silver;border-radius:6px;padding:6px}.state-title{color:silver;margin-right:8px}.nr{color:#fff;background-color:silver;border:1px solid #c0c0c0;border-radius:4px;padding:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: PhysicalStateComponent, selector: "cadmus-mat-physical-state", inputs: ["state", "noRecognition", "stateEntries", "reporterEntries", "featEntries"], outputs: ["stateChange", "stateCancel"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: FlatLookupPipe, name: "flatLookup" }] });
6913
6914
  }
6914
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PhysicalStatesPartComponent, decorators: [{
6915
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PhysicalStatesPartComponent, decorators: [{
6915
6916
  type: Component,
6916
6917
  args: [{ selector: 'cadmus-physical-states-part', imports: [
6917
6918
  FormsModule,
@@ -7174,10 +7175,10 @@ class PinLinksPartComponent extends ModelEditorComponentBase {
7174
7175
  this.links.updateValueAndValidity();
7175
7176
  this.links.markAsDirty();
7176
7177
  }
7177
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PinLinksPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
7178
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: PinLinksPartComponent, isStandalone: true, selector: "cadmus-pin-links-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Pin Links Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-asserted-composite-ids\r\n [ids]=\"links.value || []\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: AssertedCompositeIdsComponent, selector: "cadmus-refs-asserted-composite-ids", inputs: ["ids", "idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
7178
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PinLinksPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
7179
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.0", type: PinLinksPartComponent, isStandalone: true, selector: "cadmus-pin-links-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Pin Links Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-asserted-composite-ids\r\n [ids]=\"links.value || []\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: AssertedCompositeIdsComponent, selector: "cadmus-refs-asserted-composite-ids", inputs: ["ids", "idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "featureEntries", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
7179
7180
  }
7180
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PinLinksPartComponent, decorators: [{
7181
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PinLinksPartComponent, decorators: [{
7181
7182
  type: Component,
7182
7183
  args: [{ selector: 'cadmus-pin-links-part', imports: [
7183
7184
  FormsModule,
@@ -7407,10 +7408,10 @@ class PinLinksFragmentComponent extends ModelEditorComponentBase {
7407
7408
  this.links.updateValueAndValidity();
7408
7409
  this.links.markAsDirty();
7409
7410
  }
7410
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PinLinksFragmentComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
7411
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: PinLinksFragmentComponent, isStandalone: true, selector: "cadmus-pin-links-fragment", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>textsms</mat-icon>\r\n </div>\r\n <mat-card-title\r\n >{{ (modelName() | titlecase) || \"Pin Links Fragment\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <cadmus-refs-asserted-composite-ids\r\n [ids]=\"links.value || []\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: AssertedCompositeIdsComponent, selector: "cadmus-refs-asserted-composite-ids", inputs: ["ids", "idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
7411
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PinLinksFragmentComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
7412
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.0", type: PinLinksFragmentComponent, isStandalone: true, selector: "cadmus-pin-links-fragment", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>textsms</mat-icon>\r\n </div>\r\n <mat-card-title\r\n >{{ (modelName() | titlecase) || \"Pin Links Fragment\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <cadmus-refs-asserted-composite-ids\r\n [ids]=\"links.value || []\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [pinByTypeMode]=\"pinByTypeMode()\"\r\n [canSwitchMode]=\"canSwitchMode()\"\r\n [canEditTarget]=\"canEditTarget()\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: AssertedCompositeIdsComponent, selector: "cadmus-refs-asserted-composite-ids", inputs: ["ids", "idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "featureEntries", "pinByTypeMode", "canSwitchMode", "canEditTarget", "lookupDefinitions", "defaultPartTypeKey"], outputs: ["idsChange"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
7412
7413
  }
7413
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PinLinksFragmentComponent, decorators: [{
7414
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PinLinksFragmentComponent, decorators: [{
7414
7415
  type: Component,
7415
7416
  args: [{ selector: 'cadmus-pin-links-fragment', imports: [
7416
7417
  FormsModule,
@@ -7671,10 +7672,10 @@ class TextTileComponent {
7671
7672
  this.tile.set(this.getTile());
7672
7673
  this.editing.set(false);
7673
7674
  }
7674
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TextTileComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
7675
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: TextTileComponent, isStandalone: true, selector: "cadmus-text-tile", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, checkable: { classPropertyName: "checkable", publicName: "checkable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, tile: { classPropertyName: "tile", publicName: "tile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", tile: "tileChange", editData: "editData" }, viewQueries: [{ propertyName: "textElement", first: true, predicate: ["textInput"], descendants: true }], ngImport: i0, template: "@if (tile()) {\r\n<div\r\n class=\"tile\"\r\n [class.checked]=\"checked\"\r\n [class.selected]=\"selected()\"\r\n [style.background-color]=\"color() || 'transparent'\"\r\n tabindex=\"1\"\r\n (keydown.F2)=\"edit()\"\r\n (keydown.F3)=\"requestEditData()\"\r\n (keydown.space)=\"toggleCheckedNonEdit()\"\r\n>\r\n @if (editing()) {\r\n <form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-form-field>\r\n <mat-label>text [{{ tile()!.x }}]</mat-label>\r\n <input\r\n #textInput\r\n matInput\r\n spellcheck=\"false\"\r\n formControlName=\"editedText\"\r\n (keydown.esc)=\"cancel()\"\r\n />\r\n @if ( editedText.hasError('required') && (editedText.dirty ||\r\n editedText.touched) ) {\r\n <mat-error>enter a text</mat-error>\r\n } @if ( editedText.hasError('maxLength') && (editedText.dirty ||\r\n editedText.touched) ) {\r\n <mat-error>text too long</mat-error>\r\n } @if ( editedText.hasError('pattern') && (editedText.dirty ||\r\n editedText.touched) ) {\r\n <mat-error>no whitespaces allowed</mat-error>\r\n }\r\n </mat-form-field>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Discard text\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n mat-icon-button\r\n matTooltip=\"Save text\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </form>\r\n } @else {\r\n <ng-container style=\"display: flex; align-items: center\">\r\n <span class=\"text\">{{ text() }}</span>\r\n @if (!readonly()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit text (F2)\"\r\n (click)=\"edit()\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n } @if (checkable()) {\r\n <mat-checkbox\r\n [formControl]=\"checker\"\r\n matTooltip=\"Toggle check\"\r\n ></mat-checkbox>\r\n }\r\n </ng-container>\r\n }\r\n</div>\r\n}\r\n", styles: ["div.tile{margin:2px;padding-left:4px;padding-right:4px;border:1px solid transparent;border-radius:4px}div.tile:hover{margin:2px;padding-left:4px;padding-right:4px;border:1px solid gray;border-radius:4px}div.selected{border:2px solid gray #202020}div.checked{background-color:#f0f8ff}span.text{font-weight:700;color:#202020;padding:4px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
7675
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: TextTileComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
7676
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: TextTileComponent, isStandalone: true, selector: "cadmus-text-tile", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, checkable: { classPropertyName: "checkable", publicName: "checkable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, tile: { classPropertyName: "tile", publicName: "tile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", tile: "tileChange", editData: "editData" }, viewQueries: [{ propertyName: "textElement", first: true, predicate: ["textInput"], descendants: true }], ngImport: i0, template: "@if (tile()) {\r\n<div\r\n class=\"tile\"\r\n [class.checked]=\"checked\"\r\n [class.selected]=\"selected()\"\r\n [style.background-color]=\"color() || 'transparent'\"\r\n tabindex=\"1\"\r\n (keydown.F2)=\"edit()\"\r\n (keydown.F3)=\"requestEditData()\"\r\n (keydown.space)=\"toggleCheckedNonEdit()\"\r\n>\r\n @if (editing()) {\r\n <form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-form-field>\r\n <mat-label>text [{{ tile()!.x }}]</mat-label>\r\n <input\r\n #textInput\r\n matInput\r\n spellcheck=\"false\"\r\n formControlName=\"editedText\"\r\n (keydown.esc)=\"cancel()\"\r\n />\r\n @if ( editedText.hasError('required') && (editedText.dirty ||\r\n editedText.touched) ) {\r\n <mat-error>enter a text</mat-error>\r\n } @if ( editedText.hasError('maxLength') && (editedText.dirty ||\r\n editedText.touched) ) {\r\n <mat-error>text too long</mat-error>\r\n } @if ( editedText.hasError('pattern') && (editedText.dirty ||\r\n editedText.touched) ) {\r\n <mat-error>no whitespaces allowed</mat-error>\r\n }\r\n </mat-form-field>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Discard text\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n mat-icon-button\r\n matTooltip=\"Save text\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </form>\r\n } @else {\r\n <ng-container style=\"display: flex; align-items: center\">\r\n <span class=\"text\">{{ text() }}</span>\r\n @if (!readonly()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit text (F2)\"\r\n (click)=\"edit()\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n } @if (checkable()) {\r\n <mat-checkbox\r\n [formControl]=\"checker\"\r\n matTooltip=\"Toggle check\"\r\n ></mat-checkbox>\r\n }\r\n </ng-container>\r\n }\r\n</div>\r\n}\r\n", styles: ["div.tile{margin:2px;padding-left:4px;padding-right:4px;border:1px solid transparent;border-radius:4px}div.tile:hover{margin:2px;padding-left:4px;padding-right:4px;border:1px solid gray;border-radius:4px}div.selected{border:2px solid gray #202020}div.checked{background-color:#f0f8ff}span.text{font-weight:700;color:#202020;padding:4px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
7676
7677
  }
7677
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TextTileComponent, decorators: [{
7678
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: TextTileComponent, decorators: [{
7678
7679
  type: Component,
7679
7680
  args: [{ selector: 'cadmus-text-tile', imports: [
7680
7681
  FormsModule,
@@ -7839,10 +7840,10 @@ class TiledDataComponent {
7839
7840
  }
7840
7841
  this.data.set(this.getData());
7841
7842
  }
7842
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TiledDataComponent, deps: [{ token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
7843
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: TiledDataComponent, isStandalone: true, selector: "cadmus-tiled-data", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, hiddenKeys: { classPropertyName: "hiddenKeys", publicName: "hiddenKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "dataChange", cancel: "cancel" }, ngImport: i0, template: "<div>\n @if (title()) {\n <h3>{{ title() }}</h3>\n }\n <form [formGroup]=\"filterForm\">\n <mat-form-field>\n <mat-label>filter</mat-label>\n <input\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"keyFilter\"\n />\n @if (keyFilter.value) {\n <button\n type=\"button\"\n mat-button\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"keyFilter.setValue('')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </form>\n <form [formGroup]=\"form\" (submit)=\"save()\">\n <table>\n <tbody>\n @for (key of keys; track key) {\n <tr>\n @if (key.visible) {\n <td>\n <button\n type=\"button\"\n (click)=\"deleteDatum(key)\"\n mat-icon-button\n matTooltip=\"Remove this datum\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td class=\"key-label\">\n {{ key.value }}\n </td>\n <td>\n <mat-form-field>\n <input\n matInput\n spellcheck=\"false\"\n [formControlName]=\"key.value\"\n />\n </mat-form-field>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n <div>\n <form [formGroup]=\"newForm\" (submit)=\"addDatum()\">\n <mat-form-field>\n <mat-label>key</mat-label>\n <input matInput type=\"text\" formControlName=\"newKey\" />\n @if ( newKey.hasError('required') && (newKey.dirty || newKey.touched)\n ) {\n <mat-error>enter a key</mat-error>\n } @if ( newKey.hasError('pattern') && (newKey.dirty || newKey.touched)\n ) {\n <mat-error>invalid key</mat-error>\n }\n </mat-form-field>\n &nbsp;\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" formControlName=\"newValue\" />\n @if ( newValue.hasError('maxLength') && (newValue.dirty ||\n newValue.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n <button type=\"submit\" matTooltip=\"Add new datum\" mat-icon-button>\n <mat-icon>add_circle</mat-icon>\n </button>\n </form>\n </div>\n <div>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"close()\"\n matTooltip=\"Close without saving\"\n >\n <mat-icon class=\"mat-warn\">clear</mat-icon>\n </button>\n <button\n type=\"submit\"\n mat-button\n class=\"mat-primary\"\n [disabled]=\"form.invalid\"\n matTooltip=\"Save data\"\n >\n <mat-icon>check_circle</mat-icon>\n save data\n </button>\n </div>\n </form>\n</div>\n", styles: ["td.key-label{padding-right:8px;color:gray;font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }] });
7843
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: TiledDataComponent, deps: [{ token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
7844
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: TiledDataComponent, isStandalone: true, selector: "cadmus-tiled-data", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, hiddenKeys: { classPropertyName: "hiddenKeys", publicName: "hiddenKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "dataChange", cancel: "cancel" }, ngImport: i0, template: "<div>\n @if (title()) {\n <h3>{{ title() }}</h3>\n }\n <form [formGroup]=\"filterForm\">\n <mat-form-field>\n <mat-label>filter</mat-label>\n <input\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"keyFilter\"\n />\n @if (keyFilter.value) {\n <button\n type=\"button\"\n mat-button\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"keyFilter.setValue('')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </form>\n <form [formGroup]=\"form\" (submit)=\"save()\">\n <table>\n <tbody>\n @for (key of keys; track key) {\n <tr>\n @if (key.visible) {\n <td>\n <button\n type=\"button\"\n (click)=\"deleteDatum(key)\"\n mat-icon-button\n matTooltip=\"Remove this datum\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td class=\"key-label\">\n {{ key.value }}\n </td>\n <td>\n <mat-form-field>\n <input\n matInput\n spellcheck=\"false\"\n [formControlName]=\"key.value\"\n />\n </mat-form-field>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n <div>\n <form [formGroup]=\"newForm\" (submit)=\"addDatum()\">\n <mat-form-field>\n <mat-label>key</mat-label>\n <input matInput type=\"text\" formControlName=\"newKey\" />\n @if ( newKey.hasError('required') && (newKey.dirty || newKey.touched)\n ) {\n <mat-error>enter a key</mat-error>\n } @if ( newKey.hasError('pattern') && (newKey.dirty || newKey.touched)\n ) {\n <mat-error>invalid key</mat-error>\n }\n </mat-form-field>\n &nbsp;\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" formControlName=\"newValue\" />\n @if ( newValue.hasError('maxLength') && (newValue.dirty ||\n newValue.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n <button type=\"submit\" matTooltip=\"Add new datum\" mat-icon-button>\n <mat-icon>add_circle</mat-icon>\n </button>\n </form>\n </div>\n <div>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"close()\"\n matTooltip=\"Close without saving\"\n >\n <mat-icon class=\"mat-warn\">clear</mat-icon>\n </button>\n <button\n type=\"submit\"\n mat-button\n class=\"mat-primary\"\n [disabled]=\"form.invalid\"\n matTooltip=\"Save data\"\n >\n <mat-icon>check_circle</mat-icon>\n save data\n </button>\n </div>\n </form>\n</div>\n", styles: ["td.key-label{padding-right:8px;color:gray;font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }] });
7844
7845
  }
7845
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TiledDataComponent, decorators: [{
7846
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: TiledDataComponent, decorators: [{
7846
7847
  type: Component,
7847
7848
  args: [{ selector: 'cadmus-tiled-data', imports: [
7848
7849
  FormsModule,
@@ -8108,10 +8109,10 @@ class TiledTextPartComponent extends ModelEditorComponentBase {
8108
8109
  return `${y},${tile.x}`;
8109
8110
  }
8110
8111
  }
8111
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TiledTextPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
8112
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: TiledTextPartComponent, isStandalone: true, selector: "cadmus-tiled-text-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Tiled Text Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <mat-tab-group\r\n [selectedIndex]=\"currentTabIndex()\"\r\n (selectedIndexChange)=\"currentTabIndex.set($event)\"\r\n >\r\n <mat-tab label=\"Text\">\r\n <!-- citation -->\r\n <div>\r\n <mat-form-field style=\"min-width: 400px\">\r\n <mat-label>citation</mat-label>\r\n <input matInput formControlName=\"citation\" />\r\n @if ( citation.hasError('maxLength') && (citation.dirty ||\r\n citation.touched) ) {\r\n <mat-error></mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- rows -->\r\n @if (rows) {\r\n <div cdkDropListGroup>\r\n <!-- row -->\r\n @for ( row of rows.value; track row; let i = $index; let first =\r\n $first; let last = $last) {\r\n <div\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($any($event), row)\"\r\n style=\"display: flex; flex-flow: row wrap\"\r\n >\r\n <!-- nr -->\r\n <span class=\"row-nr\">{{ i + 1 }}</span>\r\n <!-- tile -->\r\n @for (tile of row.tiles || []; track tile) {\r\n <cadmus-text-tile\r\n [tile]=\"tile\"\r\n [selected]=\"tile === selectedTile()\"\r\n cdkDrag\r\n style=\"flex: 0 0 auto\"\r\n (click)=\"selectedTile.set(tile)\"\r\n (editData)=\"editTileData(tile)\"\r\n (tileChange)=\"onTileChange($event!)\"\r\n >\r\n <div class=\"tile-placeholder\" *cdkDragPlaceholder></div>\r\n </cadmus-text-tile>\r\n }\r\n <!-- row tail buttons -->\r\n <div class=\"unmuted-hovering\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"addTile(row)\"\r\n matTooltip=\"Append new tile\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"moveRowUp(i)\"\r\n [disabled]=\"first\"\r\n matTooltip=\"Move this row up\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"moveRowDown(i)\"\r\n [disabled]=\"last\"\r\n matTooltip=\"Move this row down\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete whole row\"\r\n (click)=\"deleteRow(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit row's data\"\r\n (click)=\"editRowData(row)\"\r\n >\r\n <mat-icon>list</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <!-- bottom buttons -->\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Append new row\"\r\n (click)=\"addRow()\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n <span>{{ getTileCoords() }}</span>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit selected tile's data\"\r\n [disabled]=\"!selectedTile()\"\r\n (click)=\"editTileData(selectedTile()!)\"\r\n >\r\n <mat-icon>list</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete the selected tile\"\r\n (click)=\"deleteSelectedTile()\"\r\n [disabled]=\"!selectedTile()\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-tab>\r\n\r\n @if (editedData()) {\r\n <mat-tab label=\"Data\">\r\n <cadmus-tiled-data\r\n [data]=\"editedData()!\"\r\n [title]=\"editedDataTitle()\"\r\n [hiddenKeys]=\"['text']\"\r\n (cancel)=\"closeDataEditor()\"\r\n (dataChange)=\"saveEditedData($event)\"\r\n />\r\n </mat-tab>\r\n }\r\n </mat-tab-group>\r\n </mat-card-content>\r\n </mat-card>\r\n</form>\r\n", styles: ["span.row-nr{color:silver;font-weight:700}div.tile-placeholder{background:#ccc;border:dotted 3px #999;min-width:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.unmuted-hovering{opacity:.2}.unmuted-hovering:hover{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: TextTileComponent, selector: "cadmus-text-tile", inputs: ["selected", "checkable", "readonly", "color", "checked", "tile"], outputs: ["checkedChange", "tileChange", "editData"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: TiledDataComponent, selector: "cadmus-tiled-data", inputs: ["title", "data", "hiddenKeys"], outputs: ["dataChange", "cancel"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
8112
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: TiledTextPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
8113
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: TiledTextPartComponent, isStandalone: true, selector: "cadmus-tiled-text-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Tiled Text Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <mat-tab-group\r\n [selectedIndex]=\"currentTabIndex()\"\r\n (selectedIndexChange)=\"currentTabIndex.set($event)\"\r\n >\r\n <mat-tab label=\"Text\">\r\n <!-- citation -->\r\n <div>\r\n <mat-form-field style=\"min-width: 400px\">\r\n <mat-label>citation</mat-label>\r\n <input matInput formControlName=\"citation\" />\r\n @if ( citation.hasError('maxLength') && (citation.dirty ||\r\n citation.touched) ) {\r\n <mat-error></mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- rows -->\r\n @if (rows) {\r\n <div cdkDropListGroup>\r\n <!-- row -->\r\n @for ( row of rows.value; track row; let i = $index; let first =\r\n $first; let last = $last) {\r\n <div\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($any($event), row)\"\r\n style=\"display: flex; flex-flow: row wrap\"\r\n >\r\n <!-- nr -->\r\n <span class=\"row-nr\">{{ i + 1 }}</span>\r\n <!-- tile -->\r\n @for (tile of row.tiles || []; track tile) {\r\n <cadmus-text-tile\r\n [tile]=\"tile\"\r\n [selected]=\"tile === selectedTile()\"\r\n cdkDrag\r\n style=\"flex: 0 0 auto\"\r\n (click)=\"selectedTile.set(tile)\"\r\n (editData)=\"editTileData(tile)\"\r\n (tileChange)=\"onTileChange($event!)\"\r\n >\r\n <div class=\"tile-placeholder\" *cdkDragPlaceholder></div>\r\n </cadmus-text-tile>\r\n }\r\n <!-- row tail buttons -->\r\n <div class=\"unmuted-hovering\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"addTile(row)\"\r\n matTooltip=\"Append new tile\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"moveRowUp(i)\"\r\n [disabled]=\"first\"\r\n matTooltip=\"Move this row up\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"moveRowDown(i)\"\r\n [disabled]=\"last\"\r\n matTooltip=\"Move this row down\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete whole row\"\r\n (click)=\"deleteRow(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit row's data\"\r\n (click)=\"editRowData(row)\"\r\n >\r\n <mat-icon>list</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <!-- bottom buttons -->\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Append new row\"\r\n (click)=\"addRow()\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n <span>{{ getTileCoords() }}</span>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit selected tile's data\"\r\n [disabled]=\"!selectedTile()\"\r\n (click)=\"editTileData(selectedTile()!)\"\r\n >\r\n <mat-icon>list</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete the selected tile\"\r\n (click)=\"deleteSelectedTile()\"\r\n [disabled]=\"!selectedTile()\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-tab>\r\n\r\n @if (editedData()) {\r\n <mat-tab label=\"Data\">\r\n <cadmus-tiled-data\r\n [data]=\"editedData()!\"\r\n [title]=\"editedDataTitle()\"\r\n [hiddenKeys]=\"['text']\"\r\n (cancel)=\"closeDataEditor()\"\r\n (dataChange)=\"saveEditedData($event)\"\r\n />\r\n </mat-tab>\r\n }\r\n </mat-tab-group>\r\n </mat-card-content>\r\n </mat-card>\r\n</form>\r\n", styles: ["span.row-nr{color:silver;font-weight:700}div.tile-placeholder{background:#ccc;border:dotted 3px #999;min-width:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.unmuted-hovering{opacity:.2}.unmuted-hovering:hover{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: TextTileComponent, selector: "cadmus-text-tile", inputs: ["selected", "checkable", "readonly", "color", "checked", "tile"], outputs: ["checkedChange", "tileChange", "editData"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: TiledDataComponent, selector: "cadmus-tiled-data", inputs: ["title", "data", "hiddenKeys"], outputs: ["dataChange", "cancel"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
8113
8114
  }
8114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TiledTextPartComponent, decorators: [{
8115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: TiledTextPartComponent, decorators: [{
8115
8116
  type: Component,
8116
8117
  args: [{ selector: 'cadmus-tiled-text-part', imports: [
8117
8118
  FormsModule,
@@ -8377,10 +8378,10 @@ class TokenTextPartComponent extends ModelEditorComponentBase {
8377
8378
  }
8378
8379
  });
8379
8380
  }
8380
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TokenTextPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
8381
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: TokenTextPartComponent, isStandalone: true, selector: "cadmus-token-text-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Token Text Part\"\n }}</mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div id=\"container\">\n <div id=\"cit\">\n <!-- citation -->\n <mat-form-field>\n <mat-label>citation</mat-label>\n <input matInput [formControl]=\"citation\" />\n </mat-form-field>\n </div>\n\n <!-- transforms -->\n <div id=\"trs\">\n <mat-form-field>\n <mat-label>operation</mat-label>\n <mat-select [formControl]=\"transform\">\n <mat-option value=\"ws\">normalize ws</mat-option>\n <mat-option value=\"split\">split at stops</mat-option>\n </mat-select>\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Apply the selected text transformation\"\n (click)=\"applyTransform()\"\n >\n <mat-icon class=\"mat-warn\">find_replace</mat-icon>\n </button>\n </div>\n\n <!-- text -->\n <div id=\"txt\">\n <nge-monaco-editor\n style=\"--editor-height: 800px\"\n (ready)=\"onCreateEditor($event)\"\n />\n @if (text.hasError('required') && (text.touched || text.dirty)) {\n <mat-error>please enter some text</mat-error>\n }\n </div>\n </div>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card-content>\n </mat-card>\n</form>\n", styles: ["div#container{display:grid;grid-template-rows:auto 1fr;grid-template-columns:auto 1fr;grid-template-areas:\"cit trs\" \"txt txt\";gap:8px}div#cit{grid-area:cit}div#trs{grid-area:trs}div#txt{grid-area:txt}@media only screen and (max-width:959px){div#container{grid-template-rows:auto auto 1fr;grid-template-columns:1fr;grid-template-areas:\"cit\" \"trs\" \"txt\"}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: NgeMonacoModule }, { kind: "component", type: i4$4.NgeMonacoEditorComponent, selector: "nge-monaco-editor", inputs: ["autoLayout", "options"], outputs: ["ready"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
8381
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: TokenTextPartComponent, deps: [{ token: i1.AuthJwtService }, { token: i2.FormBuilder }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
8382
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: TokenTextPartComponent, isStandalone: true, selector: "cadmus-token-text-part", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Token Text Part\"\n }}</mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div id=\"container\">\n <div id=\"cit\">\n <!-- citation -->\n <mat-form-field>\n <mat-label>citation</mat-label>\n <input matInput [formControl]=\"citation\" />\n </mat-form-field>\n </div>\n\n <!-- transforms -->\n <div id=\"trs\">\n <mat-form-field>\n <mat-label>operation</mat-label>\n <mat-select [formControl]=\"transform\">\n <mat-option value=\"ws\">normalize ws</mat-option>\n <mat-option value=\"split\">split at stops</mat-option>\n </mat-select>\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Apply the selected text transformation\"\n (click)=\"applyTransform()\"\n >\n <mat-icon class=\"mat-warn\">find_replace</mat-icon>\n </button>\n </div>\n\n <!-- text -->\n <div id=\"txt\">\n <nge-monaco-editor\n style=\"--editor-height: 800px\"\n (ready)=\"onCreateEditor($event)\"\n />\n @if (text.hasError('required') && (text.touched || text.dirty)) {\n <mat-error>please enter some text</mat-error>\n }\n </div>\n </div>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card-content>\n </mat-card>\n</form>\n", styles: ["div#container{display:grid;grid-template-rows:auto 1fr;grid-template-columns:auto 1fr;grid-template-areas:\"cit trs\" \"txt txt\";gap:8px}div#cit{grid-area:cit}div#trs{grid-area:trs}div#txt{grid-area:txt}@media only screen and (max-width:959px){div#container{grid-template-rows:auto auto 1fr;grid-template-columns:1fr;grid-template-areas:\"cit\" \"trs\" \"txt\"}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: NgeMonacoModule }, { kind: "component", type: i4$4.NgeMonacoEditorComponent, selector: "nge-monaco-editor", inputs: ["autoLayout", "options"], outputs: ["ready"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: CloseSaveButtonsComponent, selector: "cadmus-close-save-buttons", inputs: ["form", "noSave"], outputs: ["closeRequest"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] });
8382
8383
  }
8383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TokenTextPartComponent, decorators: [{
8384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: TokenTextPartComponent, decorators: [{
8384
8385
  type: Component,
8385
8386
  args: [{ selector: 'cadmus-token-text-part', imports: [
8386
8387
  FormsModule,