@coolon/angular-ui-powerups 13.5.2 → 13.6.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.
Files changed (29) hide show
  1. package/esm2020/lib/angular-ui-powerups.module.mjs +8 -4
  2. package/esm2020/lib/components/components.module.mjs +6 -6
  3. package/esm2020/lib/components/exports.mjs +2 -2
  4. package/esm2020/lib/components/tables/abstract-table-model.mjs +10 -5
  5. package/esm2020/lib/components/tables/abstract-table.component.mjs +14 -60
  6. package/esm2020/lib/components/tables/column/list-propery-column-model.mjs +5 -5
  7. package/esm2020/lib/components/tables/column/property-column-model.mjs +2 -2
  8. package/esm2020/lib/components/tables/paginator/paginator.component.mjs +2 -2
  9. package/esm2020/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +3 -11
  10. package/esm2020/lib/components/tables/renderer/table-body/table-body.component.mjs +112 -0
  11. package/esm2020/lib/components/tables/table/table-model.mjs +20 -1
  12. package/esm2020/lib/components/tables/table/table.component.mjs +29 -16
  13. package/esm2020/lib/components/tables/tree-table/tree-table-component.mjs +9 -12
  14. package/fesm2015/coolon-angular-ui-powerups.mjs +458 -397
  15. package/fesm2015/coolon-angular-ui-powerups.mjs.map +1 -1
  16. package/fesm2020/coolon-angular-ui-powerups.mjs +497 -436
  17. package/fesm2020/coolon-angular-ui-powerups.mjs.map +1 -1
  18. package/lib/angular-ui-powerups.module.d.ts +4 -3
  19. package/lib/components/components.module.d.ts +31 -31
  20. package/lib/components/exports.d.ts +1 -1
  21. package/lib/components/tables/abstract-table-model.d.ts +5 -3
  22. package/lib/components/tables/abstract-table.component.d.ts +7 -13
  23. package/lib/components/tables/renderer/table-body/table-body.component.d.ts +35 -0
  24. package/lib/components/tables/table/table-model.d.ts +6 -1
  25. package/lib/components/tables/table/table.component.d.ts +7 -5
  26. package/lib/components/tables/tree-table/tree-table-component.d.ts +2 -2
  27. package/package.json +2 -2
  28. package/esm2020/lib/components/tables/renderer/default-list-cell-renderer/default-list-cell-renderer.component.mjs +0 -40
  29. package/lib/components/tables/renderer/default-list-cell-renderer/default-list-cell-renderer.component.d.ts +0 -12
@@ -1,3 +1,4 @@
1
+ import { ObserversModule } from '@angular/cdk/observers';
1
2
  import * as i4 from '@angular/common';
2
3
  import { DOCUMENT, CommonModule } from '@angular/common';
3
4
  import * as i0 from '@angular/core';
@@ -40,7 +41,7 @@ import { MatTooltipModule } from '@angular/material/tooltip';
40
41
  import * as i1$5 from '@fortawesome/angular-fontawesome';
41
42
  import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
42
43
  import * as i1$7 from '@coolon/pectin';
43
- import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, Logger, TrackExternal, ValueModel, StoreInValueModel, Command, MutableListModel, StoreInListModel, Disposable, DelegatingListModel, MutableValueModel, FocusManager, EventListenerList, Form, Guard, Binding, DebugContext, ListModel, Functions, MultipleSelectionModel, AbstractComputedListModel, DelegatingSelectionModel, DirtyTrackingForm, ComputedListModel, PageController, Deferred, Trace } from '@coolon/pectin';
44
+ import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, Logger, TrackExternal, ValueModel, StoreInValueModel, Command, MutableListModel, StoreInListModel, Disposable, DelegatingListModel, MutableValueModel, FocusManager, EventListenerList, Form, Guard, Binding, DebugContext, ListModel, Functions, MultipleSelectionModel, AbstractComputedListModel, DelegatingSelectionModel, DirtyTrackingForm, TransactionObserver, PagedListModel, PageController, Trace, ComputedListModel, Deferred } from '@coolon/pectin';
44
45
  import { __decorate, __param, __metadata, __awaiter } from 'tslib';
45
46
  import * as _ from 'lodash';
46
47
  import { isEmpty, isString, isFunction, isNil, isInteger, isEqual, uniq, first, findLast, isObject, isNumber, isNaN as isNaN$1 } from 'lodash';
@@ -50,9 +51,10 @@ import { lang as lang$1, assert as assert$1, Stringy, Klass, Opts } from '@coolo
50
51
  import { Memoize } from '@typescript-plus/fast-memoize-decorator';
51
52
  import { Enum } from 'typescript-string-enums';
52
53
  import * as i3 from '@angular/material/core';
53
- import ResizeObserver from 'resize-observer-polyfill';
54
+ import { isNil as isNil$1, isEmpty as isEmpty$1 } from 'lodash-es';
54
55
  import escapeStringRegexp from 'escape-string-regexp';
55
56
  import produce from 'immer';
57
+ import ResizeObserver from 'resize-observer-polyfill';
56
58
  import { fas } from '@fortawesome/free-solid-svg-icons';
57
59
  import * as i6$1 from '@angular/cdk/a11y';
58
60
  import { A11yModule } from '@angular/cdk/a11y';
@@ -62,7 +64,6 @@ import * as i1$e from '@angular/material/dialog';
62
64
  import { MatDialogModule, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';
63
65
  import * as i1$c from '@angular/router';
64
66
  import { UrlSegment, NavigationStart, NavigationEnd, NavigationError, NavigationCancel, RouterModule, ActivatedRouteSnapshot } from '@angular/router';
65
- import { isEmpty as isEmpty$1 } from 'lodash-es';
66
67
  import * as i1$d from '@angular/cdk/overlay';
67
68
  import * as i2$5 from '@angular/material/list';
68
69
  import { MatListModule } from '@angular/material/list';
@@ -2368,90 +2369,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
2368
2369
  args: [SwitchCaseOption]
2369
2370
  }] } });
2370
2371
 
2371
- class Dimension {
2372
- constructor(width, height) {
2373
- this.width = width;
2374
- this.height = height;
2375
- }
2376
- }
2377
-
2378
- class Point {
2379
- constructor(x, y) {
2380
- this.x = x;
2381
- this.y = y;
2382
- }
2383
- static from(data) {
2384
- return new Point(data.x, data.y);
2385
- }
2386
- translate(x, y) {
2387
- return new Point(this.x + x, this.y + y);
2388
- }
2389
- }
2390
-
2391
- class Bounds extends Dimension {
2392
- constructor(top, left, width, height) {
2393
- super(width, height);
2394
- this.top = top;
2395
- this.left = left;
2396
- this.width = width;
2397
- this.height = height;
2398
- }
2399
- relativePositionOf(point) {
2400
- if (point instanceof MouseEvent) {
2401
- return new Point(point.clientX - this.left, point.clientY - this.top);
2402
- }
2403
- else {
2404
- return new Point(point.x - this.left, point.y - this.top);
2405
- }
2406
- }
2407
- }
2408
- (function (Bounds) {
2409
- function ofElement(element) {
2410
- const rect = element.getBoundingClientRect();
2411
- return new Bounds(rect.top, rect.left, rect.width, rect.height);
2412
- }
2413
- Bounds.ofElement = ofElement;
2414
- })(Bounds || (Bounds = {}));
2415
-
2416
- class ResizeAwareComponent extends DisposableComponent {
2417
- constructor(elementRef, ngZone) {
2418
- super();
2419
- this.elementRef = elementRef;
2420
- this.ngZone = ngZone;
2421
- this._boundsModel = new MutableValueModel(new Bounds(0, 0, 0, 0));
2422
- }
2423
- ngAfterViewInit() {
2424
- const element = this.elementRef.nativeElement;
2425
- const ro = new ResizeObserver((entries, observer) => {
2426
- this.ngZone.run(() => this._updateBounds());
2427
- });
2428
- ro.observe(element);
2429
- this.onDispose(() => ro.disconnect());
2430
- setTimeout(() => this._updateBounds());
2431
- }
2432
- get boundsModel() {
2433
- return this._boundsModel.readonly;
2434
- }
2435
- get nativeElement() {
2436
- return this.elementRef.nativeElement;
2437
- }
2438
- // TODO: Make this handle body scroll
2439
- relativePositionOf(point) {
2440
- return this.bounds.relativePositionOf(point);
2441
- }
2442
- get bounds() {
2443
- return this._boundsModel.value;
2444
- }
2445
- _updateBounds() {
2446
- this._boundsModel.value = Bounds.ofElement(this.nativeElement);
2447
- }
2448
- }
2449
- ResizeAwareComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ResizeAwareComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
2450
- ResizeAwareComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: ResizeAwareComponent, usesInheritance: true, ngImport: i0 });
2451
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ResizeAwareComponent, decorators: [{
2452
- type: Directive
2453
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; } });
2454
-
2455
2372
  const HEADER_CELL_RENDERER_PORTAL = Symbol('aup-cell-header-renderer-component-ref');
