@saydar/table-builder 1.0.1 → 1.0.2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,79 +1,55 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Input, Directive, NgModule, Injectable, InjectionToken, Pipe, HostListener, Component, EventEmitter, Output, ContentChildren, Inject, ChangeDetectionStrategy, ViewChild, Injector, ElementRef, Optional } from '@angular/core';
2
+ import { Input, Directive, Injectable, InjectionToken, Inject, HostListener, Pipe, ChangeDetectionStrategy, Component, ViewChild, EventEmitter, Output, ContentChildren, NgModule, Injector, ElementRef, Optional } from '@angular/core';
3
3
  import { shareReplay, map, switchAll, filter, tap, catchError, startWith, switchMap, mergeMap, concatMap, last, takeUntil, distinctUntilKeyChanged, delay as delay$1, distinct, first as first$1, distinctUntilChanged, withLatestFrom, mergeAll, scan as scan$1 } from 'rxjs/operators';
4
- import * as i3$3 from 'rxjs';
5
- import { isObservable, Subject, of, ReplaySubject, filter as filter$1, first, map as map$1, Observable, combineLatest, Subscription, startWith as startWith$1, pairwise, concatMap as concatMap$1, merge, delay, switchMap as switchMap$1, scan, fromEvent, asyncScheduler, tap as tap$1, BehaviorSubject, takeUntil as takeUntil$1, from } from 'rxjs';
4
+ import * as i3$1 from 'rxjs';
5
+ import { isObservable, Subject, of, ReplaySubject, filter as filter$1, first, map as map$1, Observable, combineLatest, Subscription, startWith as startWith$1, pairwise, concatMap as concatMap$1, merge, delay, fromEvent, switchMap as switchMap$1, scan, asyncScheduler, tap as tap$1, BehaviorSubject, takeUntil as takeUntil$1, from } from 'rxjs';
6
6
  import { ComponentStore } from '@ngrx/component-store';
7
- import * as i4$1 from '@angular/material/table';
8
- import { MatColumnDef, MatTableDataSource, MatTable, MatTableModule, MatRowDef } from '@angular/material/table';
7
+ import * as i2 from '@angular/material/table';
8
+ import { MatColumnDef, MatCell, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatFooterCellDef, MatFooterCell, MatTableDataSource, MatTable, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow, MatFooterRowDef, MatFooterRow } from '@angular/material/table';
9
9
  import { SelectionModel } from '@angular/cdk/collections';
10
10
  import * as _ from 'lodash';
11
- import { flatten, get, merge as merge$1, sumBy, orderBy, groupBy, flattenDeep, cloneDeep, set } from 'lodash';
12
- import * as i9 from '@angular/cdk/drag-drop';
13
- import { moveItemInArray, CdkDropList, CDK_DROP_LIST, transferArrayItem, DragDropModule } from '@angular/cdk/drag-drop';
14
- import * as i2 from '@angular/common';
15
- import { CommonModule, DatePipe, CurrencyPipe, AsyncPipe } from '@angular/common';
16
- import * as i1 from '@angular/material/dialog';
17
- import { MatDialogModule } from '@angular/material/dialog';
18
- import * as i5$2 from '@angular/material/slide-toggle';
19
- import { MatSlideToggle, MatSlideToggleModule } from '@angular/material/slide-toggle';
11
+ import { flatten, merge as merge$1, get, sumBy, orderBy, groupBy, flattenDeep, cloneDeep, set } from 'lodash';
12
+ import { moveItemInArray, CdkDropList, CDK_DROP_LIST, CdkDrag, CdkDragHandle, transferArrayItem, DragDropModule } from '@angular/cdk/drag-drop';
13
+ import { LetDirective } from '@ngrx/component';
14
+ import { MatTooltip } from '@angular/material/tooltip';
15
+ import * as i1$2 from '@angular/common';
16
+ import { AsyncPipe, KeyValuePipe, NgSwitch, NgIf, NgSwitchCase, NgClass, NgTemplateOutlet, DecimalPipe, CurrencyPipe, CommonModule, DatePipe } from '@angular/common';
20
17
  import { v4 } from 'uuid';
21
18
  import update from 'immutability-helper';
22
- import * as i8$1 from '@angular/material/icon';
23
- import { MatIconModule } from '@angular/material/icon';
24
- import * as i3 from '@angular/router';
25
- import { RouterModule } from '@angular/router';
26
- import * as i8 from '@ngrx/component';
27
- import { LetDirective } from '@ngrx/component';
28
- import * as i6 from '@angular/material/tooltip';
29
- import { MatTooltipModule } from '@angular/material/tooltip';
30
- import * as i1$1 from '@angular/material/sort';
31
- import { MatSortModule, MatSort } from '@angular/material/sort';
32
- import * as i6$1 from '@angular/material/menu';
33
- import { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
34
- import * as i3$1 from '@angular/material/select';
35
- import { MatSelectModule } from '@angular/material/select';
36
- import * as i4 from '@angular/material/datepicker';
37
- import { MatDatepickerModule } from '@angular/material/datepicker';
38
- import * as i5 from '@angular/material/radio';
39
- import { MatRadioModule } from '@angular/material/radio';
40
- import * as i5$1 from '@angular/material/button';
41
- import { MatButtonModule } from '@angular/material/button';
42
- import * as i8$2 from '@angular/material/input';
43
- import { MatInputModule } from '@angular/material/input';
44
- import * as i2$1 from '@angular/forms';
45
- import { NG_VALUE_ACCESSOR, NgForm, ControlContainer, FormsModule } from '@angular/forms';
46
- import * as i7 from '@angular/material/checkbox';
47
- import { MatCheckboxModule } from '@angular/material/checkbox';
48
- import * as i13 from 'ng-table-virtual-scroll';
19
+ import * as i1$3 from '@angular/material/sort';
20
+ import { MatSortHeader, MatSort } from '@angular/material/sort';
21
+ import { MatMenuTrigger, MatMenu, MatMenuItem } from '@angular/material/menu';
22
+ import { MatIconButton, MatButton } from '@angular/material/button';
23
+ import { MatIcon } from '@angular/material/icon';
24
+ import * as i1 from '@angular/forms';
25
+ import { NG_VALUE_ACCESSOR, FormsModule, NgForm, ControlContainer } from '@angular/forms';
26
+ import * as i4 from '@angular/material/checkbox';
27
+ import { MatCheckbox } from '@angular/material/checkbox';
28
+ import { MatFormField, MatPrefix, MatLabel, MatSuffix, MatSelect, MatOption } from '@angular/material/select';
29
+ import { MatInput } from '@angular/material/input';
30
+ import * as i6 from '@angular/material/radio';
31
+ import { MatRadioGroup, MatRadioButton } from '@angular/material/radio';
32
+ import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker';
33
+ import * as i1$1 from '@angular/material/dialog';
34
+ import * as i5 from '@angular/material/slide-toggle';
35
+ import { MatSlideToggle } from '@angular/material/slide-toggle';
36
+ import { RouterLink, RouterModule } from '@angular/router';
37
+ import * as i3 from 'ng-table-virtual-scroll';
49
38
  import { TableVirtualScrollDataSource, TableVirtualScrollModule } from 'ng-table-virtual-scroll';
50
- import * as i3$2 from '@angular/material/paginator';
51
- import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
52
- import * as i12 from '@angular/cdk/scrolling';
53
- import { ScrollingModule } from '@angular/cdk/scrolling';
54
- import * as i1$2 from '@angular/cdk/table';
55
- import * as i7$1 from '@angular/material/card';
56
- import { MatCardModule } from '@angular/material/card';
57
- import { MatAutocompleteModule } from '@angular/material/autocomplete';
58
- import { MatBadgeModule } from '@angular/material/badge';
59
- import * as i7$2 from '@angular/material/core';
60
- import { MatNativeDateModule } from '@angular/material/core';
61
- import { MatExpansionModule } from '@angular/material/expansion';
62
- import { MatGridListModule } from '@angular/material/grid-list';
63
- import { MatProgressSpinnerModule, MatProgressSpinner } from '@angular/material/progress-spinner';
64
- import { MatSidenavModule } from '@angular/material/sidenav';
65
- import { MatStepperModule } from '@angular/material/stepper';
66
- import { MatTabsModule } from '@angular/material/tabs';
67
- import { MatToolbarModule } from '@angular/material/toolbar';
68
- import * as i7$3 from '@angular/material/chips';
69
- import { MatChipsModule } from '@angular/material/chips';
70
- import * as i8$3 from '@angular/material/button-toggle';
71
- import * as i3$4 from '@ngrx/store';
39
+ import { MatPaginator } from '@angular/material/paginator';
40
+ import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
41
+ import * as i1$4 from '@angular/cdk/table';
42
+ import { MatCard, MatCardContent } from '@angular/material/card';
43
+ import * as i7 from '@angular/material/core';
44
+ import * as i8 from '@angular/material/button-toggle';
45
+ import * as i3$2 from '@ngrx/store';
72
46
  import { createSelector, createAction, props, select, createReducer, on, StoreModule, createFeatureSelector, Store } from '@ngrx/store';
73
- import * as i1$3 from '@ngrx/effects';
47
+ import { MatChipSet, MatChip, MatChipRemove } from '@angular/material/chips';
48
+ import * as i1$5 from '@ngrx/effects';
74
49
  import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
75
50
  import { concatLatestFrom } from '@ngrx/operators';
76
51
  import { createEntityAdapter } from '@ngrx/entity';
52
+ import { MatProgressSpinner } from '@angular/material/progress-spinner';
77
53
 
78
54
  var HttpRequestStatus;
79
55
  (function (HttpRequestStatus) {
@@ -369,40 +345,6 @@ function chainRequest(httpState$, request, requestParams) {
369
345
  }));
370
346
  }
371
347
 
372
- /** @deprecated Import the standalone directives directly instead. */
373
- class HttpRequestModule {
374
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: HttpRequestModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
375
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: HttpRequestModule, imports: [HttpSuccessStateDirective,
376
- HttpRequestStateDirective,
377
- HttpErrorStateDirective,
378
- HttpInProgressStateDirective,
379
- HttpNotStartedStateDirective], exports: [HttpSuccessStateDirective,
380
- HttpRequestStateDirective,
381
- HttpErrorStateDirective,
382
- HttpInProgressStateDirective,
383
- HttpNotStartedStateDirective] }); }
384
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: HttpRequestModule }); }
385
- }
386
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: HttpRequestModule, decorators: [{
387
- type: NgModule,
388
- args: [{
389
- imports: [
390
- HttpSuccessStateDirective,
391
- HttpRequestStateDirective,
392
- HttpErrorStateDirective,
393
- HttpInProgressStateDirective,
394
- HttpNotStartedStateDirective,
395
- ],
396
- exports: [
397
- HttpSuccessStateDirective,
398
- HttpRequestStateDirective,
399
- HttpErrorStateDirective,
400
- HttpInProgressStateDirective,
401
- HttpNotStartedStateDirective,
402
- ]
403
- }]
404
- }] });
405
-
406
348
  class HttpRequestStateStore extends ComponentStore {
407
349
  constructor(req, options) {
408
350
  super({ requestParams: null, response: notStarted });
@@ -639,697 +581,137 @@ function delayOn(predicate, delayTime) {
639
581
  };
640
582
  }
641
583
 
642
- const TableBuilderConfigToken = new InjectionToken('TableBuilderConfig');
643
-
644
- class PhoneNumberPipe {
645
- transform(phoneNum) {
646
- if (phoneNum) {
647
- phoneNum = phoneNum.replace(/\D/g, '');
648
- if (phoneNum[0] === '1') {
649
- phoneNum = phoneNum.substring(1);
650
- }
651
- return '(' + phoneNum.slice(0, 3) + ') ' + phoneNum.slice(3, 6) + '-' + phoneNum.slice(6, 10) + ' ' + phoneNum.slice(10);
652
- }
584
+ class ConditionalClassesDirective {
585
+ constructor(el, renderer) {
586
+ this.el = el;
587
+ this.renderer = renderer;
588
+ this.classesApplied = [];
653
589
  }
654
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PhoneNumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
655
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: PhoneNumberPipe, isStandalone: false, name: "phone" }); }
656
- }
657
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PhoneNumberPipe, decorators: [{
658
- type: Pipe,
659
- args: [{
660
- name: 'phone',
661
- standalone: false
662
- }]
663
- }] });
664
-
665
- class PreventEnterDirective {
666
- onKeyDown() {
667
- return false;
590
+ ngOnChanges(changes) {
591
+ let toApply = [];
592
+ if (this.classes) {
593
+ toApply = Object.keys(this.classes)
594
+ .filter(key => this.classes[key](this.element));
595
+ }
596
+ var classesNotYetApplied = toApply.filter(c => !this.classesApplied.includes(c));
597
+ var classesToRemove = this.classesApplied.filter(c => !toApply.includes(c));
598
+ classesToRemove.forEach(c => this.renderer.removeClass(this.el.nativeElement, c));
599
+ classesNotYetApplied.forEach(c => this.renderer.addClass(this.el.nativeElement, c));
600
+ this.classesApplied = toApply;
668
601
  }
669
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PreventEnterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
670
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: PreventEnterDirective, isStandalone: false, selector: "preventEnter", host: { listeners: { "keydown.enter": "onKeyDown()" } }, ngImport: i0 }); }
602
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ConditionalClassesDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
603
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: ConditionalClassesDirective, isStandalone: true, selector: "[conditionalClasses]", inputs: { element: "element", classes: ["conditionalClasses", "classes"] }, usesOnChanges: true, ngImport: i0 }); }
671
604
  }
672
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PreventEnterDirective, decorators: [{
605
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ConditionalClassesDirective, decorators: [{
673
606
  type: Directive,
674
- args: [{
675
- selector: 'preventEnter',
676
- standalone: false
677
- }]
678
- }], propDecorators: { onKeyDown: [{
679
- type: HostListener,
680
- args: ['keydown.enter']
607
+ args: [{ selector: '[conditionalClasses]' }]
608
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { element: [{
609
+ type: Input
610
+ }], classes: [{
611
+ type: Input,
612
+ args: ['conditionalClasses']
681
613
  }] } });
682
614
 
683
- class StopPropagationDirective {
684
- onClick(event) {
685
- event.stopPropagation();
615
+ class StylerDirective {
616
+ set styler(styles) {
617
+ if (styles) {
618
+ Object.keys(styles).forEach(style => {
619
+ this.el.nativeElement.style[style] = styles[style];
620
+ });
621
+ }
686
622
  }
687
- onMousedown(event) {
688
- event.stopPropagation();
623
+ ;
624
+ constructor(el) {
625
+ this.el = el;
689
626
  }
690
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: StopPropagationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
691
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: StopPropagationDirective, isStandalone: false, selector: "[stop-propagation]", host: { listeners: { "click": "onClick($event)", "mousedown": "onMousedown($event)" } }, ngImport: i0 }); }
627
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: StylerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
628
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: StylerDirective, isStandalone: true, selector: "[styler]", inputs: { styler: "styler" }, ngImport: i0 }); }
692
629
  }
693
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: StopPropagationDirective, decorators: [{
630
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: StylerDirective, decorators: [{
694
631
  type: Directive,
695
- args: [{
696
- selector: "[stop-propagation]",
697
- standalone: false
698
- }]
699
- }], propDecorators: { onClick: [{
700
- type: HostListener,
701
- args: ["click", ["$event"]]
702
- }], onMousedown: [{
703
- type: HostListener,
704
- args: ["mousedown", ["$event"]]
632
+ args: [{ selector: '[styler]' }]
633
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { styler: [{
634
+ type: Input
705
635
  }] } });
706
636
 
707
- class AutoFocusDirective {
708
- constructor(elementRef) {
709
- this.elementRef = elementRef;
710
- this.autoFocus = true;
637
+ class Subjectifier extends Observable {
638
+ constructor(_source) {
639
+ super((obs) => {
640
+ const s = merge(_source, this._subj).subscribe(obs);
641
+ return s;
642
+ });
643
+ this._source = _source;
644
+ this._subj = new Subject();
645
+ this.merged = merge(this._source, this._subj);
646
+ this.next = this._subj.next.bind(this._subj);
647
+ this.newSubj = (...operations) => new Subjectifier(this.merged.pipe(...operations));
711
648
  }
712
- ngAfterViewInit() {
713
- if (this.autoFocus) {
714
- setTimeout(() => {
715
- this.elementRef.nativeElement.focus();
716
- });
649
+ }
650
+
651
+ class GeneralTableSettings {
652
+ constructor(settings) {
653
+ this.headerSettings = new TableWrapperHeaderSettings();
654
+ this.footerSettings = new TableWrapperFooterSettings();
655
+ this.columnHeaderSettings = new TableColumnHeaderSettings();
656
+ if (settings) {
657
+ merge$1(this.headerSettings, settings.headerSettings);
658
+ merge$1(this.footerSettings, settings.footerSettings);
659
+ merge$1(this.columnHeaderSettings, settings.columnHeaderSettings);
717
660
  }
718
661
  }
719
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: AutoFocusDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
720
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: AutoFocusDirective, isStandalone: false, selector: "[autoFocus]", inputs: { autoFocus: "autoFocus" }, ngImport: i0 }); }
721
662
  }
722
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: AutoFocusDirective, decorators: [{
723
- type: Directive,
724
- args: [{
725
- selector: '[autoFocus]',
726
- standalone: false
727
- }]
728
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { autoFocus: [{
729
- type: Input
730
- }] } });
731
-
732
- class ClickSubjectDirective extends Subject {
663
+ class TableWrapperHeaderSettings {
733
664
  constructor() {
734
- super();
735
- }
736
- set clickSubject(val) {
737
- this._val = val;
665
+ this.hideExport = false;
666
+ this.hideFilter = false;
667
+ this.hideColumnSettings = false;
668
+ this.hideHeader = false;
669
+ this.hideSort = false;
670
+ this.collapse = false;
671
+ this.showTitleWhenCollapsed = true;
738
672
  }
739
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ClickSubjectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
740
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: ClickSubjectDirective, isStandalone: false, selector: "[clickSubject]", inputs: { clickSubject: "clickSubject" }, host: { listeners: { "click": "next(this._val)" } }, exportAs: ["clickSubject"], usesInheritance: true, ngImport: i0 }); }
741
673
  }
742
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ClickSubjectDirective, decorators: [{
743
- type: Directive,
744
- args: [{
745
- selector: '[clickSubject]',
746
- exportAs: 'clickSubject',
747
- host: {
748
- '(click)': 'next(this._val)'
749
- },
750
- standalone: false
751
- }]
752
- }], ctorParameters: () => [], propDecorators: { clickSubject: [{
753
- type: Input,
754
- args: ['clickSubject']
755
- }] } });
756
-
757
- class ClickEmitterDirective extends Subject {
674
+ class TableWrapperFooterSettings {
758
675
  constructor() {
759
- super();
676
+ this.collapse = false;
760
677
  }
761
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ClickEmitterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
762
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: ClickEmitterDirective, isStandalone: false, selector: "[clickEmitter]", host: { listeners: { "click": "next(true)" } }, exportAs: ["clickEmitter"], usesInheritance: true, ngImport: i0 }); }
763
678
  }
764
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ClickEmitterDirective, decorators: [{
765
- type: Directive,
766
- args: [{
767
- selector: '[clickEmitter]',
768
- exportAs: 'clickEmitter',
769
- host: {
770
- '(click)': 'next(true)'
771
- },
772
- standalone: false
773
- }]
774
- }], ctorParameters: () => [] });
775
-
776
- class DialogService {
679
+ class TableColumnHeaderSettings {
777
680
  constructor() {
778
- this.allOpenOpDialogs = [];
779
- }
780
- addDialogRef(ref) {
781
- this.allOpenOpDialogs.push(ref);
782
- }
783
- removeDialogRef(ref) {
784
- this.allOpenOpDialogs = this.allOpenOpDialogs.filter(rf => ref.id !== rf.id);
785
- }
786
- closeAllOpDialogs() {
787
- this.allOpenOpDialogs.forEach(ref => ref.close());
681
+ this.noFilters = false;
682
+ this.noHeader = false;
788
683
  }
789
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
790
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogService, providedIn: 'root' }); }
791
684
  }
