@coolon/angular-ui-powerups 13.1.6 → 13.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/assets/table.scss +2 -2
  2. package/esm2020/lib/components/components.module.mjs +22 -19
  3. package/esm2020/lib/components/exports.mjs +28 -21
  4. package/esm2020/lib/components/tables/abstract-table-model.mjs +70 -29
  5. package/esm2020/lib/components/tables/abstract-table.component.mjs +12 -10
  6. package/esm2020/lib/components/tables/column/column-list-model.mjs +39 -0
  7. package/esm2020/lib/components/tables/column/column-model.mjs +180 -0
  8. package/esm2020/lib/components/tables/column/column-template/column-template.directive.mjs +35 -0
  9. package/esm2020/lib/components/tables/column/column-text-properties.mjs +2 -0
  10. package/esm2020/lib/components/tables/column/custom-template-column-model.mjs +16 -0
  11. package/esm2020/lib/components/tables/column/custom-value-column-model.mjs +37 -0
  12. package/esm2020/lib/components/tables/column/editor-controls-column-model.mjs +21 -0
  13. package/esm2020/lib/components/tables/column/list-propery-column-model.mjs +48 -0
  14. package/esm2020/lib/components/tables/column/property-column-model.mjs +92 -0
  15. package/esm2020/lib/components/tables/column/selection-column-model.mjs +40 -0
  16. package/esm2020/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +55 -0
  17. package/esm2020/lib/components/tables/editor/edit-session.mjs +23 -0
  18. package/esm2020/lib/components/tables/editor/editable-cell-renderer.mjs +2 -0
  19. package/esm2020/lib/components/tables/{table/paginator → paginator}/paginator.component.mjs +4 -4
  20. package/esm2020/lib/components/tables/renderer/cell-editors.mjs +2 -0
  21. package/esm2020/lib/components/tables/renderer/cell-portal-ref.mjs +93 -0
  22. package/esm2020/lib/components/tables/renderer/cell-renderer.mjs +2 -0
  23. package/esm2020/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +30 -0
  24. package/esm2020/lib/components/tables/{table → renderer}/default-header-cell-renderer/default-header-cell-renderer.component.mjs +1 -1
  25. package/esm2020/lib/components/tables/renderer/default-list-cell-renderer/default-list-cell-renderer.component.mjs +40 -0
  26. package/esm2020/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +31 -0
  27. package/esm2020/lib/components/tables/renderer/selection-cell/selection-cell.component.mjs +26 -0
  28. package/esm2020/lib/components/tables/renderer/table-cell/table-cell.component.mjs +93 -0
  29. package/esm2020/lib/components/tables/renderer/table-header-cell/table-header-cell.component.mjs +32 -0
  30. package/esm2020/lib/components/tables/search/column-text-search-formatter.mjs +52 -0
  31. package/esm2020/lib/components/tables/search/enable-cell-text-search.decorator.mjs +30 -0
  32. package/esm2020/lib/components/tables/table/table-model.mjs +2 -10
  33. package/esm2020/lib/components/tables/table/table.component.mjs +12 -12
  34. package/esm2020/lib/components/tables/table-row-menu/table-row-menu.component.mjs +84 -0
  35. package/esm2020/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +1 -1
  36. package/esm2020/lib/components/tables/tree-table/tree-label-column-model.mjs +3 -3
  37. package/esm2020/lib/components/tables/tree-table/tree-table-component.mjs +10 -10
  38. package/esm2020/lib/components/tables/tree-table/tree-table-model.mjs +1 -1
  39. package/fesm2015/coolon-angular-ui-powerups.mjs +608 -450
  40. package/fesm2015/coolon-angular-ui-powerups.mjs.map +1 -1
  41. package/fesm2020/coolon-angular-ui-powerups.mjs +740 -583
  42. package/fesm2020/coolon-angular-ui-powerups.mjs.map +1 -1
  43. package/lib/components/components.module.d.ts +55 -54
  44. package/lib/components/exports.d.ts +27 -20
  45. package/lib/components/tables/abstract-table-model.d.ts +24 -13
  46. package/lib/components/tables/abstract-table.component.d.ts +6 -5
  47. package/lib/components/tables/{column-list-model.d.ts → column/column-list-model.d.ts} +4 -4
  48. package/lib/components/tables/column/column-model.d.ts +77 -0
  49. package/lib/components/tables/column/custom-template-column-model.d.ts +8 -0
  50. package/lib/components/tables/column/custom-value-column-model.d.ts +10 -0
  51. package/lib/components/tables/column/editor-controls-column-model.d.ts +13 -0
  52. package/lib/components/tables/column/list-propery-column-model.d.ts +15 -0
  53. package/lib/components/tables/column/property-column-model.d.ts +24 -0
  54. package/lib/components/tables/column/selection-column-model.d.ts +12 -0
  55. package/lib/components/tables/{table → editor}/edit-row-controls/edit-row-controls.component.d.ts +1 -1
  56. package/lib/components/tables/{edit-session.d.ts → editor/edit-session.d.ts} +2 -2
  57. package/lib/components/tables/{table/mutable-cell-renderer.d.ts → editor/editable-cell-renderer.d.ts} +2 -2
  58. package/lib/components/tables/{table/paginator → paginator}/paginator.component.d.ts +1 -1
  59. package/lib/components/tables/{table → renderer}/cell-portal-ref.d.ts +18 -18
  60. package/lib/components/tables/renderer/cell-renderer.d.ts +3 -0
  61. package/lib/components/tables/{table → renderer}/default-cell-renderer/default-cell-renderer.component.d.ts +1 -1
  62. package/lib/components/tables/renderer/default-list-cell-renderer/default-list-cell-renderer.component.d.ts +12 -0
  63. package/lib/components/tables/{table/select-header-cell-renderer/select-header-cell-renderer.component.d.ts → renderer/select-header-cell/selection-header-cell.component.d.ts} +3 -3
  64. package/lib/components/tables/{table/select-cell-renderer/select-cell-renderer.component.d.ts → renderer/selection-cell/selection-cell.component.d.ts} +3 -3
  65. package/lib/components/tables/{table/table-cell-renderer/table-cell-renderer.component.d.ts → renderer/table-cell/table-cell.component.d.ts} +5 -5
  66. package/lib/components/tables/{table/table-header-cell-renderer/table-header-cell-renderer.component.d.ts → renderer/table-header-cell/table-header-cell.component.d.ts} +4 -4
  67. package/lib/components/tables/search/column-text-search-formatter.d.ts +28 -0
  68. package/lib/components/tables/search/enable-cell-text-search.decorator.d.ts +25 -0
  69. package/lib/components/tables/table/table-model.d.ts +3 -9
  70. package/lib/components/tables/table/table.component.d.ts +4 -4
  71. package/lib/components/tables/{table/table-row-menu → table-row-menu}/table-row-menu.component.d.ts +3 -3
  72. package/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +1 -1
  73. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +1 -1
  74. package/lib/components/tables/tree-table/tree-table-component.d.ts +2 -2
  75. package/lib/components/tables/tree-table/tree-table-model.d.ts +1 -1
  76. package/package.json +2 -1
  77. package/esm2020/lib/components/tables/column-list-model.mjs +0 -39
  78. package/esm2020/lib/components/tables/edit-session.mjs +0 -23
  79. package/esm2020/lib/components/tables/table/cell-editors.mjs +0 -2
  80. package/esm2020/lib/components/tables/table/cell-portal-ref.mjs +0 -93
  81. package/esm2020/lib/components/tables/table/cell-renderer.mjs +0 -2
  82. package/esm2020/lib/components/tables/table/column-model.mjs +0 -395
  83. package/esm2020/lib/components/tables/table/column-template/column-template.directive.mjs +0 -35
  84. package/esm2020/lib/components/tables/table/column-text-properties.mjs +0 -2
  85. package/esm2020/lib/components/tables/table/default-cell-renderer/default-cell-renderer.component.mjs +0 -22
  86. package/esm2020/lib/components/tables/table/edit-row-controls/edit-row-controls.component.mjs +0 -55
  87. package/esm2020/lib/components/tables/table/mutable-cell-renderer.mjs +0 -2
  88. package/esm2020/lib/components/tables/table/select-cell-renderer/select-cell-renderer.component.mjs +0 -26
  89. package/esm2020/lib/components/tables/table/select-header-cell-renderer/select-header-cell-renderer.component.mjs +0 -31
  90. package/esm2020/lib/components/tables/table/table-cell-renderer/table-cell-renderer.component.mjs +0 -93
  91. package/esm2020/lib/components/tables/table/table-def.mjs +0 -2
  92. package/esm2020/lib/components/tables/table/table-header-cell-renderer/table-header-cell-renderer.component.mjs +0 -32
  93. package/esm2020/lib/components/tables/table/table-row-menu/table-row-menu.component.mjs +0 -84
  94. package/esm2020/lib/components/tables/table/text-search-predicate.mjs +0 -2
  95. package/lib/components/tables/table/cell-renderer.d.ts +0 -5
  96. package/lib/components/tables/table/column-model.d.ts +0 -145
  97. package/lib/components/tables/table/table-def.d.ts +0 -7
  98. package/lib/components/tables/table/text-search-predicate.d.ts +0 -1
  99. /package/lib/components/tables/{table → column}/column-template/column-template.directive.d.ts +0 -0
  100. /package/lib/components/tables/{table → column}/column-text-properties.d.ts +0 -0
  101. /package/lib/components/tables/{table → renderer}/cell-editors.d.ts +0 -0
  102. /package/lib/components/tables/{table → renderer}/default-header-cell-renderer/default-header-cell-renderer.component.d.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  import * as i4 from '@angular/common';
2
2
  import { DOCUMENT, CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { ElementRef, Directive, Inject, Host, Optional, Input, HostListener, NgZone, Injectable, Pipe, NgModule, Component, ContentChild, ViewEncapsulation, HostBinding, InjectionToken, ViewChildren, EventEmitter, ViewChild, Output, SkipSelf, Self, ContentChildren, ComponentRef, PLATFORM_ID, Injector } from '@angular/core';
4
+ import { ElementRef, Directive, Inject, Host, Optional, Input, HostListener, NgZone, Injectable, Pipe, NgModule, Component, ContentChild, ViewEncapsulation, HostBinding, InjectionToken, ViewChildren, EventEmitter, ViewChild, Output, SkipSelf, Self, ContentChildren, ComponentRef, Injector, PLATFORM_ID } from '@angular/core';
5
5
  import * as i4$1 from '@angular/forms';
6
6
  import { FormsModule } from '@angular/forms';
7
7
  import * as i1$8 from '@angular/material/form-field';
@@ -40,17 +40,19 @@ import { MatTooltipModule } from '@angular/material/tooltip';
40
40
  import * as i1$5 from '@fortawesome/angular-fontawesome';
41
41
  import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
42
42
  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, MultipleSelectionModel, DelegatingSelectionModel, AbstractComputedListModel, DirtyTrackingForm, ComputedListModel, PageController, Trace, Deferred, Functions } 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, Trace, Deferred } from '@coolon/pectin';
44
44
  import { __decorate, __param, __metadata } from 'tslib';
45
45
  import * as i1$2 from '@angular/platform-browser';
46
+ import * as _ from 'lodash';
46
47
  import { isEmpty, isString, isFunction, isNil, isInteger, isEqual, first, uniq, findLast, isObject, isNumber, isNaN as isNaN$1 } from 'lodash';
47
48
  import { marked } from 'marked';
48
49
  import { Memoize } from '@typescript-plus/fast-memoize-decorator';
49
50
  import { Enum } from 'typescript-string-enums';