2456
2373
  const CELL_RENDERER_PORTAL = Symbol('aup-cell-renderer-component-ref');
2457
2374
  const CELL_EDITOR_PORTAL = Symbol('aup-cell-editor-component-ref');
@@ -2854,9 +2771,9 @@ class CustomTemplateColumnModel extends ColumnModel {
2854
2771
  * }
2855
2772
  * }
2856
2773
  */
2857
- class AbstractTableComponent extends ResizeAwareComponent {
2858
- constructor(elementRef, ngZone, injector) {
2859
- super(elementRef, ngZone);
2774
+ class AbstractTableComponent extends DisposableComponent {
2775
+ constructor(injector) {
2776
+ super();
2860
2777
  this.injector = injector;
2861
2778
  /**
2862
2779
  * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
@@ -2869,33 +2786,14 @@ class AbstractTableComponent extends ResizeAwareComponent {
2869
2786
  this.rowHeight = new MutableValueModel(48);
2870
2787
  this.baseCssClass = 'aup-table-component';
2871
2788
  const { chain, when } = Dsl.disposeWith(this);
2872
- const actualHeaderHeight = chain(this.showHeaderModel).map(show => {
2873
- return show ? this.headerHeight.value : 0;
2874
- }, { dependsOn: this.headerHeight });
2875
- this.visibleRowCount = chain(this.boundsModel).map(bounds => {
2876
- // TODO: this doesn't take into account any css styling adjustments etc. Will investigate if it's an issue.
2877
- const rawRowCount = (bounds.height - actualHeaderHeight.value) / this.rowHeight.value;
2878
- return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
2879
- }, {
2880
- dependsOn: [actualHeaderHeight, this.rowHeight],
2881
- postponeWhile: chain(this.boundsModel).pluckNumeric('height').isLessThan(1)
2882
- });
2883
- }
2884
- get hideHeader() {
2885
- return !this.showHeader;
2886
- }
2887
- getModel() {
2888
- return lang$1.abstractMethod(this.constructor);
2889
2789
  }
2890
2790
  ngOnInit() {
2891
2791
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2892
2792
  this.getModel().initialise(this.injector);
2893
- this.columns = chain(this.getModel().columns);
2894
- this.columnIds = chain(this.columns).pluck('columnId');
2895
- this.columnsById = chain(this.columns).indexBy('columnId');
2793
+ this.columnsById = chain(this.getModel().columns).indexBy('columnId');
2896
2794
  }
2897
- isEditing(row) {
2898
- return !!this.getModel().getEditSessionFor(row);
2795
+ getModel() {
2796
+ return lang$1.abstractMethod(this.constructor);
2899
2797
  }
2900
2798
  registerColumnTemplate(columnId, templateRef, viewContainer, fillCell, padChild) {
2901
2799
  const column = this.columnsById.get(columnId);
@@ -2903,38 +2801,15 @@ class AbstractTableComponent extends ResizeAwareComponent {
2903
2801
  column.setTemplate(templateRef, viewContainer, fillCell, padChild);
2904
2802
  }
2905
2803
  }
2906
- notifyCellClicked(columnModel, row) {
2907
- this.getModel()._notifyCellClicked(columnModel, row);
2908
- }
2909
- // @Trace()
2910
- isFirstVisibleColumn(columnId) {
2911
- var _a;
2912
- return ((_a = this.getModel().firstVisibleColumn$.query().value) === null || _a === void 0 ? void 0 : _a.columnId) === columnId;
2913
- }
2914
- // @Trace()
2915
- isLastVisibleColumn(columnId) {
2916
- var _a;
2917
- return ((_a = this.getModel().lastVisibleColumn$.query().value) === null || _a === void 0 ? void 0 : _a.columnId) === columnId;
2918
- }
2919
- getColumnClasses(columnId) {
2920
- const classes = [`aup-col-${this.columnsById.get(columnId).dasherisedColumnId}`];
2921
- if (this.isFirstVisibleColumn(columnId)) {
2922
- classes.push('first-visible-column');
2923
- }
2924
- if (this.isLastVisibleColumn(columnId)) {
2925
- classes.push('last-visible-column');
2926
- }
2927
- return classes;
2928
- }
2929
2804
  }
2930
- AbstractTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
2931
- AbstractTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeaderModel: "showHeaderModel", showHeader: "showHeader", enableScrolling: "enableScrolling" }, host: { properties: { "class.enable-scrolling": "this.enableScrolling", "class": "this.baseCssClass", "class.hide-header": "this.hideHeader" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
2805
+ AbstractTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
2806
+ AbstractTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeader$: "showHeader$", showHeader: "showHeader", enableScrolling: "enableScrolling" }, host: { properties: { "class": "this.baseCssClass" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
2932
2807
  __decorate([
2933
2808
  TrackExternal({ defaultValue: true }),
2934
2809
  __metadata("design:type", ValueModel)
2935
- ], AbstractTableComponent.prototype, "showHeaderModel", void 0);
2810
+ ], AbstractTableComponent.prototype, "showHeader$", void 0);
2936
2811
  __decorate([
2937
- StoreInValueModel('showHeaderModel'),
2812
+ StoreInValueModel("showHeader$"),
2938
2813
  __metadata("design:type", Boolean)
2939
2814
  ], AbstractTableComponent.prototype, "showHeader", void 0);
2940
2815
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, decorators: [{
@@ -2943,21 +2818,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
2943
2818
  selector: 'aup-abstract-table',
2944
2819
  template: ''
2945
2820
  }]
2946
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { showHeaderModel: [{
2821
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { showHeader$: [{
2947
2822
  type: Input
2948
2823
  }], showHeader: [{
2949
2824
  type: Input
2950
2825
  }], enableScrolling: [{
2951
2826
  type: Input
2952
- }, {
2953
- type: HostBinding,
2954
- args: ['class.enable-scrolling']
2955
2827
  }], baseCssClass: [{
2956
2828
  type: HostBinding,
2957
2829
  args: ['class']
2958
- }], hideHeader: [{
2959
- type: HostBinding,
2960
- args: ['class.hide-header']
2961
2830
  }] } });
2962
2831
 
2963
2832
  class ColumnTemplateDirective {
@@ -2991,35 +2860,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
2991
2860
  type: Input
2992
2861
  }] } });
2993
2862
 
2994
- const TEXT_SEARCH_FORMATTER_KEY = `aup:table:textSearchFormatter`;
2995
- const Keys = Enum("useFunction", "useInstance", "useClass");
2996
- function EnableCellTextSearch(options) {
2997
- assert$1.notNil(options);
2998
- return (constructor) => {
2999
- const klass = Klass.get(constructor);
3000
- assert$1.isFalsey(klass.hasOwnMetadata(TEXT_SEARCH_FORMATTER_KEY), "class already decorated with @EnableCellTextSearch");
3001
- klass.defineMetadata(TEXT_SEARCH_FORMATTER_KEY, options);
3002
- };
3003
- }
3004
- (function (EnableCellTextSearch) {
3005
- function getFormatter(renderer, useDefault) {
3006
- var _a;
3007
- const options = (_a = Klass.get(renderer).getMetadata(TEXT_SEARCH_FORMATTER_KEY)) !== null && _a !== void 0 ? _a : {};
3008
- if (options[Keys.useFunction]) {
3009
- return ColumnTextSearchFormatter.forFormatter(options[Keys.useFunction]);
3010
- }
3011
- if (options[Keys.useInstance]) {
3012
- return options[Keys.useInstance];
3013
- }
3014
- if (options[Keys.useClass]) {
3015
- return new ColumnTextSearchFormatter.Delegating(options[Keys.useClass]);
3016
- }
3017
- return useDefault();
3018
- }
3019
- EnableCellTextSearch.getFormatter = getFormatter;
3020
- })(EnableCellTextSearch || (EnableCellTextSearch = {}));
3021
-
3022
- let DefaultCellRendererComponent = class DefaultCellRendererComponent {
2863
+ class DefaultCellRendererComponent {
3023
2864
  constructor() {
3024
2865
  }
3025
2866
  set value(value) {
@@ -3028,13 +2869,9 @@ let DefaultCellRendererComponent = class DefaultCellRendererComponent {
3028
2869
  get value() {
3029
2870
  return this._value;
3030
2871
  }
3031
- };
2872
+ }
3032
2873
  DefaultCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3033
2874
  DefaultCellRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DefaultCellRendererComponent, selector: "aup-default-cell-renderer", inputs: { value: "value" }, ngImport: i0, template: "<span [innerHTML]=\"value| aupHighlight\"></span>\n", styles: [""], pipes: { "aupHighlight": HighlightPipe } });
3034
- DefaultCellRendererComponent = __decorate([
3035
- EnableCellTextSearch({ useClass: ColumnTextSearchFormatter.DefaultValueFormatter }),
3036
- __metadata("design:paramtypes", [])
3037
- ], DefaultCellRendererComponent);
3038
2875
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultCellRendererComponent, decorators: [{
3039
2876
  type: Component,
3040
2877
  args: [{ selector: "aup-default-cell-renderer", template: "<span [innerHTML]=\"value| aupHighlight\"></span>\n", styles: [""] }]
@@ -3088,37 +2925,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3088
2925
  type: Input
3089
2926
  }] } });
3090
2927
 
3091
- let formatter = (row) => row.map(e => e === null || e === void 0 ? void 0 : e.toString()).join(", ");
3092
- let DefaultListCellRendererComponent = class DefaultListCellRendererComponent extends DisposableComponent {
3093
- constructor() {
3094
- super();
3095
- const { chain } = Dsl.disposeWith(this);
3096
- this.text$ = chain(this.value$).reduce(formatter);
3097
- }
3098
- };
3099
- DefaultListCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultListCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3100
- DefaultListCellRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DefaultListCellRendererComponent, selector: "aup-default-list-cell-renderer", inputs: { value$: "value$", value: "value" }, usesInheritance: true, ngImport: i0, template: "<span [innerHTML]=\"text$.value| aupHighlight\"></span>\n", styles: [""], pipes: { "aupHighlight": HighlightPipe } });
3101
- __decorate([
3102
- TrackExternal(),
3103
- __metadata("design:type", ListModel)
3104
- ], DefaultListCellRendererComponent.prototype, "value$", void 0);
3105
- __decorate([
3106
- StoreInListModel("value$"),
3107
- __metadata("design:type", Array)
3108
- ], DefaultListCellRendererComponent.prototype, "value", void 0);
3109
- DefaultListCellRendererComponent = __decorate([
3110
- EnableCellTextSearch({ useClass: ColumnTextSearchFormatter.DefaultArrayFormatter }),
3111
- __metadata("design:paramtypes", [])
3112
- ], DefaultListCellRendererComponent);
3113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultListCellRendererComponent, decorators: [{
3114
- type: Component,
3115
- args: [{ selector: "aup-default-list-cell-renderer", template: "<span [innerHTML]=\"text$.value| aupHighlight\"></span>\n", styles: [""] }]
3116
- }], ctorParameters: function () { return []; }, propDecorators: { value$: [{
3117
- type: Input
3118
- }], value: [{
3119
- type: Input
3120
- }] } });
3121
-
3122
2928
  class SelectionCellComponent extends DisposableComponent {
3123
2929
  constructor() {
3124
2930
  super();
@@ -3390,6 +3196,34 @@ class ColumnListModel extends AbstractComputedListModel {
3390
3196
  }
3391
3197
  }
3392
3198
 
3199
+ const TEXT_SEARCH_FORMATTER_KEY = `aup:table:textSearchFormatter`;
3200
+ const Keys = Enum("useFunction", "useInstance", "useClass");
3201
+ function EnableCellTextSearch(options) {
3202
+ assert$1.notNil(options);
3203
+ return (constructor) => {
3204
+ const klass = Klass.get(constructor);
3205
+ assert$1.isFalsey(klass.hasOwnMetadata(TEXT_SEARCH_FORMATTER_KEY), "class already decorated with @EnableCellTextSearch");
3206
+ klass.defineMetadata(TEXT_SEARCH_FORMATTER_KEY, options);
3207
+ };
3208
+ }
3209
+ (function (EnableCellTextSearch) {
3210
+ function getFormatter(renderer, useDefault) {
3211
+ var _a;
3212
+ const options = (_a = Klass.get(renderer).getMetadata(TEXT_SEARCH_FORMATTER_KEY)) !== null && _a !== void 0 ? _a : {};
3213
+ if (options[Keys.useFunction]) {
3214
+ return ColumnTextSearchFormatter.forFormatter(options[Keys.useFunction]);
3215
+ }
3216
+ if (options[Keys.useInstance]) {
3217
+ return options[Keys.useInstance];
3218
+ }
3219
+ if (options[Keys.useClass]) {
3220
+ return new ColumnTextSearchFormatter.Delegating(options[Keys.useClass]);
3221
+ }
3222
+ return useDefault();
3223
+ }
3224
+ EnableCellTextSearch.getFormatter = getFormatter;
3225
+ })(EnableCellTextSearch || (EnableCellTextSearch = {}));
3226
+
3393
3227
  class CustomValueColumnModel extends ColumnModel {
3394
3228
  constructor(columnId, defaults, getValue) {
3395
3229
  super(columnId, defaults);
@@ -3443,11 +3277,11 @@ class ListPropertyColumnModel extends ColumnModel {
3443
3277
  constructor(id, property, defaults) {
3444
3278
  super(id, defaults);
3445
3279
  this.property = property;
3446
- this._format = (value) => value.map(v => v === null || v === void 0 ? void 0 : v.toString()).join(", ");
3447
- this.cellRenderer(DefaultListCellRendererComponent);
3280
+ this._format = (value) => value === null || value === void 0 ? void 0 : value.map(v => v === null || v === void 0 ? void 0 : v.toString()).join(", ");
3281
+ this.cellRenderer(DefaultCellRendererComponent);
3448
3282
  }
3449
3283
  cellRenderer(componentType) {
3450
- this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.DefaultArrayFormatter()), row => row[this.property]);
3284
+ this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => ColumnTextSearchFormatter.forFormatter(value => this._format(value))), row => row[this.property]);
3451
3285
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData) => {
3452
3286
  let rowElement = rowData.row[this.property];
3453
3287
  // @ts-ignore Started complaining in ts 4.5.. but I think my logic is correct...
@@ -3488,7 +3322,7 @@ class PropertyColumnModel extends ColumnModel {
3488
3322
  this.cellRenderer(DefaultCellRendererComponent);
3489
3323
  }
3490
3324
  cellRenderer(componentType, onComponentInitOrOptions) {
3491
- this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.DefaultValueFormatter()), row => row[this.property]);
3325
+ this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => ColumnTextSearchFormatter.forFormatter(value => this._format(value))), row => row[this.property]);
3492
3326
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3493
3327
  if (firstTime) {
3494
3328
  if (isFunction(onComponentInitOrOptions)) {
@@ -3634,7 +3468,8 @@ class RowClass {
3634
3468
  class AbstractTableModel extends GarbageCollector {
3635
3469
  constructor() {
3636
3470
  super();
3637
- this._dataSource = this.registerDisposable(new DelegatingListModel());
3471
+ this._rawDataSource = this.registerDisposable(new DelegatingListModel());
3472
+ this._visibleRows$ = this.registerDisposable(new DelegatingListModel());
3638
3473
  this._columnList = this.registerDisposable(new ColumnListModel());
3639
3474
  this._editorSessions = new MutableListModel();
3640
3475
  this.rowClassNamePredicates = [];
@@ -3659,11 +3494,12 @@ class AbstractTableModel extends GarbageCollector {
3659
3494
  allowNil: true,
3660
3495
  dependsOn: this.columns
3661
3496
  });
3662
- this.dataSource = chain(this._dataSource)
3497
+ this._filteredRows$ = chain(this._rawDataSource)
3663
3498
  .reduceToList(items => this._textSearchPredicate$.value(items), {
3664
3499
  dependsOn: this._textSearchPredicate$
3665
3500
  })
3666
3501
  .replaceAll(this.rowsBeingEdited$);
3502
+ this._visibleRows$.setDelegate(this._filteredRows$);
3667
3503
  this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
3668
3504
  this.firstVisibleColumn$ = chain(this._columnList).first();
3669
3505
  this.lastVisibleColumn$ = chain(this._columnList).last();
@@ -3687,15 +3523,18 @@ class AbstractTableModel extends GarbageCollector {
3687
3523
  });
3688
3524
  this.columns.value.forEach(c => c.initialise(customInjector));
3689
3525
  }
3526
+ get visibleRows$() {
3527
+ return this._visibleRows$.readonly;
3528
+ }
3690
3529
  setDataSource(sourceOfTruth) {
3691
- this._dataSource.setDelegate(sourceOfTruth);
3530
+ this._rawDataSource.setDelegate(sourceOfTruth);
3692
3531
  }
3693
3532
  setTextSearch(searchText$, throttleDelayMilliseconds = 100) {
3694
3533
  const { chain } = Dsl.disposeWith(this);
3695
3534
  this._searchText$.setDelegate(chain(searchText$).throttle(throttleDelayMilliseconds));
3696
3535
  }
3697
3536
  identityOf(row) {
3698
- return this._dataSource.identityOf(row);
3537
+ return this._rawDataSource.identityOf(row);
3699
3538
  }
3700
3539
  get rowsBeingEdited$() {
3701
3540
  return this._rowsBeingEdited$.readonly;
@@ -3788,53 +3627,382 @@ class AbstractTableModel extends GarbageCollector {
3788
3627
  this._rowsBeingEdited$.remove(editSession.liveRowValue$.value);
3789
3628
  this._editorSessions.remove(editSession);
3790
3629
  });
3791
- return editSession;
3630
+ return editSession;
3631
+ }
3632
+ getEditSessionFor(row) {
3633
+ return this._editorSessionByRowId.get(this.identityOf(row));
3634
+ }
3635
+ cancelAllEditorSessions() {
3636
+ this._editorSessions.runInTransaction((draft) => {
3637
+ this._rowsBeingEdited$.runInTransaction(() => {
3638
+ draft.value.forEach(session => session.dispose());
3639
+ });
3640
+ });
3641
+ }
3642
+ isRowSelectionEnabledFor(column) {
3643
+ return this.isRowSelectionEnabled() && column.isRowSelectionEnabled();
3644
+ }
3645
+ isRowSelectionEnabled() {
3646
+ return this.hasUserSelectionModel() && !this.rowSelectionDisabledOnAllColumns$.value;
3647
+ }
3648
+ hasUserSelectionModel() {
3649
+ var _a;
3650
+ return !!((_a = this.selectionColumnModel) === null || _a === void 0 ? void 0 : _a.selectionModel.getDelegate());
3651
+ }
3652
+ getSelectionModel() {
3653
+ var _a;
3654
+ return (_a = this.selectionColumnModel) === null || _a === void 0 ? void 0 : _a.selectionModel;
3655
+ }
3656
+ isHoverEnabled() {
3657
+ return this.isRowSelectionEnabled() || this.rowClickListeners.listenerCount > 0;
3658
+ }
3659
+ isCursorEnabled(column) {
3660
+ return this.isRowSelectionEnabledFor(column) || this.rowClickListeners.listenerCount > 0;
3661
+ }
3662
+ selectRow(row) {
3663
+ var _a;
3664
+ (_a = this.selectionColumnModel) === null || _a === void 0 ? void 0 : _a.selectRow(row);
3665
+ }
3666
+ onRowClicked(callback) {
3667
+ return this.rowClickListeners.add(callback);
3668
+ }
3669
+ _notifyCellClicked(columnModel, row) {
3670
+ if (this.isRowSelectionEnabledFor(columnModel)) {
3671
+ this.selectRow(row);
3672
+ }
3673
+ this.rowClickListeners.fire(l => l(row));
3674
+ }
3675
+ }
3676
+ TrackExternal.oneTimeBinding(AbstractTableModel);
3677
+
3678
+ /**
3679
+ * Example:
3680
+ * @example
3681
+ * const model = new TableModel(heroList, table => {
3682
+ * table.pluck("firstName");
3683
+ * table.pluck("lastName");
3684
+ * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
3685
+ * });
3686
+ *
3687
+ * Editable tables
3688
+ * @example
3689
+ * const saveCommand = UnaryCommand.create((form: Form<Hero>) => {
3690
+ * if (form.validate()) {
3691
+ * // normal form save stuff
3692
+ * return true; // finish editing
3693
+ * }
3694
+ * return false; // continue editiing
3695
+ * }
3696
+ * const colorsNames: ListModel<string> = ...;
3697
+ * const model = TableModel.fromList(heroList, table => {
3698
+ * table.pluck("firstName").cellEditor(StringInputComponent); <-- interface CellEditor { valueModel: DirtyTrackingForm.ValueModel<string> | ValueModel<string>; }
3699
+ * table.pluck("lastName").cellEditor(StringInputComponent, {
3700
+ * validators: [Validator.present("We need a last name")]
3701
+ * });
3702
+ * table.pluck("age").cellEditor(NumberInputComponent);
3703
+ * table.pluck("favoriteColor").cellEditor(SelectInputComponent, {
3704
+ * initialiseComponent(component: SelectInputComponent) {
3705
+ * selectInput.optionsModel = colorsNames; // <- initialise our component
3706
+ * }
3707
+ * });
3708
+ * table.addEditControls(saveCommand); // <- required to enable editing
3709
+ * });
3710
+ *
3711
+ * Selection models
3712
+ * @example
3713
+ * const model = new TableModel(heroList, table => {
3714
+ * table.addSelectionColumn(selectionModel); // <- can be single or multiple selection model
3715
+ * table.pluck("firstName");
3716
+ * table.pluck("lastName");
3717
+ * });
3718
+ *
3719
+ * Custom cell renderers and editors
3720
+ * @example
3721
+ * const model = new TableModel(heroList, table => {
3722
+ * table.pluck("favoriteColor")
3723
+ * .cellHeaderRenderer(CellHeaderRendererComponent, (component, column) => {
3724
+ * // configure your component with what ever you need.
3725
+ * });
3726
+ * .cellRenderer(CellRendererComponent) // <-- interface CellEditor { value: string; }
3727
+ * .cellEditor(CellEditorComponent.); // <-- interface CellEditor { valueModel: DirtyTrackingForm.ValueModel<string> | ValueModel<string>; }
3728
+ * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
3729
+ * });
3730
+ *
3731
+ * Template columns
3732
+ * @example
3733
+ * const model = new TableModel(heroList, table => {
3734
+ * table.addSelectionColumn(selectionModel); // <- can be single or multiple selection model
3735
+ * table.addTemplateColumn("myTemplate");
3736
+ * });
3737
+ *
3738
+ * <div *aupColumnTemplate="let hero; columnId: 'myTemplate'">{{hero.age}}</div>
3739
+ *
3740
+ * I18n
3741
+ * @example
3742
+ * [table.yml]
3743
+ * table:
3744
+ * columns(ColumnTextProperties[]):
3745
+ * firstName:
3746
+ * headerText: "First Name"
3747
+ * fullName:
3748
+ * headerText: "Full Name"
3749
+ *
3750
+ * const model = new TableModel(heroList, table => {
3751
+ * table.pluck("favoriteColor").cellRenderer(...).cellEditor(...);
3752
+ * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
3753
+ *
3754
+ * table.columnTextProperties(I18n.table.columns); // <- configures all columns
3755
+ * });
3756
+ */
3757
+ class TableModel extends AbstractTableModel {
3758
+ constructor(sourceOfTruth, builder) {
3759
+ super();
3760
+ this._pageSize = new MutableValueModel();
3761
+ if (builder) {
3762
+ builder(this);
3763
+ }
3764
+ this.setDataSource(sourceOfTruth);
3765
+ const txo = new TransactionObserver({ verbose: true }).onEvent(e => console.log(e.name, e.payload));
3766
+ txo.observe("this.visibleRows$", this.visibleRows$);
3767
+ }
3768
+ get pageController() {
3769
+ return this._pageController;
3770
+ }
3771
+ enablePaging() {
3772
+ if (isNil$1(this.pageController)) {
3773
+ const pagedListModel = this.registerDisposable(PagedListModel.wrap(this._visibleRows$.getDelegate()));
3774
+ this._visibleRows$.setDelegate(pagedListModel);
3775
+ this._pageController = pagedListModel.pageController;
3776
+ this._pageController.setPageSize(this._pageSize);
3777
+ }
3778
+ }
3779
+ addSelectionColumn(selectionModel, showSelectionColumn) {
3780
+ return this._addSelectionColumn(selectionModel, showSelectionColumn);
3781
+ }
3782
+ updatePageSize(count) {
3783
+ this._pageSize.value = count;
3784
+ }
3785
+ }
3786
+
3787
+ class Dimension {
3788
+ constructor(width, height) {
3789
+ this.width = width;
3790
+ this.height = height;
3791
+ }
3792
+ }
3793
+
3794
+ class Point {
3795
+ constructor(x, y) {
3796
+ this.x = x;
3797
+ this.y = y;
3798
+ }
3799
+ static from(data) {
3800
+ return new Point(data.x, data.y);
3801
+ }
3802
+ translate(x, y) {
3803
+ return new Point(this.x + x, this.y + y);
3804
+ }
3805
+ }
3806
+
3807
+ class Bounds extends Dimension {
3808
+ constructor(top, left, width, height) {
3809
+ super(width, height);
3810
+ this.top = top;
3811
+ this.left = left;
3812
+ this.width = width;
3813
+ this.height = height;
3814
+ }
3815
+ relativePositionOf(point) {
3816
+ if (point instanceof MouseEvent) {
3817
+ return new Point(point.clientX - this.left, point.clientY - this.top);
3818
+ }
3819
+ else {
3820
+ return new Point(point.x - this.left, point.y - this.top);
3821
+ }
3822
+ }
3823
+ }
3824
+ (function (Bounds) {
3825
+ function ofElement(element) {
3826
+ const rect = element.getBoundingClientRect();
3827
+ return new Bounds(rect.top, rect.left, rect.width, rect.height);
3828
+ }
3829
+ Bounds.ofElement = ofElement;
3830
+ })(Bounds || (Bounds = {}));
3831
+
3832
+ class ResizeAwareComponent extends DisposableComponent {
3833
+ constructor(elementRef, ngZone) {
3834
+ super();
3835
+ this.elementRef = elementRef;
3836
+ this.ngZone = ngZone;
3837
+ this._boundsModel = new MutableValueModel(new Bounds(0, 0, 0, 0));
3838
+ }
3839
+ ngAfterViewInit() {
3840
+ const element = this.elementRef.nativeElement;
3841
+ const ro = new ResizeObserver((entries, observer) => {
3842
+ this.ngZone.run(() => this._updateBounds());
3843
+ });
3844
+ ro.observe(element);
3845
+ this.onDispose(() => ro.disconnect());
3846
+ setTimeout(() => this._updateBounds());
3847
+ }
3848
+ get boundsModel() {
3849
+ return this._boundsModel.readonly;
3850
+ }
3851
+ get nativeElement() {
3852
+ return this.elementRef.nativeElement;
3853
+ }
3854
+ // TODO: Make this handle body scroll
3855
+ relativePositionOf(point) {
3856
+ return this.bounds.relativePositionOf(point);
3857
+ }
3858
+ get bounds() {
3859
+ return this._boundsModel.value;
3860
+ }
3861
+ _updateBounds() {
3862
+ this._boundsModel.value = Bounds.ofElement(this.nativeElement);
3863
+ }
3864
+ }
3865
+ ResizeAwareComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ResizeAwareComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
3866
+ ResizeAwareComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: ResizeAwareComponent, usesInheritance: true, ngImport: i0 });
3867
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ResizeAwareComponent, decorators: [{
3868
+ type: Directive
3869
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; } });
3870
+
3871
+ class TableBodyComponent extends ResizeAwareComponent {
3872
+ constructor(elementRef, ngZone) {
3873
+ super(elementRef, ngZone);
3874
+ this.visibleRowCount = new EventEmitter();
3875
+ /**
3876
+ * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
3877
+ * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
3878
+ * containment area.
3879
+ */
3880
+ this.enableScrolling = false;
3881
+ // TODO: support user defined header and row heights via css vars.
3882
+ this.headerHeight = new MutableValueModel(56);
3883
+ this.rowHeight = new MutableValueModel(48);
3884
+ this.baseCssClass = "aup-table-component";
3885
+ const { chain, when } = Dsl.disposeWith(this);
3886
+ const actualHeaderHeight = chain(this.showHeader$).map(show => {
3887
+ return show ? this.headerHeight.value : 0;
3888
+ }, { dependsOn: this.headerHeight });
3889
+ this._visibleRowCount = chain(this.boundsModel).map(bounds => {
3890
+ // TODO: this doesn't take into account any css styling adjustments etc. Will investigate if it's an issue.
3891
+ const rawRowCount = (bounds.height - actualHeaderHeight.value) / this.rowHeight.value;
3892
+ return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
3893
+ }, {
3894
+ dependsOn: [actualHeaderHeight, this.rowHeight],
3895
+ postponeWhile: chain(this.boundsModel).pluckNumeric("height").isLessThan(1)
3896
+ });
3897
+ when(this._visibleRowCount).changes(visibleRows => {
3898
+ this.visibleRowCount.emit(visibleRows);
3899
+ }, { initialValue: "triggerChangeUnlessNil" });
3792
3900
  }
3793
- getEditSessionFor(row) {
3794
- return this._editorSessionByRowId.get(this.identityOf(row));
3901
+ get hideHeader() {
3902
+ return !this.showHeader;
3795
3903
  }
3796
- cancelAllEditorSessions() {
3797
- this._editorSessions.runInTransaction((draft) => {
3798
- this._rowsBeingEdited$.runInTransaction(() => {
3799
- draft.value.forEach(session => session.dispose());
3800
- });
3801
- });
3904
+ ngOnInit() {
3905
+ const { chain } = Dsl.disposeWith(this);
3906
+ this.columns = chain(this.tableModel.columns);
3907
+ this.columnIds = chain(this.columns).pluck("columnId");
3908
+ this.columnsById = chain(this.columns).indexBy('columnId');
3802
3909
  }
3803
- isRowSelectionEnabledFor(column) {
3804
- return this.isRowSelectionEnabled() && column.isRowSelectionEnabled();
3910
+ isEditing(row) {
3911
+ return !!this.tableModel.getEditSessionFor(row);
3805
3912
  }
3806
- isRowSelectionEnabled() {
3807
- return this.hasUserSelectionModel() && !this.rowSelectionDisabledOnAllColumns$.value;
3913
+ notifyCellClicked(columnModel, row) {
3914
+ this.tableModel._notifyCellClicked(columnModel, row);
3808
3915
  }
3809
- hasUserSelectionModel() {
3916
+ // @Trace()
3917
+ isFirstVisibleColumn(columnId) {
3810
3918
  var _a;
3811
- return !!((_a = this.selectionColumnModel) === null || _a === void 0 ? void 0 : _a.selectionModel.getDelegate());
3919
+ return ((_a = this.tableModel.firstVisibleColumn$.query().value) === null || _a === void 0 ? void 0 : _a.columnId) === columnId;
3812
3920
  }
3813
- getSelectionModel() {
3921
+ // @Trace()
3922
+ isLastVisibleColumn(columnId) {
3814
3923
  var _a;
3815
- return (_a = this.selectionColumnModel) === null || _a === void 0 ? void 0 : _a.selectionModel;
3924
+ return ((_a = this.tableModel.lastVisibleColumn$.query().value) === null || _a === void 0 ? void 0 : _a.columnId) === columnId;
3816
3925
  }
3817
- isHoverEnabled() {
3818
- return this.isRowSelectionEnabled() || this.rowClickListeners.listenerCount > 0;
3926
+ getColumnClasses(columnId) {
3927
+ const classes = [`aup-col-${this.columnsById.get(columnId).dasherisedColumnId}`];
3928
+ if (this.isFirstVisibleColumn(columnId)) {
3929
+ classes.push("first-visible-column");
3930
+ }
3931
+ if (this.isLastVisibleColumn(columnId)) {
3932
+ classes.push("last-visible-column");
3933
+ }
3934
+ return classes;
3819
3935
  }
3820
- isCursorEnabled(column) {
3821
- return this.isRowSelectionEnabledFor(column) || this.rowClickListeners.listenerCount > 0;
3936
+ }
3937
+ TableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableBodyComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
3938
+ TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TableBodyComponent, selector: "aup-table-body", inputs: { tableModel: "tableModel", showHeader$: "showHeader$", showHeader: "showHeader", enableScrolling: "enableScrolling" }, outputs: { visibleRowCount: "visibleRowCount" }, host: { properties: { "class.enable-scrolling": "this.enableScrolling", "class": "this.baseCssClass", "class.hide-header": "this.hideHeader" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"tableModel.visibleRows$.value\" [trackBy]=\"tableModel.trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\" [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"tableModel.trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"], components: [{ type: i1$b.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: ["column"] }, { type: TableCellComponent, selector: "aup-table-cell", inputs: ["row", "column", "editSession", "tableModel"] }, { type: i1$b.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i1$b.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$b.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i1$b.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i1$b.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i1$b.MatCellDef, selector: "[matCellDef]" }, { type: i1$b.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i1$b.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i1$b.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
3939
+ __decorate([
3940
+ TrackExternal(),
3941
+ __metadata("design:type", AbstractTableModel)
3942
+ ], TableBodyComponent.prototype, "tableModel", void 0);
3943
+ __decorate([
3944
+ TrackExternal({ defaultValue: true }),
3945
+ __metadata("design:type", ValueModel)
3946
+ ], TableBodyComponent.prototype, "showHeader$", void 0);
3947
+ __decorate([
3948
+ StoreInValueModel("showHeader$"),
3949
+ __metadata("design:type", Boolean)
3950
+ ], TableBodyComponent.prototype, "showHeader", void 0);
3951
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableBodyComponent, decorators: [{
3952
+ type: Component,
3953
+ args: [{ selector: "aup-table-body", template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"tableModel.visibleRows$.value\" [trackBy]=\"tableModel.trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\" [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"tableModel.trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"] }]
3954
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { tableModel: [{
3955
+ type: Input
3956
+ }], showHeader$: [{
3957
+ type: Input
3958
+ }], showHeader: [{
3959
+ type: Input
3960
+ }], visibleRowCount: [{
3961
+ type: Output
3962
+ }], enableScrolling: [{
3963
+ type: Input
3964
+ }, {
3965
+ type: HostBinding,
3966
+ args: ["class.enable-scrolling"]
3967
+ }], baseCssClass: [{
3968
+ type: HostBinding,
3969
+ args: ["class"]
3970
+ }], hideHeader: [{
3971
+ type: HostBinding,
3972
+ args: ["class.hide-header"]
3973
+ }] } });
3974
+
3975
+ class PaginatorComponent extends DisposableComponent {
3976
+ constructor() {
3977
+ super();
3822
3978
  }
3823
- selectRow(row) {
3824
- var _a;
3825
- (_a = this.selectionColumnModel) === null || _a === void 0 ? void 0 : _a.selectRow(row);
3979
+ ngOnInit() {
3826
3980
  }
3827
- onRowClicked(callback) {
3828
- return this.rowClickListeners.add(callback);
3981
+ get totalPages() {
3982
+ return this.pageController.totalPages.value;
3829
3983
  }
3830
- _notifyCellClicked(columnModel, row) {
3831
- if (this.isRowSelectionEnabledFor(columnModel)) {
3832
- this.selectRow(row);
3833
- }
3834
- this.rowClickListeners.fire(l => l(row));
3984
+ get pageNumber() {
3985
+ return this.pageController.pageNumber.value;
3986
+ }
3987
+ get previousCommand() {
3988
+ return this.pageController.previousCommand;
3989
+ }
3990
+ get nextCommand() {
3991
+ return this.pageController.nextCommand;
3835
3992
  }
3836
3993
  }
3837
- TrackExternal.oneTimeBinding(AbstractTableModel);
3994
+ PaginatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3995
+ PaginatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: PaginatorComponent, selector: "aup-paginator", inputs: { pageController: "pageController" }, usesInheritance: true, ngImport: i0, template: "<p>Page {{pageNumber}} of {{totalPages}}</p>\n<button mat-icon-button [pectinCommand]=\"previousCommand\"><aup-icon icon=\"mat:keyboard_arrow_left\"></aup-icon></button>\n<button mat-icon-button [pectinCommand]=\"nextCommand\"><aup-icon icon=\"mat:keyboard_arrow_right\"></aup-icon></button>\n\n", styles: [":host{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px;padding:0 8px;color:#0009}:host p{color:inherit;margin:0 8px 0 0}:host button.md-button.md-icon-button{padding:0;margin:0;width:30px;height:30px}\n"], components: [{ type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: IconComponent, selector: "aup-icon", inputs: ["icon"] }], directives: [{ type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }] });
3996
+ __decorate([
3997
+ TrackExternal(),
3998
+ __metadata("design:type", PageController)
3999
+ ], PaginatorComponent.prototype, "pageController", void 0);
4000
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaginatorComponent, decorators: [{
4001
+ type: Component,
4002
+ args: [{ selector: 'aup-paginator', template: "<p>Page {{pageNumber}} of {{totalPages}}</p>\n<button mat-icon-button [pectinCommand]=\"previousCommand\"><aup-icon icon=\"mat:keyboard_arrow_left\"></aup-icon></button>\n<button mat-icon-button [pectinCommand]=\"nextCommand\"><aup-icon icon=\"mat:keyboard_arrow_right\"></aup-icon></button>\n\n", styles: [":host{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px;padding:0 8px;color:#0009}:host p{color:inherit;margin:0 8px 0 0}:host button.md-button.md-icon-button{padding:0;margin:0;width:30px;height:30px}\n"] }]
4003
+ }], ctorParameters: function () { return []; }, propDecorators: { pageController: [{
4004
+ type: Input
4005
+ }] } });
3838
4006
 
3839
4007
  /**
3840
4008
  * Create your model:
@@ -3897,29 +4065,43 @@ TrackExternal.oneTimeBinding(AbstractTableModel);
3897
4065
  * }
3898
4066
  */
3899
4067
  class TableComponent extends AbstractTableComponent {
3900
- constructor(elementRef, ngZone, injector) {
3901
- super(elementRef, ngZone, injector);
4068
+ constructor() {
4069
+ super(...arguments);
4070
+ this._footerContentAdded = false;
3902
4071
  }
3903
4072
  getModel() {
3904
4073
  return this.tableModel;
3905
4074
  }
4075
+ footerContentChanged($event) {
4076
+ console.log($event);
4077
+ this._footerContentAdded = true;
4078
+ }
4079
+ updatePageSize(count) {
4080
+ this.tableModel.updatePageSize(count);
4081
+ }
3906
4082
  }
3907
- TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
4083
+ TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3908
4084
  TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TableComponent, selector: "aup-table", inputs: { tableModel: "tableModel" }, providers: [
3909
4085
  { provide: AbstractTableComponent, useExisting: TableComponent }
3910
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"getModel().dataSource.value\" [trackBy]=\"getModel().trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"getModel().isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"getModel()\"\n [editSession]=\"getModel().getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"getModel().getRowClasses(row)\" [class.enable-hover]=\"getModel().isHoverEnabled()\"\n [attr.aup-row-id]=\"getModel().trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"], components: [{ type: i1$b.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: ["column"] }, { type: TableCellComponent, selector: "aup-table-cell", inputs: ["row", "column", "editSession", "tableModel"] }, { type: i1$b.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i1$b.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$b.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i1$b.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i1$b.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i1$b.MatCellDef, selector: "[matCellDef]" }, { type: i1$b.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i1$b.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i1$b.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
4086
+ ], usesInheritance: true, ngImport: i0, template: "<aup-table-body [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [enableScrolling]=\"enableScrolling\"\n (visibleRowCount)=\"updatePageSize($event)\"\n></aup-table-body>\n<section class=\"table-footer\">\n <div class=\"footer-content\"><ng-content select=\"[footer]\"></ng-content></div>\n <aup-paginator *ngIf=\"tableModel.pageController\" [pageController]=\"tableModel.pageController\"></aup-paginator>\n</section>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}aup-table-body{flex:1}.table-footer{display:flex;flex-direction:row;align-items:center}.table-footer .footer-content{flex:1}\n"], components: [{ type: TableBodyComponent, selector: "aup-table-body", inputs: ["tableModel", "showHeader$", "showHeader", "enableScrolling"], outputs: ["visibleRowCount"] }, { type: PaginatorComponent, selector: "aup-paginator", inputs: ["pageController"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
3911
4087
  __decorate([
3912
4088
  TrackExternal(),
3913
- __metadata("design:type", AbstractTableModel)
4089
+ __metadata("design:type", TableModel)
3914
4090
  ], TableComponent.prototype, "tableModel", void 0);
4091
+ __decorate([
4092
+ Trace(),
4093
+ __metadata("design:type", Function),
4094
+ __metadata("design:paramtypes", [Number]),
4095
+ __metadata("design:returntype", void 0)
4096
+ ], TableComponent.prototype, "updatePageSize", null);
3915
4097
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableComponent, decorators: [{
3916
4098
  type: Component,
3917
4099
  args: [{ selector: 'aup-table', providers: [
3918
4100
  { provide: AbstractTableComponent, useExisting: TableComponent }
3919
- ], template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"getModel().dataSource.value\" [trackBy]=\"getModel().trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"getModel().isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"getModel()\"\n [editSession]=\"getModel().getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"getModel().getRowClasses(row)\" [class.enable-hover]=\"getModel().isHoverEnabled()\"\n [attr.aup-row-id]=\"getModel().trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"] }]
3920
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { tableModel: [{
4101
+ ], template: "<aup-table-body [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [enableScrolling]=\"enableScrolling\"\n (visibleRowCount)=\"updatePageSize($event)\"\n></aup-table-body>\n<section class=\"table-footer\">\n <div class=\"footer-content\"><ng-content select=\"[footer]\"></ng-content></div>\n <aup-paginator *ngIf=\"tableModel.pageController\" [pageController]=\"tableModel.pageController\"></aup-paginator>\n</section>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}aup-table-body{flex:1}.table-footer{display:flex;flex-direction:row;align-items:center}.table-footer .footer-content{flex:1}\n"] }]
4102
+ }], propDecorators: { tableModel: [{
3921
4103
  type: Input
3922
- }] } });
4104
+ }], updatePageSize: [] } });
3923
4105
 
3924
4106
  const SVG_HEIGHT = 60;
3925
4107
  class TreeInheritanceIconComponent {
@@ -4497,17 +4679,17 @@ class TreeTableModel extends AbstractTableModel {
4497
4679
  * }
4498
4680
  */
4499
4681
  class TreeTableComponent extends AbstractTableComponent {
4500
- constructor(elementRef, ngZone, injector) {
4501
- super(elementRef, ngZone, injector);
4682
+ constructor(injector) {
4683
+ super(injector);
4502
4684
  }
4503
4685
  getModel() {
4504
4686
  return this.treeTableModel;
4505
4687
  }
4506
4688
  }
4507
- TreeTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TreeTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
4689
+ TreeTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TreeTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
4508
4690
  TreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TreeTableComponent, selector: "aup-tree-table", inputs: { treeTableModel: "treeTableModel" }, providers: [
4509
4691
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
4510
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"getModel().dataSource.value\" [trackBy]=\"getModel().trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"getModel().isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"getModel()\"\n [editSession]=\"getModel().getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"getModel().getRowClasses(row)\" [class.enable-hover]=\"getModel().isHoverEnabled()\"\n [attr.aup-row-id]=\"getModel().trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n", "td.mat-cell{border-top-width:0!important;border-bottom-width:0!important}td.mat-column-tree-label,td.mat-column-tree-label{width:1px}aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}aup-tree-label-cell-renderer{flex:1}\n"], components: [{ type: i1$b.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: ["column"] }, { type: TableCellComponent, selector: "aup-table-cell", inputs: ["row", "column", "editSession", "tableModel"] }, { type: i1$b.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i1$b.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$b.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i1$b.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i1$b.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i1$b.MatCellDef, selector: "[matCellDef]" }, { type: i1$b.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i1$b.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i1$b.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
4692
+ ], usesInheritance: true, ngImport: i0, template: "<aup-table-body [tableModel]=\"treeTableModel\"\n [showHeader$]=\"showHeader$\"\n [enableScrolling]=\"enableScrolling\"\n></aup-table-body>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host::ng-deep td.mat-cell{border-top-width:0!important;border-bottom-width:0!important}:host::ng-deep td.mat-column-tree-label,:host::ng-deep td.mat-column-tree-label{width:1px}:host::ng-deep aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}:host::ng-deep aup-tree-label-cell-renderer{flex:1}\n"], components: [{ type: TableBodyComponent, selector: "aup-table-body", inputs: ["tableModel", "showHeader$", "showHeader", "enableScrolling"], outputs: ["visibleRowCount"] }] });
4511
4693
  __decorate([
4512
4694
  TrackExternal(),
4513
4695
  __metadata("design:type", TreeTableModel)
@@ -4516,8 +4698,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4516
4698
  type: Component,
4517
4699
  args: [{ selector: 'aup-tree-table', providers: [
4518
4700
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
4519
- ], template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"getModel().dataSource.value\" [trackBy]=\"getModel().trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"getModel().isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"getModel()\"\n [editSession]=\"getModel().getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"getModel().getRowClasses(row)\" [class.enable-hover]=\"getModel().isHoverEnabled()\"\n [attr.aup-row-id]=\"getModel().trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n", "td.mat-cell{border-top-width:0!important;border-bottom-width:0!important}td.mat-column-tree-label,td.mat-column-tree-label{width:1px}aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}aup-tree-label-cell-renderer{flex:1}\n"] }]
4520
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { treeTableModel: [{
4701
+ ], template: "<aup-table-body [tableModel]=\"treeTableModel\"\n [showHeader$]=\"showHeader$\"\n [enableScrolling]=\"enableScrolling\"\n></aup-table-body>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host::ng-deep td.mat-cell{border-top-width:0!important;border-bottom-width:0!important}:host::ng-deep td.mat-column-tree-label,:host::ng-deep td.mat-column-tree-label{width:1px}:host::ng-deep aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}:host::ng-deep aup-tree-label-cell-renderer{flex:1}\n"] }]
4702
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { treeTableModel: [{
4521
4703
  type: Input
4522
4704
  }] } });
4523
4705
 
@@ -4594,38 +4776,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4594
4776
  args: ['keyup.arrowUp', ['$event']]
4595
4777
  }] } });