792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogService, decorators: [{
793
- type: Injectable,
794
- args: [{
795
- providedIn: 'root'
796
- }]
797
- }] });
798
-
799
- class DialogWrapper {
800
- set template(tmpl) {
801
- if (this.viewEmbeded) {
802
- this.vcr.clear();
685
+ class PesrsistedTableSettings {
686
+ constructor(tableSettings) {
687
+ this.collapseHeader = false;
688
+ this.collapseFooter = false;
689
+ if (tableSettings) {
690
+ this.collapseHeader = tableSettings.headerSettings?.collapse ?? tableSettings.collapseHeader;
691
+ this.collapseFooter = tableSettings.footerSettings?.collapse ?? tableSettings.collapseFooter;
803
692
  }
804
- this.viewEmbeded = true;
805
- this.vcr.createEmbeddedView(tmpl, this.viewContext);
806
- }
807
- set close(closeMethod) {
808
- this.viewContext.close = closeMethod;
809
- }
810
- set data(value) {
811
- this.viewContext.$implicit = value;
812
- this.viewContext.opDialog = value;
813
693
  }
814
- constructor(vcr) {
815
- this.vcr = vcr;
816
- this.viewEmbeded = false;
817
- this.viewContext = {
818
- close: () => { },
819
- };
820
- }
821
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogWrapper, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
822
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: DialogWrapper, isStandalone: false, selector: "app-dialog-content", ngImport: i0, template: ``, isInline: true }); }
823
- }
824
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogWrapper, decorators: [{
825
- type: Component,
826
- args: [{
827
- selector: 'app-dialog-content',
828
- template: ``,
829
- standalone: false
830
- }]
831
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }] });
832
- const defaultDialogConfig = {
833
- maxHeight: '95vh',
834
- };
835
- class DialogDirective {
836
- set opDialogConfig(config) {
837
- this._dialogConfig = { ...defaultDialogConfig, ...config };
838
- }
839
- get opDialogConfig() {
840
- return this._dialogConfig;
841
- }
842
- set state(open_close) {
843
- this._data.next(open_close);
844
- }
845
- constructor(templateRef, dialog, service) {
846
- this.templateRef = templateRef;
847
- this.dialog = dialog;
848
- this.service = service;
849
- this.opDialogClosed = new EventEmitter();
850
- this._dialogConfig = defaultDialogConfig;
851
- this.add_opDialog_Class = true;
852
- this._data = new Subject();
853
- this.subscription = this._data.pipe(switchAll()).subscribe(d => {
854
- if (d) {
855
- this.opDialogConfig.data = d;
856
- this.setDialogState(true);
857
- }
858
- else {
859
- this.setDialogState(false);
860
- }
861
- });
862
- }
863
- close() {
864
- this.dialogRef?.close();
865
- }
866
- initDialog() {
867
- if (this.nativeElement) {
868
- const rect = this.nativeElement.getBoundingClientRect();
869
- const position = { left: `${rect.left}px`, top: `${rect.bottom - 50}px` };
870
- this.opDialogConfig = { ...this.opDialogConfig, position };
871
- }
872
- if (this.add_opDialog_Class) {
873
- this.opDialogConfig.panelClass = [...(Array.isArray(this.opDialogConfig.panelClass) ? this.opDialogConfig.panelClass : this.opDialogConfig.panelClass ? [this.opDialogConfig.panelClass] : []), 'opDialog'];
874
- }
875
- this.dialogRef = this.dialog.open(DialogWrapper, this.opDialogConfig);
876
- this.componentWrapper = this.dialogRef.componentInstance;
877
- this.componentWrapper.close = () => this.dialogRef?.close();
878
- this.componentWrapper.data = this.opDialogConfig.data;
879
- this.componentWrapper.template = this.templateRef;
880
- if (!this.opDialogConfig.disableClose) {
881
- this.service.addDialogRef(this.dialogRef);
882
- }
883
- const sub = this.dialogRef.afterClosed().subscribe(() => {
884
- this.opDialogClosed.emit(true);
885
- this.service.removeDialogRef(this.dialogRef);
886
- this.dialogRef = undefined;
887
- sub.unsubscribe();
888
- });
889
- }
890
- setDialogState(open) {
891
- if (open) {
892
- if (!this.dialogRef) {
893
- this.initDialog();
894
- }
895
- else {
896
- this.componentWrapper.data = this.opDialogConfig.data;
897
- }
898
- }
899
- else if (!open && this.dialogRef) {
900
- this.dialogRef.close();
901
- }
902
- }
903
- ngOnDestroy() {
904
- if (this.subscription) {
905
- this.subscription.unsubscribe();
906
- }
907
- }
908
- static ngTemplateContextGuard(dir, ctx) {
909
- return true;
910
- }
911
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogDirective, deps: [{ token: i0.TemplateRef }, { token: i1.MatDialog }, { token: DialogService }], target: i0.ɵɵFactoryTarget.Directive }); }
912
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: DialogDirective, isStandalone: false, selector: "[opDialog]", inputs: { add_opDialog_Class: "add_opDialog_Class", opDialogConfig: "opDialogConfig", state: ["opDialog", "state"], nativeElement: ["opDialogOrigin", "nativeElement"] }, outputs: { opDialogClosed: "opDialogClosed" }, ngImport: i0 }); }
913
- }
914
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogDirective, decorators: [{
915
- type: Directive,
916
- args: [{
917
- selector: '[opDialog]',
918
- standalone: false
919
- }]
920
- }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i1.MatDialog }, { type: DialogService }], propDecorators: { opDialogClosed: [{
921
- type: Output
922
- }], add_opDialog_Class: [{
923
- type: Input
924
- }], opDialogConfig: [{
925
- type: Input
926
- }], state: [{
927
- type: Input,
928
- args: ['opDialog']
929
- }], nativeElement: [{
930
- type: Input,
931
- args: ['opDialogOrigin']
932
- }] } });
933
-
934
- class StylerDirective {
935
- set styler(styles) {
936
- if (styles) {
937
- Object.keys(styles).forEach(style => {
938
- this.el.nativeElement.style[style] = styles[style];
939
- });
940
- }
941
- }
942
- ;
943
- constructor(el) {
944
- this.el = el;
945
- }
946
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: StylerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
947
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: StylerDirective, isStandalone: false, selector: "[styler]", inputs: { styler: "styler" }, ngImport: i0 }); }
948
- }
949
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: StylerDirective, decorators: [{
950
- type: Directive,
951
- args: [{
952
- selector: '[styler]',
953
- standalone: false
954
- }]
955
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { styler: [{
956
- type: Input
957
- }] } });
958
-
959
- class MatSlideToggleGroupDirective {
960
- constructor() {
961
- this.allowMultiple = false;
962
- this._ready = new ReplaySubject(1);
963
- }
964
- set toggles(val) {
965
- this._toggles = val;
966
- this._ready.next(true);
967
- }
968
- get valueEmitter() {
969
- return this._ready.pipe(switchMap$1(_ => this.getObs()));
970
- }
971
- getInitValue() {
972
- const startValue = this._toggles.reduce((prev, cur) => {
973
- if (!cur.name) {
974
- throw new Error('toggle must have the name attribute set');
975
- }
976
- prev[cur.name] = cur.checked;
977
- return prev;
978
- }, {});
979
- return startValue;
980
- }
981
- getObs() {
982
- var toggleChanges = merge(...this._toggles.map(toggle => toggle.change));
983
- const startValue = this.getInitValue();
984
- return toggleChanges.pipe(scan((prev, cur) => {
985
- const toggleName = cur.source.name;
986
- const newVal = { ...prev, [toggleName]: cur.checked };
987
- if (cur.checked && !this.allowMultiple) {
988
- Object.keys(prev)
989
- .filter(key => key !== toggleName && prev[key])
990
- .forEach(key => {
991
- newVal[key] = false;
992
- this._toggles.find(toggle => toggle.name === key).toggle();
993
- });
994
- }
995
- return newVal;
996
- }, startValue), startWith$1(startValue));
997
- }
998
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatSlideToggleGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
999
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatSlideToggleGroupDirective, isStandalone: false, selector: "[opMatSlideToggleGroup]", inputs: { allowMultiple: "allowMultiple" }, outputs: { valueEmitter: "valueEmitter" }, queries: [{ propertyName: "toggles", predicate: MatSlideToggle }], ngImport: i0 }); }
1000
- }
1001
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatSlideToggleGroupDirective, decorators: [{
1002
- type: Directive,
1003
- args: [{
1004
- selector: '[opMatSlideToggleGroup]',
1005
- standalone: false
1006
- }]
1007
- }], propDecorators: { allowMultiple: [{
1008
- type: Input
1009
- }], toggles: [{
1010
- type: ContentChildren,
1011
- args: [MatSlideToggle]
1012
- }], valueEmitter: [{
1013
- type: Output
1014
- }] } });
1015
-
1016
- class TrimWhitespaceDirective {
1017
- constructor(elem) {
1018
- this.elem = elem;
1019
- }
1020
- onBlur() {
1021
- const inputString = this.elem.nativeElement.value;
1022
- if (inputString) {
1023
- const newValue = inputString.trim().replace(/\t/g, '');
1024
- if (inputString !== newValue) {
1025
- this.elem.nativeElement.value = newValue;
1026
- this.elem.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));
1027
- }
1028
- }
1029
- }
1030
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TrimWhitespaceDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1031
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: TrimWhitespaceDirective, isStandalone: false, selector: "input[trimWhitespace]", host: { listeners: { "blur": "onBlur()" } }, ngImport: i0 }); }
1032
- }
1033
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TrimWhitespaceDirective, decorators: [{
1034
- type: Directive,
1035
- args: [{
1036
- selector: 'input[trimWhitespace]',
1037
- standalone: false
1038
- }]
1039
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { onBlur: [{
1040
- type: HostListener,
1041
- args: ['blur']
1042
- }] } });
1043
-
1044
- class FunctionPipe {
1045
- transform(func, ...args) {
1046
- if (typeof func === 'string') {
1047
- const [instance, ...tail] = args;
1048
- const method = instance[func].bind(instance);
1049
- return method(...tail);
1050
- }
1051
- return func(...args);
1052
- }
1053
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FunctionPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1054
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: FunctionPipe, isStandalone: false, name: "func" }); }
1055
- }
1056
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FunctionPipe, decorators: [{
1057
- type: Pipe,
1058
- args: [{
1059
- name: 'func',
1060
- standalone: false
1061
- }]
1062
- }] });
1063
-
1064
- class SpaceCasePipe {
1065
- transform(value) {
1066
- return spaceCase(value);
1067
- }
1068
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SpaceCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1069
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: SpaceCasePipe, isStandalone: false, name: "spaceCase" }); }
1070
- }
1071
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SpaceCasePipe, decorators: [{
1072
- type: Pipe,
1073
- args: [{
1074
- name: 'spaceCase',
1075
- standalone: false
1076
- }]
1077
- }] });
1078
- /**
1079
- * Adds a space before uppercase letters that either
1080
- * 1. follows a lowercase letter or digit
1081
- * 2. or precedes a lowercase letter and follows an alpha-numeric character
1082
- *
1083
- * Uppercases the first digit
1084
- *
1085
- * Turns underscores into spaces
1086
- */
1087
- function spaceCase(value) {
1088
- const phrase = value?.replace(/([a-z0-9])([A-Z])|([a-zA-Z0-9])([A-Z])(?=[a-z])|_/g, '$1$3 $2$4');
1089
- // uppercase the first character of every word
1090
- return phrase?.replace(/(^| )(\w)/g, x => x.toUpperCase());
1091
- }
1092
-
1093
- class ConditionalClassesDirective {
1094
- constructor(el, renderer) {
1095
- this.el = el;
1096
- this.renderer = renderer;
1097
- this.classesApplied = [];
1098
- }
1099
- ngOnChanges(changes) {
1100
- let toApply = [];
1101
- if (this.classes) {
1102
- toApply = Object.keys(this.classes)
1103
- .filter(key => this.classes[key](this.element));
1104
- }
1105
- var classesNotYetApplied = toApply.filter(c => !this.classesApplied.includes(c));
1106
- var classesToRemove = this.classesApplied.filter(c => !toApply.includes(c));
1107
- classesToRemove.forEach(c => this.renderer.removeClass(this.el.nativeElement, c));
1108
- classesNotYetApplied.forEach(c => this.renderer.addClass(this.el.nativeElement, c));
1109
- this.classesApplied = toApply;
1110
- }
1111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ConditionalClassesDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
1112
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: ConditionalClassesDirective, isStandalone: false, selector: "[conditionalClasses]", inputs: { element: "element", classes: ["conditionalClasses", "classes"] }, usesOnChanges: true, ngImport: i0 }); }
1113
- }
1114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ConditionalClassesDirective, decorators: [{
1115
- type: Directive,
1116
- args: [{
1117
- selector: '[conditionalClasses]',
1118
- standalone: false
1119
- }]
1120
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { element: [{
1121
- type: Input
1122
- }], classes: [{
1123
- type: Input,
1124
- args: ['conditionalClasses']
1125
- }] } });
1126
-
1127
- class UtilitiesModule {
1128
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: UtilitiesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1129
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: UtilitiesModule, declarations: [SpaceCasePipe,
1130
- PhoneNumberPipe,
1131
- FunctionPipe,
1132
- StopPropagationDirective,
1133
- StylerDirective,
1134
- PreventEnterDirective,
1135
- AutoFocusDirective,
1136
- TrimWhitespaceDirective,
1137
- ClickSubjectDirective,
1138
- ClickEmitterDirective,
1139
- DialogDirective,
1140
- MatSlideToggleGroupDirective,
1141
- ConditionalClassesDirective], exports: [StopPropagationDirective,
1142
- PreventEnterDirective,
1143
- SpaceCasePipe,
1144
- PhoneNumberPipe,
1145
- FunctionPipe,
1146
- StopPropagationDirective,
1147
- TrimWhitespaceDirective,
1148
- StylerDirective,
1149
- PreventEnterDirective,
1150
- AutoFocusDirective,
1151
- ClickSubjectDirective,
1152
- ClickEmitterDirective,
1153
- DialogDirective,
1154
- MatSlideToggleGroupDirective,
1155
- ConditionalClassesDirective] }); }
1156
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: UtilitiesModule, providers: [
1157
- DialogService
1158
- ] }); }
1159
- }
1160
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: UtilitiesModule, decorators: [{
1161
- type: NgModule,
1162
- args: [{
1163
- imports: [],
1164
- exports: [
1165
- StopPropagationDirective,
1166
- PreventEnterDirective,
1167
- SpaceCasePipe,
1168
- PhoneNumberPipe,
1169
- FunctionPipe,
1170
- StopPropagationDirective,
1171
- TrimWhitespaceDirective,
1172
- StylerDirective,
1173
- PreventEnterDirective,
1174
- AutoFocusDirective,
1175
- ClickSubjectDirective,
1176
- ClickEmitterDirective,
1177
- DialogDirective,
1178
- MatSlideToggleGroupDirective,
1179
- ConditionalClassesDirective,
1180
- ],
1181
- declarations: [
1182
- SpaceCasePipe,
1183
- PhoneNumberPipe,
1184
- FunctionPipe,
1185
- StopPropagationDirective,
1186
- StylerDirective,
1187
- PreventEnterDirective,
1188
- AutoFocusDirective,
1189
- TrimWhitespaceDirective,
1190
- ClickSubjectDirective,
1191
- ClickEmitterDirective,
1192
- DialogDirective,
1193
- MatSlideToggleGroupDirective,
1194
- ConditionalClassesDirective,
1195
- ],
1196
- providers: [
1197
- DialogService
1198
- ]
1199
- }]
1200
- }] });
1201
-
1202
- function isPipe(o) {
1203
- return typeof (o.transform) === 'function';
1204
- }
1205
- class TransformCreator {
1206
- constructor(datePipe, currencyPipe, phonePipe, casePipe, config) {
1207
- this.datePipe = datePipe;
1208
- this.currencyPipe = currencyPipe;
1209
- this.phonePipe = phonePipe;
1210
- this.casePipe = casePipe;
1211
- this.config = config;
1212
- }
1213
- createTransformer(metaData) {
1214
- const defaultFunc = (value) => get(value, metaData.key);
1215
- if (metaData.transform) {
1216
- if (isPipe(metaData.transform)) {
1217
- return (value) => metaData.transform.transform(defaultFunc(value));
1218
- }
1219
- return metaData.fieldType === FieldType.Expression ? metaData.transform : (value) => metaData.transform(defaultFunc(value), value);
1220
- }
1221
- if (this.config.transformers && this.config.transformers[metaData.fieldType]) {
1222
- var tranformer = this.config.transformers[metaData.fieldType];
1223
- return (value) => tranformer(defaultFunc(value));
1224
- }
1225
- const defaultDateFormat = this.config.defaultSettings?.dateFormat ?? 'shortDate';
1226
- const defaultDateTimeFormat = this.config.defaultSettings?.dateTimeFormat ?? 'short';
1227
- switch (metaData.fieldType) {
1228
- case FieldType.Date:
1229
- const dateFormat = metaData.additional?.dateFormat ?? defaultDateFormat;
1230
- return (value) => this.datePipe.transform(defaultFunc(value), dateFormat);
1231
- case FieldType.DateTime:
1232
- const dateTimeFormat = metaData.additional?.dateTimeOptions?.format ?? defaultDateTimeFormat;
1233
- return (value) => this.datePipe.transform(defaultFunc(value), dateTimeFormat);
1234
- case FieldType.Currency:
1235
- return (value) => this.currencyPipe.transform(defaultFunc(value));
1236
- case FieldType.PhoneNumber:
1237
- return (value) => this.phonePipe.transform(defaultFunc(value));
1238
- case FieldType.Enum:
1239
- return (value) => this.casePipe.transform(metaData.additional?.enumMap[defaultFunc(value)]);
1240
- case FieldType.Boolean:
1241
- let forTrue = 'check';
1242
- let forFalse = '';
1243
- if (metaData.additional?.boolean?.forTrue) {
1244
- forTrue = metaData?.additional.boolean.forTrue.icon;
1245
- }
1246
- if (metaData.additional?.boolean?.showForFalse === true) {
1247
- forFalse = 'clear';
1248
- }
1249
- else if (metaData.additional?.boolean?.showForFalse?.icon) {
1250
- forFalse = metaData.additional?.boolean?.showForFalse?.icon;
1251
- }
1252
- return (value) => defaultFunc(value) ? forTrue : forFalse;
1253
- }
1254
- return defaultFunc;
1255
- }
1256
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TransformCreator, deps: [{ token: i2.DatePipe }, { token: i2.CurrencyPipe }, { token: PhoneNumberPipe }, { token: SpaceCasePipe }, { token: TableBuilderConfigToken }], target: i0.ɵɵFactoryTarget.Injectable }); }
1257
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TransformCreator, providedIn: 'root' }); }
1258
- }
1259
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TransformCreator, decorators: [{
1260
- type: Injectable,
1261
- args: [{
1262
- providedIn: 'root',
1263
- }]
1264
- }], ctorParameters: () => [{ type: i2.DatePipe }, { type: i2.CurrencyPipe }, { type: PhoneNumberPipe }, { type: SpaceCasePipe }, { type: undefined, decorators: [{
1265
- type: Inject,
1266
- args: [TableBuilderConfigToken]
1267
- }] }] });
1268
-
1269
- class GeneralTableSettings {
1270
- constructor(settings) {
1271
- this.headerSettings = new TableWrapperHeaderSettings();
1272
- this.footerSettings = new TableWrapperFooterSettings();
1273
- this.columnHeaderSettings = new TableColumnHeaderSettings();
1274
- if (settings) {
1275
- merge$1(this.headerSettings, settings.headerSettings);
1276
- merge$1(this.footerSettings, settings.footerSettings);
1277
- merge$1(this.columnHeaderSettings, settings.columnHeaderSettings);
1278
- }
1279
- }
1280
- }
1281
- class TableWrapperHeaderSettings {
1282
- constructor() {
1283
- this.hideExport = false;
1284
- this.hideFilter = false;
1285
- this.hideColumnSettings = false;
1286
- this.hideHeader = false;
1287
- this.hideSort = false;
1288
- this.collapse = false;
1289
- this.showTitleWhenCollapsed = true;
1290
- }
1291
- }
1292
- class TableWrapperFooterSettings {
1293
- constructor() {
1294
- this.collapse = false;
1295
- }
1296
- }
1297
- class TableColumnHeaderSettings {
1298
- constructor() {
1299
- this.noFilters = false;
1300
- this.noHeader = false;
1301
- }
1302
- }
1303
- class PesrsistedTableSettings {
1304
- constructor(tableSettings) {
1305
- this.collapseHeader = false;
1306
- this.collapseFooter = false;
1307
- if (tableSettings) {
1308
- this.collapseHeader = tableSettings.headerSettings?.collapse ?? tableSettings.collapseHeader;
1309
- this.collapseFooter = tableSettings.footerSettings?.collapse ?? tableSettings.collapseFooter;
1310
- }
1311
- }
1312
- }
1313
- class NotPersisitedTableSettings {
1314
- constructor(tableSettings) {
1315
- this.hideExport = true;
1316
- this.hideFilter = true;
1317
- this.hideColumnSettings = true;
1318
- this.hideSort = true;
1319
- this.showTitleWhenHeaderCollapsed = true;
1320
- this.hideHeader = true;
1321
- this.hideColumnHeaderFilters = true;
1322
- this.hideColumnHeader = true;
1323
- if (tableSettings) {
1324
- this.hideExport = tableSettings.headerSettings.hideExport;
1325
- this.hideColumnSettings = tableSettings.headerSettings.hideColumnSettings;
1326
- this.hideFilter = tableSettings.headerSettings.hideFilter;
1327
- this.hideSort = tableSettings.headerSettings.hideSort;
1328
- this.showTitleWhenHeaderCollapsed = tableSettings.headerSettings.showTitleWhenCollapsed;
1329
- this.hideHeader = tableSettings.headerSettings.hideHeader;
1330
- this.hideColumnHeaderFilters = tableSettings.columnHeaderSettings.noFilters;
1331
- this.hideColumnHeader = tableSettings.columnHeaderSettings.noHeader;
1332
- }
694
+ }
695
+ class NotPersisitedTableSettings {
696
+ constructor(tableSettings) {
697
+ this.hideExport = true;
698
+ this.hideFilter = true;
699
+ this.hideColumnSettings = true;
700
+ this.hideSort = true;
701
+ this.showTitleWhenHeaderCollapsed = true;
702
+ this.hideHeader = true;
703
+ this.hideColumnHeaderFilters = true;
704
+ this.hideColumnHeader = true;
705
+ if (tableSettings) {
706
+ this.hideExport = tableSettings.headerSettings.hideExport;
707
+ this.hideColumnSettings = tableSettings.headerSettings.hideColumnSettings;
708
+ this.hideFilter = tableSettings.headerSettings.hideFilter;
709
+ this.hideSort = tableSettings.headerSettings.hideSort;
710
+ this.showTitleWhenHeaderCollapsed = tableSettings.headerSettings.showTitleWhenCollapsed;
711
+ this.hideHeader = tableSettings.headerSettings.hideHeader;
712
+ this.hideColumnHeaderFilters = tableSettings.columnHeaderSettings.noFilters;
713
+ this.hideColumnHeader = tableSettings.columnHeaderSettings.noHeader;
714
+ }
1333
715
  }
1334
716
  }
1335
717
 
@@ -1364,6 +746,8 @@ const defaultTableState = {
1364
746
  groups: []
1365
747
  };
1366
748
 
749
+ const TableBuilderConfigToken = new InjectionToken('TableBuilderConfig');
750
+
1367
751
  var FilterType;
1368
752
  (function (FilterType) {
1369
753
  FilterType["NumberEquals"] = "Equals";
@@ -1924,455 +1308,995 @@ const orderMetaData = (state) => {
1924
1308
  Object.values(state.metaData).sort((a, b) => a.order - b.order);
1925
1309
  };
1926
1310
 
1927
- class ArrayColumnComponent {
1928
- constructor(config) {
1929
- this.config = config;
1930
- this.ArrayStyle = ArrayStyle;
1311
+ class ResizeColumnDirective {
1312
+ constructor(renderer, el, store) {
1313
+ this.renderer = renderer;
1314
+ this.el = el;
1315
+ this.store = store;
1316
+ this.getElementWidth = (elem) => (+(globalThis.getComputedStyle(elem).getPropertyValue('width').replace('px', '')));
1317
+ }
1318
+ ngOnInit() {
1319
+ if (this.resizable) {
1320
+ const { table, columnHead } = this.getTableAndColumnHeadHtmlElements();
1321
+ const resizer = this.createResizerSpanInColumnHead(columnHead);
1322
+ const aggregateMouseEventsMapped$ = this.mouseDownThroghMouseUpEventMapper(resizer, columnHead, table);
1323
+ const resizeColsData$ = aggregateMouseEventsMapped$.pipe(filter(({ mouseMove }) => !!mouseMove.buttons), map(({ mouseDownData, mouseMove }) => {
1324
+ const { newTableWidth, newColumnWidth } = this.calculateNewWidths(mouseDownData, mouseMove);
1325
+ return ({
1326
+ key: this.key,
1327
+ widthInPixel: newColumnWidth,
1328
+ tableSize: newTableWidth,
1329
+ });
1330
+ }), defaultShareReplay());
1331
+ this.store.setUserDefinedWidth(resizeColsData$.pipe(map(resizeData => ([{ key: this.key, widthInPixel: resizeData.widthInPixel }]))));
1332
+ this.store.setTableWidth(resizeColsData$.pipe(map(resizeData => resizeData.tableSize)));
1333
+ }
1334
+ }
1335
+ createResizerSpanInColumnHead(columnHead) {
1336
+ const resizer = this.renderer.createElement("span");
1337
+ this.renderer.addClass(resizer, "resize-holder");
1338
+ resizer.style['cursor'] = 'col-resize';
1339
+ resizer.style['user-select'] = 'none';
1340
+ resizer.style['width'] = '10px';
1341
+ resizer.style['height'] = '100%';
1342
+ resizer.style['position'] = 'absolute';
1343
+ resizer.style['right'] = '0';
1344
+ resizer.style['top'] = '0';
1345
+ resizer.style['z-index'] = '1';
1346
+ this.renderer.appendChild(columnHead, resizer);
1347
+ return resizer;
1348
+ }
1349
+ getTableAndColumnHeadHtmlElements() {
1350
+ const columnHead = this.el.nativeElement;
1351
+ const row = this.renderer.parentNode(columnHead);
1352
+ const table = this.renderer.parentNode(row);
1353
+ return ({ table, columnHead });
1354
+ }
1355
+ mouseDownThroghMouseUpEventMapper(resizer, columnHead, table) {
1356
+ return this.resizerMouseDownEventMapper(resizer, columnHead, table)
1357
+ .pipe(switchMap(mouseDownData => fromEvent(table, "mousemove").pipe(map(mouseMove => ({ mouseDownData, mouseMove })), takeUntil(fromEvent(document, "mouseup")))));
1358
+ }
1359
+ resizerMouseDownEventMapper(resizer, columnHead, table) {
1360
+ return fromEvent(resizer, "mousedown").pipe(map(event => ({
1361
+ startPageX: event.pageX,
1362
+ startColumnWidth: this.getElementWidth(columnHead),
1363
+ startTableWidth: this.getElementWidth(table),
1364
+ })));
1365
+ }
1366
+ calculateNewWidths(mouseDownData, mouseMove) {
1367
+ const change = (mouseMove.pageX - mouseDownData.startPageX);
1368
+ let newColumnWidth = mouseDownData.startColumnWidth + change;
1369
+ if (newColumnWidth < 1) {
1370
+ newColumnWidth = 1;
1371
+ }
1372
+ const columnChange = newColumnWidth - mouseDownData.startColumnWidth;
1373
+ const newTableWidth = (mouseDownData.startTableWidth + columnChange);
1374
+ return ({ newTableWidth, newColumnWidth });
1375
+ }
1376
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ResizeColumnDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TableStore }], target: i0.ɵɵFactoryTarget.Directive }); }
1377
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: ResizeColumnDirective, isStandalone: true, selector: "[resizeColumn]", inputs: { resizable: ["resizeColumn", "resizable"], key: "key" }, ngImport: i0 }); }
1378
+ }
1379
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ResizeColumnDirective, decorators: [{
1380
+ type: Directive,
1381
+ args: [{ selector: "[resizeColumn]" }]
1382
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: TableStore }], propDecorators: { resizable: [{
1383
+ type: Input,
1384
+ args: ["resizeColumn"]
1385
+ }], key: [{
1386
+ type: Input
1387
+ }] } });
1388
+
1389
+ class StopPropagationDirective {
1390
+ onClick(event) {
1391
+ event.stopPropagation();
1392
+ }
1393
+ onMousedown(event) {
1394
+ event.stopPropagation();
1395
+ }
1396
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: StopPropagationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1397
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: StopPropagationDirective, isStandalone: true, selector: "[stop-propagation]", host: { listeners: { "click": "onClick($event)", "mousedown": "onMousedown($event)" } }, ngImport: i0 }); }
1398
+ }
1399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: StopPropagationDirective, decorators: [{
1400
+ type: Directive,
1401
+ args: [{ selector: "[stop-propagation]" }]
1402
+ }], propDecorators: { onClick: [{
1403
+ type: HostListener,
1404
+ args: ["click", ["$event"]]
1405
+ }], onMousedown: [{
1406
+ type: HostListener,
1407
+ args: ["mousedown", ["$event"]]
1408
+ }] } });
1409
+
1410
+ class SpaceCasePipe {
1411
+ transform(value) {
1412
+ return spaceCase(value);
1413
+ }
1414
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SpaceCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1415
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: SpaceCasePipe, isStandalone: true, name: "spaceCase" }); }
1416
+ }
1417
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SpaceCasePipe, decorators: [{
1418
+ type: Pipe,
1419
+ args: [{ name: 'spaceCase' }]
1420
+ }] });
1421
+ /**
1422
+ * Adds a space before uppercase letters that either
1423
+ * 1. follows a lowercase letter or digit
1424
+ * 2. or precedes a lowercase letter and follows an alpha-numeric character
1425
+ *
1426
+ * Uppercases the first digit
1427
+ *
1428
+ * Turns underscores into spaces
1429
+ */
1430
+ function spaceCase(value) {
1431
+ const phrase = value?.replace(/([a-z0-9])([A-Z])|([a-zA-Z0-9])([A-Z])(?=[a-z])|_/g, '$1$3 $2$4');
1432
+ // uppercase the first character of every word
1433
+ return phrase?.replace(/(^| )(\w)/g, x => x.toUpperCase());
1434
+ }
1435
+
1436
+ class InListFilterComponent {
1437
+ constructor(ref, tableState) {
1438
+ this.ref = ref;
1439
+ this.tableState = tableState;
1440
+ this.value = [];
1441
+ this.FieldType = FieldType;
1442
+ this.onChange = (_) => { };
1443
+ this.onTouched = () => { };
1444
+ this.selectedKeys = [];
1445
+ }
1446
+ writeValue(obj) {
1447
+ this.value = obj;
1448
+ if (this.value) {
1449
+ this.selectedKeys = this.value.map(f => f);
1450
+ }
1451
+ this.ref.markForCheck();
1452
+ }
1453
+ registerOnChange(fn) {
1454
+ this.onChange = fn;
1455
+ }
1456
+ registerOnTouched(fn) {
1457
+ this.onTouched = fn;
1931
1458
  }
1932
1459
  ngOnInit() {
1933
- this.additional = this.metaData?.additional ?? this.config.arrayInfo ?? { limit: 3, arrayStyle: ArrayStyle.NewLine };
1934
- this.array = (this.array ?? []).slice(0, this.additional.limit);
1460
+ this.keyValues$ = this.tableState.getMetaData$(this.key).pipe(tap(metaData => this.metaData = metaData), map(metaData => {
1461
+ if (metaData.additional?.filterOptions?.filterableValues) {
1462
+ return metaData.additional.filterOptions.filterableValues.reduce((prev, cur) => { prev[cur] = cur; return prev; }, {});
1463
+ }
1464
+ else {
1465
+ if (metaData.fieldType === FieldType.Enum) {
1466
+ return metaData.additional.enumMap;
1467
+ }
1468
+ }
1469
+ return {};
1470
+ }));
1935
1471
  }
1936
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ArrayColumnComponent, deps: [{ token: TableBuilderConfigToken }], target: i0.ɵɵFactoryTarget.Component }); }
1937
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: ArrayColumnComponent, isStandalone: false, selector: "tb-array-column", inputs: { array: "array", metaData: "metaData" }, ngImport: i0, template: `
1938
- <ng-container *ngIf="array.length === 0; else hasVals">-</ng-container>
1939
- <ng-template #hasVals>
1940
- <ng-container [ngSwitch]="additional.arrayStyle">
1941
- <ng-container *ngSwitchCase="ArrayStyle.CommaDelimited">
1942
- <span *ngFor="let val of array; last as isLast">{{val}}<ng-container *ngIf="!isLast">, </ng-container> </span>
1943
- </ng-container>
1944
- <ng-container *ngSwitchCase="ArrayStyle.NewLine">
1945
- <span *ngFor="let val of array; last as isLast">{{val}}<ng-container *ngIf="!isLast"><br /></ng-container> </span>
1946
- </ng-container>
1947
- </ng-container>
1948
- </ng-template>
1949
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1472
+ selectFilterChanged($event, val) {
1473
+ if ($event.checked) {
1474
+ this.selectedKeys.push(val);
1475
+ }
1476
+ else {
1477
+ this.selectedKeys = this.selectedKeys.filter(item => item !== val);
1478
+ }
1479
+ this.value = this.selectedKeys;
1480
+ this.onChange(this.value);
1481
+ }
1482
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InListFilterComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
1483
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: InListFilterComponent, isStandalone: true, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: { key: "key" }, providers: [{
1484
+ provide: NG_VALUE_ACCESSOR,
1485
+ useExisting: InListFilterComponent,
1486
+ multi: true
1487
+ }], ngImport: i0, template: `
1488
+ @for (item of keyValues$ | async| keyvalue; track item) {
1489
+ <div >
1490
+ <mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
1491
+ {{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
1492
+ </mat-checkbox>
1493
+ </div>
1494
+ }
1495
+ `, isInline: true, dependencies: [{ kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1950
1496
  }
1951
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ArrayColumnComponent, decorators: [{
1497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InListFilterComponent, decorators: [{
1952
1498
  type: Component,
1953
1499
  args: [{
1954
- selector: 'tb-array-column',
1500
+ selector: 'tb-in-list-filter , [tb-in-list-filter]',
1955
1501
  template: `
1956
- <ng-container *ngIf="array.length === 0; else hasVals">-</ng-container>
1957
- <ng-template #hasVals>
1958
- <ng-container [ngSwitch]="additional.arrayStyle">
1959
- <ng-container *ngSwitchCase="ArrayStyle.CommaDelimited">
1960
- <span *ngFor="let val of array; last as isLast">{{val}}<ng-container *ngIf="!isLast">, </ng-container> </span>
1961
- </ng-container>
1962
- <ng-container *ngSwitchCase="ArrayStyle.NewLine">
1963
- <span *ngFor="let val of array; last as isLast">{{val}}<ng-container *ngIf="!isLast"><br /></ng-container> </span>
1964
- </ng-container>
1965
- </ng-container>
1966
- </ng-template>
1502
+ @for (item of keyValues$ | async| keyvalue; track item) {
1503
+ <div >
1504
+ <mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
1505
+ {{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
1506
+ </mat-checkbox>
1507
+ </div>
1508
+ }
1967
1509
  `,
1968
1510
  changeDetection: ChangeDetectionStrategy.OnPush,
1969
- standalone: false
1511
+ providers: [{
1512
+ provide: NG_VALUE_ACCESSOR,
1513
+ useExisting: InListFilterComponent,
1514
+ multi: true
1515
+ }],
1516
+ imports: [MatCheckbox, StopPropagationDirective, AsyncPipe, KeyValuePipe, SpaceCasePipe]
1970
1517
  }]
1971
- }], ctorParameters: () => [{ type: undefined, decorators: [{
1972
- type: Inject,
1973
- args: [TableBuilderConfigToken]
1974
- }] }], propDecorators: { array: [{
1975
- type: Input
1976
- }], metaData: [{
1518
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: TableStore }], propDecorators: { key: [{
1977
1519
  type: Input
1978
1520
  }] } });
1979
1521
 
1980
- class LinkColumnComponent {
1981
- constructor(store) {
1982
- this.store = store;
1983
- this.transform = (a) => a;
1984
- this.link = (metaData) => this.store.getLinkMap(metaData);
1522
+ class HeaderMenuComponent {
1523
+ constructor(tableState) {
1524
+ this.tableState = tableState;
1525
+ this.FieldType = FieldType;
1526
+ this.FilterType = FilterType;
1985
1527
  }
1986
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: LinkColumnComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
1987
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: LinkColumnComponent, isStandalone: false, selector: "tb-link-column", inputs: { metaData: "metaData", element: "element", transform: "transform" }, ngImport: i0, template: `
1988
- <ng-container *ngrxLet="(link | func : (metaData)) as linkInfo">
1989
- <a *ngIf="$any(linkInfo).useRouterLink; else hrefLink" target="{{$any(linkInfo).target}}"
1990
- [routerLink]=" [($any(linkInfo).link | func : element)]"
1991
- [queryParams]="$any(linkInfo).routerLinkOptions.queryParams | func : element"
1992
- [fragment]="$any(linkInfo).routerLinkOptions.fragment"
1993
- [preserveFragment]="$any(linkInfo).routerLinkOptions.preserveFragment"
1994
- [queryParamsHandling]="$any(linkInfo).routerLinkOptions.queryParamsHandling"
1995
- >
1996
- {{transform | func : element}}
1997
- </a>
1998
- <ng-template #hrefLink>
1999
- <a target="{{$any(linkInfo).target}}"
2000
- href="{{($any(linkInfo).link | func : element)}}">
2001
- {{transform | func : element}}
2002
- </a>
2003
- </ng-template>
2004
- </ng-container>
2005
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: FunctionPipe, name: "func" }] }); }
1528
+ hideField(key) {
1529
+ this.tableState.hideColumn(key);
1530
+ }
1531
+ ngOnInit() {
1532
+ this.resetFilterType();
1533
+ }
1534
+ resetFilterType() {
1535
+ if (this.metaData.additional?.filterOptions?.filterableValues) {
1536
+ this.myFilterType = FilterType.In;
1537
+ return;
1538
+ }
1539
+ switch (this.metaData.fieldType) {
1540
+ case FieldType.String:
1541
+ case FieldType.Link:
1542
+ case FieldType.PhoneNumber:
1543
+ case FieldType.Array:
1544
+ case FieldType.Unknown:
1545
+ this.myFilterType = FilterType.StringContains;
1546
+ break;
1547
+ case FieldType.Currency:
1548
+ case FieldType.Number:
1549
+ this.myFilterType = FilterType.NumberEquals;
1550
+ break;
1551
+ case FieldType.Boolean:
1552
+ this.myFilterType = FilterType.BooleanEquals;
1553
+ break;
1554
+ case FieldType.Date:
1555
+ case FieldType.DateTime:
1556
+ this.myFilterType = FilterType.DateIsOn;
1557
+ break;
1558
+ case FieldType.Enum:
1559
+ this.myFilterType = FilterType.In;
1560
+ break;
1561
+ }
1562
+ }
1563
+ setStringFilterType() {
1564
+ this.myFilterType = this.myFilterType === FilterType.StringContains ? FilterType.StringDoesNotContain : FilterType.StringContains;
1565
+ }
1566
+ setFilterType(filterType) {
1567
+ if (filterType === this.myFilterType) {
1568
+ this.resetFilterType();
1569
+ }
1570
+ else {
1571
+ this.myFilterType = filterType;
1572
+ }
1573
+ }
1574
+ onEnter(filter) {
1575
+ if (filter.filterValue != undefined && filter.filterType) {
1576
+ this.tableState.addFilter(filter);
1577
+ this.trigger.closeMenu();
1578
+ }
1579
+ }
1580
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: HeaderMenuComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
1581
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: HeaderMenuComponent, isStandalone: true, selector: "tb-header-menu", inputs: { filter: "filter", metaData: "metaData" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<button mat-icon-button class=\"open-menu-icon-button\" disableRipple [matMenuTriggerFor]=\"menu\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\" >\r\n <button mat-menu-item (click)=\"tableState.addGroupByKey(metaData.key)\">\r\n <mat-icon color=\"primary\">group</mat-icon>\r\n <span>Group By</span>\r\n </button>\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\" class=\"tb-header-filter\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font auto-width\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\" class=\"header-filter-icon-button\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation>\r\n \r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix class=\"tb-header-prefix\">\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberLessThan)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n <mat-icon class=\"suffix-icons\"\r\n >\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberGreaterThan)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\" >\r\n <mat-icon class=\"suffix-icons\"\r\n >\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberEquals)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n <span class=\"suffix-icons\"\r\n >\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div>\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date || metaData.fieldType === FieldType.DateTime\">\r\n <mat-form-field class=\"font auto-width\" stop-propagation >\r\n <span matPrefix class=\"tb-header-prefix\">\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateOnOrAfter)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n <mat-icon class=\"suffix-icons underline\">arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateOnOrBefore)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n <mat-icon class=\"suffix-icons underline\">arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateIsOn)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n <span class=\"suffix-icons underline\"> =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle class=\"date-toggle header-filter-icon-button\" matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.menu-icon{font-size:16px;line-height:16px;vertical-align:top;height:16px;width:16px}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}.auto-width{width:260px;margin:5px;display:block;height:55px}.open-menu-icon-button{height:28px;width:28px;padding:6px}.header-filter-icon-button{height:18px;width:18px;font-size:18px;padding:0;margin:0 2px}.header-filter-icon-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.header-filter-icon-button.chosen-icon,.header-filter-icon-button.chosen-icon ::ng-deep *{height:22px;width:22px;font-size:22px;color:green}mat-icon.mat-icon.suffix-icons.underline{height:20px;text-decoration:underline .1px solid}.chosen-icon mat-icon.mat-icon.suffix-icons.underline{height:24px}::ng-deep .mat-mdc-form-field-icon-prefix:has(.tb-header-prefix),.tb-header-prefix{padding:0;flex-basis:36%}.tb-header-filter ::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}.tb-header-filter ::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: 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: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2006
1582
  }
2007
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: LinkColumnComponent, decorators: [{
1583
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: HeaderMenuComponent, decorators: [{
2008
1584
  type: Component,
2009
- args: [{
2010
- selector: "tb-link-column",
2011
- template: `
2012
- <ng-container *ngrxLet="(link | func : (metaData)) as linkInfo">
2013
- <a *ngIf="$any(linkInfo).useRouterLink; else hrefLink" target="{{$any(linkInfo).target}}"
2014
- [routerLink]=" [($any(linkInfo).link | func : element)]"
2015
- [queryParams]="$any(linkInfo).routerLinkOptions.queryParams | func : element"
2016
- [fragment]="$any(linkInfo).routerLinkOptions.fragment"
2017
- [preserveFragment]="$any(linkInfo).routerLinkOptions.preserveFragment"
2018
- [queryParamsHandling]="$any(linkInfo).routerLinkOptions.queryParamsHandling"
2019
- >
2020
- {{transform | func : element}}
2021
- </a>
2022
- <ng-template #hrefLink>
2023
- <a target="{{$any(linkInfo).target}}"
2024
- href="{{($any(linkInfo).link | func : element)}}">
2025
- {{transform | func : element}}
2026
- </a>
2027
- </ng-template>
2028
- </ng-container>
2029
- `,
2030
- standalone: false
2031
- }]
2032
- }], ctorParameters: () => [{ type: TableStore }], propDecorators: { metaData: [{
1585
+ args: [{ selector: 'tb-header-menu', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIconButton, MatMenuTrigger, MatIcon, MatMenu, MatMenuItem, FormsModule, NgSwitch, NgIf, InListFilterComponent, NgSwitchCase, MatFormField, StopPropagationDirective, MatPrefix, MatLabel, MatInput, MatSuffix, MatTooltip, NgClass, MatRadioGroup, MatRadioButton, MatDatepickerInput, MatDatepickerToggle, MatDatepicker, MatButton], template: "<button mat-icon-button class=\"open-menu-icon-button\" disableRipple [matMenuTriggerFor]=\"menu\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\" >\r\n <button mat-menu-item (click)=\"tableState.addGroupByKey(metaData.key)\">\r\n <mat-icon color=\"primary\">group</mat-icon>\r\n <span>Group By</span>\r\n </button>\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\" class=\"tb-header-filter\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font auto-width\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\" class=\"header-filter-icon-button\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation>\r\n \r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix class=\"tb-header-prefix\">\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberLessThan)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n <mat-icon class=\"suffix-icons\"\r\n >\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberGreaterThan)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\" >\r\n <mat-icon class=\"suffix-icons\"\r\n >\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberEquals)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n <span class=\"suffix-icons\"\r\n >\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div>\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date || metaData.fieldType === FieldType.DateTime\">\r\n <mat-form-field class=\"font auto-width\" stop-propagation >\r\n <span matPrefix class=\"tb-header-prefix\">\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateOnOrAfter)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n <mat-icon class=\"suffix-icons underline\">arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateOnOrBefore)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n <mat-icon class=\"suffix-icons underline\">arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateIsOn)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n <span class=\"suffix-icons underline\"> =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle class=\"date-toggle header-filter-icon-button\" matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.menu-icon{font-size:16px;line-height:16px;vertical-align:top;height:16px;width:16px}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}.auto-width{width:260px;margin:5px;display:block;height:55px}.open-menu-icon-button{height:28px;width:28px;padding:6px}.header-filter-icon-button{height:18px;width:18px;font-size:18px;padding:0;margin:0 2px}.header-filter-icon-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.header-filter-icon-button.chosen-icon,.header-filter-icon-button.chosen-icon ::ng-deep *{height:22px;width:22px;font-size:22px;color:green}mat-icon.mat-icon.suffix-icons.underline{height:20px;text-decoration:underline .1px solid}.chosen-icon mat-icon.mat-icon.suffix-icons.underline{height:24px}::ng-deep .mat-mdc-form-field-icon-prefix:has(.tb-header-prefix),.tb-header-prefix{padding:0;flex-basis:36%}.tb-header-filter ::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}.tb-header-filter ::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
1586
+ }], ctorParameters: () => [{ type: TableStore }], propDecorators: { filter: [{
2033
1587
  type: Input
2034
- }], element: [{
1588
+ }], metaData: [{
2035
1589
  type: Input
2036
- }], transform: [{
1590
+ }], trigger: [{
1591
+ type: ViewChild,
1592
+ args: [MatMenuTrigger]
1593
+ }] } });
1594
+
1595
+ class ColumnTotalPipe {
1596
+ transform(data, metaData) {
1597
+ const dataToCalculate = data.filter(d => !d.isGroupHeader && !d.isGroupFooter);
1598
+ switch (metaData.additional.footer.type) {
1599
+ case 'sum':
1600
+ return sumBy(dataToCalculate, metaData.key);
1601
+ }
1602
+ return null;
1603
+ }
1604
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ColumnTotalPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1605
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: ColumnTotalPipe, isStandalone: true, name: "columnTotal" }); }
1606
+ }
1607
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ColumnTotalPipe, decorators: [{
1608
+ type: Pipe,
1609
+ args: [{ name: 'columnTotal' }]
1610
+ }] });
1611
+
1612
+ class PhoneNumberPipe {
1613
+ transform(phoneNum) {
1614
+ if (phoneNum) {
1615
+ phoneNum = phoneNum.replace(/\D/g, '');
1616
+ if (phoneNum[0] === '1') {
1617
+ phoneNum = phoneNum.substring(1);
1618
+ }
1619
+ return '(' + phoneNum.slice(0, 3) + ') ' + phoneNum.slice(3, 6) + '-' + phoneNum.slice(6, 10) + ' ' + phoneNum.slice(10);
1620
+ }
1621
+ }
1622
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PhoneNumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1623
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: PhoneNumberPipe, isStandalone: true, name: "phone" }); }
1624
+ }
1625
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PhoneNumberPipe, decorators: [{
1626
+ type: Pipe,
1627
+ args: [{ name: 'phone' }]
1628
+ }] });
1629
+
1630
+ class PreventEnterDirective {
1631
+ onKeyDown() {
1632
+ return false;
1633
+ }
1634
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PreventEnterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1635
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: PreventEnterDirective, isStandalone: true, selector: "preventEnter", host: { listeners: { "keydown.enter": "onKeyDown()" } }, ngImport: i0 }); }
1636
+ }
1637
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PreventEnterDirective, decorators: [{
1638
+ type: Directive,
1639
+ args: [{ selector: 'preventEnter' }]
1640
+ }], propDecorators: { onKeyDown: [{
1641
+ type: HostListener,
1642
+ args: ['keydown.enter']
1643
+ }] } });
1644
+
1645
+ class AutoFocusDirective {
1646
+ constructor(elementRef) {
1647
+ this.elementRef = elementRef;
1648
+ this.autoFocus = true;
1649
+ }
1650
+ ngAfterViewInit() {
1651
+ if (this.autoFocus) {
1652
+ setTimeout(() => {
1653
+ this.elementRef.nativeElement.focus();
1654
+ });
1655
+ }
1656
+ }
1657
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: AutoFocusDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1658
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: AutoFocusDirective, isStandalone: true, selector: "[autoFocus]", inputs: { autoFocus: "autoFocus" }, ngImport: i0 }); }
1659
+ }
1660
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: AutoFocusDirective, decorators: [{
1661
+ type: Directive,
1662
+ args: [{ selector: '[autoFocus]' }]
1663
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { autoFocus: [{
2037
1664
  type: Input
2038
1665
  }] } });
