@elderbyte/ngx-starter 21.9.0 → 21.10.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.
@@ -17,19 +17,18 @@ import * as i1$3 from '@angular/forms';
17
17
  import { ControlContainer, NG_VALUE_ACCESSOR, NG_VALIDATORS, NgControl, NgModel, FormsModule, UntypedFormControl, ReactiveFormsModule, NgForm, Validators } from '@angular/forms';
18
18
  import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
19
19
  import { FocusMonitor, CdkTrapFocus, A11yModule } from '@angular/cdk/a11y';
20
- import * as i1$a from '@angular/material/form-field';
20
+ import * as i1$9 from '@angular/material/form-field';
21
21
  import { MatFormField, MatFormFieldControl, MAT_FORM_FIELD_DEFAULT_OPTIONS, MatLabel, MatFormFieldModule, MatPrefix, MatHint, MatError, MatSuffix } from '@angular/material/form-field';
22
- import * as i1$9 from '@ngx-translate/core';
23
- import { TranslateService, TranslatePipe, TranslateModule, provideTranslateService, TranslateLoader } from '@ngx-translate/core';
22
+ import { TranslateService, TranslatePipe, provideTranslateService, TranslateLoader } from '@ngx-translate/core';
24
23
  import * as i1$2 from '@angular/router';
25
24
  import { RouterModule, NavigationEnd, RouterLinkActive, RouterLink, RouterOutlet, convertToParamMap, EventType } from '@angular/router';
26
- import * as i1$f from '@angular/material/icon';
25
+ import * as i1$e from '@angular/material/icon';
27
26
  import { MatIconRegistry, MatIcon, MatIconModule } from '@angular/material/icon';
28
27
  import { MatSlideToggle, MatSlideToggleModule } from '@angular/material/slide-toggle';
29
28
  import * as i1$4 from '@angular/material/toolbar';
30
29
  import { MatToolbar, MatToolbarRow, MatToolbarModule } from '@angular/material/toolbar';
31
30
  import { MatCard, MatCardModule } from '@angular/material/card';
32
- import * as i1$d from '@angular/material/core';
31
+ import * as i1$c from '@angular/material/core';
33
32
  import { MatRipple, MatRippleModule, MatOption, NativeDateAdapter, MAT_DATE_LOCALE, DateAdapter, MatNativeDateModule } from '@angular/material/core';
34
33
  import * as i5 from '@angular/material/button';
35
34
  import { MatButtonModule, MatIconButton, MatButton, MatIconAnchor, MatAnchor } from '@angular/material/button';
@@ -50,7 +49,7 @@ import { MatMenu, MatMenuItem, MatMenuTrigger, MatMenuModule } from '@angular/ma
50
49
  import * as i1$6 from '@angular/material/dialog';
51
50
  import { MatDialogClose, MAT_DIALOG_DATA, MatDialogConfig, MatDialogModule, MatDialog } from '@angular/material/dialog';
52
51
  import { MatBadge, MatBadgeModule } from '@angular/material/badge';
53
- import * as i1$b from '@angular/material/checkbox';
52
+ import * as i1$a from '@angular/material/checkbox';
54
53
  import { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox';
55
54
  import { MatTooltipModule, MatTooltip } from '@angular/material/tooltip';
56
55
  import { MatSelect, MatOption as MatOption$1, MatSelectModule } from '@angular/material/select';
@@ -65,15 +64,15 @@ import { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf, S
65
64
  import { Subject as Subject$1 } from 'rxjs/internal/Subject';
66
65
  import { MatProgressSpinnerModule, MatProgressSpinner } from '@angular/material/progress-spinner';
67
66
  import { MatExpansionPanel, MatAccordion, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionModule } from '@angular/material/expansion';
68
- import * as i1$c from '@angular/cdk/overlay';
67
+ import * as i1$b from '@angular/cdk/overlay';
69
68
  import { OverlayModule } from '@angular/cdk/overlay';
70
69
  import { MatSidenavContainer, MatSidenav, MatSidenavContent, MatSidenavModule } from '@angular/material/sidenav';
71
- import * as i1$e from '@angular/material/datepicker';
70
+ import * as i1$d from '@angular/material/datepicker';
72
71
  import { MatDatepickerInput, MatDatepickerToggle, MatDatepickerToggleIcon, MatDatepicker, MatDateRangeInput, MatStartDate, MatEndDate, MatDateRangePicker, DateRange, MatDatepickerModule, MatCalendar } from '@angular/material/datepicker';
73
72
  import { TemplatePortal } from '@angular/cdk/portal';
74
73
  import localeDECH from '@angular/common/locales/de-CH';
75
74
  import * as StreamSaver from 'streamsaver';
76
- import * as i1$g from '@angular/material/tabs';
75
+ import * as i1$f from '@angular/material/tabs';
77
76
  import { MatTab } from '@angular/material/tabs';
78
77
  import { fetchEventSource, EventStreamContentType } from '@microsoft/fetch-event-source';
79
78
 
@@ -18462,14 +18461,14 @@ class ElderPaginatorIntl extends MatPaginatorIntl {
18462
18461
  * Constructor *
18463
18462
  * *
18464
18463
  **************************************************************************/
18465
- constructor(translate) {
18464
+ constructor() {
18466
18465
  super();
18467
- this.translate = translate;
18468
18466
  /***************************************************************************
18469
18467
  * *
18470
18468
  * Fields *
18471
18469
  * *
18472
18470
  **************************************************************************/
18471
+ this.translate = inject(ElderTranslateService);
18473
18472
  this._itemCountSeparatorKey = 'paginator.itemCountSeparator';
18474
18473
  this._itemsPerPageKey = 'paginator.itemsPerPage';
18475
18474
  this._firstPageLabelKey = 'paginator.firstPage';
@@ -18490,7 +18489,7 @@ class ElderPaginatorIntl extends MatPaginatorIntl {
18490
18489
  const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;
18491
18490
  return `${startIndex + 1} - ${endIndex} ${this.itemCountSeparatorLabel} ${length}`;
18492
18491
  };
18493
- this.translate.onLangChange.subscribe((e) => {
18492
+ this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {
18494
18493
  this.translateLabels();
18495
18494
  });
18496
18495
  this.translateLabels();
@@ -18517,12 +18516,12 @@ class ElderPaginatorIntl extends MatPaginatorIntl {
18517
18516
  previousPageLabel !== this._previousPageKey ? previousPageLabel : 'Previous page';
18518
18517
  this.changes.next();
18519
18518
  }
18520
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderPaginatorIntl, deps: [{ token: i1$9.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
18519
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderPaginatorIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
18521
18520
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderPaginatorIntl }); }
18522
18521
  }
18523
18522
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderPaginatorIntl, decorators: [{
18524
18523
  type: Injectable
18525
- }], ctorParameters: () => [{ type: i1$9.TranslateService }] });
18524
+ }], ctorParameters: () => [] });
18526
18525
 
18527
18526
  class ElderDelayedFocusDirective {
18528
18527
  constructor(el) {
@@ -18777,7 +18776,7 @@ class ElderFormFieldLabelDirective {
18777
18776
  this._matFormField.subscriptSizing = 'dynamic'; // Auto collapse hint/error line
18778
18777
  }
18779
18778
  }
18780
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormFieldLabelDirective, deps: [{ token: i1$a.MatFormField }], target: i0.ɵɵFactoryTarget.Directive }); }
18779
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormFieldLabelDirective, deps: [{ token: i1$9.MatFormField }], target: i0.ɵɵFactoryTarget.Directive }); }
18781
18780
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: ElderFormFieldLabelDirective, isStandalone: true, selector: "mat-form-field[elderFormFieldLabel]", inputs: { enabled: ["elderFormFieldLabel", "enabled"] }, host: { properties: { "class.elder-form-field-label": "this.getFormFieldLabelStyle" } }, ngImport: i0 }); }
18782
18781
  }
18783
18782
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormFieldLabelDirective, decorators: [{
@@ -18785,7 +18784,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
18785
18784
  args: [{
18786
18785
  selector: 'mat-form-field[elderFormFieldLabel]',
18787
18786
  }]
18788
- }], ctorParameters: () => [{ type: i1$a.MatFormField }], propDecorators: { getFormFieldLabelStyle: [{
18787
+ }], ctorParameters: () => [{ type: i1$9.MatFormField }], propDecorators: { getFormFieldLabelStyle: [{
18789
18788
  type: HostBinding,
18790
18789
  args: ['class.elder-form-field-label']
18791
18790
  }], enabled: [{
@@ -19079,7 +19078,7 @@ class ElderFormFieldDenseDirective extends ElderClassHostBindingBase {
19079
19078
  this._matFormField.floatLabel = this._floatLabel; // Always float label so it is not out of bounds
19080
19079
  }
19081
19080
  }
19082
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormFieldDenseDirective, deps: [{ token: i1$a.MatFormField }], target: i0.ɵɵFactoryTarget.Directive }); }
19081
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormFieldDenseDirective, deps: [{ token: i1$9.MatFormField }], target: i0.ɵɵFactoryTarget.Directive }); }
19083
19082
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: ElderFormFieldDenseDirective, isStandalone: true, selector: "mat-form-field[elderDense]", inputs: { elderDense: "elderDense", subscriptSizing: "subscriptSizing", floatLabel: "floatLabel" }, usesInheritance: true, ngImport: i0 }); }
19084
19083
  }
19085
19084
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormFieldDenseDirective, decorators: [{
@@ -19087,7 +19086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
19087
19086
  args: [{
19088
19087
  selector: 'mat-form-field[elderDense]',
19089
19088
  }]
19090
- }], ctorParameters: () => [{ type: i1$a.MatFormField }], propDecorators: { elderDense: [{
19089
+ }], ctorParameters: () => [{ type: i1$9.MatFormField }], propDecorators: { elderDense: [{
19091
19090
  type: Input
19092
19091
  }], subscriptSizing: [{
19093
19092
  type: Input
@@ -19551,7 +19550,7 @@ class ElderTripleStateCheckboxDirective {
19551
19550
  toggleNextState() {
19552
19551
  this.controller.toggleNextState();
19553
19552
  }
19554
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTripleStateCheckboxDirective, deps: [{ token: i1$b.MatCheckbox }, { token: i1$3.NgModel, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
19553
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTripleStateCheckboxDirective, deps: [{ token: i1$a.MatCheckbox }, { token: i1$3.NgModel, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
19555
19554
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: ElderTripleStateCheckboxDirective, isStandalone: true, selector: "mat-checkbox[elderTripleStateCheckbox]", outputs: { valueChange: "valueChange" }, ngImport: i0 }); }
19556
19555
  }
19557
19556
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTripleStateCheckboxDirective, decorators: [{
@@ -19559,7 +19558,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
19559
19558
  args: [{
19560
19559
  selector: 'mat-checkbox[elderTripleStateCheckbox]',
19561
19560
  }]
19562
- }], ctorParameters: () => [{ type: i1$b.MatCheckbox }, { type: i1$3.NgModel, decorators: [{
19561
+ }], ctorParameters: () => [{ type: i1$a.MatCheckbox }, { type: i1$3.NgModel, decorators: [{
19563
19562
  type: Optional
19564
19563
  }] }], propDecorators: { valueChange: [{
19565
19564
  type: Output
@@ -19739,7 +19738,7 @@ class ElderFormFieldNoHintDirective extends ElderClassHostBindingBase {
19739
19738
  this._matFormField.subscriptSizing = 'dynamic'; // Auto collapse hint/error line
19740
19739
  }
19741
19740
  }
19742
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormFieldNoHintDirective, deps: [{ token: i1$a.MatFormField }], target: i0.ɵɵFactoryTarget.Directive }); }
19741
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormFieldNoHintDirective, deps: [{ token: i1$9.MatFormField }], target: i0.ɵɵFactoryTarget.Directive }); }
19743
19742
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: ElderFormFieldNoHintDirective, isStandalone: true, selector: "mat-form-field[elderNoHint]", inputs: { elderNoHint: "elderNoHint" }, usesInheritance: true, ngImport: i0 }); }
19744
19743
  }
19745
19744
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormFieldNoHintDirective, decorators: [{
@@ -19747,7 +19746,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
19747
19746
  args: [{
19748
19747
  selector: 'mat-form-field[elderNoHint]',
19749
19748
  }]
19750
- }], ctorParameters: () => [{ type: i1$a.MatFormField }], propDecorators: { elderNoHint: [{
19749
+ }], ctorParameters: () => [{ type: i1$9.MatFormField }], propDecorators: { elderNoHint: [{
19751
19750
  type: Input
19752
19751
  }] } });