50
- import { lang as lang$1, assert as assert$1, Stringy, Opts, Klass } from '@coolon/typescript-utilities';
51
+ import { lang as lang$1, assert as assert$1, Stringy, Klass, Opts } from '@coolon/typescript-utilities';
51
52
  import * as i3 from '@angular/material/core';
52
53
  import ResizeObserver from 'resize-observer-polyfill';
53
54
  import produce from 'immer';
55
+ import escapeStringRegexp from 'escape-string-regexp';
54
56
  import { fas } from '@fortawesome/free-solid-svg-icons';
55
57
  import * as i6$1 from '@angular/cdk/a11y';
56
58
  import { A11yModule } from '@angular/cdk/a11y';
@@ -2510,25 +2512,6 @@ class TemplateCellRendererPortalRef extends CellRendererPortalRef {
2510
2512
  }
2511
2513
  }
2512
2514
 
2513
- class DefaultCellRendererComponent {
2514
- constructor() {
2515
- }
2516
- set value(value) {
2517
- this._value = value;
2518
- }
2519
- get value() {
2520
- return this._value;
2521
- }
2522
- }
2523
- DefaultCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2524
- 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 } });
2525
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultCellRendererComponent, decorators: [{
2526
- type: Component,
2527
- args: [{ selector: 'aup-default-cell-renderer', template: "<span [innerHTML]=\"value| aupHighlight\"></span>\n", styles: [""] }]
2528
- }], ctorParameters: function () { return []; }, propDecorators: { value: [{
2529
- type: Input
2530
- }] } });
2531
-
2532
2515
  class DefaultHeaderCellRendererComponent {
2533
2516
  constructor() {
2534
2517
  }
@@ -2542,120 +2525,81 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
2542
2525
  type: Input
2543
2526
  }] } });
2544
2527
 