2039
1666
 
2040
- class InitializationComponent {
2041
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InitializationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2042
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: InitializationComponent, isStandalone: false, selector: "ng-component", viewQueries: [{ propertyName: "linkTemplate", first: true, predicate: ["link"], descendants: true, static: true }, { propertyName: "imageUrlTemplate", first: true, predicate: ["imageUrl"], descendants: true, static: true }, { propertyName: "currencyTemplate", first: true, predicate: ["currency"], descendants: true, static: true }, { propertyName: "arrayTemplate", first: true, predicate: ["array"], descendants: true, static: true }, { propertyName: "defaultTemplate", first: true, predicate: ["default"], descendants: true, static: true }, { propertyName: "defaultWithIcon", first: true, predicate: ["defaultWithIcon"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #link let-element='element' let-metaData='metaData' let-transform='transform'>\r\n <tb-link-column [element]=\"element\" [metaData]=\"metaData\" [transform]=\"transform\"></tb-link-column>\r\n</ng-template>\r\n\r\n<ng-template #imageUrl let-element='element' let-metaData='metaData'>\r\n <span>\r\n <img src=\"{{element[metaData.key]}}\" height=\"75px\" width=\"75px\" />\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #array let-element='element' let-metaData='metaData'>\r\n <tb-array-column [array]='element[metaData.key]' [metaData]='metaData'></tb-array-column>\r\n</ng-template>\r\n\r\n<ng-template #default let-element='element' let-metaData='metaData' let-transform='transform' >\r\n <span>{{ transform | func : element }}</span>\r\n</ng-template>\r\n\r\n<ng-template #defaultWithIcon let-element='element' let-metaData='metaData' let-transform='transform' >\r\n <mat-icon>{{ transform | func : element }}</mat-icon>\r\n</ng-template>\r\n", dependencies: [{ kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ArrayColumnComponent, selector: "tb-array-column", inputs: ["array", "metaData"] }, { kind: "component", type: LinkColumnComponent, selector: "tb-link-column", inputs: ["metaData", "element", "transform"] }, { kind: "pipe", type: FunctionPipe, name: "func" }] }); }
1667
+ class ClickSubjectDirective extends Subject {
1668
+ constructor() {
1669
+ super();
1670
+ }
1671
+ set clickSubject(val) {
1672
+ this._val = val;
1673
+ }
1674
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ClickSubjectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1675
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: ClickSubjectDirective, isStandalone: true, selector: "[clickSubject]", inputs: { clickSubject: "clickSubject" }, host: { listeners: { "click": "next(this._val)" } }, exportAs: ["clickSubject"], usesInheritance: true, ngImport: i0 }); }
2043
1676
  }
2044
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InitializationComponent, decorators: [{
2045
- type: Component,
2046
- args: [{ standalone: false, template: "<ng-template #link let-element='element' let-metaData='metaData' let-transform='transform'>\r\n <tb-link-column [element]=\"element\" [metaData]=\"metaData\" [transform]=\"transform\"></tb-link-column>\r\n</ng-template>\r\n\r\n<ng-template #imageUrl let-element='element' let-metaData='metaData'>\r\n <span>\r\n <img src=\"{{element[metaData.key]}}\" height=\"75px\" width=\"75px\" />\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #array let-element='element' let-metaData='metaData'>\r\n <tb-array-column [array]='element[metaData.key]' [metaData]='metaData'></tb-array-column>\r\n</ng-template>\r\n\r\n<ng-template #default let-element='element' let-metaData='metaData' let-transform='transform' >\r\n <span>{{ transform | func : element }}</span>\r\n</ng-template>\r\n\r\n<ng-template #defaultWithIcon let-element='element' let-metaData='metaData' let-transform='transform' >\r\n <mat-icon>{{ transform | func : element }}</mat-icon>\r\n</ng-template>\r\n" }]
2047
- }], propDecorators: { linkTemplate: [{
2048
- type: ViewChild,
2049
- args: ['link', { static: true }]
2050
- }], imageUrlTemplate: [{
2051
- type: ViewChild,
2052
- args: ['imageUrl', { static: true }]
2053
- }], currencyTemplate: [{
2054
- type: ViewChild,
2055
- args: ['currency', { static: true }]
2056
- }], arrayTemplate: [{
2057
- type: ViewChild,
2058
- args: ['array', { static: true }]
2059
- }], defaultTemplate: [{
2060
- type: ViewChild,
2061
- args: ['default', { static: true }]
2062
- }], defaultWithIcon: [{
2063
- type: ViewChild,
2064
- args: ['defaultWithIcon', { static: true }]
1677
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ClickSubjectDirective, decorators: [{
1678
+ type: Directive,
1679
+ args: [{
1680
+ selector: '[clickSubject]',
1681
+ exportAs: 'clickSubject',
1682
+ host: {
1683
+ '(click)': 'next(this._val)'
1684
+ }
1685
+ }]
1686
+ }], ctorParameters: () => [], propDecorators: { clickSubject: [{
1687
+ type: Input,
1688
+ args: ['clickSubject']
2065
1689
  }] } });
2066
1690
 
2067
- class TableTemplateService {
2068
- initTemplates() {
2069
- this.templates = {};
2070
- this.templates[FieldType.Array] = this.instance.arrayTemplate;
2071
- this.templates[FieldType.Boolean] = this.instance.defaultWithIcon;
2072
- this.templates[FieldType.Currency] = this.instance.defaultTemplate;
2073
- this.templates[FieldType.Date] = this.instance.defaultTemplate;
2074
- this.templates[FieldType.DateTime] = this.instance.defaultTemplate;
2075
- this.templates[FieldType.Expression] = this.instance.defaultTemplate;
2076
- this.templates[FieldType.ImageUrl] = this.instance.imageUrlTemplate;
2077
- this.templates[FieldType.Link] = this.instance.linkTemplate;
2078
- this.templates[FieldType.Number] = this.instance.defaultTemplate;
2079
- this.templates[FieldType.PhoneNumber] = this.instance.defaultTemplate;
2080
- this.templates[FieldType.String] = this.instance.defaultTemplate;
2081
- this.templates[FieldType.Unknown] = this.instance.defaultTemplate;
2082
- this.templates[FieldType.Enum] = this.instance.defaultTemplate;
1691
+ class ClickEmitterDirective extends Subject {
1692
+ constructor() {
1693
+ super();
1694
+ }
1695
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ClickEmitterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1696
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: ClickEmitterDirective, isStandalone: true, selector: "[clickEmitter]", host: { listeners: { "click": "next(true)" } }, exportAs: ["clickEmitter"], usesInheritance: true, ngImport: i0 }); }
1697
+ }
1698
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ClickEmitterDirective, decorators: [{
1699
+ type: Directive,
1700
+ args: [{
1701
+ selector: '[clickEmitter]',
1702
+ exportAs: 'clickEmitter',
1703
+ host: {
1704
+ '(click)': 'next(true)'
1705
+ }
1706
+ }]
1707
+ }], ctorParameters: () => [] });
1708
+
1709
+ class DialogService {
1710
+ constructor() {
1711
+ this.allOpenOpDialogs = [];
2083
1712
  }
2084
- getTemplate(metaData) {
2085
- let tmp = this.templates[metaData.fieldType];
2086
- if (metaData.useIcon) {
2087
- if (tmp === this.instance.defaultTemplate) {
2088
- tmp = this.instance.defaultWithIcon;
2089
- }
2090
- }
2091
- return tmp;
1713
+ addDialogRef(ref) {
1714
+ this.allOpenOpDialogs.push(ref);
2092
1715
  }
2093
- constructor(resolver, i) {
2094
- const factory = resolver.resolveComponentFactory(InitializationComponent);
2095
- const c = factory.create(i);
2096
- this.instance = c.instance;
2097
- this.initTemplates();
1716
+ removeDialogRef(ref) {
1717
+ this.allOpenOpDialogs = this.allOpenOpDialogs.filter(rf => ref.id !== rf.id);
2098
1718
  }
2099
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableTemplateService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
2100
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableTemplateService, providedIn: 'root' }); }
1719
+ closeAllOpDialogs() {
1720
+ this.allOpenOpDialogs.forEach(ref => ref.close());
1721
+ }
1722
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1723
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogService, providedIn: 'root' }); }
2101
1724
  }
2102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableTemplateService, decorators: [{
1725
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogService, decorators: [{
2103
1726
  type: Injectable,
2104
- args: [{ providedIn: 'root' }]
2105
- }], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }] });
1727
+ args: [{
1728
+ providedIn: 'root'
1729
+ }]
1730
+ }] });
2106
1731
 
2107
- class InListFilterComponent {
2108
- constructor(ref, tableState) {
2109
- this.ref = ref;
2110
- this.tableState = tableState;
2111
- this.value = [];
2112
- this.FieldType = FieldType;
2113
- this.onChange = (_) => { };
2114
- this.onTouched = () => { };
2115
- this.selectedKeys = [];
2116
- }
2117
- writeValue(obj) {
2118
- this.value = obj;
2119
- if (this.value) {
2120
- this.selectedKeys = this.value.map(f => f);
1732
+ class DialogWrapper {
1733
+ set template(tmpl) {
1734
+ if (this.viewEmbeded) {
1735
+ this.vcr.clear();
2121
1736
  }
2122
- this.ref.markForCheck();
1737
+ this.viewEmbeded = true;
1738
+ this.vcr.createEmbeddedView(tmpl, this.viewContext);
2123
1739
  }
2124
- registerOnChange(fn) {
2125
- this.onChange = fn;
1740
+ set close(closeMethod) {
1741
+ this.viewContext.close = closeMethod;
2126
1742
  }
2127
- registerOnTouched(fn) {
2128
- this.onTouched = fn;
1743
+ set data(value) {
1744
+ this.viewContext.$implicit = value;
1745
+ this.viewContext.opDialog = value;
2129
1746
  }
2130
- ngOnInit() {
2131
- this.keyValues$ = this.tableState.getMetaData$(this.key).pipe(tap(metaData => this.metaData = metaData), map(metaData => {
2132
- if (metaData.additional?.filterOptions?.filterableValues) {
2133
- return metaData.additional.filterOptions.filterableValues.reduce((prev, cur) => { prev[cur] = cur; return prev; }, {});
1747
+ constructor(vcr) {
1748
+ this.vcr = vcr;
1749
+ this.viewEmbeded = false;
1750
+ this.viewContext = {
1751
+ close: () => { },
1752
+ };
1753
+ }
1754
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogWrapper, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
1755
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: DialogWrapper, isStandalone: false, selector: "app-dialog-content", ngImport: i0, template: ``, isInline: true }); }
1756
+ }
1757
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogWrapper, decorators: [{
1758
+ type: Component,
1759
+ args: [{
1760
+ selector: 'app-dialog-content',
1761
+ template: ``,
1762
+ standalone: false
1763
+ }]
1764
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }] });
1765
+ const defaultDialogConfig = {
1766
+ maxHeight: '95vh',
1767
+ };
1768
+ class DialogDirective {
1769
+ set opDialogConfig(config) {
1770
+ this._dialogConfig = { ...defaultDialogConfig, ...config };
1771
+ }
1772
+ get opDialogConfig() {
1773
+ return this._dialogConfig;
1774
+ }
1775
+ set state(open_close) {
1776
+ this._data.next(open_close);
1777
+ }
1778
+ constructor(templateRef, dialog, service) {
1779
+ this.templateRef = templateRef;
1780
+ this.dialog = dialog;
1781
+ this.service = service;
1782
+ this.opDialogClosed = new EventEmitter();
1783
+ this._dialogConfig = defaultDialogConfig;
1784
+ this.add_opDialog_Class = true;
1785
+ this._data = new Subject();
1786
+ this.subscription = this._data.pipe(switchAll()).subscribe(d => {
1787
+ if (d) {
1788
+ this.opDialogConfig.data = d;
1789
+ this.setDialogState(true);
2134
1790
  }
2135
1791
  else {
2136
- if (metaData.fieldType === FieldType.Enum) {
2137
- return metaData.additional.enumMap;
2138
- }
1792
+ this.setDialogState(false);
2139
1793
  }
2140
- return {};
2141
- }));
1794
+ });
2142
1795
  }
2143
- selectFilterChanged($event, val) {
2144
- if ($event.checked) {
2145
- this.selectedKeys.push(val);
1796
+ close() {
1797
+ this.dialogRef?.close();
1798
+ }
1799
+ initDialog() {
1800
+ if (this.nativeElement) {
1801
+ const rect = this.nativeElement.getBoundingClientRect();
1802
+ const position = { left: `${rect.left}px`, top: `${rect.bottom - 50}px` };
1803
+ this.opDialogConfig = { ...this.opDialogConfig, position };
2146
1804
  }
2147
- else {
2148
- this.selectedKeys = this.selectedKeys.filter(item => item !== val);
1805
+ if (this.add_opDialog_Class) {
1806
+ this.opDialogConfig.panelClass = [...(Array.isArray(this.opDialogConfig.panelClass) ? this.opDialogConfig.panelClass : this.opDialogConfig.panelClass ? [this.opDialogConfig.panelClass] : []), 'opDialog'];
2149
1807
  }
2150
- this.value = this.selectedKeys;
2151
- this.onChange(this.value);
1808
+ this.dialogRef = this.dialog.open(DialogWrapper, this.opDialogConfig);
1809
+ this.componentWrapper = this.dialogRef.componentInstance;
1810
+ this.componentWrapper.close = () => this.dialogRef?.close();
1811
+ this.componentWrapper.data = this.opDialogConfig.data;
1812
+ this.componentWrapper.template = this.templateRef;
1813
+ if (!this.opDialogConfig.disableClose) {
1814
+ this.service.addDialogRef(this.dialogRef);
1815
+ }
1816
+ const sub = this.dialogRef.afterClosed().subscribe(() => {
1817
+ this.opDialogClosed.emit(true);
1818
+ this.service.removeDialogRef(this.dialogRef);
1819
+ this.dialogRef = undefined;
1820
+ sub.unsubscribe();
1821
+ });
2152
1822
  }
2153
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InListFilterComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
2154
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: InListFilterComponent, isStandalone: false, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: { key: "key" }, providers: [{
2155
- provide: NG_VALUE_ACCESSOR,
2156
- useExisting: InListFilterComponent,
2157
- multi: true
2158
- }], ngImport: i0, template: `
2159
- <div *ngFor="let item of keyValues$ | async| keyvalue" >
2160
- <mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
2161
- {{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
2162
- </mat-checkbox>
2163
- </div>
2164
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1823
+ setDialogState(open) {
1824
+ if (open) {
1825
+ if (!this.dialogRef) {
1826
+ this.initDialog();
1827
+ }
1828
+ else {
1829
+ this.componentWrapper.data = this.opDialogConfig.data;
1830
+ }
1831
+ }
1832
+ else if (!open && this.dialogRef) {
1833
+ this.dialogRef.close();
1834
+ }
1835
+ }
1836
+ ngOnDestroy() {
1837
+ if (this.subscription) {
1838
+ this.subscription.unsubscribe();
1839
+ }
1840
+ }
1841
+ static ngTemplateContextGuard(dir, ctx) {
1842
+ return true;
1843
+ }
1844
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogDirective, deps: [{ token: i0.TemplateRef }, { token: i1$1.MatDialog }, { token: DialogService }], target: i0.ɵɵFactoryTarget.Directive }); }
1845
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: DialogDirective, isStandalone: true, selector: "[opDialog]", inputs: { add_opDialog_Class: "add_opDialog_Class", opDialogConfig: "opDialogConfig", state: ["opDialog", "state"], nativeElement: ["opDialogOrigin", "nativeElement"] }, outputs: { opDialogClosed: "opDialogClosed" }, ngImport: i0 }); }
2165
1846
  }
2166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InListFilterComponent, decorators: [{
2167
- type: Component,
2168
- args: [{
2169
- selector: 'tb-in-list-filter , [tb-in-list-filter]',
2170
- template: `
2171
- <div *ngFor="let item of keyValues$ | async| keyvalue" >
2172
- <mat-checkbox [checked]='selectedKeys.includes(item.key)' stop-propagation (change)='selectFilterChanged($event, item.key)' >
2173
- {{metaData.fieldType === FieldType.Enum ? (item.value | spaceCase) : item.value}}
2174
- </mat-checkbox>
2175
- </div>
2176
- `,
2177
- changeDetection: ChangeDetectionStrategy.OnPush,
2178
- providers: [{
2179
- provide: NG_VALUE_ACCESSOR,
2180
- useExisting: InListFilterComponent,
2181
- multi: true
2182
- }],
2183
- standalone: false
2184
- }]
2185
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: TableStore }], propDecorators: { key: [{
1847
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DialogDirective, decorators: [{
1848
+ type: Directive,
1849
+ args: [{ selector: '[opDialog]' }]
1850
+ }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i1$1.MatDialog }, { type: DialogService }], propDecorators: { opDialogClosed: [{
1851
+ type: Output
1852
+ }], add_opDialog_Class: [{
2186
1853
  type: Input
1854
+ }], opDialogConfig: [{
1855
+ type: Input
1856
+ }], state: [{
1857
+ type: Input,
1858
+ args: ['opDialog']
1859
+ }], nativeElement: [{
1860
+ type: Input,
1861
+ args: ['opDialogOrigin']
2187
1862
  }] } });
2188
1863
 
2189
- class HeaderMenuComponent {
2190
- constructor(tableState) {
2191
- this.tableState = tableState;
2192
- this.FieldType = FieldType;
2193
- this.FilterType = FilterType;
2194
- }
2195
- hideField(key) {
2196
- this.tableState.hideColumn(key);
2197
- }
2198
- ngOnInit() {
2199
- this.resetFilterType();
1864
+ class MatSlideToggleGroupDirective {
1865
+ constructor() {
1866
+ this.allowMultiple = false;
1867
+ this._ready = new ReplaySubject(1);
2200
1868
  }
2201
- resetFilterType() {
2202
- if (this.metaData.additional?.filterOptions?.filterableValues) {
2203
- this.myFilterType = FilterType.In;
2204
- return;
2205
- }
2206
- switch (this.metaData.fieldType) {
2207
- case FieldType.String:
2208
- case FieldType.Link:
2209
- case FieldType.PhoneNumber:
2210
- case FieldType.Array:
2211
- case FieldType.Unknown:
2212
- this.myFilterType = FilterType.StringContains;
2213
- break;
2214
- case FieldType.Currency:
2215
- case FieldType.Number:
2216
- this.myFilterType = FilterType.NumberEquals;
2217
- break;
2218
- case FieldType.Boolean:
2219
- this.myFilterType = FilterType.BooleanEquals;
2220
- break;
2221
- case FieldType.Date:
2222
- case FieldType.DateTime:
2223
- this.myFilterType = FilterType.DateIsOn;
2224
- break;
2225
- case FieldType.Enum:
2226
- this.myFilterType = FilterType.In;
2227
- break;
2228
- }
1869
+ set toggles(val) {
1870
+ this._toggles = val;
1871
+ this._ready.next(true);
2229
1872
  }
2230
- setStringFilterType() {
2231
- this.myFilterType = this.myFilterType === FilterType.StringContains ? FilterType.StringDoesNotContain : FilterType.StringContains;
1873
+ get valueEmitter() {
1874
+ return this._ready.pipe(switchMap$1(_ => this.getObs()));
2232
1875
  }
2233
- setFilterType(filterType) {
2234
- if (filterType === this.myFilterType) {
2235
- this.resetFilterType();
2236
- }
2237
- else {
2238
- this.myFilterType = filterType;
2239
- }
1876
+ getInitValue() {
1877
+ const startValue = this._toggles.reduce((prev, cur) => {
1878
+ if (!cur.name) {
1879
+ throw new Error('toggle must have the name attribute set');
1880
+ }
1881
+ prev[cur.name] = cur.checked;
1882
+ return prev;
1883
+ }, {});
1884
+ return startValue;
2240
1885
  }
2241
- onEnter(filter) {
2242
- if (filter.filterValue != undefined && filter.filterType) {
2243
- this.tableState.addFilter(filter);
2244
- this.trigger.closeMenu();
2245
- }
1886
+ getObs() {
1887
+ var toggleChanges = merge(...this._toggles.map(toggle => toggle.change));
1888
+ const startValue = this.getInitValue();
1889
+ return toggleChanges.pipe(scan((prev, cur) => {
1890
+ const toggleName = cur.source.name;
1891
+ const newVal = { ...prev, [toggleName]: cur.checked };
1892
+ if (cur.checked && !this.allowMultiple) {
1893
+ Object.keys(prev)
1894
+ .filter(key => key !== toggleName && prev[key])
1895
+ .forEach(key => {
1896
+ newVal[key] = false;
1897
+ this._toggles.find(toggle => toggle.name === key).toggle();
1898
+ });
1899
+ }
1900
+ return newVal;
1901
+ }, startValue), startWith$1(startValue));
2246
1902
  }
2247
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: HeaderMenuComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
2248
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: HeaderMenuComponent, isStandalone: false, selector: "tb-header-menu", inputs: { filter: "filter", metaData: "metaData" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<button mat-icon-button class=\"open-menu-icon-button\" disableRipple [matMenuTriggerFor]=\"menu\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\" >\r\n <button mat-menu-item (click)=\"tableState.addGroupByKey(metaData.key)\">\r\n <mat-icon color=\"primary\">group</mat-icon>\r\n <span>Group By</span>\r\n </button>\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\" class=\"tb-header-filter\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font auto-width\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\" class=\"header-filter-icon-button\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation>\r\n \r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix class=\"tb-header-prefix\">\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberLessThan)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n <mat-icon class=\"suffix-icons\"\r\n >\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberGreaterThan)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\" >\r\n <mat-icon class=\"suffix-icons\"\r\n >\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberEquals)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n <span class=\"suffix-icons\"\r\n >\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div>\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date || metaData.fieldType === FieldType.DateTime\">\r\n <mat-form-field class=\"font auto-width\" stop-propagation >\r\n <span matPrefix class=\"tb-header-prefix\">\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateOnOrAfter)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n <mat-icon class=\"suffix-icons underline\">arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateOnOrBefore)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n <mat-icon class=\"suffix-icons underline\">arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateIsOn)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n <span class=\"suffix-icons underline\"> =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle class=\"date-toggle header-filter-icon-button\" matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.menu-icon{font-size:16px;line-height:16px;vertical-align:top;height:16px;width:16px}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}.auto-width{width:260px;margin:5px;display:block;height:55px}.open-menu-icon-button{height:28px;width:28px;padding:6px}.header-filter-icon-button{height:18px;width:18px;font-size:18px;padding:0;margin:0 2px}.header-filter-icon-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.header-filter-icon-button.chosen-icon,.header-filter-icon-button.chosen-icon ::ng-deep *{height:22px;width:22px;font-size:22px;color:green}mat-icon.mat-icon.suffix-icons.underline{height:20px;text-decoration:underline .1px solid}.chosen-icon mat-icon.mat-icon.suffix-icons.underline{height:24px}::ng-deep .mat-mdc-form-field-icon-prefix:has(.tb-header-prefix),.tb-header-prefix{padding:0;flex-basis:36%}.tb-header-filter ::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}.tb-header-filter ::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i5.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i5$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i6$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "component", type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1903
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatSlideToggleGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1904
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatSlideToggleGroupDirective, isStandalone: true, selector: "[opMatSlideToggleGroup]", inputs: { allowMultiple: "allowMultiple" }, outputs: { valueEmitter: "valueEmitter" }, queries: [{ propertyName: "toggles", predicate: MatSlideToggle }], ngImport: i0 }); }
2249
1905
  }
2250
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: HeaderMenuComponent, decorators: [{
2251
- type: Component,
2252
- args: [{ selector: 'tb-header-menu', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<button mat-icon-button class=\"open-menu-icon-button\" disableRipple [matMenuTriggerFor]=\"menu\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\" >\r\n <button mat-menu-item (click)=\"tableState.addGroupByKey(metaData.key)\">\r\n <mat-icon color=\"primary\">group</mat-icon>\r\n <span>Group By</span>\r\n </button>\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\" class=\"tb-header-filter\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font auto-width\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\" class=\"header-filter-icon-button\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation>\r\n \r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix class=\"tb-header-prefix\">\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberLessThan)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n <mat-icon class=\"suffix-icons\"\r\n >\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberGreaterThan)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\" >\r\n <mat-icon class=\"suffix-icons\"\r\n >\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.NumberEquals)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n <span class=\"suffix-icons\"\r\n >\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div>\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date || metaData.fieldType === FieldType.DateTime\">\r\n <mat-form-field class=\"font auto-width\" stop-propagation >\r\n <span matPrefix class=\"tb-header-prefix\">\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateOnOrAfter)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n <mat-icon class=\"suffix-icons underline\">arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateOnOrBefore)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n <mat-icon class=\"suffix-icons underline\">arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple class=\"header-filter-icon-button\" (click)=\"setFilterType(FilterType.DateIsOn)\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n <span class=\"suffix-icons underline\"> =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle class=\"date-toggle header-filter-icon-button\" matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.menu-icon{font-size:16px;line-height:16px;vertical-align:top;height:16px;width:16px}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}.auto-width{width:260px;margin:5px;display:block;height:55px}.open-menu-icon-button{height:28px;width:28px;padding:6px}.header-filter-icon-button{height:18px;width:18px;font-size:18px;padding:0;margin:0 2px}.header-filter-icon-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.header-filter-icon-button.chosen-icon,.header-filter-icon-button.chosen-icon ::ng-deep *{height:22px;width:22px;font-size:22px;color:green}mat-icon.mat-icon.suffix-icons.underline{height:20px;text-decoration:underline .1px solid}.chosen-icon mat-icon.mat-icon.suffix-icons.underline{height:24px}::ng-deep .mat-mdc-form-field-icon-prefix:has(.tb-header-prefix),.tb-header-prefix{padding:0;flex-basis:36%}.tb-header-filter ::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}.tb-header-filter ::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
2253
- }], ctorParameters: () => [{ type: TableStore }], propDecorators: { filter: [{
2254
- type: Input
2255
- }], metaData: [{
1906
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatSlideToggleGroupDirective, decorators: [{
1907
+ type: Directive,
1908
+ args: [{ selector: '[opMatSlideToggleGroup]' }]
1909
+ }], propDecorators: { allowMultiple: [{
2256
1910
  type: Input
2257
- }], trigger: [{
2258
- type: ViewChild,
2259
- args: [MatMenuTrigger]
1911
+ }], toggles: [{
1912
+ type: ContentChildren,
1913
+ args: [MatSlideToggle]
1914
+ }], valueEmitter: [{
1915
+ type: Output
2260
1916
  }] } });
2261
1917
 
2262
- class Subjectifier extends Observable {
2263
- constructor(_source) {
2264
- super((obs) => {
2265
- const s = merge(_source, this._subj).subscribe(obs);
2266
- return s;
2267
- });
2268
- this._source = _source;
2269
- this._subj = new Subject();
2270
- this.merged = merge(this._source, this._subj);
2271
- this.next = this._subj.next.bind(this._subj);
2272
- this.newSubj = (...operations) => new Subjectifier(this.merged.pipe(...operations));
1918
+ class TrimWhitespaceDirective {
1919
+ constructor(elem) {
1920
+ this.elem = elem;
1921
+ }
1922
+ onBlur() {
1923
+ const inputString = this.elem.nativeElement.value;
1924
+ if (inputString) {
1925
+ const newValue = inputString.trim().replace(/\t/g, '');
1926
+ if (inputString !== newValue) {
1927
+ this.elem.nativeElement.value = newValue;
1928
+ this.elem.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));
1929
+ }
1930
+ }
2273
1931
  }
1932
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TrimWhitespaceDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1933
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: TrimWhitespaceDirective, isStandalone: true, selector: "input[trimWhitespace]", host: { listeners: { "blur": "onBlur()" } }, ngImport: i0 }); }
2274
1934
  }
1935
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TrimWhitespaceDirective, decorators: [{
1936
+ type: Directive,
1937
+ args: [{ selector: 'input[trimWhitespace]' }]
1938
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { onBlur: [{
1939
+ type: HostListener,
1940
+ args: ['blur']
1941
+ }] } });
2275
1942
 
2276
- class ResizeColumnDirective {
2277
- constructor(renderer, el, store) {
2278
- this.renderer = renderer;
2279
- this.el = el;
2280
- this.store = store;
2281
- this.getElementWidth = (elem) => (+(globalThis.getComputedStyle(elem).getPropertyValue('width').replace('px', '')));
2282
- }
2283
- ngOnInit() {
2284
- if (this.resizable) {
2285
- const { table, columnHead } = this.getTableAndColumnHeadHtmlElements();
2286
- const resizer = this.createResizerSpanInColumnHead(columnHead);
2287
- const aggregateMouseEventsMapped$ = this.mouseDownThroghMouseUpEventMapper(resizer, columnHead, table);
2288
- const resizeColsData$ = aggregateMouseEventsMapped$.pipe(filter(({ mouseMove }) => !!mouseMove.buttons), map(({ mouseDownData, mouseMove }) => {
2289
- const { newTableWidth, newColumnWidth } = this.calculateNewWidths(mouseDownData, mouseMove);
2290
- return ({
2291
- key: this.key,
2292
- widthInPixel: newColumnWidth,
2293
- tableSize: newTableWidth,
2294
- });
2295
- }), defaultShareReplay());
2296
- this.store.setUserDefinedWidth(resizeColsData$.pipe(map(resizeData => ([{ key: this.key, widthInPixel: resizeData.widthInPixel }]))));
2297
- this.store.setTableWidth(resizeColsData$.pipe(map(resizeData => resizeData.tableSize)));
1943
+ class FunctionPipe {
1944
+ transform(func, ...args) {
1945
+ if (typeof func === 'string') {
1946
+ const [instance, ...tail] = args;
1947
+ const method = instance[func].bind(instance);
1948
+ return method(...tail);
2298
1949
  }
1950
+ return func(...args);
2299
1951
  }
2300
- createResizerSpanInColumnHead(columnHead) {
2301
- const resizer = this.renderer.createElement("span");
2302
- this.renderer.addClass(resizer, "resize-holder");
2303
- resizer.style['cursor'] = 'col-resize';
2304
- resizer.style['user-select'] = 'none';
2305
- resizer.style['width'] = '10px';
2306
- resizer.style['height'] = '100%';
2307
- resizer.style['position'] = 'absolute';
2308
- resizer.style['right'] = '0';
2309
- resizer.style['top'] = '0';
2310
- resizer.style['z-index'] = '1';
2311
- this.renderer.appendChild(columnHead, resizer);
2312
- return resizer;
1952
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FunctionPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1953
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: FunctionPipe, isStandalone: true, name: "func" }); }
1954
+ }
1955
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FunctionPipe, decorators: [{
1956
+ type: Pipe,
1957
+ args: [{ name: 'func' }]
1958
+ }] });
1959
+
1960
+ class UtilitiesModule {
1961
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: UtilitiesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1962
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: UtilitiesModule, imports: [SpaceCasePipe,
1963
+ PhoneNumberPipe,
1964
+ FunctionPipe,
1965
+ StopPropagationDirective,
1966
+ StylerDirective,
1967
+ PreventEnterDirective,
1968
+ AutoFocusDirective,
1969
+ TrimWhitespaceDirective,
1970
+ ClickSubjectDirective,
1971
+ ClickEmitterDirective,
1972
+ DialogDirective,
1973
+ MatSlideToggleGroupDirective,
1974
+ ConditionalClassesDirective], exports: [StopPropagationDirective,
1975
+ PreventEnterDirective,
1976
+ SpaceCasePipe,
1977
+ PhoneNumberPipe,
1978
+ FunctionPipe,
1979
+ StopPropagationDirective,
1980
+ TrimWhitespaceDirective,
1981
+ StylerDirective,
1982
+ PreventEnterDirective,
1983
+ AutoFocusDirective,
1984
+ ClickSubjectDirective,
1985
+ ClickEmitterDirective,
1986
+ DialogDirective,
1987
+ MatSlideToggleGroupDirective,
1988
+ ConditionalClassesDirective] }); }
1989
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: UtilitiesModule, providers: [
1990
+ DialogService
1991
+ ] }); }
1992
+ }
1993
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: UtilitiesModule, decorators: [{
1994
+ type: NgModule,
1995
+ args: [{
1996
+ imports: [
1997
+ SpaceCasePipe,
1998
+ PhoneNumberPipe,
1999
+ FunctionPipe,
2000
+ StopPropagationDirective,
2001
+ StylerDirective,
2002
+ PreventEnterDirective,
2003
+ AutoFocusDirective,
2004
+ TrimWhitespaceDirective,
2005
+ ClickSubjectDirective,
2006
+ ClickEmitterDirective,
2007
+ DialogDirective,
2008
+ MatSlideToggleGroupDirective,
2009
+ ConditionalClassesDirective
2010
+ ],
2011
+ exports: [
2012
+ StopPropagationDirective,
2013
+ PreventEnterDirective,
2014
+ SpaceCasePipe,
2015
+ PhoneNumberPipe,
2016
+ FunctionPipe,
2017
+ StopPropagationDirective,
2018
+ TrimWhitespaceDirective,
2019
+ StylerDirective,
2020
+ PreventEnterDirective,
2021
+ AutoFocusDirective,
2022
+ ClickSubjectDirective,
2023
+ ClickEmitterDirective,
2024
+ DialogDirective,
2025
+ MatSlideToggleGroupDirective,
2026
+ ConditionalClassesDirective,
2027
+ ],
2028
+ providers: [
2029
+ DialogService
2030
+ ]
2031
+ }]
2032
+ }] });
2033
+
2034
+ function isPipe(o) {
2035
+ return typeof (o.transform) === 'function';
2036
+ }
2037
+ class TransformCreator {
2038
+ constructor(datePipe, currencyPipe, phonePipe, casePipe, config) {
2039
+ this.datePipe = datePipe;
2040
+ this.currencyPipe = currencyPipe;
2041
+ this.phonePipe = phonePipe;
2042
+ this.casePipe = casePipe;
2043
+ this.config = config;
2044
+ }
2045
+ createTransformer(metaData) {
2046
+ const defaultFunc = (value) => get(value, metaData.key);
2047
+ if (metaData.transform) {
2048
+ if (isPipe(metaData.transform)) {
2049
+ return (value) => metaData.transform.transform(defaultFunc(value));
2050
+ }
2051
+ return metaData.fieldType === FieldType.Expression ? metaData.transform : (value) => metaData.transform(defaultFunc(value), value);
2052
+ }
2053
+ if (this.config.transformers && this.config.transformers[metaData.fieldType]) {
2054
+ var tranformer = this.config.transformers[metaData.fieldType];
2055
+ return (value) => tranformer(defaultFunc(value));
2056
+ }
2057
+ const defaultDateFormat = this.config.defaultSettings?.dateFormat ?? 'shortDate';
2058
+ const defaultDateTimeFormat = this.config.defaultSettings?.dateTimeFormat ?? 'short';
2059
+ switch (metaData.fieldType) {
2060
+ case FieldType.Date:
2061
+ const dateFormat = metaData.additional?.dateFormat ?? defaultDateFormat;
2062
+ return (value) => this.datePipe.transform(defaultFunc(value), dateFormat);
2063
+ case FieldType.DateTime:
2064
+ const dateTimeFormat = metaData.additional?.dateTimeOptions?.format ?? defaultDateTimeFormat;
2065
+ return (value) => this.datePipe.transform(defaultFunc(value), dateTimeFormat);
2066
+ case FieldType.Currency:
2067
+ return (value) => this.currencyPipe.transform(defaultFunc(value));
2068
+ case FieldType.PhoneNumber:
2069
+ return (value) => this.phonePipe.transform(defaultFunc(value));
2070
+ case FieldType.Enum:
2071
+ return (value) => this.casePipe.transform(metaData.additional?.enumMap[defaultFunc(value)]);
2072
+ case FieldType.Boolean:
2073
+ let forTrue = 'check';
2074
+ let forFalse = '';
2075
+ if (metaData.additional?.boolean?.forTrue) {
2076
+ forTrue = metaData?.additional.boolean.forTrue.icon;
2077
+ }
2078
+ if (metaData.additional?.boolean?.showForFalse === true) {
2079
+ forFalse = 'clear';
2080
+ }
2081
+ else if (metaData.additional?.boolean?.showForFalse?.icon) {
2082
+ forFalse = metaData.additional?.boolean?.showForFalse?.icon;
2083
+ }
2084
+ return (value) => defaultFunc(value) ? forTrue : forFalse;
2085
+ }
2086
+ return defaultFunc;
2313
2087
  }
2314
- getTableAndColumnHeadHtmlElements() {
2315
- const columnHead = this.el.nativeElement;
2316
- const row = this.renderer.parentNode(columnHead);
2317
- const table = this.renderer.parentNode(row);
2318
- return ({ table, columnHead });
2088
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TransformCreator, deps: [{ token: i1$2.DatePipe }, { token: i1$2.CurrencyPipe }, { token: PhoneNumberPipe }, { token: SpaceCasePipe }, { token: TableBuilderConfigToken }], target: i0.ɵɵFactoryTarget.Injectable }); }
2089
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TransformCreator, providedIn: 'root' }); }
2090
+ }
2091
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TransformCreator, decorators: [{
2092
+ type: Injectable,
2093
+ args: [{
2094
+ providedIn: 'root',
2095
+ }]
2096
+ }], ctorParameters: () => [{ type: i1$2.DatePipe }, { type: i1$2.CurrencyPipe }, { type: PhoneNumberPipe }, { type: SpaceCasePipe }, { type: undefined, decorators: [{
2097
+ type: Inject,
2098
+ args: [TableBuilderConfigToken]
2099
+ }] }] });
2100
+
2101
+ class LinkColumnComponent {
2102
+ constructor(store) {
2103
+ this.store = store;
2104
+ this.transform = (a) => a;
2105
+ this.link = (metaData) => this.store.getLinkMap(metaData);
2319
2106
  }
2320
- mouseDownThroghMouseUpEventMapper(resizer, columnHead, table) {
2321
- return this.resizerMouseDownEventMapper(resizer, columnHead, table)
2322
- .pipe(switchMap(mouseDownData => fromEvent(table, "mousemove").pipe(map(mouseMove => ({ mouseDownData, mouseMove })), takeUntil(fromEvent(document, "mouseup")))));
2107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: LinkColumnComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
2108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: LinkColumnComponent, isStandalone: true, selector: "tb-link-column", inputs: { metaData: "metaData", element: "element", transform: "transform" }, ngImport: i0, template: `
2109
+ <ng-container *ngrxLet="(link | func : (metaData)) as linkInfo">
2110
+ @if ($any(linkInfo).useRouterLink) {
2111
+ <a target="{{$any(linkInfo).target}}"
2112
+ [routerLink]=" [($any(linkInfo).link | func : element)]"
2113
+ [queryParams]="$any(linkInfo).routerLinkOptions.queryParams | func : element"
2114
+ [fragment]="$any(linkInfo).routerLinkOptions.fragment"
2115
+ [preserveFragment]="$any(linkInfo).routerLinkOptions.preserveFragment"
2116
+ [queryParamsHandling]="$any(linkInfo).routerLinkOptions.queryParamsHandling"
2117
+ >
2118
+ {{transform | func : element}}
2119
+ </a>
2120
+ } @else {
2121
+ <a target="{{$any(linkInfo).target}}"
2122
+ href="{{($any(linkInfo).link | func : element)}}">
2123
+ {{transform | func : element}}
2124
+ </a>
2125
+ }
2126
+ </ng-container>
2127
+ `, isInline: true, dependencies: [{ kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: FunctionPipe, name: "func" }] }); }
2128
+ }
2129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: LinkColumnComponent, decorators: [{
2130
+ type: Component,
2131
+ args: [{
2132
+ selector: "tb-link-column",
2133
+ template: `
2134
+ <ng-container *ngrxLet="(link | func : (metaData)) as linkInfo">
2135
+ @if ($any(linkInfo).useRouterLink) {
2136
+ <a target="{{$any(linkInfo).target}}"
2137
+ [routerLink]=" [($any(linkInfo).link | func : element)]"
2138
+ [queryParams]="$any(linkInfo).routerLinkOptions.queryParams | func : element"
2139
+ [fragment]="$any(linkInfo).routerLinkOptions.fragment"
2140
+ [preserveFragment]="$any(linkInfo).routerLinkOptions.preserveFragment"
2141
+ [queryParamsHandling]="$any(linkInfo).routerLinkOptions.queryParamsHandling"
2142
+ >
2143
+ {{transform | func : element}}
2144
+ </a>
2145
+ } @else {
2146
+ <a target="{{$any(linkInfo).target}}"
2147
+ href="{{($any(linkInfo).link | func : element)}}">
2148
+ {{transform | func : element}}
2149
+ </a>
2150
+ }
2151
+ </ng-container>
2152
+ `,
2153
+ imports: [LetDirective, RouterLink, FunctionPipe]
2154
+ }]
2155
+ }], ctorParameters: () => [{ type: TableStore }], propDecorators: { metaData: [{
2156
+ type: Input
2157
+ }], element: [{
2158
+ type: Input
2159
+ }], transform: [{
2160
+ type: Input
2161
+ }] } });
2162
+
2163
+ class ArrayColumnComponent {
2164
+ constructor(config) {
2165
+ this.config = config;
2166
+ this.ArrayStyle = ArrayStyle;
2323
2167
  }
2324
- resizerMouseDownEventMapper(resizer, columnHead, table) {
2325
- return fromEvent(resizer, "mousedown").pipe(map(event => ({
2326
- startPageX: event.pageX,
2327
- startColumnWidth: this.getElementWidth(columnHead),
2328
- startTableWidth: this.getElementWidth(table),
2329
- })));
2168
+ ngOnInit() {
2169
+ this.additional = this.metaData?.additional ?? this.config.arrayInfo ?? { limit: 3, arrayStyle: ArrayStyle.NewLine };
2170
+ this.array = (this.array ?? []).slice(0, this.additional.limit);
2330
2171
  }
2331
- calculateNewWidths(mouseDownData, mouseMove) {
2332
- const change = (mouseMove.pageX - mouseDownData.startPageX);
2333
- let newColumnWidth = mouseDownData.startColumnWidth + change;
2334
- if (newColumnWidth < 1) {
2335
- newColumnWidth = 1;
2172
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ArrayColumnComponent, deps: [{ token: TableBuilderConfigToken }], target: i0.ɵɵFactoryTarget.Component }); }
2173
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: ArrayColumnComponent, isStandalone: true, selector: "tb-array-column", inputs: { array: "array", metaData: "metaData" }, ngImport: i0, template: `
2174
+ @if (array.length === 0) {
2175
+ -
2176
+ } @else {
2177
+ @switch (additional.arrayStyle) {
2178
+ @case (ArrayStyle.CommaDelimited) {
2179
+ @for (val of array; track val; let isLast = $last) {
2180
+ <span>{{val}}@if (!isLast) {
2181
+ ,
2182
+ } </span>
2336
2183
  }
2337
- const columnChange = newColumnWidth - mouseDownData.startColumnWidth;
2338
- const newTableWidth = (mouseDownData.startTableWidth + columnChange);
2339
- return ({ newTableWidth, newColumnWidth });
2184
+ }
2185
+ @case (ArrayStyle.NewLine) {
2186
+ @for (val of array; track val; let isLast = $last) {
2187
+ <span>{{val}}@if (!isLast) {
2188
+ <br />
2189
+ } </span>
2190
+ }
2191
+ }
2340
2192
  }
2341
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ResizeColumnDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TableStore }], target: i0.ɵɵFactoryTarget.Directive }); }
2342
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: ResizeColumnDirective, isStandalone: false, selector: "[resizeColumn]", inputs: { resizable: ["resizeColumn", "resizable"], key: "key" }, ngImport: i0 }); }
2193
+ }
2194
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2343
2195
  }