4596
4778
 
4597
- class PaginatorComponent extends DisposableComponent {
4598
- constructor() {
4599
- super();
4600
- }
4601
- ngOnInit() {
4602
- }
4603
- get totalPages() {
4604
- return this.pageController.totalPages.value;
4605
- }
4606
- get pageNumber() {
4607
- return this.pageController.pageNumber.value;
4608
- }
4609
- get previousCommand() {
4610
- return this.pageController.previousCommand;
4611
- }
4612
- get nextCommand() {
4613
- return this.pageController.nextCommand;
4614
- }
4615
- }
4616
- PaginatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4617
- PaginatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: PaginatorComponent, selector: "aup-paginator", inputs: { pageController: "pageController" }, usesInheritance: true, ngImport: i0, template: "<p>Page {{pageNumber}} of {{totalPages}}</p>\n<button mat-icon-button [pectinCommand]=\"previousCommand\"><aup-icon icon=\"mat:keyboard_arrow_left\"></aup-icon></button>\n<button mat-icon-button [pectinCommand]=\"nextCommand\"><aup-icon icon=\"mat:keyboard_arrow_right\"></aup-icon></button>\n\n", styles: [":host{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px;padding:0 8px;color:#0009}:host p{color:inherit;margin-right:8px}:host button.md-button.md-icon-button{padding:0;margin:0;width:30px;height:30px}\n"], components: [{ type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: IconComponent, selector: "aup-icon", inputs: ["icon"] }], directives: [{ type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }] });
4618
- __decorate([
4619
- TrackExternal(),
4620
- __metadata("design:type", PageController)
4621
- ], PaginatorComponent.prototype, "pageController", void 0);
4622
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaginatorComponent, decorators: [{
4623
- type: Component,
4624
- args: [{ selector: 'aup-paginator', template: "<p>Page {{pageNumber}} of {{totalPages}}</p>\n<button mat-icon-button [pectinCommand]=\"previousCommand\"><aup-icon icon=\"mat:keyboard_arrow_left\"></aup-icon></button>\n<button mat-icon-button [pectinCommand]=\"nextCommand\"><aup-icon icon=\"mat:keyboard_arrow_right\"></aup-icon></button>\n\n", styles: [":host{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px;padding:0 8px;color:#0009}:host p{color:inherit;margin-right:8px}:host button.md-button.md-icon-button{padding:0;margin:0;width:30px;height:30px}\n"] }]
4625
- }], ctorParameters: function () { return []; }, propDecorators: { pageController: [{
4626
- type: Input
4627
- }] } });
4628
-
4629
4779
  class LabelledValueComponent extends DisposableComponent {
4630
4780
  constructor() {
4631
4781
  super();
@@ -4745,7 +4895,6 @@ ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
4745
4895
  EditRowControls,
4746
4896
  ColumnTemplateDirective,
4747
4897
  DefaultCellRendererComponent,
4748
- DefaultListCellRendererComponent,
4749
4898
  TableCellComponent,
4750
4899
  SelectionCellComponent,
4751
4900
  SelectionHeaderCellComponent,
@@ -4774,7 +4923,8 @@ ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
4774
4923
  CardStackComponent,
4775
4924
  LabelledValueComponent,
4776
4925
  LoadingContainerComponent,
4777
- MarkdownComponent], imports: [CommonModule,
4926
+ MarkdownComponent,
4927
+ TableBodyComponent], imports: [CommonModule,
4778
4928
  BrowserAnimationsModule,
4779
4929
  FormsModule,
4780
4930
  MatInputModule,
@@ -4909,7 +5059,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4909
5059
  EditRowControls,
4910
5060
  ColumnTemplateDirective,
4911
5061
  DefaultCellRendererComponent,
4912
- DefaultListCellRendererComponent,
4913
5062
  TableCellComponent,
4914
5063
  SelectionCellComponent,
4915
5064
  SelectionHeaderCellComponent,
@@ -4938,7 +5087,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4938
5087
  CardStackComponent,
4939
5088
  LabelledValueComponent,
4940
5089
  LoadingContainerComponent,
4941
- MarkdownComponent
5090
+ MarkdownComponent,
5091
+ TableBodyComponent
4942
5092
  ],
4943
5093
  exports: [
4944
5094
  NumberInputComponent,
@@ -8274,98 +8424,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
8274
8424
  }]