2545
- class EditSession extends GarbageCollector {
2546
- constructor(rowId, row, form, saveCommand) {
2547
- super();
2548
- this.rowId = rowId;
2549
- this.form = form;
2550
- this.saveCommand = saveCommand;
2551
- this._liveRowValue = new MutableValueModel();
2552
- this.liveRowValue = this._liveRowValue.readonly;
2553
- this.form.load(row);
2554
- this._liveRowValue.value = row;
2555
- this.form.onEdit(() => {
2556
- // if (!this._liveRowValue.value[immerable]) {
2557
- // console.warn()
2558
- // }
2559
- this._liveRowValue.value = produce(this._liveRowValue.value, draft => {
2560
- this.form.writeDirtyStateTo(draft);
2561
- });
2562
- });
2563
- }
2528
+ class ColumnTextSearchFormatter {
2564
2529
  }
2565
-
2566
- class EditRowControls extends DisposableComponent {
2567
- constructor() {
2568
- super();
2569
- this.saveCommand = Command.create(async () => {
2570
- const finished = await this.editSession.saveCommand.execute();
2571
- if (finished) {
2572
- this.editSession.dispose();
2573
- }
2574
- });
2575
- this.cancelCommand = Command.create(() => {
2576
- this.editSession.dispose();
2577
- }).disableWhile(this.saveCommand.busy);
2530
+ (function (ColumnTextSearchFormatter) {
2531
+ class Delegate extends ColumnTextSearchFormatter {
2578
2532
  }
2579
- set editSession(session) {
2580
- if (session) {
2581
- session.form.disableWhile(this.saveCommand.busy);
2533
+ ColumnTextSearchFormatter.Delegate = Delegate;
2534
+ class Delegating extends ColumnTextSearchFormatter.Delegate {
2535
+ constructor(delegateClass) {
2536
+ super();
2537
+ this.delegateClass = delegateClass;
2538
+ }
2539
+ initialise(injector) {
2540
+ this._delegate = injector.get(this.delegateClass);
2541
+ if (this._delegate instanceof Delegating) {
2542
+ this._delegate.initialise(injector);
2543
+ }
2544
+ }
2545
+ format(row) {
2546
+ return this._delegate ? this._delegate.format(row) : "";
2582
2547
  }
2583
- this._session = session;
2584
- }
2585
- get editSession() {
2586
- return this._session;
2587
2548
  }
2588
- ngOnInit() {
2549
+ ColumnTextSearchFormatter.Delegating = Delegating;
2550
+ function forFormatter(formatter) {
2551
+ return new class extends ColumnTextSearchFormatter {
2552
+ format(value) {
2553
+ return formatter(value);
2554
+ }
2555
+ };
2589
2556
  }
2590
- get form() {
2591
- return this.editSession?.form;
2557
+ ColumnTextSearchFormatter.forFormatter = forFormatter;
2558
+ class Null extends ColumnTextSearchFormatter {
2559
+ format(value) {
2560
+ return "";
2561
+ }
2592
2562
  }
2593
- }
2594
- EditRowControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: EditRowControls, deps: [], target: i0.ɵɵFactoryTarget.Component });
2595
- EditRowControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: EditRowControls, selector: "aup-row-editor-controls", inputs: { row: "row", editRowCommand: "editRowCommand", editSession: "editSession" }, usesInheritance: true, ngImport: i0, template: "<button *ngIf=\"!editSession\" mat-icon-button [pectinCommand]=\"editRowCommand\" class=\"edit-button\"><aup-icon icon=\"mat:edit\"></aup-icon></button>\n<button *ngIf=\"editSession\" mat-icon-button [pectinCommand]=\"saveCommand\"><aup-icon icon=\"mat:done\"></aup-icon></button>\n<button *ngIf=\"editSession\" mat-icon-button [pectinCommand]=\"cancelCommand\"><aup-icon icon=\"mat:clear\"></aup-icon></button>\n", styles: [":host{display:block;width:80px}.edit-button{visibility:hidden}:host-context(tr:hover) .edit-button{visibility:visible}\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: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }] });
2596
- __decorate([
2597
- TrackExternal(),
2598
- __metadata("design:type", Command)
2599
- ], EditRowControls.prototype, "editRowCommand", void 0);
2600
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: EditRowControls, decorators: [{
2601
- type: Component,
2602
- args: [{ selector: 'aup-row-editor-controls', template: "<button *ngIf=\"!editSession\" mat-icon-button [pectinCommand]=\"editRowCommand\" class=\"edit-button\"><aup-icon icon=\"mat:edit\"></aup-icon></button>\n<button *ngIf=\"editSession\" mat-icon-button [pectinCommand]=\"saveCommand\"><aup-icon icon=\"mat:done\"></aup-icon></button>\n<button *ngIf=\"editSession\" mat-icon-button [pectinCommand]=\"cancelCommand\"><aup-icon icon=\"mat:clear\"></aup-icon></button>\n", styles: [":host{display:block;width:80px}.edit-button{visibility:hidden}:host-context(tr:hover) .edit-button{visibility:visible}\n"] }]
2603
- }], ctorParameters: function () { return []; }, propDecorators: { row: [{
2604
- type: Input
2605
- }], editRowCommand: [{
2606
- type: Input
2607
- }], editSession: [{
2608
- type: Input
2609
- }] } });
2610
-
2611
- class SelectCellRendererComponent extends DisposableComponent {
2612
- constructor() {
2613
- super();
2614
- this.selectCommand = Command.create(() => {
2615
- this.selectionModel?.selectCommand.execute(this.row);
2616
- });
2563
+ ColumnTextSearchFormatter.Null = Null;
2564
+ class DefaultValueFormatter extends ColumnTextSearchFormatter {
2565
+ format(value) {
2566
+ let s = value?.toString() ?? "";
2567
+ console.log("DefaultValueFormatter", { value, text: s });
2568
+ return s;
2569
+ }
2617
2570
  }
2618
- isSelected() {
2619
- return this.selectionModel?.isSelected(this.row);
2571
+ ColumnTextSearchFormatter.DefaultValueFormatter = DefaultValueFormatter;
2572
+ class DefaultArrayFormatter extends ColumnTextSearchFormatter {
2573
+ format(value) {
2574
+ return value ? value.map(it => it?.toString()).join(",") : "";
2575
+ }
2620
2576
  }
2621
- }
2622
- SelectCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2623
- SelectCellRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: SelectCellRendererComponent, selector: "aup-select-cell-renderer", inputs: { row: "row" }, usesInheritance: true, ngImport: i0, template: "<mat-checkbox [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\"></mat-checkbox>\n", styles: [""], components: [{ type: i1$9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }] });
2624
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectCellRendererComponent, decorators: [{
2625
- type: Component,
2626
- args: [{ selector: 'aup-select-cell-renderer', template: "<mat-checkbox [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\"></mat-checkbox>\n", styles: [""] }]
2627
- }], ctorParameters: function () { return []; }, propDecorators: { row: [{
2628
- type: Input
2629
- }] } });
2577
+ ColumnTextSearchFormatter.DefaultArrayFormatter = DefaultArrayFormatter;
2578
+ })(ColumnTextSearchFormatter || (ColumnTextSearchFormatter = {}));
2630
2579
 
2631
- class SelectHeaderCellRendererComponent extends DisposableComponent {
2580
+ const noop = () => {
2581
+ };
2582
+ class ColumnTextSearchWrapper extends ColumnTextSearchFormatter.Delegate {
2632
2583
  constructor() {
2633
- super();
2634
- this.selectCommand = Command.create(() => {
2635
- this.selectionModel.toggleAllCommand.execute();
2636
- });
2584
+ super(...arguments);
2585
+ this._map = Functions.identity;
2637
2586
  }
2638
- isSelected() {
2639
- return this.selectionModel?.allSelected.value || false;
2587
+ initialise(injector) {
2588
+ if (this._delegate instanceof ColumnTextSearchFormatter.Delegate) {
2589
+ this._delegate.initialise(injector);
2590
+ }
2640
2591
  }
2641
- isIntermediate() {
2642
- return this.selectionModel?.someSelected.value || false;
2592
+ format(row) {
2593
+ let value = this._map(row);
2594
+ let result = this._delegate ? this._delegate.format(value) : "";
2595
+ console.log({ format: row, value, text: result });
2596
+ return result;
2643
2597
  }
2644
- isVisible() {
2645
- return this.enableHeaderControls && this.selectionModel.getDelegate() instanceof MultipleSelectionModel;
2598
+ setDelegate(formatter, mapper) {
2599
+ this._delegate = formatter;
2600
+ this._map = mapper ?? Functions.identity;
2646
2601
  }
2647
2602
  }
2648
- SelectHeaderCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectHeaderCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2649
- SelectHeaderCellRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: SelectHeaderCellRendererComponent, selector: "aup-select-header-cell-renderer", usesInheritance: true, ngImport: i0, template: "<mat-checkbox *ngIf=\"isVisible()\" [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\" [indeterminate]=\"this.isIntermediate()\"></mat-checkbox>\n", styles: [""], components: [{ type: i1$9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }] });
2650
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectHeaderCellRendererComponent, decorators: [{
2651
- type: Component,
2652
- args: [{ selector: 'aup-select-header-cell-renderer', template: "<mat-checkbox *ngIf=\"isVisible()\" [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\" [indeterminate]=\"this.isIntermediate()\"></mat-checkbox>\n", styles: [""] }]
2653
- }], ctorParameters: function () { return []; } });
2654
-
2655
- const noop = () => {
2656
- };
2657
- const CELL_RENDERER_COMPONENT_ROW_CACHE = Symbol('aup-cell-renderer:row-data-cache');
2658
- const DEFAULT_TEXT_SEARCH_PREDICATE = (row, text) => false;
2659
2603
  class ColumnModel extends GarbageCollector {
2660
2604
  constructor(columnId, textPropertiesProvider) {
2661
2605
  super();
@@ -2663,10 +2607,9 @@ class ColumnModel extends GarbageCollector {
2663
2607
  this.textPropertiesProvider = textPropertiesProvider;
2664
2608
  this._enableRowSelection = true;
2665
2609
  this._flex = false;
2666
- this._defaultVisibility = this.registerDisposable(new DelegatingValueModel().withDefault(true));
2667
- this._visible = this.registerDisposable(new DelegatingValueModel().withDefault(this._defaultVisibility));
2668
- this._columnModelTextSearchPredicate = undefined;
2669
- this._cellRendererTextSearchPredicate = undefined;
2610
+ this._defaultVisibility$ = this.registerDisposable(new DelegatingValueModel().withDefault(true));
2611
+ this._visible$ = this.registerDisposable(new DelegatingValueModel().withDefault(this._defaultVisibility$));
2612
+ this.textSearchDelegate = new ColumnTextSearchWrapper();
2670
2613
  this.installHeaderRenderer();
2671
2614
  this.dasherisedColumnId = Stringy.from(columnId).dasherize().toString();
2672
2615
  }
@@ -2679,32 +2622,21 @@ class ColumnModel extends GarbageCollector {
2679
2622
  return this.getColumnTextProperties()?.headerText() || this.getDefaultHeaderText();
2680
2623
  }
2681
2624
  isVisible() {
2682
- return this.visible.value;
2625
+ return this.visible$.value;
2683
2626
  }
2684
- get visible() {
2685
- return this._visible.readonly;
2627
+ get visible$() {
2628
+ return this._visible$.readonly;
2686
2629
  }
2687
2630
  visibleWhile(visible) {
2688
- this._visible.setDelegate(visible);
2631
+ this._visible$.setDelegate(visible);
2689
2632
  return this;
2690
2633
  }
2691
2634
  setDefaultVisibility(visible) {
2692
- this._defaultVisibility.setDelegate(visible);
2635
+ this._defaultVisibility$.setDelegate(visible);
2693
2636
  }
2694
2637
  getDefaultHeaderText() {
2695
2638
  return this.columnId;
2696
2639
  }
2697
- get isTextMatch() {
2698
- return this._cellRendererTextSearchPredicate ?? this._columnModelTextSearchPredicate ?? DEFAULT_TEXT_SEARCH_PREDICATE;
2699
- }
2700
- /**
2701
- * Sets the predicate to use when checking if the specified row is a text match for this column.
2702
- * @param predicate
2703
- */
2704
- useTextSearchPredicate(predicate) {
2705
- this._columnModelTextSearchPredicate = predicate;
2706
- return this;
2707
- }
2708
2640
  getColumnTextProperties() {
2709
2641
  return this._columnTextProperties || this.textPropertiesProvider();
2710
2642
  }
@@ -2719,6 +2651,14 @@ class ColumnModel extends GarbageCollector {
2719
2651
  this._columnTextProperties = columnTextProperties;
2720
2652
  return this;
2721
2653
  }
2654
+ getSearchTextFor(row) {
2655
+ return this.textSearchDelegate.format(row);
2656
+ }
2657
+ configureColumnTextSearch(formatter, mapper) {
2658
+ assert$1.notNil(formatter);
2659
+ console.log({ col: this.columnId, formatter });
2660
+ this.textSearchDelegate.setDelegate(formatter, mapper);
2661
+ }
2722
2662
  configureHeaderRenderer(config) {
2723
2663
  this._columnHeaderPortalRef = config;
2724
2664
  }
@@ -2757,15 +2697,6 @@ class ColumnModel extends GarbageCollector {
2757
2697
  onRendererAttached(host, ref) {
2758
2698
  const component = this.getComponentOrEmbeddedView(ref);
2759
2699
  this._cellRendererPortalRef.onPortalAttached(host, component);
2760
- if (ref instanceof CellRendererPortalRef && isFunction(component?.matches)) {
2761
- // we've had the case where we were calling matches on disposed components, so we have
2762
- // to make sure we only handle matches on components that we can track destroys.
2763
- this._cellRendererTextSearchPredicate = (row, text) => component.matches(row, text);
2764
- ref.onDestroy(() => this._cellRendererTextSearchPredicate = undefined);
2765
- }
2766
- else {
2767
- this._cellRendererTextSearchPredicate = undefined;
2768
- }
2769
2700
  }
2770
2701
  // @Trace()
2771
2702
  onEditorAttached(host, ref) {
@@ -2798,6 +2729,9 @@ class ColumnModel extends GarbageCollector {
2798
2729
  return ref;
2799
2730
  }
2800
2731
  }
2732
+ initialise(injector) {
2733
+ this.textSearchDelegate.initialise(injector);
2734
+ }
2801
2735
  }
2802
2736
  __decorate([
2803
2737
  Memoize(),
@@ -2811,143 +2745,453 @@ __decorate([
2811
2745
  __metadata("design:paramtypes", []),
2812
2746
  __metadata("design:returntype", Object)
2813
2747
  ], ColumnModel.prototype, "getColumnTextProperties", null);
2814
- class PropertyColumnModel extends ColumnModel {
2815
- constructor(id, property, defaults) {
2816
- super(id, defaults);
2817
- this.property = property;
2818
- this._format = (value) => value?.toString();
2819
- this.cellRenderer(DefaultCellRendererComponent);
2820
- this.useTextSearchPredicate((row, regex) => {
2821
- return regex.test(this._format(row[this.property]));
2822
- });
2823
- }
2824
- cellRenderer(componentType, onComponentInitOrOptions) {
2825
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
2826
- if (firstTime) {
2827
- if (isFunction(onComponentInitOrOptions)) {
2828
- onComponentInitOrOptions(component);
2829
- }
2830
- else {
2831
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
2832
- onComponentInitOrOptions.onComponentInit(component);
2833
- }
2834
- }
2835
- }
2836
- component.value = this._format(rowData.row[this.property]);
2837
- }));
2838
- return this;
2839
- }
2840
- liveEditCellRenderer(componentType, options) {
2841
- return this.mutableCellRenderer(componentType, options);
2842
- }
2843
- /**
2844
- * Deprecated. Use #liveEditCellRenderer instead.
2845
- * @param componentType
2846
- * @param options
2847
- */
2848
- mutableCellRenderer(componentType, options) {
2849
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
2850
- // keep a local copy most recent row value so it's available to teh
2851
- // edit callback without having to add/remove subscribers all the time.
2852
- component[CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
2853
- let disableEditCallback = false;
2854
- if (firstTime) {
2855
- if (isFunction(options?.onComponentInit)) {
2856
- options.onComponentInit(component);
2857
- }
2858
- // install our edit callback
2859
- component.onValueEdited((is, was) => {
2860
- if (!disableEditCallback) {
2861
- options.onValueEdit(component[CELL_RENDERER_COMPONENT_ROW_CACHE], is, was);
2862
- }
2863
- });
2864
- }
2865
- // now push the value the component and disable the callback just incase the component misbehaves
2866
- // and fires a value change during the operation.
2867
- disableEditCallback = true;
2868
- component.value = rowData.row[this.property];
2869
- disableEditCallback = false;
2870
- if (!isFunction(options) && isFunction(options?.onRowUpdate)) {
2871
- options.onRowUpdate(component, rowData.row);
2872
- }
2873
- }));
2874
- return this;
2875
- }
2876
- cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
2877
- const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
2878
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
2879
- this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
2880
- const formValueModel = editSession.form.pluck(this.property);
2881
- if (validators) {
2882
- formValueModel.validateUsing(validators);
2883
- }
2884
- component.valueModel = formValueModel;
2885
- if (initialiser) {
2886
- initialiser(component);
2887
- }
2888
- }));
2889
- return this;
2748
+ (function (ColumnModel) {
2749
+ ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE = Symbol('aup-cell-renderer:row-data-cache');
2750
+ })(ColumnModel || (ColumnModel = {}));
2751
+
2752
+ class CustomTemplateColumnModel extends ColumnModel {
2753
+ constructor(columnId, defaults) {
2754
+ super(columnId, defaults);
2755
+ this.config = new TemplateCellRendererPortalRef();
2756
+ this.configureCellRenderer(this.config);
2890
2757
  }
2891
- format(formatter) {
2892
- assert$1.isFunction(formatter);
2893
- this._format = formatter;
2894
- return this;
2758
+ setTemplate(templateRef, viewContainer, fillCell, padChild) {
2759
+ this.config.registerPortal(templateRef, viewContainer, fillCell, padChild);
2895
2760
  }
2896
2761
  selectRowOnClick(selectOnRowClick) {
2897
2762
  return this._selectRowOnClick(selectOnRowClick);
2898
2763
  }
2899
2764
  }
2900
- class ListPropertyColumnModel extends ColumnModel {
2901
- constructor(id, property, defaults) {
2902
- super(id, defaults);
2903
- this.property = property;
2904
- this._format = (value) => value.map(v => v?.toString()).join(', ');
2905
- this.cellRenderer(DefaultCellRendererComponent);
2906
- this.useTextSearchPredicate((row, regex) => {
2907
- let rowElement = row[this.property];
2908
- // @ts-ignore Started complaining in ts 4.5.. but I think my logic is correct...
2909
- return regex.test(this._format(rowElement));
2910
- });
2911
- }
2912
- cellRenderer(componentType) {
2913
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData) => {
2914
- let rowElement = rowData.row[this.property];
2915
- // @ts-ignore Started complaining in ts 4.5.. but I think my logic is correct...
2916
- component.value = this._format(rowElement);
2917
- }));
2918
- return this;
2919
- }
2920
- cellEditor(editor, validatorsOrInitialiser, initialiseComponent) {
2921
- const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
2922
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
2923
- this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
2924
- const formListModel = editSession.form.pluckList(this.property);
2925
- if (validators) {
2926
- formListModel.validateUsing(validators);
2927
- }
2928
- component.listModel = formListModel;
2929
- if (initialiser) {
2930
- initialiser(component);
2931
- }
2932
- }));
2933
- return this;
2934
- }
2935
- format(formatter) {
2936
- assert$1.isFunction(formatter);
2937
- this._format = formatter;
2938
- return this;
2939
- }
2940
- selectRowOnClick(selectRowOnClick) {
2941
- return this._selectRowOnClick(selectRowOnClick);
2942
- }
2943
- }
2944
- class CustomValueColumnModel extends ColumnModel {
2945
- constructor(columnId, defaults, getValue) {
2765
+
2766
+ /**
2767
+ * Create your model:
2768
+ * @example
2769
+ * this.heroTableModel = new TableModel(heroList, table => {
2770
+ * table.pluck("firstName");
2771
+ * table.pluck("lastName");
2772
+ * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
2773
+ * });
2774
+ *
2775
+ * Create your table
2776
+ * @example
2777
+ * <aup-table [tableModel]="heroTableModel"></aup-table>
2778
+ *
2779
+ * Column templates
2780
+ * @example
2781
+ * this.heroTableModel = new TableModel(heroList, table => {
2782
+ * table.pluck("firstName");
2783
+ * table.pluck("lastName");
2784
+ * table.addTemplateColumn("specialColumn");
2785
+ * });
2786
+ * <aup-table [tableModel]="heroTableModel">
2787
+ * <div *aupColumnTemplate="let hero; columnId: 'specialColumn'; fillCell: true; padChild:false">
2788
+ * {{hero.name}}
2789
+ * </div>
2790
+ * </aup-table>
2791
+ *
2792
+ * Styling
2793
+ * @example
2794
+ * // global settings
2795
+ * :root {
2796
+ * --aup-table-column-gap: 10px; // defaults to 24px
2797
+ * --aup-table-row-hover-background-color, rgba(0, 0, 0, 0.05)
2798
+ * --aup-table-row-selected-background-color: rebeccapurple; // defaults to transparent
2799
+ * --aup-table-first-column-padding-left: 18px // defaults to --column-gap
2800
+ * --aup-table-last-column-padding-right: 18px // defaults to --column-gap
2801
+ * }
2802
+ *
2803
+ * // per table settings.
2804
+ * aup-table {
2805
+ * --column-gap: 10px; // defaults to 24px
2806
+ * --row-hover-background-color, rgba(0, 0, 0, 0.05)
2807
+ * --row-selected-background-color: rebeccapurple; // defaults to transparent
2808
+ * --first-column-padding-left: 18px // defaults to --column-gap
2809
+ * --last-column-padding-right: 18px // defaults to --column-gap
2810
+ *
2811
+ * aup-table-header-cell-renderer,
2812
+ * aup-table-cell-renderer {
2813
+ * &.aup-col-my-dasherised-column-id {
2814
+ * // do stuff
2815
+ * }
2816
+ * &.first-visible-column {
2817
+ * // do stuff
2818
+ * }
2819
+ * &.last-visible-column {
2820
+ * // do stuff
2821
+ * }
2822
+ * }
2823
+ * }
2824
+ */
2825
+ class AbstractTableComponent extends ResizeAwareComponent {
2826
+ constructor(elementRef, ngZone, injector) {
2827
+ super(elementRef, ngZone);
2828
+ this.injector = injector;
2829
+ /**
2830
+ * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
2831
+ * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
2832
+ * containment area.
2833
+ */
2834
+ this.enableScrolling = false;
2835
+ // TODO: support user defined header and row heights via css vars.
2836
+ this.headerHeight = new MutableValueModel(56);
2837
+ this.rowHeight = new MutableValueModel(48);
2838
+ this.baseCssClass = 'aup-table-component';
2839
+ const { chain, when } = Dsl.disposeWith(this);
2840
+ const actualHeaderHeight = chain(this.showHeaderModel).map(show => {
2841
+ return show ? this.headerHeight.value : 0;
2842
+ }, { dependsOn: this.headerHeight });
2843
+ this.visibleRowCount = chain(this.boundsModel).map(bounds => {
2844
+ // TODO: this doesn't take into account any css styling adjustments etc. Will investigate if it's an issue.
2845
+ const rawRowCount = (bounds.height - actualHeaderHeight.value) / this.rowHeight.value;
2846
+ return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
2847
+ }, {
2848
+ dependsOn: [actualHeaderHeight, this.rowHeight],
2849
+ postponeWhile: chain(this.boundsModel).pluckNumeric('height').isLessThan(1)
2850
+ });
2851
+ }
2852
+ get hideHeader() {
2853
+ return !this.showHeader;
2854
+ }
2855
+ getModel() {
2856
+ return lang$1.abstractMethod(this.constructor);
2857
+ }
2858
+ ngOnInit() {
2859
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2860
+ this.getModel().initialise(this.injector);
2861
+ this.columns = chain(this.getModel().columns);
2862
+ this.columnIds = chain(this.columns).pluck('columnId');
2863
+ this.columnsById = chain(this.columns).indexBy('columnId');
2864
+ }
2865
+ isEditing(row) {
2866
+ return !!this.getModel().getEditSessionFor(row);
2867
+ }
2868
+ registerColumnTemplate(columnId, templateRef, viewContainer, fillCell, padChild) {
2869
+ const column = this.columnsById.get(columnId);
2870
+ if (column instanceof CustomTemplateColumnModel) {
2871
+ column.setTemplate(templateRef, viewContainer, fillCell, padChild);
2872
+ }
2873
+ }
2874
+ notifyCellClicked(columnModel, row) {
2875
+ this.getModel()._notifyCellClicked(columnModel, row);
2876
+ }
2877
+ // @Trace()
2878
+ isFirstVisibleColumn(columnId) {
2879
+ return this.getModel().firstVisibleColumn$.query().value?.columnId === columnId;
2880
+ }
2881
+ // @Trace()
2882
+ isLastVisibleColumn(columnId) {
2883
+ return this.getModel().lastVisibleColumn$.query().value?.columnId === columnId;
2884
+ }
2885
+ getColumnClasses(columnId) {
2886
+ const classes = [`aup-col-${this.columnsById.get(columnId).dasherisedColumnId}`];
2887
+ if (this.isFirstVisibleColumn(columnId)) {
2888
+ classes.push('first-visible-column');
2889
+ }
2890
+ if (this.isLastVisibleColumn(columnId)) {
2891
+ classes.push('last-visible-column');
2892
+ }
2893
+ return classes;
2894
+ }
2895
+ }
2896
+ 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 });
2897
+ 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 });
2898
+ __decorate([
2899
+ TrackExternal({ defaultValue: true }),
2900
+ __metadata("design:type", ValueModel)
2901
+ ], AbstractTableComponent.prototype, "showHeaderModel", void 0);
2902
+ __decorate([
2903
+ StoreInValueModel('showHeaderModel'),
2904
+ __metadata("design:type", Boolean)
2905
+ ], AbstractTableComponent.prototype, "showHeader", void 0);
2906
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, decorators: [{
2907
+ type: Component,
2908
+ args: [{
2909
+ selector: 'aup-abstract-table',
2910
+ template: ''
2911
+ }]
2912
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { showHeaderModel: [{
2913
+ type: Input
2914
+ }], showHeader: [{
2915
+ type: Input
2916
+ }], enableScrolling: [{
2917
+ type: Input
2918
+ }, {
2919
+ type: HostBinding,
2920
+ args: ['class.enable-scrolling']
2921
+ }], baseCssClass: [{
2922
+ type: HostBinding,
2923
+ args: ['class']
2924
+ }], hideHeader: [{
2925
+ type: HostBinding,
2926
+ args: ['class.hide-header']
2927
+ }] } });
2928
+
2929
+ class ColumnTemplateDirective {
2930
+ constructor(host, templateRef, viewContainer) {
2931
+ this.host = host;
2932
+ this.templateRef = templateRef;
2933
+ this.viewContainer = viewContainer;
2934
+ this.aupColumnTemplateFillCell = false;
2935
+ this.aupColumnTemplateAutoPadChild = undefined;
2936
+ }
2937
+ ngOnInit() {
2938
+ assert.isTruthy(this.aupColumnTemplateColumnId);
2939
+ this.host.registerColumnTemplate(this.aupColumnTemplateColumnId, this.templateRef, this.viewContainer, this.aupColumnTemplateFillCell, this.aupColumnTemplateAutoPadChild ?? this.aupColumnTemplateFillCell);
2940
+ }
2941
+ }
2942
+ ColumnTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ColumnTemplateDirective, deps: [{ token: AbstractTableComponent }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
2943
+ ColumnTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: ColumnTemplateDirective, selector: "[aupColumnTemplate]", inputs: { aupColumnTemplate: "aupColumnTemplate", aupColumnTemplateColumnId: "aupColumnTemplateColumnId", aupColumnTemplateFillCell: "aupColumnTemplateFillCell", aupColumnTemplateAutoPadChild: "aupColumnTemplateAutoPadChild" }, ngImport: i0 });
2944
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ColumnTemplateDirective, decorators: [{
2945
+ type: Directive,
2946
+ args: [{
2947
+ selector: '[aupColumnTemplate]'
2948
+ }]
2949
+ }], ctorParameters: function () { return [{ type: AbstractTableComponent }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { aupColumnTemplate: [{
2950
+ type: Input
2951
+ }], aupColumnTemplateColumnId: [{
2952
+ type: Input
2953
+ }], aupColumnTemplateFillCell: [{
2954
+ type: Input
2955
+ }], aupColumnTemplateAutoPadChild: [{
2956
+ type: Input
2957
+ }] } });
2958
+
2959
+ const TEXT_SEARCH_FORMATTER_KEY = `aup:table:textSearchFormatter`;
2960
+ const Keys = Enum("useFunction", "useInstance", "useClass");
2961
+ function EnableCellTextSearch(options) {
2962
+ assert$1.notNil(options);
2963
+ return (constructor) => {
2964
+ const klass = Klass.get(constructor);
2965
+ assert$1.isFalsey(klass.hasOwnMetadata(TEXT_SEARCH_FORMATTER_KEY), "class already decorated with @EnableCellTextSearch");
2966
+ klass.defineMetadata(TEXT_SEARCH_FORMATTER_KEY, options);
2967
+ };
2968
+ }
2969
+ (function (EnableCellTextSearch) {
2970
+ function getFormatter(renderer, useDefault) {
2971
+ const options = Klass.get(renderer).getMetadata(TEXT_SEARCH_FORMATTER_KEY) ?? {};
2972
+ if (options[Keys.useFunction]) {
2973
+ return ColumnTextSearchFormatter.forFormatter(options[Keys.useFunction]);
2974
+ }
2975
+ if (options[Keys.useInstance]) {
2976
+ return options[Keys.useInstance];
2977
+ }
2978
+ if (options[Keys.useClass]) {
2979
+ return new ColumnTextSearchFormatter.Delegating(options[Keys.useClass]);
2980
+ }
2981
+ return useDefault();
2982
+ }
2983
+ EnableCellTextSearch.getFormatter = getFormatter;
2984
+ })(EnableCellTextSearch || (EnableCellTextSearch = {}));
2985
+
2986
+ let DefaultCellRendererComponent = class DefaultCellRendererComponent {
2987
+ constructor() {
2988
+ }
2989
+ set value(value) {
2990
+ this._value = value;
2991
+ }
2992
+ get value() {
2993
+ return this._value;
2994
+ }
2995
+ };
2996
+ DefaultCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2997
+ 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 } });
2998
+ DefaultCellRendererComponent = __decorate([
2999
+ EnableCellTextSearch({ useClass: ColumnTextSearchFormatter.DefaultValueFormatter }),
3000
+ __metadata("design:paramtypes", [])
3001
+ ], DefaultCellRendererComponent);
3002
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultCellRendererComponent, decorators: [{
3003
+ type: Component,
3004
+ args: [{ selector: "aup-default-cell-renderer", template: "<span [innerHTML]=\"value| aupHighlight\"></span>\n", styles: [""] }]
3005
+ }], ctorParameters: function () { return []; }, propDecorators: { value: [{
3006
+ type: Input
3007
+ }] } });
3008
+
3009
+ class EditSession extends GarbageCollector {
3010
+ constructor(rowId, row, form, saveCommand) {
3011
+ super();
3012
+ this.rowId = rowId;
3013
+ this.form = form;
3014
+ this.saveCommand = saveCommand;
3015
+ this._liveRowValue$ = new MutableValueModel();
3016
+ this.liveRowValue$ = this._liveRowValue$.readonly;
3017
+ this.form.load(row);
3018
+ this._liveRowValue$.value = row;
3019
+ this.form.onEdit(() => {
3020
+ // if (!this._liveRowValue.value[immerable]) {
3021
+ // console.warn()
3022
+ // }
3023
+ this._liveRowValue$.value = produce(this._liveRowValue$.value, draft => {
3024
+ this.form.writeDirtyStateTo(draft);
3025
+ });
3026
+ });
3027
+ }
3028
+ }
3029
+
3030
+ class EditRowControls extends DisposableComponent {
3031
+ constructor() {
3032
+ super();
3033
+ this.saveCommand = Command.create(async () => {
3034
+ const finished = await this.editSession.saveCommand.execute();
3035
+ if (finished) {
3036
+ this.editSession.dispose();
3037
+ }
3038
+ });
3039
+ this.cancelCommand = Command.create(() => {
3040
+ this.editSession.dispose();
3041
+ }).disableWhile(this.saveCommand.busy);
3042
+ }
3043
+ set editSession(session) {
3044
+ if (session) {
3045
+ session.form.disableWhile(this.saveCommand.busy);
3046
+ }
3047
+ this._session = session;
3048
+ }
3049
+ get editSession() {
3050
+ return this._session;
3051
+ }
3052
+ ngOnInit() {
3053
+ }
3054
+ get form() {
3055
+ return this.editSession?.form;
3056
+ }
3057
+ }
3058
+ EditRowControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: EditRowControls, deps: [], target: i0.ɵɵFactoryTarget.Component });
3059
+ EditRowControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: EditRowControls, selector: "aup-row-editor-controls", inputs: { row: "row", editRowCommand: "editRowCommand", editSession: "editSession" }, usesInheritance: true, ngImport: i0, template: "<button *ngIf=\"!editSession\" mat-icon-button [pectinCommand]=\"editRowCommand\" class=\"edit-button\"><aup-icon icon=\"mat:edit\"></aup-icon></button>\n<button *ngIf=\"editSession\" mat-icon-button [pectinCommand]=\"saveCommand\"><aup-icon icon=\"mat:done\"></aup-icon></button>\n<button *ngIf=\"editSession\" mat-icon-button [pectinCommand]=\"cancelCommand\"><aup-icon icon=\"mat:clear\"></aup-icon></button>\n", styles: [":host{display:block;width:80px}.edit-button{visibility:hidden}:host-context(tr:hover) .edit-button{visibility:visible}\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: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }] });
3060
+ __decorate([
3061
+ TrackExternal(),
3062
+ __metadata("design:type", Command)
3063
+ ], EditRowControls.prototype, "editRowCommand", void 0);
3064
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: EditRowControls, decorators: [{
3065
+ type: Component,
3066
+ args: [{ selector: 'aup-row-editor-controls', template: "<button *ngIf=\"!editSession\" mat-icon-button [pectinCommand]=\"editRowCommand\" class=\"edit-button\"><aup-icon icon=\"mat:edit\"></aup-icon></button>\n<button *ngIf=\"editSession\" mat-icon-button [pectinCommand]=\"saveCommand\"><aup-icon icon=\"mat:done\"></aup-icon></button>\n<button *ngIf=\"editSession\" mat-icon-button [pectinCommand]=\"cancelCommand\"><aup-icon icon=\"mat:clear\"></aup-icon></button>\n", styles: [":host{display:block;width:80px}.edit-button{visibility:hidden}:host-context(tr:hover) .edit-button{visibility:visible}\n"] }]
3067
+ }], ctorParameters: function () { return []; }, propDecorators: { row: [{
3068
+ type: Input
3069
+ }], editRowCommand: [{
3070
+ type: Input
3071
+ }], editSession: [{
3072
+ type: Input
3073
+ }] } });
3074
+
3075
+ let formatter = (row) => row.map(e => e?.toString()).join(", ");
3076
+ let DefaultListCellRendererComponent = class DefaultListCellRendererComponent extends DisposableComponent {
3077
+ constructor() {
3078
+ super();
3079
+ const { chain } = Dsl.disposeWith(this);
3080
+ this.text$ = chain(this.value$).reduce(formatter);
3081
+ }
3082
+ };
3083
+ DefaultListCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultListCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3084
+ 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 } });
3085
+ __decorate([
3086
+ TrackExternal(),
3087
+ __metadata("design:type", ListModel)
3088
+ ], DefaultListCellRendererComponent.prototype, "value$", void 0);
3089
+ __decorate([
3090
+ StoreInListModel("value$"),
3091
+ __metadata("design:type", Array)
3092
+ ], DefaultListCellRendererComponent.prototype, "value", void 0);
3093
+ DefaultListCellRendererComponent = __decorate([
3094
+ EnableCellTextSearch({ useClass: ColumnTextSearchFormatter.DefaultArrayFormatter }),
3095
+ __metadata("design:paramtypes", [])
3096
+ ], DefaultListCellRendererComponent);
3097
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultListCellRendererComponent, decorators: [{
3098
+ type: Component,
3099
+ args: [{ selector: "aup-default-list-cell-renderer", template: "<span [innerHTML]=\"text$.value| aupHighlight\"></span>\n", styles: [""] }]
3100
+ }], ctorParameters: function () { return []; }, propDecorators: { value$: [{
3101
+ type: Input
3102
+ }], value: [{
3103
+ type: Input
3104
+ }] } });
3105
+
3106
+ class SelectionCellComponent extends DisposableComponent {
3107
+ constructor() {
3108
+ super();
3109
+ this.selectCommand = Command.create(() => {
3110
+ this.selectionModel?.selectCommand.execute(this.row);
3111
+ });
3112
+ }
3113
+ isSelected() {
3114
+ return this.selectionModel?.isSelected(this.row);
3115
+ }
3116
+ }
3117
+ SelectionCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectionCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3118
+ SelectionCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: SelectionCellComponent, selector: "aup-selection-cell", inputs: { row: "row" }, usesInheritance: true, ngImport: i0, template: "<mat-checkbox [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\"></mat-checkbox>\n", styles: [""], components: [{ type: i1$9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }] });
3119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectionCellComponent, decorators: [{
3120
+ type: Component,
3121
+ args: [{ selector: 'aup-selection-cell', template: "<mat-checkbox [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\"></mat-checkbox>\n", styles: [""] }]
3122
+ }], ctorParameters: function () { return []; }, propDecorators: { row: [{
3123
+ type: Input
3124
+ }] } });
3125
+
3126
+ class SelectionHeaderCellComponent extends DisposableComponent {
3127
+ constructor() {
3128
+ super();
3129
+ this.selectCommand = Command.create(() => {
3130
+ this.selectionModel.toggleAllCommand.execute();
3131
+ });
3132
+ }
3133
+ isSelected() {
3134
+ return this.selectionModel?.allSelected.value || false;
3135
+ }
3136
+ isIntermediate() {
3137
+ return this.selectionModel?.someSelected.value || false;
3138
+ }
3139
+ isVisible() {
3140
+ return this.enableHeaderControls && this.selectionModel.getDelegate() instanceof MultipleSelectionModel;
3141
+ }
3142
+ }
3143
+ SelectionHeaderCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectionHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3144
+ SelectionHeaderCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: SelectionHeaderCellComponent, selector: "aup-selection-header-cell", usesInheritance: true, ngImport: i0, template: "<mat-checkbox *ngIf=\"isVisible()\" [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\" [indeterminate]=\"this.isIntermediate()\"></mat-checkbox>\n", styles: [""], components: [{ type: i1$9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }] });
3145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectionHeaderCellComponent, decorators: [{
3146
+ type: Component,
3147
+ args: [{ selector: 'aup-selection-header-cell', template: "<mat-checkbox *ngIf=\"isVisible()\" [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\" [indeterminate]=\"this.isIntermediate()\"></mat-checkbox>\n", styles: [""] }]
3148
+ }], ctorParameters: function () { return []; } });
3149
+
3150
+ class ColumnListModel extends AbstractComputedListModel {
3151
+ constructor() {
3152
+ super();
3153
+ this._allColumns$ = new MutableListModel();
3154
+ const { chain } = Dsl.disposeWith(this);
3155
+ this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
3156
+ }
3157
+ get allColumns$() {
3158
+ return this._allColumns$.readonly;
3159
+ }
3160
+ getColumn(id) {
3161
+ return this.columnsById$.get(id);
3162
+ }
3163
+ hasColumn(id) {
3164
+ return !!this.columnsById$.get(id);
3165
+ }
3166
+ addColumn(column, index) {
3167
+ if (this.hasColumn(column.columnId)) {
3168
+ lang.illegalState(`Column with id=${column.columnId} already exists`);
3169
+ }
3170
+ this.registerDisposable(column);
3171
+ this.runInTransaction(() => {
3172
+ if (!isNil(index)) {
3173
+ this._allColumns$.insert(index, column);
3174
+ }
3175
+ else {
3176
+ this._allColumns$.push(column);
3177
+ }
3178
+ this.registerDisposable(this.trackSource(column.visible$));
3179
+ });
3180
+ return column;
3181
+ }
3182
+ doComputeValue() {
3183
+ return this._allColumns$.value.filter(c => c.visible$.value);
3184
+ }
3185
+ }
3186
+
3187
+ class CustomValueColumnModel extends ColumnModel {
3188
+ constructor(columnId, defaults, getValue) {
2946
3189
  super(columnId, defaults);
2947
3190
  this.getValue = getValue;
2948
3191
  this.cellRenderer(DefaultCellRendererComponent);
2949
3192
  }
2950
3193
  cellRenderer(componentType, onComponentInitOrOptions) {
3194
+ this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.Null()), row => this.getValue(row));
2951
3195
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
2952
3196
  if (firstTime) {
2953
3197
  if (isFunction(onComponentInitOrOptions)) {
@@ -2970,6 +3214,7 @@ class CustomValueColumnModel extends ColumnModel {
2970
3214
  return this._selectRowOnClick(selectOnRowClick);
2971
3215
  }
2972
3216
  }
3217
+
2973
3218
  class EditorControlColumnModel extends ColumnModel {
2974
3219
  constructor(columnId, saveCommandFactory, defaults) {
2975
3220
  super(columnId, defaults);
@@ -2983,34 +3228,148 @@ class EditorControlColumnModel extends ColumnModel {
2983
3228
  }));
2984
3229
  return this;
2985
3230
  }