2344
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ResizeColumnDirective, decorators: [{
2345
- type: Directive,
2196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ArrayColumnComponent, decorators: [{
2197
+ type: Component,
2346
2198
  args: [{
2347
- selector: "[resizeColumn]",
2348
- standalone: false
2199
+ selector: 'tb-array-column',
2200
+ template: `
2201
+ @if (array.length === 0) {
2202
+ -
2203
+ } @else {
2204
+ @switch (additional.arrayStyle) {
2205
+ @case (ArrayStyle.CommaDelimited) {
2206
+ @for (val of array; track val; let isLast = $last) {
2207
+ <span>{{val}}@if (!isLast) {
2208
+ ,
2209
+ } </span>
2210
+ }
2211
+ }
2212
+ @case (ArrayStyle.NewLine) {
2213
+ @for (val of array; track val; let isLast = $last) {
2214
+ <span>{{val}}@if (!isLast) {
2215
+ <br />
2216
+ } </span>
2217
+ }
2218
+ }
2219
+ }
2220
+ }
2221
+ `,
2222
+ changeDetection: ChangeDetectionStrategy.OnPush,
2223
+ imports: []
2349
2224
  }]
2350
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: TableStore }], propDecorators: { resizable: [{
2351
- type: Input,
2352
- args: ["resizeColumn"]
2353
- }], key: [{
2225
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
2226
+ type: Inject,
2227
+ args: [TableBuilderConfigToken]
2228
+ }] }], propDecorators: { array: [{
2229
+ type: Input
2230
+ }], metaData: [{
2354
2231
  type: Input
2355
2232
  }] } });
2356
2233
 
2357
- class ColumnTotalPipe {
2358
- transform(data, metaData) {
2359
- const dataToCalculate = data.filter(d => !d.isGroupHeader && !d.isGroupFooter);
2360
- switch (metaData.additional.footer.type) {
2361
- case 'sum':
2362
- return sumBy(dataToCalculate, metaData.key);
2234
+ class InitializationComponent {
2235
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InitializationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2236
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: InitializationComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "linkTemplate", first: true, predicate: ["link"], descendants: true, static: true }, { propertyName: "imageUrlTemplate", first: true, predicate: ["imageUrl"], descendants: true, static: true }, { propertyName: "currencyTemplate", first: true, predicate: ["currency"], descendants: true, static: true }, { propertyName: "arrayTemplate", first: true, predicate: ["array"], descendants: true, static: true }, { propertyName: "defaultTemplate", first: true, predicate: ["default"], descendants: true, static: true }, { propertyName: "defaultWithIcon", first: true, predicate: ["defaultWithIcon"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #link let-element='element' let-metaData='metaData' let-transform='transform'>\r\n <tb-link-column [element]=\"element\" [metaData]=\"metaData\" [transform]=\"transform\"></tb-link-column>\r\n</ng-template>\r\n\r\n<ng-template #imageUrl let-element='element' let-metaData='metaData'>\r\n <span>\r\n <img src=\"{{element[metaData.key]}}\" height=\"75px\" width=\"75px\" />\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #array let-element='element' let-metaData='metaData'>\r\n <tb-array-column [array]='element[metaData.key]' [metaData]='metaData'></tb-array-column>\r\n</ng-template>\r\n\r\n<ng-template #default let-element='element' let-metaData='metaData' let-transform='transform' >\r\n <span>{{ transform | func : element }}</span>\r\n</ng-template>\r\n\r\n<ng-template #defaultWithIcon let-element='element' let-metaData='metaData' let-transform='transform' >\r\n <mat-icon>{{ transform | func : element }}</mat-icon>\r\n</ng-template>\r\n", dependencies: [{ kind: "component", type: LinkColumnComponent, selector: "tb-link-column", inputs: ["metaData", "element", "transform"] }, { kind: "component", type: ArrayColumnComponent, selector: "tb-array-column", inputs: ["array", "metaData"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: FunctionPipe, name: "func" }] }); }
2237
+ }
2238
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InitializationComponent, decorators: [{
2239
+ type: Component,
2240
+ args: [{ imports: [LinkColumnComponent, ArrayColumnComponent, MatIcon, FunctionPipe], template: "<ng-template #link let-element='element' let-metaData='metaData' let-transform='transform'>\r\n <tb-link-column [element]=\"element\" [metaData]=\"metaData\" [transform]=\"transform\"></tb-link-column>\r\n</ng-template>\r\n\r\n<ng-template #imageUrl let-element='element' let-metaData='metaData'>\r\n <span>\r\n <img src=\"{{element[metaData.key]}}\" height=\"75px\" width=\"75px\" />\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #array let-element='element' let-metaData='metaData'>\r\n <tb-array-column [array]='element[metaData.key]' [metaData]='metaData'></tb-array-column>\r\n</ng-template>\r\n\r\n<ng-template #default let-element='element' let-metaData='metaData' let-transform='transform' >\r\n <span>{{ transform | func : element }}</span>\r\n</ng-template>\r\n\r\n<ng-template #defaultWithIcon let-element='element' let-metaData='metaData' let-transform='transform' >\r\n <mat-icon>{{ transform | func : element }}</mat-icon>\r\n</ng-template>\r\n" }]
2241
+ }], propDecorators: { linkTemplate: [{
2242
+ type: ViewChild,
2243
+ args: ['link', { static: true }]
2244
+ }], imageUrlTemplate: [{
2245
+ type: ViewChild,
2246
+ args: ['imageUrl', { static: true }]
2247
+ }], currencyTemplate: [{
2248
+ type: ViewChild,
2249
+ args: ['currency', { static: true }]
2250
+ }], arrayTemplate: [{
2251
+ type: ViewChild,
2252
+ args: ['array', { static: true }]
2253
+ }], defaultTemplate: [{
2254
+ type: ViewChild,
2255
+ args: ['default', { static: true }]
2256
+ }], defaultWithIcon: [{
2257
+ type: ViewChild,
2258
+ args: ['defaultWithIcon', { static: true }]
2259
+ }] } });
2260
+
2261
+ class TableTemplateService {
2262
+ initTemplates() {
2263
+ this.templates = {};
2264
+ this.templates[FieldType.Array] = this.instance.arrayTemplate;
2265
+ this.templates[FieldType.Boolean] = this.instance.defaultWithIcon;
2266
+ this.templates[FieldType.Currency] = this.instance.defaultTemplate;
2267
+ this.templates[FieldType.Date] = this.instance.defaultTemplate;
2268
+ this.templates[FieldType.DateTime] = this.instance.defaultTemplate;
2269
+ this.templates[FieldType.Expression] = this.instance.defaultTemplate;
2270
+ this.templates[FieldType.ImageUrl] = this.instance.imageUrlTemplate;
2271
+ this.templates[FieldType.Link] = this.instance.linkTemplate;
2272
+ this.templates[FieldType.Number] = this.instance.defaultTemplate;
2273
+ this.templates[FieldType.PhoneNumber] = this.instance.defaultTemplate;
2274
+ this.templates[FieldType.String] = this.instance.defaultTemplate;
2275
+ this.templates[FieldType.Unknown] = this.instance.defaultTemplate;
2276
+ this.templates[FieldType.Enum] = this.instance.defaultTemplate;
2277
+ }
2278
+ getTemplate(metaData) {
2279
+ let tmp = this.templates[metaData.fieldType];
2280
+ if (metaData.useIcon) {
2281
+ if (tmp === this.instance.defaultTemplate) {
2282
+ tmp = this.instance.defaultWithIcon;
2283
+ }
2363
2284
  }
2364
- return null;
2285
+ return tmp;
2365
2286
  }
2366
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ColumnTotalPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2367
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: ColumnTotalPipe, isStandalone: false, name: "columnTotal" }); }
2287
+ constructor(resolver, i) {
2288
+ const factory = resolver.resolveComponentFactory(InitializationComponent);
2289
+ const c = factory.create(i);
2290
+ this.instance = c.instance;
2291
+ this.initTemplates();
2292
+ }
2293
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableTemplateService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
2294
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableTemplateService, providedIn: 'root' }); }
2368
2295
  }
2369
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ColumnTotalPipe, decorators: [{
2370
- type: Pipe,
2371
- args: [{
2372
- name: 'columnTotal',
2373
- standalone: false
2374
- }]
2375
- }] });
2296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableTemplateService, decorators: [{
2297
+ type: Injectable,
2298
+ args: [{ providedIn: 'root' }]
2299
+ }], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }] });
2376
2300
 