19753
19752
 
@@ -20037,7 +20036,7 @@ class ElderValidationErrorDirective {
20037
20036
  this.ref.markForCheck();
20038
20037
  }
20039
20038
  }
20040
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderValidationErrorDirective, deps: [{ token: ValidationMessageRendererService }, { token: i1$a.MatFormField }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
20039
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderValidationErrorDirective, deps: [{ token: ValidationMessageRendererService }, { token: i1$9.MatFormField }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
20041
20040
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: ElderValidationErrorDirective, isStandalone: true, selector: "mat-error[elderValidationError]", ngImport: i0 }); }
20042
20041
  }
20043
20042
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderValidationErrorDirective, decorators: [{
@@ -20045,7 +20044,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
20045
20044
  args: [{
20046
20045
  selector: 'mat-error[elderValidationError]',
20047
20046
  }]
20048
- }], ctorParameters: () => [{ type: ValidationMessageRendererService }, { type: i1$a.MatFormField }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }] });
20047
+ }], ctorParameters: () => [{ type: ValidationMessageRendererService }, { type: i1$9.MatFormField }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }] });
20049
20048
 
20050
20049
  var ElderCheckboxState;
20051
20050
  (function (ElderCheckboxState) {
@@ -20173,7 +20172,7 @@ class ElderSingleStateCheckboxDirective {
20173
20172
  toggleNextState() {
20174
20173
  this.controller.toggleNextState();
20175
20174
  }
20176
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderSingleStateCheckboxDirective, deps: [{ token: i1$b.MatCheckbox }, { token: i1$3.NgModel }], target: i0.ɵɵFactoryTarget.Directive }); }
20175
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderSingleStateCheckboxDirective, deps: [{ token: i1$a.MatCheckbox }, { token: i1$3.NgModel }], target: i0.ɵɵFactoryTarget.Directive }); }
20177
20176
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: ElderSingleStateCheckboxDirective, isStandalone: true, selector: "mat-checkbox[elderSingleStateCheckbox]", ngImport: i0 }); }
20178
20177
  }
20179
20178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderSingleStateCheckboxDirective, decorators: [{
@@ -20181,7 +20180,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
20181
20180
  args: [{
20182
20181
  selector: 'mat-checkbox[elderSingleStateCheckbox]',
20183
20182
  }]
20184
- }], ctorParameters: () => [{ type: i1$b.MatCheckbox }, { type: i1$3.NgModel }] });
20183
+ }], ctorParameters: () => [{ type: i1$a.MatCheckbox }, { type: i1$3.NgModel }] });
20185
20184
 