8275
8425
  }] });
8276
8426
 
8277
- /**
8278
- * Example:
8279
- * @example
8280
- * const model = new TableModel(heroList, table => {
8281
- * table.pluck("firstName");
8282
- * table.pluck("lastName");
8283
- * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
8284
- * });
8285
- *
8286
- * Editable tables
8287
- * @example
8288
- * const saveCommand = UnaryCommand.create((form: Form<Hero>) => {
8289
- * if (form.validate()) {
8290
- * // normal form save stuff
8291
- * return true; // finish editing
8292
- * }
8293
- * return false; // continue editiing
8294
- * }
8295
- * const colorsNames: ListModel<string> = ...;
8296
- * const model = TableModel.fromList(heroList, table => {
8297
- * table.pluck("firstName").cellEditor(StringInputComponent); <-- interface CellEditor { valueModel: DirtyTrackingForm.ValueModel<string> | ValueModel<string>; }
8298
- * table.pluck("lastName").cellEditor(StringInputComponent, {
8299
- * validators: [Validator.present("We need a last name")]
8300
- * });
8301
- * table.pluck("age").cellEditor(NumberInputComponent);
8302
- * table.pluck("favoriteColor").cellEditor(SelectInputComponent, {
8303
- * initialiseComponent(component: SelectInputComponent) {
8304
- * selectInput.optionsModel = colorsNames; // <- initialise our component
8305
- * }
8306
- * });
8307
- * table.addEditControls(saveCommand); // <- required to enable editing
8308
- * });
8309
- *
8310
- * Selection models
8311
- * @example
8312
- * const model = new TableModel(heroList, table => {
8313
- * table.addSelectionColumn(selectionModel); // <- can be single or multiple selection model
8314
- * table.pluck("firstName");
8315
- * table.pluck("lastName");
8316
- * });
8317
- *
8318
- * Custom cell renderers and editors
8319
- * @example
8320
- * const model = new TableModel(heroList, table => {
8321
- * table.pluck("favoriteColor")
8322
- * .cellHeaderRenderer(CellHeaderRendererComponent, (component, column) => {
8323
- * // configure your component with what ever you need.
8324
- * });
8325
- * .cellRenderer(CellRendererComponent) // <-- interface CellEditor { value: string; }
8326
- * .cellEditor(CellEditorComponent.); // <-- interface CellEditor { valueModel: DirtyTrackingForm.ValueModel<string> | ValueModel<string>; }
8327
- * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
8328
- * });
8329
- *
8330
- * Template columns
8331
- * @example
8332
- * const model = new TableModel(heroList, table => {
8333
- * table.addSelectionColumn(selectionModel); // <- can be single or multiple selection model
8334
- * table.addTemplateColumn("myTemplate");
8335
- * });
8336
- *
8337
- * <div *aupColumnTemplate="let hero; columnId: 'myTemplate'">{{hero.age}}</div>
8338
- *
8339
- * I18n
8340
- * @example
8341
- * [table.yml]
8342
- * table:
8343
- * columns(ColumnTextProperties[]):
8344
- * firstName:
8345
- * headerText: "First Name"
8346
- * fullName:
8347
- * headerText: "Full Name"
8348
- *
8349
- * const model = new TableModel(heroList, table => {
8350
- * table.pluck("favoriteColor").cellRenderer(...).cellEditor(...);
8351
- * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
8352
- *
8353
- * table.columnTextProperties(I18n.table.columns); // <- configures all columns
8354
- * });
8355
- */
8356
- class TableModel extends AbstractTableModel {
8357
- constructor(sourceOfTruth, builder) {
8358
- super();
8359
- if (builder) {
8360
- builder(this);
8361
- }
8362
- this.setDataSource(sourceOfTruth);
8363
- }
8364
- addSelectionColumn(selectionModel, showSelectionColumn) {
8365
- return this._addSelectionColumn(selectionModel, showSelectionColumn);
8366
- }
8367
- }
8368
-
8369
8427
  /**
8370
8428
  * @file Automatically generated by barrelsby.
8371
8429
  */