2377
2301
  class ColumnBuilderComponent {
2378
2302
  constructor(transformCreator, table, state, templateService, injector) {
@@ -2440,8 +2364,8 @@ class ColumnBuilderComponent {
2440
2364
  this.metaData.click(element, key);
2441
2365
  }
2442
2366
  }
2443
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ColumnBuilderComponent, deps: [{ token: TransformCreator }, { token: i4$1.MatTable }, { token: TableStore }, { token: TableTemplateService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
2444
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: ColumnBuilderComponent, isStandalone: false, selector: "tb-column-builder", inputs: { metaData: "metaData", customCell: "customCell", data$: "data$" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles$ as styles\" >\r\n\r\n <ng-template #body let-element='element' >\r\n <mat-cell [matTooltip]=\"metaData.toolTip ?? ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' [class.group-footer]=\"element.isGroupFooter\" (click)='cellClicked(element, metaData.key)' >\r\n <ng-container *ngTemplateOutlet=\"innerTemplate;context: {metaData: metaData, element: element, transform: transform }; Injector: injector\">\r\n </ng-container>\r\n </mat-cell>\r\n\r\n </ng-template>\r\n\r\n <ng-template matHeaderCellDef #myHeader>\r\n\r\n <ng-container *ngIf=\"customCell?.columnDef?.headerCell;else header;\">\r\n <ng-container *ngTemplateOutlet=\"customCell.columnDef.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #header>\r\n\r\n <mat-header-cell cdkDrag [styler]='styles.header' [resizeColumn]=\"true\" [key]=\"metaData.key\" class=\"column-head drag-header\" #headref >\r\n <div class=\"header-container\" cdkDragHandle>\r\n <div *ngIf=\"!metaData._internalNotUserDefined || !customCell?.columnDef?.cell ; else headerWithoutMenu\" mat-sort-header style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n <ng-template #headerWithoutMenu >\r\n <div *ngIf=\"metaData._internalNotUserDefined;\" style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n </ng-template>\r\n <tb-header-menu\r\n *ngIf=\"(!metaData._internalNotUserDefined || !customCell?.columnDef?.cell) && (showfilters$ | async);\" #menu [metaData]='metaData' [filter]='filter' >\r\n </tb-header-menu>\r\n </div>\r\n </mat-header-cell>\r\n\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n\r\n <ng-container *matCellDef=\"let element;\">\r\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: {metaData: metaData, element: element , styles: styles.body }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template matFooterCellDef>\r\n <ng-container *ngIf=\"customCell?.columnDef?.footerCell;else footer\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customCell.columnDef.footerCell.template;context: {metaData: metaData, data: data$, styles : styles.footer }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footer>\r\n <mat-footer-cell [styler]='styles.footer' *ngrxLet=\"data$ as data\">\r\n <span *ngIf=\"data?.length && metaData.additional?.footer\" [ngSwitch]=\"metaData.fieldType\" class=\"bold\">\r\n <span *ngSwitchCase=\"FieldType.Currency\">\r\n {{ data | columnTotal: metaData | currency }}\r\n </span>\r\n <span *ngSwitchCase=\"FieldType.Number\">\r\n {{ data | columnTotal: metaData | number }}\r\n </span>\r\n </span>\r\n </mat-footer-cell>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i4$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i4$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i4$1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i1$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i8.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i9.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i9.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["styler"] }, { kind: "directive", type: ConditionalClassesDirective, selector: "[conditionalClasses]", inputs: ["element", "conditionalClasses"] }, { kind: "component", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: ["filter", "metaData"] }, { kind: "directive", type: ResizeColumnDirective, selector: "[resizeColumn]", inputs: ["resizeColumn", "key"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.CurrencyPipe, name: "currency" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "pipe", type: ColumnTotalPipe, name: "columnTotal" }], viewProviders: [
2367
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ColumnBuilderComponent, deps: [{ token: TransformCreator }, { token: i2.MatTable }, { token: TableStore }, { token: TableTemplateService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
2368
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: ColumnBuilderComponent, isStandalone: true, selector: "tb-column-builder", inputs: { metaData: "metaData", customCell: "customCell", data$: "data$" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles$ as styles\" >\r\n\r\n <ng-template #body let-element='element' >\r\n <mat-cell [matTooltip]=\"metaData.toolTip ?? ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' [class.group-footer]=\"element.isGroupFooter\" (click)='cellClicked(element, metaData.key)' >\r\n <ng-container *ngTemplateOutlet=\"innerTemplate;context: {metaData: metaData, element: element, transform: transform }; Injector: injector\">\r\n </ng-container>\r\n </mat-cell>\r\n\r\n </ng-template>\r\n\r\n <ng-template matHeaderCellDef #myHeader>\r\n\r\n <ng-container *ngIf=\"customCell?.columnDef?.headerCell;else header;\">\r\n <ng-container *ngTemplateOutlet=\"customCell.columnDef.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #header>\r\n\r\n <mat-header-cell cdkDrag [styler]='styles.header' [resizeColumn]=\"true\" [key]=\"metaData.key\" class=\"column-head drag-header\" #headref >\r\n <div class=\"header-container\" cdkDragHandle>\r\n <div *ngIf=\"!metaData._internalNotUserDefined || !customCell?.columnDef?.cell ; else headerWithoutMenu\" mat-sort-header style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n <ng-template #headerWithoutMenu >\r\n <div *ngIf=\"metaData._internalNotUserDefined;\" style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n </ng-template>\r\n <tb-header-menu\r\n *ngIf=\"(!metaData._internalNotUserDefined || !customCell?.columnDef?.cell) && (showfilters$ | async);\" #menu [metaData]='metaData' [filter]='filter' >\r\n </tb-header-menu>\r\n </div>\r\n </mat-header-cell>\r\n\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n\r\n <ng-container *matCellDef=\"let element;\">\r\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: {metaData: metaData, element: element , styles: styles.body }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template matFooterCellDef>\r\n <ng-container *ngIf=\"customCell?.columnDef?.footerCell;else footer\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customCell.columnDef.footerCell.template;context: {metaData: metaData, data: data$, styles : styles.footer }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footer>\r\n <mat-footer-cell [styler]='styles.footer' *ngrxLet=\"data$ as data\">\r\n <span *ngIf=\"data?.length && metaData.additional?.footer\" [ngSwitch]=\"metaData.fieldType\" class=\"bold\">\r\n <span *ngSwitchCase=\"FieldType.Currency\">\r\n {{ data | columnTotal: metaData | currency }}\r\n </span>\r\n <span *ngSwitchCase=\"FieldType.Number\">\r\n {{ data | columnTotal: metaData | number }}\r\n </span>\r\n </span>\r\n </mat-footer-cell>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: ConditionalClassesDirective, selector: "[conditionalClasses]", inputs: ["element", "conditionalClasses"] }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["styler"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: ResizeColumnDirective, selector: "[resizeColumn]", inputs: ["resizeColumn", "key"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: ["filter", "metaData"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "pipe", type: ColumnTotalPipe, name: "columnTotal" }], viewProviders: [
2445
2369
  { provide: CDK_DROP_LIST, useExisting: CdkDropList },
2446
2370
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2447
2371
  }
@@ -2449,8 +2373,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
2449
2373
  type: Component,
2450
2374
  args: [{ selector: 'tb-column-builder', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [
2451
2375
  { provide: CDK_DROP_LIST, useExisting: CdkDropList },
2452
- ], standalone: false, template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles$ as styles\" >\r\n\r\n <ng-template #body let-element='element' >\r\n <mat-cell [matTooltip]=\"metaData.toolTip ?? ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' [class.group-footer]=\"element.isGroupFooter\" (click)='cellClicked(element, metaData.key)' >\r\n <ng-container *ngTemplateOutlet=\"innerTemplate;context: {metaData: metaData, element: element, transform: transform }; Injector: injector\">\r\n </ng-container>\r\n </mat-cell>\r\n\r\n </ng-template>\r\n\r\n <ng-template matHeaderCellDef #myHeader>\r\n\r\n <ng-container *ngIf=\"customCell?.columnDef?.headerCell;else header;\">\r\n <ng-container *ngTemplateOutlet=\"customCell.columnDef.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #header>\r\n\r\n <mat-header-cell cdkDrag [styler]='styles.header' [resizeColumn]=\"true\" [key]=\"metaData.key\" class=\"column-head drag-header\" #headref >\r\n <div class=\"header-container\" cdkDragHandle>\r\n <div *ngIf=\"!metaData._internalNotUserDefined || !customCell?.columnDef?.cell ; else headerWithoutMenu\" mat-sort-header style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n <ng-template #headerWithoutMenu >\r\n <div *ngIf=\"metaData._internalNotUserDefined;\" style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n </ng-template>\r\n <tb-header-menu\r\n *ngIf=\"(!metaData._internalNotUserDefined || !customCell?.columnDef?.cell) && (showfilters$ | async);\" #menu [metaData]='metaData' [filter]='filter' >\r\n </tb-header-menu>\r\n </div>\r\n </mat-header-cell>\r\n\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n\r\n <ng-container *matCellDef=\"let element;\">\r\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: {metaData: metaData, element: element , styles: styles.body }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template matFooterCellDef>\r\n <ng-container *ngIf=\"customCell?.columnDef?.footerCell;else footer\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customCell.columnDef.footerCell.template;context: {metaData: metaData, data: data$, styles : styles.footer }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footer>\r\n <mat-footer-cell [styler]='styles.footer' *ngrxLet=\"data$ as data\">\r\n <span *ngIf=\"data?.length && metaData.additional?.footer\" [ngSwitch]=\"metaData.fieldType\" class=\"bold\">\r\n <span *ngSwitchCase=\"FieldType.Currency\">\r\n {{ data | columnTotal: metaData | currency }}\r\n </span>\r\n <span *ngSwitchCase=\"FieldType.Number\">\r\n {{ data | columnTotal: metaData | number }}\r\n </span>\r\n </span>\r\n </mat-footer-cell>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"] }]
2453
- }], ctorParameters: () => [{ type: TransformCreator }, { type: i4$1.MatTable }, { type: TableStore }, { type: TableTemplateService }, { type: i0.Injector }], propDecorators: { metaData: [{
2376
+ ], imports: [LetDirective, MatColumnDef, MatCell, MatTooltip, ConditionalClassesDirective, StylerDirective, NgTemplateOutlet, MatHeaderCellDef, NgIf, MatHeaderCell, CdkDrag, ResizeColumnDirective, CdkDragHandle, MatSortHeader, HeaderMenuComponent, MatCellDef, MatFooterCellDef, MatFooterCell, NgSwitch, NgSwitchCase, AsyncPipe, DecimalPipe, CurrencyPipe, SpaceCasePipe, ColumnTotalPipe], template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles$ as styles\" >\r\n\r\n <ng-template #body let-element='element' >\r\n <mat-cell [matTooltip]=\"metaData.toolTip ?? ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' [class.group-footer]=\"element.isGroupFooter\" (click)='cellClicked(element, metaData.key)' >\r\n <ng-container *ngTemplateOutlet=\"innerTemplate;context: {metaData: metaData, element: element, transform: transform }; Injector: injector\">\r\n </ng-container>\r\n </mat-cell>\r\n\r\n </ng-template>\r\n\r\n <ng-template matHeaderCellDef #myHeader>\r\n\r\n <ng-container *ngIf=\"customCell?.columnDef?.headerCell;else header;\">\r\n <ng-container *ngTemplateOutlet=\"customCell.columnDef.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #header>\r\n\r\n <mat-header-cell cdkDrag [styler]='styles.header' [resizeColumn]=\"true\" [key]=\"metaData.key\" class=\"column-head drag-header\" #headref >\r\n <div class=\"header-container\" cdkDragHandle>\r\n <div *ngIf=\"!metaData._internalNotUserDefined || !customCell?.columnDef?.cell ; else headerWithoutMenu\" mat-sort-header style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n <ng-template #headerWithoutMenu >\r\n <div *ngIf=\"metaData._internalNotUserDefined;\" style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n </ng-template>\r\n <tb-header-menu\r\n *ngIf=\"(!metaData._internalNotUserDefined || !customCell?.columnDef?.cell) && (showfilters$ | async);\" #menu [metaData]='metaData' [filter]='filter' >\r\n </tb-header-menu>\r\n </div>\r\n </mat-header-cell>\r\n\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n\r\n <ng-container *matCellDef=\"let element;\">\r\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: {metaData: metaData, element: element , styles: styles.body }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template matFooterCellDef>\r\n <ng-container *ngIf=\"customCell?.columnDef?.footerCell;else footer\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customCell.columnDef.footerCell.template;context: {metaData: metaData, data: data$, styles : styles.footer }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footer>\r\n <mat-footer-cell [styler]='styles.footer' *ngrxLet=\"data$ as data\">\r\n <span *ngIf=\"data?.length && metaData.additional?.footer\" [ngSwitch]=\"metaData.fieldType\" class=\"bold\">\r\n <span *ngSwitchCase=\"FieldType.Currency\">\r\n {{ data | columnTotal: metaData | currency }}\r\n </span>\r\n <span *ngSwitchCase=\"FieldType.Number\">\r\n {{ data | columnTotal: metaData | number }}\r\n </span>\r\n </span>\r\n </mat-footer-cell>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"] }]
2377
+ }], ctorParameters: () => [{ type: TransformCreator }, { type: i2.MatTable }, { type: TableStore }, { type: TableTemplateService }, { type: i0.Injector }], propDecorators: { metaData: [{
2454
2378
  type: Input
2455
2379
  }], customCell: [{
2456
2380
  type: Input
@@ -2553,25 +2477,29 @@ class PaginatorComponent {
2553
2477
  }
2554
2478
  }
2555
2479
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PaginatorComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
2556
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: PaginatorComponent, isStandalone: false, selector: "tb-paginator", inputs: { dataSource: "dataSource", tableElRef: "tableElRef", data$: "data$" }, outputs: { paginatorChangeEmitter: "paginatorChangeEmitter" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], ngImport: i0, template: `
2557
- <div [ngClass]="{'hide' : !(collapseFooter$ | async), 'page-amounts':true}" *ngIf="currentPageData$ | async as pageData">
2558
- {{pageData.currentStart}} - {{pageData.currentEnd}} of {{pageData.total}}
2559
- </div>
2560
- <mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
2561
- [ngClass]="{'hide' : (collapseFooter$ | async)}">
2562
- </mat-paginator>
2563
- `, isInline: true, styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2480
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: PaginatorComponent, isStandalone: true, selector: "tb-paginator", inputs: { dataSource: "dataSource", tableElRef: "tableElRef", data$: "data$" }, outputs: { paginatorChangeEmitter: "paginatorChangeEmitter" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], ngImport: i0, template: `
2481
+ @if (currentPageData$ | async; as pageData) {
2482
+ <div [ngClass]="{'hide' : !(collapseFooter$ | async), 'page-amounts':true}">
2483
+ {{pageData.currentStart}} - {{pageData.currentEnd}} of {{pageData.total}}
2484
+ </div>
2485
+ }
2486
+ <mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
2487
+ [ngClass]="{'hide' : (collapseFooter$ | async)}">
2488
+ </mat-paginator>
2489
+ `, isInline: true, styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2564
2490
  }
2565
2491
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: PaginatorComponent, decorators: [{
2566
2492
  type: Component,
2567
- args: [{ selector: 'tb-paginator', template: `
2568
- <div [ngClass]="{'hide' : !(collapseFooter$ | async), 'page-amounts':true}" *ngIf="currentPageData$ | async as pageData">
2569
- {{pageData.currentStart}} - {{pageData.currentEnd}} of {{pageData.total}}
2570
- </div>
2571
- <mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
2572
- [ngClass]="{'hide' : (collapseFooter$ | async)}">
2573
- </mat-paginator>
2574
- `, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
2493
+ args: [{ selector: 'tb-paginator', template: `
2494
+ @if (currentPageData$ | async; as pageData) {
2495
+ <div [ngClass]="{'hide' : !(collapseFooter$ | async), 'page-amounts':true}">
2496
+ {{pageData.currentStart}} - {{pageData.currentEnd}} of {{pageData.total}}
2497
+ </div>
2498
+ }
2499
+ <mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
2500
+ [ngClass]="{'hide' : (collapseFooter$ | async)}">
2501
+ </mat-paginator>
2502
+ `, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, MatPaginator, AsyncPipe], styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
2575
2503
  }], ctorParameters: () => [{ type: TableStore }], propDecorators: { dataSource: [{
2576
2504
  type: Input
2577
2505
  }], tableElRef: [{
@@ -2743,13 +2671,13 @@ class GenericTableComponent {
2743
2671
  this.selection.clear() :
2744
2672
  this.selection.select(...this.dataSource.data);
2745
2673
  }
2746
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GenericTableComponent, deps: [{ token: i1$1.MatSort }, { token: TableStore }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
2747
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: GenericTableComponent, isStandalone: false, selector: "tb-generic-table", inputs: { data$: "data$", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", rows: "rows", isSticky: "isSticky", columnBuilders: "columnBuilders", columnInfos: "columnInfos", groupHeaderTemplate: "groupHeaderTemplate", compareWithKey: "compareWithKey", disableSort: "disableSort" }, outputs: { paginatorChange: "paginatorChange", selection$: "selection$" }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: " <mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n [trackBy]='trackByFunction'\r\n [styler]=\"tableWidth | async\"\r\n >\r\n\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef>\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\r\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\r\n <button mat-icon-button (click)=\"updateGroup(row);\">\r\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\r\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\r\n </button>\r\n {{row.groupHeaderName}}\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showHeader$ | async\">\r\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\r\n </ng-container>\r\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\r\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\r\n\r\n </mat-table>\r\n\r\n <div class=\"flx-row-end sticky\">\r\n <tb-paginator #tbPaginator\r\n [dataSource]=\"dataSource\"\r\n [tableElRef]=\"tableElRef\"\r\n [data$]=\"data$\"\r\n (paginatorChangeEmitter)=\"paginatorChange.emit()\">\r\n </tb-paginator>\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n\r\n\r\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i4$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i4$1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i4$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i4$1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4$1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["styler"] }, { kind: "component", type: PaginatorComponent, selector: "tb-paginator", inputs: ["dataSource", "tableElRef", "data$"], outputs: ["paginatorChangeEmitter"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2674
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GenericTableComponent, deps: [{ token: i1$3.MatSort }, { token: TableStore }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
2675
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: GenericTableComponent, isStandalone: true, selector: "tb-generic-table", inputs: { data$: "data$", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", rows: "rows", isSticky: "isSticky", columnBuilders: "columnBuilders", columnInfos: "columnInfos", groupHeaderTemplate: "groupHeaderTemplate", compareWithKey: "compareWithKey", disableSort: "disableSort" }, outputs: { paginatorChange: "paginatorChange", selection$: "selection$" }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n >\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\">\n @if (!row.isGroupFooter) {\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n }\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\">\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\n <button mat-icon-button (click)=\"updateGroup(row);\">\n @if (!row.isExpanded) {\n <mat-icon>chevron_right</mat-icon>\n }\n @if (row.isExpanded) {\n <mat-icon>expand_more</mat-icon>\n }\n </button>\n {{row.groupHeaderName}}\n </div>\n <div style=\"flex-grow: 1\">\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\n </div>\n </mat-cell>\n </ng-container>\n\n @if (showHeader$ | async) {\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n }\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n</mat-table>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\"\n (paginatorChangeEmitter)=\"paginatorChange.emit()\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n\n\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["styler"] }, { 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: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "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: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "component", type: MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: PaginatorComponent, selector: "tb-paginator", inputs: ["dataSource", "tableElRef", "data$"], outputs: ["paginatorChangeEmitter"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2748
2676
  }
2749
2677
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GenericTableComponent, decorators: [{
2750
2678
  type: Component,
2751
- args: [{ selector: 'tb-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: " <mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n [trackBy]='trackByFunction'\r\n [styler]=\"tableWidth | async\"\r\n >\r\n\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef>\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\r\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\r\n <button mat-icon-button (click)=\"updateGroup(row);\">\r\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\r\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\r\n </button>\r\n {{row.groupHeaderName}}\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showHeader$ | async\">\r\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\r\n </ng-container>\r\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\r\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\r\n\r\n </mat-table>\r\n\r\n <div class=\"flx-row-end sticky\">\r\n <tb-paginator #tbPaginator\r\n [dataSource]=\"dataSource\"\r\n [tableElRef]=\"tableElRef\"\r\n [data$]=\"data$\"\r\n (paginatorChangeEmitter)=\"paginatorChange.emit()\">\r\n </tb-paginator>\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n\r\n\r\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
2752
- }], ctorParameters: () => [{ type: i1$1.MatSort }, { type: TableStore }, { type: i0.ViewContainerRef }, { type: i0.Injector }], propDecorators: { data$: [{
2679
+ args: [{ selector: 'tb-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatTable, CdkDropList, StylerDirective, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCheckbox, MatCellDef, MatCell, MatFooterCellDef, MatFooterCell, MatIconButton, MatIcon, NgTemplateOutlet, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow, MatFooterRowDef, MatFooterRow, PaginatorComponent, MatTooltip, AsyncPipe], template: "<mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n >\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\">\n @if (!row.isGroupFooter) {\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n }\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\">\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\n <button mat-icon-button (click)=\"updateGroup(row);\">\n @if (!row.isExpanded) {\n <mat-icon>chevron_right</mat-icon>\n }\n @if (row.isExpanded) {\n <mat-icon>expand_more</mat-icon>\n }\n </button>\n {{row.groupHeaderName}}\n </div>\n <div style=\"flex-grow: 1\">\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\n </div>\n </mat-cell>\n </ng-container>\n\n @if (showHeader$ | async) {\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n }\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n</mat-table>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\"\n (paginatorChangeEmitter)=\"paginatorChange.emit()\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n\n\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
2680
+ }], ctorParameters: () => [{ type: i1$3.MatSort }, { type: TableStore }, { type: i0.ViewContainerRef }, { type: i0.Injector }], propDecorators: { data$: [{
2753
2681
  type: Input
2754
2682
  }], IndexColumn: [{
2755
2683
  type: Input
@@ -2796,11 +2724,11 @@ class GenericTableVsComponent extends GenericTableComponent {
2796
2724
  }
2797
2725
  }
2798
2726
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GenericTableVsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2799
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: GenericTableVsComponent, isStandalone: false, selector: "tb-generic-table-vs", usesInheritance: true, ngImport: i0, template: " <cdk-virtual-scroll-viewport tvsItemSize class=\"tb-virtual-scroll-viewport\">\r\n\r\n <mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n [trackBy]='trackByFunction'\r\n [styler]=\"tableWidth | async\"\r\n >\r\n\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef>\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\r\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\r\n <button mat-icon-button (click)=\"updateGroup(row);\">\r\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\r\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\r\n </button>\r\n {{row.groupHeaderName}}\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showHeader$ | async\">\r\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\r\n </ng-container>\r\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\r\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\r\n\r\n </mat-table>\r\n\r\n </cdk-virtual-scroll-viewport>\r\n\r\n <div class=\"flx-row-end sticky\">\r\n <tb-paginator #tbPaginator\r\n [dataSource]=\"dataSource\"\r\n [tableElRef]=\"tableElRef\"\r\n [data$]=\"data$\">\r\n </tb-paginator>\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n\r\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i4$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i4$1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i4$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i4$1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4$1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["styler"] }, { kind: "component", type: i12.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i13.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "component", type: PaginatorComponent, selector: "tb-paginator", inputs: ["dataSource", "tableElRef", "data$"], outputs: ["paginatorChangeEmitter"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2727
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: GenericTableVsComponent, isStandalone: true, selector: "tb-generic-table-vs", usesInheritance: true, ngImport: i0, template: "<cdk-virtual-scroll-viewport tvsItemSize class=\"tb-virtual-scroll-viewport\">\n\n <mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n >\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\">\n @if (!row.isGroupFooter) {\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n }\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\">\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\n <button mat-icon-button (click)=\"updateGroup(row);\">\n @if (!row.isExpanded) {\n <mat-icon>chevron_right</mat-icon>\n }\n @if (row.isExpanded) {\n <mat-icon>expand_more</mat-icon>\n }\n </button>\n {{row.groupHeaderName}}\n </div>\n <div style=\"flex-grow: 1\">\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\n </div>\n </mat-cell>\n </ng-container>\n\n @if (showHeader$ | async) {\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n }\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n </mat-table>\n\n</cdk-virtual-scroll-viewport>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["styler"] }, { 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: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "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: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "component", type: MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: PaginatorComponent, selector: "tb-paginator", inputs: ["dataSource", "tableElRef", "data$"], outputs: ["paginatorChangeEmitter"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2800
2728
  }
2801
2729
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GenericTableVsComponent, decorators: [{
2802
2730
  type: Component,
2803
- args: [{ selector: 'tb-generic-table-vs', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: " <cdk-virtual-scroll-viewport tvsItemSize class=\"tb-virtual-scroll-viewport\">\r\n\r\n <mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n [trackBy]='trackByFunction'\r\n [styler]=\"tableWidth | async\"\r\n >\r\n\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef>\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\r\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\r\n <button mat-icon-button (click)=\"updateGroup(row);\">\r\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\r\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\r\n </button>\r\n {{row.groupHeaderName}}\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showHeader$ | async\">\r\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\r\n </ng-container>\r\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\r\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\r\n\r\n </mat-table>\r\n\r\n </cdk-virtual-scroll-viewport>\r\n\r\n <div class=\"flx-row-end sticky\">\r\n <tb-paginator #tbPaginator\r\n [dataSource]=\"dataSource\"\r\n [tableElRef]=\"tableElRef\"\r\n [data$]=\"data$\">\r\n </tb-paginator>\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n\r\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
2731
+ args: [{ selector: 'tb-generic-table-vs', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CdkVirtualScrollViewport, TableVirtualScrollModule, MatTable, CdkDropList, StylerDirective, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCheckbox, MatCellDef, MatCell, MatFooterCellDef, MatFooterCell, MatIconButton, MatIcon, NgTemplateOutlet, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow, MatFooterRowDef, MatFooterRow, PaginatorComponent, MatTooltip, AsyncPipe], template: "<cdk-virtual-scroll-viewport tvsItemSize class=\"tb-virtual-scroll-viewport\">\n\n <mat-table\n cdkDropList\n cdkDropListLockAxis='x'\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"table-drag-list\"\n #table\n [dataSource]=\"dataSource\"\n [trackBy]='trackByFunction'\n [styler]=\"tableWidth | async\"\n >\n\n <ng-container matColumnDef=\"select\">\n\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"!!(masterToggleChecked$ | async)\"\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\n </mat-checkbox>\n </mat-header-cell>\n\n <mat-cell *matCellDef=\"let row\">\n @if (!row.isGroupFooter) {\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n }\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n {{ selection.selected.length }}\n </mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"index\">\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"groupHeader\">\n <mat-cell *matCellDef=\"let row\">\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\n <button mat-icon-button (click)=\"updateGroup(row);\">\n @if (!row.isExpanded) {\n <mat-icon>chevron_right</mat-icon>\n }\n @if (row.isExpanded) {\n <mat-icon>expand_more</mat-icon>\n }\n </button>\n {{row.groupHeaderName}}\n </div>\n <div style=\"flex-grow: 1\">\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\n </div>\n </mat-cell>\n </ng-container>\n\n @if (showHeader$ | async) {\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\n }\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\n\n </mat-table>\n\n</cdk-virtual-scroll-viewport>\n\n<div class=\"flx-row-end sticky\">\n <tb-paginator #tbPaginator\n [dataSource]=\"dataSource\"\n [tableElRef]=\"tableElRef\"\n [data$]=\"data$\">\n </tb-paginator>\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n</div>\n\n", styles: [".mat-mdc-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-mdc-paginator-container{min-height:initial!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}:host::ng-deep .mdc-data-table__cell,:host::ng-deep .mdc-data-table__header-cell{padding:0 0 0 .2rem;line-height:normal}::ng-deep .op-date-time-input{line-height:3rem;font-size:.9rem;font-family:Roboto,Helvetica Neue,sans-serif;padding-left:.2rem;width:12rem}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
2804
2732
  }] });
2805
2733
 
2806
2734
  // here is how to use it
@@ -2832,18 +2760,15 @@ class CustomCellDirective {
2832
2760
  noExport: !metaData
2833
2761
  };
2834
2762
  }
2835
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: CustomCellDirective, deps: [{ token: i0.TemplateRef, optional: true }, { token: i1$2.CdkColumnDef, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
2836
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: CustomCellDirective, isStandalone: false, selector: "[customCell]", inputs: { customCell: "customCell", displayName: "displayName", preSort: "preSort", TemplateRef: "TemplateRef", customCellOrder: "customCellOrder", customCellWidth: "customCellWidth" }, ngImport: i0 }); }
2763
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: CustomCellDirective, deps: [{ token: i0.TemplateRef, optional: true }, { token: i1$4.CdkColumnDef, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
2764
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: CustomCellDirective, isStandalone: true, selector: "[customCell]", inputs: { customCell: "customCell", displayName: "displayName", preSort: "preSort", TemplateRef: "TemplateRef", customCellOrder: "customCellOrder", customCellWidth: "customCellWidth" }, ngImport: i0 }); }
2837
2765
  }
2838
2766
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: CustomCellDirective, decorators: [{
2839
2767
  type: Directive,
2840
- args: [{
2841
- selector: '[customCell]',
2842
- standalone: false
2843
- }]
2768
+ args: [{ selector: '[customCell]' }]
2844
2769
  }], ctorParameters: () => [{ type: i0.TemplateRef, decorators: [{
2845
2770
  type: Optional
2846
- }] }, { type: i1$2.CdkColumnDef, decorators: [{
2771
+ }] }, { type: i1$4.CdkColumnDef, decorators: [{
2847
2772
  type: Optional
2848
2773
  }] }], propDecorators: { customCell: [{
2849
2774
  type: Input
@@ -2884,11 +2809,11 @@ class GenColDisplayerComponent {
2884
2809
  this.tableState.setHiddenColumns(displayCols.map(c => ({ key: c.key, visible: c.isVisible })));
2885
2810
  }
2886
2811
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GenColDisplayerComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
2887
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: GenColDisplayerComponent, isStandalone: false, selector: "tb-col-displayer", ngImport: i0, template: "<ng-container *ngIf=\"columns$ | async as displayCols\">\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation cdkDropListLockAxis='y'>\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\"\r\n *ngFor=\"let col of displayCols\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\" [matTooltip]=\"col.displayName || (col.key | spaceCase)\">\r\n <button mat-icon-button class=\"show-hide\" *ngIf=\"col.isVisible; else hidden\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n <ng-template #hidden>\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n </ng-template>\r\n\r\n </div>\r\n </button>\r\n </div>\r\n </mat-menu>\r\n</ng-container>\r\n", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i6$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i9.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2812
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: GenColDisplayerComponent, isStandalone: true, selector: "tb-col-displayer", ngImport: i0, template: "@if (columns$ | async; as displayCols) {\n <span matTooltip=\"Show/hide columns\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">visibility_off</mat-icon>\n </button>\n </span>\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\n <button mat-menu-item>\n <span matTooltip=\"Close\">\n <button class=\"filter-button\" mat-icon-button>\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </button>\n <button mat-menu-item stop-propagation>\n <span matTooltip=\"Show all columns\">\n <button mat-icon-button (click)=\"reset(displayCols)\">\n <mat-icon color=\"primary\">done_all</mat-icon>\n </button>\n </span>\n <span matTooltip=\"Hide all columns\">\n <button mat-icon-button (click)=\"unset(displayCols)\">\n <mat-icon color=\"primary\">cancel</mat-icon>\n </button>\n </span>\n </button>\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation cdkDropListLockAxis='y'>\n @for (col of displayCols; track col) {\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\"\n >\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\" [matTooltip]=\"col.displayName || (col.key | spaceCase)\">\n @if (col.isVisible) {\n <button mat-icon-button class=\"show-hide\">\n <mat-icon color=\"primary\">check_box</mat-icon>\n </button>\n } @else {\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\n <mat-icon>indeterminate_check_box</mat-icon>\n </button>\n }\n <p class=\"label\">\n {{col.displayName || (col.key | spaceCase) }}\n </p>\n </div>\n </button>\n }\n </div>\n </mat-menu>\n}\n", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"], dependencies: [{ kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: 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: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2888
2813
  }
2889
2814
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GenColDisplayerComponent, decorators: [{
2890
2815
  type: Component,
2891
- args: [{ selector: 'tb-col-displayer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-container *ngIf=\"columns$ | async as displayCols\">\r\n <span matTooltip=\"Show/hide columns\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n </button>\r\n </span>\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\r\n\r\n <button mat-menu-item>\r\n <span matTooltip=\"Close\">\r\n <button class=\"filter-button\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <button mat-menu-item stop-propagation>\r\n <span matTooltip=\"Show all columns\">\r\n <button mat-icon-button (click)=\"reset(displayCols)\">\r\n <mat-icon color=\"primary\">done_all</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <span matTooltip=\"Hide all columns\">\r\n <button mat-icon-button (click)=\"unset(displayCols)\">\r\n <mat-icon color=\"primary\">cancel</mat-icon>\r\n </button>\r\n </span>\r\n </button>\r\n\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation cdkDropListLockAxis='y'>\r\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\"\r\n *ngFor=\"let col of displayCols\">\r\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\" [matTooltip]=\"col.displayName || (col.key | spaceCase)\">\r\n <button mat-icon-button class=\"show-hide\" *ngIf=\"col.isVisible; else hidden\">\r\n <mat-icon color=\"primary\">check_box</mat-icon>\r\n </button>\r\n <p class=\"label\">\r\n {{col.displayName || (col.key | spaceCase) }}\r\n </p>\r\n\r\n <ng-template #hidden>\r\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\r\n <mat-icon>indeterminate_check_box</mat-icon>\r\n </button>\r\n </ng-template>\r\n\r\n </div>\r\n </button>\r\n </div>\r\n </mat-menu>\r\n</ng-container>\r\n", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"] }]
2816
+ args: [{ selector: 'tb-col-displayer', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatTooltip, MatIconButton, MatMenuTrigger, MatIcon, MatMenu, MatMenuItem, StopPropagationDirective, CdkDropList, CdkDrag, AsyncPipe, SpaceCasePipe], template: "@if (columns$ | async; as displayCols) {\n <span matTooltip=\"Show/hide columns\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">visibility_off</mat-icon>\n </button>\n </span>\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\">\n <button mat-menu-item>\n <span matTooltip=\"Close\">\n <button class=\"filter-button\" mat-icon-button>\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </button>\n <button mat-menu-item stop-propagation>\n <span matTooltip=\"Show all columns\">\n <button mat-icon-button (click)=\"reset(displayCols)\">\n <mat-icon color=\"primary\">done_all</mat-icon>\n </button>\n </span>\n <span matTooltip=\"Hide all columns\">\n <button mat-icon-button (click)=\"unset(displayCols)\">\n <mat-icon color=\"primary\">cancel</mat-icon>\n </button>\n </span>\n </button>\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" stop-propagation cdkDropListLockAxis='y'>\n @for (col of displayCols; track col) {\n <button [class.isHidden]=\"!col.isVisible\" stop-propagation mat-menu-item cdkDrag [cdkDragData]=\"col\"\n >\n <div (click)=\"col.isVisible = !col.isVisible; emit(displayCols)\" style=\"display: flex; align-items: center;\" [matTooltip]=\"col.displayName || (col.key | spaceCase)\">\n @if (col.isVisible) {\n <button mat-icon-button class=\"show-hide\">\n <mat-icon color=\"primary\">check_box</mat-icon>\n </button>\n } @else {\n <button mat-icon-button matTooltip=\"Show Column\" class=\"show-hide\">\n <mat-icon>indeterminate_check_box</mat-icon>\n </button>\n }\n <p class=\"label\">\n {{col.displayName || (col.key | spaceCase) }}\n </p>\n </div>\n </button>\n }\n </div>\n </mat-menu>\n}\n", styles: [".show-hide{margin-right:15px;height:24px;width:24px;padding:4px}.label{color:#6495ed;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;text-align:left;margin:0;font-size:17px;font-weight:700;display:inline-block;width:66%}.row{margin:0;padding:0}.isHidden{background-color:#d3d3d3;color:#a9a9a9;font-weight:700;font-size:17px;white-space:nowrap}.filter-button{margin-top:10px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.mdc-list-item__primary-text{display:inline-block;width:100%}\n"] }]
2892
2817
  }], ctorParameters: () => [{ type: TableStore }] });
2893
2818
 
2894
2819
  class WrapperFilterStore extends ComponentStore {
@@ -2922,29 +2847,13 @@ class GenFilterDisplayerComponent {
2922
2847
  this.filterStore.addFilter({ key: metaData.key, fieldType: metaData.fieldType });
2923
2848
  }
2924
2849
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GenFilterDisplayerComponent, deps: [{ token: TableStore }, { token: WrapperFilterStore }], target: i0.ɵɵFactoryTarget.Component }); }
2925
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: GenFilterDisplayerComponent, isStandalone: false, selector: "tb-filter-displayer", ngImport: i0, template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\r\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let md of filterCols$ | async\" (click)=\"addFilter(md)\" mat-menu-item>\r\n <span class=\"filter-labels\">{{md.displayName || (md.key | spaceCase)}}</span>\r\n </button>\r\n</mat-menu>\r\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i6$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2850
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: GenFilterDisplayerComponent, isStandalone: true, selector: "tb-filter-displayer", ngImport: i0, template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n @for (md of filterCols$ | async; track md) {\n <button (click)=\"addFilter(md)\" mat-menu-item>\n <span class=\"filter-labels\">{{md.displayName || (md.key | spaceCase)}}</span>\n </button>\n }\n</mat-menu>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: 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: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2926
2851
  }
2927
2852
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GenFilterDisplayerComponent, decorators: [{
2928
2853
  type: Component,
2929
- args: [{ selector: 'tb-filter-displayer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\r\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let md of filterCols$ | async\" (click)=\"addFilter(md)\" mat-menu-item>\r\n <span class=\"filter-labels\">{{md.displayName || (md.key | spaceCase)}}</span>\r\n </button>\r\n</mat-menu>\r\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"] }]
2854
+ args: [{ selector: 'tb-filter-displayer', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIconButton, StopPropagationDirective, MatTooltip, MatMenuTrigger, MatIcon, MatMenu, MatMenuItem, AsyncPipe, SpaceCasePipe], template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n @for (md of filterCols$ | async; track md) {\n <button (click)=\"addFilter(md)\" mat-menu-item>\n <span class=\"filter-labels\">{{md.displayName || (md.key | spaceCase)}}</span>\n </button>\n }\n</mat-menu>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"] }]
2930
2855
  }], ctorParameters: () => [{ type: TableStore }, { type: WrapperFilterStore }] });
2931
2856
 
2932
- class DateFilterComponent {
2933
- constructor() {
2934
- this.FilterType = FilterType;
2935
- }
2936
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DateFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2937
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: DateFilterComponent, isStandalone: false, selector: "tb-date-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "<ng-container *ngIf=\"CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull\">\r\n <mat-form-field>\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\r\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #cal></mat-datepicker>\r\n </mat-form-field>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"CurrentFilterType === FilterType.DateBetween\">\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <mat-form-field class=\"my-filter\" >\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\r\n (click)=\"fromVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #fromVal></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #toVal></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n</ng-container>\r\n\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i8$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$1.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2938
- }
2939
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DateFilterComponent, decorators: [{
2940
- type: Component,
2941
- args: [{ selector: 'tb-date-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: false, template: "<ng-container *ngIf=\"CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull\">\r\n <mat-form-field>\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\r\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #cal></mat-datepicker>\r\n </mat-form-field>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"CurrentFilterType === FilterType.DateBetween\">\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <mat-form-field class=\"my-filter\" >\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\r\n (click)=\"fromVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #fromVal></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #toVal></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n</ng-container>\r\n\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
2942
- }], propDecorators: { info: [{
2943
- type: Input
2944
- }], CurrentFilterType: [{
2945
- type: Input
2946
- }] } });
2947
-
2948
2857
  class InFilterComponent {
2949
2858
  constructor(ref) {
2950
2859
  this.ref = ref;
@@ -2984,11 +2893,11 @@ class InFilterComponent {
2984
2893
  this.onChange(this.value);
2985
2894
  }
2986
2895
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InFilterComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2987
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: InFilterComponent, isStandalone: false, selector: "lib-in-filter", inputs: { type: "type" }, providers: [{
2896
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: InFilterComponent, isStandalone: true, selector: "lib-in-filter", inputs: { type: "type" }, providers: [{
2988
2897
  provide: NG_VALUE_ACCESSOR,
2989
2898
  useExisting: InFilterComponent,
2990
2899
  multi: true
2991
- }], ngImport: i0, template: "<div class=inline>\r\n <div *ngFor=\"let val of value; index as i\">\r\n <input *ngIf=\"type === FieldType.Number || type === FieldType.Currency\"\r\n [ngModel]=\"val\" (ngModelChange)=\"onValueChange(i,$event)\"\r\n [readonly]=\"i+1 < value.length\" type=\"number\" [ngModelOptions]=\"{standalone:true}\" [autoFocus]=\"i === value.length - 1\"/>\r\n <input *ngIf=\"type !== FieldType.Number && type !== FieldType.Currency\"\r\n [ngModel]=\"val\" (ngModelChange)=\"onValueChange(i,$event)\"\r\n [readonly]=\"i+1 < value.length\" type=\"string\" [ngModelOptions]=\"{standalone:true}\"\r\n #input [autoFocus]=\"i === value.length - 1\" />\r\n <button [disabled]=\"value.length <= 1\" (click)=\"removeInput(i)\">-</button>\r\n <button *ngIf=\"i === value.length - 1\" [disabled]=\"val == undefined || val === ''\" (click)=\"addInput()\">+</button>\r\n </div>\r\n</div>\r\n", styles: [".inline{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AutoFocusDirective, selector: "[autoFocus]", inputs: ["autoFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2900
+ }], ngImport: i0, template: "<div class=inline>\n @for (val of value; track val; let i = $index) {\n <div>\n @if (type === FieldType.Number || type === FieldType.Currency) {\n <input\n [ngModel]=\"val\" (ngModelChange)=\"onValueChange(i,$event)\"\n [readonly]=\"i+1 < value.length\" type=\"number\" [ngModelOptions]=\"{standalone:true}\" [autoFocus]=\"i === value.length - 1\"/>\n }\n @if (type !== FieldType.Number && type !== FieldType.Currency) {\n <input\n [ngModel]=\"val\" (ngModelChange)=\"onValueChange(i,$event)\"\n [readonly]=\"i+1 < value.length\" type=\"string\" [ngModelOptions]=\"{standalone:true}\"\n #input [autoFocus]=\"i === value.length - 1\" />\n }\n <button [disabled]=\"value.length <= 1\" (click)=\"removeInput(i)\">-</button>\n @if (i === value.length - 1) {\n <button [disabled]=\"val == undefined || val === ''\" (click)=\"addInput()\">+</button>\n }\n </div>\n }\n </div>\n", styles: [".inline{display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AutoFocusDirective, selector: "[autoFocus]", inputs: ["autoFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2992
2901
  }
2993
2902
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: InFilterComponent, decorators: [{
2994
2903
  type: Component,
@@ -2996,7 +2905,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
2996
2905
  provide: NG_VALUE_ACCESSOR,
2997
2906
  useExisting: InFilterComponent,
2998
2907
  multi: true
2999
- }], standalone: false, template: "<div class=inline>\r\n <div *ngFor=\"let val of value; index as i\">\r\n <input *ngIf=\"type === FieldType.Number || type === FieldType.Currency\"\r\n [ngModel]=\"val\" (ngModelChange)=\"onValueChange(i,$event)\"\r\n [readonly]=\"i+1 < value.length\" type=\"number\" [ngModelOptions]=\"{standalone:true}\" [autoFocus]=\"i === value.length - 1\"/>\r\n <input *ngIf=\"type !== FieldType.Number && type !== FieldType.Currency\"\r\n [ngModel]=\"val\" (ngModelChange)=\"onValueChange(i,$event)\"\r\n [readonly]=\"i+1 < value.length\" type=\"string\" [ngModelOptions]=\"{standalone:true}\"\r\n #input [autoFocus]=\"i === value.length - 1\" />\r\n <button [disabled]=\"value.length <= 1\" (click)=\"removeInput(i)\">-</button>\r\n <button *ngIf=\"i === value.length - 1\" [disabled]=\"val == undefined || val === ''\" (click)=\"addInput()\">+</button>\r\n </div>\r\n</div>\r\n", styles: [".inline{display:inline-block}\n"] }]
2908
+ }], imports: [FormsModule, AutoFocusDirective], template: "<div class=inline>\n @for (val of value; track val; let i = $index) {\n <div>\n @if (type === FieldType.Number || type === FieldType.Currency) {\n <input\n [ngModel]=\"val\" (ngModelChange)=\"onValueChange(i,$event)\"\n [readonly]=\"i+1 < value.length\" type=\"number\" [ngModelOptions]=\"{standalone:true}\" [autoFocus]=\"i === value.length - 1\"/>\n }\n @if (type !== FieldType.Number && type !== FieldType.Currency) {\n <input\n [ngModel]=\"val\" (ngModelChange)=\"onValueChange(i,$event)\"\n [readonly]=\"i+1 < value.length\" type=\"string\" [ngModelOptions]=\"{standalone:true}\"\n #input [autoFocus]=\"i === value.length - 1\" />\n }\n <button [disabled]=\"value.length <= 1\" (click)=\"removeInput(i)\">-</button>\n @if (i === value.length - 1) {\n <button [disabled]=\"val == undefined || val === ''\" (click)=\"addInput()\">+</button>\n }\n </div>\n }\n </div>\n", styles: [".inline{display:inline-block}\n"] }]
3000
2909
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { type: [{
3001
2910
  type: Input
3002
2911
  }] } });
@@ -3007,27 +2916,43 @@ class NumberFilterComponent {
3007
2916
  this.FieldType = FieldType;
3008
2917
  }
3009
2918
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NumberFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3010
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: NumberFilterComponent, isStandalone: false, selector: "tb-number-filter", inputs: { CurrentFilterType: "CurrentFilterType", info: "info" }, ngImport: i0, template: "<ng-container *ngIf=\"CurrentFilterType !== FilterType.NumberBetween && CurrentFilterType !== FilterType.IsNull && CurrentFilterType !== FilterType.In\">\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" type=\"number\"/>\r\n </mat-form-field>\r\n</ng-container>\r\n\r\n\r\n<ng-container *ngIf=\"CurrentFilterType === FilterType.NumberBetween\">\r\n <ng-container ngModelGroup=\"filterValue\" >\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"Start\" type=\"number\"/>\r\n </mat-form-field>\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"End\" type=\"number\"/>\r\n </mat-form-field>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<div class=\"inline\" *ngIf=\"CurrentFilterType === FilterType.In\">\r\n <lib-in-filter name='filterValue' [type]=\"FieldType.Number\" [(ngModel)]='info.filterValue' ></lib-in-filter>\r\n</div>\r\n", styles: [".switch{display:inline-block}.my-filter{margin-right:15px}.inline{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$1.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2919
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: NumberFilterComponent, isStandalone: true, selector: "tb-number-filter", inputs: { CurrentFilterType: "CurrentFilterType", info: "info" }, ngImport: i0, template: "@if (CurrentFilterType !== FilterType.NumberBetween && CurrentFilterType !== FilterType.IsNull && CurrentFilterType !== FilterType.In) {\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" type=\"number\"/>\n </mat-form-field>\n}\n\n\n@if (CurrentFilterType === FilterType.NumberBetween) {\n <ng-container ngModelGroup=\"filterValue\" >\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"Start\" type=\"number\"/>\n </mat-form-field>\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"End\" type=\"number\"/>\n </mat-form-field>\n </ng-container>\n}\n\n@if (CurrentFilterType === FilterType.In) {\n <div class=\"inline\">\n <lib-in-filter name='filterValue' [type]=\"FieldType.Number\" [(ngModel)]='info.filterValue' ></lib-in-filter>\n </div>\n}\n", styles: [".switch{display:inline-block}.my-filter{margin-right:15px}.inline{display:inline-block}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { 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.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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3011
2920
  }
3012
2921
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NumberFilterComponent, decorators: [{
3013
2922
  type: Component,
3014
- args: [{ selector: 'tb-number-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: false, template: "<ng-container *ngIf=\"CurrentFilterType !== FilterType.NumberBetween && CurrentFilterType !== FilterType.IsNull && CurrentFilterType !== FilterType.In\">\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" type=\"number\"/>\r\n </mat-form-field>\r\n</ng-container>\r\n\r\n\r\n<ng-container *ngIf=\"CurrentFilterType === FilterType.NumberBetween\">\r\n <ng-container ngModelGroup=\"filterValue\" >\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"Start\" type=\"number\"/>\r\n </mat-form-field>\r\n <mat-form-field class=\"my-filter\">\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"End\" type=\"number\"/>\r\n </mat-form-field>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<div class=\"inline\" *ngIf=\"CurrentFilterType === FilterType.In\">\r\n <lib-in-filter name='filterValue' [type]=\"FieldType.Number\" [(ngModel)]='info.filterValue' ></lib-in-filter>\r\n</div>\r\n", styles: [".switch{display:inline-block}.my-filter{margin-right:15px}.inline{display:inline-block}\n"] }]
2923
+ args: [{ selector: 'tb-number-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], imports: [MatFormField, MatInput, FormsModule, InFilterComponent], template: "@if (CurrentFilterType !== FilterType.NumberBetween && CurrentFilterType !== FilterType.IsNull && CurrentFilterType !== FilterType.In) {\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" type=\"number\"/>\n </mat-form-field>\n}\n\n\n@if (CurrentFilterType === FilterType.NumberBetween) {\n <ng-container ngModelGroup=\"filterValue\" >\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"Start\" type=\"number\"/>\n </mat-form-field>\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"End\" type=\"number\"/>\n </mat-form-field>\n </ng-container>\n}\n\n@if (CurrentFilterType === FilterType.In) {\n <div class=\"inline\">\n <lib-in-filter name='filterValue' [type]=\"FieldType.Number\" [(ngModel)]='info.filterValue' ></lib-in-filter>\n </div>\n}\n", styles: [".switch{display:inline-block}.my-filter{margin-right:15px}.inline{display:inline-block}\n"] }]
3015
2924
  }], propDecorators: { CurrentFilterType: [{
3016
2925
  type: Input
3017
2926
  }], info: [{
3018
2927
  type: Input
3019
2928
  }] } });
3020
2929
 
2930
+ class DateFilterComponent {
2931
+ constructor() {
2932
+ this.FilterType = FilterType;
2933
+ }
2934
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DateFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2935
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: DateFilterComponent, isStandalone: true, selector: "tb-date-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if (CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull) {\n <mat-form-field>\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter></mat-datepicker-toggle>\n <mat-datepicker #cal></mat-datepicker>\n </mat-form-field>\n}\n\n@if (CurrentFilterType === FilterType.DateBetween) {\n <ng-container ngModelGroup=\"filterValue\">\n <mat-form-field class=\"my-filter\" >\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\n (click)=\"fromVal.open()\"/>\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter></mat-datepicker-toggle>\n <mat-datepicker #fromVal></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter></mat-datepicker-toggle>\n <mat-datepicker #toVal></mat-datepicker>\n </mat-form-field>\n </ng-container>\n }\n\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { 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.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2936
+ }
2937
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DateFilterComponent, decorators: [{
2938
+ type: Component,
2939
+ args: [{ selector: 'tb-date-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], imports: [MatFormField, MatInput, FormsModule, MatDatepickerInput, MatDatepickerToggle, MatSuffix, MatDatepicker], template: "@if (CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull) {\n <mat-form-field>\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter></mat-datepicker-toggle>\n <mat-datepicker #cal></mat-datepicker>\n </mat-form-field>\n}\n\n@if (CurrentFilterType === FilterType.DateBetween) {\n <ng-container ngModelGroup=\"filterValue\">\n <mat-form-field class=\"my-filter\" >\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\n (click)=\"fromVal.open()\"/>\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter></mat-datepicker-toggle>\n <mat-datepicker #fromVal></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter></mat-datepicker-toggle>\n <mat-datepicker #toVal></mat-datepicker>\n </mat-form-field>\n </ng-container>\n }\n\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
2940
+ }], propDecorators: { info: [{
2941
+ type: Input
2942
+ }], CurrentFilterType: [{
2943
+ type: Input
2944
+ }] } });
2945
+
3021
2946
  class DateTimeFilterComponent {
3022
2947
  constructor() {
3023
2948
  this.FilterType = FilterType;
3024
2949
  }
3025
2950
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DateTimeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3026
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: DateTimeFilterComponent, isStandalone: false, selector: "tb-date-time-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "<ng-container *ngIf=\"CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull\">\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"CurrentFilterType === FilterType.DateTimeBetween\" ngModelGroup=\"filterValue\">\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\r\n</ng-container>", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$1.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2951
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: DateTimeFilterComponent, isStandalone: true, selector: "tb-date-time-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if (CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull) {\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\n}\n\n@if (CurrentFilterType === FilterType.DateTimeBetween) {\n <ng-container ngModelGroup=\"filterValue\">\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\n </ng-container>\n}", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3027
2952
  }
3028
2953
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DateTimeFilterComponent, decorators: [{
3029
2954
  type: Component,
3030
- args: [{ selector: 'tb-date-time-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: false, template: "<ng-container *ngIf=\"CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull\">\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"CurrentFilterType === FilterType.DateTimeBetween\" ngModelGroup=\"filterValue\">\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\r\n</ng-container>", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
2955
+ args: [{ selector: 'tb-date-time-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], imports: [FormsModule], template: "@if (CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull) {\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\n}\n\n@if (CurrentFilterType === FilterType.DateTimeBetween) {\n <ng-container ngModelGroup=\"filterValue\">\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\n </ng-container>\n}", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
3031
2956
  }], propDecorators: { info: [{
3032
2957
  type: Input
3033
2958
  }], CurrentFilterType: [{
@@ -3054,196 +2979,17 @@ class FilterComponent {
3054
2979
  }
3055
2980
  }
3056
2981
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FilterComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
3057
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: FilterComponent, isStandalone: false, selector: "tb-filter", inputs: { filter: "filter" }, outputs: { close: "close" }, ngImport: i0, template: "<mat-card appearance=\"outlined\" class=\"filter-card\" *ngIf=\"filter\">\r\n <mat-card-content>\r\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\r\n <div class=\"head-row\" >\r\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\r\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\r\n matTooltip=\"Close\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"filter-row\">\r\n <div class=\"inline\">\r\n <mat-form-field class=\"my-filter\" >\r\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" >\r\n <mat-option *ngFor=\"let kvp of filterTypes[filter.fieldType] | keyvalue \" [value]=\"$any(kvp.value)[0]\">\r\n {{ kvp.key }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container [ngSwitch]=\"true\">\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\r\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber\" >\r\n <ng-container *ngTemplateOutlet=\"String\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency\">\r\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" ></tb-number-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Boolean\">\r\n <ng-container *ngTemplateOutlet=\"Boolean\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Date\">\r\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.DateTime\">\r\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-time-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase='filter.fieldType === FieldType.Enum' >\r\n <ng-container *ngTemplateOutlet=\"Enum\"></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" *ngIf=\"currentFilterType === FilterType.IsNull\">\r\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\r\n Apply\r\n </button>\r\n \r\n \r\n <ng-template #String>\r\n <mat-form-field class=\"my-filter\" *ngIf=\"currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n </mat-form-field>\r\n <ng-container *ngIf=\"currentFilterType === FilterType.In\">\r\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" ></lib-in-filter>\r\n </ng-container>\r\n </ng-template>\r\n \r\n <ng-template #Boolean >\r\n <div class=\"switch\" [ngSwitch]=\"currentFilterType\">\r\n <div class=\"switch\" *ngSwitchCase=\"FilterType.BooleanEquals\">\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\r\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #Enum>\r\n <ng-container *ngIf='currentFilterType === FilterType.In' >\r\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\r\n </ng-container>\r\n </ng-template>\r\n </form>\r\n </mat-card-content>\r\n</mat-card>\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i5.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i5$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i7$1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7$1.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i8$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DateFilterComponent, selector: "tb-date-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "component", type: NumberFilterComponent, selector: "tb-number-filter", inputs: ["CurrentFilterType", "info"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }, { kind: "component", type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }, { kind: "component", type: DateTimeFilterComponent, selector: "tb-date-time-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2982
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: FilterComponent, isStandalone: true, selector: "tb-filter", inputs: { filter: "filter" }, outputs: { close: "close" }, ngImport: i0, template: "@if (filter) {\n <mat-card appearance=\"outlined\" class=\"filter-card\">\n <mat-card-content>\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\n <div class=\"head-row\" >\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\n matTooltip=\"Close\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n </div>\n <div class=\"filter-row\">\n <div class=\"inline\">\n <mat-form-field class=\"my-filter\" >\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" >\n @for (kvp of filterTypes[filter.fieldType] | keyvalue ; track kvp) {\n <mat-option [value]=\"$any(kvp.value)[0]\">\n {{ kvp.key }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @switch (true) {\n @case (filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber) {\n <ng-container *ngTemplateOutlet=\"String\"></ng-container>\n }\n @case (filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency) {\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" ></tb-number-filter>\n }\n @case (filter.fieldType === FieldType.Boolean) {\n <ng-container *ngTemplateOutlet=\"Boolean\"></ng-container>\n }\n @case (filter.fieldType === FieldType.Date) {\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-filter>\n }\n @case (filter.fieldType === FieldType.DateTime) {\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-time-filter>\n }\n @case (filter.fieldType === FieldType.Enum) {\n <ng-container *ngTemplateOutlet=\"Enum\"></ng-container>\n }\n }\n @if (currentFilterType === FilterType.IsNull) {\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\">\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\n </mat-radio-group>\n }\n </div>\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\n Apply\n </button>\n <ng-template #String>\n @if (currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In) {\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\n </mat-form-field>\n }\n @if (currentFilterType === FilterType.In) {\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" ></lib-in-filter>\n }\n </ng-template>\n <ng-template #Boolean >\n <div class=\"switch\">\n @switch (currentFilterType) {\n @case (FilterType.BooleanEquals) {\n <div class=\"switch\">\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\n </mat-radio-group>\n </div>\n }\n }\n </div>\n </ng-template>\n <ng-template #Enum>\n @if (currentFilterType === FilterType.In) {\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\n }\n </ng-template>\n </form>\n </mat-card-content>\n </mat-card>\n}\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NumberFilterComponent, selector: "tb-number-filter", inputs: ["CurrentFilterType", "info"] }, { kind: "component", type: DateFilterComponent, selector: "tb-date-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "component", type: DateTimeFilterComponent, selector: "tb-date-time-filter", inputs: ["info", "CurrentFilterType"] }, { kind: "directive", type: MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: InFilterComponent, selector: "lib-in-filter", inputs: ["type"] }, { kind: "component", type: InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3058
2983
  }
3059
2984
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FilterComponent, decorators: [{
3060
2985
  type: Component,
3061
- args: [{ selector: 'tb-filter', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<mat-card appearance=\"outlined\" class=\"filter-card\" *ngIf=\"filter\">\r\n <mat-card-content>\r\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\r\n <div class=\"head-row\" >\r\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\r\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\r\n matTooltip=\"Close\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"filter-row\">\r\n <div class=\"inline\">\r\n <mat-form-field class=\"my-filter\" >\r\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" >\r\n <mat-option *ngFor=\"let kvp of filterTypes[filter.fieldType] | keyvalue \" [value]=\"$any(kvp.value)[0]\">\r\n {{ kvp.key }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container [ngSwitch]=\"true\">\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\r\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber\" >\r\n <ng-container *ngTemplateOutlet=\"String\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency\">\r\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" ></tb-number-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Boolean\">\r\n <ng-container *ngTemplateOutlet=\"Boolean\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.Date\">\r\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"filter.fieldType === FieldType.DateTime\">\r\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-time-filter>\r\n </ng-container>\r\n <ng-container *ngSwitchCase='filter.fieldType === FieldType.Enum' >\r\n <ng-container *ngTemplateOutlet=\"Enum\"></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" *ngIf=\"currentFilterType === FilterType.IsNull\">\r\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\r\n Apply\r\n </button>\r\n \r\n \r\n <ng-template #String>\r\n <mat-form-field class=\"my-filter\" *ngIf=\"currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In\">\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n </mat-form-field>\r\n <ng-container *ngIf=\"currentFilterType === FilterType.In\">\r\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" ></lib-in-filter>\r\n </ng-container>\r\n </ng-template>\r\n \r\n <ng-template #Boolean >\r\n <div class=\"switch\" [ngSwitch]=\"currentFilterType\">\r\n <div class=\"switch\" *ngSwitchCase=\"FilterType.BooleanEquals\">\r\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\r\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\r\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #Enum>\r\n <ng-container *ngIf='currentFilterType === FilterType.In' >\r\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\r\n </ng-container>\r\n </ng-template>\r\n </form>\r\n </mat-card-content>\r\n</mat-card>\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
2986
+ args: [{ selector: 'tb-filter', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatCard, MatCardContent, FormsModule, MatIconButton, MatTooltip, MatIcon, MatFormField, MatSelect, MatOption, NgTemplateOutlet, NumberFilterComponent, DateFilterComponent, DateTimeFilterComponent, MatRadioGroup, MatRadioButton, MatButton, MatInput, InFilterComponent, InListFilterComponent, KeyValuePipe, SpaceCasePipe], template: "@if (filter) {\n <mat-card appearance=\"outlined\" class=\"filter-card\">\n <mat-card-content>\n <form #form=\"ngForm\" (keydown.enter)=\"onEnter(form.value,$event)\" (keydown.escape)=\"close.emit()\">\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"filter.filterId\" />\n <input type=\"hidden\" name=\"key\" [ngModel]=\"filter.key\" />\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"filter.fieldType\" />\n <div class=\"head-row\" >\n <h4 class=\"filter-name\">{{(filter.key | spaceCase)}} Filter</h4>\n <button class=\"cancel-button small-button\" color=\"primary\" mat-icon-button (click)=\"close.emit();\" type=\"button\"\n matTooltip=\"Close\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n </div>\n <div class=\"filter-row\">\n <div class=\"inline\">\n <mat-form-field class=\"my-filter\" >\n <mat-select placeholder=\"Select Filter Type\" name=\"filterType\" [(ngModel)]=\"currentFilterType\" >\n @for (kvp of filterTypes[filter.fieldType] | keyvalue ; track kvp) {\n <mat-option [value]=\"$any(kvp.value)[0]\">\n {{ kvp.key }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @switch (true) {\n @case (filter.fieldType === FieldType.String || filter.fieldType === FieldType.Array || filter.fieldType === FieldType.Link ||\n filter.fieldType === FieldType.Unknown || filter.fieldType === FieldType.PhoneNumber) {\n <ng-container *ngTemplateOutlet=\"String\"></ng-container>\n }\n @case (filter.fieldType === FieldType.Number || filter.fieldType === FieldType.Currency) {\n <tb-number-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\" ></tb-number-filter>\n }\n @case (filter.fieldType === FieldType.Boolean) {\n <ng-container *ngTemplateOutlet=\"Boolean\"></ng-container>\n }\n @case (filter.fieldType === FieldType.Date) {\n <tb-date-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-filter>\n }\n @case (filter.fieldType === FieldType.DateTime) {\n <tb-date-time-filter [info]=\"filter\" [CurrentFilterType]=\"currentFilterType!\"></tb-date-time-filter>\n }\n @case (filter.fieldType === FieldType.Enum) {\n <ng-container *ngTemplateOutlet=\"Enum\"></ng-container>\n }\n }\n @if (currentFilterType === FilterType.IsNull) {\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\">\n <mat-radio-button [value]=\"true\">True</mat-radio-button>\n <mat-radio-button [value]=\"false\">False</mat-radio-button>\n </mat-radio-group>\n }\n </div>\n <button mat-button (click)=\"state.addFilter(form.value)\" disableRipple [disabled]=\"form.value.filterValue==undefined || !form.value.filterType\">\n Apply\n </button>\n <ng-template #String>\n @if (currentFilterType !== FilterType.IsNull && currentFilterType !== FilterType.In) {\n <mat-form-field class=\"my-filter\">\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\n </mat-form-field>\n }\n @if (currentFilterType === FilterType.In) {\n <lib-in-filter [type]=\"FieldType.String\" name='filterValue' [(ngModel)]=\"filter.filterValue\" ></lib-in-filter>\n }\n </ng-template>\n <ng-template #Boolean >\n <div class=\"switch\">\n @switch (currentFilterType) {\n @case (FilterType.BooleanEquals) {\n <div class=\"switch\">\n <mat-radio-group name=\"filterValue\" [ngModel]=\"filter.filterValue\" >\n <mat-radio-button [value]=\"true\" preventEnter>True</mat-radio-button>\n <mat-radio-button [value]=\"false\" preventEnter>False</mat-radio-button>\n </mat-radio-group>\n </div>\n }\n }\n </div>\n </ng-template>\n <ng-template #Enum>\n @if (currentFilterType === FilterType.In) {\n <tb-in-list-filter [key]='filter.key' name='filterValue' [(ngModel)]='filter.filterValue' ></tb-in-list-filter>\n }\n </ng-template>\n </form>\n </mat-card-content>\n </mat-card>\n}\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"] }]
3062
2987
  }], ctorParameters: () => [{ type: TableStore }], propDecorators: { filter: [{
3063
2988
  type: Input
3064
2989
  }], close: [{
3065
2990
  type: Output
3066
2991
  }] } });
3067
2992
 
3068
- class MaterialModule {
3069
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3070
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: MaterialModule, imports: [MatSlideToggleModule,
3071
- MatTableModule,
3072
- MatSelectModule,
3073
- MatDialogModule,
3074
- MatDatepickerModule,
3075
- MatRadioModule,
3076
- MatButtonModule,
3077
- MatExpansionModule,
3078
- MatStepperModule,
3079
- MatToolbarModule,
3080
- MatTooltipModule,
3081
- MatNativeDateModule,
3082
- MatProgressSpinnerModule,
3083
- MatGridListModule,
3084
- MatCardModule,
3085
- MatSidenavModule,
3086
- MatTabsModule,
3087
- MatInputModule,
3088
- MatTabsModule,
3089
- MatCheckboxModule,
3090
- MatMenuModule,
3091
- MatIconModule,
3092
- MatBadgeModule,
3093
- MatSortModule,
3094
- MatAutocompleteModule,
3095
- MatPaginatorModule,
3096
- MatChipsModule,
3097
- MatDialogModule], exports: [MatSlideToggleModule,
3098
- MatTableModule,
3099
- MatSelectModule,
3100
- MatDialogModule,
3101
- MatDatepickerModule,
3102
- MatRadioModule,
3103
- MatButtonModule,
3104
- MatExpansionModule,
3105
- MatStepperModule,
3106
- MatToolbarModule,
3107
- MatTooltipModule,
3108
- MatNativeDateModule,
3109
- MatProgressSpinnerModule,
3110
- MatGridListModule,
3111
- MatCardModule,
3112
- MatSidenavModule,
3113
- MatTabsModule,
3114
- MatInputModule,
3115
- MatTabsModule,
3116
- MatCheckboxModule,
3117
- MatMenuModule,
3118
- MatIconModule,
3119
- MatBadgeModule,
3120
- MatSortModule,
3121
- MatAutocompleteModule,
3122
- MatPaginatorModule,
3123
- MatChipsModule,
3124
- MatDialogModule] }); }
3125
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MaterialModule, imports: [MatSlideToggleModule,
3126
- MatTableModule,
3127
- MatSelectModule,
3128
- MatDialogModule,
3129
- MatDatepickerModule,
3130
- MatRadioModule,
3131
- MatButtonModule,
3132
- MatExpansionModule,
3133
- MatStepperModule,
3134
- MatToolbarModule,
3135
- MatTooltipModule,
3136
- MatNativeDateModule,
3137
- MatProgressSpinnerModule,
3138
- MatGridListModule,
3139
- MatCardModule,
3140
- MatSidenavModule,
3141
- MatTabsModule,
3142
- MatInputModule,
3143
- MatTabsModule,
3144
- MatCheckboxModule,
3145
- MatMenuModule,
3146
- MatIconModule,
3147
- MatBadgeModule,
3148
- MatSortModule,
3149
- MatAutocompleteModule,
3150
- MatPaginatorModule,
3151
- MatChipsModule,
3152
- MatDialogModule, MatSlideToggleModule,
3153
- MatTableModule,
3154
- MatSelectModule,
3155
- MatDialogModule,
3156
- MatDatepickerModule,
3157
- MatRadioModule,
3158
- MatButtonModule,
3159
- MatExpansionModule,
3160
- MatStepperModule,
3161
- MatToolbarModule,
3162
- MatTooltipModule,
3163
- MatNativeDateModule,
3164
- MatProgressSpinnerModule,
3165
- MatGridListModule,
3166
- MatCardModule,
3167
- MatSidenavModule,
3168
- MatTabsModule,
3169
- MatInputModule,
3170
- MatTabsModule,
3171
- MatCheckboxModule,
3172
- MatMenuModule,
3173
- MatIconModule,
3174
- MatBadgeModule,
3175
- MatSortModule,
3176
- MatAutocompleteModule,
3177
- MatPaginatorModule,
3178
- MatChipsModule,
3179
- MatDialogModule] }); }
3180
- }
3181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MaterialModule, decorators: [{
3182
- type: NgModule,
3183
- args: [{
3184
- imports: [
3185
- MatSlideToggleModule,
3186
- MatTableModule,
3187
- MatSelectModule,
3188
- MatDialogModule,
3189
- MatDatepickerModule,
3190
- MatRadioModule,
3191
- MatButtonModule,
3192
- MatExpansionModule,
3193
- MatStepperModule,
3194
- MatToolbarModule,
3195
- MatTooltipModule,
3196
- MatNativeDateModule,
3197
- MatProgressSpinnerModule,
3198
- MatGridListModule,
3199
- MatCardModule,
3200
- MatSidenavModule,
3201
- MatTabsModule,
3202
- MatInputModule,
3203
- MatTabsModule,
3204
- MatCheckboxModule,
3205
- MatMenuModule,
3206
- MatIconModule,
3207
- MatBadgeModule,
3208
- MatSortModule,
3209
- MatAutocompleteModule,
3210
- MatPaginatorModule,
3211
- MatChipsModule,
3212
- MatDialogModule,
3213
- ],
3214
- exports: [
3215
- MatSlideToggleModule,
3216
- MatTableModule,
3217
- MatSelectModule,
3218
- MatDialogModule,
3219
- MatDatepickerModule,
3220
- MatRadioModule,
3221
- MatButtonModule,
3222
- MatExpansionModule,
3223
- MatStepperModule,
3224
- MatToolbarModule,
3225
- MatTooltipModule,
3226
- MatNativeDateModule,
3227
- MatProgressSpinnerModule,
3228
- MatGridListModule,
3229
- MatCardModule,
3230
- MatSidenavModule,
3231
- MatTabsModule,
3232
- MatInputModule,
3233
- MatTabsModule,
3234
- MatCheckboxModule,
3235
- MatMenuModule,
3236
- MatIconModule,
3237
- MatBadgeModule,
3238
- MatSortModule,
3239
- MatAutocompleteModule,
3240
- MatPaginatorModule,
3241
- MatChipsModule,
3242
- MatDialogModule,
3243
- ]
3244
- }]
3245
- }] });
3246
-
3247
2993
  class MultiSortDirective extends MatSort {
3248
2994
  constructor(state) {
3249
2995
  super();
@@ -3265,7 +3011,7 @@ class MultiSortDirective extends MatSort {
3265
3011
  });
3266
3012
  }
3267
3013
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MultiSortDirective, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Directive }); }
3268
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MultiSortDirective, isStandalone: false, selector: "[multiSort]", inputs: { disabled: ["matSortDisabled", "disabled"] }, providers: [
3014
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MultiSortDirective, isStandalone: true, selector: "[multiSort]", inputs: { disabled: ["matSortDisabled", "disabled"] }, providers: [
3269
3015
  { provide: MatSort, useExisting: MultiSortDirective }
3270
3016
  ], exportAs: ["multiSort"], usesInheritance: true, ngImport: i0 }); }
3271
3017
  }
@@ -3277,8 +3023,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
3277
3023
  inputs: ['disabled: matSortDisabled'],
3278
3024
  providers: [
3279
3025
  { provide: MatSort, useExisting: MultiSortDirective }
3280
- ],
3281
- standalone: false
3026
+ ]
3282
3027
  }]
