@elderbyte/ngx-starter 19.5.0 → 19.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/fesm2022/elderbyte-ngx-starter.mjs +816 -29
  2. package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
  3. package/lib/common/data/datasource/data-source.d.ts +2 -0
  4. package/lib/common/data/datasource/local/local-list-data-source.d.ts +1 -1
  5. package/lib/common/data/sort-context.d.ts +1 -0
  6. package/lib/components/data-view/common/drag-and-drop/data-view-dnd-controller.service.d.ts +70 -0
  7. package/lib/components/data-view/common/drag-and-drop/elder-data-view-dnd.directive.d.ts +66 -0
  8. package/lib/components/data-view/common/drag-and-drop/elder-data-view-item-drag.directive.d.ts +38 -0
  9. package/lib/components/data-view/common/drag-and-drop/events/data-view-drag-entered-event.d.ts +16 -0
  10. package/lib/components/data-view/common/drag-and-drop/events/data-view-drag-exited-event.d.ts +12 -0
  11. package/lib/components/data-view/common/drag-and-drop/events/data-view-item-drop-event.d.ts +74 -0
  12. package/lib/components/data-view/common/drag-and-drop/events/public_api.d.ts +3 -0
  13. package/lib/components/data-view/common/drag-and-drop/grouping/data-view-dnd-group-controller.service.d.ts +42 -0
  14. package/lib/components/data-view/common/drag-and-drop/grouping/elder-data-view-dnd-group.directive.d.ts +30 -0
  15. package/lib/components/data-view/common/drag-and-drop/grouping/public_api.d.ts +2 -0
  16. package/lib/components/data-view/common/drag-and-drop/local-data/data-view-dnd-model-util.d.ts +40 -0
  17. package/lib/components/data-view/common/drag-and-drop/local-data/elder-local-dnd-support.directive.d.ts +54 -0
  18. package/lib/components/data-view/common/drag-and-drop/local-data/public_api.d.ts +2 -0
  19. package/lib/components/data-view/common/drag-and-drop/public_api.d.ts +7 -0
  20. package/lib/components/data-view/common/elder-data-common.module.d.ts +14 -9
  21. package/lib/components/data-view/common/public_api.d.ts +1 -0
  22. package/lib/components/data-view/table/drag-and-drop/elder-table-drop-list-connector.directive.d.ts +37 -0
  23. package/lib/components/data-view/table/drag-and-drop/public_api.d.ts +1 -0
  24. package/lib/components/data-view/table/elder-table/elder-table.component.d.ts +5 -1
  25. package/lib/components/data-view/table/elder-table.module.d.ts +26 -23
  26. package/package.json +1 -1
  27. package/theming/components/_elder-table-theme.scss +24 -0
@@ -1,17 +1,17 @@
1
1
  import * as i2 from '@angular/common';
2
2
  import { formatDate, CommonModule, formatCurrency, getCurrencySymbol, NgIf, AsyncPipe, NgFor, NgClass, NgTemplateOutlet, NgStyle, formatNumber, DecimalPipe, DatePipe, registerLocaleData, CurrencyPipe } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Pipe, LOCALE_ID, Inject, NgModule, Optional, SkipSelf, Input, Output, Directive, forwardRef, ViewChild, inject, ElementRef, DestroyRef, model, signal, computed, untracked, HostBinding, ViewChildren, ContentChild, Injectable, ChangeDetectionStrategy, Component, Host, APP_INITIALIZER, TemplateRef, HostListener, EventEmitter, input, ViewEncapsulation, InjectionToken, output, effect, ContentChildren, viewChild, viewChildren, booleanAttribute, contentChild, contentChildren } from '@angular/core';
4
+ import { Pipe, LOCALE_ID, Inject, NgModule, Optional, SkipSelf, Input, Output, Directive, forwardRef, ViewChild, inject, ElementRef, DestroyRef, model, signal, computed, untracked, HostBinding, ViewChildren, ContentChild, Injectable, ChangeDetectionStrategy, Component, Host, APP_INITIALIZER, TemplateRef, HostListener, EventEmitter, input, ViewEncapsulation, InjectionToken, output, effect, ContentChildren, contentChildren, viewChild, viewChildren, booleanAttribute, contentChild } from '@angular/core';
5
5
  import * as i1 from '@angular/platform-browser';
6
6
  import { Duration, Period, TemporalQueries, LocalTime, Instant, LocalDate, nativeJs, ZoneId, DateTimeFormatter, convert, ZonedDateTime, Temporal as Temporal$1 } from '@js-joda/core';
7
7
  import { LoggerFactory } from '@elderbyte/ts-logger';
8
- import { timer, defer, ReplaySubject, concat, finalize, exhaustMap, BehaviorSubject, Subject, switchMap, of, combineLatest, EMPTY, merge, throwError, forkJoin, mergeWith, Observable, from, toArray, zip, mergeMap as mergeMap$1, fromEvent, skipUntil, map as map$1, combineLatestWith as combineLatestWith$1, NEVER } from 'rxjs';
8
+ import { timer, defer, ReplaySubject, concat, finalize, exhaustMap, BehaviorSubject, Subject, switchMap, of, combineLatest, EMPTY, merge, throwError, forkJoin, mergeWith, Observable, from, toArray, zip, mergeMap as mergeMap$1, fromEvent, mergeAll, skipUntil, map as map$1, combineLatestWith as combineLatestWith$1, NEVER } from 'rxjs';
9
9
  import { tap, takeUntil, takeWhile, map, filter, distinctUntilChanged, debounceTime, catchError, first, take, switchMap as switchMap$1, mergeMap, expand, reduce, startWith, skip, delay, share, combineLatestWith, skipWhile, timeout } from 'rxjs/operators';
10
10
  import { Temporal } from '@js-temporal/polyfill';
11
11
  import * as i1$1 from '@angular/common/http';
12
12
  import { HttpParams, HttpEventType, HttpRequest, HttpClient, HttpErrorResponse, HTTP_INTERCEPTORS } from '@angular/common/http';
13
13
  import { DataSource } from '@angular/cdk/collections';
14
- import { outputToObservable, takeUntilDestroyed, toSignal, toObservable } from '@angular/core/rxjs-interop';
14
+ import { outputToObservable, takeUntilDestroyed, toSignal, toObservable, outputFromObservable } from '@angular/core/rxjs-interop';
15
15
  import * as i1$4 from '@angular/forms';
16
16
  import { ControlContainer, NG_VALUE_ACCESSOR, NG_VALIDATORS, NgControl, NgModel, FormsModule, UntypedFormControl, ReactiveFormsModule, NgForm, Validators } from '@angular/forms';
17
17
  import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
@@ -38,19 +38,20 @@ import * as i1$a from '@angular/material/autocomplete';
38
38
  import { MatAutocompleteTrigger, MatAutocomplete, MatAutocompleteModule } from '@angular/material/autocomplete';
39
39
  import * as i1$8 from '@angular/material/chips';
40
40
  import { MatChipGrid, MatChipRow, MatChipRemove, MatChipInput, MatChipsModule, MatChip, MatChipAvatar, MatChipSet, MatChipTrailingIcon, MatChipListbox, MatChipOption } from '@angular/material/chips';
41
- import * as i2$4 from '@angular/material/input';
41
+ import * as i2$5 from '@angular/material/input';
42
42
  import { MatInput, MatInputModule } from '@angular/material/input';
43
43
  import { MatList, MatListSubheaderCssMatStyler, MatListItem, MatListModule } from '@angular/material/list';
44
44
  import { MatProgressBar, MatProgressBarModule } from '@angular/material/progress-bar';
45
45
  import * as i1$6 from '@angular/material/snack-bar';
46
46
  import { MAT_SNACK_BAR_DATA, MatSnackBarLabel, MatSnackBarActions, MatSnackBarAction, MatSnackBarModule } from '@angular/material/snack-bar';
47
- import { transferArrayItem, moveItemInArray, CdkDropList, CdkDrag, DragDropModule } from '@angular/cdk/drag-drop';
47
+ import * as i2$2 from '@angular/cdk/drag-drop';
48
+ import { transferArrayItem, moveItemInArray, CdkDropList, CdkDrag, DragDropModule, CdkDropListGroup } from '@angular/cdk/drag-drop';
48
49
  import { MatDivider, MatDividerModule } from '@angular/material/divider';
49
50
  import * as i8 from '@angular/material/menu';
50
51
  import { MatMenuTrigger, MatMenu, MatMenuItem, MatMenuModule } from '@angular/material/menu';
51
52
  import * as i1$7 from '@angular/material/dialog';
52
53
  import { MatDialogClose, MAT_DIALOG_DATA, MatDialogConfig, MatDialogModule } from '@angular/material/dialog';
53
- import * as i2$2 from '@angular/material/badge';
54
+ import * as i2$3 from '@angular/material/badge';
54
55
  import { MatBadge, MatBadgeModule } from '@angular/material/badge';
55
56
  import * as i1$c from '@angular/material/checkbox';