2986
- getDefaultHeaderText() {
2987
- return '';
2988
- }
2989
- }
2990
- class CustomTemplateColumnModel extends ColumnModel {
2991
- constructor(columnId, defaults) {
2992
- super(columnId, defaults);
2993
- this.config = new TemplateCellRendererPortalRef();
2994
- this.configureCellRenderer(this.config);
2995
- }
2996
- setTemplate(templateRef, viewContainer, fillCell, padChild) {
2997
- this.config.registerPortal(templateRef, viewContainer, fillCell, padChild);
3231
+ getDefaultHeaderText() {
3232
+ return '';
3233
+ }
3234
+ }
3235
+
3236
+ class ListPropertyColumnModel extends ColumnModel {
3237
+ constructor(id, property, defaults) {
3238
+ super(id, defaults);
3239
+ this.property = property;
3240
+ this._format = (value) => value.map(v => v?.toString()).join(", ");
3241
+ this.cellRenderer(DefaultListCellRendererComponent);
3242
+ }
3243
+ cellRenderer(componentType) {
3244
+ this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.DefaultArrayFormatter()), row => row[this.property]);
3245
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData) => {
3246
+ let rowElement = rowData.row[this.property];
3247
+ // @ts-ignore Started complaining in ts 4.5.. but I think my logic is correct...
3248
+ component.value = this._format(rowElement);
3249
+ }));
3250
+ return this;
3251
+ }
3252
+ cellEditor(editor, validatorsOrInitialiser, initialiseComponent) {
3253
+ const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3254
+ const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3255
+ this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
3256
+ const formListModel = editSession.form.pluckList(this.property);
3257
+ if (validators) {
3258
+ formListModel.validateUsing(validators);
3259
+ }
3260
+ component.listModel = formListModel;
3261
+ if (initialiser) {
3262
+ initialiser(component);
3263
+ }
3264
+ }));
3265
+ return this;
3266
+ }
3267
+ format(formatter) {
3268
+ assert$1.isFunction(formatter);
3269
+ this._format = formatter;
3270
+ return this;
3271
+ }
3272
+ selectRowOnClick(selectRowOnClick) {
3273
+ return this._selectRowOnClick(selectRowOnClick);
3274
+ }
3275
+ }
3276
+
3277
+ class PropertyColumnModel extends ColumnModel {
3278
+ constructor(id, property, defaults) {
3279
+ super(id, defaults);
3280
+ this.property = property;
3281
+ this._format = (value) => value?.toString();
3282
+ this.cellRenderer(DefaultCellRendererComponent);
3283
+ }
3284
+ cellRenderer(componentType, onComponentInitOrOptions) {
3285
+ this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.DefaultValueFormatter()), row => row[this.property]);
3286
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3287
+ if (firstTime) {
3288
+ if (isFunction(onComponentInitOrOptions)) {
3289
+ onComponentInitOrOptions(component);
3290
+ }
3291
+ else {
3292
+ if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3293
+ onComponentInitOrOptions.onComponentInit(component);
3294
+ }
3295
+ }
3296
+ }
3297
+ component.value = this._format(rowData.row[this.property]);
3298
+ }));
3299
+ return this;
3300
+ }
3301
+ liveEditCellRenderer(componentType, options) {
3302
+ return this.mutableCellRenderer(componentType, options);
3303
+ }
3304
+ /**
3305
+ * Deprecated. Use #liveEditCellRenderer instead.
3306
+ * @param componentType
3307
+ * @param options
3308
+ */
3309
+ mutableCellRenderer(componentType, options) {
3310
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3311
+ // keep a local copy most recent row value so it's available to teh
3312
+ // edit callback without having to add/remove subscribers all the time.
3313
+ component[ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
3314
+ let disableEditCallback = false;
3315
+ if (firstTime) {
3316
+ if (isFunction(options?.onComponentInit)) {
3317
+ options.onComponentInit(component);
3318
+ }
3319
+ // install our edit callback
3320
+ component.onValueEdited((is, was) => {
3321
+ if (!disableEditCallback) {
3322
+ options.onValueEdit(component[ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE], is, was);
3323
+ }
3324
+ });
3325
+ }
3326
+ // now push the value the component and disable the callback just incase the component misbehaves
3327
+ // and fires a value change during the operation.
3328
+ disableEditCallback = true;
3329
+ component.value = rowData.row[this.property];
3330
+ disableEditCallback = false;
3331
+ if (!isFunction(options) && isFunction(options?.onRowUpdate)) {
3332
+ options.onRowUpdate(component, rowData.row);
3333
+ }
3334
+ }));
3335
+ return this;
3336
+ }
3337
+ cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
3338
+ const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3339
+ const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
3340
+ this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
3341
+ const formValueModel = editSession.form.pluck(this.property);
3342
+ if (validators) {
3343
+ formValueModel.validateUsing(validators);
3344
+ }
3345
+ component.valueModel = formValueModel;
3346
+ if (initialiser) {
3347
+ initialiser(component);
3348
+ }
3349
+ }));
3350
+ return this;
3351
+ }
3352
+ format(formatter) {
3353
+ assert$1.isFunction(formatter);
3354
+ this._format = formatter;
3355
+ return this;
2998
3356
  }