3283
3028
  }], ctorParameters: () => [{ type: TableStore }] });
3284
3029
 
@@ -3366,16 +3111,13 @@ class TableFilterDirective extends ComponentStore {
3366
3111
  });
3367
3112
  }
3368
3113
  }
3369
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableFilterDirective, deps: [{ token: i2$1.NgControl, optional: true }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3370
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: TableFilterDirective, isStandalone: false, selector: "[tbFilter]", inputs: { filterType: "filterType", key: "key", fieldType: "fieldType", filterId: "filterId", active: "active", filterValue: "filterValue" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
3114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableFilterDirective, deps: [{ token: i1.NgControl, optional: true }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3115
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: TableFilterDirective, isStandalone: true, selector: "[tbFilter]", inputs: { filterType: "filterType", key: "key", fieldType: "fieldType", filterId: "filterId", active: "active", filterValue: "filterValue" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
3371
3116
  }
3372
3117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableFilterDirective, decorators: [{
3373
3118
  type: Directive,
3374
- args: [{
3375
- selector: "[tbFilter]",
3376
- standalone: false
3377
- }]
3378
- }], ctorParameters: () => [{ type: i2$1.NgControl, decorators: [{
3119
+ args: [{ selector: "[tbFilter]" }]
3120
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
3379
3121
  type: Optional
3380
3122
  }] }, { type: TableWrapperDirective, decorators: [{
3381
3123
  type: Optional
@@ -3420,8 +3162,8 @@ class TableFilterStringContainsDirective extends TableFilterDirective {
3420
3162
  }
3421
3163
  super.ngOnChanges(changes);
3422
3164
  }
3423
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableFilterStringContainsDirective, deps: [{ token: i2$1.NgControl, optional: true }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3424
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: TableFilterStringContainsDirective, isStandalone: false, selector: "[tbFilterStringContains]", inputs: { key: ["tbFilterStringContains", "key"], filterValue: "filterValue", filterId: "filterId", active: "active" }, providers: [{ provide: TableFilterDirective, useExisting: TableFilterStringContainsDirective }], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
3165
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableFilterStringContainsDirective, deps: [{ token: i1.NgControl, optional: true }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3166
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: TableFilterStringContainsDirective, isStandalone: true, selector: "[tbFilterStringContains]", inputs: { key: ["tbFilterStringContains", "key"], filterValue: "filterValue", filterId: "filterId", active: "active" }, providers: [{ provide: TableFilterDirective, useExisting: TableFilterStringContainsDirective }], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
3425
3167
  }
3426
3168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableFilterStringContainsDirective, decorators: [{
3427
3169
  type: Directive,
@@ -3433,10 +3175,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
3433
3175
  'filterValue:filterValue',
3434
3176
  'filterId: filterId',
3435
3177
  'active: active',
3436
- ],
3437
- standalone: false
3178
+ ]
3438
3179
  }]
3439
- }], ctorParameters: () => [{ type: i2$1.NgControl, decorators: [{
3180
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
3440
3181
  type: Optional
3441
3182
  }] }, { type: TableWrapperDirective, decorators: [{
3442
3183
  type: Optional
@@ -3527,7 +3268,7 @@ class TbSelectedFilterDirective extends TableCustomFilterDirectiveBase {
3527
3268
  }
3528
3269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TbSelectedFilterDirective, decorators: [{
3529
3270
  type: Directive
3530
- }], ctorParameters: () => [{ type: i3$3.Observable }, { type: undefined }, { type: TableWrapperDirective, decorators: [{
3271
+ }], ctorParameters: () => [{ type: i3$1.Observable }, { type: undefined }, { type: TableWrapperDirective, decorators: [{
3531
3272
  type: Optional
3532
3273
  }] }] });
3533
3274
  // Checkbox
@@ -3540,8 +3281,8 @@ class MatCheckboxTbFilterDirective extends TbSelectedFilterDirective {
3540
3281
  super(matCheckbox.change, () => matCheckbox.checked, wrapper);
3541
3282
  this.matCheckbox = matCheckbox;
3542
3283
  }
3543
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatCheckboxTbFilterDirective, deps: [{ token: i7.MatCheckbox }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3544
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatCheckboxTbFilterDirective, isStandalone: false, selector: "mat-checkbox[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatCheckboxTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3284
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatCheckboxTbFilterDirective, deps: [{ token: i4.MatCheckbox }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3285
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatCheckboxTbFilterDirective, isStandalone: true, selector: "mat-checkbox[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatCheckboxTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3545
3286
  }
3546
3287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatCheckboxTbFilterDirective, decorators: [{
3547
3288
  type: Directive,
@@ -3550,10 +3291,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
3550
3291
  inputs: [
3551
3292
  ...inputs
3552
3293
  ],
3553
- providers: [{ provide: TableCustomFilterDirective, useExisting: MatCheckboxTbFilterDirective }],
3554
- standalone: false
3294
+ providers: [{ provide: TableCustomFilterDirective, useExisting: MatCheckboxTbFilterDirective }]
3555
3295
  }]
3556
- }], ctorParameters: () => [{ type: i7.MatCheckbox }, { type: TableWrapperDirective, decorators: [{
3296
+ }], ctorParameters: () => [{ type: i4.MatCheckbox }, { type: TableWrapperDirective, decorators: [{
3557
3297
  type: Optional
3558
3298
  }] }] });
3559
3299
  class MatSlideToggleTbFilterDirective extends TbSelectedFilterDirective {
@@ -3568,8 +3308,8 @@ class MatSlideToggleTbFilterDirective extends TbSelectedFilterDirective {
3568
3308
  ngOnInit() {
3569
3309
  super.ngOnInit();
3570
3310
  }
3571
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatSlideToggleTbFilterDirective, deps: [{ token: i5$2.MatSlideToggle }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3572
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatSlideToggleTbFilterDirective, isStandalone: false, selector: "mat-slide-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatSlideToggleTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3311
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatSlideToggleTbFilterDirective, deps: [{ token: i5.MatSlideToggle }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3312
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatSlideToggleTbFilterDirective, isStandalone: true, selector: "mat-slide-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatSlideToggleTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3573
3313
  }
3574
3314
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatSlideToggleTbFilterDirective, decorators: [{
3575
3315
  type: Directive,
@@ -3578,10 +3318,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
3578
3318
  inputs: [
3579
3319
  ...inputs
3580
3320
  ],
3581
- providers: [{ provide: TableCustomFilterDirective, useExisting: MatSlideToggleTbFilterDirective }],
3582
- standalone: false
3321
+ providers: [{ provide: TableCustomFilterDirective, useExisting: MatSlideToggleTbFilterDirective }]
3583
3322
  }]
3584
- }], ctorParameters: () => [{ type: i5$2.MatSlideToggle }, { type: TableWrapperDirective, decorators: [{
3323
+ }], ctorParameters: () => [{ type: i5.MatSlideToggle }, { type: TableWrapperDirective, decorators: [{
3585
3324
  type: Optional
3586
3325
  }] }] });
3587
3326
  // Radio button
@@ -3597,18 +3336,17 @@ class MatRadioButtonTbFilterDirective extends TbSelectedFilterDirective {
3597
3336
  ngOnInit() {
3598
3337
  super.ngOnInit();
3599
3338
  }
3600
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatRadioButtonTbFilterDirective, deps: [{ token: i5.MatRadioButton }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3601
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatRadioButtonTbFilterDirective, isStandalone: false, selector: "mat-radio-button[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"] }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatRadioButtonTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3339
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatRadioButtonTbFilterDirective, deps: [{ token: i6.MatRadioButton }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3340
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatRadioButtonTbFilterDirective, isStandalone: true, selector: "mat-radio-button[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"] }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatRadioButtonTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3602
3341
  }
3603
3342
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatRadioButtonTbFilterDirective, decorators: [{
3604
3343
  type: Directive,
3605
3344
  args: [{
3606
3345
  selector: 'mat-radio-button[tbCustomFilter]',
3607
3346
  inputs: ['predicate: tbCustomFilter'],
3608
- providers: [{ provide: TableCustomFilterDirective, useExisting: MatRadioButtonTbFilterDirective }],
3609
- standalone: false
3347
+ providers: [{ provide: TableCustomFilterDirective, useExisting: MatRadioButtonTbFilterDirective }]
3610
3348
  }]
3611
- }], ctorParameters: () => [{ type: i5.MatRadioButton }, { type: TableWrapperDirective, decorators: [{
3349
+ }], ctorParameters: () => [{ type: i6.MatRadioButton }, { type: TableWrapperDirective, decorators: [{
3612
3350
  type: Optional
3613
3351
  }] }] });
3614
3352
  // Option (select)
@@ -3633,8 +3371,8 @@ class MatOptionTbFilterDirective extends TbSelectedFilterDirective {
3633
3371
  ngOnInit() {
3634
3372
  super.ngOnInit();
3635
3373
  }
3636
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatOptionTbFilterDirective, deps: [{ token: i7$2.MatOption }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3637
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatOptionTbFilterDirective, isStandalone: false, selector: "mat-option[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatOptionTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3374
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatOptionTbFilterDirective, deps: [{ token: i7.MatOption }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3375
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatOptionTbFilterDirective, isStandalone: true, selector: "mat-option[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatOptionTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3638
3376
  }
3639
3377
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatOptionTbFilterDirective, decorators: [{
3640
3378
  type: Directive,
@@ -3643,10 +3381,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
3643
3381
  inputs: [
3644
3382
  ...inputs
3645
3383
  ],
3646
- providers: [{ provide: TableCustomFilterDirective, useExisting: MatOptionTbFilterDirective }],
3647
- standalone: false
3384
+ providers: [{ provide: TableCustomFilterDirective, useExisting: MatOptionTbFilterDirective }]
3648
3385
  }]
3649
- }], ctorParameters: () => [{ type: i7$2.MatOption }, { type: TableWrapperDirective, decorators: [{
3386
+ }], ctorParameters: () => [{ type: i7.MatOption }, { type: TableWrapperDirective, decorators: [{
3650
3387
  type: Optional
3651
3388
  }] }] });
3652
3389
  // Button toggle
@@ -3662,8 +3399,8 @@ class MatButtonToggleFilterDirective extends TbSelectedFilterDirective {
3662
3399
  ngOnInit() {
3663
3400
  super.ngOnInit();
3664
3401
  }
3665
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatButtonToggleFilterDirective, deps: [{ token: i8$3.MatButtonToggle }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3666
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatButtonToggleFilterDirective, isStandalone: false, selector: "mat-button-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatButtonToggleFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3402
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatButtonToggleFilterDirective, deps: [{ token: i8.MatButtonToggle }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3403
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: MatButtonToggleFilterDirective, isStandalone: true, selector: "mat-button-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatButtonToggleFilterDirective }], usesInheritance: true, ngImport: i0 }); }
3667
3404
  }
3668
3405
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: MatButtonToggleFilterDirective, decorators: [{
3669
3406
  type: Directive,
@@ -3672,10 +3409,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
3672
3409
  inputs: [
3673
3410
  ...inputs
3674
3411
  ],
3675
- providers: [{ provide: TableCustomFilterDirective, useExisting: MatButtonToggleFilterDirective }],
3676
- standalone: false
3412
+ providers: [{ provide: TableCustomFilterDirective, useExisting: MatButtonToggleFilterDirective }]
3677
3413
  }]
3678
- }], ctorParameters: () => [{ type: i8$3.MatButtonToggle }, { type: TableWrapperDirective, decorators: [{
3414
+ }], ctorParameters: () => [{ type: i8.MatButtonToggle }, { type: TableWrapperDirective, decorators: [{
3679
3415
  type: Optional
3680
3416
  }] }] });
3681
3417
 
@@ -3687,14 +3423,11 @@ class TableWrapperDirective {
3687
3423
  this.registerations.push(filter);
3688
3424
  }
3689
3425
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableWrapperDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3690
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: TableWrapperDirective, isStandalone: false, selector: "[tbWrapper]", queries: [{ propertyName: "customFilters", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filters", predicate: TableFilterDirective, descendants: true }], ngImport: i0 }); }
3426
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: TableWrapperDirective, isStandalone: true, selector: "[tbWrapper]", queries: [{ propertyName: "customFilters", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filters", predicate: TableFilterDirective, descendants: true }], ngImport: i0 }); }
3691
3427
  }
3692
3428
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableWrapperDirective, decorators: [{
3693
3429
  type: Directive,
3694
- args: [{
3695
- selector: '[tbWrapper]',
3696
- standalone: false
3697
- }]
3430
+ args: [{ selector: '[tbWrapper]' }]
3698
3431
  }], propDecorators: { customFilters: [{
3699
3432
  type: ContentChildren,
3700
3433
  args: [TableCustomFilterDirective, { descendants: true }]
@@ -3793,7 +3526,7 @@ class ExportToCsvService {
3793
3526
  }
3794
3527
  return this.datePipe.transform(val, dateFormat);
3795
3528
  }
3796
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ExportToCsvService, deps: [{ token: TableStore }, { token: TableBuilderConfigToken }, { token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
3529
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ExportToCsvService, deps: [{ token: TableStore }, { token: TableBuilderConfigToken }, { token: i1$2.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
3797
3530
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ExportToCsvService }); }
3798
3531
  }
3799
3532
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ExportToCsvService, decorators: [{
@@ -3801,7 +3534,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
3801
3534
  }], ctorParameters: () => [{ type: TableStore }, { type: undefined, decorators: [{
3802
3535
  type: Inject,
3803
3536
  args: [TableBuilderConfigToken]
3804
- }] }, { type: i2.DatePipe }] });
3537
+ }] }, { type: i1$2.DatePipe }] });
3805
3538
  const removeFromMetaData = (state, keysToRemove) => orderMetaData(state)
3806
3539
  .filter(meta => !keysToRemove.includes(meta.key));
3807
3540
  const nonExportableFields = (state) => Object.values(state.metaData)
@@ -3873,110 +3606,32 @@ function createLinkCreator(metaData) {
3873
3606
  const getKey = key(metaData);
3874
3607
  return ({
3875
3608
  link: (element) => `${base}${slashIfNeeded}${getKey(element)}`,
3876
- target,
3877
- useRouterLink,
3878
- routerLinkOptions,
3879
- });
3880
- }
3881
- }
3882
- const key = (metaData) => metaData.additional.link?.urlKey ?
3883
- (element) => get(element, metaData.additional.link.urlKey) :
3884
- metaData.additional.urlKey ?
3885
- (element) => get(element, metaData.additional.urlKey) :
3886
- (element) => get(element, metaData.key);
3887
- const parseInterpolated = (interpolatedString, element) => interpolatedString.replace(/{([^}]+)}/g, (_, key) => get(element, key));
3888
-
3889
- class SortMenuComponentStore extends ComponentStore {
3890
- constructor(tableState) {
3891
- super({ notSorted: [], sorted: [] });
3892
- this.tableState = tableState;
3893
- this.set = this.updater((state, data) => ({ ...data }));
3894
- this.setSorted = this.updater((state, sorted) => ({ ...state, sorted }));
3895
- this.setNotSorted = this.updater((state, notSorted) => ({ ...state, notSorted }));
3896
- this.sorted$ = this.select(state => state.sorted);
3897
- this.notSorted$ = this.select(state => state.notSorted);
3898
- this.setDirection = this.updater((state, sort) => {
3899
- const index = state.sorted.findIndex(s => s.active === sort.active);
3900
- const sorted = [...state.sorted];
3901
- sorted.splice(index, 1, sort);
3902
- return ({ ...state, sorted });
3609
+ target,
3610
+ useRouterLink,
3611
+ routerLinkOptions,
3903
3612
  });
3904
- this.reset = () => {
3905
- const sorted = this.tableState.sorted$.pipe(mergeMap(sort => this.tableState.metaData$.pipe(notNull(), map(meta => sort.map(s => {
3906
- return { ...s, displayName: meta[s.active]?.displayName };
3907
- })))));
3908
- const notSorted = this.tableState.metaDataArray$.pipe(mergeMap(metas => this.tableState.sorted$.pipe(map(s => metas.filter(meta => !s.some(s => s.active === meta.key))
3909
- .map(meta => ({ active: meta.key, displayName: meta.displayName }))))));
3910
- this.set(combineLatest([
3911
- sorted.pipe(distinctSortArray), notSorted.pipe(distinctSortArray)
3912
- ]).pipe(map(([sorted, notSorted]) => ({ sorted, notSorted }))));
3913
- };
3914
3613
  }
3915
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponentStore, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Injectable }); }
3916
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponentStore }); }
3917
3614
  }