20186
20185
  class ElderFormsDirectivesModule {
20187
20186
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderFormsDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -20545,7 +20544,6 @@ class ElderTableModule {
20545
20544
  MatTooltipModule,
20546
20545
  MatMenuModule,
20547
20546
  // translations
20548
- TranslateModule,
20549
20547
  ElderDataCommonModule,
20550
20548
  ElderInfiniteScrollModule,
20551
20549
  ElderFormsDirectivesModule,
@@ -20575,7 +20573,7 @@ class ElderTableModule {
20575
20573
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTableModule, providers: [
20576
20574
  {
20577
20575
  provide: MatPaginatorIntl,
20578
- deps: [TranslateService],
20576
+ deps: [ElderTranslateService],
20579
20577
  useClass: ElderPaginatorIntl,
20580
20578
  },
20581
20579
  ], imports: [CommonModule,
@@ -20597,7 +20595,6 @@ class ElderTableModule {
20597
20595
  MatTooltipModule,
20598
20596
  MatMenuModule,
20599
20597
  // translations
20600
- TranslateModule,
20601
20598
  ElderDataCommonModule,
20602
20599
  ElderInfiniteScrollModule,
20603
20600
  ElderFormsDirectivesModule,
@@ -20627,7 +20624,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
20627
20624
  MatTooltipModule,
20628
20625
  MatMenuModule,
20629
20626
  // translations
20630
- TranslateModule,
20631
20627
  ElderDataCommonModule,
20632
20628
  ElderInfiniteScrollModule,
20633
20629
  ElderFormsDirectivesModule,
@@ -20661,7 +20657,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
20661
20657
  providers: [
20662
20658
  {
20663
20659
  provide: MatPaginatorIntl,
20664
- deps: [TranslateService],
20660
+ deps: [ElderTranslateService],
20665
20661
  useClass: ElderPaginatorIntl,
20666
20662
  },
20667
20663
  ],
@@ -21162,6 +21158,10 @@ class ElderGridComponent extends ElderDataViewBaseComponent {
21162
21158
  provide: ELDER_DATA_VIEW,
21163
21159
  useExisting: forwardRef(() => ElderGridComponent),
21164
21160
  },
21161
+ {
21162
+ provide: MatPaginatorIntl,
21163
+ useClass: ElderPaginatorIntl,
21164
+ },
21165
21165
  ], queries: [{ propertyName: "navigationBar", first: true, predicate: ElderGridNavigationBarDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "tileTemplateQuery", first: true, predicate: ElderGridTileDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "toolbarTemplateQuery", first: true, predicate: ElderGridToolbarDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "tiles", predicate: ElderTileComponent, descendants: true, isSignal: true }, { propertyName: "virtualScrollViewPort", first: true, predicate: ["virtualScrollViewPort"], descendants: true, static: true }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "elderContinuator", first: true, predicate: ElderContinuatorComponent, descendants: true }], usesInheritance: true, hostDirectives: [{ directive: DataViewInteractionControllerDirective }], ngImport: i0, template: "<div class=\"full elder-grid-component\">\n @if (dc(); as dc) {\n <!-- Grid Browser -->\n <div\n class=\"layout-col full elder-grid-container\"\n [elderDataContextSelection]=\"dc\"\n #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n @if (toolbarVisible()) {\n <div class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n @if (selectionVisible) {\n <div class=\"layout-col flex-none px-sm\">\n <elder-selection-master-checkbox class=\"flex-none\"></elder-selection-master-checkbox>\n </div>\n }\n\n <!-- Toolbar -->\n @if (toolbarTemplate) {\n <ng-template\n *ngTemplateOutlet=\"toolbarTemplate; context: { $implicit: this }\"\n ></ng-template>\n }\n\n @if (availableCompositeSorts && availableCompositeSorts.length > 0) {\n <elder-composite-sort\n class=\"flex-none\"\n [availableSorts]=\"availableCompositeSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [elderCompositeSortDc]=\"dc\"\n >\n </elder-composite-sort>\n }\n </div>\n\n <mat-divider></mat-divider>\n }\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"dc\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"{{ scrollContainerId }}\"\n [itemSize]=\"itemHeight()\"\n [minBufferPx]=\"itemHeight() * 2\"\n [maxBufferPx]=\"itemHeight() * 3\"\n #virtualScrollViewPort\n elderInfiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"dcStatus()?.loading\"\n [containerId]=\"scrollContainerId\"\n [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\"\n (elderResizeObserver)=\"containerDimensions$.next($event)\"\n >\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"\n let gridRow of dataRows$;\n trackBy: TrackGridRowByIdFn;\n templateCacheSize: 50\n \"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight() + 'px'\"\n [style.--elder-grid-column-count]=\"activeColumnCount()\"\n >\n @for (tile of gridRow.cells; track trackCellId($index, tile)) {\n <!-- Tile Cell -->\n @if (isTileVisible(tile)) {\n <elder-tile\n class=\"elder-grid-tile\"\n [value]=\"tile\"\n [selectionEnabled]=\"selectionVisible\"\n [outlined]=\"tileOutlined()\"\n (click)=\"onItemClick(tile, $event)\"\n (dblclick)=\"onItemDoubleClick(tile)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n tileTemplate || simpleTileTemplate;\n context: { $implicit: tile }\n \"\n ></ng-container>\n </elder-tile>\n } @else {\n <div class=\"elder-grid-tile-hidden\"></div>\n }\n }\n </div>\n </cdk-virtual-scroll-viewport>\n\n <mat-progress-bar\n class=\"flex-none\"\n [mode]=\"dcStatus()?.loading ? 'indeterminate' : 'determinate'\"\n [color]=\"dcStatus()?.hasError ? 'warn' : 'primary'\"\n >\n </mat-progress-bar>\n\n <!-- Footer -->\n <ng-template\n *ngTemplateOutlet=\"navigationBar() ?? defaultNavigationBar; context: { $implicit: this }\"\n ></ng-template>\n </div>\n }\n</div>\n\n<ng-template #simpleTileTemplate let-tile>\n @if (tile) {\n <div class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{ tile }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #defaultNavigationBar>\n <elder-data-navigation></elder-data-navigation>\n</ng-template>\n", styles: [":root{--elder-grid-tile-gap: 16px}.elder-grid-tile{width:100%;height:100%;cursor:pointer;overflow:hidden}.elder-grid-tile-row{display:grid;align-items:start;justify-items:start;overflow:hidden;--elder-grid-column-count: 1;padding:calc(var(--elder-grid-tile-gap) / 2) var(--elder-grid-tile-gap);grid-template-columns:repeat(var(--elder-grid-column-count),minmax(0,1fr))}.elder-grid-tile-row:first-child{padding-top:var(--elder-grid-tile-gap)}.elder-grid-tile-row{column-gap:var(--elder-grid-tile-gap)}.elder-grid-tile-hidden{flex:0 1 100%;margin:calc(var(--elder-grid-tile-gap) / 2);width:100%;height:100%}.elder-grid-container{background-color:var(--elder-grid-background-color)}.elder-grid-flat{border:var(--elder-border-light)}.elder-grid-toolbar{min-height:44px}.elder-grid-footer{min-height:var(--elder-data-element-footer-height)}\n"], dependencies: [{ kind: "directive", type: DataContextSelectionDirective, selector: "[elderDataContextSelection]", inputs: ["elderDataContextSelectionModel", "elderDataContextSelection"], exportAs: ["elderDataContextSelection"] }, { kind: "component", type: ElderSelectionMasterCheckboxComponent, selector: "elder-selection-master-checkbox" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: DataContextStateIndicatorComponent, selector: "elder-data-context-state-indicator", inputs: ["dataContext"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: ElderInfiniteScrollDirective, selector: "[elderInfiniteScroll]", inputs: ["listenToHost", "eventThrottle", "offsetFactor", "ignoreScrollEvent", "containerId", "scrollContainer"], outputs: ["closeToEnd", "scrolling"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ElderCompositeSortComponent, selector: "elder-composite-sort", inputs: ["availableSorts", "sorts", "translationPrefix"], outputs: ["sortsChange"] }, { kind: "directive", type: ElderCompositeSortDcDirective, selector: "[elderCompositeSortDc]", inputs: ["elderCompositeSortDc"] }, { kind: "component", type: ElderTileComponent, selector: "elder-tile", inputs: ["value", "selectionEnabled", "interactionMode", "outlined"] }, { kind: "directive", type: ResizeObserverDirective, selector: "[elderResizeObserver]", inputs: ["enabled"], outputs: ["dimensionChange", "elderResizeObserver"] }, { kind: "component", type: ElderDataNavigationComponent, selector: "elder-data-navigation" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
21166
21166
  }
21167
21167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderGridComponent, decorators: [{
@@ -21171,6 +21171,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
21171
21171
  provide: ELDER_DATA_VIEW,
21172
21172
  useExisting: forwardRef(() => ElderGridComponent),
21173
21173
  },
21174
+ {
21175
+ provide: MatPaginatorIntl,
21176
+ useClass: ElderPaginatorIntl,
21177
+ },
21174
21178
  ], hostDirectives: [DataViewInteractionControllerDirective], imports: [
21175
21179
  DataContextSelectionDirective,
21176
21180
  ElderSelectionMasterCheckboxComponent,
@@ -21182,11 +21186,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
21182
21186
  ElderInfiniteScrollDirective,
21183
21187
  CdkVirtualForOf,
21184
21188
  MatProgressBar,
21185
- MatPaginator,
21186
21189
  ElderCompositeSortComponent,
21187
21190
  ElderCompositeSortDcDirective,
21188
21191
  ElderTileComponent,
21189
- ElderContinuatorComponent,
21190
21192
  ResizeObserverDirective,
21191
21193
  ElderDataNavigationComponent,
21192
21194
  ], template: "<div class=\"full elder-grid-component\">\n @if (dc(); as dc) {\n <!-- Grid Browser -->\n <div\n class=\"layout-col full elder-grid-container\"\n [elderDataContextSelection]=\"dc\"\n #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n @if (toolbarVisible()) {\n <div class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n @if (selectionVisible) {\n <div class=\"layout-col flex-none px-sm\">\n <elder-selection-master-checkbox class=\"flex-none\"></elder-selection-master-checkbox>\n </div>\n }\n\n <!-- Toolbar -->\n @if (toolbarTemplate) {\n <ng-template\n *ngTemplateOutlet=\"toolbarTemplate; context: { $implicit: this }\"\n ></ng-template>\n }\n\n @if (availableCompositeSorts && availableCompositeSorts.length > 0) {\n <elder-composite-sort\n class=\"flex-none\"\n [availableSorts]=\"availableCompositeSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [elderCompositeSortDc]=\"dc\"\n >\n </elder-composite-sort>\n }\n </div>\n\n <mat-divider></mat-divider>\n }\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"dc\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"{{ scrollContainerId }}\"\n [itemSize]=\"itemHeight()\"\n [minBufferPx]=\"itemHeight() * 2\"\n [maxBufferPx]=\"itemHeight() * 3\"\n #virtualScrollViewPort\n elderInfiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"dcStatus()?.loading\"\n [containerId]=\"scrollContainerId\"\n [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\"\n (elderResizeObserver)=\"containerDimensions$.next($event)\"\n >\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"\n let gridRow of dataRows$;\n trackBy: TrackGridRowByIdFn;\n templateCacheSize: 50\n \"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight() + 'px'\"\n [style.--elder-grid-column-count]=\"activeColumnCount()\"\n >\n @for (tile of gridRow.cells; track trackCellId($index, tile)) {\n <!-- Tile Cell -->\n @if (isTileVisible(tile)) {\n <elder-tile\n class=\"elder-grid-tile\"\n [value]=\"tile\"\n [selectionEnabled]=\"selectionVisible\"\n [outlined]=\"tileOutlined()\"\n (click)=\"onItemClick(tile, $event)\"\n (dblclick)=\"onItemDoubleClick(tile)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n tileTemplate || simpleTileTemplate;\n context: { $implicit: tile }\n \"\n ></ng-container>\n </elder-tile>\n } @else {\n <div class=\"elder-grid-tile-hidden\"></div>\n }\n }\n </div>\n </cdk-virtual-scroll-viewport>\n\n <mat-progress-bar\n class=\"flex-none\"\n [mode]=\"dcStatus()?.loading ? 'indeterminate' : 'determinate'\"\n [color]=\"dcStatus()?.hasError ? 'warn' : 'primary'\"\n >\n </mat-progress-bar>\n\n <!-- Footer -->\n <ng-template\n *ngTemplateOutlet=\"navigationBar() ?? defaultNavigationBar; context: { $implicit: this }\"\n ></ng-template>\n </div>\n }\n</div>\n\n<ng-template #simpleTileTemplate let-tile>\n @if (tile) {\n <div class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{ tile }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #defaultNavigationBar>\n <elder-data-navigation></elder-data-navigation>\n</ng-template>\n", styles: [":root{--elder-grid-tile-gap: 16px}.elder-grid-tile{width:100%;height:100%;cursor:pointer;overflow:hidden}.elder-grid-tile-row{display:grid;align-items:start;justify-items:start;overflow:hidden;--elder-grid-column-count: 1;padding:calc(var(--elder-grid-tile-gap) / 2) var(--elder-grid-tile-gap);grid-template-columns:repeat(var(--elder-grid-column-count),minmax(0,1fr))}.elder-grid-tile-row:first-child{padding-top:var(--elder-grid-tile-gap)}.elder-grid-tile-row{column-gap:var(--elder-grid-tile-gap)}.elder-grid-tile-hidden{flex:0 1 100%;margin:calc(var(--elder-grid-tile-gap) / 2);width:100%;height:100%}.elder-grid-container{background-color:var(--elder-grid-background-color)}.elder-grid-flat{border:var(--elder-border-light)}.elder-grid-toolbar{min-height:44px}.elder-grid-footer{min-height:var(--elder-data-element-footer-height)}\n"] }]
@@ -23372,6 +23374,7 @@ class ElderSelectBase extends ElderFormFieldControlBase {
23372
23374
  this.pageSize = 10;
23373
23375
  this.queryFilter = 'query';
23374
23376
  this.sorts = [];
23377
+ this.tabSelectAfterTextInput = false;
23375
23378
  /**
23376
23379
  * Emits an event when the user has clicked on the current
23377
23380
  * selected entity.
@@ -23562,7 +23565,7 @@ class ElderSelectBase extends ElderFormFieldControlBase {
23562
23565
  return typeof val === 'function' || typeof val === 'object';
23563
23566
  }
23564
23567
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderSelectBase, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
23565
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: ElderSelectBase, isStandalone: true, inputs: { cleanUp: { classPropertyName: "cleanUp", publicName: "cleanUp", isSignal: false, isRequired: false, transformFunction: null }, displayPropertyResolverS: { classPropertyName: "displayPropertyResolverS", publicName: "displayPropertyResolver", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, queryFilter: { classPropertyName: "queryFilter", publicName: "queryFilter", isSignal: false, isRequired: false, transformFunction: null }, sorts: { classPropertyName: "sorts", publicName: "sorts", isSignal: false, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: false, isRequired: false, transformFunction: null }, isOptionDisabledFn: { classPropertyName: "isOptionDisabledFn", publicName: "isOptionDisabledFn", isSignal: false, isRequired: false, transformFunction: null }, isOptionHiddenFn: { classPropertyName: "isOptionHiddenFn", publicName: "isOptionHiddenFn", isSignal: false, isRequired: false, transformFunction: null }, valueAsId: { classPropertyName: "valueAsId", publicName: "valueAsId", isSignal: false, isRequired: false, transformFunction: null }, displayProperty: { classPropertyName: "displayProperty", publicName: "displayProperty", isSignal: false, isRequired: false, transformFunction: null }, displayPropertyResolver: { classPropertyName: "displayPropertyResolver", publicName: "displayPropertyResolver", isSignal: false, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: false, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, valueTemplate: { classPropertyName: "valueTemplate", publicName: "valueTemplate", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { displayPropertyResolverS: "displayPropertyResolverChange", currentClicked: "currentClicked" }, queries: [{ propertyName: "valueTemplateQuery", first: true, predicate: ElderSelectValueDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "selectionPopup", first: true, predicate: SelectionModelPopupDirective, descendants: true }, { propertyName: "templateOptions$", predicate: ElderSelectOptionComponent }], usesInheritance: true, ngImport: i0 }); }
23568
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: ElderSelectBase, isStandalone: true, inputs: { cleanUp: { classPropertyName: "cleanUp", publicName: "cleanUp", isSignal: false, isRequired: false, transformFunction: null }, displayPropertyResolverS: { classPropertyName: "displayPropertyResolverS", publicName: "displayPropertyResolver", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, queryFilter: { classPropertyName: "queryFilter", publicName: "queryFilter", isSignal: false, isRequired: false, transformFunction: null }, sorts: { classPropertyName: "sorts", publicName: "sorts", isSignal: false, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: false, isRequired: false, transformFunction: null }, tabSelectAfterTextInput: { classPropertyName: "tabSelectAfterTextInput", publicName: "tabSelectAfterTextInput", isSignal: false, isRequired: false, transformFunction: null }, isOptionDisabledFn: { classPropertyName: "isOptionDisabledFn", publicName: "isOptionDisabledFn", isSignal: false, isRequired: false, transformFunction: null }, isOptionHiddenFn: { classPropertyName: "isOptionHiddenFn", publicName: "isOptionHiddenFn", isSignal: false, isRequired: false, transformFunction: null }, valueAsId: { classPropertyName: "valueAsId", publicName: "valueAsId", isSignal: false, isRequired: false, transformFunction: null }, displayProperty: { classPropertyName: "displayProperty", publicName: "displayProperty", isSignal: false, isRequired: false, transformFunction: null }, displayPropertyResolver: { classPropertyName: "displayPropertyResolver", publicName: "displayPropertyResolver", isSignal: false, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: false, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, valueTemplate: { classPropertyName: "valueTemplate", publicName: "valueTemplate", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { displayPropertyResolverS: "displayPropertyResolverChange", currentClicked: "currentClicked" }, queries: [{ propertyName: "valueTemplateQuery", first: true, predicate: ElderSelectValueDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "selectionPopup", first: true, predicate: SelectionModelPopupDirective, descendants: true }, { propertyName: "templateOptions$", predicate: ElderSelectOptionComponent }], usesInheritance: true, ngImport: i0 }); }
23566
23569
  }
23567
23570
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderSelectBase, decorators: [{
23568
23571
  type: Directive
@@ -23576,6 +23579,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
23576
23579
  type: Input
23577
23580
  }], icon: [{
23578
23581
  type: Input
23582
+ }], tabSelectAfterTextInput: [{
23583
+ type: Input
23579
23584
  }], valueTemplateQuery: [{
23580
23585
  type: ContentChild,
23581
23586
  args: [ElderSelectValueDirective, { read: TemplateRef, static: true }]
@@ -23733,7 +23738,8 @@ class ElderSelectOnTabDirective {
23733
23738
  this.destroy$ = new Subject$1();
23734
23739
  this.controlValueAccessor = this.elderSelectBase;
23735
23740
  this.panelOpen = false;
23736
- this.userInteracted = false;
23741
+ this.autocompleteTextTyped = false;
23742
+ this.panelNavigatedWithArrowKeys = false;
23737
23743
  }
23738
23744
  /***************************************************************************
23739
23745
  * *
@@ -23741,13 +23747,16 @@ class ElderSelectOnTabDirective {
23741
23747
  * *
23742
23748
  **************************************************************************/
23743
23749
  handleVerticalArrowKeyPress() {
23744
- this.userInteracted = true;
23750
+ this.panelNavigatedWithArrowKeys = true;
23751
+ }
23752
+ handleInputTyping() {
23753
+ this.autocompleteTextTyped = true;
23745
23754
  }
23746
23755
  handleTabKeyPress() {
23747
23756
  if (!this.panelOpen) {
23748
23757
  return;
23749
23758
  }
23750
- if (this.userInteracted || this.isRequiredAndEmpty()) {
23759
+ if (this.userInteracted() || this.isRequiredAndEmpty()) {
23751
23760
  this.selectActiveOption();
23752
23761
  }
23753
23762
  }
@@ -23773,7 +23782,8 @@ class ElderSelectOnTabDirective {
23773
23782
  return !this.controlValueAccessor.value && this.elderSelectBase.required;
23774
23783
  }
23775
23784
  resetInteractionState() {
23776
- this.userInteracted = false;
23785
+ this.autocompleteTextTyped = false;
23786
+ this.panelNavigatedWithArrowKeys = false;
23777
23787
  }
23778
23788
  observePanelOpen() {
23779
23789
  const autocomplete = this.autoTrigger.autocomplete;
@@ -23786,12 +23796,15 @@ class ElderSelectOnTabDirective {
23786
23796
  }
23787
23797
  });
23788
23798
  }
23799
+ /**
23800
+ * This method seems obsolete, probably once was intended to detect user input from the autocomplete.
23801
+ */
23789
23802
  observeAutocompleteSelection() {
23790
23803
  this.autoTrigger.optionSelections
23791
23804
  .pipe(
23792
23805
  // TODO https://github.com/angular/components/pull/14813
23793
23806
  takeUntil(this.destroy$), tap((opt) => this.logger.debug('[optionSelections] CHANGED ', opt)), map((opt) => opt.isUserInput))
23794
- .subscribe((isUserInput) => (this.userInteracted = isUserInput));
23807
+ .subscribe((isUserInput) => (this.autocompleteTextTyped = isUserInput));
23795
23808
  }
23796
23809
  selectActiveOption() {
23797
23810
  const activeOption = this.autoTrigger.activeOption;
@@ -23818,8 +23831,14 @@ class ElderSelectOnTabDirective {
23818
23831
  return entity;
23819
23832
  }
23820
23833
  }
23834
+ textTypedAndSettingRespected() {
23835
+ return this.autocompleteTextTyped && this.elderSelectBase.tabSelectAfterTextInput;
23836
+ }
23837
+ userInteracted() {
23838
+ return this.panelNavigatedWithArrowKeys || this.textTypedAndSettingRespected();
23839
+ }
23821
23840
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderSelectOnTabDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
23822
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: ElderSelectOnTabDirective, isStandalone: true, selector: "[elderSelectOnTab]", host: { listeners: { "keydown.arrowup": "handleVerticalArrowKeyPress()", "keydown.arrowdown": "handleVerticalArrowKeyPress()", "keydown.tab": "handleTabKeyPress()" } }, ngImport: i0 }); }
23841
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: ElderSelectOnTabDirective, isStandalone: true, selector: "[elderSelectOnTab]", host: { listeners: { "keydown.arrowup": "handleVerticalArrowKeyPress()", "keydown.arrowdown": "handleVerticalArrowKeyPress()", "input": "handleInputTyping()", "keydown.tab": "handleTabKeyPress()" } }, ngImport: i0 }); }
23823
23842
  }