56
57
  import { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox';
@@ -60,7 +61,7 @@ import { MatPaginator, MatPaginatorIntl, MatPaginatorModule } from '@angular/mat
60
61
  import { MatColumnDef, MatRowDef, MatTable, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatCell, MatFooterCellDef, MatFooterCell, MatHeaderRowDef, MatHeaderRow, MatRow, MatFooterRowDef, MatFooterRow, MatTableModule } from '@angular/material/table';
61
62
  import * as i1$9 from '@angular/cdk/table';
62
63
  import { CdkTableModule } from '@angular/cdk/table';
63
- import * as i2$3 from '@angular/material/sort';
64
+ import * as i2$4 from '@angular/material/sort';
64
65
  import { MatSortModule, MatSort, MatSortHeader } from '@angular/material/sort';
65
66
  import { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf, ScrollingModule } from '@angular/cdk/scrolling';
66
67
  import * as i3 from '@angular/cdk/layout';
@@ -3762,6 +3763,9 @@ class SortContext {
3762
3763
  findSort(prop) {
3763
3764
  return this.sortsSnapshot.filter((f) => f.prop === prop).find((first) => true);
3764
3765
  }
3766
+ isEmpty() {
3767
+ return !this._sorts.getValue() || this._sorts.getValue().length === 0;
3768
+ }
3765
3769
  /***************************************************************************
3766
3770
  * *
3767
3771
  * Public API *
@@ -5359,13 +5363,18 @@ class LocalListDataSource extends DataSourceBase {
5359
5363
  saveAll(toSave) {
5360
5364
  toSave.forEach((entity) => this.save(entity));
5361
5365
  }
5362
- save(entity) {
5366
+ save(entity, index) {
5363
5367
  const id = this.getId(entity);
5364
5368
  const newData = [...this.data];
5365
5369
  const existingIndex = newData.findIndex((entity) => this.getId(entity) === id);
5366
5370
  let created = false;
5367
5371
  if (existingIndex === -1) {
5368
- newData.push(entity);
5372
+ if (index !== null) {
5373
+ newData.splice(index, 0, entity);
5374
+ }
5375
+ else {
5376
+ newData.push(entity);
5377
+ }
5369
5378
  created = true;
5370
5379
  }
5371
5380
  else {
@@ -5488,6 +5497,12 @@ function isDataSource(object) {
5488
5497
  function isListDataSource(object) {
5489
5498
  return object.findAllFiltered !== undefined;
5490
5499
  }
5500
+ function isLocalListDataSource(object) {
5501
+ return isListDataSource(object) &&
5502
+ object.delete !== undefined &&
5503
+ object.save !== undefined &&
5504
+ object.replaceAll !== undefined;
5505
+ }
5491
5506
  function isPagedDataSource(object) {
5492
5507
  return object.findAllPaged !== undefined;
5493
5508
  }
@@ -14683,6 +14698,695 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
14683
14698
  args: [ELDER_DATA_VIEW]
14684
14699
  }] }, { type: ActivationModel }] });
14685
14700
 
14701
+ class DataViewDragEnteredEvent {
14702
+ constructor(
14703
+ /** Data context into which the user has moved the item. */
14704
+ context,
14705
+ /** Item that was moved into the container. */
14706
+ item,
14707
+ /** Index at which the item has entered the container. */
14708
+ currentIndex) {
14709
+ this.context = context;
14710
+ this.item = item;
14711
+ this.currentIndex = currentIndex;
14712
+ }
14713
+ }
14714
+
14715
+ class DataViewDragExitedEvent {
14716
+ constructor(
14717
+ /** Data context from which the user has a removed an item. */
14718
+ context,
14719
+ /** Item that was removed from the container. */
14720
+ item) {
14721
+ this.context = context;
14722
+ this.item = item;
14723
+ }
14724
+ }
14725
+
14726
+ class DataViewItemDropEvent {
14727
+ /***************************************************************************
14728
+ * *
14729
+ * Constructor *
14730
+ * *
14731
+ **************************************************************************/
14732
+ constructor(
14733
+ /**
14734
+ * fromStack The stack where the card originated from
14735
+ */
14736
+ fromContext,
14737
+ /**
14738
+ * toStack The stack where the card is dropped to
14739
+ */
14740
+ toContext,
14741
+ /**
14742
+ * card The row-item domain model
14743
+ */
14744
+ item,
14745
+ /**
14746
+ * fromIndex Index of the item when it was picked up fromContext.
14747
+ */
14748
+ fromIndex,
14749
+ /**
14750
+ * toIndex Current index of the item in toContext.
14751
+ */
14752
+ toIndex,
14753
+ /**
14754
+ * isPointerOverContainer Whether the user's pointer was over the container when the item was dropped.
14755
+ */
14756
+ isPointerOverContainer) {
14757
+ this.fromContext = fromContext;
14758
+ this.toContext = toContext;
14759
+ this.item = item;
14760
+ this.fromIndex = fromIndex;
14761
+ this.toIndex = toIndex;
14762
+ this.isPointerOverContainer = isPointerOverContainer;
14763
+ }
14764
+ /***************************************************************************
14765
+ * *
14766
+ * Public API *
14767
+ * *
14768
+ **************************************************************************/
14769
+ /**
14770
+ * Returns true if the drop happened across drop contexts.
14771
+ */
14772
+ isCrossContextDrop() {
14773
+ return this.fromContext !== this.toContext;
14774
+ }
14775
+ /**
14776
+ * Returns true if the drop happened at the exact same position as the drag started
14777
+ */
14778
+ isSamePositionDrop() {
14779
+ return this.fromContext === this.toContext && this.fromIndex === this.toIndex;
14780
+ }
14781
+ /**
14782
+ * Returns message string stating the drag. Useful for logging.
14783
+ */
14784
+ getDragLogMessage() {
14785
+ if (this.isSamePositionDrop()) {
14786
+ return ('Item was dragged from context ' +
14787
+ this.fromContext.id +
14788
+ ' at index ' +
14789
+ this.fromIndex +
14790
+ ' but dropped at the same position.');
14791
+ }
14792
+ else if (this.isCrossContextDrop()) {
14793
+ return ('Item was dragged from context ' +
14794
+ this.fromContext.id +
14795
+ ' at index ' +
14796
+ this.fromIndex +
14797
+ ' to context ' +
14798
+ this.toContext.id +
14799
+ ' at index ' +
14800
+ this.toIndex);
14801
+ }
14802
+ else {
14803
+ return ('Item was dragged within context ' +
14804
+ this.fromContext.id +
14805
+ ' from index ' +
14806
+ this.fromIndex +
14807
+ ' to index ' +
14808
+ this.toIndex);
14809
+ }
14810
+ }
14811
+ }
14812
+
14813
+ /**
14814
+ * Controller service for a single data view with drag and drop support
14815
+ * (ElderDataViewDndDirective).
14816
+ */
14817
+ class DataViewDndControllerService {
14818
+ /***************************************************************************
14819
+ * *
14820
+ * Constructor *
14821
+ * *
14822
+ **************************************************************************/
14823
+ constructor() {
14824
+ /***************************************************************************
14825
+ * *
14826
+ * Fields *
14827
+ * *
14828
+ **************************************************************************/
14829
+ this.log = LoggerFactory.getLogger(this.constructor.name);
14830
+ this._dropList$ = new BehaviorSubject(null);
14831
+ this._dataView$ = new BehaviorSubject(null);
14832
+ this._canDragItemPredicate$ = new BehaviorSubject(null);
14833
+ this._ignoreSamePositionDrops$ = new BehaviorSubject(false);
14834
+ this.itemDropped$ = new Subject();
14835
+ this.dropListEntered$ = new Subject();
14836
+ this.dropListExited$ = new Subject();
14837
+ }
14838
+ /***************************************************************************
14839
+ * *
14840
+ * Properties *
14841
+ * *
14842
+ **************************************************************************/
14843
+ get dropList$() {
14844
+ return this._dropList$.pipe(filter((dropList) => !!dropList));
14845
+ }
14846
+ get canDragItemPredicate$() {
14847
+ return this._canDragItemPredicate$.asObservable();
14848
+ }
14849
+ /***************************************************************************
14850
+ * *
14851
+ * Public API *
14852
+ * *
14853
+ **************************************************************************/
14854
+ registerDataView(dataView) {
14855
+ if (dataView === null) {
14856
+ throw new Error('dataView must not be null!');
14857
+ }
14858
+ this._dataView$.next(dataView);
14859
+ }
14860
+ register(cdkDropList) {
14861
+ if (cdkDropList === null) {
14862
+ throw new Error('cdkDropList must not be null!');
14863
+ }
14864
+ this._dropList$.next(cdkDropList);
14865
+ }
14866
+ setCanDragItemPredicate(predicate) {
14867
+ this._canDragItemPredicate$.next(predicate);
14868
+ }
14869
+ setIgnoreSamePositionDrops(ignoreSamePositionDrops) {
14870
+ this._ignoreSamePositionDrops$.next(ignoreSamePositionDrops);
14871
+ }
14872
+ /***************************************************************************
14873
+ * *
14874
+ * Event Handling *
14875
+ * *
14876
+ **************************************************************************/
14877
+ onItemDropped(event) {
14878
+ this.handleItemDropped(event);
14879
+ }
14880
+ onDropListEntered(event) {
14881
+ this.handleDropListEntered(event);
14882
+ }
14883
+ onDropListExited(event) {
14884
+ this.handleDropListExited(event);
14885
+ }
14886
+ /***************************************************************************
14887
+ * *
14888
+ * Private Methods *
14889
+ * *
14890
+ **************************************************************************/
14891
+ handleItemDropped(cdkEvent) {
14892
+ const event = this.buildItemDropEvent(cdkEvent);
14893
+ if (event.isSamePositionDrop() && this._ignoreSamePositionDrops$.getValue()) {
14894
+ return;
14895
+ }
14896
+ this.itemDropped$.next(event);
14897
+ }
14898
+ buildItemDropEvent(cdkEvent) {
14899
+ return new DataViewItemDropEvent(cdkEvent.previousContainer.data, cdkEvent.container.data, cdkEvent.item.data, cdkEvent.previousIndex, cdkEvent.currentIndex, cdkEvent.isPointerOverContainer);
14900
+ }
14901
+ handleDropListEntered(cdkEvent) {
14902
+ this.dropListEntered$.next(this.buildDragEnteredEvent(cdkEvent));
14903
+ }
14904
+ buildDragEnteredEvent(cdkEvent) {
14905
+ return new DataViewDragEnteredEvent(cdkEvent.container.data, cdkEvent.item.data, cdkEvent.currentIndex);
14906
+ }
14907
+ handleDropListExited(cdkEvent) {
14908
+ this.dropListExited$.next(this.buildDragExitedEvent(cdkEvent));
14909
+ }
14910
+ buildDragExitedEvent(cdkEvent) {
14911
+ return new DataViewDragExitedEvent(cdkEvent.container.data, cdkEvent.item.data);
14912
+ }
14913
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: DataViewDndControllerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14914
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: DataViewDndControllerService }); }
14915
+ }
14916
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: DataViewDndControllerService, decorators: [{
14917
+ type: Injectable
14918
+ }], ctorParameters: () => [] });
14919
+
14920
+ /**
14921
+ * Directive adding drag and drop support on an Elder data view.
14922
+ */
14923
+ class ElderDataViewDndDirective {
14924
+ /***************************************************************************
14925
+ * *
14926
+ * Constructor *
14927
+ * *
14928
+ **************************************************************************/
14929
+ constructor(dndController, _dataView) {
14930
+ this.dndController = dndController;
14931
+ this._dataView = _dataView;
14932
+ /***************************************************************************
14933
+ * *
14934
+ * Fields *
14935
+ * *
14936
+ **************************************************************************/
14937
+ this.log = LoggerFactory.getLogger(this.constructor.name);
14938
+ /** Used to disconnect obsolete event bindings. */
14939
+ this._unsubscribeEventBindings = new Subject();
14940
+ /** Controls if drag and drop is generally enabled or not. */
14941
+ this.canDrag = input(false, { transform: booleanTransformFn });
14942
+ /** Allows connecting different drop views together. */
14943
+ this.dropConnectedTo = input([]);
14944
+ /** Predicate to determine if an item is draggable or not. */
14945
+ this.canDragItemPredicate = input(() => true);
14946
+ /** Predicate to determine if one can enter a drop view. */
14947
+ this.canEnterPredicate = input(() => true);
14948
+ /** If ture, will ignore drop events where the item was dropped at the same position from where it was dragged. */
14949
+ this.ignoreSamePositionDrops = input(false, { transform: booleanTransformFn });
14950
+ /** Fired when an item is dropped. */
14951
+ this.itemDropped = outputFromObservable(this.dndController.itemDropped$);
14952
+ /** Fired when a drop view is entered while dragging. */
14953
+ this.dropListEntered = outputFromObservable(this.dndController.dropListEntered$);
14954
+ /** Fired when a drop view is exited while dragging. */
14955
+ this.dropListExited = outputFromObservable(this.dndController.dropListExited$);
14956
+ this.dndController.registerDataView(_dataView);
14957
+ this._dataContext = toSignal(this._dataView.dataContext$);
14958
+ this._dropList = toSignal(this.dndController.dropList$);
14959
+ effect(() => {
14960
+ this.bindEvents(this._dropList());
14961
+ });
14962
+ effect(() => {
14963
+ this.bindCanDrag(this._dropList(), this.canDrag());
14964
+ });
14965
+ effect(() => {
14966
+ this.bindConnectedTo(this._dropList(), this.dropConnectedTo());
14967
+ });
14968
+ effect(() => {
14969
+ this.bindCanEnterPredicate(this._dropList(), this.canEnterPredicate());
14970
+ });
14971
+ effect(() => {
14972
+ this.bindData(this._dropList(), this._dataContext());
14973
+ });
14974
+ effect(() => {
14975
+ this.controller.setCanDragItemPredicate(this.canDragItemPredicate());
14976
+ });
14977
+ effect(() => {
14978
+ this.controller.setIgnoreSamePositionDrops(this.ignoreSamePositionDrops());
14979
+ });
14980
+ }
14981
+ /***************************************************************************
14982
+ * *
14983
+ * Properties *
14984
+ * *
14985
+ **************************************************************************/
14986
+ get controller() {
14987
+ return this.dndController;
14988
+ }
14989
+ /***************************************************************************
14990
+ * *
14991
+ * Private Methods *
14992
+ * *
14993
+ **************************************************************************/
14994
+ bindEvents(dropList) {
14995
+ this._unsubscribeEventBindings.next();
14996
+ if (dropList) {
14997
+ dropList.dropped
14998
+ .pipe(takeUntil(this._unsubscribeEventBindings))
14999
+ .subscribe((event) => this.dndController.onItemDropped(event));
15000
+ dropList.entered
15001
+ .pipe(takeUntil(this._unsubscribeEventBindings))
15002
+ .subscribe((event) => this.dndController.onDropListEntered(event));
15003
+ dropList.exited
15004
+ .pipe(takeUntil(this._unsubscribeEventBindings))
15005
+ .subscribe((event) => this.dndController.onDropListExited(event));
15006
+ }
15007
+ }
15008
+ bindCanDrag(dropList, canDrag) {
15009
+ if (dropList) {
15010
+ dropList.disabled = !canDrag;
15011
+ }
15012
+ }
15013
+ bindConnectedTo(dropList, connectedTo) {
15014
+ if (dropList) {
15015
+ dropList.connectedTo = connectedTo;
15016
+ }
15017
+ }
15018
+ bindCanEnterPredicate(dropList, canEnterPredicate) {
15019
+ if (dropList && canEnterPredicate) {
15020
+ dropList.enterPredicate = this.dropEnterPredicate(canEnterPredicate);
15021
+ }
15022
+ }
15023
+ dropEnterPredicate(predicate) {
15024
+ return (drag, drop) => {
15025
+ if (predicate) {
15026
+ return predicate(drag.data, drop.data);
15027
+ }
15028
+ return true;
15029
+ };
15030
+ }
15031
+ bindData(cdkDropList, dataContext) {
15032
+ if (cdkDropList && dataContext) {
15033
+ cdkDropList.data = dataContext;
15034
+ }
15035
+ }
15036
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderDataViewDndDirective, deps: [{ token: DataViewDndControllerService }, { token: ELDER_DATA_VIEW }], target: i0.ɵɵFactoryTarget.Directive }); }
15037
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.4", type: ElderDataViewDndDirective, isStandalone: true, selector: "[elderDataViewDnd]", inputs: { canDrag: { classPropertyName: "canDrag", publicName: "canDrag", isSignal: true, isRequired: false, transformFunction: null }, dropConnectedTo: { classPropertyName: "dropConnectedTo", publicName: "dropConnectedTo", isSignal: true, isRequired: false, transformFunction: null }, canDragItemPredicate: { classPropertyName: "canDragItemPredicate", publicName: "canDragItemPredicate", isSignal: true, isRequired: false, transformFunction: null }, canEnterPredicate: { classPropertyName: "canEnterPredicate", publicName: "canEnterPredicate", isSignal: true, isRequired: false, transformFunction: null }, ignoreSamePositionDrops: { classPropertyName: "ignoreSamePositionDrops", publicName: "ignoreSamePositionDrops", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemDropped: "itemDropped", dropListEntered: "dropListEntered", dropListExited: "dropListExited" }, providers: [DataViewDndControllerService], ngImport: i0 }); }
15038
+ }
15039
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderDataViewDndDirective, decorators: [{
15040
+ type: Directive,
15041
+ args: [{
15042
+ selector: '[elderDataViewDnd]',
15043
+ providers: [DataViewDndControllerService],
15044
+ }]
15045
+ }], ctorParameters: () => [{ type: DataViewDndControllerService }, { type: undefined, decorators: [{
15046
+ type: Inject,
15047
+ args: [ELDER_DATA_VIEW]
15048
+ }] }] });
15049
+
15050
+ /**
15051
+ * Controller service for a single DataViewDndGroup.
15052
+ */
15053
+ class DataViewDndGroupControllerService {
15054
+ /***************************************************************************
15055
+ * *
15056
+ * Constructor *
15057
+ * *
15058
+ **************************************************************************/
15059
+ constructor() {
15060
+ /***************************************************************************
15061
+ * *
15062
+ * Fields *
15063
+ * *
15064
+ **************************************************************************/
15065
+ this.log = LoggerFactory.getLogger(this.constructor.name);
15066
+ this._dropViews$ = new BehaviorSubject([]);
15067
+ /**
15068
+ * Subject emitting each time an item is dropped on any drop view of this group.
15069
+ */
15070
+ this.itemDropped$ = new Subject();
15071
+ this._dropViews$
15072
+ .pipe(takeUntilDestroyed(),
15073
+ // merge all itemDropEvent streams from each child into one main itemDropEvent stream
15074
+ mergeMap$1((views) => this.getItemDropObservables(views)), mergeAll())
15075
+ .subscribe((event) => this.handleItemDrop(event));
15076
+ }
15077
+ /***************************************************************************
15078
+ * *
15079
+ * Public API *
15080
+ * *
15081
+ **************************************************************************/
15082
+ setDropViews(dropViews) {
15083
+ this._dropViews$.next(dropViews);
15084
+ }
15085
+ /***************************************************************************
15086
+ * *
15087
+ * Private Methods *
15088
+ * *
15089
+ **************************************************************************/
15090
+ getItemDropObservables(views) {
15091
+ return views.map((v) => this.getItemDropObservable(v));
15092
+ }
15093
+ getItemDropObservable(dropView) {
15094
+ return dropView.controller.itemDropped$.asObservable();
15095
+ }
15096
+ handleItemDrop(dropEvent) {
15097
+ this.itemDropped$.next(dropEvent);
15098
+ }
15099
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: DataViewDndGroupControllerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
15100
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: DataViewDndGroupControllerService }); }
15101
+ }
15102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: DataViewDndGroupControllerService, decorators: [{
15103
+ type: Injectable
15104
+ }], ctorParameters: () => [] });
15105
+
15106
+ /**
15107
+ * Directive to group multiple drop data view together.
15108
+ * Placing this directive to any element will automatically connect
15109
+ * all ElderDataViewDndDirective elements beneath it.
15110
+ */
15111
+ class ElderDataViewDndGroupDirective {
15112
+ /***************************************************************************
15113
+ * *
15114
+ * Constructor *
15115
+ * *
15116
+ **************************************************************************/
15117
+ constructor(groupController) {
15118
+ this.groupController = groupController;
15119
+ /***************************************************************************
15120
+ * *
15121
+ * Fields *
15122
+ * *
15123
+ **************************************************************************/
15124
+ this.log = LoggerFactory.getLogger(this.constructor.name);
15125
+ this.dropViews = contentChildren((ElderDataViewDndDirective), { descendants: true });
15126
+ this.itemDropped = outputFromObservable(this.groupController.itemDropped$);
15127
+ effect(() => {
15128
+ this.groupController.setDropViews(this.dropViews());
15129
+ });
15130
+ }
15131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderDataViewDndGroupDirective, deps: [{ token: DataViewDndGroupControllerService }], target: i0.ɵɵFactoryTarget.Directive }); }
15132
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.2.4", type: ElderDataViewDndGroupDirective, isStandalone: true, selector: "[elderDataViewDndGroup]", outputs: { itemDropped: "itemDropped" }, providers: [DataViewDndGroupControllerService], queries: [{ propertyName: "dropViews", predicate: (ElderDataViewDndDirective), descendants: true, isSignal: true }], hostDirectives: [{ directive: i2$2.CdkDropListGroup }], ngImport: i0 }); }
15133
+ }
15134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderDataViewDndGroupDirective, decorators: [{
15135
+ type: Directive,
15136
+ args: [{
15137
+ selector: '[elderDataViewDndGroup]',
15138
+ hostDirectives: [CdkDropListGroup], // auto-connects all contained cdkDropLists
15139
+ providers: [DataViewDndGroupControllerService],
15140
+ }]
15141
+ }], ctorParameters: () => [{ type: DataViewDndGroupControllerService }] });
15142
+
15143
+ /**
15144
+ * Support util for updating data view models
15145
+ * according to drop events.
15146
+ */
15147
+ class DataViewDndModelUtil {
15148
+ /***************************************************************************
15149
+ * *
15150
+ * Fields *
15151
+ * *
15152
+ **************************************************************************/
15153
+ static { this.log = LoggerFactory.getLogger('DataViewDndModelUtil'); }
15154
+ /***************************************************************************
15155
+ * *
15156
+ * Public API *
15157
+ * *
15158
+ **************************************************************************/
15159
+ static updateModel(itemDropEvent) {
15160
+ if (!this.supportsModelUpdate(itemDropEvent)) {
15161
+ throw Error('Cannot handle item drop, since either source or target data source is not a local list');
15162
+ }
15163
+ const instructions = ViewDropModelUpdateInstruction.of(itemDropEvent);
15164
+ if (itemDropEvent.isCrossContextDrop()) {
15165
+ // Dragged from one context to another
15166
+ this.moveItemAcrossContexts(instructions);
15167
+ }
15168
+ else {
15169
+ // Dragged and dropped inside the same context
15170
+ this.moveItemWithinContext(instructions);
15171
+ }
15172
+ }
15173
+ static supportsModelUpdate(itemDropEvent) {
15174
+ return (isLocalListDataSource(itemDropEvent.fromContext.dataSource) ||
15175
+ isLocalListDataSource(itemDropEvent.toContext.dataSource));
15176
+ }
15177
+ static moveItemAcrossContexts(instructions) {
15178
+ transferArrayItem(instructions.fromDataSource.data, instructions.toDataSource.data, instructions.fromIndex, instructions.toIndex);
15179
+ instructions.fromContext.refresh();
15180
+ instructions.toContext.refresh();
15181
+ }
15182
+ static moveItemWithinContext(instructions) {
15183
+ moveItemInArray(instructions.fromDataSource.data, instructions.fromIndex, instructions.toIndex);
15184
+ instructions.fromContext.refresh();
15185
+ }
15186
+ }
15187
+ class ViewDropModelUpdateInstruction {
15188
+ static of(dropEvent) {
15189
+ return new ViewDropModelUpdateInstruction(dropEvent.item, dropEvent.fromContext, dropEvent.toContext, dropEvent.fromIndex, dropEvent.toIndex);
15190
+ }
15191
+ constructor(item, fromContext, toContext, fromIndex, toIndex) {
15192
+ this.item = item;
15193
+ this.fromContext = fromContext;
15194
+ this.toContext = toContext;
15195
+ this.fromIndex = fromIndex;
15196
+ this.toIndex = toIndex;
15197
+ }
15198
+ /***************************************************************************
15199
+ * *
15200
+ * Properties *
15201
+ * *
15202
+ **************************************************************************/
15203
+ get fromDataSource() {
15204
+ return this.fromContext.dataSource;
15205
+ }
15206
+ get toDataSource() {
15207
+ return this.toContext.dataSource;
15208
+ }
15209
+ }
15210
+
15211
+ /**
15212
+ * Adds support for automatic model updates
15213
+ * according to occurring drag and drop on data views.
15214
+ */
15215
+ class ElderLocalDndSupportDirective {
15216
+ /***************************************************************************
15217
+ * *
15218
+ * Constructor *
15219
+ * *
15220
+ **************************************************************************/
15221
+ constructor(dropView, dropGroup, dropViewController, dropGroupController, _dataView) {
15222
+ this.dropView = dropView;
15223
+ this.dropGroup = dropGroup;
15224
+ this.dropViewController = dropViewController;
15225
+ this.dropGroupController = dropGroupController;
15226
+ this._dataView = _dataView;
15227
+ /***************************************************************************
15228
+ * *
15229
+ * Fields *
15230
+ * *
15231
+ **************************************************************************/
15232
+ this.log = LoggerFactory.getLogger(this.constructor.name);
15233
+ if (dropView) {
15234
+ this.initSingleDropViewModelTracking();
15235
+ }
15236
+ else if (dropGroup) {
15237
+ this.initDropGroupModelTracking();
15238
+ }
15239
+ else {
15240
+ throw Error('Directive must be placed next to ElderDataViewDndDirective or DataViewDropGroupDirective');
15241
+ }
15242
+ }
15243
+ /***************************************************************************
15244
+ * *
15245
+ * Single Drop View Mode *
15246
+ * *
15247
+ **************************************************************************/
15248
+ initSingleDropViewModelTracking() {
15249
+ this._dataView.dataContext$.pipe(takeUntilDestroyed()).subscribe((dataContext) => {
15250
+ this.dataContext = dataContext;
15251
+ if (dataContext && !isLocalListDataSource(dataContext.dataSource)) {
15252
+ throw new Error('Cannot initialize single drop view model tracking. Unsupported dataSource.');
15253
+ }
15254
+ this.dataSource = dataContext?.dataSource;
15255
+ });
15256
+ this.dropViewController.itemDropped$
15257
+ .pipe(takeUntilDestroyed())
15258
+ .subscribe((event) => this.handleItemDrop(event));
15259
+ }
15260
+ handleItemDrop(itemDropEvent) {
15261
+ if (!this.dataContext || !this.dataSource) {
15262
+ this.log.error('Cannot handle itemDropEvent since either dataContext or dataSource is null.');
15263
+ return;
15264
+ }
15265
+ if (this.isSortDefined()) {
15266
+ this.log.error('Cannot handle itemDropEvent since dataContext has an active sort definition:', this.dataContext.sort);
15267
+ return;
15268
+ }
15269
+ this.updateModel(itemDropEvent);
15270
+ }
15271
+ isSortDefined() {
15272
+ return !this.dataContext?.sort.isEmpty();
15273
+ }
15274
+ /***************************************************************************
15275
+ * *
15276
+ * Drop Group Mode *
15277
+ * *
15278
+ **************************************************************************/
15279
+ initDropGroupModelTracking() {
15280
+ this.dropGroupController.itemDropped$
15281
+ .pipe(takeUntilDestroyed())
15282
+ .subscribe((event) => this.handleGroupDrop(event));
15283
+ }
15284
+ handleGroupDrop(itemDropEvent) {
15285
+ this.updateModel(itemDropEvent);
15286
+ }
15287
+ /***************************************************************************
15288
+ * *
15289
+ * Private Methods *
15290
+ * *
15291
+ **************************************************************************/
15292
+ updateModel(itemDropEvent) {
15293
+ DataViewDndModelUtil.updateModel(itemDropEvent);
15294
+ }
15295
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderLocalDndSupportDirective, deps: [{ token: ElderDataViewDndDirective, optional: true }, { token: ElderDataViewDndGroupDirective, optional: true }, { token: DataViewDndControllerService, optional: true }, { token: DataViewDndGroupControllerService, optional: true }, { token: ELDER_DATA_VIEW, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
15296
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.4", type: ElderLocalDndSupportDirective, isStandalone: true, selector: "[elderLocalDndSupport]", ngImport: i0 }); }
15297
+ }
15298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderLocalDndSupportDirective, decorators: [{
15299
+ type: Directive,
15300
+ args: [{
15301
+ selector: '[elderLocalDndSupport]',
15302
+ }]
15303
+ }], ctorParameters: () => [{ type: ElderDataViewDndDirective, decorators: [{
15304
+ type: Optional
15305
+ }] }, { type: ElderDataViewDndGroupDirective, decorators: [{
15306
+ type: Optional
15307
+ }] }, { type: DataViewDndControllerService, decorators: [{
15308
+ type: Optional
15309
+ }] }, { type: DataViewDndGroupControllerService, decorators: [{
15310
+ type: Optional
15311
+ }] }, { type: undefined, decorators: [{
15312
+ type: Optional
15313
+ }, {
15314
+ type: Inject,
15315
+ args: [ELDER_DATA_VIEW]
15316
+ }] }] });
15317
+
15318
+ /**
15319
+ * Adds drag and drop support for items of elder data view.
15320
+ */
15321
+ class ElderDataViewItemDragDirective {
15322
+ /***************************************************************************
15323
+ * *
15324
+ * Constructor *
15325
+ * *
15326
+ **************************************************************************/
15327
+ constructor(dndController, cdkDrag) {
15328
+ this.dndController = dndController;
15329
+ this.cdkDrag = cdkDrag;
15330
+ /***************************************************************************
15331
+ * *
15332
+ * Fields *
15333
+ * *
15334
+ **************************************************************************/
15335
+ /** The item that is being dragged. */
15336
+ this.item = input.required({ alias: 'elderElderDataViewItemDrag' });
15337
+ /** Controls if the item can be dragged or not.
15338
+ * We explicitly initialize with null and don't use booleanTransformFn since we need to know if the
15339
+ * user defined this or if we should fall back to a superior predicate fn.
15340
+ * */
15341
+ this.canDragItem = input(null); // this is on purpose
15342
+ const canDragItemPredicate = this.dndController ?
15343
+ toSignal(dndController.canDragItemPredicate$)
15344
+ : signal(null);
15345
+ effect(() => {
15346
+ this.bindCanDragItem(this.cdkDrag, this.canDragItem(), canDragItemPredicate());
15347
+ });
15348
+ effect(() => {
15349
+ this.bindData(this.cdkDrag, this.item());
15350
+ });
15351
+ }
15352
+ /***************************************************************************
15353
+ * *
15354
+ * Private Methods *
15355
+ * *
15356
+ **************************************************************************/
15357
+ bindCanDragItem(cdkDrag, canDragItem, canDragItemPredicate) {
15358
+ if (cdkDrag) {
15359
+ let canDrag;
15360
+ if (canDragItem !== null) {
15361
+ canDrag = canDragItem;
15362
+ }
15363
+ else if (canDragItemPredicate !== null) {
15364
+ canDrag = canDragItemPredicate(untracked(this.item)); // we only want to read the signal here
15365
+ }
15366
+ else {
15367
+ canDrag = true; // positive fall back since drag prevention is opt-in
15368
+ }
15369
+ cdkDrag.disabled = !canDrag;
15370
+ }
15371
+ }
15372
+ bindData(cdkDrag, item) {
15373
+ if (cdkDrag) {
15374
+ cdkDrag.data = item;
15375
+ }
15376
+ }
15377
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderDataViewItemDragDirective, deps: [{ token: DataViewDndControllerService, optional: true }, { token: i2$2.CdkDrag }], target: i0.ɵɵFactoryTarget.Directive }); }
15378
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.4", type: ElderDataViewItemDragDirective, isStandalone: true, selector: "[elderElderDataViewItemDrag]", inputs: { item: { classPropertyName: "item", publicName: "elderElderDataViewItemDrag", isSignal: true, isRequired: true, transformFunction: null }, canDragItem: { classPropertyName: "canDragItem", publicName: "canDragItem", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: i2$2.CdkDrag }], ngImport: i0 }); }
15379
+ }
15380
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderDataViewItemDragDirective, decorators: [{
15381
+ type: Directive,
15382
+ args: [{
15383
+ selector: '[elderElderDataViewItemDrag]',
15384
+ hostDirectives: [CdkDrag] // adds cdkDrag to host
15385
+ }]
15386
+ }], ctorParameters: () => [{ type: DataViewDndControllerService, decorators: [{
15387
+ type: Optional
15388
+ }] }, { type: i2$2.CdkDrag }] });
15389
+
14686
15390
  class ElderChipLabelDirective {
14687
15391
  /***************************************************************************
14688
15392
  * *
@@ -15090,7 +15794,7 @@ class ElderBadgeDirective {
15090
15794
  createElderBadgeComponent() {
15091
15795
  return this.viewContainerRef.createComponent(ElderBadgeComponent);
15092
15796
  }
15093
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderBadgeDirective, deps: [{ token: i1.DomSanitizer }, { token: i0.ViewContainerRef }, { token: i2$2.MatBadge }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive }); }
15797
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderBadgeDirective, deps: [{ token: i1.DomSanitizer }, { token: i0.ViewContainerRef }, { token: i2$3.MatBadge }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive }); }
15094
15798
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.4", type: ElderBadgeDirective, isStandalone: true, selector: "[elderBadge]", inputs: { badgeColor: "badgeColor", badgeIcon: "badgeIcon", elderBadge: "elderBadge", colorSpec: "colorSpec", avatarSpec: "avatarSpec" }, host: { properties: { "style": "this.style" } }, ngImport: i0 }); }
15095
15799
  }
15096
15800
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderBadgeDirective, decorators: [{
@@ -15099,7 +15803,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
15099
15803
  selector: '[elderBadge]',
15100
15804
  standalone: true,
15101
15805
  }]
15102
- }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i0.ViewContainerRef }, { type: i2$2.MatBadge }, { type: i0.DestroyRef }], propDecorators: { style: [{
15806
+ }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i0.ViewContainerRef }, { type: i2$3.MatBadge }, { type: i0.DestroyRef }], propDecorators: { style: [{
15103
15807
  type: HostBinding,
15104
15808
  args: ['style']
15105
15809
  }], badgeColor: [{
@@ -15214,6 +15918,7 @@ class ElderDataCommonModule {
15214
15918
  MatTooltipModule,
15215
15919
  // translations
15216
15920
  TranslateModule,
15921
+ DragDropModule,
15217
15922
  ElderBadgeModule,
15218
15923
  ElderDataToolbarComponent,
15219
15924
  ElderToolbarContentDirective,
@@ -15222,14 +15927,22 @@ class ElderDataCommonModule {
15222
15927
  ElderCompositeSortDcDirective,
15223
15928
  ElderSelectionMasterCheckboxComponent,
15224
15929
  DataContextSelectionDirective,
15225
- DataContextStateIndicatorComponent], exports: [ElderDataToolbarComponent,
15930
+ DataContextStateIndicatorComponent,
15931
+ ElderDataViewDndDirective,
15932
+ ElderDataViewItemDragDirective,
15933
+ ElderLocalDndSupportDirective,
15934
+ ElderDataViewDndGroupDirective], exports: [ElderDataToolbarComponent,
15226
15935
  ElderToolbarContentDirective,
15227
15936
  ElderSingleSortComponent,
15228
15937
  ElderCompositeSortComponent,
15229
15938
  ElderCompositeSortDcDirective,
15230
15939
  ElderSelectionMasterCheckboxComponent,
15231
15940
  DataContextSelectionDirective,
15232
- DataContextStateIndicatorComponent] }); }
15941
+ DataContextStateIndicatorComponent,
15942
+ ElderDataViewDndDirective,
15943
+ ElderDataViewItemDragDirective,
15944
+ ElderLocalDndSupportDirective,
15945
+ ElderDataViewDndGroupDirective] }); }
15233
15946
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderDataCommonModule, imports: [CommonModule,
15234
15947
  RouterModule,
15235
15948
  // Material
@@ -15244,6 +15957,7 @@ class ElderDataCommonModule {
15244
15957
  MatTooltipModule,
15245
15958
  // translations
15246
15959
  TranslateModule,
15960
+ DragDropModule,
15247
15961
  ElderBadgeModule,
15248
15962
  ElderDataToolbarComponent,
15249
15963
  ElderSingleSortComponent,
@@ -15269,6 +15983,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
15269
15983
  MatTooltipModule,
15270
15984
  // translations
15271
15985
  TranslateModule,
15986
+ DragDropModule,
15272
15987
  ElderBadgeModule,
15273
15988
  ElderDataToolbarComponent,
15274
15989
  ElderToolbarContentDirective,
@@ -15278,6 +15993,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
15278
15993
  ElderSelectionMasterCheckboxComponent,
15279
15994
  DataContextSelectionDirective,
15280
15995
  DataContextStateIndicatorComponent,
15996
+ ElderDataViewDndDirective,
15997
+ ElderDataViewItemDragDirective,
15998
+ ElderLocalDndSupportDirective,
15999
+ ElderDataViewDndGroupDirective,
15281
16000
  ],
15282
16001
  exports: [
15283
16002
  ElderDataToolbarComponent,
@@ -15288,6 +16007,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
15288
16007
  ElderSelectionMasterCheckboxComponent,
15289
16008
  DataContextSelectionDirective,
15290
16009
  DataContextStateIndicatorComponent,
16010
+ ElderDataViewDndDirective,
16011
+ ElderDataViewItemDragDirective,
16012
+ ElderLocalDndSupportDirective,
16013
+ ElderDataViewDndGroupDirective,
15291
16014
  ],
15292
16015
  }]
15293
16016
  }] });
@@ -15307,7 +16030,7 @@ class ElderContinuatorComponent {
15307
16030
  this.chunkSizeChange = output();
15308
16031
  }
15309
16032
  onChunkSizeChange(newSize) {
15310
- if (newSize !== untracked(this.chunkSize)) {
16033
+ if (newSize && newSize !== untracked(this.chunkSize)) {
15311
16034
  this.chunkSizeChange.emit(newSize);
15312
16035
  }
15313
16036
  }
@@ -16178,6 +16901,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
16178
16901
  type: Input
16179
16902
  }] } });
16180
16903
 
16904
+ /**
16905
+ * Directive which defines its host table as a CdkDropList and connects
16906
+ * it with the drag and drop controller service of the parent data view.
16907
+ *
16908
+ * This is needed since our elder-table wraps the mat-table.
16909
+ * If we someday switch to a more composition-based approach we might not need this anymore.
16910
+ */
16911
+ class ElderTableDropListConnectorDirective {
16912
+ /***************************************************************************
16913
+ * *
16914
+ * Constructor *
16915
+ * *
16916
+ **************************************************************************/
16917
+ constructor(dndController, elderTable, cdkDropList) {
16918
+ this.dndController = dndController;
16919
+ this.elderTable = elderTable;
16920
+ this.cdkDropList = cdkDropList;
16921
+ /***************************************************************************
16922
+ * *
16923
+ * Fields *
16924
+ * *
16925
+ **************************************************************************/
16926
+ this.log = LoggerFactory.getLogger(this.constructor.name);
16927
+ // we want drag and drop to be opt-in, so disable by default.
16928
+ this.disableDrag(cdkDropList);
16929
+ cdkDropList.id = elderTable.id();
16930
+ if (this.dndController) {
16931
+ this.dndController.register(cdkDropList);
16932
+ }
16933
+ }
16934
+ /***************************************************************************
16935
+ * *
16936
+ * Private Methods *
16937
+ * *
16938
+ **************************************************************************/
16939
+ disableDrag(cdkDropList) {
16940
+ cdkDropList.disabled = true;
16941
+ }
16942
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderTableDropListConnectorDirective, deps: [{ token: DataViewDndControllerService, optional: true }, { token: ElderTableComponent }, { token: i2$2.CdkDropList }], target: i0.ɵɵFactoryTarget.Directive }); }
16943
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.4", type: ElderTableDropListConnectorDirective, isStandalone: true, selector: "[elderTableDropListConnector]", hostDirectives: [{ directive: i2$2.CdkDropList }], ngImport: i0 }); }
16944
+ }
16945
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderTableDropListConnectorDirective, decorators: [{
16946
+ type: Directive,
16947
+ args: [{
16948
+ selector: '[elderTableDropListConnector]',
16949
+ hostDirectives: [CdkDropList], // adds ckdDropList to host
16950
+ }]
16951
+ }], ctorParameters: () => [{ type: DataViewDndControllerService, decorators: [{
16952
+ type: Optional
16953
+ }] }, { type: ElderTableComponent }, { type: i2$2.CdkDropList }] });
16954
+
16181
16955
  class ElderTableSelectionCellComponent {
16182
16956
  /***************************************************************************
16183
16957
  * *
@@ -16268,7 +17042,7 @@ class ElderTableExtensionDirective {
16268
17042
  get extensionGroupIndex() {
16269
17043
  return this._extensionGroupIndex;
16270
17044
  }
16271
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderTableExtensionDirective, deps: [{ token: ElderTableModel }, { token: i2$3.MatSort, optional: true }, { token: ElderTableExtensionDirective, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive }); }
17045
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderTableExtensionDirective, deps: [{ token: ElderTableModel }, { token: i2$4.MatSort, optional: true }, { token: ElderTableExtensionDirective, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive }); }
16272
17046
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.4", type: ElderTableExtensionDirective, isStandalone: true, selector: "[elderTableExtension]", inputs: { columnsPosition: "columnsPosition" }, providers: [ElderTableProviders.ExistingOrNewTableModel], queries: [{ propertyName: "columnDefsQuery", predicate: MatColumnDef }, { propertyName: "elderColumnsQuery", predicate: ElderTableColumnDirective }, { propertyName: "rowDefsQuery", predicate: MatRowDef }], ngImport: i0 }); }
16273
17047
  }
16274
17048
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderTableExtensionDirective, decorators: [{
@@ -16278,7 +17052,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
16278
17052
  providers: [ElderTableProviders.ExistingOrNewTableModel],
16279
17053
  standalone: true,
16280
17054
  }]
16281
- }], ctorParameters: () => [{ type: ElderTableModel }, { type: i2$3.MatSort, decorators: [{
17055
+ }], ctorParameters: () => [{ type: ElderTableModel }, { type: i2$4.MatSort, decorators: [{
16282
17056
  type: Optional
16283
17057
  }] }, { type: ElderTableExtensionDirective, decorators: [{
16284
17058
  type: Optional
@@ -16320,6 +17094,10 @@ class ElderTableComponent extends ElderDataViewBaseComponent {
16320
17094
  */
16321
17095
  this.loadNextQueued = false;
16322
17096
  this.pageSizeOptions = input([30, 50, 100, 150, 250]);
17097
+ /**
17098
+ * ID of table component.
17099
+ */
17100
+ this.id = input();
16323
17101
  /**
16324
17102
  * When this field is present and true,
16325
17103
  * the coresponding row is marked to be in the processed of being removed.
@@ -16500,18 +17278,18 @@ class ElderTableComponent extends ElderDataViewBaseComponent {
16500
17278
  const rows = this.rows$.getValue();
16501
17279
  return rows.find((r) => this.getId(untracked(r.entity)) === this.getId(item));
16502
17280
  }
16503
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderTableComponent, deps: [{ token: ElderTableModel }, { token: SelectionModel, optional: true }, { token: ElderDataViewOptionsProvider, optional: true, skipSelf: true }, { token: i2$3.MatSort, optional: true }, { token: ElderTableExtensionDirective, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
16504
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.4", type: ElderTableComponent, isStandalone: true, selector: "elder-table", inputs: { pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, idField: { classPropertyName: "idField", publicName: "idField", isSignal: false, isRequired: false, transformFunction: null }, removingField: { classPropertyName: "removingField", publicName: "removingField", isSignal: false, isRequired: false, transformFunction: null }, hiddenField: { classPropertyName: "hiddenField", publicName: "hiddenField", isSignal: false, isRequired: false, transformFunction: null }, keepSelection: { classPropertyName: "keepSelection", publicName: "keepSelection", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, denseHorizontal: { classPropertyName: "denseHorizontal", publicName: "denseHorizontal", isSignal: true, isRequired: false, transformFunction: null }, toolbarTemplate: { classPropertyName: "toolbarTemplate", publicName: "toolbarTemplate", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: false, isRequired: false, transformFunction: null }, selectionVisible: { classPropertyName: "selectionVisible", publicName: "selectionVisible", isSignal: false, isRequired: false, transformFunction: null } }, providers: [
17281
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderTableComponent, deps: [{ token: ElderTableModel }, { token: SelectionModel, optional: true }, { token: ElderDataViewOptionsProvider, optional: true, skipSelf: true }, { token: i2$4.MatSort, optional: true }, { token: ElderTableExtensionDirective, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
17282
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.4", type: ElderTableComponent, isStandalone: true, selector: "elder-table", inputs: { pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, idField: { classPropertyName: "idField", publicName: "idField", isSignal: false, isRequired: false, transformFunction: null }, removingField: { classPropertyName: "removingField", publicName: "removingField", isSignal: false, isRequired: false, transformFunction: null }, hiddenField: { classPropertyName: "hiddenField", publicName: "hiddenField", isSignal: false, isRequired: false, transformFunction: null }, keepSelection: { classPropertyName: "keepSelection", publicName: "keepSelection", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, denseHorizontal: { classPropertyName: "denseHorizontal", publicName: "denseHorizontal", isSignal: true, isRequired: false, transformFunction: null }, toolbarTemplate: { classPropertyName: "toolbarTemplate", publicName: "toolbarTemplate", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: false, isRequired: false, transformFunction: null }, selectionVisible: { classPropertyName: "selectionVisible", publicName: "selectionVisible", isSignal: false, isRequired: false, transformFunction: null } }, providers: [
16505
17283
  ElderTableProviders.ExistingOrNewTableModel,
16506
17284
  {
16507
17285
  provide: ELDER_DATA_VIEW,
16508
17286
  useExisting: forwardRef(() => ElderTableComponent),
16509
17287
  },
16510
- ], queries: [{ propertyName: "columnDefs", predicate: MatColumnDef }, { propertyName: "elderColumns", predicate: ElderTableColumnDirective }, { propertyName: "rowDefs", predicate: MatRowDef }, { propertyName: "toolbarRowTemplateQuery", predicate: ElderTableToolbarDirective, read: TemplateRef }], viewQueries: [{ propertyName: "matTable", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "elderContinuator", first: true, predicate: ElderContinuatorComponent, descendants: true }, { propertyName: "rowsQuery", predicate: ElderTableRowDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"full\" style=\"overflow: hidden\">\n <div class=\"layout-col elder-table full\" [class.elder-table-dense-horizontal]=\"denseHorizontal()\">\n <!-- Toolbar Rows -->\n @for (toolbarRowTemplate of toolbarRowTemplates(); track toolbarRowTemplate) {\n <ng-template\n *ngTemplateOutlet=\"toolbarRowTemplate; context: { $implicit: this }\"\n ></ng-template>\n }\n\n <!-- Scrollable Table -->\n <div\n class=\"elder-table-inner layout-col {{\n isDataValid(viewData()) ? 'flex' : ''\n }} scrollable elder-table-scroll\"\n elderInfiniteScroll\n [eventThrottle]=\"150\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"!isContinuable || !canLoadMore()\"\n (closeToEnd)=\"requestMoreDataZoned($event)\"\n >\n <table\n mat-table\n class=\"elder-mat-inner-table\"\n [trackBy]=\"trackByFn\"\n [dataSource]=\"$any(dc())\"\n [elderDataContextSelection]=\"dc()\"\n #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- selection Column -->\n <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef>\n <elder-selection-master-checkbox></elder-selection-master-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let entity\">\n <elder-table-selection-cell\n [entity]=\"entity\"\n class=\"elder-table-checkbox\"\n [class.elder-table-checkbox-visible]=\"dataSelection.selectionState().anySelected\"\n ></elder-table-selection-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n <tr\n mat-row\n class=\"elder-table-row\"\n *matRowDef=\"let entity; columns: displayedColumnsInner()\"\n [elderTableRow]=\"entity\"\n [highlightSelection]=\"interactionMode === 'selection'\"\n [class.dense]=\"dense()\"\n [class.elder-row-hidden]=\"hiddenField && entity[hiddenField]\"\n [class.elder-row-removing]=\"removingField && entity[removingField]\"\n (click)=\"onItemClick(entity)\"\n (dblclick)=\"onItemDoubleClick(entity)\"\n ></tr>\n @if (showFooter()) {\n <tr mat-footer-row *matFooterRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n }\n </table>\n </div>\n\n @if (!isDataValid(viewData())) {\n <elder-data-context-state-indicator class=\"flex\" [dataContext]=\"dataContext\">\n </elder-data-context-state-indicator>\n }\n\n <mat-progress-bar\n class=\"flex-none mt-auto\"\n [mode]=\"dcStatus()?.loading ? 'indeterminate' : 'determinate'\"\n [color]=\"dcStatus()?.hasError ? 'warn' : 'primary'\"\n >\n </mat-progress-bar>\n\n <div class=\"layout-row flex-none place-end-center gap-md elder-table-footer\">\n @if (isContinuable) {\n <elder-continuator\n [loadedCount]=\"viewData()?.length\"\n [total]=\"total()\"\n [canLoadMore]=\"canLoadMore()\"\n [chunkSizeOptions]=\"pageSizeOptions()\"\n [chunkSize]=\"currentChunkSize()\"\n (loadMoreRequested)=\"dataContinuable.loadMore()\"\n ></elder-continuator>\n } @else if (isActivePaged) {\n @if (currentPage(); as page) {\n <mat-paginator\n class=\"flex-none\"\n [length]=\"total()\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n >\n </mat-paginator>\n }\n }\n </div>\n </div>\n</div>\n", styles: [":host{min-width:0;min-height:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ElderInfiniteScrollDirective, selector: "[elderInfiniteScroll]", inputs: ["listenToHost", "eventThrottle", "offsetFactor", "ignoreScrollEvent", "containerId", "scrollContainer"], outputs: ["closeToEnd", "scrolling"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: DataContextSelectionDirective, selector: "[elderDataContextSelection]", inputs: ["elderDataContextSelectionModel", "elderDataContextSelection"], exportAs: ["elderDataContextSelection"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: ElderSelectionMasterCheckboxComponent, selector: "elder-selection-master-checkbox" }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: ElderTableRowDirective, selector: "tr[elderTableRow]", inputs: ["elderTableRow", "highlightSelection"], exportAs: ["elderTableRow"] }, { kind: "directive", type: MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "component", type: MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DataContextStateIndicatorComponent, selector: "elder-data-context-state-indicator", inputs: ["dataContext"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: ElderContinuatorComponent, selector: "elder-continuator", inputs: ["loadedCount", "total", "canLoadMore", "chunkSizeOptions", "chunkSize"], outputs: ["loadMoreRequested", "chunkSizeChange"] }, { kind: "component", type: ElderTableSelectionCellComponent, selector: "elder-table-selection-cell", inputs: ["entity"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17288
+ ], queries: [{ propertyName: "columnDefs", predicate: MatColumnDef }, { propertyName: "elderColumns", predicate: ElderTableColumnDirective }, { propertyName: "rowDefs", predicate: MatRowDef }, { propertyName: "toolbarRowTemplateQuery", predicate: ElderTableToolbarDirective, read: TemplateRef }], viewQueries: [{ propertyName: "matTable", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "elderContinuator", first: true, predicate: ElderContinuatorComponent, descendants: true }, { propertyName: "rowsQuery", predicate: ElderTableRowDirective, descendants: true }], exportAs: ["elderTable"], usesInheritance: true, ngImport: i0, template: "<div class=\"full\" style=\"overflow: hidden\">\n <div class=\"layout-col elder-table full\" [class.elder-table-dense-horizontal]=\"denseHorizontal()\">\n <!-- Toolbar Rows -->\n @for (toolbarRowTemplate of toolbarRowTemplates(); track toolbarRowTemplate) {\n <ng-template\n *ngTemplateOutlet=\"toolbarRowTemplate; context: { $implicit: this }\"\n ></ng-template>\n }\n\n <!-- Scrollable Table -->\n <div\n class=\"elder-table-inner layout-col {{\n isDataValid(viewData()) ? 'flex' : ''\n }} scrollable elder-table-scroll\"\n elderInfiniteScroll\n [eventThrottle]=\"150\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"!isContinuable || !canLoadMore()\"\n (closeToEnd)=\"requestMoreDataZoned($event)\"\n >\n <table\n mat-table\n [id]=\"id()\"\n class=\"elder-mat-inner-table\"\n [trackBy]=\"trackByFn\"\n [dataSource]=\"$any(dc())\"\n [elderDataContextSelection]=\"dc()\"\n #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n elderTableDropListConnector\n >\n <!-- selection Column -->\n <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef>\n <elder-selection-master-checkbox></elder-selection-master-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let entity\">\n <elder-table-selection-cell\n [entity]=\"entity\"\n class=\"elder-table-checkbox\"\n [class.elder-table-checkbox-visible]=\"dataSelection.selectionState().anySelected\"\n ></elder-table-selection-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n <tr\n mat-row\n class=\"elder-table-row\"\n *matRowDef=\"let entity; columns: displayedColumnsInner()\"\n [elderElderDataViewItemDrag]=\"entity\"\n [elderTableRow]=\"entity\"\n [highlightSelection]=\"interactionMode === 'selection'\"\n [class.dense]=\"dense()\"\n [class.elder-row-hidden]=\"hiddenField && entity[hiddenField]\"\n [class.elder-row-removing]=\"removingField && entity[removingField]\"\n (click)=\"onItemClick(entity)\"\n (dblclick)=\"onItemDoubleClick(entity)\"\n ></tr>\n @if (showFooter()) {\n <tr mat-footer-row *matFooterRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n }\n </table>\n </div>\n\n @if (!isDataValid(viewData())) {\n <elder-data-context-state-indicator class=\"flex\" [dataContext]=\"dataContext\">\n </elder-data-context-state-indicator>\n }\n\n <mat-progress-bar\n class=\"flex-none mt-auto\"\n [mode]=\"dcStatus()?.loading ? 'indeterminate' : 'determinate'\"\n [color]=\"dcStatus()?.hasError ? 'warn' : 'primary'\"\n >\n </mat-progress-bar>\n\n <div class=\"layout-row flex-none place-end-center gap-md elder-table-footer\">\n @if (isContinuable) {\n <elder-continuator\n [loadedCount]=\"viewData()?.length\"\n [total]=\"total()\"\n [canLoadMore]=\"canLoadMore()\"\n [chunkSizeOptions]=\"pageSizeOptions()\"\n [chunkSize]=\"currentChunkSize()\"\n (loadMoreRequested)=\"dataContinuable.loadMore()\"\n ></elder-continuator>\n } @else if (isActivePaged) {\n @if (currentPage(); as page) {\n <mat-paginator\n class=\"flex-none\"\n [length]=\"total()\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n >\n </mat-paginator>\n }\n }\n </div>\n </div>\n</div>\n", styles: [":host{min-width:0;min-height:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ElderInfiniteScrollDirective, selector: "[elderInfiniteScroll]", inputs: ["listenToHost", "eventThrottle", "offsetFactor", "ignoreScrollEvent", "containerId", "scrollContainer"], outputs: ["closeToEnd", "scrolling"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: DataContextSelectionDirective, selector: "[elderDataContextSelection]", inputs: ["elderDataContextSelectionModel", "elderDataContextSelection"], exportAs: ["elderDataContextSelection"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: ElderSelectionMasterCheckboxComponent, selector: "elder-selection-master-checkbox" }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: ElderTableRowDirective, selector: "tr[elderTableRow]", inputs: ["elderTableRow", "highlightSelection"], exportAs: ["elderTableRow"] }, { kind: "directive", type: MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "component", type: MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DataContextStateIndicatorComponent, selector: "elder-data-context-state-indicator", inputs: ["dataContext"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: ElderDataViewItemDragDirective, selector: "[elderElderDataViewItemDrag]", inputs: ["elderElderDataViewItemDrag", "canDragItem"] }, { kind: "directive", type: ElderTableDropListConnectorDirective, selector: "[elderTableDropListConnector]" }, { kind: "component", type: ElderContinuatorComponent, selector: "elder-continuator", inputs: ["loadedCount", "total", "canLoadMore", "chunkSizeOptions", "chunkSize"], outputs: ["loadMoreRequested", "chunkSizeChange"] }, { kind: "component", type: ElderTableSelectionCellComponent, selector: "elder-table-selection-cell", inputs: ["entity"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
16511
17289
  }
16512
17290
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderTableComponent, decorators: [{
16513
17291
  type: Component,
16514
- args: [{ selector: 'elder-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
17292
+ args: [{ selector: 'elder-table', exportAs: 'elderTable', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
16515
17293
  ElderTableProviders.ExistingOrNewTableModel,
16516
17294
  {
16517
17295
  provide: ELDER_DATA_VIEW,
@@ -16540,16 +17318,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
16540
17318
  DataContextStateIndicatorComponent,
16541
17319
  MatProgressBar,
16542
17320
  MatPaginator,
17321
+ ElderDataViewItemDragDirective,
17322
+ ElderTableDropListConnectorDirective,
16543
17323
  ElderContinuatorComponent,
16544
17324
  ElderTableSelectionCellComponent,
16545
- ], template: "<div class=\"full\" style=\"overflow: hidden\">\n <div class=\"layout-col elder-table full\" [class.elder-table-dense-horizontal]=\"denseHorizontal()\">\n <!-- Toolbar Rows -->\n @for (toolbarRowTemplate of toolbarRowTemplates(); track toolbarRowTemplate) {\n <ng-template\n *ngTemplateOutlet=\"toolbarRowTemplate; context: { $implicit: this }\"\n ></ng-template>\n }\n\n <!-- Scrollable Table -->\n <div\n class=\"elder-table-inner layout-col {{\n isDataValid(viewData()) ? 'flex' : ''\n }} scrollable elder-table-scroll\"\n elderInfiniteScroll\n [eventThrottle]=\"150\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"!isContinuable || !canLoadMore()\"\n (closeToEnd)=\"requestMoreDataZoned($event)\"\n >\n <table\n mat-table\n class=\"elder-mat-inner-table\"\n [trackBy]=\"trackByFn\"\n [dataSource]=\"$any(dc())\"\n [elderDataContextSelection]=\"dc()\"\n #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- selection Column -->\n <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef>\n <elder-selection-master-checkbox></elder-selection-master-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let entity\">\n <elder-table-selection-cell\n [entity]=\"entity\"\n class=\"elder-table-checkbox\"\n [class.elder-table-checkbox-visible]=\"dataSelection.selectionState().anySelected\"\n ></elder-table-selection-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n <tr\n mat-row\n class=\"elder-table-row\"\n *matRowDef=\"let entity; columns: displayedColumnsInner()\"\n [elderTableRow]=\"entity\"\n [highlightSelection]=\"interactionMode === 'selection'\"\n [class.dense]=\"dense()\"\n [class.elder-row-hidden]=\"hiddenField && entity[hiddenField]\"\n [class.elder-row-removing]=\"removingField && entity[removingField]\"\n (click)=\"onItemClick(entity)\"\n (dblclick)=\"onItemDoubleClick(entity)\"\n ></tr>\n @if (showFooter()) {\n <tr mat-footer-row *matFooterRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n }\n </table>\n </div>\n\n @if (!isDataValid(viewData())) {\n <elder-data-context-state-indicator class=\"flex\" [dataContext]=\"dataContext\">\n </elder-data-context-state-indicator>\n }\n\n <mat-progress-bar\n class=\"flex-none mt-auto\"\n [mode]=\"dcStatus()?.loading ? 'indeterminate' : 'determinate'\"\n [color]=\"dcStatus()?.hasError ? 'warn' : 'primary'\"\n >\n </mat-progress-bar>\n\n <div class=\"layout-row flex-none place-end-center gap-md elder-table-footer\">\n @if (isContinuable) {\n <elder-continuator\n [loadedCount]=\"viewData()?.length\"\n [total]=\"total()\"\n [canLoadMore]=\"canLoadMore()\"\n [chunkSizeOptions]=\"pageSizeOptions()\"\n [chunkSize]=\"currentChunkSize()\"\n (loadMoreRequested)=\"dataContinuable.loadMore()\"\n ></elder-continuator>\n } @else if (isActivePaged) {\n @if (currentPage(); as page) {\n <mat-paginator\n class=\"flex-none\"\n [length]=\"total()\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n >\n </mat-paginator>\n }\n }\n </div>\n </div>\n</div>\n", styles: [":host{min-width:0;min-height:0}\n"] }]
17325
+ ], template: "<div class=\"full\" style=\"overflow: hidden\">\n <div class=\"layout-col elder-table full\" [class.elder-table-dense-horizontal]=\"denseHorizontal()\">\n <!-- Toolbar Rows -->\n @for (toolbarRowTemplate of toolbarRowTemplates(); track toolbarRowTemplate) {\n <ng-template\n *ngTemplateOutlet=\"toolbarRowTemplate; context: { $implicit: this }\"\n ></ng-template>\n }\n\n <!-- Scrollable Table -->\n <div\n class=\"elder-table-inner layout-col {{\n isDataValid(viewData()) ? 'flex' : ''\n }} scrollable elder-table-scroll\"\n elderInfiniteScroll\n [eventThrottle]=\"150\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"!isContinuable || !canLoadMore()\"\n (closeToEnd)=\"requestMoreDataZoned($event)\"\n >\n <table\n mat-table\n [id]=\"id()\"\n class=\"elder-mat-inner-table\"\n [trackBy]=\"trackByFn\"\n [dataSource]=\"$any(dc())\"\n [elderDataContextSelection]=\"dc()\"\n #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n elderTableDropListConnector\n >\n <!-- selection Column -->\n <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef>\n <elder-selection-master-checkbox></elder-selection-master-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let entity\">\n <elder-table-selection-cell\n [entity]=\"entity\"\n class=\"elder-table-checkbox\"\n [class.elder-table-checkbox-visible]=\"dataSelection.selectionState().anySelected\"\n ></elder-table-selection-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n <tr\n mat-row\n class=\"elder-table-row\"\n *matRowDef=\"let entity; columns: displayedColumnsInner()\"\n [elderElderDataViewItemDrag]=\"entity\"\n [elderTableRow]=\"entity\"\n [highlightSelection]=\"interactionMode === 'selection'\"\n [class.dense]=\"dense()\"\n [class.elder-row-hidden]=\"hiddenField && entity[hiddenField]\"\n [class.elder-row-removing]=\"removingField && entity[removingField]\"\n (click)=\"onItemClick(entity)\"\n (dblclick)=\"onItemDoubleClick(entity)\"\n ></tr>\n @if (showFooter()) {\n <tr mat-footer-row *matFooterRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n }\n </table>\n </div>\n\n @if (!isDataValid(viewData())) {\n <elder-data-context-state-indicator class=\"flex\" [dataContext]=\"dataContext\">\n </elder-data-context-state-indicator>\n }\n\n <mat-progress-bar\n class=\"flex-none mt-auto\"\n [mode]=\"dcStatus()?.loading ? 'indeterminate' : 'determinate'\"\n [color]=\"dcStatus()?.hasError ? 'warn' : 'primary'\"\n >\n </mat-progress-bar>\n\n <div class=\"layout-row flex-none place-end-center gap-md elder-table-footer\">\n @if (isContinuable) {\n <elder-continuator\n [loadedCount]=\"viewData()?.length\"\n [total]=\"total()\"\n [canLoadMore]=\"canLoadMore()\"\n [chunkSizeOptions]=\"pageSizeOptions()\"\n [chunkSize]=\"currentChunkSize()\"\n (loadMoreRequested)=\"dataContinuable.loadMore()\"\n ></elder-continuator>\n } @else if (isActivePaged) {\n @if (currentPage(); as page) {\n <mat-paginator\n class=\"flex-none\"\n [length]=\"total()\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n >\n </mat-paginator>\n }\n }\n </div>\n </div>\n</div>\n", styles: [":host{min-width:0;min-height:0}\n"] }]
16546
17326
  }], ctorParameters: () => [{ type: ElderTableModel }, { type: SelectionModel, decorators: [{
16547
17327
  type: Optional
16548
17328
  }] }, { type: ElderDataViewOptionsProvider, decorators: [{
16549
17329
  type: Optional
16550
17330
  }, {
16551
17331
  type: SkipSelf
16552
- }] }, { type: i2$3.MatSort, decorators: [{
17332
+ }] }, { type: i2$4.MatSort, decorators: [{
16553
17333
  type: Optional
16554
17334
  }] }, { type: ElderTableExtensionDirective, decorators: [{
16555
17335
  type: Optional
@@ -18512,7 +19292,7 @@ class ElderNumberCellDirective {
18512
19292
  matSortHeader.arrowPosition = 'before';
18513
19293
  }
18514
19294
  }
18515
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderNumberCellDirective, deps: [{ token: i2$3.MatSortHeader, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
19295
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderNumberCellDirective, deps: [{ token: i2$4.MatSortHeader, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
18516
19296
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.4", type: ElderNumberCellDirective, isStandalone: true, selector: "[elderNumberCell]", host: { properties: { "class.elder-number-cell": "true" } }, ngImport: i0 }); }
18517
19297
  }
18518
19298
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderNumberCellDirective, decorators: [{
@@ -18524,7 +19304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
18524
19304
  },
18525
19305
  standalone: true,
18526
19306
  }]
18527
- }], ctorParameters: () => [{ type: i2$3.MatSortHeader, decorators: [{
19307
+ }], ctorParameters: () => [{ type: i2$4.MatSortHeader, decorators: [{
18528
19308
  type: Optional
18529
19309
  }] }] });
18530
19310
 
@@ -18789,6 +19569,7 @@ class ElderTableModule {
18789
19569
  MatBadgeModule,
18790
19570
  MatProgressBarModule,
18791
19571
  CdkTableModule,
19572
+ DragDropModule,
18792
19573
  MatTableModule,
18793
19574
  MatPaginatorModule,
18794
19575
  MatSortModule,
@@ -18811,7 +19592,8 @@ class ElderTableModule {
18811
19592
  ElderTableExtensionDirective,
18812
19593
  ElderTableColumnDirective,
18813
19594
  ElderTableRootDirective,
18814
- ElderDeleteActiveDirective], exports: [ElderTableComponent,
19595
+ ElderDeleteActiveDirective,
19596
+ ElderTableDropListConnectorDirective], exports: [ElderTableComponent,
18815
19597
  ElderTableToolbarDirective,
18816
19598
  ElderDataCommonModule,
18817
19599
  ElderTableSortDirective,
@@ -18820,7 +19602,8 @@ class ElderTableModule {
18820
19602
  ElderTableActivationDirective,
18821
19603
  ElderTableExtensionDirective,
18822
19604
  ElderTableRootDirective,
18823
- ElderDeleteActiveDirective] }); }
19605
+ ElderDeleteActiveDirective,
19606
+ ElderTableDropListConnectorDirective] }); }
18824
19607
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderTableModule, providers: [
18825
19608
  {
18826
19609
  provide: MatPaginatorIntl,
@@ -18838,6 +19621,7 @@ class ElderTableModule {
18838
19621
  MatBadgeModule,
18839
19622
  MatProgressBarModule,
18840
19623
  CdkTableModule,
19624
+ DragDropModule,
18841
19625
  MatTableModule,
18842
19626
  MatPaginatorModule,
18843
19627
  MatSortModule,
@@ -18867,6 +19651,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
18867
19651
  MatBadgeModule,
18868
19652
  MatProgressBarModule,
18869
19653
  CdkTableModule,
19654
+ DragDropModule,
18870
19655
  MatTableModule,
18871
19656
  MatPaginatorModule,
18872
19657
  MatSortModule,
@@ -18890,6 +19675,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
18890
19675
  ElderTableColumnDirective,
18891
19676
  ElderTableRootDirective,
18892
19677
  ElderDeleteActiveDirective,
19678
+ ElderTableDropListConnectorDirective,
18893
19679
  ],
18894
19680
  exports: [
18895
19681
  ElderTableComponent,
@@ -18902,6 +19688,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
18902
19688
  ElderTableExtensionDirective,
18903
19689
  ElderTableRootDirective,
18904
19690
  ElderDeleteActiveDirective,
19691
+ ElderTableDropListConnectorDirective,
18905
19692
  ],
18906
19693
  providers: [
18907
19694
  {
@@ -30426,7 +31213,7 @@ class ElderIntervalPickerComponent {
30426
31213
  }
30427
31214
  }
30428
31215
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderIntervalPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30429
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.4", 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$4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$4.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: CommonModule }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.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$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.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: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31216
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.4", 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$5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$5.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: CommonModule }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.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$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.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: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30430
31217
  }
30431
31218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderIntervalPickerComponent, decorators: [{
30432
31219
  type: Component,
@@ -31310,7 +32097,7 @@ class ElderLocalizedInputTableComponent extends FormFieldBaseComponent {
31310
32097
  return localizables;
31311
32098
  }
31312
32099
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderLocalizedInputTableComponent, deps: [{ token: ElderToastService }, { token: ElderLanguageService }], target: i0.ɵɵFactoryTarget.Component }); }
31313
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: ElderLocalizedInputTableComponent, isStandalone: true, selector: "elder-localized-input-table", inputs: { dense: "dense", float: "float", embedded: "embedded", textColumns: "textColumns", defaultLanguageTags: "defaultLanguageTags" }, providers: buildFormIntegrationProviders(ElderLocalizedInputTableComponent), queries: [{ propertyName: "textColumnsQuery", predicate: ElderLocalizedTextColumnDirective }], usesInheritance: true, ngImport: i0, template: "<div class=\"layout-col full\">\n <elder-table\n matSort\n class=\"flex\"\n [data]=\"data\"\n [selectionVisible]=\"true\"\n [selectionMultiEnabled]=\"true\"\n [dense]=\"dense\"\n >\n <elder-data-toolbar\n *elderTableToolbar\n [canAdd]=\"!isLocked\"\n [canRemove]=\"!isLocked\"\n [canMore]=\"false\"\n (requestNew)=\"onNewRequested()\"\n (requestRemove)=\"onRemoveRequested($event)\"\n >\n <ng-template elderToolbarContent=\"left.actions\">\n <div class=\"layout-col place-start-center\">\n <h4 elderCardSubtitle style=\"margin: 0\">{{ label ?? placeholder }}</h4>\n </div>\n </ng-template>\n </elder-data-toolbar>\n\n <ng-container matColumnDef=\"locale\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 100px\" mat-sort-header>Locale</th>\n <td mat-cell *matCellDef=\"let localized\">\n <mat-chip-set\n ><mat-chip highlighted>{{ localized.locale }}</mat-chip></mat-chip-set\n >\n </td>\n </ng-container>\n\n <ng-container\n *ngFor=\"let textColumn of textColumns$ | async\"\n matColumnDef=\"{{ textColumn.name }}\"\n >\n <th mat-header-cell *matHeaderCellDef>{{ textColumn.title | translate }}</th>\n <td mat-cell *matCellDef=\"let localized\">\n <div class=\"layout-row place-center-center\">\n <mat-form-field class=\"full-width\" appearance=\"fill\" elderDense>\n <!--\n <mat-label>{{textColumn.title | translate}} ({{localized.locale}})</mat-label>\n -->\n <!--\n <span matTextPrefix>{{textColumn.title | translate}}</span>\n -->\n <input\n matInput\n type=\"text\"\n name=\"i18n-{{ localized.locale }}-{{ textColumn.name }}\"\n [ngModel]=\"localized[textColumn.name]\"\n [ngModelOptions]=\"{ updateOn: 'blur' }\"\n (ngModelChange)=\"onColumnTextUpdated(localized, textColumn, $event)\"\n [required]=\"required && textColumn.required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n />\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n </elder-table>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ElderTableComponent, selector: "elder-table", inputs: ["pageSizeOptions", "idField", "removingField", "hiddenField", "keepSelection", "showFooter", "denseHorizontal", "toolbarTemplate", "data", "displayedColumns", "selectionVisible"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "directive", type: ElderTableToolbarDirective, selector: "[elderTableToolbar]" }, { kind: "component", type: ElderDataToolbarComponent, selector: "elder-data-toolbar", inputs: ["canAdd", "canRemove", "canMore", "confirmRemoval", "keepSelectionAfterRemoval", "selectionModel"], outputs: ["requestNew", "requestRemove"] }, { kind: "directive", type: ElderToolbarContentDirective, selector: "[elderToolbarContent]", inputs: ["elderToolbarContent"] }, { kind: "directive", type: ElderCardSubtitleDirective, selector: "elder-card-subtitle, [elder-card-subtitle], [elderCardSubtitle]" }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: "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$4.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$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: ElderLocalizedInputTableComponent, isStandalone: true, selector: "elder-localized-input-table", inputs: { dense: "dense", float: "float", embedded: "embedded", textColumns: "textColumns", defaultLanguageTags: "defaultLanguageTags" }, providers: buildFormIntegrationProviders(ElderLocalizedInputTableComponent), queries: [{ propertyName: "textColumnsQuery", predicate: ElderLocalizedTextColumnDirective }], usesInheritance: true, ngImport: i0, template: "<div class=\"layout-col full\">\n <elder-table\n matSort\n class=\"flex\"\n [data]=\"data\"\n [selectionVisible]=\"true\"\n [selectionMultiEnabled]=\"true\"\n [dense]=\"dense\"\n >\n <elder-data-toolbar\n *elderTableToolbar\n [canAdd]=\"!isLocked\"\n [canRemove]=\"!isLocked\"\n [canMore]=\"false\"\n (requestNew)=\"onNewRequested()\"\n (requestRemove)=\"onRemoveRequested($event)\"\n >\n <ng-template elderToolbarContent=\"left.actions\">\n <div class=\"layout-col place-start-center\">\n <h4 elderCardSubtitle style=\"margin: 0\">{{ label ?? placeholder }}</h4>\n </div>\n </ng-template>\n </elder-data-toolbar>\n\n <ng-container matColumnDef=\"locale\">\n <th mat-header-cell *matHeaderCellDef style=\"width: 100px\" mat-sort-header>Locale</th>\n <td mat-cell *matCellDef=\"let localized\">\n <mat-chip-set\n ><mat-chip highlighted>{{ localized.locale }}</mat-chip></mat-chip-set\n >\n </td>\n </ng-container>\n\n <ng-container\n *ngFor=\"let textColumn of textColumns$ | async\"\n matColumnDef=\"{{ textColumn.name }}\"\n >\n <th mat-header-cell *matHeaderCellDef>{{ textColumn.title | translate }}</th>\n <td mat-cell *matCellDef=\"let localized\">\n <div class=\"layout-row place-center-center\">\n <mat-form-field class=\"full-width\" appearance=\"fill\" elderDense>\n <!--\n <mat-label>{{textColumn.title | translate}} ({{localized.locale}})</mat-label>\n -->\n <!--\n <span matTextPrefix>{{textColumn.title | translate}}</span>\n -->\n <input\n matInput\n type=\"text\"\n name=\"i18n-{{ localized.locale }}-{{ textColumn.name }}\"\n [ngModel]=\"localized[textColumn.name]\"\n [ngModelOptions]=\"{ updateOn: 'blur' }\"\n (ngModelChange)=\"onColumnTextUpdated(localized, textColumn, $event)\"\n [required]=\"required && textColumn.required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n />\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n </elder-table>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ElderTableComponent, selector: "elder-table", inputs: ["pageSizeOptions", "id", "idField", "removingField", "hiddenField", "keepSelection", "showFooter", "denseHorizontal", "toolbarTemplate", "data", "displayedColumns", "selectionVisible"], exportAs: ["elderTable"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "directive", type: ElderTableToolbarDirective, selector: "[elderTableToolbar]" }, { kind: "component", type: ElderDataToolbarComponent, selector: "elder-data-toolbar", inputs: ["canAdd", "canRemove", "canMore", "confirmRemoval", "keepSelectionAfterRemoval", "selectionModel"], outputs: ["requestNew", "requestRemove"] }, { kind: "directive", type: ElderToolbarContentDirective, selector: "[elderToolbarContent]", inputs: ["elderToolbarContent"] }, { kind: "directive", type: ElderCardSubtitleDirective, selector: "elder-card-subtitle, [elder-card-subtitle], [elderCardSubtitle]" }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: "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$4.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$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31314
32101
  }
31315
32102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: ElderLocalizedInputTableComponent, decorators: [{
31316
32103
  type: Component,
@@ -37266,5 +38053,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
37266
38053
  * Generated bundle index. Do not edit.
37267
38054
  */
37268
38055
 
37269
- export { ActivationEventSource, ActivationModel, Arrays, AuditedEntity, AutoStartSpec, Batcher, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, CompositeSort, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyFormatUtil, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, CustomMatcherSpec, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceEventBinding, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceBase, DataSourceChangeEvent, DataSourceEntityPatch, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewActivationController, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewMessage, DataViewMessageTypeValues, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, DurationFormatUtil, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutoSelectSuggestFirstDirective, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBadgeChipAvatarDirective, ElderBadgeChipDirective, ElderBadgeComponent, ElderBadgeDirective, ElderBadgeModule, ElderBasicPaneLayoutComponent, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCenterCellDirective, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsIncludeExcludeDirective, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderCompositeSortComponent, ElderCompositeSortDcDirective, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderContinuatorComponent, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDelayedFocusDirective, ElderDeleteActiveDirective, ElderDetailDialogComponent, ElderDetailDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDropZoneComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFilterChipTemplateComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridActivationDirective, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderIntervalPickerBindingDirective, ElderIntervalPickerComponent, ElderIntervalPickerToggleComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMasterActivationDirective, ElderMasterDetailComponent, ElderMasterDetailModule, ElderMasterDetailService, ElderMasterDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectAllInitialDirective, ElderMultiSelectBase, ElderMultiSelectChipOptionsComponent, ElderMultiSelectChipsComponent, ElderMultiSelectFormField, ElderMultiTranslateHttpLoader, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayRef, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPageExitLockIndicatorComponent, ElderPaneActionsComponent, ElderPaneComponent, ElderPaneContentComponent, ElderPaneHeaderComponent, ElderPaneSubtitleComponent, ElderPaneTitleComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderScrollbarDirective, ElderScrollbarModule, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchIncludeExcludeDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSearchUrlDirective, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectOptionComponent, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSinglePaneWrapperComponent, ElderSingleSortComponent, ElderSingleStateCheckboxDirective, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSuggestionPanelComponent, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSelectionCellComponent, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTileComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTrimPipe, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileEntry, FileListingRx, FileUploadClient, Filter, FilterContext, FilterUtil, FocusUtil, FormFieldBaseComponent, GlobalDragDropService, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, IncludeExcludeSelectionModel, IncludeExcludeState, IncludeExcludeValue, IndexedEntities, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalFormatUtil, IsoIntervalParsePipe, IsoIntervalPipe, ItemActivationEvent, ItemActivationOptions, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleTags, LocalDataFilter, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterDetailActivationEvent, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageExitGuardModule, PageExitGuardService, PageExitLock, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveEventSourceState, ReactiveFetchEventSource, ReactiveFetchEventSourceService, ReactiveMap, ReactiveSSeMessage, RefreshingEntity, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, RoutedTabActivationFailed, SearchInputState, SearchQuery, SelectChipSpecUtil, SelectOptionChipSpecUtil, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, SimpleSearchInput, Sort, SortOption, SortUtil, StandardToastComponent, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, TemporalPlainDateInterval, TemporalUtil, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToIsoDateStringPipe, ToastType, TokenChunkRequest, ToolbarHeader, Translated, TranslatedConverter, TranslatedEnumValue, TranslatedText, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UnreachableCaseError, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewProviders, WeightPipe, alphaNumStringComparator, booleanTransformFn, buildFormIntegrationProviders, coerceInterval, coerceIntervalIsoStr, createDataOptionsProvider, createSelectionModel, existingOrNewElderTableModel, initSearchUrlService, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isDataViewMessageType, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isPagedDataSource, lazySample, lazySampleTime, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
38056
+ export { ActivationEventSource, ActivationModel, Arrays, AuditedEntity, AutoStartSpec, Batcher, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, CompositeSort, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyFormatUtil, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, CustomMatcherSpec, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceEventBinding, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceBase, DataSourceChangeEvent, DataSourceEntityPatch, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewActivationController, DataViewDndControllerService, DataViewDndGroupControllerService, DataViewDndModelUtil, DataViewDragEnteredEvent, DataViewDragExitedEvent, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewItemDropEvent, DataViewMessage, DataViewMessageTypeValues, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, DurationFormatUtil, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutoSelectSuggestFirstDirective, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBadgeChipAvatarDirective, ElderBadgeChipDirective, ElderBadgeComponent, ElderBadgeDirective, ElderBadgeModule, ElderBasicPaneLayoutComponent, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCenterCellDirective, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsIncludeExcludeDirective, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderCompositeSortComponent, ElderCompositeSortDcDirective, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderContinuatorComponent, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewDndDirective, ElderDataViewDndGroupDirective, ElderDataViewItemDragDirective, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDelayedFocusDirective, ElderDeleteActiveDirective, ElderDetailDialogComponent, ElderDetailDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDropZoneComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFilterChipTemplateComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridActivationDirective, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderIntervalPickerBindingDirective, ElderIntervalPickerComponent, ElderIntervalPickerToggleComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalDndSupportDirective, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMasterActivationDirective, ElderMasterDetailComponent, ElderMasterDetailModule, ElderMasterDetailService, ElderMasterDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectAllInitialDirective, ElderMultiSelectBase, ElderMultiSelectChipOptionsComponent, ElderMultiSelectChipsComponent, ElderMultiSelectFormField, ElderMultiTranslateHttpLoader, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayRef, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPageExitLockIndicatorComponent, ElderPaneActionsComponent, ElderPaneComponent, ElderPaneContentComponent, ElderPaneHeaderComponent, ElderPaneSubtitleComponent, ElderPaneTitleComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderScrollbarDirective, ElderScrollbarModule, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchIncludeExcludeDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSearchUrlDirective, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectOptionComponent, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSinglePaneWrapperComponent, ElderSingleSortComponent, ElderSingleStateCheckboxDirective, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSuggestionPanelComponent, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableDropListConnectorDirective, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSelectionCellComponent, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTileComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTrimPipe, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileEntry, FileListingRx, FileUploadClient, Filter, FilterContext, FilterUtil, FocusUtil, FormFieldBaseComponent, GlobalDragDropService, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, IncludeExcludeSelectionModel, IncludeExcludeState, IncludeExcludeValue, IndexedEntities, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalFormatUtil, IsoIntervalParsePipe, IsoIntervalPipe, ItemActivationEvent, ItemActivationOptions, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleTags, LocalDataFilter, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterDetailActivationEvent, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageExitGuardModule, PageExitGuardService, PageExitLock, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveEventSourceState, ReactiveFetchEventSource, ReactiveFetchEventSourceService, ReactiveMap, ReactiveSSeMessage, RefreshingEntity, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, RoutedTabActivationFailed, SearchInputState, SearchQuery, SelectChipSpecUtil, SelectOptionChipSpecUtil, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, SimpleSearchInput, Sort, SortOption, SortUtil, StandardToastComponent, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, TemporalPlainDateInterval, TemporalUtil, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToIsoDateStringPipe, ToastType, TokenChunkRequest, ToolbarHeader, Translated, TranslatedConverter, TranslatedEnumValue, TranslatedText, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UnreachableCaseError, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewDropModelUpdateInstruction, ViewProviders, WeightPipe, alphaNumStringComparator, booleanTransformFn, buildFormIntegrationProviders, coerceInterval, coerceIntervalIsoStr, createDataOptionsProvider, createSelectionModel, existingOrNewElderTableModel, initSearchUrlService, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isDataViewMessageType, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isLocalListDataSource, isPagedDataSource, lazySample, lazySampleTime, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
37270
38057
  //# sourceMappingURL=elderbyte-ngx-starter.mjs.map