3918
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponentStore, decorators: [{
3919
- type: Injectable
3920
- }], ctorParameters: () => [{ type: TableStore }] });
3921
- const equalSortArray = (arr1, arr2) => arr1.length === arr2.length && arr2.every(s1 => arr1.some(s2 => s1.active === s2.active));
3922
- const distinctSortArray = distinctUntilChanged(equalSortArray);
3615
+ const key = (metaData) => metaData.additional.link?.urlKey ?
3616
+ (element) => get(element, metaData.additional.link.urlKey) :
3617
+ metaData.additional.urlKey ?
3618
+ (element) => get(element, metaData.additional.urlKey) :
3619
+ (element) => get(element, metaData.key);
3620
+ const parseInterpolated = (interpolatedString, element) => interpolatedString.replace(/{([^}]+)}/g, (_, key) => get(element, key));
3923
3621
 
3924
- class SortMenuComponent {
3925
- constructor(tableState, store) {
3926
- this.tableState = tableState;
3927
- this.store = store;
3928
- this.SortDirection = SortDirection;
3929
- this.dirty$ = new BehaviorSubject(false);
3930
- this.apply = this.store.effect((obs) => obs.pipe(tap(() => {
3931
- this.dirty$.next(false);
3932
- this.tableState.setAllSort(this.store.sorted$.pipe(first$1()));
3933
- })));
3934
- this.sorted$ = this.store.sorted$.pipe(map(data => [...data]));
3935
- this.notSorted$ = this.store.notSorted$.pipe(map(data => [...data]));
3936
- }
3937
- reset() {
3938
- this.dirty$.next(false);
3939
- this.store.reset();
3622
+ class GroupByListComponent {
3623
+ constructor(tableStore) {
3624
+ this.tableStore = tableStore;
3940
3625
  }
3941
3626
  ngOnInit() {
3942
- this.store.reset();
3943
- }
3944
- dropIntoSorted(event) {
3945
- this.dirty$.next(true);
3946
- if (event.previousContainer === event.container) {
3947
- moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
3948
- this.store.setSorted(event.container.data);
3949
- }
3950
- else {
3951
- transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
3952
- event.container.data[event.currentIndex] = { ...event.container.data[event.currentIndex], direction: SortDirection.asc };
3953
- this.store.setSorted(event.container.data);
3954
- this.store.setNotSorted(event.previousContainer.data);
3955
- }
3956
- }
3957
- dropIntoNotSorted(event) {
3958
- if (event.previousContainer === event.container) {
3959
- return;
3960
- }
3961
- else {
3962
- this.dirty$.next(true);
3963
- transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
3964
- event.container.data[event.currentIndex] = { ...event.container.data[event.currentIndex] };
3965
- this.store.setNotSorted(event.container.data);
3966
- this.store.setSorted(event.previousContainer.data);
3967
- }
3968
- }
3969
- setDirection(sort) {
3970
- this.dirty$.next(true);
3971
- this.store.setDirection(sort);
3972
3627
  }
3973
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponent, deps: [{ token: TableStore }, { token: SortMenuComponentStore }], target: i0.ɵɵFactoryTarget.Component }); }
3974
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: SortMenuComponent, isStandalone: false, selector: "tb-sort-menu", providers: [SortMenuComponentStore], ngImport: i0, template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\r\n<ng-container *ngIf=\"sorted$ | async as sorted\">\r\n <ng-container *ngIf=\"notSorted$ | async as notSorted\">\r\n <!-- Menu Trigger -->\r\n <span matTooltip=\"Sort\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">swap_vert</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\r\n <div mat-menu-item class=\"menu-button\">\r\n <div class=\"close-button-wrapper\">\r\n <span matTooltip=\"Close\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <span *ngIf=\"dirty\" matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\r\n <mat-icon>undo</mat-icon>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Apply Button -->\r\n <div class=\"apply-button-wrapper\">\r\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\r\n stop-propagation [class.apply-border]=\"dirty\"\r\n [disabled]=\"!dirty\">\r\n Apply\r\n <ng-container *ngIf=\"dirty\">Unsaved Changes</ng-container>\r\n </button>\r\n </div>\r\n\r\n <!-- Default Sorting Text -->\r\n <div *ngIf=\"!sorted.length\" class=\"tip\" >\r\n Sorting List\r\n </div>\r\n\r\n <!-- Sorted Menu List -->\r\n <div class=\"list\"\r\n cdkDropList\r\n #sortedGroup=\"cdkDropList\"\r\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\r\n [cdkDropListData]=\"sorted\"\r\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\r\n\r\n <!-- Menu Item Wrapper -->\r\n <ng-container *ngFor=\"let sort of sorted;let i=index\">\r\n\r\n <!-- Menu Item Headers -->\r\n <span *ngIf=\"sorted.length > 1 && i === 0 \" class=\"description\" class=\"sort-header\">First By</span>\r\n <span *ngIf=\"sorted.length > 1 && i !== 0 \" class=\"description\" class=\"sort-header\">Then By</span>\r\n\r\n <!-- Menu Item -->\r\n <div mat-menu-item cdkDrag class=\"menu-item\">\r\n <div class=\"sort-item\">\r\n <span class=\"sorted-name\">\r\n {{sort.displayName || (sort.active | spaceCase)}}\r\n <span class=\"direction-text\">{{sort.direction}}</span>\r\n </span>\r\n\r\n <!-- Sort Direction Buttons -->\r\n <div class=\"up-down-buttons-wrapper\">\r\n <button class=\"up-down-button up-button\" stop-propagation\r\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\r\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\r\n arrow_upward\r\n </mat-icon>\r\n </button>\r\n\r\n <button class=\"up-down-button\" stop-propagation\r\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\r\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\r\n arrow_downward\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Default Not Sorted Text -->\r\n <div *ngIf=\"!notSorted.length\" class=\"tip\" >\r\n Not Sorted List\r\n </div>\r\n <!-- Not Sorted Menu List -->\r\n <div class=\"list\"\r\n cdkDropList\r\n #notSortedGroup=\"cdkDropList\"\r\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\r\n [cdkDropListData]=\"notSorted\"\r\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\r\n <div mat-menu-item *ngFor=\"let sort of notSorted\" class=\"menu-item\" cdkDrag>\r\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n</ng-container>\r\n</ng-container>\r\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:#fff}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer;height:27px}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-mdc-menu-item.menu-item,.mat-mdc-menu-item.menu-button{min-height:initial;padding:0 3px;line-height:25px;height:30px}.mat-mdc-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c;font-size:17px;font-weight:700}.not-sorted-name{color:#93b1ea;font-size:17px;font-weight:700}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i6$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i9.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }] }); }
3628
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GroupByListComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
3629
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: GroupByListComponent, isStandalone: true, selector: "group-by-list", ngImport: i0, template: "<mat-chip-set *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\n @if (groupByKeys?.length) {\n <span class=\"tb-group-label\">Group By:</span>\n }\n @for (groupByKey of groupByKeys; track groupByKey; let i = $index) {\n @if (i > 0) {\n <mat-icon class=\"nested-arrow\">arrow_right</mat-icon>\n }\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\n {{groupByKey | spaceCase}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n }\n</mat-chip-set>\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "component", type: MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatChipRemove, selector: "[matChipRemove]" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }] }); }
3975
3630
  }
3976
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponent, decorators: [{
3631
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GroupByListComponent, decorators: [{
3977
3632
  type: Component,
3978
- args: [{ selector: 'tb-sort-menu', providers: [SortMenuComponentStore], standalone: false, template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\r\n<ng-container *ngIf=\"sorted$ | async as sorted\">\r\n <ng-container *ngIf=\"notSorted$ | async as notSorted\">\r\n <!-- Menu Trigger -->\r\n <span matTooltip=\"Sort\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon color=\"primary\">swap_vert</mat-icon>\r\n </button>\r\n </span>\r\n\r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\r\n <div mat-menu-item class=\"menu-button\">\r\n <div class=\"close-button-wrapper\">\r\n <span matTooltip=\"Close\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <span *ngIf=\"dirty\" matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\r\n <mat-icon>undo</mat-icon>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Apply Button -->\r\n <div class=\"apply-button-wrapper\">\r\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\r\n stop-propagation [class.apply-border]=\"dirty\"\r\n [disabled]=\"!dirty\">\r\n Apply\r\n <ng-container *ngIf=\"dirty\">Unsaved Changes</ng-container>\r\n </button>\r\n </div>\r\n\r\n <!-- Default Sorting Text -->\r\n <div *ngIf=\"!sorted.length\" class=\"tip\" >\r\n Sorting List\r\n </div>\r\n\r\n <!-- Sorted Menu List -->\r\n <div class=\"list\"\r\n cdkDropList\r\n #sortedGroup=\"cdkDropList\"\r\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\r\n [cdkDropListData]=\"sorted\"\r\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\r\n\r\n <!-- Menu Item Wrapper -->\r\n <ng-container *ngFor=\"let sort of sorted;let i=index\">\r\n\r\n <!-- Menu Item Headers -->\r\n <span *ngIf=\"sorted.length > 1 && i === 0 \" class=\"description\" class=\"sort-header\">First By</span>\r\n <span *ngIf=\"sorted.length > 1 && i !== 0 \" class=\"description\" class=\"sort-header\">Then By</span>\r\n\r\n <!-- Menu Item -->\r\n <div mat-menu-item cdkDrag class=\"menu-item\">\r\n <div class=\"sort-item\">\r\n <span class=\"sorted-name\">\r\n {{sort.displayName || (sort.active | spaceCase)}}\r\n <span class=\"direction-text\">{{sort.direction}}</span>\r\n </span>\r\n\r\n <!-- Sort Direction Buttons -->\r\n <div class=\"up-down-buttons-wrapper\">\r\n <button class=\"up-down-button up-button\" stop-propagation\r\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\r\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\r\n arrow_upward\r\n </mat-icon>\r\n </button>\r\n\r\n <button class=\"up-down-button\" stop-propagation\r\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\r\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\r\n arrow_downward\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Default Not Sorted Text -->\r\n <div *ngIf=\"!notSorted.length\" class=\"tip\" >\r\n Not Sorted List\r\n </div>\r\n <!-- Not Sorted Menu List -->\r\n <div class=\"list\"\r\n cdkDropList\r\n #notSortedGroup=\"cdkDropList\"\r\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\r\n [cdkDropListData]=\"notSorted\"\r\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\r\n <div mat-menu-item *ngFor=\"let sort of notSorted\" class=\"menu-item\" cdkDrag>\r\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n</ng-container>\r\n</ng-container>\r\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:#fff}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer;height:27px}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-mdc-menu-item.menu-item,.mat-mdc-menu-item.menu-button{min-height:initial;padding:0 3px;line-height:25px;height:30px}.mat-mdc-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c;font-size:17px;font-weight:700}.not-sorted-name{color:#93b1ea;font-size:17px;font-weight:700}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"] }]
3979
- }], ctorParameters: () => [{ type: TableStore }, { type: SortMenuComponentStore }] });
3633
+ args: [{ selector: 'group-by-list', imports: [LetDirective, MatChipSet, MatIcon, MatChip, MatChipRemove, SpaceCasePipe], template: "<mat-chip-set *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\n @if (groupByKeys?.length) {\n <span class=\"tb-group-label\">Group By:</span>\n }\n @for (groupByKey of groupByKeys; track groupByKey; let i = $index) {\n @if (i > 0) {\n <mat-icon class=\"nested-arrow\">arrow_right</mat-icon>\n }\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\n {{groupByKey | spaceCase}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n }\n</mat-chip-set>\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"] }]
3634
+ }], ctorParameters: () => [{ type: TableStore }] });
3980
3635
 
3981
3636
  class KeyDisplayPipe {
3982
3637
  constructor(tableState) {
@@ -3986,14 +3641,11 @@ class KeyDisplayPipe {
3986
3641
  return this.tableState.getMetaData$(key).pipe(map(metaData => metaData.displayName || spaceCase(key)));
3987
3642
  }
3988
3643
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: KeyDisplayPipe, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Pipe }); }
3989
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: KeyDisplayPipe, isStandalone: false, name: "keyDisplay" }); }
3644
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: KeyDisplayPipe, isStandalone: true, name: "keyDisplay" }); }
3990
3645
  }
3991
3646
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: KeyDisplayPipe, decorators: [{
3992
3647
  type: Pipe,
3993
- args: [{
3994
- name: 'keyDisplay',
3995
- standalone: false
3996
- }]
3648
+ args: [{ name: 'keyDisplay' }]
3997
3649
  }], ctorParameters: () => [{ type: TableStore }] });
3998
3650
 
3999
3651
  class FormatFilterValuePipe {
@@ -4024,16 +3676,13 @@ class FormatFilterValuePipe {
4024
3676
  return value;
4025
3677
  }));
4026
3678
  }
4027
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FormatFilterValuePipe, deps: [{ token: TableStore }, { token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
4028
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: FormatFilterValuePipe, isStandalone: false, name: "formatFilterValue" }); }
3679
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FormatFilterValuePipe, deps: [{ token: TableStore }, { token: i1$2.DatePipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
3680
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: FormatFilterValuePipe, isStandalone: true, name: "formatFilterValue" }); }
4029
3681
  }
4030
3682
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FormatFilterValuePipe, decorators: [{
4031
3683
  type: Pipe,
4032
- args: [{
4033
- name: 'formatFilterValue',
4034
- standalone: false
4035
- }]
4036
- }], ctorParameters: () => [{ type: TableStore }, { type: i2.DatePipe }] });
3684
+ args: [{ name: 'formatFilterValue' }]
3685
+ }], ctorParameters: () => [{ type: TableStore }, { type: i1$2.DatePipe }] });
4037
3686
 
4038
3687
  class FormatFilterTypePipe {
4039
3688
  transform(filterType, value) {
@@ -4043,14 +3692,11 @@ class FormatFilterTypePipe {
4043
3692
  return filterType;
4044
3693
  }
4045
3694
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FormatFilterTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
4046
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: FormatFilterTypePipe, isStandalone: false, name: "formatFilterType" }); }
3695
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: FormatFilterTypePipe, isStandalone: true, name: "formatFilterType" }); }
4047
3696
  }
4048
3697
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FormatFilterTypePipe, decorators: [{
4049
3698
  type: Pipe,
4050
- args: [{
4051
- name: 'formatFilterType',
4052
- standalone: false
4053
- }]
3699
+ args: [{ name: 'formatFilterType' }]
4054
3700
  }] });
4055
3701
 
4056
3702
  class FilterChipsComponent {
@@ -4072,26 +3718,104 @@ class FilterChipsComponent {
4072
3718
  this.filterStore.clearAll();
4073
3719
  }
4074
3720
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FilterChipsComponent, deps: [{ token: TableStore }, { token: WrapperFilterStore }], target: i0.ɵɵFactoryTarget.Component }); }
4075
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: FilterChipsComponent, isStandalone: false, selector: "lib-filter-list", ngImport: i0, template: "<div style=\"display: flex; flex-direction: row;justify-content: flex-end;\" *ngrxLet=\"currentFilters$ as currentFilters\" >\r\n\r\n <button class=\"cancel-button\" *ngIf=\"currentFilters.length\" mat-icon-button (click)=\"clearAll()\"\r\n matTooltip=\"Close all Filters Cards\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n\r\n\r\n <div *ngIf=\"currentFilters.length\" class=\"float\">\r\n <div class=\"filter\" *ngFor=\"let filter of (currentFilters$ | async); index as i;\">\r\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex(i)\" > </tb-filter>\r\n </div>\r\n </div>\r\n\r\n <mat-chip-set *ngrxLet=\"filters$ as filters\">\r\n <mat-chip *ngFor=\"let filter of filters\" (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\r\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <mat-chip *ngIf=\"filters.length >= 2\" (removed)=\"tableState.clearFilters()\">\r\n Clear All\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </mat-chip-set>\r\n\r\n</div>\r\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7$3.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: i7$3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7$3.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "directive", type: i8.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "component", type: FilterComponent, selector: "tb-filter", inputs: ["filter"], outputs: ["close"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: KeyDisplayPipe, name: "keyDisplay" }, { kind: "pipe", type: FormatFilterValuePipe, name: "formatFilterValue" }, { kind: "pipe", type: FormatFilterTypePipe, name: "formatFilterType" }] }); }
3721
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: FilterChipsComponent, isStandalone: true, selector: "lib-filter-list", ngImport: i0, template: "<div style=\"display: flex; flex-direction: row;justify-content: flex-end;\" *ngrxLet=\"currentFilters$ as currentFilters\" >\n\n @if (currentFilters.length) {\n <button class=\"cancel-button\" mat-icon-button (click)=\"clearAll()\"\n matTooltip=\"Close all Filters Cards\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n }\n\n\n @if (currentFilters.length) {\n <div class=\"float\">\n @for (filter of (currentFilters$ | async); track filter; let i = $index) {\n <div class=\"filter\">\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex(i)\" > </tb-filter>\n </div>\n }\n </div>\n }\n\n <mat-chip-set *ngrxLet=\"filters$ as filters\">\n @for (filter of filters; track filter) {\n <mat-chip (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n }\n @if (filters.length >= 2) {\n <mat-chip (removed)=\"tableState.clearFilters()\">\n Clear All\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n }\n </mat-chip-set>\n\n</div>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FilterComponent, selector: "tb-filter", inputs: ["filter"], outputs: ["close"] }, { 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: MatChipRemove, selector: "[matChipRemove]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyDisplayPipe, name: "keyDisplay" }, { kind: "pipe", type: FormatFilterValuePipe, name: "formatFilterValue" }, { kind: "pipe", type: FormatFilterTypePipe, name: "formatFilterType" }] }); }
4076
3722
  }
4077
3723
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: FilterChipsComponent, decorators: [{
4078
3724
  type: Component,
4079
- args: [{ selector: 'lib-filter-list', standalone: false, template: "<div style=\"display: flex; flex-direction: row;justify-content: flex-end;\" *ngrxLet=\"currentFilters$ as currentFilters\" >\r\n\r\n <button class=\"cancel-button\" *ngIf=\"currentFilters.length\" mat-icon-button (click)=\"clearAll()\"\r\n matTooltip=\"Close all Filters Cards\">\r\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\r\n </button>\r\n\r\n\r\n <div *ngIf=\"currentFilters.length\" class=\"float\">\r\n <div class=\"filter\" *ngFor=\"let filter of (currentFilters$ | async); index as i;\">\r\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex(i)\" > </tb-filter>\r\n </div>\r\n </div>\r\n\r\n <mat-chip-set *ngrxLet=\"filters$ as filters\">\r\n <mat-chip *ngFor=\"let filter of filters\" (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\r\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <mat-chip *ngIf=\"filters.length >= 2\" (removed)=\"tableState.clearFilters()\">\r\n Clear All\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </mat-chip-set>\r\n\r\n</div>\r\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"] }]
3725
+ args: [{ selector: 'lib-filter-list', imports: [LetDirective, MatIconButton, MatTooltip, MatIcon, FilterComponent, MatChipSet, MatChip, MatChipRemove, AsyncPipe, KeyDisplayPipe, FormatFilterValuePipe, FormatFilterTypePipe], template: "<div style=\"display: flex; flex-direction: row;justify-content: flex-end;\" *ngrxLet=\"currentFilters$ as currentFilters\" >\n\n @if (currentFilters.length) {\n <button class=\"cancel-button\" mat-icon-button (click)=\"clearAll()\"\n matTooltip=\"Close all Filters Cards\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n }\n\n\n @if (currentFilters.length) {\n <div class=\"float\">\n @for (filter of (currentFilters$ | async); track filter; let i = $index) {\n <div class=\"filter\">\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex(i)\" > </tb-filter>\n </div>\n }\n </div>\n }\n\n <mat-chip-set *ngrxLet=\"filters$ as filters\">\n @for (filter of filters; track filter) {\n <mat-chip (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n }\n @if (filters.length >= 2) {\n <mat-chip (removed)=\"tableState.clearFilters()\">\n Clear All\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n }\n </mat-chip-set>\n\n</div>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{margin-right:30px;font-weight:700}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"] }]
4080
3726
  }], ctorParameters: () => [{ type: TableStore }, { type: WrapperFilterStore }] });
4081
3727
 