23824
23843
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderSelectOnTabDirective, decorators: [{
23825
23844
  type: Directive,
@@ -23832,6 +23851,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
23832
23851
  }, {
23833
23852
  type: HostListener,
23834
23853
  args: ['keydown.arrowdown']
23854
+ }], handleInputTyping: [{
23855
+ type: HostListener,
23856
+ args: ['input']
23835
23857
  }], handleTabKeyPress: [{
23836
23858
  type: HostListener,
23837
23859
  args: ['keydown.tab']
@@ -25728,7 +25750,8 @@ class ElderMultiSelectBase extends ElderSelectBase {
25728
25750
  }
25729
25751
  set entities(entities) {
25730
25752
  if (!this.equalEntitiesExactOrder(this.entities, entities)) {
25731
- this.writeValueInternalFromItemModel(entities.map((e) => this.toItemModel(e)));
25753
+ const entitiesOrEmpty = entities ?? [];
25754
+ this.writeValueInternalFromItemModel(entitiesOrEmpty.map((e) => this.toItemModel(e)));
25732
25755
  }
25733
25756
  }
25734
25757
  get entities() {
@@ -25856,7 +25879,7 @@ class ElderMultiSelectBase extends ElderSelectBase {
25856
25879
  else {
25857
25880
  // Value was written as entity, ensure entity is updated
25858
25881
  const currentEntities = this.entities;
25859
- const newEntities = value;
25882
+ const newEntities = value ?? [];
25860
25883
  this.logger.debug('writeToControl: value was written as entities (size): ' + newEntities?.length, value);
25861
25884
  if (!this.equalEntities(currentEntities, newEntities)) {
25862
25885
  this.writeItemModelSorted(newEntities.map((e) => this.toItemModel(e)));
@@ -28908,7 +28931,7 @@ class ElderNavGroupComponent {
28908
28931
  }
28909
28932
  }
28910
28933
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderNavGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28911
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ElderNavGroupComponent, isStandalone: true, selector: "elder-nav-group", queries: [{ propertyName: "children", predicate: ElderNavLinkComponent, isSignal: true }], ngImport: i0, template: "<div class=\"layout-col nav-group\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n <a\n matRipple\n tabindex=\"0\"\n class=\"layout-row place-start-center nav-group-button\"\n [class.nav-group-button-open]=\"isOpen()\"\n [class.nav-group-button-closed]=\"!isOpen()\"\n [class.nav-group-button-active]=\"isActive()\"\n (click)=\"onItemClicked($event)\"\n (keydown)=\"onItemKeyDown($event)\"\n >\n <div class=\"elder-nav-group-button-content layout-row place-start-center gap-lg full noselect\">\n <ng-content></ng-content>\n <span class=\"flex\"></span>\n @if (!isRailNav()) {\n <mat-icon>{{ isOpen() ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}</mat-icon>\n }\n </div>\n </a>\n\n <!-- Template for nav links content. Necessary to project nav links content into the overlay. -->\n <ng-template #navLinksTemplate>\n <ng-content select=\"elder-nav-link\"></ng-content>\n </ng-template>\n\n <!-- Nested Items projection -->\n @if (!isRailNav()) {\n <elder-nav-expansion-panel [isOpen]=\"isOpen()\">\n <div class=\"layout-col nav-group-items-container p-sm\">\n <ng-container *ngTemplateOutlet=\"navLinksTemplate\"></ng-container>\n </div>\n </elder-nav-expansion-panel>\n } @else {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n >\n <div class=\"nav-group-in-overlay\" (click)=\"handleClickInOverlay($event)\">\n <div class=\"layout-col nav-group-items-container p-sm\">\n <ng-container *ngTemplateOutlet=\"navLinksTemplate\"></ng-container>\n </div>\n </div>\n </ng-template>\n }\n</div>\n", styles: [".nav-group-button-closed{padding-left:16px}.nav-group{min-height:var(--elder-nav-item-height)}.nav-group-button{padding-right:16px;min-height:var(--elder-nav-item-height);font-size:16px;font-weight:400;border-radius:var(--elder-border-radius-sm);cursor:pointer}.nav-group-button .mat-icon{height:24px;width:24px;font-size:24px;padding:0 4px}.nav-group-items-container{overflow:hidden}.nav-group-button:hover{background-color:var(--elder-nav-link-hover-color);transition:background-color .5s}.nav-group .nav-group-button.nav-group-button-open{padding-left:11px}.nav-group .nav-group-button.nav-group-button-active:not(.nav-group-button-open){background-color:var(--elder-nav-link-hover-color);color:var(--md-sys-color-primary)}.nav-group-in-overlay{--elder-nav-item-height: 38px;width:auto;border:solid 1px var(--md-sys-color-outline-variant);border-radius:5px;background:var(--md-sys-color-surface-container-lowest);text-align:center;padding:4px 0;margin:0 0 0 10px;min-width:280px;box-shadow:0 0 8px #00000026;overflow-y:auto}.nav-group-in-overlay .nav-group-items-container{font-size:14px}\n"], dependencies: [{ kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$c.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$c.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ElderNavExpansionPanelComponent, selector: "elder-nav-expansion-panel", inputs: ["isOpen"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28934
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ElderNavGroupComponent, isStandalone: true, selector: "elder-nav-group", queries: [{ propertyName: "children", predicate: ElderNavLinkComponent, isSignal: true }], ngImport: i0, template: "<div class=\"layout-col nav-group\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n <a\n matRipple\n tabindex=\"0\"\n class=\"layout-row place-start-center nav-group-button\"\n [class.nav-group-button-open]=\"isOpen()\"\n [class.nav-group-button-closed]=\"!isOpen()\"\n [class.nav-group-button-active]=\"isActive()\"\n (click)=\"onItemClicked($event)\"\n (keydown)=\"onItemKeyDown($event)\"\n >\n <div class=\"elder-nav-group-button-content layout-row place-start-center gap-lg full noselect\">\n <ng-content></ng-content>\n <span class=\"flex\"></span>\n @if (!isRailNav()) {\n <mat-icon>{{ isOpen() ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}</mat-icon>\n }\n </div>\n </a>\n\n <!-- Template for nav links content. Necessary to project nav links content into the overlay. -->\n <ng-template #navLinksTemplate>\n <ng-content select=\"elder-nav-link\"></ng-content>\n </ng-template>\n\n <!-- Nested Items projection -->\n @if (!isRailNav()) {\n <elder-nav-expansion-panel [isOpen]=\"isOpen()\">\n <div class=\"layout-col nav-group-items-container p-sm\">\n <ng-container *ngTemplateOutlet=\"navLinksTemplate\"></ng-container>\n </div>\n </elder-nav-expansion-panel>\n } @else {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n >\n <div class=\"nav-group-in-overlay\" (click)=\"handleClickInOverlay($event)\">\n <div class=\"layout-col nav-group-items-container p-sm\">\n <ng-container *ngTemplateOutlet=\"navLinksTemplate\"></ng-container>\n </div>\n </div>\n </ng-template>\n }\n</div>\n", styles: [".nav-group-button-closed{padding-left:16px}.nav-group{min-height:var(--elder-nav-item-height)}.nav-group-button{padding-right:16px;min-height:var(--elder-nav-item-height);font-size:16px;font-weight:400;border-radius:var(--elder-border-radius-sm);cursor:pointer}.nav-group-button .mat-icon{height:24px;width:24px;font-size:24px;padding:0 4px}.nav-group-items-container{overflow:hidden}.nav-group-button:hover{background-color:var(--elder-nav-link-hover-color);transition:background-color .5s}.nav-group .nav-group-button.nav-group-button-open{padding-left:11px}.nav-group .nav-group-button.nav-group-button-active:not(.nav-group-button-open){background-color:var(--elder-nav-link-hover-color);color:var(--md-sys-color-primary)}.nav-group-in-overlay{--elder-nav-item-height: 38px;width:auto;border:solid 1px var(--md-sys-color-outline-variant);border-radius:5px;background:var(--md-sys-color-surface-container-lowest);text-align:center;padding:4px 0;margin:0 0 0 10px;min-width:280px;box-shadow:0 0 8px #00000026;overflow-y:auto}.nav-group-in-overlay .nav-group-items-container{font-size:14px}\n"], dependencies: [{ kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$b.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$b.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ElderNavExpansionPanelComponent, selector: "elder-nav-expansion-panel", inputs: ["isOpen"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28912
28935
  }
28913
28936
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderNavGroupComponent, decorators: [{
28914
28937
  type: Component,
@@ -31137,7 +31160,7 @@ class ElderIntervalInputComponent extends ElderFormFieldControlBase {
31137
31160
  return coerceInterval(value);
31138
31161
  }
31139
31162
  }
31140
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderIntervalInputComponent, deps: [{ token: i1$d.DateAdapter }, { token: MAT_DATE_LOCALE }], target: i0.ɵɵFactoryTarget.Component }); }
31163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderIntervalInputComponent, deps: [{ token: i1$c.DateAdapter }, { token: MAT_DATE_LOCALE }], target: i0.ɵɵFactoryTarget.Component }); }
31141
31164
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ElderIntervalInputComponent, isStandalone: true, selector: "elder-interval-input", inputs: { zone: "zone", valueAsIsoStr: "valueAsIsoStr", mode: "mode", isDefaultDatePickerDisabled: "isDefaultDatePickerDisabled", isoValue: "isoValue" }, outputs: { isoValueChange: "isoValueChange" }, providers: [{ provide: MatFormFieldControl, useExisting: ElderIntervalInputComponent }], usesInheritance: true, ngImport: i0, template: "@switch (mode) {\n @case ('date-time-range') {\n <div class=\"layout-row\">\n <elder-date-time-input\n class=\"flex\"\n center\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n <span class=\"mat-date-range-input-separator flex-none\">\u2013</span>\n <elder-date-time-input\n class=\"flex\"\n center\n [value]=\"(interval$ | async)?.end\"\n (valueUpdated)=\"onEndChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.to' | translate)\"\n ></elder-date-time-input>\n </div>\n }\n @case ('day-time-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n <!-- [name]=\"name + '-day-start'\" -->\n <elder-date-time-input\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onDayTimeStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n\n <!-- [name]=\"name + '-day-end'\" -->\n <elder-local-time-input\n [value]=\"endTime$ | async\"\n (valueUpdated)=\"onDayTimeEndTimeChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.to' | translate)\"\n ></elder-local-time-input>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n <mat-date-range-input\n class=\"mdc-text-field__input\"\n [rangePicker]=\"picker\"\n [disabled]=\"!!disabled\"\n >\n <input\n matStartDate\n [placeholder]=\"dateformat\"\n [ngModel]=\"startDate$ | async\"\n name=\"date-range.start\"\n [ngModelOptions]=\"{ standalone: true, updateOn: 'blur' }\"\n (ngModelChange)=\"onStartDateChanged($event)\"\n [readonly]=\"readonly\"\n [disabled]=\"!!disabled\"\n />\n <input\n matEndDate\n [placeholder]=\"dateformat\"\n [ngModel]=\"endDate$ | async\"\n name=\"date-range.end\"\n [ngModelOptions]=\"{ standalone: true, updateOn: 'blur' }\"\n (ngModelChange)=\"onEndDateChanged($event)\"\n [readonly]=\"readonly\"\n [disabled]=\"!!disabled\"\n />\n </mat-date-range-input>\n\n @if (!isDefaultDatePickerDisabled) {\n <mat-datepicker-toggle\n class=\"elder-control-icon-button\"\n [disabled]=\"isLocked\"\n [for]=\"picker\"\n >\n <mat-icon matDatepickerToggleIcon>calendar_month</mat-icon>\n </mat-datepicker-toggle>\n }\n <mat-date-range-picker #picker></mat-date-range-picker>\n </div>\n }\n\n @case ('single-day') {\n <div class=\"layout-row elder-flex-control\">\n <!-- [name]=\"name\" -->\n <elder-local-date-input\n class=\"flex\"\n center\n [value]=\"startLocalDate$ | async\"\n (valueUpdated)=\"onSingleDayDateChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeHolderOrEmpty() | translate\"\n ></elder-local-date-input>\n </div>\n }\n}\n", styles: [".elder-flex-interval-control{flex:1 1 auto;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ElderDateTimeInputComponent, selector: "elder-date-time-input", inputs: ["center", "isoValue"], outputs: ["isoValueChange"] }, { kind: "component", type: ElderLocalTimeInputComponent, selector: "elder-local-time-input", inputs: ["isoValue"], outputs: ["isoValueChange"] }, { kind: "component", type: MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: ElderLocalDateInputComponent, selector: "elder-local-date-input", inputs: ["zone", "autoDatePicker", "arrows", "today", "center", "datePickerTouchUi", "allowNull", "datePickerEnabled", "isoValue", "dateValue", "isoDateValue"], outputs: ["blurred", "valueUpdatedBlur", "isoValueChange", "dateValueChange", "isoDateValueChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ElderTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31142
31165
  }
31143
31166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderIntervalInputComponent, decorators: [{
@@ -31157,7 +31180,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
31157
31180
  MatDateRangePicker,
31158
31181
  ElderLocalDateInputComponent,
31159
31182
  ], template: "@switch (mode) {\n @case ('date-time-range') {\n <div class=\"layout-row\">\n <elder-date-time-input\n class=\"flex\"\n center\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n <span class=\"mat-date-range-input-separator flex-none\">\u2013</span>\n <elder-date-time-input\n class=\"flex\"\n center\n [value]=\"(interval$ | async)?.end\"\n (valueUpdated)=\"onEndChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.to' | translate)\"\n ></elder-date-time-input>\n </div>\n }\n @case ('day-time-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n <!-- [name]=\"name + '-day-start'\" -->\n <elder-date-time-input\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onDayTimeStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n\n <!-- [name]=\"name + '-day-end'\" -->\n <elder-local-time-input\n [value]=\"endTime$ | async\"\n (valueUpdated)=\"onDayTimeEndTimeChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.to' | translate)\"\n ></elder-local-time-input>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n <mat-date-range-input\n class=\"mdc-text-field__input\"\n [rangePicker]=\"picker\"\n [disabled]=\"!!disabled\"\n >\n <input\n matStartDate\n [placeholder]=\"dateformat\"\n [ngModel]=\"startDate$ | async\"\n name=\"date-range.start\"\n [ngModelOptions]=\"{ standalone: true, updateOn: 'blur' }\"\n (ngModelChange)=\"onStartDateChanged($event)\"\n [readonly]=\"readonly\"\n [disabled]=\"!!disabled\"\n />\n <input\n matEndDate\n [placeholder]=\"dateformat\"\n [ngModel]=\"endDate$ | async\"\n name=\"date-range.end\"\n [ngModelOptions]=\"{ standalone: true, updateOn: 'blur' }\"\n (ngModelChange)=\"onEndDateChanged($event)\"\n [readonly]=\"readonly\"\n [disabled]=\"!!disabled\"\n />\n </mat-date-range-input>\n\n @if (!isDefaultDatePickerDisabled) {\n <mat-datepicker-toggle\n class=\"elder-control-icon-button\"\n [disabled]=\"isLocked\"\n [for]=\"picker\"\n >\n <mat-icon matDatepickerToggleIcon>calendar_month</mat-icon>\n </mat-datepicker-toggle>\n }\n <mat-date-range-picker #picker></mat-date-range-picker>\n </div>\n }\n\n @case ('single-day') {\n <div class=\"layout-row elder-flex-control\">\n <!-- [name]=\"name\" -->\n <elder-local-date-input\n class=\"flex\"\n center\n [value]=\"startLocalDate$ | async\"\n (valueUpdated)=\"onSingleDayDateChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeHolderOrEmpty() | translate\"\n ></elder-local-date-input>\n </div>\n }\n}\n", styles: [".elder-flex-interval-control{flex:1 1 auto;overflow:hidden}\n"] }]
31160
- }], ctorParameters: () => [{ type: i1$d.DateAdapter }, { type: undefined, decorators: [{
31183
+ }], ctorParameters: () => [{ type: i1$c.DateAdapter }, { type: undefined, decorators: [{
31161
31184
  type: Inject,
31162
31185
  args: [MAT_DATE_LOCALE]
31163
31186
  }] }], propDecorators: { zone: [{
@@ -32277,7 +32300,7 @@ class ElderIntervalPickerComponent {
32277
32300
  }
32278
32301
  }
32279
32302
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderIntervalPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32280
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ElderIntervalPickerComponent, isStandalone: true, selector: "elder-interval-picker", inputs: { emitType: { classPropertyName: "emitType", publicName: "emitType", isSignal: true, isRequired: false, transformFunction: null }, autoEmitMode: { classPropertyName: "autoEmitMode", publicName: "autoEmitMode", isSignal: true, isRequired: false, transformFunction: null }, intervalInputMode: { classPropertyName: "intervalInputMode", publicName: "intervalInputMode", isSignal: true, isRequired: false, transformFunction: null }, showAnchor: { classPropertyName: "showAnchor", publicName: "showAnchor", isSignal: true, isRequired: false, transformFunction: null }, anchorReadOnly: { classPropertyName: "anchorReadOnly", publicName: "anchorReadOnly", isSignal: true, isRequired: false, transformFunction: null }, externalAnchorDateTime: { classPropertyName: "externalAnchorDateTime", publicName: "externalAnchorDateTime", isSignal: true, isRequired: false, transformFunction: null }, externalInterval: { classPropertyName: "externalInterval", publicName: "externalInterval", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intervalChange: "intervalChange" }, providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }], viewQueries: [{ propertyName: "calendarStart", first: true, predicate: ["rangeCalendarStart"], descendants: true }, { propertyName: "calendarEnd", first: true, predicate: ["rangeCalendarEnd"], descendants: true }, { propertyName: "calendarStartElRef", first: true, predicate: ["rangeCalendarStart"], descendants: true, read: ElementRef }, { propertyName: "calendarEndElRef", first: true, predicate: ["rangeCalendarEnd"], descendants: true, read: ElementRef }, { propertyName: "startDateInput", first: true, predicate: ["startDateInput"], descendants: true }, { propertyName: "endDateInput", first: true, predicate: ["endDateInput"], descendants: true }], ngImport: i0, template: "<div class=\"interval-picker-component p-md layout-col gap-xxl\">\n <div class=\"layout-row gap-xxl place-between-start\" style=\"gap: 5%\">\n <div class=\"layout-col gap-md pt-xs\">\n <div class=\"layout-col\">\n <div class=\"layout-row select-buttons-container gap-sm\">\n <div class=\"layout-col gap-xs place-start-stretch\">\n <button mat-button type=\"button\" (click)=\"controller.select.selectCurrentDay()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.anchorDay' | translate }}\n } @else {\n {{ 'intervalPicker.today' | translate }}\n }\n </button>\n <button mat-button type=\"button\" (click)=\"controller.select.selectYesterday()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.last' | translate }} 1 {{ 'intervalPicker.day' | translate }}\n } @else {\n {{ 'intervalPicker.yesterday' | translate }}\n }\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"controller.select.selectLastSevenDaysIncludingToday()\"\n >\n {{ 'intervalPicker.last' | translate }} 7\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"controller.select.selectLastThirtyDaysIncludingToday()\"\n >\n {{ 'intervalPicker.last' | translate }} 30\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"controller.select.selectLast365daysIncludingToday()\"\n >\n {{ 'intervalPicker.last' | translate }} 365\n {{ 'intervalPicker.days' | translate }}\n </button>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"pt-sm\"></div>\n <button mat-button type=\"button\" (click)=\"controller.select.selectLastFiveMinutes()\">\n {{ 'intervalPicker.last' | translate }} 5\n {{ 'intervalPicker.minutes' | translate }}\n </button>\n <button mat-button type=\"button\" (click)=\"controller.select.selectLastHour()\">\n {{ 'intervalPicker.last' | translate }} {{ 'intervalPicker.hour' | translate }}\n </button>\n <button mat-button type=\"button\" (click)=\"controller.select.selectLast24Hours()\">\n {{ 'intervalPicker.last' | translate }} 24\n {{ 'intervalPicker.hours' | translate }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n <div class=\"layout-col\">\n <!-- smart shift -->\n <div class=\"layout-row place-around-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.smartShift(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ presenter.smartShiftMessage() }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.smartShift(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- calendars and input controls -->\n <div\n class=\"layout-row place-around-center\"\n style=\"align-items: flex-start; min-height: 280px\"\n >\n <mat-calendar\n #rangeCalendarStart\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setStartDateFromJSDate($event)\"\n [maxDate]=\"presenter.endDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n <mat-calendar\n #rangeCalendarEnd\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setEndDateFromJSDate($event)\"\n [minDate]=\"presenter.startDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n </div>\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"startDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.startDateHtmlString()\"\n (ngModelChange)=\"controller.form.setStartDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endDate' | translate }}</mat-label>\n <input\n #endDateInput\n name=\"endDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.endDateHtmlString()\"\n (ngModelChange)=\"controller.form.setEndDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n </div>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startTime' | translate }}</mat-label>\n <input\n name=\"startTimeInput\"\n matInput\n type=\"time\"\n #startTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.startTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setStartTimeFromString($event)\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"controller.clearStartTime()\"\n [disabled]=\"!presenter.isStartTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endTime' | translate }}</mat-label>\n <input\n name=\"endTimeInput\"\n matInput\n type=\"time\"\n #endTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.endTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setEndTimeFromString($event)\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"controller.clearEndTime()\"\n [disabled]=\"!presenter.isEndTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n }\n <br />\n </div>\n <div class=\"pt-xs\" style=\"width: 25%\">\n <div class=\"layout-col gap-lg\">\n <div class=\"layout-col gap-xs place-start-start\">\n <!-- select current -->\n <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentWeek()\">\n {{ 'intervalPicker.currentPeriod.week' | translate }}\n </button>\n <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentMonth()\">\n {{ 'intervalPicker.currentPeriod.month' | translate }}\n </button>\n <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentQuarter()\">\n {{ 'intervalPicker.currentPeriod.quarter' | translate }}\n </button>\n <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentYear()\">\n {{ 'intervalPicker.currentPeriod.year' | translate }}\n </button>\n </div>\n <div class=\"fixed-shifts-container\">\n <div class=\"layout-col place-start-stretch\">\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftDay(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.day' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftDay(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.month' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftYear(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.year' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftYear(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n\n @if (true) {\n <!-- shift minute -->\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.minute' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- shift hour -->\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftHour(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.hour' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftHour(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"layout-row place-between-center gap-xxl pt-sm\">\n <div>\n @if (showAnchor()) {\n <div class=\"layout-row flex-none gap-md\">\n <mat-menu #anchorMenu=\"matMenu\">\n @if (presenter.startDateHtmlString()) {\n <button\n type=\"button\"\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToEndDateTime()\"\n [disabled]=\"!presenter.startDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">login</mat-icon>\n <span>{{ 'intervalPicker.endDate' | translate }}</span>\n </button>\n }\n @if (presenter.endDateHtmlString()) {\n <button\n type=\"button\"\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToStartDateTime()\"\n [disabled]=\"!presenter.endDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">logout</mat-icon>\n <span>{{ 'intervalPicker.startDate' | translate }}</span>\n </button>\n }\n @if (presenter.isFixedAnchorDateSet()) {\n <button\n type=\"button\"\n mat-menu-item\n (click)=\"controller.anchor.resetAnchor()\"\n [disabled]=\"!presenter.isFixedAnchorDateSet() || anchorReadOnly()\"\n >\n <mat-icon>close</mat-icon>\n <span>{{ 'intervalPicker.clear' | translate }}</span>\n </button>\n }\n </mat-menu>\n\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"anchorDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.anchorDateHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorDateFromString($event)\"\n [readonly]=\"anchorReadOnly()\"\n />\n @if (!anchorReadOnly()) {\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n [matMenuTriggerFor]=\"anchorMenu\"\n [disabled]=\"presenter.isAnchorMenuDisabled()\"\n >\n <mat-icon class=\"material-symbols-outlined\">more_horiz</mat-icon>\n </button>\n }\n </mat-form-field>\n @if (intervalInputMode() === 'date-time-range') {\n <mat-form-field class=\"input-control-container-short\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorTime' | translate }}</mat-label>\n <input\n matInput\n name=\"anchorTimeInput\"\n type=\"time\"\n #anchorTimeControl=\"ngModel\"\n step=\"1\"\n [readonly]=\"anchorReadOnly()\"\n [ngModel]=\"presenter.anchorTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorTimeFromString($event)\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"controller.anchor.resetAnchorTime()\"\n [disabled]=\"anchorReadOnly() || presenter.isAnchorTimeMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n }\n </div>\n }\n </div>\n <!-- result interval -->\n <div class=\"layout-col place-center-center\">\n <div class=\"date-interval mat-caption pt-xs\">\n @if (presenter.startDateTimeAsJSDate()) {\n {{ presenter.startDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.startDateNotSet' | translate }}\n }\n <span> - </span>\n @if (presenter.endDateTimeAsJSDate()) {\n {{ presenter.endDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.endDateNotSet' | translate }}\n }\n </div>\n <div>\n <span class=\"mat-caption\">{{ presenter.deltaHumanReadable() || '&nbsp;' }}</span>\n </div>\n </div>\n <div class=\"layout-row gap-lg\">\n <button\n type=\"button\"\n mat-flat-button\n color=\"primary\"\n (click)=\"controller.clearInterval()\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n {{ 'intervalPicker.clear' | translate }}\n </button>\n\n @if (!this.autoEmitMode()) {\n <button type=\"button\" color=\"primary\" mat-flat-button (click)=\"controller.manualEmit()\">\n {{ 'actions.ok' | translate }}\n </button>\n }\n </div>\n</div>\n", styles: [".interval-picker-component{min-width:840px;max-width:100%}.fixed-shifts-container{max-width:160px}.input-control-container{width:192px;max-width:100%}.input-control-container-short{width:140px;max-width:100%}.select-buttons-container button{white-space:nowrap;text-align:left;justify-content:flex-start}::ng-deep .interval-picker-component .mat-calendar-body-cell.elder-custom-anchor-date .mat-calendar-body-cell-content{border-radius:50%;background-color:#def;background-color:#b4d2ebbf}\n"], dependencies: [{ kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1$e.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$3.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: MatIconModule }, { kind: "component", type: i1$f.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.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: i5.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "pipe", type: ElderTranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32303
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ElderIntervalPickerComponent, isStandalone: true, selector: "elder-interval-picker", inputs: { emitType: { classPropertyName: "emitType", publicName: "emitType", isSignal: true, isRequired: false, transformFunction: null }, autoEmitMode: { classPropertyName: "autoEmitMode", publicName: "autoEmitMode", isSignal: true, isRequired: false, transformFunction: null }, intervalInputMode: { classPropertyName: "intervalInputMode", publicName: "intervalInputMode", isSignal: true, isRequired: false, transformFunction: null }, showAnchor: { classPropertyName: "showAnchor", publicName: "showAnchor", isSignal: true, isRequired: false, transformFunction: null }, anchorReadOnly: { classPropertyName: "anchorReadOnly", publicName: "anchorReadOnly", isSignal: true, isRequired: false, transformFunction: null }, externalAnchorDateTime: { classPropertyName: "externalAnchorDateTime", publicName: "externalAnchorDateTime", isSignal: true, isRequired: false, transformFunction: null }, externalInterval: { classPropertyName: "externalInterval", publicName: "externalInterval", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intervalChange: "intervalChange" }, providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }], viewQueries: [{ propertyName: "calendarStart", first: true, predicate: ["rangeCalendarStart"], descendants: true }, { propertyName: "calendarEnd", first: true, predicate: ["rangeCalendarEnd"], descendants: true }, { propertyName: "calendarStartElRef", first: true, predicate: ["rangeCalendarStart"], descendants: true, read: ElementRef }, { propertyName: "calendarEndElRef", first: true, predicate: ["rangeCalendarEnd"], descendants: true, read: ElementRef }, { propertyName: "startDateInput", first: true, predicate: ["startDateInput"], descendants: true }, { propertyName: "endDateInput", first: true, predicate: ["endDateInput"], descendants: true }], ngImport: i0, template: "<div class=\"interval-picker-component p-md layout-col gap-xxl\">\n <div class=\"layout-row gap-xxl place-between-start\" style=\"gap: 5%\">\n <div class=\"layout-col gap-md pt-xs\">\n <div class=\"layout-col\">\n <div class=\"layout-row select-buttons-container gap-sm\">\n <div class=\"layout-col gap-xs place-start-stretch\">\n <button mat-button type=\"button\" (click)=\"controller.select.selectCurrentDay()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.anchorDay' | translate }}\n } @else {\n {{ 'intervalPicker.today' | translate }}\n }\n </button>\n <button mat-button type=\"button\" (click)=\"controller.select.selectYesterday()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.last' | translate }} 1 {{ 'intervalPicker.day' | translate }}\n } @else {\n {{ 'intervalPicker.yesterday' | translate }}\n }\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"controller.select.selectLastSevenDaysIncludingToday()\"\n >\n {{ 'intervalPicker.last' | translate }} 7\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"controller.select.selectLastThirtyDaysIncludingToday()\"\n >\n {{ 'intervalPicker.last' | translate }} 30\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"controller.select.selectLast365daysIncludingToday()\"\n >\n {{ 'intervalPicker.last' | translate }} 365\n {{ 'intervalPicker.days' | translate }}\n </button>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"pt-sm\"></div>\n <button mat-button type=\"button\" (click)=\"controller.select.selectLastFiveMinutes()\">\n {{ 'intervalPicker.last' | translate }} 5\n {{ 'intervalPicker.minutes' | translate }}\n </button>\n <button mat-button type=\"button\" (click)=\"controller.select.selectLastHour()\">\n {{ 'intervalPicker.last' | translate }} {{ 'intervalPicker.hour' | translate }}\n </button>\n <button mat-button type=\"button\" (click)=\"controller.select.selectLast24Hours()\">\n {{ 'intervalPicker.last' | translate }} 24\n {{ 'intervalPicker.hours' | translate }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n <div class=\"layout-col\">\n <!-- smart shift -->\n <div class=\"layout-row place-around-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.smartShift(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ presenter.smartShiftMessage() }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.smartShift(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- calendars and input controls -->\n <div\n class=\"layout-row place-around-center\"\n style=\"align-items: flex-start; min-height: 280px\"\n >\n <mat-calendar\n #rangeCalendarStart\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setStartDateFromJSDate($event)\"\n [maxDate]=\"presenter.endDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n <mat-calendar\n #rangeCalendarEnd\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setEndDateFromJSDate($event)\"\n [minDate]=\"presenter.startDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n </div>\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"startDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.startDateHtmlString()\"\n (ngModelChange)=\"controller.form.setStartDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endDate' | translate }}</mat-label>\n <input\n #endDateInput\n name=\"endDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.endDateHtmlString()\"\n (ngModelChange)=\"controller.form.setEndDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n </div>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startTime' | translate }}</mat-label>\n <input\n name=\"startTimeInput\"\n matInput\n type=\"time\"\n #startTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.startTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setStartTimeFromString($event)\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"controller.clearStartTime()\"\n [disabled]=\"!presenter.isStartTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endTime' | translate }}</mat-label>\n <input\n name=\"endTimeInput\"\n matInput\n type=\"time\"\n #endTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.endTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setEndTimeFromString($event)\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"controller.clearEndTime()\"\n [disabled]=\"!presenter.isEndTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n }\n <br />\n </div>\n <div class=\"pt-xs\" style=\"width: 25%\">\n <div class=\"layout-col gap-lg\">\n <div class=\"layout-col gap-xs place-start-start\">\n <!-- select current -->\n <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentWeek()\">\n {{ 'intervalPicker.currentPeriod.week' | translate }}\n </button>\n <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentMonth()\">\n {{ 'intervalPicker.currentPeriod.month' | translate }}\n </button>\n <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentQuarter()\">\n {{ 'intervalPicker.currentPeriod.quarter' | translate }}\n </button>\n <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentYear()\">\n {{ 'intervalPicker.currentPeriod.year' | translate }}\n </button>\n </div>\n <div class=\"fixed-shifts-container\">\n <div class=\"layout-col place-start-stretch\">\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftDay(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.day' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftDay(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.month' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftYear(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.year' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftYear(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n\n @if (true) {\n <!-- shift minute -->\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.minute' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- shift hour -->\n <div class=\"layout-row place-between-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftHour(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.hour' | translate }}</span>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"controller.shift.shiftHour(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"layout-row place-between-center gap-xxl pt-sm\">\n <div>\n @if (showAnchor()) {\n <div class=\"layout-row flex-none gap-md\">\n <mat-menu #anchorMenu=\"matMenu\">\n @if (presenter.startDateHtmlString()) {\n <button\n type=\"button\"\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToEndDateTime()\"\n [disabled]=\"!presenter.startDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">login</mat-icon>\n <span>{{ 'intervalPicker.endDate' | translate }}</span>\n </button>\n }\n @if (presenter.endDateHtmlString()) {\n <button\n type=\"button\"\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToStartDateTime()\"\n [disabled]=\"!presenter.endDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">logout</mat-icon>\n <span>{{ 'intervalPicker.startDate' | translate }}</span>\n </button>\n }\n @if (presenter.isFixedAnchorDateSet()) {\n <button\n type=\"button\"\n mat-menu-item\n (click)=\"controller.anchor.resetAnchor()\"\n [disabled]=\"!presenter.isFixedAnchorDateSet() || anchorReadOnly()\"\n >\n <mat-icon>close</mat-icon>\n <span>{{ 'intervalPicker.clear' | translate }}</span>\n </button>\n }\n </mat-menu>\n\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"anchorDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.anchorDateHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorDateFromString($event)\"\n [readonly]=\"anchorReadOnly()\"\n />\n @if (!anchorReadOnly()) {\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n [matMenuTriggerFor]=\"anchorMenu\"\n [disabled]=\"presenter.isAnchorMenuDisabled()\"\n >\n <mat-icon class=\"material-symbols-outlined\">more_horiz</mat-icon>\n </button>\n }\n </mat-form-field>\n @if (intervalInputMode() === 'date-time-range') {\n <mat-form-field class=\"input-control-container-short\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorTime' | translate }}</mat-label>\n <input\n matInput\n name=\"anchorTimeInput\"\n type=\"time\"\n #anchorTimeControl=\"ngModel\"\n step=\"1\"\n [readonly]=\"anchorReadOnly()\"\n [ngModel]=\"presenter.anchorTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorTimeFromString($event)\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"controller.anchor.resetAnchorTime()\"\n [disabled]=\"anchorReadOnly() || presenter.isAnchorTimeMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n }\n </div>\n }\n </div>\n <!-- result interval -->\n <div class=\"layout-col place-center-center\">\n <div class=\"date-interval mat-caption pt-xs\">\n @if (presenter.startDateTimeAsJSDate()) {\n {{ presenter.startDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.startDateNotSet' | translate }}\n }\n <span> - </span>\n @if (presenter.endDateTimeAsJSDate()) {\n {{ presenter.endDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.endDateNotSet' | translate }}\n }\n </div>\n <div>\n <span class=\"mat-caption\">{{ presenter.deltaHumanReadable() || '&nbsp;' }}</span>\n </div>\n </div>\n <div class=\"layout-row gap-lg\">\n <button\n type=\"button\"\n mat-flat-button\n color=\"primary\"\n (click)=\"controller.clearInterval()\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n {{ 'intervalPicker.clear' | translate }}\n </button>\n\n @if (!this.autoEmitMode()) {\n <button type=\"button\" color=\"primary\" mat-flat-button (click)=\"controller.manualEmit()\">\n {{ 'actions.ok' | translate }}\n </button>\n }\n </div>\n</div>\n", styles: [".interval-picker-component{min-width:840px;max-width:100%}.fixed-shifts-container{max-width:160px}.input-control-container{width:192px;max-width:100%}.input-control-container-short{width:140px;max-width:100%}.select-buttons-container button{white-space:nowrap;text-align:left;justify-content:flex-start}::ng-deep .interval-picker-component .mat-calendar-body-cell.elder-custom-anchor-date .mat-calendar-body-cell-content{border-radius:50%;background-color:#def;background-color:#b4d2ebbf}\n"], dependencies: [{ kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1$d.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$3.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: MatIconModule }, { kind: "component", type: i1$e.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.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: i5.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "pipe", type: ElderTranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32281
32304
  }
32282
32305
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderIntervalPickerComponent, decorators: [{
32283
32306
  type: Component,
@@ -32619,7 +32642,7 @@ class ElderOverlayComponent {
32619
32642
  const searchPanelPortal = new TemplatePortal(this.templateRef, this.viewContainer);
32620
32643
  return this._overlayRef.attach(searchPanelPortal);
32621
32644
  }
32622
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderOverlayComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1$c.Overlay }, { token: i1$c.OverlayPositionBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
32645
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderOverlayComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1$b.Overlay }, { token: i1$b.OverlayPositionBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
32623
32646
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: ElderOverlayComponent, isStandalone: true, selector: "elder-overlay", inputs: { originX: "originX", originY: "originY", overlayX: "overlayX", overlayY: "overlayY", offsetY: "offsetY", offsetX: "offsetX", backdrop: "backdrop", backdropVisible: "backdropVisible", origin: "origin", positionStrategy: "positionStrategy", overlaySize: "overlaySize" }, outputs: { keydownEvents: "keydownEvents", attachedChange: "attachedChange" }, providers: [
32624
32647
  {
32625
32648
  provide: ElderOverlayRef,
@@ -32641,7 +32664,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
32641
32664
  deps: [ElderOverlayComponent],
32642
32665
  },
32643
32666
  ], template: "<ng-template>\n <ng-content></ng-content>\n</ng-template>\n" }]
32644
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1$c.Overlay }, { type: i1$c.OverlayPositionBuilder }], propDecorators: { templateRef: [{
32667
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1$b.Overlay }, { type: i1$b.OverlayPositionBuilder }], propDecorators: { templateRef: [{
32645
32668
  type: ViewChild,
32646
32669
  args: [TemplateRef, { static: true }]
32647
32670
  }], originX: [{
@@ -33780,7 +33803,7 @@ class ElderSearchBoxComponent {
33780
33803
  this.searchContextDirective.reset();
33781
33804
  }
33782
33805
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderSearchBoxComponent, deps: [{ token: ElderSearchContextDirective }], target: i0.ɵɵFactoryTarget.Component }); }
33783
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ElderSearchBoxComponent, isStandalone: true, selector: "elder-search-box", inputs: { autoPanel: "autoPanel", name: "name", queryKey: "queryKey", placeholder: "placeholder", label: "label", hint: "hint", autocomplete: "autocomplete", appearance: "appearance", dense: "dense" }, host: { classAttribute: "elder-form-field-host" }, queries: [{ propertyName: "customSearchPanel", first: true, predicate: ElderSearchPanelComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true, isSignal: true }, { propertyName: "overlayComponent", first: true, predicate: ElderOverlayComponent, descendants: true, isSignal: true }], exportAs: ["elderSearchBox"], ngImport: i0, template: "<div class=\"layout-row place-stretch-center full flex\">\n <mat-form-field\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto my-xs\"\n [class]=\"'elder-round-form-field'\"\n subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\"\n >\n <button\n matPrefix\n mat-icon-button\n type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\"\n (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input\n matInput\n type=\"text\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n #search\n cdkFocusInitial\n ngModel\n elderSearchInput\n [elderSearchInputKey]=\"queryKey\"\n #searchInput=\"elderSearchInput\"\n [autocomplete]=\"autoPanel && customSearchPanel() ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"\n autoPanel && customSearchPanel() && (searchInput?.state$ | async)?.pristine\n \"\n />\n\n @if (hint) {\n <mat-hint>{{ hint }}</mat-hint>\n }\n\n <div class=\"layout-row\" matSuffix>\n @if (touchedSearchInputs$ | async; as touchedInputs) {\n @if (touchedInputs.length > 0) {\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"clearSearch($event)\"\n name=\"clear\"\n aria-label=\"Clear\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n @if (customSearchPanel()) {\n <button\n mat-icon-button\n type=\"button\"\n name=\"openPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n (click)=\"blurFocus($event)\"\n >\n <mat-icon\n [matBadge]=\"touchedInputs.length\"\n matBadgeSize=\"small\"\n [matBadgeOverlap]=\"true\"\n [matBadgeHidden]=\"touchedInputs.length === 0\"\n matBadgeColor=\"accent\"\n [color]=\"touchedInputs.length > 0 ? 'accent' : undefined\"\n aria-hidden=\"false\"\n >\n filter_list\n </mat-icon>\n </button>\n }\n }\n </div>\n </mat-form-field>\n</div>\n\n<!-- Overlay Panel for advanced search -->\n<elder-overlay #searchPanel=\"elderOverlay\">\n <elder-dialog-panel class=\"elder-search-panel-container\">\n <!-- Project the users custom search panel here -->\n <ng-content select=\"elder-search-panel\"></ng-content>\n\n <div class=\"layout-row place-between-center\">\n <button mat-button type=\"button\" name=\"clear\" (click)=\"clearSearch($event)\">\n {{ 'context.reset' | translate }}\n </button>\n\n <button\n mat-flat-button\n type=\"button\"\n name=\"ok\"\n color=\"primary\"\n (click)=\"searchPanel.closeOverlay()\"\n >\n Ok\n </button>\n </div>\n </elder-dialog-panel>\n</elder-overlay>\n", styles: [".elder-search-panel-container{min-width:250px;border-radius:var(--elder-pane-border-radius)}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: ElderFormFieldDenseDirective, selector: "mat-form-field[elderDense]", inputs: ["elderDense", "subscriptSizing", "floatLabel"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: ElderOverlayTriggerDirective, selector: "[elderOverlayTrigger]", inputs: ["elderOverlayTrigger", "elderOverlayTriggerType", "elderOverlayTriggerEnabled"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ElderSearchInputDirective, selector: "[elderSearchInput]", inputs: ["elderSearchInputTransform", "elderSearchInput", "elderSearchInputFallback", "valueAsId", "elderSearchInputKey"], exportAs: ["elderSearchInput"] }, { kind: "directive", type: ElderOverlayOriginDirective, selector: "[elderOverlayOrigin]", inputs: ["elderOverlayOrigin"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: ElderOverlayComponent, selector: "elder-overlay", inputs: ["originX", "originY", "overlayX", "overlayY", "offsetY", "offsetX", "backdrop", "backdropVisible", "origin", "positionStrategy", "overlaySize"], outputs: ["keydownEvents", "attachedChange"], exportAs: ["elderOverlay"] }, { kind: "component", type: ElderDialogPanelComponent, selector: "elder-dialog-panel" }, { 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: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ElderTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33806
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ElderSearchBoxComponent, isStandalone: true, selector: "elder-search-box", inputs: { autoPanel: "autoPanel", name: "name", queryKey: "queryKey", placeholder: "placeholder", label: "label", hint: "hint", autocomplete: "autocomplete", appearance: "appearance", dense: "dense" }, host: { classAttribute: "elder-form-field-host" }, queries: [{ propertyName: "customSearchPanel", first: true, predicate: ElderSearchPanelComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true, isSignal: true }, { propertyName: "overlayComponent", first: true, predicate: ElderOverlayComponent, descendants: true, isSignal: true }], exportAs: ["elderSearchBox"], ngImport: i0, template: "<div class=\"layout-row place-stretch-center full flex\">\n <mat-form-field\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto my-xs\"\n [class]=\"'elder-round-form-field'\"\n subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\"\n >\n <button\n matPrefix\n mat-icon-button\n type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\"\n (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input\n matInput\n type=\"text\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n #search\n cdkFocusInitial\n ngModel\n elderSearchInput\n [elderSearchInputKey]=\"queryKey\"\n #searchInput=\"elderSearchInput\"\n [autocomplete]=\"autoPanel && customSearchPanel() ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"\n autoPanel && customSearchPanel() && (searchInput?.state$ | async)?.pristine\n \"\n />\n\n @if (hint) {\n <mat-hint>{{ hint }}</mat-hint>\n }\n\n <div class=\"layout-row\" matSuffix>\n @if (touchedSearchInputs$ | async; as touchedInputs) {\n @if (touchedInputs.length > 0) {\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"clearSearch($event)\"\n name=\"clear\"\n aria-label=\"Clear\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n @if (customSearchPanel()) {\n <button\n mat-icon-button\n type=\"button\"\n name=\"openPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n (click)=\"blurFocus($event)\"\n data-testid=\"elder-search-box-open-search-panel-button\"\n >\n <mat-icon\n [matBadge]=\"touchedInputs.length\"\n matBadgeSize=\"small\"\n [matBadgeOverlap]=\"true\"\n [matBadgeHidden]=\"touchedInputs.length === 0\"\n matBadgeColor=\"accent\"\n [color]=\"touchedInputs.length > 0 ? 'accent' : undefined\"\n aria-hidden=\"false\"\n >\n filter_list\n </mat-icon>\n </button>\n }\n }\n </div>\n </mat-form-field>\n</div>\n\n<!-- Overlay Panel for advanced search -->\n<elder-overlay #searchPanel=\"elderOverlay\">\n <elder-dialog-panel class=\"elder-search-panel-container\">\n <!-- Project the users custom search panel here -->\n <ng-content select=\"elder-search-panel\"></ng-content>\n\n <div class=\"layout-row place-between-center\">\n <button mat-button type=\"button\" name=\"clear\" (click)=\"clearSearch($event)\">\n {{ 'context.reset' | translate }}\n </button>\n\n <button\n mat-flat-button\n type=\"button\"\n name=\"ok\"\n color=\"primary\"\n (click)=\"searchPanel.closeOverlay()\"\n >\n Ok\n </button>\n </div>\n </elder-dialog-panel>\n</elder-overlay>\n", styles: [".elder-search-panel-container{min-width:250px;border-radius:var(--elder-pane-border-radius)}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: ElderFormFieldDenseDirective, selector: "mat-form-field[elderDense]", inputs: ["elderDense", "subscriptSizing", "floatLabel"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: ElderOverlayTriggerDirective, selector: "[elderOverlayTrigger]", inputs: ["elderOverlayTrigger", "elderOverlayTriggerType", "elderOverlayTriggerEnabled"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ElderSearchInputDirective, selector: "[elderSearchInput]", inputs: ["elderSearchInputTransform", "elderSearchInput", "elderSearchInputFallback", "valueAsId", "elderSearchInputKey"], exportAs: ["elderSearchInput"] }, { kind: "directive", type: ElderOverlayOriginDirective, selector: "[elderOverlayOrigin]", inputs: ["elderOverlayOrigin"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: ElderOverlayComponent, selector: "elder-overlay", inputs: ["originX", "originY", "overlayX", "overlayY", "offsetY", "offsetX", "backdrop", "backdropVisible", "origin", "positionStrategy", "overlaySize"], outputs: ["keydownEvents", "attachedChange"], exportAs: ["elderOverlay"] }, { kind: "component", type: ElderDialogPanelComponent, selector: "elder-dialog-panel" }, { 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: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ElderTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33784
33807
  }
33785
33808
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderSearchBoxComponent, decorators: [{
33786
33809
  type: Component,
@@ -33803,7 +33826,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33803
33826
  MatButton,
33804
33827
  AsyncPipe,
33805
33828
  ElderTranslatePipe,
33806
- ], template: "<div class=\"layout-row place-stretch-center full flex\">\n <mat-form-field\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto my-xs\"\n [class]=\"'elder-round-form-field'\"\n subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\"\n >\n <button\n matPrefix\n mat-icon-button\n type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\"\n (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input\n matInput\n type=\"text\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n #search\n cdkFocusInitial\n ngModel\n elderSearchInput\n [elderSearchInputKey]=\"queryKey\"\n #searchInput=\"elderSearchInput\"\n [autocomplete]=\"autoPanel && customSearchPanel() ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"\n autoPanel && customSearchPanel() && (searchInput?.state$ | async)?.pristine\n \"\n />\n\n @if (hint) {\n <mat-hint>{{ hint }}</mat-hint>\n }\n\n <div class=\"layout-row\" matSuffix>\n @if (touchedSearchInputs$ | async; as touchedInputs) {\n @if (touchedInputs.length > 0) {\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"clearSearch($event)\"\n name=\"clear\"\n aria-label=\"Clear\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n @if (customSearchPanel()) {\n <button\n mat-icon-button\n type=\"button\"\n name=\"openPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n (click)=\"blurFocus($event)\"\n >\n <mat-icon\n [matBadge]=\"touchedInputs.length\"\n matBadgeSize=\"small\"\n [matBadgeOverlap]=\"true\"\n [matBadgeHidden]=\"touchedInputs.length === 0\"\n matBadgeColor=\"accent\"\n [color]=\"touchedInputs.length > 0 ? 'accent' : undefined\"\n aria-hidden=\"false\"\n >\n filter_list\n </mat-icon>\n </button>\n }\n }\n </div>\n </mat-form-field>\n</div>\n\n<!-- Overlay Panel for advanced search -->\n<elder-overlay #searchPanel=\"elderOverlay\">\n <elder-dialog-panel class=\"elder-search-panel-container\">\n <!-- Project the users custom search panel here -->\n <ng-content select=\"elder-search-panel\"></ng-content>\n\n <div class=\"layout-row place-between-center\">\n <button mat-button type=\"button\" name=\"clear\" (click)=\"clearSearch($event)\">\n {{ 'context.reset' | translate }}\n </button>\n\n <button\n mat-flat-button\n type=\"button\"\n name=\"ok\"\n color=\"primary\"\n (click)=\"searchPanel.closeOverlay()\"\n >\n Ok\n </button>\n </div>\n </elder-dialog-panel>\n</elder-overlay>\n", styles: [".elder-search-panel-container{min-width:250px;border-radius:var(--elder-pane-border-radius)}\n"] }]
33829
+ ], template: "<div class=\"layout-row place-stretch-center full flex\">\n <mat-form-field\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto my-xs\"\n [class]=\"'elder-round-form-field'\"\n subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\"\n >\n <button\n matPrefix\n mat-icon-button\n type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\"\n (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input\n matInput\n type=\"text\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n #search\n cdkFocusInitial\n ngModel\n elderSearchInput\n [elderSearchInputKey]=\"queryKey\"\n #searchInput=\"elderSearchInput\"\n [autocomplete]=\"autoPanel && customSearchPanel() ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"\n autoPanel && customSearchPanel() && (searchInput?.state$ | async)?.pristine\n \"\n />\n\n @if (hint) {\n <mat-hint>{{ hint }}</mat-hint>\n }\n\n <div class=\"layout-row\" matSuffix>\n @if (touchedSearchInputs$ | async; as touchedInputs) {\n @if (touchedInputs.length > 0) {\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"clearSearch($event)\"\n name=\"clear\"\n aria-label=\"Clear\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n @if (customSearchPanel()) {\n <button\n mat-icon-button\n type=\"button\"\n name=\"openPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n (click)=\"blurFocus($event)\"\n data-testid=\"elder-search-box-open-search-panel-button\"\n >\n <mat-icon\n [matBadge]=\"touchedInputs.length\"\n matBadgeSize=\"small\"\n [matBadgeOverlap]=\"true\"\n [matBadgeHidden]=\"touchedInputs.length === 0\"\n matBadgeColor=\"accent\"\n [color]=\"touchedInputs.length > 0 ? 'accent' : undefined\"\n aria-hidden=\"false\"\n >\n filter_list\n </mat-icon>\n </button>\n }\n }\n </div>\n </mat-form-field>\n</div>\n\n<!-- Overlay Panel for advanced search -->\n<elder-overlay #searchPanel=\"elderOverlay\">\n <elder-dialog-panel class=\"elder-search-panel-container\">\n <!-- Project the users custom search panel here -->\n <ng-content select=\"elder-search-panel\"></ng-content>\n\n <div class=\"layout-row place-between-center\">\n <button mat-button type=\"button\" name=\"clear\" (click)=\"clearSearch($event)\">\n {{ 'context.reset' | translate }}\n </button>\n\n <button\n mat-flat-button\n type=\"button\"\n name=\"ok\"\n color=\"primary\"\n (click)=\"searchPanel.closeOverlay()\"\n >\n Ok\n </button>\n </div>\n </elder-dialog-panel>\n</elder-overlay>\n", styles: [".elder-search-panel-container{min-width:250px;border-radius:var(--elder-pane-border-radius)}\n"] }]
33807
33830
  }], ctorParameters: () => [{ type: ElderSearchContextDirective }], propDecorators: { search: [{ type: i0.ViewChild, args: ['search', { isSignal: true }] }], overlayComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => ElderOverlayComponent), { isSignal: true }] }], customSearchPanel: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ElderSearchPanelComponent), { isSignal: true }] }], autoPanel: [{
33808
33831
  type: Input
33809
33832
  }], name: [{
@@ -35245,7 +35268,7 @@ class ElderPopoverComponent {
35245
35268
  this._isOpen.set(false);
35246
35269
  }
35247
35270
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35248
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: ElderPopoverComponent, isStandalone: true, selector: "elder-popover", inputs: { positions: { classPropertyName: "positions", publicName: "positions", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["elderPopover"], ngImport: i0, template: "<div\n class=\"elder-popover-trigger\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (mouseenter)=\"open()\"\n (mouseleave)=\"close()\"\n (click)=\"handleTriggerClick()\"\n>\n <ng-content select=\"[elderPopoverTrigger]\"></ng-content>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPanelClass]=\"'elder-popover-overlay-panel'\"\n [cdkConnectedOverlayPositions]=\"positions()\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n>\n <div class=\"elder-popover-content\" (mouseenter)=\"open()\" (mouseleave)=\"close()\">\n <ng-content></ng-content>\n </div>\n</ng-template>\n", styles: [".elder-popover-content{--elder-popover-content-bg: var(--md-sys-color-surface-container-low);--elder-popover-padding: 30px;padding:var(--elder-popover-padding);border-radius:8px;border:1px solid var(--md-sys-color-surface-container);background-color:var(--elder-popover-content-bg);box-shadow:0 2px 5px #00000026}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$c.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$c.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35271
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: ElderPopoverComponent, isStandalone: true, selector: "elder-popover", inputs: { positions: { classPropertyName: "positions", publicName: "positions", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["elderPopover"], ngImport: i0, template: "<div\n class=\"elder-popover-trigger\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (mouseenter)=\"open()\"\n (mouseleave)=\"close()\"\n (click)=\"handleTriggerClick()\"\n>\n <ng-content select=\"[elderPopoverTrigger]\"></ng-content>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPanelClass]=\"'elder-popover-overlay-panel'\"\n [cdkConnectedOverlayPositions]=\"positions()\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n>\n <div class=\"elder-popover-content\" (mouseenter)=\"open()\" (mouseleave)=\"close()\">\n <ng-content></ng-content>\n </div>\n</ng-template>\n", styles: [".elder-popover-content{--elder-popover-content-bg: var(--md-sys-color-surface-container-low);--elder-popover-padding: 30px;padding:var(--elder-popover-padding);border-radius:8px;border:1px solid var(--md-sys-color-surface-container);background-color:var(--elder-popover-content-bg);box-shadow:0 2px 5px #00000026}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$b.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$b.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35249
35272
  }
35250
35273
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderPopoverComponent, decorators: [{
35251
35274
  type: Component,
@@ -37750,7 +37773,7 @@ class ElderTabDirective {
37750
37773
  constructor(tab) {
37751
37774
  this.tab = tab;
37752
37775
  }
37753
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTabDirective, deps: [{ token: i1$g.MatTab }], target: i0.ɵɵFactoryTarget.Directive }); }
37776
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTabDirective, deps: [{ token: i1$f.MatTab }], target: i0.ɵɵFactoryTarget.Directive }); }
37754
37777
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: ElderTabDirective, isStandalone: true, selector: "[elderTab]", inputs: { id: ["elderTab", "id"] }, ngImport: i0 }); }
37755
37778
  }