@@ -9788,7 +9846,8 @@ AngularUiPowerupsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
9788
9846
  DirectivesModule,
9789
9847
  ComponentsModule,
9790
9848
  PlaceModule,
9791
- InteractionModule], exports: [InteractionModule,
9849
+ InteractionModule,
9850
+ ObserversModule], exports: [InteractionModule,
9792
9851
  PlaceModule,
9793
9852
  DirectivesModule,
9794
9853
  ComponentsModule,
@@ -9805,7 +9864,8 @@ AngularUiPowerupsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0",
9805
9864
  DirectivesModule,
9806
9865
  ComponentsModule,
9807
9866
  PlaceModule,
9808
- InteractionModule
9867
+ InteractionModule,
9868
+ ObserversModule
9809
9869
  ], InteractionModule,
9810
9870
  PlaceModule,
9811
9871
  DirectivesModule,
@@ -9825,7 +9885,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
9825
9885
  DirectivesModule,
9826
9886
  ComponentsModule,
9827
9887
  PlaceModule,
9828
- InteractionModule
9888
+ InteractionModule,
9889
+ ObserversModule
9829
9890
  ],
9830
9891
  exports: [
9831
9892
  InteractionModule,
@@ -10321,5 +10382,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
10321
10382
  * Generated bundle index. Do not edit.
10322
10383
  */
10323
10384
 
10324
- export { ACTIVITY_DATA, ALERT_CONFIG, AUP_PLACE_CONFIG, AUP_UNAUTHORISED_PLACE_NOTICE_COMPONENT, AbstractActivityTriggerComponent, AbstractCardContainerComponent, AbstractConfirmDialogComponent, AbstractDialogComponent, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractPopupMenuComponent, AbstractTableComponent, AbstractTableModel, AbstractValueInputComponent, Activity, ActivityActionsComponent, ActivityBodyComponent, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, ActivityTitleComponent, AddCardActivityComponent, AddItemInteractionContextComponent, Alert, AlertDialogComponent, AngularUiPowerupsModule, AutocompleteInputComponent, Bounds, BusyOverlayComponent, CELL_EDITOR_PORTAL, CELL_RENDERER_PORTAL, CardContainerComponent, CardStackComponent, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnListModel, ColumnModel, ColumnTemplateDirective, ColumnTextSearchFormatter, CommandComponent, CommandContainer, CommandDirective, CommandFace, CommandFaceComponent, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmThenExecuteDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DecoratedTreeNode, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DefaultListCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControls, EditSession, EditorControlColumnModel, EmptyStateComponent, EnableCellTextSearch, EventCleanUpSession, FlattenedTreeListModel, FlexComponent, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, HEADER_CELL_RENDERER_PORTAL, HighlightPipe, HighlightTextModelDirective, HorizontalAlignment, IconComponent, InPlaceInteractionContextComponent, InlineActivityTriggerComponent, InlineEditorModel, InlineStringEditorComponent, InputActivity, InteractionContextTriggerFor, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, Keys, LEFT_RIGHT_PLACE_ANIMATION, LabelledValueComponent, ListPlaceNavComponent, ListPropertyColumnModel, LoadingContainerComponent, MarkdownComponent, MarkdownService, ModalActivityTriggerComponent, ModalInteractionContextFactory, MoreMenuComponent, MultipleSelectInputComponent, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NotAuthorisedNoticeComponent, NumberInputComponent, POPUP_CONTAINER, PORTAL_EDITOR_COMPONENT, PORTAL_RENDERER_COMPONENT, PaginatorComponent, ParameterDefinition, PasswordInputComponent, Place, PlaceAccessGuard, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupActivityTriggerComponent, PopupAwareComponent, PopupInteractionContextComponent, PopupMenuComponent, PopupMenuRendererComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectInputActivity, SelectInputComponent, SelectionCellComponent, SelectionColumnModel, SelectionHeaderCellComponent, SeparatorComponent, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableCellComponent, TableComponent, TableHeaderCellComponent, TableModel, TableRowMenuComponent, TemplateCellRendererPortalRef, TextInputComponent, ToolBarComponent, TrackBy, TreeExpansionModel, TreeInheritanceIconComponent, TreeLabelCellRendererComponent, TreeLabelColumnModel, TreeTableComponent, TreeTableModel, UrlService, UrlSnapshot, VerticalFocusContainerComponent, VisibilityService, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationTypeDetermined, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, markdownPillExtension, slideDownOnEnterAnimation, slideRightOnEnterAnimation, treeNodeDecorator };
10385
+ export { ACTIVITY_DATA, ALERT_CONFIG, AUP_PLACE_CONFIG, AUP_UNAUTHORISED_PLACE_NOTICE_COMPONENT, AbstractActivityTriggerComponent, AbstractCardContainerComponent, AbstractConfirmDialogComponent, AbstractDialogComponent, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractPopupMenuComponent, AbstractTableComponent, AbstractTableModel, AbstractValueInputComponent, Activity, ActivityActionsComponent, ActivityBodyComponent, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, ActivityTitleComponent, AddCardActivityComponent, AddItemInteractionContextComponent, Alert, AlertDialogComponent, AngularUiPowerupsModule, AutocompleteInputComponent, Bounds, BusyOverlayComponent, CELL_EDITOR_PORTAL, CELL_RENDERER_PORTAL, CardContainerComponent, CardStackComponent, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnListModel, ColumnModel, ColumnTemplateDirective, ColumnTextSearchFormatter, CommandComponent, CommandContainer, CommandDirective, CommandFace, CommandFaceComponent, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmThenExecuteDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DecoratedTreeNode, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControls, EditSession, EditorControlColumnModel, EmptyStateComponent, EnableCellTextSearch, EventCleanUpSession, FlattenedTreeListModel, FlexComponent, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, HEADER_CELL_RENDERER_PORTAL, HighlightPipe, HighlightTextModelDirective, HorizontalAlignment, IconComponent, InPlaceInteractionContextComponent, InlineActivityTriggerComponent, InlineEditorModel, InlineStringEditorComponent, InputActivity, InteractionContextTriggerFor, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, Keys, LEFT_RIGHT_PLACE_ANIMATION, LabelledValueComponent, ListPlaceNavComponent, ListPropertyColumnModel, LoadingContainerComponent, MarkdownComponent, MarkdownService, ModalActivityTriggerComponent, ModalInteractionContextFactory, MoreMenuComponent, MultipleSelectInputComponent, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NotAuthorisedNoticeComponent, NumberInputComponent, POPUP_CONTAINER, PORTAL_EDITOR_COMPONENT, PORTAL_RENDERER_COMPONENT, PaginatorComponent, ParameterDefinition, PasswordInputComponent, Place, PlaceAccessGuard, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupActivityTriggerComponent, PopupAwareComponent, PopupInteractionContextComponent, PopupMenuComponent, PopupMenuRendererComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectInputActivity, SelectInputComponent, SelectionCellComponent, SelectionColumnModel, SelectionHeaderCellComponent, SeparatorComponent, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableBodyComponent, TableCellComponent, TableComponent, TableHeaderCellComponent, TableModel, TableRowMenuComponent, TemplateCellRendererPortalRef, TextInputComponent, ToolBarComponent, TrackBy, TreeExpansionModel, TreeInheritanceIconComponent, TreeLabelCellRendererComponent, TreeLabelColumnModel, TreeTableComponent, TreeTableModel, UrlService, UrlSnapshot, VerticalFocusContainerComponent, VisibilityService, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationTypeDetermined, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, markdownPillExtension, slideDownOnEnterAnimation, slideRightOnEnterAnimation, treeNodeDecorator };
10325
10386
  //# sourceMappingURL=coolon-angular-ui-powerups.mjs.map