4082
- class GroupByListComponent {
4083
- constructor(tableStore) {
4084
- this.tableStore = tableStore;
3728
+ class SortMenuComponentStore extends ComponentStore {
3729
+ constructor(tableState) {
3730
+ super({ notSorted: [], sorted: [] });
3731
+ this.tableState = tableState;
3732
+ this.set = this.updater((state, data) => ({ ...data }));
3733
+ this.setSorted = this.updater((state, sorted) => ({ ...state, sorted }));
3734
+ this.setNotSorted = this.updater((state, notSorted) => ({ ...state, notSorted }));
3735
+ this.sorted$ = this.select(state => state.sorted);
3736
+ this.notSorted$ = this.select(state => state.notSorted);
3737
+ this.setDirection = this.updater((state, sort) => {
3738
+ const index = state.sorted.findIndex(s => s.active === sort.active);
3739
+ const sorted = [...state.sorted];
3740
+ sorted.splice(index, 1, sort);
3741
+ return ({ ...state, sorted });
3742
+ });
3743
+ this.reset = () => {
3744
+ const sorted = this.tableState.sorted$.pipe(mergeMap(sort => this.tableState.metaData$.pipe(notNull(), map(meta => sort.map(s => {
3745
+ return { ...s, displayName: meta[s.active]?.displayName };
3746
+ })))));
3747
+ const notSorted = this.tableState.metaDataArray$.pipe(mergeMap(metas => this.tableState.sorted$.pipe(map(s => metas.filter(meta => !s.some(s => s.active === meta.key))
3748
+ .map(meta => ({ active: meta.key, displayName: meta.displayName }))))));
3749
+ this.set(combineLatest([
3750
+ sorted.pipe(distinctSortArray), notSorted.pipe(distinctSortArray)
3751
+ ]).pipe(map(([sorted, notSorted]) => ({ sorted, notSorted }))));
3752
+ };
3753
+ }
3754
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponentStore, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Injectable }); }
3755
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponentStore }); }
3756
+ }
3757
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponentStore, decorators: [{
3758
+ type: Injectable
3759
+ }], ctorParameters: () => [{ type: TableStore }] });
3760
+ const equalSortArray = (arr1, arr2) => arr1.length === arr2.length && arr2.every(s1 => arr1.some(s2 => s1.active === s2.active));
3761
+ const distinctSortArray = distinctUntilChanged(equalSortArray);
3762
+
3763
+ class SortMenuComponent {
3764
+ constructor(tableState, store) {
3765
+ this.tableState = tableState;
3766
+ this.store = store;
3767
+ this.SortDirection = SortDirection;
3768
+ this.dirty$ = new BehaviorSubject(false);
3769
+ this.apply = this.store.effect((obs) => obs.pipe(tap(() => {
3770
+ this.dirty$.next(false);
3771
+ this.tableState.setAllSort(this.store.sorted$.pipe(first$1()));
3772
+ })));
3773
+ this.sorted$ = this.store.sorted$.pipe(map(data => [...data]));
3774
+ this.notSorted$ = this.store.notSorted$.pipe(map(data => [...data]));
3775
+ }
3776
+ reset() {
3777
+ this.dirty$.next(false);
3778
+ this.store.reset();
4085
3779
  }
4086
3780
  ngOnInit() {
3781
+ this.store.reset();
4087
3782
  }
4088
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GroupByListComponent, deps: [{ token: TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
4089
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: GroupByListComponent, isStandalone: false, selector: "group-by-list", ngImport: i0, template: "<mat-chip-set *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\r\n <span *ngIf=\"groupByKeys?.length\" class=\"tb-group-label\">Group By:</span>\r\n <ng-container *ngFor=\"let groupByKey of groupByKeys; let i = index;\">\r\n <mat-icon *ngIf=\"i > 0\" class=\"nested-arrow\">arrow_right</mat-icon>\r\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\r\n {{groupByKey | spaceCase}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </ng-container>\r\n</mat-chip-set>\r\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7$3.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: i7$3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7$3.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "directive", type: i8.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }] }); }
3783
+ dropIntoSorted(event) {
3784
+ this.dirty$.next(true);
3785
+ if (event.previousContainer === event.container) {
3786
+ moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
3787
+ this.store.setSorted(event.container.data);
3788
+ }
3789
+ else {
3790
+ transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
3791
+ event.container.data[event.currentIndex] = { ...event.container.data[event.currentIndex], direction: SortDirection.asc };
3792
+ this.store.setSorted(event.container.data);
3793
+ this.store.setNotSorted(event.previousContainer.data);
3794
+ }
3795
+ }
3796
+ dropIntoNotSorted(event) {
3797
+ if (event.previousContainer === event.container) {
3798
+ return;
3799
+ }
3800
+ else {
3801
+ this.dirty$.next(true);
3802
+ transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
3803
+ event.container.data[event.currentIndex] = { ...event.container.data[event.currentIndex] };
3804
+ this.store.setNotSorted(event.container.data);
3805
+ this.store.setSorted(event.previousContainer.data);
3806
+ }
3807
+ }
3808
+ setDirection(sort) {
3809
+ this.dirty$.next(true);
3810
+ this.store.setDirection(sort);
3811
+ }
3812
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponent, deps: [{ token: TableStore }, { token: SortMenuComponentStore }], target: i0.ɵɵFactoryTarget.Component }); }
3813
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: SortMenuComponent, isStandalone: true, selector: "tb-sort-menu", providers: [SortMenuComponentStore], ngImport: i0, template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\n @if (sorted$ | async; as sorted) {\n @if (notSorted$ | async; as notSorted) {\n <!-- Menu Trigger -->\n <span matTooltip=\"Sort\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">swap_vert</mat-icon>\n </button>\n </span>\n <!-- Menu -->\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\n <div mat-menu-item class=\"menu-button\">\n <div class=\"close-button-wrapper\">\n <span matTooltip=\"Close\">\n <mat-icon>close</mat-icon>\n </span>\n @if (dirty) {\n <span matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\n <mat-icon>undo</mat-icon>\n </span>\n }\n </div>\n </div>\n <!-- Apply Button -->\n <div class=\"apply-button-wrapper\">\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\n stop-propagation [class.apply-border]=\"dirty\"\n [disabled]=\"!dirty\">\n Apply\n @if (dirty) {\n Unsaved Changes\n }\n </button>\n </div>\n <!-- Default Sorting Text -->\n @if (!sorted.length) {\n <div class=\"tip\" >\n Sorting List\n </div>\n }\n <!-- Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #sortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\n [cdkDropListData]=\"sorted\"\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\n <!-- Menu Item Wrapper -->\n @for (sort of sorted; track sort; let i = $index) {\n <!-- Menu Item Headers -->\n @if (sorted.length > 1 && i === 0 ) {\n <span class=\"description\" class=\"sort-header\">First By</span>\n }\n @if (sorted.length > 1 && i !== 0 ) {\n <span class=\"description\" class=\"sort-header\">Then By</span>\n }\n <!-- Menu Item -->\n <div mat-menu-item cdkDrag class=\"menu-item\">\n <div class=\"sort-item\">\n <span class=\"sorted-name\">\n {{sort.displayName || (sort.active | spaceCase)}}\n <span class=\"direction-text\">{{sort.direction}}</span>\n </span>\n <!-- Sort Direction Buttons -->\n <div class=\"up-down-buttons-wrapper\">\n <button class=\"up-down-button up-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_upward\n </mat-icon>\n </button>\n <button class=\"up-down-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_downward\n </mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <!-- Default Not Sorted Text -->\n @if (!notSorted.length) {\n <div class=\"tip\" >\n Not Sorted List\n </div>\n }\n <!-- Not Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #notSortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\n [cdkDropListData]=\"notSorted\"\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\n @for (sort of notSorted; track sort) {\n <div mat-menu-item class=\"menu-item\" cdkDrag>\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\n </div>\n }\n </div>\n </mat-menu>\n }\n }\n</ng-container>\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:#fff}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer;height:27px}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-mdc-menu-item.menu-item,.mat-mdc-menu-item.menu-button{min-height:initial;padding:0 3px;line-height:25px;height:30px}.mat-mdc-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c;font-size:17px;font-weight:700}.not-sorted-name{color:#93b1ea;font-size:17px;font-weight:700}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: 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: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }] }); }
4090
3814
  }
4091
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: GroupByListComponent, decorators: [{
3815
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SortMenuComponent, decorators: [{
4092
3816
  type: Component,
4093
- args: [{ selector: 'group-by-list', standalone: false, template: "<mat-chip-set *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\r\n <span *ngIf=\"groupByKeys?.length\" class=\"tb-group-label\">Group By:</span>\r\n <ng-container *ngFor=\"let groupByKey of groupByKeys; let i = index;\">\r\n <mat-icon *ngIf=\"i > 0\" class=\"nested-arrow\">arrow_right</mat-icon>\r\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\r\n {{groupByKey | spaceCase}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </ng-container>\r\n</mat-chip-set>\r\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"] }]
4094
- }], ctorParameters: () => [{ type: TableStore }] });
3817
+ args: [{ selector: 'tb-sort-menu', providers: [SortMenuComponentStore], imports: [LetDirective, MatTooltip, MatIconButton, MatMenuTrigger, MatIcon, MatMenu, MatMenuItem, StopPropagationDirective, MatButton, CdkDropList, CdkDrag, NgClass, AsyncPipe, SpaceCasePipe], template: "<ng-container *ngrxLet=\"dirty$ as dirty\">\n @if (sorted$ | async; as sorted) {\n @if (notSorted$ | async; as notSorted) {\n <!-- Menu Trigger -->\n <span matTooltip=\"Sort\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon color=\"primary\">swap_vert</mat-icon>\n </button>\n </span>\n <!-- Menu -->\n <mat-menu #menu=\"matMenu\" class=\"my-mat-menu\" (closed)=\"reset()\">\n <div mat-menu-item class=\"menu-button\">\n <div class=\"close-button-wrapper\">\n <span matTooltip=\"Close\">\n <mat-icon>close</mat-icon>\n </span>\n @if (dirty) {\n <span matTooltip=\"Undo\" stop-propagation (click)=\"reset()\">\n <mat-icon>undo</mat-icon>\n </span>\n }\n </div>\n </div>\n <!-- Apply Button -->\n <div class=\"apply-button-wrapper\">\n <button mat-button color=\"primary\" (click)=\"apply(null)\"\n stop-propagation [class.apply-border]=\"dirty\"\n [disabled]=\"!dirty\">\n Apply\n @if (dirty) {\n Unsaved Changes\n }\n </button>\n </div>\n <!-- Default Sorting Text -->\n @if (!sorted.length) {\n <div class=\"tip\" >\n Sorting List\n </div>\n }\n <!-- Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #sortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[notSortedGroup]\"\n [cdkDropListData]=\"sorted\"\n (cdkDropListDropped)=\"dropIntoSorted($event)\">\n <!-- Menu Item Wrapper -->\n @for (sort of sorted; track sort; let i = $index) {\n <!-- Menu Item Headers -->\n @if (sorted.length > 1 && i === 0 ) {\n <span class=\"description\" class=\"sort-header\">First By</span>\n }\n @if (sorted.length > 1 && i !== 0 ) {\n <span class=\"description\" class=\"sort-header\">Then By</span>\n }\n <!-- Menu Item -->\n <div mat-menu-item cdkDrag class=\"menu-item\">\n <div class=\"sort-item\">\n <span class=\"sorted-name\">\n {{sort.displayName || (sort.active | spaceCase)}}\n <span class=\"direction-text\">{{sort.direction}}</span>\n </span>\n <!-- Sort Direction Buttons -->\n <div class=\"up-down-buttons-wrapper\">\n <button class=\"up-down-button up-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.asc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction !== SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_upward\n </mat-icon>\n </button>\n <button class=\"up-down-button\" stop-propagation\n (click)=\"setDirection({active:sort.active,direction:SortDirection.desc,displayName:sort.displayName})\">\n <mat-icon [ngClass]=\"sort.direction === SortDirection.asc ? 'light-arrow' : 'dark-arrow'\" class=\"up-down-icon\">\n arrow_downward\n </mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <!-- Default Not Sorted Text -->\n @if (!notSorted.length) {\n <div class=\"tip\" >\n Not Sorted List\n </div>\n }\n <!-- Not Sorted Menu List -->\n <div class=\"list\"\n cdkDropList\n #notSortedGroup=\"cdkDropList\"\n [cdkDropListConnectedTo]=\"[sortedGroup]\"\n [cdkDropListData]=\"notSorted\"\n (cdkDropListDropped)=\"dropIntoNotSorted($event)\">\n @for (sort of notSorted; track sort) {\n <div mat-menu-item class=\"menu-item\" cdkDrag>\n <span class=\"not-sorted-name\">{{sort.displayName || (sort.active | spaceCase)}}</span>\n </div>\n }\n </div>\n </mat-menu>\n }\n }\n</ng-container>\n", styles: [".cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.list{padding:5px 2px;border-bottom:solid 1px #ccc;color:#000000de;background:#fff}.light-arrow{color:#93b1ea78}.dark-arrow{color:#224e9c}.up-down-button{background-color:#fff;border-radius:30%;border-color:#0ff;padding:1px 1px 0;border-width:.5px;cursor:pointer;height:27px}.mat-icon.up-down-icon{margin-right:0;font-size:20px;font-weight:lighter}.sort-item{display:flex;align-items:center;justify-content:space-between}.up-down-buttons-wrapper{margin-left:2rem}.up-button{margin-right:.3rem}.mat-mdc-menu-item.menu-item,.mat-mdc-menu-item.menu-button{min-height:initial;padding:0 3px;line-height:25px;height:30px}.mat-mdc-menu-item.menu-item{cursor:move}.sorted-name{color:#224e9c;font-size:17px;font-weight:700}.not-sorted-name{color:#93b1ea;font-size:17px;font-weight:700}.apply-border{border:#224e9c solid .5px}.apply-border:hover{background-color:#faebd7}.apply-button-wrapper{display:grid;justify-content:center}.sort-header{font-size:10px;font-style:italic}.tip{padding:0 3px;color:#d3d3d3}.direction-text{font-size:small;font-weight:400}.close-button-wrapper{display:flex;flex-direction:row-reverse}\n"] }]
3818
+ }], ctorParameters: () => [{ type: TableStore }, { type: SortMenuComponentStore }] });
4095
3819
 
4096
3820
  class TableContainerComponent {
4097
3821
  set isVs(val) {
@@ -4321,16 +4045,16 @@ class TableContainerComponent {
4321
4045
  this.disableSort = true;
4322
4046
  return this.tbGroupBy(data, groupByKeys);
4323
4047
  }
4324
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableContainerComponent, deps: [{ token: TableStore }, { token: ExportToCsvService }, { token: TableBuilderConfigToken }, { token: i3$4.Store }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
4325
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: TableContainerComponent, isStandalone: false, selector: "tb-table-container", inputs: { tableId: "tableId", tableBuilder: "tableBuilder", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", isSticky: "isSticky", isVs: "isVs", pageSize: "pageSize", inputFilters: "inputFilters", groupHeaderTemplate: "groupHeaderTemplate", compareWithKey: "compareWithKey" }, outputs: { selection$: "selection$", data: "data", paginatorChange: "paginatorChange", OnStateReset: "OnStateReset", OnSaveState: "OnSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "customFilters", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filters", predicate: TableFilterDirective, descendants: true }, { propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], viewQueries: [{ propertyName: "genericTableComponent", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" >\r\n</ng-content>\r\n\r\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\r\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n\r\n\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n <ng-content select=\".tb-header-title\"\r\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\r\n\r\n </ng-content>\r\n <group-by-list></group-by-list>\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list></lib-filter-list>\r\n <ng-container *ngIf=\"!tableSettings.hideHeader\">\r\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\r\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\r\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-template #allMenu>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\r\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\r\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\r\n </mat-menu>\r\n </ng-template>\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div style=\"clear: both;\" *ngIf=\"!_isVs\">\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\r\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\r\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\r\n [compareWithKey]=\"compareWithKey\">\r\n </tb-generic-table>\r\n </div>\r\n\r\n <div style=\"clear: both;\" *ngIf=\"_isVs\">\r\n <tb-generic-table-vs [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\r\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\r\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\r\n (paginatorChange)=\"paginatorChange.emit()\">\r\n </tb-generic-table-vs>\r\n </div>\r\n\r\n\r\n <ng-template #headerMenu>\r\n <ng-container>\r\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\r\n </tb-filter-displayer>\r\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\r\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\r\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>Save to {{currentKey}}</span>\r\n </button>\r\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\r\n <span>Choose Profile</span>\r\n </button>\r\n </ng-container>\r\n\r\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\r\n <button mat-menu-item clickEmitter #add='clickEmitter'>\r\n <mat-icon>add</mat-icon>\r\n <span>New</span>\r\n </button>\r\n <ng-container *ngFor='let key of stateKeys$ | async'>\r\n <button mat-menu-item (click)='setProfileState(key)'>\r\n <div style='display: flex; align-items: center; justify-content: space-between;'>\r\n <span style='display:flex;'>{{key}}</span>\r\n <span style='display:flex;'>\r\n <span style=\"width: 120px;\"></span>\r\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\r\n </span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </mat-menu>\r\n <ng-container *opDialog='add'>\r\n <mat-form-field>\r\n <input style='width:90%' matInput #addedKey />\r\n </mat-form-field>\r\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\r\n [disabled]=\"!addedKey.value\">Add</button>\r\n </ng-container>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n</ng-container>\r\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i5$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i6$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: ClickEmitterDirective, selector: "[clickEmitter]", exportAs: ["clickEmitter"] }, { kind: "directive", type: DialogDirective, selector: "[opDialog]", inputs: ["add_opDialog_Class", "opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { kind: "component", type: GenericTableComponent, selector: "tb-generic-table", inputs: ["data$", "IndexColumn", "SelectionColumn", "trackBy", "rows", "isSticky", "columnBuilders", "columnInfos", "groupHeaderTemplate", "compareWithKey", "disableSort"], outputs: ["paginatorChange", "selection$"] }, { kind: "component", type: GenericTableVsComponent, selector: "tb-generic-table-vs" }, { kind: "component", type: GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "directive", type: MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: GroupByListComponent, selector: "group-by-list" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4048
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableContainerComponent, deps: [{ token: TableStore }, { token: ExportToCsvService }, { token: TableBuilderConfigToken }, { token: i3$2.Store }, { token: TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
4049
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { tableId: "tableId", tableBuilder: "tableBuilder", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", isSticky: "isSticky", isVs: "isVs", pageSize: "pageSize", inputFilters: "inputFilters", groupHeaderTemplate: "groupHeaderTemplate", compareWithKey: "compareWithKey" }, outputs: { selection$: "selection$", data: "data", paginatorChange: "paginatorChange", OnStateReset: "OnStateReset", OnSaveState: "OnSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "customFilters", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filters", predicate: TableFilterDirective, descendants: true }, { propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], viewQueries: [{ propertyName: "genericTableComponent", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\n <ng-content select=\".tb-header-title\"\n >\n </ng-content>\n }\n <group-by-list></group-by-list>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n @if (!tableSettings.hideHeader) {\n @if (!(collapseHeader$ | async)) {\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n } @else {\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n }\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n }\n </div>\n </div>\n\n @if (!_isVs) {\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [compareWithKey]=\"compareWithKey\">\n </tb-generic-table>\n </div>\n }\n\n @if (_isVs) {\n <div style=\"clear: both;\">\n <tb-generic-table-vs [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\n (paginatorChange)=\"paginatorChange.emit()\">\n </tb-generic-table-vs>\n </div>\n }\n\n\n <ng-template #headerMenu>\n <ng-container>\n @if (!tableSettings.hideFilter) {\n <tb-filter-displayer>\n </tb-filter-displayer>\n }\n @if (!tableSettings.hideColumnSettings) {\n <tb-col-displayer></tb-col-displayer>\n }\n @if (!tableSettings.hideSort) {\n <tb-sort-menu></tb-sort-menu>\n }\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n @if (!tableSettings.hideExport) {\n <button mat-menu-item (click)=\"exportToCsv()\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n }\n @if (currentStateKey$ | async; as currentKey) {\n @if (tableId) {\n <button mat-menu-item (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n }\n @if (tableId) {\n <button mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n }\n }\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickEmitter #add='clickEmitter'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n @for (key of stateKeys$ | async; track key) {\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n }\n </mat-menu>\n <ng-container *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </ng-container>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "component", type: GroupByListComponent, selector: "group-by-list" }, { kind: "component", type: FilterChipsComponent, selector: "lib-filter-list" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: GenericTableComponent, selector: "tb-generic-table", inputs: ["data$", "IndexColumn", "SelectionColumn", "trackBy", "rows", "isSticky", "columnBuilders", "columnInfos", "groupHeaderTemplate", "compareWithKey", "disableSort"], outputs: ["paginatorChange", "selection$"] }, { kind: "component", type: GenericTableVsComponent, selector: "tb-generic-table-vs" }, { kind: "component", type: GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "component", type: GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: ClickEmitterDirective, selector: "[clickEmitter]", exportAs: ["clickEmitter"] }, { kind: "directive", type: StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: DialogDirective, selector: "[opDialog]", inputs: ["add_opDialog_Class", "opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4326
4050
  }
4327
4051
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableContainerComponent, decorators: [{
4328
4052
  type: Component,
4329
- args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], standalone: false, template: "<ng-content select=\"[before]\" >\r\n</ng-content>\r\n\r\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\r\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n\r\n\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n <ng-content select=\".tb-header-title\"\r\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\r\n\r\n </ng-content>\r\n <group-by-list></group-by-list>\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list></lib-filter-list>\r\n <ng-container *ngIf=\"!tableSettings.hideHeader\">\r\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\r\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\r\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-template #allMenu>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\r\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\r\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\r\n </mat-menu>\r\n </ng-template>\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div style=\"clear: both;\" *ngIf=\"!_isVs\">\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\r\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\r\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\r\n [compareWithKey]=\"compareWithKey\">\r\n </tb-generic-table>\r\n </div>\r\n\r\n <div style=\"clear: both;\" *ngIf=\"_isVs\">\r\n <tb-generic-table-vs [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\r\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\r\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\r\n (paginatorChange)=\"paginatorChange.emit()\">\r\n </tb-generic-table-vs>\r\n </div>\r\n\r\n\r\n <ng-template #headerMenu>\r\n <ng-container>\r\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\r\n </tb-filter-displayer>\r\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\r\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\r\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>Save to {{currentKey}}</span>\r\n </button>\r\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\r\n <span>Choose Profile</span>\r\n </button>\r\n </ng-container>\r\n\r\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\r\n <button mat-menu-item clickEmitter #add='clickEmitter'>\r\n <mat-icon>add</mat-icon>\r\n <span>New</span>\r\n </button>\r\n <ng-container *ngFor='let key of stateKeys$ | async'>\r\n <button mat-menu-item (click)='setProfileState(key)'>\r\n <div style='display: flex; align-items: center; justify-content: space-between;'>\r\n <span style='display:flex;'>{{key}}</span>\r\n <span style='display:flex;'>\r\n <span style=\"width: 120px;\"></span>\r\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\r\n </span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </mat-menu>\r\n <ng-container *opDialog='add'>\r\n <mat-form-field>\r\n <input style='width:90%' matInput #addedKey />\r\n </mat-form-field>\r\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\r\n [disabled]=\"!addedKey.value\">Add</button>\r\n </ng-container>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n</ng-container>\r\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
4053
+ args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], imports: [MultiSortDirective, LetDirective, GroupByListComponent, FilterChipsComponent, NgTemplateOutlet, MatIconButton, MatMenuTrigger, NgClass, MatIcon, MatMenu, MatTooltip, GenericTableComponent, GenericTableVsComponent, GenFilterDisplayerComponent, GenColDisplayerComponent, SortMenuComponent, MatMenuItem, ClickEmitterDirective, StopPropagationDirective, DialogDirective, MatFormField, MatInput, MatButton, AsyncPipe], template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\n <ng-content select=\".tb-header-title\"\n >\n </ng-content>\n }\n <group-by-list></group-by-list>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n @if (!tableSettings.hideHeader) {\n @if (!(collapseHeader$ | async)) {\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n } @else {\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n }\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n }\n </div>\n </div>\n\n @if (!_isVs) {\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [compareWithKey]=\"compareWithKey\">\n </tb-generic-table>\n </div>\n }\n\n @if (_isVs) {\n <div style=\"clear: both;\">\n <tb-generic-table-vs [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\"\n (paginatorChange)=\"paginatorChange.emit()\">\n </tb-generic-table-vs>\n </div>\n }\n\n\n <ng-template #headerMenu>\n <ng-container>\n @if (!tableSettings.hideFilter) {\n <tb-filter-displayer>\n </tb-filter-displayer>\n }\n @if (!tableSettings.hideColumnSettings) {\n <tb-col-displayer></tb-col-displayer>\n }\n @if (!tableSettings.hideSort) {\n <tb-sort-menu></tb-sort-menu>\n }\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n @if (!tableSettings.hideExport) {\n <button mat-menu-item (click)=\"exportToCsv()\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n }\n @if (currentStateKey$ | async; as currentKey) {\n @if (tableId) {\n <button mat-menu-item (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n }\n @if (tableId) {\n <button mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n }\n }\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickEmitter #add='clickEmitter'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n @for (key of stateKeys$ | async; track key) {\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n }\n </mat-menu>\n <ng-container *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </ng-container>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
4330
4054
  }], ctorParameters: () => [{ type: TableStore }, { type: ExportToCsvService }, { type: undefined, decorators: [{
4331
4055
  type: Inject,
4332
4056
  args: [TableBuilderConfigToken]
4333
- }] }, { type: i3$4.Store }, { type: TableWrapperDirective, decorators: [{
4057
+ }] }, { type: i3$2.Store }, { type: TableWrapperDirective, decorators: [{
4334
4058
  type: Optional
4335
4059
  }] }], propDecorators: { genericTableComponent: [{
4336
4060
  type: ViewChild,
@@ -4464,12 +4188,12 @@ class SaveTableEffects {
4464
4188
  localStorage.setItem('global-state-storage', JSON.stringify(globalSavedState));
4465
4189
  })), { dispatch: false });
4466
4190
  }
4467
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SaveTableEffects, deps: [{ token: i1$3.Actions }, { token: i3$4.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
4191
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SaveTableEffects, deps: [{ token: i1$5.Actions }, { token: i3$2.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
4468
4192
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SaveTableEffects }); }
4469
4193
  }
4470
4194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: SaveTableEffects, decorators: [{
4471
4195
  type: Injectable
4472
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: i3$4.Store }] });
4196
+ }], ctorParameters: () => [{ type: i1$5.Actions }, { type: i3$2.Store }] });
4473
4197
 
4474
4198
  class TableBuilderModule {
4475
4199
  static forRoot(config) {
@@ -4482,7 +4206,14 @@ class TableBuilderModule {
4482
4206
  };
4483
4207
  }
4484
4208
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4485
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: TableBuilderModule, declarations: [ColumnTotalPipe,
4209
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: TableBuilderModule, imports: [CommonModule, i3$2.StoreFeatureModule, i1$5.EffectsFeatureModule, FormsModule,
4210
+ RouterModule,
4211
+ LetDirective,
4212
+ DragDropModule,
4213
+ UtilitiesModule,
4214
+ ScrollingModule,
4215
+ TableVirtualScrollModule,
4216
+ ColumnTotalPipe,
4486
4217
  TableContainerComponent,
4487
4218
  GenericTableComponent,
4488
4219
  GenericTableVsComponent,
@@ -4516,14 +4247,7 @@ class TableBuilderModule {
4516
4247
  TableFilterStringContainsDirective,
4517
4248
  TableWrapperDirective,
4518
4249
  GroupByListComponent,
4519
- DateTimeFilterComponent], imports: [CommonModule,
4520
- MaterialModule, i3$4.StoreFeatureModule, i1$3.EffectsFeatureModule, FormsModule,
4521
- RouterModule,
4522
- LetDirective,
4523
- DragDropModule,
4524
- UtilitiesModule,
4525
- ScrollingModule,
4526
- TableVirtualScrollModule], exports: [GenericTableComponent,
4250
+ DateTimeFilterComponent], exports: [GenericTableComponent,
4527
4251
  GenericTableVsComponent,
4528
4252
  PaginatorComponent,
4529
4253
  TableContainerComponent,
@@ -4548,7 +4272,6 @@ class TableBuilderModule {
4548
4272
  CurrencyPipe,
4549
4273
  PhoneNumberPipe
4550
4274
  ], imports: [CommonModule,
4551
- MaterialModule,
4552
4275
  StoreModule.forFeature('globalStorageState', storageStateReducer),
4553
4276
  EffectsModule.forFeature([SaveTableEffects]),
4554
4277
  FormsModule,
@@ -4556,14 +4279,31 @@ class TableBuilderModule {
4556
4279
  DragDropModule,
4557
4280
  UtilitiesModule,
4558
4281
  ScrollingModule,
4559
- TableVirtualScrollModule] }); }
4282
+ TableVirtualScrollModule,
4283
+ TableContainerComponent,
4284
+ GenericTableComponent,
4285
+ GenericTableVsComponent,
4286
+ PaginatorComponent,
4287
+ GenColDisplayerComponent,
4288
+ GenFilterDisplayerComponent,
4289
+ DateFilterComponent,
4290
+ FilterComponent,
4291
+ NumberFilterComponent,
4292
+ ColumnBuilderComponent,
4293
+ HeaderMenuComponent,
4294
+ InFilterComponent,
4295
+ InitializationComponent,
4296
+ InListFilterComponent,
4297
+ SortMenuComponent,
4298
+ FilterChipsComponent,
4299
+ GroupByListComponent,
4300
+ DateTimeFilterComponent] }); }
4560
4301
  }
4561
4302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TableBuilderModule, decorators: [{
4562
4303
  type: NgModule,
4563
4304
  args: [{
4564
4305
  imports: [
4565
4306
  CommonModule,
4566
- MaterialModule,
4567
4307
  StoreModule.forFeature('globalStorageState', storageStateReducer),
4568
4308
  EffectsModule.forFeature([SaveTableEffects]),
4569
4309
  FormsModule,
@@ -4573,18 +4313,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
4573
4313
  UtilitiesModule,
4574
4314
  ScrollingModule,
4575
4315
  TableVirtualScrollModule,
4576
- ],
4577
- exports: [
4316
+ ColumnTotalPipe,
4317
+ TableContainerComponent,
4578
4318
  GenericTableComponent,
4579
4319
  GenericTableVsComponent,
4580
4320
  PaginatorComponent,
4581
- TableContainerComponent,
4582
4321
  CustomCellDirective,
4583
4322
  GenColDisplayerComponent,
4584
4323
  GenFilterDisplayerComponent,
4324
+ DateFilterComponent,
4585
4325
  FilterComponent,
4586
4326
  MultiSortDirective,
4327
+ NumberFilterComponent,
4328
+ ColumnBuilderComponent,
4329
+ ArrayColumnComponent,
4330
+ LinkColumnComponent,
4331
+ HeaderMenuComponent,
4332
+ KeyDisplayPipe,
4333
+ FormatFilterValuePipe,
4334
+ FormatFilterTypePipe,
4587
4335
  ResizeColumnDirective,
4336
+ InFilterComponent,
4337
+ InitializationComponent,
4338
+ InListFilterComponent,
4339
+ SortMenuComponent,
4340
+ FilterChipsComponent,
4588
4341
  MatSlideToggleTbFilterDirective,
4589
4342
  MatRadioButtonTbFilterDirective,
4590
4343
  MatOptionTbFilterDirective,
@@ -4594,33 +4347,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
4594
4347
  TableFilterStringContainsDirective,
4595
4348
  TableWrapperDirective,
4596
4349
  GroupByListComponent,
4350
+ DateTimeFilterComponent,
4597
4351
  ],
4598
- declarations: [
4599
- ColumnTotalPipe,
4600
- TableContainerComponent,
4352
+ exports: [
4601
4353
  GenericTableComponent,
4602
4354
  GenericTableVsComponent,
4603
4355
  PaginatorComponent,
4356
+ TableContainerComponent,
4604
4357
  CustomCellDirective,
4605
4358
  GenColDisplayerComponent,
4606
4359
  GenFilterDisplayerComponent,
4607
- DateFilterComponent,
4608
4360
  FilterComponent,
4609
4361
  MultiSortDirective,
4610
- NumberFilterComponent,
4611
- ColumnBuilderComponent,
4612
- ArrayColumnComponent,
4613
- LinkColumnComponent,
4614
- HeaderMenuComponent,
4615
- KeyDisplayPipe,
4616
- FormatFilterValuePipe,
4617
- FormatFilterTypePipe,
4618
4362
  ResizeColumnDirective,
4619
- InFilterComponent,
4620
- InitializationComponent,
4621
- InListFilterComponent,
4622
- SortMenuComponent,
4623
- FilterChipsComponent,
4624
4363
  MatSlideToggleTbFilterDirective,
4625
4364
  MatRadioButtonTbFilterDirective,
4626
4365
  MatOptionTbFilterDirective,
@@ -4630,7 +4369,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
4630
4369
  TableFilterStringContainsDirective,
4631
4370
  TableWrapperDirective,
4632
4371
  GroupByListComponent,
4633
- DateTimeFilterComponent,
4634
4372
  ],
4635
4373
  providers: [
4636
4374
  SpaceCasePipe,
@@ -4751,7 +4489,7 @@ function actionStatusReducer(state = initialState, action) {
4751
4489
 
4752
4490
  class NgrxExtModule {
4753
4491
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgrxExtModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4754
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: NgrxExtModule, imports: [CommonModule, i3$4.StoreFeatureModule] }); }
4492
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: NgrxExtModule, imports: [CommonModule, i3$2.StoreFeatureModule] }); }
4755
4493
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgrxExtModule, imports: [CommonModule,
4756
4494
  StoreModule.forFeature('ActionStatus', actionStatusReducer)] }); }
4757
4495
  }
@@ -4783,24 +4521,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
4783
4521
  type: Input
4784
4522
  }] } });
4785
4523
 
4786
- /** @deprecated Import ActionStateSpinnerComponent directly instead. */
4787
- class ActionStateUiModule {
4788
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ActionStateUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4789
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.2", ngImport: i0, type: ActionStateUiModule, imports: [ActionStateSpinnerComponent], exports: [ActionStateSpinnerComponent] }); }
4790
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ActionStateUiModule, imports: [ActionStateSpinnerComponent] }); }
4791
- }
4792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: ActionStateUiModule, decorators: [{
4793
- type: NgModule,
4794
- args: [{
4795
- imports: [
4796
- ActionStateSpinnerComponent,
4797
- ],
4798
- exports: [
4799
- ActionStateSpinnerComponent,
4800
- ]
4801
- }]
4802
- }] });
4803
-
4804
4524
  /*
4805
4525
  * Public API Surface of action-state
4806
4526
  */
@@ -4886,5 +4606,5 @@ const shallowEquals = (first, second) => {
4886
4606
  * Generated bundle index. Do not edit.
4887
4607
  */
4888
4608
 
4889
- export { ActionStateSpinnerComponent, ActionStateUiModule, ActionStatus, AppStatusState, ArrayStyle, AutoFocusDirective, CancellationToken, ClickEmitterDirective, ClickSubjectDirective, ConditionalClassesDirective, CreateTableBuilder, CustomCellDirective, DateFilterComponent, DialogDirective, DialogService, DialogWrapper, FieldType, FilterChipsComponent, FilterComponent, FilterType, FunctionPipe, GenColDisplayerComponent, GenFilterDisplayerComponent, GeneralTableSettings, GenericTableComponent, GenericTableVsComponent, GroupByListComponent, HttpErrorStateDirective, HttpInProgressStateDirective, HttpNotStartedStateDirective, HttpRequestModule, HttpRequestStateDirective, HttpRequestStateFactory, HttpRequestStateStore, HttpRequestStatus, HttpRequestStrategy, HttpSuccessStateDirective, InitializationState, MatButtonToggleFilterDirective, MatCheckboxTbFilterDirective, MatOptionTbFilterDirective, MatRadioButtonTbFilterDirective, MatSlideToggleGroupDirective, MatSlideToggleTbFilterDirective, MatTableObservableDataSource, MultiSortDirective, NgrxExtModule, NotPersisitedTableSettings, PaginatorComponent, PesrsistedTableSettings, PhoneNumberPipe, PreventEnterDirective, ResizeColumnDirective, SortDirection, SpaceCasePipe, StopPropagationDirective, StylerDirective, Subjectifier, TableBuilder, TableBuilderModule, TableColumnHeaderSettings, TableContainerComponent, TableCustomFilterDirective, TableCustomFilterDirectiveBase, TableFilterDirective, TableFilterStringContainsDirective, TableStore, TableVirtualScrollObservableDataSource, TableWrapperDirective, TableWrapperFooterSettings, TableWrapperHeaderSettings, Target, TbSelectedFilterDirective, TrimWhitespaceDirective, UtilitiesModule, actionStatusReducer, chainRequest, combineArrays, createActionableSelector, createFailure, createFilterFunc, createSuccess, defaultFilter, defaultShareReplay, defaultTableState, delayOn, filterArray, filterTypeMap, getRequestorBody, getRequestorStatus, getStatusState, httpRequest, httpRequestor, inProgress, initialState, isCustomFilter, isErrorState, isFilterInfo, isSuccessOrErrorState, isSuccessState, keysToDelete, mapArray, mapError, notNull, notStarted, onWait, onceWhen, orderMetaData, orderViewableMetaData, previousAndCurrent, selectAll, selectEntities, selectEntity, selectIds, selectTotal, serverStatusTypes, setUpStoreFactory, skipOneWhen, spaceCase, stateIs, statusAdapter, statusIsSuccessOrInProgress, switchOff, tapError, tapSuccess };
4609
+ export { ActionStateSpinnerComponent, ActionStatus, AppStatusState, ArrayStyle, AutoFocusDirective, CancellationToken, ClickEmitterDirective, ClickSubjectDirective, ConditionalClassesDirective, CreateTableBuilder, CustomCellDirective, DateFilterComponent, DialogDirective, DialogService, DialogWrapper, FieldType, FilterChipsComponent, FilterComponent, FilterType, FunctionPipe, GenColDisplayerComponent, GenFilterDisplayerComponent, GeneralTableSettings, GenericTableComponent, GenericTableVsComponent, GroupByListComponent, HttpErrorStateDirective, HttpInProgressStateDirective, HttpNotStartedStateDirective, HttpRequestStateDirective, HttpRequestStateFactory, HttpRequestStateStore, HttpRequestStatus, HttpRequestStrategy, HttpSuccessStateDirective, InitializationState, MatButtonToggleFilterDirective, MatCheckboxTbFilterDirective, MatOptionTbFilterDirective, MatRadioButtonTbFilterDirective, MatSlideToggleGroupDirective, MatSlideToggleTbFilterDirective, MatTableObservableDataSource, MultiSortDirective, NgrxExtModule, NotPersisitedTableSettings, PaginatorComponent, PesrsistedTableSettings, PhoneNumberPipe, PreventEnterDirective, ResizeColumnDirective, SortDirection, SpaceCasePipe, StopPropagationDirective, StylerDirective, Subjectifier, TableBuilder, TableBuilderModule, TableColumnHeaderSettings, TableContainerComponent, TableCustomFilterDirective, TableCustomFilterDirectiveBase, TableFilterDirective, TableFilterStringContainsDirective, TableStore, TableVirtualScrollObservableDataSource, TableWrapperDirective, TableWrapperFooterSettings, TableWrapperHeaderSettings, Target, TbSelectedFilterDirective, TrimWhitespaceDirective, UtilitiesModule, actionStatusReducer, chainRequest, combineArrays, createActionableSelector, createFailure, createFilterFunc, createSuccess, defaultFilter, defaultShareReplay, defaultTableState, delayOn, filterArray, filterTypeMap, getRequestorBody, getRequestorStatus, getStatusState, httpRequest, httpRequestor, inProgress, initialState, isCustomFilter, isErrorState, isFilterInfo, isSuccessOrErrorState, isSuccessState, keysToDelete, mapArray, mapError, notNull, notStarted, onWait, onceWhen, orderMetaData, orderViewableMetaData, previousAndCurrent, selectAll, selectEntities, selectEntity, selectIds, selectTotal, serverStatusTypes, setUpStoreFactory, skipOneWhen, spaceCase, stateIs, statusAdapter, statusIsSuccessOrInProgress, switchOff, tapError, tapSuccess };
4890
4610
  //# sourceMappingURL=saydar-table-builder.mjs.map