37756
37779
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTabDirective, decorators: [{
@@ -37758,7 +37781,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
37758
37781
  args: [{
37759
37782
  selector: '[elderTab]',
37760
37783
  }]
37761
- }], ctorParameters: () => [{ type: i1$g.MatTab }], propDecorators: { id: [{
37784
+ }], ctorParameters: () => [{ type: i1$f.MatTab }], propDecorators: { id: [{
37762
37785
  type: Input,
37763
37786
  args: ['elderTab']
37764
37787
  }] } });
@@ -38026,7 +38049,7 @@ class ElderTabGroupRoutingDirective {
38026
38049
  serializeIndexMarker(index) {
38027
38050
  return ElderTabGroupRoutingDirective.TAB_INDEX_PREFIX + String(index);
38028
38051
  }
38029
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTabGroupRoutingDirective, deps: [{ token: ElderUrlFragmentParamsService }, { token: i1$g.MatTabGroup }], target: i0.ɵɵFactoryTarget.Directive }); }
38052
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTabGroupRoutingDirective, deps: [{ token: ElderUrlFragmentParamsService }, { token: i1$f.MatTabGroup }], target: i0.ɵɵFactoryTarget.Directive }); }
38030
38053
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.9", type: ElderTabGroupRoutingDirective, isStandalone: true, selector: "[elderTabGroupRouting]", inputs: { tabGroupQueryParamKey: { classPropertyName: "tabGroupQueryParamKey", publicName: "elderTabGroupRouting", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tabActivationFailed: "tabActivationFailed" }, queries: [{ propertyName: "tabs", predicate: MatTab, isSignal: true }, { propertyName: "elderTabs", predicate: ElderTabDirective, isSignal: true }], exportAs: ["elderTabGroupRouting"], ngImport: i0 }); }
38031
38054
  }