2999
3357
  selectRowOnClick(selectOnRowClick) {
3000
3358
  return this._selectRowOnClick(selectOnRowClick);
3001
3359
  }
3002
3360
  }
3361
+
3003
3362
  class SelectionColumnModel extends ColumnModel {
3004
3363
  constructor(columnId, defaults, selectionModel) {
3005
3364
  super(columnId, defaults);
3006
3365
  this._enableHeaderControls = true;
3007
3366
  this.selectionModel = DelegatingSelectionModel.createDelegate();
3008
3367
  this._selectRowOnClick(false);
3009
- this.cellHeaderRenderer(SelectHeaderCellRendererComponent, (component) => {
3368
+ this.cellHeaderRenderer(SelectionHeaderCellComponent, (component) => {
3010
3369
  component.selectionModel = this.selectionModel;
3011
3370
  component.enableHeaderControls = this._enableHeaderControls;
3012
3371
  });
3013
- this.configureCellRenderer(new ComponentCellRendererPortalRef(SelectCellRendererComponent, (component, rowData) => {
3372
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(SelectionCellComponent, (component, rowData) => {
3014
3373
  component.row = rowData.row;
3015
3374
  component.selectionModel = this.selectionModel;
3016
3375
  }));
@@ -3035,234 +3394,8 @@ class SelectionColumnModel extends ColumnModel {
3035
3394
  }
3036
3395
  }
3037
3396
 
3038
- /**
3039
- * Create your model:
3040
- * @example
3041
- * this.heroTableModel = TableModel.fromList(heroList, table => {
3042
- * table.pluck("firstName");
3043
- * table.pluck("lastName");
3044
- * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
3045
- * });
3046
- *
3047
- * Create your table
3048
- * @example
3049
- * <aup-table [tableModel]="heroTableModel"></aup-table>
3050
- *
3051
- * Column templates
3052
- * @example
3053
- * this.heroTableModel = TableModel.fromList(heroList, table => {
3054
- * table.pluck("firstName");
3055
- * table.pluck("lastName");
3056
- * table.addTemplateColumn("specialColumn");
3057
- * });
3058
- * <aup-table [tableModel]="heroTableModel">
3059
- * <div *aupColumnTemplate="let hero; columnId: 'specialColumn'; fillCell: true; padChild:false">
3060
- * {{hero.name}}
3061
- * </div>
3062
- * </aup-table>
3063
- *
3064
- * Styling
3065
- * @example
3066
- * // global settings
3067
- * :root {
3068
- * --aup-table-column-gap: 10px; // defaults to 24px
3069
- * --aup-table-row-hover-background-color, rgba(0, 0, 0, 0.05)
3070
- * --aup-table-row-selected-background-color: rebeccapurple; // defaults to transparent
3071
- * --aup-table-first-column-padding-left: 18px // defaults to --column-gap
3072
- * --aup-table-last-column-padding-right: 18px // defaults to --column-gap
3073
- * }
3074
- *
3075
- * // per table settings.
3076
- * aup-table {
3077
- * --column-gap: 10px; // defaults to 24px
3078
- * --row-hover-background-color, rgba(0, 0, 0, 0.05)
3079
- * --row-selected-background-color: rebeccapurple; // defaults to transparent
3080
- * --first-column-padding-left: 18px // defaults to --column-gap
3081
- * --last-column-padding-right: 18px // defaults to --column-gap
3082
- *
3083
- * aup-table-header-cell-renderer,
3084
- * aup-table-cell-renderer {
3085
- * &.aup-col-my-dasherised-column-id {
3086
- * // do stuff
3087
- * }
3088
- * &.first-visible-column {
3089
- * // do stuff
3090
- * }
3091
- * &.last-visible-column {
3092
- * // do stuff
3093
- * }
3094
- * }
3095
- * }
3096
- */
3097
- class AbstractTableComponent extends ResizeAwareComponent {
3098
- constructor(elementRef, ngZone) {
3099
- super(elementRef, ngZone);
3100
- /**
3101
- * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
3102
- * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
3103
- * containment area.
3104
- */
3105
- this.enableScrolling = false;
3106
- // TODO: support user defined header and row heights via css vars.
3107
- this.headerHeight = new MutableValueModel(56);
3108
- this.rowHeight = new MutableValueModel(48);
3109
- this.baseCssClass = 'aup-table-component';
3110
- const { chain, when } = Dsl.disposeWith(this);
3111
- const actualHeaderHeight = chain(this.showHeaderModel).map(show => {
3112
- return show ? this.headerHeight.value : 0;
3113
- }, { dependsOn: this.headerHeight });
3114
- this.visibleRowCount = chain(this.boundsModel).map(bounds => {
3115
- // TODO: this doesn't take into account any css styling adjustments etc. Will investigate if it's an issue.
3116
- const rawRowCount = (bounds.height - actualHeaderHeight.value) / this.rowHeight.value;
3117
- return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
3118
- }, {
3119
- dependsOn: [actualHeaderHeight, this.rowHeight],
3120
- postponeWhile: chain(this.boundsModel).pluckNumeric('height').isLessThan(1)
3121
- });
3122
- }
3123
- get hideHeader() {
3124
- return !this.showHeader;
3125
- }
3126
- getModel() {
3127
- return lang$1.abstractMethod(this.constructor);
3128
- }
3129
- ngOnInit() {
3130
- const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
3131
- this.columns = chain(this.getModel().columns);
3132
- this.columnIds = chain(this.columns).pluck('columnId');
3133
- this.columnsById = chain(this.columns).indexBy('columnId');
3134
- }
3135
- isEditing(row) {
3136
- return !!this.getModel().getEditSessionFor(row);
3137
- }
3138
- registerColumnTemplate(columnId, templateRef, viewContainer, fillCell, padChild) {
3139
- const column = this.columnsById.get(columnId);
3140
- if (column instanceof CustomTemplateColumnModel) {
3141
- column.setTemplate(templateRef, viewContainer, fillCell, padChild);
3142
- }
3143
- }
3144
- notifyCellClicked(columnModel, row) {
3145
- this.getModel()._notifyCellClicked(columnModel, row);
3146
- }
3147
- // @Trace()
3148
- isFirstVisibleColumn(columnId) {
3149
- return this.getModel().firstVisibleColumn.query().value?.columnId === columnId;
3150
- }
3151
- // @Trace()
3152
- isLastVisibleColumn(columnId) {
3153
- return this.getModel().lastVisibleColumn.query().value?.columnId === columnId;
3154
- }
3155
- getColumnClasses(columnId) {
3156
- const classes = [`aup-col-${this.columnsById.get(columnId).dasherisedColumnId}`];
3157
- if (this.isFirstVisibleColumn(columnId)) {
3158
- classes.push('first-visible-column');
3159
- }
3160
- if (this.isLastVisibleColumn(columnId)) {
3161
- classes.push('last-visible-column');
3162
- }
3163
- return classes;
3164
- }
3165
- }
3166
- AbstractTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
3167
- 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 });
3168
- __decorate([
3169
- TrackExternal({ defaultValue: true }),
3170
- __metadata("design:type", ValueModel)
3171
- ], AbstractTableComponent.prototype, "showHeaderModel", void 0);
3172
- __decorate([
3173
- StoreInValueModel('showHeaderModel'),
3174
- __metadata("design:type", Boolean)
3175
- ], AbstractTableComponent.prototype, "showHeader", void 0);
3176
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, decorators: [{
3177
- type: Component,
3178
- args: [{
3179
- selector: 'aup-abstract-table',
3180
- template: ''
3181
- }]
3182
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { showHeaderModel: [{
3183
- type: Input
3184
- }], showHeader: [{
3185
- type: Input
3186
- }], enableScrolling: [{
3187
- type: Input
3188
- }, {
3189
- type: HostBinding,
3190
- args: ['class.enable-scrolling']
3191
- }], baseCssClass: [{
3192
- type: HostBinding,
3193
- args: ['class']
3194
- }], hideHeader: [{
3195
- type: HostBinding,
3196
- args: ['class.hide-header']
3197
- }] } });
3198
-
3199
- class ColumnTemplateDirective {
3200
- constructor(host, templateRef, viewContainer) {
3201
- this.host = host;
3202
- this.templateRef = templateRef;
3203
- this.viewContainer = viewContainer;
3204
- this.aupColumnTemplateFillCell = false;
3205
- this.aupColumnTemplateAutoPadChild = undefined;
3206
- }
3207
- ngOnInit() {
3208
- assert.isTruthy(this.aupColumnTemplateColumnId);
3209
- this.host.registerColumnTemplate(this.aupColumnTemplateColumnId, this.templateRef, this.viewContainer, this.aupColumnTemplateFillCell, this.aupColumnTemplateAutoPadChild ?? this.aupColumnTemplateFillCell);
3210
- }
3211
- }
3212
- ColumnTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ColumnTemplateDirective, deps: [{ token: AbstractTableComponent }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
3213
- ColumnTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: ColumnTemplateDirective, selector: "[aupColumnTemplate]", inputs: { aupColumnTemplate: "aupColumnTemplate", aupColumnTemplateColumnId: "aupColumnTemplateColumnId", aupColumnTemplateFillCell: "aupColumnTemplateFillCell", aupColumnTemplateAutoPadChild: "aupColumnTemplateAutoPadChild" }, ngImport: i0 });
3214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ColumnTemplateDirective, decorators: [{
3215
- type: Directive,
3216
- args: [{
3217
- selector: '[aupColumnTemplate]'
3218
- }]
3219
- }], ctorParameters: function () { return [{ type: AbstractTableComponent }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { aupColumnTemplate: [{
3220
- type: Input
3221
- }], aupColumnTemplateColumnId: [{
3222
- type: Input
3223
- }], aupColumnTemplateFillCell: [{
3224
- type: Input
3225
- }], aupColumnTemplateAutoPadChild: [{
3226
- type: Input
3227
- }] } });
3228
-
3229
- class ColumnListModel extends AbstractComputedListModel {
3230
- constructor() {
3231
- super();
3232
- this._allColumns = new MutableListModel();
3233
- const { chain } = Dsl.disposeWith(this);
3234
- this.columnsById = chain(this._allColumns).indexBy('columnId');
3235
- }
3236
- get allColumns() {
3237
- return this._allColumns.readonly;
3238
- }
3239
- getColumn(id) {
3240
- return this.columnsById.get(id);
3241
- }
3242
- hasColumn(id) {
3243
- return !!this.columnsById.get(id);
3244
- }
3245
- addColumn(column, index) {
3246
- if (this.hasColumn(column.columnId)) {
3247
- lang.illegalState(`Column with id=${column.columnId} already exists`);
3248
- }
3249
- this.registerDisposable(column);
3250
- this.runInTransaction(() => {
3251
- if (!isNil(index)) {
3252
- this._allColumns.insert(index, column);
3253
- }
3254
- else {
3255
- this._allColumns.push(column);
3256
- }
3257
- this.registerDisposable(this.trackSource(column.visible));
3258
- });
3259
- return column;
3260
- }
3261
- doComputeValue() {
3262
- return this._allColumns.value.filter(c => c.visible.value);
3263
- }
3264
- }
3265
-
3397
+ var DefaultValueFormatter = ColumnTextSearchFormatter.DefaultValueFormatter;
3398
+ var DefaultArrayFormatter = ColumnTextSearchFormatter.DefaultArrayFormatter;
3266
3399
  // export type StringPropertiesOf<T> = { [K in keyof T]: T[K] extends string ? K : never }[keyof T];
3267
3400
  // export type NumberPropertiesOf<T> = { [K in keyof T]: T[K] extends number ? K : never }[keyof T];
3268
3401
  class RowClass {
@@ -3279,39 +3412,69 @@ class AbstractTableModel extends GarbageCollector {
3279
3412
  this._editorSessions = new MutableListModel();
3280
3413
  this.rowClassNamePredicates = [];
3281
3414
  this.rowClickListeners = new EventListenerList();
3415
+ this._searchText$ = new DelegatingValueModel();
3282
3416
  this._createForm = (row) => new DirtyTrackingForm();
3283
3417
  this.trackBy = (index, item) => {
3284
3418
  return this.identityOf ? this.identityOf(item) : index;
3285
3419
  };
3286
3420
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
3287
- this._rowsBeingEdited = new MutableListModel([], {
3421
+ this._rowsBeingEdited$ = new MutableListModel([], {
3288
3422
  identifiedWith: row => this.identityOf(row)
3289
3423
  });
3290
- this._editorSessionByRowId = chain(this._editorSessions).indexBy('rowId');
3291
- this.editing = chain(this._editorSessions).count().isGreaterThan(0);
3292
- this.dataSource = chain(this._dataSource).replaceAll(this.rowsBeingEdited);
3293
- this.firstEditableColumn = chain(this.columns).select(c => c.hasEditorPortal()).first();
3294
- this.firstVisibleColumn = chain(this._columnList).first();
3295
- this.lastVisibleColumn = chain(this._columnList).last();
3296
- this.rowSelectionDisabledOnAllColumns = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
3424
+ this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
3425
+ this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
3426
+ this._textSearchPredicate$ = chain(this._searchText$).map(text => {
3427
+ return _.isEmpty(text) ? Functions.identity : (rows) => {
3428
+ const regex = new RegExp(escapeStringRegexp(text), "i");
3429
+ return rows.filter(row => this.hasMatchingColumn(row, regex));
3430
+ };
3431
+ }, {
3432
+ allowNil: true,
3433
+ dependsOn: this.columns
3434
+ });
3435
+ this.dataSource = chain(this._dataSource)
3436
+ .reduceToList(items => this._textSearchPredicate$.value(items), {
3437
+ dependsOn: this._textSearchPredicate$
3438
+ })
3439
+ .replaceAll(this.rowsBeingEdited$);
3440
+ this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
3441
+ this.firstVisibleColumn$ = chain(this._columnList).first();
3442
+ this.lastVisibleColumn$ = chain(this._columnList).last();
3443
+ this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
3297
3444
  }
3298
3445
  findMatchingColumns(row, regex) {
3299
- return this.columns.value.filter(c => c.isTextMatch(row, regex));
3446
+ return this.columns.value.filter(c => regex.test(c.getSearchTextFor(row)));
3300
3447
  }
3448
+ // @Trace()
3301
3449
  hasMatchingColumn(row, regex) {
3302
- return !!this.columns.value.find(c => c.isTextMatch(row, regex));
3450
+ return !!this.columns.value.find(c => regex.test(c.getSearchTextFor(row)));
3451
+ }
3452
+ initialise(injector) {
3453
+ // not sure if I should define these at the module level or not...
3454
+ const customInjector = Injector.create({
3455
+ providers: [
3456
+ { provide: DefaultValueFormatter },
3457
+ { provide: DefaultArrayFormatter }
3458
+ ],
3459
+ parent: injector
3460
+ });
3461
+ this.columns.value.forEach(c => c.initialise(customInjector));
3303
3462
  }
3304
3463
  setDataSource(sourceOfTruth) {
3305
3464
  this._dataSource.setDelegate(sourceOfTruth);
3306
3465
  }
3466
+ setTextSearch(searchText$, throttleDelayMilliseconds = 100) {
3467
+ const { chain } = Dsl.disposeWith(this);
3468
+ this._searchText$.setDelegate(chain(searchText$).throttle(throttleDelayMilliseconds));
3469
+ }
3307
3470
  identityOf(row) {
3308
3471
  return this._dataSource.identityOf(row);
3309
3472
  }
3310
- get rowsBeingEdited() {
3311
- return this._rowsBeingEdited.readonly;
3473
+ get rowsBeingEdited$() {
3474
+ return this._rowsBeingEdited$.readonly;
3312
3475
  }
3313
3476
  get columns() {
3314
- return this._columnList.allColumns;
3477
+ return this._columnList.allColumns$;
3315
3478
  }
3316
3479
  get visibleColumns() {
3317
3480
  return this._columnList.readonly;
@@ -3326,9 +3489,9 @@ class AbstractTableModel extends GarbageCollector {
3326
3489
  }
3327
3490
  _addSelectionColumn(selectionModel, visible) {
3328
3491
  assert.isNil(this.selectionColumnModel);
3329
- const columnId = 'selection-column';
3492
+ const columnId = "selection-column";
3330
3493
  this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), selectionModel);
3331
- this.addRowClass('aup-row-selected', row => this.selectionColumnModel.isSelected(row));
3494
+ this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
3332
3495
  const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
3333
3496
  if (!isNil(visible)) {
3334
3497
  selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
@@ -3340,7 +3503,7 @@ class AbstractTableModel extends GarbageCollector {
3340
3503
  if (isFunction(formFactory)) {
3341
3504
  this._createForm = formFactory;
3342
3505
  }
3343
- const columnId = 'editControls';
3506
+ const columnId = "editControls";
3344
3507
  return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
3345
3508
  }
3346
3509
  addCustomColumn(columnId, dataAccessor) {
@@ -3382,7 +3545,7 @@ class AbstractTableModel extends GarbageCollector {
3382
3545
  }
3383
3546
  startEditSession(row) {
3384
3547
  const rowId = this.identityOf(row);
3385
- if (this._rowsBeingEdited.query().indexOf(row) > -1) {
3548
+ if (this._rowsBeingEdited$.query().indexOf(row) > -1) {
3386
3549
  return lang.illegalState(`Row with id=${rowId} already being edited`);
3387
3550
  }
3388
3551
  // todo: pass the factories to the edit session so we can make the whole lot pluggable?
@@ -3390,12 +3553,12 @@ class AbstractTableModel extends GarbageCollector {
3390
3553
  const saveCommand = this.saveCommandFactory.create(form);
3391
3554
  const editSession = new EditSession(rowId, row, form, saveCommand);
3392
3555
  const { when } = Dsl.disposeWith(editSession);
3393
- when(editSession.liveRowValue).changes((editedValue) => {
3394
- this._rowsBeingEdited.replaceOrPush(editedValue);
3395
- }, { initialValue: 'triggerChangeUnlessNil' });
3556
+ when(editSession.liveRowValue$).changes((editedValue) => {
3557
+ this._rowsBeingEdited$.replaceOrPush(editedValue);
3558
+ }, { initialValue: "triggerChangeUnlessNil" });
3396
3559
  this._editorSessions.push(editSession);
3397
3560
  editSession.onDispose(() => {
3398
- this._rowsBeingEdited.remove(editSession.liveRowValue.value);
3561
+ this._rowsBeingEdited$.remove(editSession.liveRowValue$.value);
3399
3562
  this._editorSessions.remove(editSession);
3400
3563
  });
3401
3564
  return editSession;
@@ -3405,7 +3568,7 @@ class AbstractTableModel extends GarbageCollector {
3405
3568
  }
3406
3569
  cancelAllEditorSessions() {
3407
3570
  this._editorSessions.runInTransaction((draft) => {
3408
- this._rowsBeingEdited.runInTransaction(() => {
3571
+ this._rowsBeingEdited$.runInTransaction(() => {
3409
3572
  draft.value.forEach(session => session.dispose());
3410
3573
  });
3411
3574
  });
@@ -3414,7 +3577,7 @@ class AbstractTableModel extends GarbageCollector {
3414
3577
  return this.isRowSelectionEnabled() && column.isRowSelectionEnabled();
3415
3578
  }
3416
3579
  isRowSelectionEnabled() {
3417
- return this.hasUserSelectionModel() && !this.rowSelectionDisabledOnAllColumns.value;
3580
+ return this.hasUserSelectionModel() && !this.rowSelectionDisabledOnAllColumns$.value;
3418
3581
  }
3419
3582
  hasUserSelectionModel() {
3420
3583
  return !!this.selectionColumnModel?.selectionModel.getDelegate();
@@ -3443,7 +3606,7 @@ class AbstractTableModel extends GarbageCollector {
3443
3606
  }
3444
3607
  TrackExternal.oneTimeBinding(AbstractTableModel);
3445
3608
 
3446
- class TableCellRendererComponent extends DisposableComponent {
3609
+ class TableCellComponent extends DisposableComponent {
3447
3610
  constructor() {
3448
3611
  super();
3449
3612
  this.defaultClassNames = 'aup-cell-renderer';
@@ -3455,7 +3618,7 @@ class TableCellRendererComponent extends DisposableComponent {
3455
3618
  }
3456
3619
  ngOnInit() {
3457
3620
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
3458
- this.firstEditableColumn = chain(this.tableModel.firstEditableColumn).equals(this.column); // this would break if the column changed.
3621
+ this.firstEditableColumn = chain(this.tableModel.firstEditableColumn$).equals(this.column); // this would break if the column changed.
3459
3622
  this.column.attachCell(this);
3460
3623
  }
3461
3624
  hasActiveEditor() {
@@ -3502,11 +3665,11 @@ class TableCellRendererComponent extends DisposableComponent {
3502
3665
  };
3503
3666
  }
3504
3667
  }
3505
- TableCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3506
- TableCellRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TableCellRendererComponent, selector: "aup-table-cell-renderer", inputs: { row: "row", column: "column", editSession: "editSession", tableModel: "tableModel" }, host: { properties: { "class": "this.defaultClassNames", "class.fillCell": "this.fillCell", "class.padChild": "this.padChild" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!hasActiveEditor()\" [cdkPortalOutlet]=\"getRendererPortal()\" (attached)=\"initialiseRenderer($event)\"></ng-container>\n<ng-container *ngIf=\"hasActiveEditor()\" [cdkPortalOutlet]=\"getEditorPortal()\" (attached)=\"initialiseEditor($event)\"></ng-container>\n", styles: [""], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
3507
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableCellRendererComponent, decorators: [{
3668
+ TableCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3669
+ TableCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TableCellComponent, selector: "aup-table-cell", inputs: { row: "row", column: "column", editSession: "editSession", tableModel: "tableModel" }, host: { properties: { "class": "this.defaultClassNames", "class.fillCell": "this.fillCell", "class.padChild": "this.padChild" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!hasActiveEditor()\" [cdkPortalOutlet]=\"getRendererPortal()\" (attached)=\"initialiseRenderer($event)\"></ng-container>\n<ng-container *ngIf=\"hasActiveEditor()\" [cdkPortalOutlet]=\"getEditorPortal()\" (attached)=\"initialiseEditor($event)\"></ng-container>\n", styles: [""], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
3670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableCellComponent, decorators: [{
3508
3671
  type: Component,
3509
- args: [{ selector: 'aup-table-cell-renderer', template: "<ng-container *ngIf=\"!hasActiveEditor()\" [cdkPortalOutlet]=\"getRendererPortal()\" (attached)=\"initialiseRenderer($event)\"></ng-container>\n<ng-container *ngIf=\"hasActiveEditor()\" [cdkPortalOutlet]=\"getEditorPortal()\" (attached)=\"initialiseEditor($event)\"></ng-container>\n", styles: [""] }]
3672
+ args: [{ selector: 'aup-table-cell', template: "<ng-container *ngIf=\"!hasActiveEditor()\" [cdkPortalOutlet]=\"getRendererPortal()\" (attached)=\"initialiseRenderer($event)\"></ng-container>\n<ng-container *ngIf=\"hasActiveEditor()\" [cdkPortalOutlet]=\"getEditorPortal()\" (attached)=\"initialiseEditor($event)\"></ng-container>\n", styles: [""] }]
3510
3673
  }], ctorParameters: function () { return []; }, propDecorators: { row: [{
3511
3674
  type: Input
3512
3675
  }], column: [{
@@ -3526,7 +3689,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3526
3689
  args: ['class.padChild']
3527
3690
  }] } });
3528
3691
 
3529
- class TableHeaderCellRendererComponent {
3692
+ class TableHeaderCellComponent {
3530
3693
  constructor() {
3531
3694
  this.defaultClassNames = 'aup-header-cell-renderer';
3532
3695
  }
@@ -3541,11 +3704,11 @@ class TableHeaderCellRendererComponent {
3541
3704
  return this[HEADER_CELL_RENDERER_PORTAL];
3542
3705
  }
3543
3706
  }
3544
- TableHeaderCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableHeaderCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3545
- TableHeaderCellRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TableHeaderCellRendererComponent, selector: "aup-table-header-cell-renderer", inputs: { column: "column" }, host: { properties: { "class": "this.defaultClassNames" } }, ngImport: i0, template: "<ng-container [cdkPortalOutlet]=\"getPortal()\" (attached)=\"initialiseHeader($event)\"></ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%}\n"], directives: [{ type: i2$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
3546
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableHeaderCellRendererComponent, decorators: [{
3707
+ TableHeaderCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3708
+ TableHeaderCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: { column: "column" }, host: { properties: { "class": "this.defaultClassNames" } }, ngImport: i0, template: "<ng-container [cdkPortalOutlet]=\"getPortal()\" (attached)=\"initialiseHeader($event)\"></ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%}\n"], directives: [{ type: i2$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
3709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableHeaderCellComponent, decorators: [{
3547
3710
  type: Component,
3548
- args: [{ selector: 'aup-table-header-cell-renderer', template: "<ng-container [cdkPortalOutlet]=\"getPortal()\" (attached)=\"initialiseHeader($event)\"></ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%}\n"] }]
3711
+ args: [{ selector: 'aup-table-header-cell', template: "<ng-container [cdkPortalOutlet]=\"getPortal()\" (attached)=\"initialiseHeader($event)\"></ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%}\n"] }]
3549
3712
  }], ctorParameters: function () { return []; }, propDecorators: { column: [{
3550
3713
  type: Input
3551
3714
  }], defaultClassNames: [{
@@ -3631,7 +3794,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3631
3794
  /**
3632
3795
  * Create your model:
3633
3796
  * @example
3634
- * this.heroTableModel = TableModel.fromList(heroList, table => {
3797
+ * this.heroTableModel = new TableModel(heroList, table => {
3635
3798
  * table.pluck("firstName");
3636
3799
  * table.pluck("lastName");
3637
3800
  * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
@@ -3643,7 +3806,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3643
3806
  *
3644
3807
  * Column templates
3645
3808
  * @example
3646
- * this.heroTableModel = TableModel.fromList(heroList, table => {
3809
+ * this.heroTableModel = new TableModel(heroList, table => {
3647
3810
  * table.pluck("firstName");
3648
3811
  * table.pluck("lastName");
3649
3812
  * table.addTemplateColumn("specialColumn");
@@ -3689,17 +3852,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3689
3852
  * }
3690
3853
  */
3691
3854
  class TableComponent extends AbstractTableComponent {
3692
- constructor(elementRef, ngZone) {
3693
- super(elementRef, ngZone);
3855
+ constructor(elementRef, ngZone, injector) {
3856
+ super(elementRef, ngZone, injector);
3694
3857
  }
3695
3858
  getModel() {
3696
3859
  return this.tableModel;
3697
3860
  }
3698
3861
  }
3699
- TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
3862
+ 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 });
3700
3863
  TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TableComponent, selector: "aup-table", inputs: { tableModel: "tableModel" }, providers: [
3701
3864
  { provide: AbstractTableComponent, useExisting: TableComponent }
3702
- ], 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-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell-renderer>\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-renderer [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-renderer>\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: TableHeaderCellRendererComponent, selector: "aup-table-header-cell-renderer", inputs: ["column"] }, { type: TableCellRendererComponent, selector: "aup-table-cell-renderer", 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"] }] });
3865
+ ], 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"] }] });
3703
3866
  __decorate([
3704
3867
  TrackExternal(),
3705
3868
  __metadata("design:type", AbstractTableModel)
@@ -3708,8 +3871,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3708
3871
  type: Component,
3709
3872
  args: [{ selector: 'aup-table', providers: [
3710
3873
  { provide: AbstractTableComponent, useExisting: TableComponent }
3711
- ], 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-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell-renderer>\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-renderer [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-renderer>\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"] }]
3712
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { tableModel: [{
3874
+ ], 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"] }]
3875
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { tableModel: [{
3713
3876
  type: Input
3714
3877
  }] } });
3715
3878
 
@@ -4288,17 +4451,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4288
4451
  * }
4289
4452
  */
4290
4453
  class TreeTableComponent extends AbstractTableComponent {
4291
- constructor(elementRef, ngZone) {
4292
- super(elementRef, ngZone);
4454
+ constructor(elementRef, ngZone, injector) {
4455
+ super(elementRef, ngZone, injector);
4293
4456
  }
4294
4457
  getModel() {
4295
4458
  return this.treeTableModel;
4296
4459
  }
4297
4460
  }
4298
- TreeTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TreeTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
4461
+ 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 });
4299
4462
  TreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TreeTableComponent, selector: "aup-tree-table", inputs: { treeTableModel: "treeTableModel" }, providers: [
4300
4463
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
4301
- ], 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-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell-renderer>\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-renderer [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-renderer>\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: TableHeaderCellRendererComponent, selector: "aup-table-header-cell-renderer", inputs: ["column"] }, { type: TableCellRendererComponent, selector: "aup-table-cell-renderer", 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"] }] });
4464
+ ], 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"] }] });
4302
4465
  __decorate([
4303
4466
  TrackExternal(),
4304
4467
  __metadata("design:type", TreeTableModel)
@@ -4307,8 +4470,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4307
4470
  type: Component,
4308
4471
  args: [{ selector: 'aup-tree-table', providers: [
4309
4472
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
4310
- ], 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-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell-renderer>\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-renderer [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-renderer>\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"] }]
4311
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { treeTableModel: [{
4473
+ ], 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"] }]
4474
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { treeTableModel: [{
4312
4475
  type: Input
4313
4476
  }] } });
4314
4477
 
@@ -4532,11 +4695,12 @@ ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
4532
4695
  EditRowControls,
4533
4696
  ColumnTemplateDirective,
4534
4697
  DefaultCellRendererComponent,
4535
- TableCellRendererComponent,
4536
- SelectCellRendererComponent,
4537
- SelectHeaderCellRendererComponent,
4698
+ DefaultListCellRendererComponent,
4699
+ TableCellComponent,
4700
+ SelectionCellComponent,
4701
+ SelectionHeaderCellComponent,
4538
4702
  DefaultHeaderCellRendererComponent,
4539
- TableHeaderCellRendererComponent,
4703
+ TableHeaderCellComponent,
4540
4704
  IconComponent,
4541
4705
  SectionHeaderComponent,
4542
4706
  TableRowMenuComponent,
@@ -4695,11 +4859,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4695
4859
  EditRowControls,
4696
4860
  ColumnTemplateDirective,
4697
4861
  DefaultCellRendererComponent,
4698
- TableCellRendererComponent,
4699
- SelectCellRendererComponent,
4700
- SelectHeaderCellRendererComponent,
4862
+ DefaultListCellRendererComponent,
4863
+ TableCellComponent,
4864
+ SelectionCellComponent,
4865
+ SelectionHeaderCellComponent,
4701
4866
  DefaultHeaderCellRendererComponent,
4702
- TableHeaderCellRendererComponent,
4867
+ TableHeaderCellComponent,
4703
4868
  IconComponent,
4704
4869
  SectionHeaderComponent,
4705
4870
  TableRowMenuComponent,
@@ -8045,14 +8210,6 @@ class TableModel extends AbstractTableModel {
8045
8210
  }
8046
8211
  this.setDataSource(sourceOfTruth);
8047
8212
  }
8048
- /**
8049
- * @deprecated use new TableModel(sourceOfTruth, table => {...}); instead.
8050
- * @param sourceOfTruth
8051
- * @param builder
8052
- */
8053
- static fromList(sourceOfTruth, builder) {
8054
- return new TableModel(sourceOfTruth, builder);
8055
- }
8056
8213
  addSelectionColumn(selectionModel, showSelectionColumn) {
8057
8214
  return this._addSelectionColumn(selectionModel, showSelectionColumn);
8058
8215
  }
@@ -9994,5 +10151,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
9994
10151
  * Generated bundle index. Do not edit.
9995
10152
  */
9996
10153
 
9997
- 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, 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, 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, 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, SelectCellRendererComponent, SelectHeaderCellRendererComponent, SelectInputActivity, SelectInputComponent, SelectionColumnModel, SeparatorComponent, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableCellRendererComponent, TableComponent, TableHeaderCellRendererComponent, 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 };
10154
+ 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 };
9998
10155
  //# sourceMappingURL=coolon-angular-ui-powerups.mjs.map