38032
38055
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTabGroupRoutingDirective, decorators: [{
@@ -38035,7 +38058,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
38035
38058
  selector: '[elderTabGroupRouting]',
38036
38059
  exportAs: 'elderTabGroupRouting',
38037
38060
  }]
38038
- }], ctorParameters: () => [{ type: ElderUrlFragmentParamsService }, { type: i1$g.MatTabGroup }], propDecorators: { tabGroupQueryParamKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "elderTabGroupRouting", required: false }] }], tabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => MatTab), { isSignal: true }] }], elderTabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ElderTabDirective), { isSignal: true }] }], tabActivationFailed: [{ type: i0.Output, args: ["tabActivationFailed"] }] } });
38061
+ }], ctorParameters: () => [{ type: ElderUrlFragmentParamsService }, { type: i1$f.MatTabGroup }], propDecorators: { tabGroupQueryParamKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "elderTabGroupRouting", required: false }] }], tabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => MatTab), { isSignal: true }] }], elderTabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ElderTabDirective), { isSignal: true }] }], tabActivationFailed: [{ type: i0.Output, args: ["tabActivationFailed"] }] } });
38039
38062
 
38040
38063
  class ElderTabModule {
38041
38064
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ElderTabModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -38537,7 +38560,7 @@ class NamedColorDirective {
38537
38560
  return undefined;
38538
38561
  }
38539
38562
  }
38540
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NamedColorDirective, deps: [{ token: i1$f.MatIcon, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
38563
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NamedColorDirective, deps: [{ token: i1$e.MatIcon, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
38541
38564
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NamedColorDirective, isStandalone: true, selector: "[elderNamedColor]", inputs: { namedColor: { classPropertyName: "namedColor", publicName: "elderNamedColor", isSignal: true, isRequired: true, transformFunction: null }, backgroundRole: { classPropertyName: "backgroundRole", publicName: "backgroundRole", isSignal: true, isRequired: false, transformFunction: null }, frontRole: { classPropertyName: "frontRole", publicName: "frontRole", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backgroundRole: "backgroundRoleChange", frontRole: "frontRoleChange" }, host: { properties: { "style.color": "hostColor()", "style.background-color": "hostBackgroundColor()" } }, ngImport: i0 }); }
38542
38565
  }
38543
38566
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NamedColorDirective, decorators: [{
@@ -38549,7 +38572,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
38549
38572
  '[style.background-color]': 'hostBackgroundColor()',
38550
38573
  },
38551
38574
  }]
38552
- }], ctorParameters: () => [{ type: i1$f.MatIcon, decorators: [{
38575
+ }], ctorParameters: () => [{ type: i1$e.MatIcon, decorators: [{
38553
38576
  type: Optional
38554
38577
  }] }], propDecorators: { namedColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "elderNamedColor", required: true }] }], backgroundRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "backgroundRole", required: false }] }, { type: i0.Output, args: ["backgroundRoleChange"] }], frontRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "frontRole", required: false }] }, { type: i0.Output, args: ["frontRoleChange"] }] } });
38555
38578