@coolon/angular-ui-powerups 13.1.7 → 13.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/assets/table.scss +2 -2
  2. package/esm2020/lib/components/commands/command/command.component.mjs +18 -5
  3. package/esm2020/lib/components/components.module.mjs +22 -19
  4. package/esm2020/lib/components/exports.mjs +28 -21
  5. package/esm2020/lib/components/tables/abstract-table-model.mjs +70 -29
  6. package/esm2020/lib/components/tables/abstract-table.component.mjs +12 -10
  7. package/esm2020/lib/components/tables/column/column-list-model.mjs +39 -0
  8. package/esm2020/lib/components/tables/column/column-model.mjs +180 -0
  9. package/esm2020/lib/components/tables/column/column-template/column-template.directive.mjs +35 -0
  10. package/esm2020/lib/components/tables/column/column-text-properties.mjs +2 -0
  11. package/esm2020/lib/components/tables/column/custom-template-column-model.mjs +16 -0
  12. package/esm2020/lib/components/tables/column/custom-value-column-model.mjs +37 -0
  13. package/esm2020/lib/components/tables/column/editor-controls-column-model.mjs +21 -0
  14. package/esm2020/lib/components/tables/column/list-propery-column-model.mjs +48 -0
  15. package/esm2020/lib/components/tables/column/property-column-model.mjs +92 -0
  16. package/esm2020/lib/components/tables/column/selection-column-model.mjs +40 -0
  17. package/esm2020/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +55 -0
  18. package/esm2020/lib/components/tables/editor/edit-session.mjs +23 -0
  19. package/esm2020/lib/components/tables/editor/editable-cell-renderer.mjs +2 -0
  20. package/esm2020/lib/components/tables/{table/paginator → paginator}/paginator.component.mjs +4 -4
  21. package/esm2020/lib/components/tables/renderer/cell-editors.mjs +2 -0
  22. package/esm2020/lib/components/tables/renderer/cell-portal-ref.mjs +93 -0
  23. package/esm2020/lib/components/tables/renderer/cell-renderer.mjs +2 -0
  24. package/esm2020/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +30 -0
  25. package/esm2020/lib/components/tables/{table → renderer}/default-header-cell-renderer/default-header-cell-renderer.component.mjs +1 -1
  26. package/esm2020/lib/components/tables/renderer/default-list-cell-renderer/default-list-cell-renderer.component.mjs +40 -0
  27. package/esm2020/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +31 -0
  28. package/esm2020/lib/components/tables/renderer/selection-cell/selection-cell.component.mjs +26 -0
  29. package/esm2020/lib/components/tables/renderer/table-cell/table-cell.component.mjs +93 -0
  30. package/esm2020/lib/components/tables/renderer/table-header-cell/table-header-cell.component.mjs +32 -0
  31. package/esm2020/lib/components/tables/search/column-text-search-formatter.mjs +52 -0
  32. package/esm2020/lib/components/tables/search/enable-cell-text-search.decorator.mjs +30 -0
  33. package/esm2020/lib/components/tables/table/table-model.mjs +2 -10
  34. package/esm2020/lib/components/tables/table/table.component.mjs +12 -12
  35. package/esm2020/lib/components/tables/table-row-menu/table-row-menu.component.mjs +84 -0
  36. package/esm2020/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +1 -1
  37. package/esm2020/lib/components/tables/tree-table/tree-label-column-model.mjs +3 -3
  38. package/esm2020/lib/components/tables/tree-table/tree-table-component.mjs +10 -10
  39. package/esm2020/lib/components/tables/tree-table/tree-table-model.mjs +1 -1
  40. package/esm2020/lib/interaction/activity-ref.mjs +2 -2
  41. package/esm2020/lib/interaction/activity.mjs +36 -27
  42. package/esm2020/lib/interaction/components/abstract-confirm-dialog.component.mjs +1 -1
  43. package/esm2020/lib/interaction/components/abstract-dialog.component.mjs +6 -1
  44. package/esm2020/lib/interaction/components/activity-actions/activity-actions.component.mjs +18 -5
  45. package/esm2020/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.mjs +5 -2
  46. package/esm2020/lib/interaction/components/input-activities/input-activity.mjs +2 -4
  47. package/fesm2015/coolon-angular-ui-powerups.mjs +660 -460
  48. package/fesm2015/coolon-angular-ui-powerups.mjs.map +1 -1
  49. package/fesm2020/coolon-angular-ui-powerups.mjs +801 -602
  50. package/fesm2020/coolon-angular-ui-powerups.mjs.map +1 -1
  51. package/lib/components/commands/command/command.component.d.ts +5 -2
  52. package/lib/components/components.module.d.ts +55 -54
  53. package/lib/components/exports.d.ts +27 -20
  54. package/lib/components/tables/abstract-table-model.d.ts +24 -13
  55. package/lib/components/tables/abstract-table.component.d.ts +6 -5
  56. package/lib/components/tables/{column-list-model.d.ts → column/column-list-model.d.ts} +4 -4
  57. package/lib/components/tables/column/column-model.d.ts +77 -0
  58. package/lib/components/tables/column/custom-template-column-model.d.ts +8 -0
  59. package/lib/components/tables/column/custom-value-column-model.d.ts +10 -0
  60. package/lib/components/tables/column/editor-controls-column-model.d.ts +13 -0
  61. package/lib/components/tables/column/list-propery-column-model.d.ts +15 -0
  62. package/lib/components/tables/column/property-column-model.d.ts +24 -0
  63. package/lib/components/tables/column/selection-column-model.d.ts +12 -0
  64. package/lib/components/tables/{table → editor}/edit-row-controls/edit-row-controls.component.d.ts +1 -1
  65. package/lib/components/tables/{edit-session.d.ts → editor/edit-session.d.ts} +2 -2
  66. package/lib/components/tables/{table/mutable-cell-renderer.d.ts → editor/editable-cell-renderer.d.ts} +2 -2
  67. package/lib/components/tables/{table/paginator → paginator}/paginator.component.d.ts +1 -1
  68. package/lib/components/tables/{table → renderer}/cell-portal-ref.d.ts +18 -18
  69. package/lib/components/tables/renderer/cell-renderer.d.ts +3 -0
  70. package/lib/components/tables/{table → renderer}/default-cell-renderer/default-cell-renderer.component.d.ts +1 -1
  71. package/lib/components/tables/renderer/default-list-cell-renderer/default-list-cell-renderer.component.d.ts +12 -0
  72. 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
  73. package/lib/components/tables/{table/select-cell-renderer/select-cell-renderer.component.d.ts → renderer/selection-cell/selection-cell.component.d.ts} +3 -3
  74. package/lib/components/tables/{table/table-cell-renderer/table-cell-renderer.component.d.ts → renderer/table-cell/table-cell.component.d.ts} +5 -5
  75. 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
  76. package/lib/components/tables/search/column-text-search-formatter.d.ts +28 -0
  77. package/lib/components/tables/search/enable-cell-text-search.decorator.d.ts +25 -0
  78. package/lib/components/tables/table/table-model.d.ts +3 -9
  79. package/lib/components/tables/table/table.component.d.ts +4 -4
  80. package/lib/components/tables/{table/table-row-menu → table-row-menu}/table-row-menu.component.d.ts +3 -3
  81. package/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +1 -1
  82. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +1 -1
  83. package/lib/components/tables/tree-table/tree-table-component.d.ts +2 -2
  84. package/lib/components/tables/tree-table/tree-table-model.d.ts +1 -1
  85. package/lib/interaction/activity.d.ts +15 -10
  86. package/lib/interaction/components/activity-actions/activity-actions.component.d.ts +6 -1
  87. package/lib/interaction/components/input-activities/input-activity.d.ts +0 -1
  88. package/package.json +2 -1
  89. package/esm2020/lib/components/tables/column-list-model.mjs +0 -39
  90. package/esm2020/lib/components/tables/edit-session.mjs +0 -23
  91. package/esm2020/lib/components/tables/table/cell-editors.mjs +0 -2
  92. package/esm2020/lib/components/tables/table/cell-portal-ref.mjs +0 -93
  93. package/esm2020/lib/components/tables/table/cell-renderer.mjs +0 -2
  94. package/esm2020/lib/components/tables/table/column-model.mjs +0 -392
  95. package/esm2020/lib/components/tables/table/column-template/column-template.directive.mjs +0 -35
  96. package/esm2020/lib/components/tables/table/column-text-properties.mjs +0 -2
  97. package/esm2020/lib/components/tables/table/default-cell-renderer/default-cell-renderer.component.mjs +0 -22
  98. package/esm2020/lib/components/tables/table/edit-row-controls/edit-row-controls.component.mjs +0 -55
  99. package/esm2020/lib/components/tables/table/mutable-cell-renderer.mjs +0 -2
  100. package/esm2020/lib/components/tables/table/select-cell-renderer/select-cell-renderer.component.mjs +0 -26
  101. package/esm2020/lib/components/tables/table/select-header-cell-renderer/select-header-cell-renderer.component.mjs +0 -31
  102. package/esm2020/lib/components/tables/table/table-cell-renderer/table-cell-renderer.component.mjs +0 -93
  103. package/esm2020/lib/components/tables/table/table-def.mjs +0 -2
  104. package/esm2020/lib/components/tables/table/table-header-cell-renderer/table-header-cell-renderer.component.mjs +0 -32
  105. package/esm2020/lib/components/tables/table/table-row-menu/table-row-menu.component.mjs +0 -84
  106. package/esm2020/lib/components/tables/table/text-search-predicate.mjs +0 -2
  107. package/lib/components/tables/table/cell-renderer.d.ts +0 -5
  108. package/lib/components/tables/table/column-model.d.ts +0 -145
  109. package/lib/components/tables/table/table-def.d.ts +0 -7
  110. package/lib/components/tables/table/text-search-predicate.d.ts +0 -1
  111. /package/lib/components/tables/{table → column}/column-template/column-template.directive.d.ts +0 -0
  112. /package/lib/components/tables/{table → column}/column-text-properties.d.ts +0 -0
  113. /package/lib/components/tables/{table → renderer}/cell-editors.d.ts +0 -0
  114. /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, ViewChild, ViewChildren, EventEmitter, 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';
@@ -20,7 +20,7 @@ import { CdkScrollableModule } from '@angular/cdk/scrolling';
20
20
  import * as i2$1 from '@angular/material/autocomplete';
21
21
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
22
22
  import * as i1 from '@angular/material/button';
23
- import { MatButtonModule } from '@angular/material/button';
23
+ import { MatButton, MatButtonModule } from '@angular/material/button';
24
24
  import * as i1$9 from '@angular/material/checkbox';
25
25
  import { MatCheckboxModule } from '@angular/material/checkbox';
26
26
  import * as i2 from '@angular/material/divider';
@@ -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, Trace, Disposable, DelegatingListModel, MutableValueModel, FocusManager, EventListenerList, Form, Guard, Binding, DebugContext, ListModel, Functions, MultipleSelectionModel, AbstractComputedListModel, DelegatingSelectionModel, DirtyTrackingForm, ComputedListModel, PageController, 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';
@@ -1073,9 +1075,12 @@ class CommandComponent extends PopupAwareComponent {
1073
1075
  getFace() {
1074
1076
  return this.face;
1075
1077
  }
1078
+ tryAndFocus() {
1079
+ this.button.focus();
1080
+ }
1076
1081
  }
1077
1082
  CommandComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CommandComponent, deps: [{ token: i0.ElementRef }, { token: POPUP_CONTAINER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1078
- CommandComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CommandComponent, selector: "aup-command", inputs: { command: "command", faceModel: "faceModel", face: "face", busyFaceModel: "busyFaceModel", busyFace: "busyFace", alignFace: "alignFace" }, host: { properties: { "class": "this.alignFace" } }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"iconOnly$.value\">\n <button mat-icon-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n</ng-container>\n<ng-container *ngIf=\"!iconOnly$.value\">\n <ng-container [ngSwitch]=\"buttonStyle$.value\">\n <ng-container *ngSwitchCase=\"CommandFace.Style.STROKED\">\n <button mat-stroked-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"CommandFace.Style.RAISED\">\n <button mat-raised-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <button mat-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:inline-flex;flex-direction:row;justify-content:stretch}:host.centered button{text-align:center}:host.start button{text-align:start}:host.end button{text-align:end}button{flex:1}\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: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
1083
+ CommandComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CommandComponent, selector: "aup-command", inputs: { command: "command", faceModel: "faceModel", face: "face", busyFaceModel: "busyFaceModel", busyFace: "busyFace", alignFace: "alignFace" }, host: { properties: { "class": "this.alignFace" } }, viewQueries: [{ propertyName: "button", first: true, predicate: MatButton, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"iconOnly$.value\">\n <button mat-icon-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n</ng-container>\n<ng-container *ngIf=\"!iconOnly$.value\">\n <ng-container [ngSwitch]=\"buttonStyle$.value\">\n <ng-container *ngSwitchCase=\"CommandFace.Style.STROKED\">\n <button mat-stroked-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"CommandFace.Style.RAISED\">\n <button mat-raised-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <button mat-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:inline-flex;flex-direction:row;justify-content:stretch}:host.centered button{text-align:center}:host.start button{text-align:start}:host.end button{text-align:end}button{flex:1}\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: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
1079
1084
  __decorate([
1080
1085
  TrackExternal(),
1081
1086
  __metadata("design:type", Command)
@@ -1096,6 +1101,12 @@ __decorate([
1096
1101
  StoreInValueModel('busyFaceModel'),
1097
1102
  __metadata("design:type", Object)
1098
1103
  ], CommandComponent.prototype, "busyFace", void 0);
1104
+ __decorate([
1105
+ Trace(),
1106
+ __metadata("design:type", Function),
1107
+ __metadata("design:paramtypes", []),
1108
+ __metadata("design:returntype", void 0)
1109
+ ], CommandComponent.prototype, "tryAndFocus", null);
1099
1110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CommandComponent, decorators: [{
1100
1111
  type: Component,
1101
1112
  args: [{ selector: 'aup-command', template: "<ng-container *ngIf=\"iconOnly$.value\">\n <button mat-icon-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n</ng-container>\n<ng-container *ngIf=\"!iconOnly$.value\">\n <ng-container [ngSwitch]=\"buttonStyle$.value\">\n <ng-container *ngSwitchCase=\"CommandFace.Style.STROKED\">\n <button mat-stroked-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"CommandFace.Style.RAISED\">\n <button mat-raised-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <button mat-button [pectinCommand]=\"command\" [color]=\"color$.value\" [class.busy]=\"command.busy.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </button>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [":host{display:inline-flex;flex-direction:row;justify-content:stretch}:host.centered button{text-align:center}:host.start button{text-align:start}:host.end button{text-align:end}button{flex:1}\n"] }]
@@ -1119,7 +1130,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
1119
1130
  }, {
1120
1131
  type: HostBinding,
1121
1132
  args: ["class"]
1122
- }] } });
1133
+ }], button: [{
1134
+ type: ViewChild,
1135
+ args: [MatButton]
1136
+ }], tryAndFocus: [] } });
1123
1137
 
1124
1138
  /**
1125
1139
  *
@@ -2510,25 +2524,6 @@ class TemplateCellRendererPortalRef extends CellRendererPortalRef {
2510
2524
  }
2511
2525
  }
2512
2526
 
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
2527
  class DefaultHeaderCellRendererComponent {
2533
2528
  constructor() {
2534
2529
  }
@@ -2542,120 +2537,81 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
2542
2537
  type: Input
2543
2538
  }] } });
2544
2539
 
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
- }
2540
+ class ColumnTextSearchFormatter {
2564
2541
  }
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);
2542
+ (function (ColumnTextSearchFormatter) {
2543
+ class Delegate extends ColumnTextSearchFormatter {
2578
2544
  }
2579
- set editSession(session) {
2580
- if (session) {
2581
- session.form.disableWhile(this.saveCommand.busy);
2545
+ ColumnTextSearchFormatter.Delegate = Delegate;
2546
+ class Delegating extends ColumnTextSearchFormatter.Delegate {
2547
+ constructor(delegateClass) {
2548
+ super();
2549
+ this.delegateClass = delegateClass;
2550
+ }
2551
+ initialise(injector) {
2552
+ this._delegate = injector.get(this.delegateClass);
2553
+ if (this._delegate instanceof Delegating) {
2554
+ this._delegate.initialise(injector);
2555
+ }
2556
+ }
2557
+ format(row) {
2558
+ return this._delegate ? this._delegate.format(row) : "";
2582
2559
  }
2583
- this._session = session;
2584
- }
2585
- get editSession() {
2586
- return this._session;
2587
2560
  }
2588
- ngOnInit() {
2561
+ ColumnTextSearchFormatter.Delegating = Delegating;
2562
+ function forFormatter(formatter) {
2563
+ return new class extends ColumnTextSearchFormatter {
2564
+ format(value) {
2565
+ return formatter(value);
2566
+ }
2567
+ };
2589
2568
  }
2590
- get form() {
2591
- return this.editSession?.form;
2569
+ ColumnTextSearchFormatter.forFormatter = forFormatter;
2570
+ class Null extends ColumnTextSearchFormatter {
2571
+ format(value) {
2572
+ return "";
2573
+ }
2592
2574
  }
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
- });
2575
+ ColumnTextSearchFormatter.Null = Null;
2576
+ class DefaultValueFormatter extends ColumnTextSearchFormatter {
2577
+ format(value) {
2578
+ let s = value?.toString() ?? "";
2579
+ console.log("DefaultValueFormatter", { value, text: s });
2580
+ return s;
2581
+ }
2617
2582
  }
2618
- isSelected() {
2619
- return this.selectionModel?.isSelected(this.row);
2583
+ ColumnTextSearchFormatter.DefaultValueFormatter = DefaultValueFormatter;
2584
+ class DefaultArrayFormatter extends ColumnTextSearchFormatter {
2585
+ format(value) {
2586
+ return value ? value.map(it => it?.toString()).join(",") : "";
2587
+ }
2620
2588
  }
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
- }] } });
2589
+ ColumnTextSearchFormatter.DefaultArrayFormatter = DefaultArrayFormatter;
2590
+ })(ColumnTextSearchFormatter || (ColumnTextSearchFormatter = {}));
2630
2591
 
2631
- class SelectHeaderCellRendererComponent extends DisposableComponent {
2592
+ const noop = () => {
2593
+ };
2594
+ class ColumnTextSearchWrapper extends ColumnTextSearchFormatter.Delegate {
2632
2595
  constructor() {
2633
- super();
2634
- this.selectCommand = Command.create(() => {
2635
- this.selectionModel.toggleAllCommand.execute();
2636
- });
2596
+ super(...arguments);
2597
+ this._map = Functions.identity;
2637
2598
  }
2638
- isSelected() {
2639
- return this.selectionModel?.allSelected.value || false;
2599
+ initialise(injector) {
2600
+ if (this._delegate instanceof ColumnTextSearchFormatter.Delegate) {
2601
+ this._delegate.initialise(injector);
2602
+ }
2640
2603
  }
2641
- isIntermediate() {
2642
- return this.selectionModel?.someSelected.value || false;
2604
+ format(row) {
2605
+ let value = this._map(row);
2606
+ let result = this._delegate ? this._delegate.format(value) : "";
2607
+ console.log({ format: row, value, text: result });
2608
+ return result;
2643
2609
  }
2644
- isVisible() {
2645
- return this.enableHeaderControls && this.selectionModel.getDelegate() instanceof MultipleSelectionModel;
2610
+ setDelegate(formatter, mapper) {
2611
+ this._delegate = formatter;
2612
+ this._map = mapper ?? Functions.identity;
2646
2613
  }
2647
2614
  }
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
2615
  class ColumnModel extends GarbageCollector {
2660
2616
  constructor(columnId, textPropertiesProvider) {
2661
2617
  super();
@@ -2663,10 +2619,9 @@ class ColumnModel extends GarbageCollector {
2663
2619
  this.textPropertiesProvider = textPropertiesProvider;
2664
2620
  this._enableRowSelection = true;
2665
2621
  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;
2622
+ this._defaultVisibility$ = this.registerDisposable(new DelegatingValueModel().withDefault(true));
2623
+ this._visible$ = this.registerDisposable(new DelegatingValueModel().withDefault(this._defaultVisibility$));
2624
+ this.textSearchDelegate = new ColumnTextSearchWrapper();
2670
2625
  this.installHeaderRenderer();
2671
2626
  this.dasherisedColumnId = Stringy.from(columnId).dasherize().toString();
2672
2627
  }
@@ -2679,32 +2634,21 @@ class ColumnModel extends GarbageCollector {
2679
2634
  return this.getColumnTextProperties()?.headerText() || this.getDefaultHeaderText();
2680
2635
  }
2681
2636
  isVisible() {
2682
- return this.visible.value;
2637
+ return this.visible$.value;
2683
2638
  }
2684
- get visible() {
2685
- return this._visible.readonly;
2639
+ get visible$() {
2640
+ return this._visible$.readonly;
2686
2641
  }
2687
2642
  visibleWhile(visible) {
2688
- this._visible.setDelegate(visible);
2643
+ this._visible$.setDelegate(visible);
2689
2644
  return this;
2690
2645
  }
2691
2646
  setDefaultVisibility(visible) {
2692
- this._defaultVisibility.setDelegate(visible);
2647
+ this._defaultVisibility$.setDelegate(visible);
2693
2648
  }
2694
2649
  getDefaultHeaderText() {
2695
2650
  return this.columnId;
2696
2651
  }
2697
- get isTextMatch() {
2698
- return this._columnModelTextSearchPredicate || this._cellRendererTextSearchPredicate || 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
2652
  getColumnTextProperties() {
2709
2653
  return this._columnTextProperties || this.textPropertiesProvider();
2710
2654
  }
@@ -2719,6 +2663,14 @@ class ColumnModel extends GarbageCollector {
2719
2663
  this._columnTextProperties = columnTextProperties;
2720
2664
  return this;
2721
2665
  }
2666
+ getSearchTextFor(row) {
2667
+ return this.textSearchDelegate.format(row);
2668
+ }
2669
+ configureColumnTextSearch(formatter, mapper) {
2670
+ assert$1.notNil(formatter);
2671
+ console.log({ col: this.columnId, formatter });
2672
+ this.textSearchDelegate.setDelegate(formatter, mapper);
2673
+ }
2722
2674
  configureHeaderRenderer(config) {
2723
2675
  this._columnHeaderPortalRef = config;
2724
2676
  }
@@ -2757,12 +2709,6 @@ class ColumnModel extends GarbageCollector {
2757
2709
  onRendererAttached(host, ref) {
2758
2710
  const component = this.getComponentOrEmbeddedView(ref);
2759
2711
  this._cellRendererPortalRef.onPortalAttached(host, component);
2760
- if (isFunction(component?.matches)) {
2761
- this._cellRendererTextSearchPredicate = (row, text) => component.matches(row, text);
2762
- }
2763
- else {
2764
- this._cellRendererTextSearchPredicate = undefined;
2765
- }
2766
2712
  }
2767
2713
  // @Trace()
2768
2714
  onEditorAttached(host, ref) {
@@ -2795,6 +2741,9 @@ class ColumnModel extends GarbageCollector {
2795
2741
  return ref;
2796
2742
  }
2797
2743
  }
2744
+ initialise(injector) {
2745
+ this.textSearchDelegate.initialise(injector);
2746
+ }
2798
2747
  }
2799
2748
  __decorate([
2800
2749
  Memoize(),
@@ -2808,136 +2757,445 @@ __decorate([
2808
2757
  __metadata("design:paramtypes", []),
2809
2758
  __metadata("design:returntype", Object)
2810
2759
  ], ColumnModel.prototype, "getColumnTextProperties", null);
2811
- class PropertyColumnModel extends ColumnModel {
2812
- constructor(id, property, defaults) {
2813
- super(id, defaults);
2814
- this.property = property;
2815
- this._format = (value) => value?.toString();
2816
- this.cellRenderer(DefaultCellRendererComponent);
2817
- this.useTextSearchPredicate((row, regex) => {
2818
- return regex.test(this._format(row[this.property]));
2819
- });
2820
- }
2821
- cellRenderer(componentType, onComponentInitOrOptions) {
2822
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
2823
- if (firstTime) {
2824
- if (isFunction(onComponentInitOrOptions)) {
2825
- onComponentInitOrOptions(component);
2826
- }
2827
- else {
2828
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
2829
- onComponentInitOrOptions.onComponentInit(component);
2830
- }
2831
- }
2832
- }
2833
- component.value = this._format(rowData.row[this.property]);
2834
- }));
2835
- return this;
2836
- }
2837
- liveEditCellRenderer(componentType, options) {
2838
- return this.mutableCellRenderer(componentType, options);
2839
- }
2840
- /**
2841
- * Deprecated. Use #liveEditCellRenderer instead.
2842
- * @param componentType
2843
- * @param options
2844
- */
2845
- mutableCellRenderer(componentType, options) {
2846
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
2847
- // keep a local copy most recent row value so it's available to teh
2848
- // edit callback without having to add/remove subscribers all the time.
2849
- component[CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
2850
- let disableEditCallback = false;
2851
- if (firstTime) {
2852
- if (isFunction(options?.onComponentInit)) {
2853
- options.onComponentInit(component);
2854
- }
2855
- // install our edit callback
2856
- component.onValueEdited((is, was) => {
2857
- if (!disableEditCallback) {
2858
- options.onValueEdit(component[CELL_RENDERER_COMPONENT_ROW_CACHE], is, was);
2859
- }
2860
- });
2861
- }
2862
- // now push the value the component and disable the callback just incase the component misbehaves
2863
- // and fires a value change during the operation.
2864
- disableEditCallback = true;
2865
- component.value = rowData.row[this.property];
2866
- disableEditCallback = false;
2867
- if (!isFunction(options) && isFunction(options?.onRowUpdate)) {
2868
- options.onRowUpdate(component, rowData.row);
2869
- }
2870
- }));
2871
- return this;
2872
- }
2873
- cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
2874
- const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
2875
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
2876
- this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
2877
- const formValueModel = editSession.form.pluck(this.property);
2878
- if (validators) {
2879
- formValueModel.validateUsing(validators);
2880
- }
2881
- component.valueModel = formValueModel;
2882
- if (initialiser) {
2883
- initialiser(component);
2884
- }
2885
- }));
2886
- return this;
2760
+ (function (ColumnModel) {
2761
+ ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE = Symbol('aup-cell-renderer:row-data-cache');
2762
+ })(ColumnModel || (ColumnModel = {}));
2763
+
2764
+ class CustomTemplateColumnModel extends ColumnModel {
2765
+ constructor(columnId, defaults) {
2766
+ super(columnId, defaults);
2767
+ this.config = new TemplateCellRendererPortalRef();
2768
+ this.configureCellRenderer(this.config);
2887
2769
  }
2888
- format(formatter) {
2889
- assert$1.isFunction(formatter);
2890
- this._format = formatter;
2891
- return this;
2770
+ setTemplate(templateRef, viewContainer, fillCell, padChild) {
2771
+ this.config.registerPortal(templateRef, viewContainer, fillCell, padChild);
2892
2772
  }
2893
2773
  selectRowOnClick(selectOnRowClick) {
2894
2774
  return this._selectRowOnClick(selectOnRowClick);
2895
2775
  }
2896
2776
  }
2897
- class ListPropertyColumnModel extends ColumnModel {
2898
- constructor(id, property, defaults) {
2899
- super(id, defaults);
2900
- this.property = property;
2901
- this._format = (value) => value.map(v => v?.toString()).join(', ');
2902
- this.cellRenderer(DefaultCellRendererComponent);
2903
- this.useTextSearchPredicate((row, regex) => {
2904
- let rowElement = row[this.property];
2905
- // @ts-ignore Started complaining in ts 4.5.. but I think my logic is correct...
2906
- return regex.test(this._format(rowElement));
2907
- });
2908
- }
2909
- cellRenderer(componentType) {
2910
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData) => {
2911
- let rowElement = rowData.row[this.property];
2912
- // @ts-ignore Started complaining in ts 4.5.. but I think my logic is correct...
2913
- component.value = this._format(rowElement);
2914
- }));
2915
- return this;
2916
- }
2917
- cellEditor(editor, validatorsOrInitialiser, initialiseComponent) {
2918
- const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
2919
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
2920
- this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
2921
- const formListModel = editSession.form.pluckList(this.property);
2922
- if (validators) {
2923
- formListModel.validateUsing(validators);
2924
- }
2925
- component.listModel = formListModel;
2926
- if (initialiser) {
2927
- initialiser(component);
2928
- }
2929
- }));
2930
- return this;
2931
- }
2932
- format(formatter) {
2933
- assert$1.isFunction(formatter);
2934
- this._format = formatter;
2935
- return this;
2777
+
2778
+ /**
2779
+ * Create your model:
2780
+ * @example
2781
+ * this.heroTableModel = new TableModel(heroList, table => {
2782
+ * table.pluck("firstName");
2783
+ * table.pluck("lastName");
2784
+ * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
2785
+ * });
2786
+ *
2787
+ * Create your table
2788
+ * @example
2789
+ * <aup-table [tableModel]="heroTableModel"></aup-table>
2790
+ *
2791
+ * Column templates
2792
+ * @example
2793
+ * this.heroTableModel = new TableModel(heroList, table => {
2794
+ * table.pluck("firstName");
2795
+ * table.pluck("lastName");
2796
+ * table.addTemplateColumn("specialColumn");
2797
+ * });
2798
+ * <aup-table [tableModel]="heroTableModel">
2799
+ * <div *aupColumnTemplate="let hero; columnId: 'specialColumn'; fillCell: true; padChild:false">
2800
+ * {{hero.name}}
2801
+ * </div>
2802
+ * </aup-table>
2803
+ *
2804
+ * Styling
2805
+ * @example
2806
+ * // global settings
2807
+ * :root {
2808
+ * --aup-table-column-gap: 10px; // defaults to 24px
2809
+ * --aup-table-row-hover-background-color, rgba(0, 0, 0, 0.05)
2810
+ * --aup-table-row-selected-background-color: rebeccapurple; // defaults to transparent
2811
+ * --aup-table-first-column-padding-left: 18px // defaults to --column-gap
2812
+ * --aup-table-last-column-padding-right: 18px // defaults to --column-gap
2813
+ * }
2814
+ *
2815
+ * // per table settings.
2816
+ * aup-table {
2817
+ * --column-gap: 10px; // defaults to 24px
2818
+ * --row-hover-background-color, rgba(0, 0, 0, 0.05)
2819
+ * --row-selected-background-color: rebeccapurple; // defaults to transparent
2820
+ * --first-column-padding-left: 18px // defaults to --column-gap
2821
+ * --last-column-padding-right: 18px // defaults to --column-gap
2822
+ *
2823
+ * aup-table-header-cell-renderer,
2824
+ * aup-table-cell-renderer {
2825
+ * &.aup-col-my-dasherised-column-id {
2826
+ * // do stuff
2827
+ * }
2828
+ * &.first-visible-column {
2829
+ * // do stuff
2830
+ * }
2831
+ * &.last-visible-column {
2832
+ * // do stuff
2833
+ * }
2834
+ * }
2835
+ * }
2836
+ */
2837
+ class AbstractTableComponent extends ResizeAwareComponent {
2838
+ constructor(elementRef, ngZone, injector) {
2839
+ super(elementRef, ngZone);
2840
+ this.injector = injector;
2841
+ /**
2842
+ * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
2843
+ * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
2844
+ * containment area.
2845
+ */
2846
+ this.enableScrolling = false;
2847
+ // TODO: support user defined header and row heights via css vars.
2848
+ this.headerHeight = new MutableValueModel(56);
2849
+ this.rowHeight = new MutableValueModel(48);
2850
+ this.baseCssClass = 'aup-table-component';
2851
+ const { chain, when } = Dsl.disposeWith(this);
2852
+ const actualHeaderHeight = chain(this.showHeaderModel).map(show => {
2853
+ return show ? this.headerHeight.value : 0;
2854
+ }, { dependsOn: this.headerHeight });
2855
+ this.visibleRowCount = chain(this.boundsModel).map(bounds => {
2856
+ // TODO: this doesn't take into account any css styling adjustments etc. Will investigate if it's an issue.
2857
+ const rawRowCount = (bounds.height - actualHeaderHeight.value) / this.rowHeight.value;
2858
+ return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
2859
+ }, {
2860
+ dependsOn: [actualHeaderHeight, this.rowHeight],
2861
+ postponeWhile: chain(this.boundsModel).pluckNumeric('height').isLessThan(1)
2862
+ });
2936
2863
  }
2937
- selectRowOnClick(selectRowOnClick) {
2938
- return this._selectRowOnClick(selectRowOnClick);
2864
+ get hideHeader() {
2865
+ return !this.showHeader;
2866
+ }
2867
+ getModel() {
2868
+ return lang$1.abstractMethod(this.constructor);
2869
+ }
2870
+ ngOnInit() {
2871
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2872
+ this.getModel().initialise(this.injector);
2873
+ this.columns = chain(this.getModel().columns);
2874
+ this.columnIds = chain(this.columns).pluck('columnId');
2875
+ this.columnsById = chain(this.columns).indexBy('columnId');
2876
+ }
2877
+ isEditing(row) {
2878
+ return !!this.getModel().getEditSessionFor(row);
2879
+ }
2880
+ registerColumnTemplate(columnId, templateRef, viewContainer, fillCell, padChild) {
2881
+ const column = this.columnsById.get(columnId);
2882
+ if (column instanceof CustomTemplateColumnModel) {
2883
+ column.setTemplate(templateRef, viewContainer, fillCell, padChild);
2884
+ }
2885
+ }
2886
+ notifyCellClicked(columnModel, row) {
2887
+ this.getModel()._notifyCellClicked(columnModel, row);
2888
+ }
2889
+ // @Trace()
2890
+ isFirstVisibleColumn(columnId) {
2891
+ return this.getModel().firstVisibleColumn$.query().value?.columnId === columnId;
2892
+ }
2893
+ // @Trace()
2894
+ isLastVisibleColumn(columnId) {
2895
+ return this.getModel().lastVisibleColumn$.query().value?.columnId === columnId;
2896
+ }
2897
+ getColumnClasses(columnId) {
2898
+ const classes = [`aup-col-${this.columnsById.get(columnId).dasherisedColumnId}`];
2899
+ if (this.isFirstVisibleColumn(columnId)) {
2900
+ classes.push('first-visible-column');
2901
+ }
2902
+ if (this.isLastVisibleColumn(columnId)) {
2903
+ classes.push('last-visible-column');
2904
+ }
2905
+ return classes;
2939
2906
  }
2940
2907
  }
2908
+ 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 });
2909
+ 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 });
2910
+ __decorate([
2911
+ TrackExternal({ defaultValue: true }),
2912
+ __metadata("design:type", ValueModel)
2913
+ ], AbstractTableComponent.prototype, "showHeaderModel", void 0);
2914
+ __decorate([
2915
+ StoreInValueModel('showHeaderModel'),
2916
+ __metadata("design:type", Boolean)
2917
+ ], AbstractTableComponent.prototype, "showHeader", void 0);
2918
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, decorators: [{
2919
+ type: Component,
2920
+ args: [{
2921
+ selector: 'aup-abstract-table',
2922
+ template: ''
2923
+ }]
2924
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { showHeaderModel: [{
2925
+ type: Input
2926
+ }], showHeader: [{
2927
+ type: Input
2928
+ }], enableScrolling: [{
2929
+ type: Input
2930
+ }, {
2931
+ type: HostBinding,
2932
+ args: ['class.enable-scrolling']
2933
+ }], baseCssClass: [{
2934
+ type: HostBinding,
2935
+ args: ['class']
2936
+ }], hideHeader: [{
2937
+ type: HostBinding,
2938
+ args: ['class.hide-header']
2939
+ }] } });
2940
+
2941
+ class ColumnTemplateDirective {
2942
+ constructor(host, templateRef, viewContainer) {
2943
+ this.host = host;
2944
+ this.templateRef = templateRef;
2945
+ this.viewContainer = viewContainer;
2946
+ this.aupColumnTemplateFillCell = false;
2947
+ this.aupColumnTemplateAutoPadChild = undefined;
2948
+ }
2949
+ ngOnInit() {
2950
+ assert.isTruthy(this.aupColumnTemplateColumnId);
2951
+ this.host.registerColumnTemplate(this.aupColumnTemplateColumnId, this.templateRef, this.viewContainer, this.aupColumnTemplateFillCell, this.aupColumnTemplateAutoPadChild ?? this.aupColumnTemplateFillCell);
2952
+ }
2953
+ }
2954
+ 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 });
2955
+ 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 });
2956
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ColumnTemplateDirective, decorators: [{
2957
+ type: Directive,
2958
+ args: [{
2959
+ selector: '[aupColumnTemplate]'
2960
+ }]
2961
+ }], ctorParameters: function () { return [{ type: AbstractTableComponent }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { aupColumnTemplate: [{
2962
+ type: Input
2963
+ }], aupColumnTemplateColumnId: [{
2964
+ type: Input
2965
+ }], aupColumnTemplateFillCell: [{
2966
+ type: Input
2967
+ }], aupColumnTemplateAutoPadChild: [{
2968
+ type: Input
2969
+ }] } });
2970
+
2971
+ const TEXT_SEARCH_FORMATTER_KEY = `aup:table:textSearchFormatter`;
2972
+ const Keys = Enum("useFunction", "useInstance", "useClass");
2973
+ function EnableCellTextSearch(options) {
2974
+ assert$1.notNil(options);
2975
+ return (constructor) => {
2976
+ const klass = Klass.get(constructor);
2977
+ assert$1.isFalsey(klass.hasOwnMetadata(TEXT_SEARCH_FORMATTER_KEY), "class already decorated with @EnableCellTextSearch");
2978
+ klass.defineMetadata(TEXT_SEARCH_FORMATTER_KEY, options);
2979
+ };
2980
+ }
2981
+ (function (EnableCellTextSearch) {
2982
+ function getFormatter(renderer, useDefault) {
2983
+ const options = Klass.get(renderer).getMetadata(TEXT_SEARCH_FORMATTER_KEY) ?? {};
2984
+ if (options[Keys.useFunction]) {
2985
+ return ColumnTextSearchFormatter.forFormatter(options[Keys.useFunction]);
2986
+ }
2987
+ if (options[Keys.useInstance]) {
2988
+ return options[Keys.useInstance];
2989
+ }
2990
+ if (options[Keys.useClass]) {
2991
+ return new ColumnTextSearchFormatter.Delegating(options[Keys.useClass]);
2992
+ }
2993
+ return useDefault();
2994
+ }
2995
+ EnableCellTextSearch.getFormatter = getFormatter;
2996
+ })(EnableCellTextSearch || (EnableCellTextSearch = {}));
2997
+
2998
+ let DefaultCellRendererComponent = class DefaultCellRendererComponent {
2999
+ constructor() {
3000
+ }
3001
+ set value(value) {
3002
+ this._value = value;
3003
+ }
3004
+ get value() {
3005
+ return this._value;
3006
+ }
3007
+ };
3008
+ DefaultCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3009
+ 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 } });
3010
+ DefaultCellRendererComponent = __decorate([
3011
+ EnableCellTextSearch({ useClass: ColumnTextSearchFormatter.DefaultValueFormatter }),
3012
+ __metadata("design:paramtypes", [])
3013
+ ], DefaultCellRendererComponent);
3014
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultCellRendererComponent, decorators: [{
3015
+ type: Component,
3016
+ args: [{ selector: "aup-default-cell-renderer", template: "<span [innerHTML]=\"value| aupHighlight\"></span>\n", styles: [""] }]
3017
+ }], ctorParameters: function () { return []; }, propDecorators: { value: [{
3018
+ type: Input
3019
+ }] } });
3020
+
3021
+ class EditSession extends GarbageCollector {
3022
+ constructor(rowId, row, form, saveCommand) {
3023
+ super();
3024
+ this.rowId = rowId;
3025
+ this.form = form;
3026
+ this.saveCommand = saveCommand;
3027
+ this._liveRowValue$ = new MutableValueModel();
3028
+ this.liveRowValue$ = this._liveRowValue$.readonly;
3029
+ this.form.load(row);
3030
+ this._liveRowValue$.value = row;
3031
+ this.form.onEdit(() => {
3032
+ // if (!this._liveRowValue.value[immerable]) {
3033
+ // console.warn()
3034
+ // }
3035
+ this._liveRowValue$.value = produce(this._liveRowValue$.value, draft => {
3036
+ this.form.writeDirtyStateTo(draft);
3037
+ });
3038
+ });
3039
+ }
3040
+ }
3041
+
3042
+ class EditRowControls extends DisposableComponent {
3043
+ constructor() {
3044
+ super();
3045
+ this.saveCommand = Command.create(async () => {
3046
+ const finished = await this.editSession.saveCommand.execute();
3047
+ if (finished) {
3048
+ this.editSession.dispose();
3049
+ }
3050
+ });
3051
+ this.cancelCommand = Command.create(() => {
3052
+ this.editSession.dispose();
3053
+ }).disableWhile(this.saveCommand.busy);
3054
+ }
3055
+ set editSession(session) {
3056
+ if (session) {
3057
+ session.form.disableWhile(this.saveCommand.busy);
3058
+ }
3059
+ this._session = session;
3060
+ }
3061
+ get editSession() {
3062
+ return this._session;
3063
+ }
3064
+ ngOnInit() {
3065
+ }
3066
+ get form() {
3067
+ return this.editSession?.form;
3068
+ }
3069
+ }
3070
+ EditRowControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: EditRowControls, deps: [], target: i0.ɵɵFactoryTarget.Component });
3071
+ 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"] }] });
3072
+ __decorate([
3073
+ TrackExternal(),
3074
+ __metadata("design:type", Command)
3075
+ ], EditRowControls.prototype, "editRowCommand", void 0);
3076
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: EditRowControls, decorators: [{
3077
+ type: Component,
3078
+ 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"] }]
3079
+ }], ctorParameters: function () { return []; }, propDecorators: { row: [{
3080
+ type: Input
3081
+ }], editRowCommand: [{
3082
+ type: Input
3083
+ }], editSession: [{
3084
+ type: Input
3085
+ }] } });
3086
+
3087
+ let formatter = (row) => row.map(e => e?.toString()).join(", ");
3088
+ let DefaultListCellRendererComponent = class DefaultListCellRendererComponent extends DisposableComponent {
3089
+ constructor() {
3090
+ super();
3091
+ const { chain } = Dsl.disposeWith(this);
3092
+ this.text$ = chain(this.value$).reduce(formatter);
3093
+ }
3094
+ };
3095
+ DefaultListCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultListCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3096
+ 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 } });
3097
+ __decorate([
3098
+ TrackExternal(),
3099
+ __metadata("design:type", ListModel)
3100
+ ], DefaultListCellRendererComponent.prototype, "value$", void 0);
3101
+ __decorate([
3102
+ StoreInListModel("value$"),
3103
+ __metadata("design:type", Array)
3104
+ ], DefaultListCellRendererComponent.prototype, "value", void 0);
3105
+ DefaultListCellRendererComponent = __decorate([
3106
+ EnableCellTextSearch({ useClass: ColumnTextSearchFormatter.DefaultArrayFormatter }),
3107
+ __metadata("design:paramtypes", [])
3108
+ ], DefaultListCellRendererComponent);
3109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DefaultListCellRendererComponent, decorators: [{
3110
+ type: Component,
3111
+ args: [{ selector: "aup-default-list-cell-renderer", template: "<span [innerHTML]=\"text$.value| aupHighlight\"></span>\n", styles: [""] }]
3112
+ }], ctorParameters: function () { return []; }, propDecorators: { value$: [{
3113
+ type: Input
3114
+ }], value: [{
3115
+ type: Input
3116
+ }] } });
3117
+
3118
+ class SelectionCellComponent extends DisposableComponent {
3119
+ constructor() {
3120
+ super();
3121
+ this.selectCommand = Command.create(() => {
3122
+ this.selectionModel?.selectCommand.execute(this.row);
3123
+ });
3124
+ }
3125
+ isSelected() {
3126
+ return this.selectionModel?.isSelected(this.row);
3127
+ }
3128
+ }
3129
+ SelectionCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectionCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3130
+ 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"] }] });
3131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectionCellComponent, decorators: [{
3132
+ type: Component,
3133
+ args: [{ selector: 'aup-selection-cell', template: "<mat-checkbox [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\"></mat-checkbox>\n", styles: [""] }]
3134
+ }], ctorParameters: function () { return []; }, propDecorators: { row: [{
3135
+ type: Input
3136
+ }] } });
3137
+
3138
+ class SelectionHeaderCellComponent extends DisposableComponent {
3139
+ constructor() {
3140
+ super();
3141
+ this.selectCommand = Command.create(() => {
3142
+ this.selectionModel.toggleAllCommand.execute();
3143
+ });
3144
+ }
3145
+ isSelected() {
3146
+ return this.selectionModel?.allSelected.value || false;
3147
+ }
3148
+ isIntermediate() {
3149
+ return this.selectionModel?.someSelected.value || false;
3150
+ }
3151
+ isVisible() {
3152
+ return this.enableHeaderControls && this.selectionModel.getDelegate() instanceof MultipleSelectionModel;
3153
+ }
3154
+ }
3155
+ SelectionHeaderCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectionHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3156
+ 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"] }] });
3157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SelectionHeaderCellComponent, decorators: [{
3158
+ type: Component,
3159
+ args: [{ selector: 'aup-selection-header-cell', template: "<mat-checkbox *ngIf=\"isVisible()\" [pectinCommand]=\"selectCommand\" [checked]=\"isSelected()\" [indeterminate]=\"this.isIntermediate()\"></mat-checkbox>\n", styles: [""] }]
3160
+ }], ctorParameters: function () { return []; } });
3161
+
3162
+ class ColumnListModel extends AbstractComputedListModel {
3163
+ constructor() {
3164
+ super();
3165
+ this._allColumns$ = new MutableListModel();
3166
+ const { chain } = Dsl.disposeWith(this);
3167
+ this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
3168
+ }
3169
+ get allColumns$() {
3170
+ return this._allColumns$.readonly;
3171
+ }
3172
+ getColumn(id) {
3173
+ return this.columnsById$.get(id);
3174
+ }
3175
+ hasColumn(id) {
3176
+ return !!this.columnsById$.get(id);
3177
+ }
3178
+ addColumn(column, index) {
3179
+ if (this.hasColumn(column.columnId)) {
3180
+ lang.illegalState(`Column with id=${column.columnId} already exists`);
3181
+ }
3182
+ this.registerDisposable(column);
3183
+ this.runInTransaction(() => {
3184
+ if (!isNil(index)) {
3185
+ this._allColumns$.insert(index, column);
3186
+ }
3187
+ else {
3188
+ this._allColumns$.push(column);
3189
+ }
3190
+ this.registerDisposable(this.trackSource(column.visible$));
3191
+ });
3192
+ return column;
3193
+ }
3194
+ doComputeValue() {
3195
+ return this._allColumns$.value.filter(c => c.visible$.value);
3196
+ }
3197
+ }
3198
+
2941
3199
  class CustomValueColumnModel extends ColumnModel {
2942
3200
  constructor(columnId, defaults, getValue) {
2943
3201
  super(columnId, defaults);
@@ -2945,6 +3203,7 @@ class CustomValueColumnModel extends ColumnModel {
2945
3203
  this.cellRenderer(DefaultCellRendererComponent);
2946
3204
  }
2947
3205
  cellRenderer(componentType, onComponentInitOrOptions) {
3206
+ this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.Null()), row => this.getValue(row));
2948
3207
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
2949
3208
  if (firstTime) {
2950
3209
  if (isFunction(onComponentInitOrOptions)) {
@@ -2967,6 +3226,7 @@ class CustomValueColumnModel extends ColumnModel {
2967
3226
  return this._selectRowOnClick(selectOnRowClick);
2968
3227
  }
2969
3228
  }
3229
+
2970
3230
  class EditorControlColumnModel extends ColumnModel {
2971
3231
  constructor(columnId, saveCommandFactory, defaults) {
2972
3232
  super(columnId, defaults);
@@ -2984,30 +3244,144 @@ class EditorControlColumnModel extends ColumnModel {
2984
3244
  return '';
2985
3245
  }
2986
3246
  }
2987
- class CustomTemplateColumnModel extends ColumnModel {
2988
- constructor(columnId, defaults) {
2989
- super(columnId, defaults);
2990
- this.config = new TemplateCellRendererPortalRef();
2991
- this.configureCellRenderer(this.config);
3247
+
3248
+ class ListPropertyColumnModel extends ColumnModel {
3249
+ constructor(id, property, defaults) {
3250
+ super(id, defaults);
3251
+ this.property = property;
3252
+ this._format = (value) => value.map(v => v?.toString()).join(", ");
3253
+ this.cellRenderer(DefaultListCellRendererComponent);
2992
3254
  }
2993
- setTemplate(templateRef, viewContainer, fillCell, padChild) {
2994
- this.config.registerPortal(templateRef, viewContainer, fillCell, padChild);
3255
+ cellRenderer(componentType) {
3256
+ this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.DefaultArrayFormatter()), row => row[this.property]);
3257
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData) => {
3258
+ let rowElement = rowData.row[this.property];
3259
+ // @ts-ignore Started complaining in ts 4.5.. but I think my logic is correct...
3260
+ component.value = this._format(rowElement);
3261
+ }));
3262
+ return this;
3263
+ }
3264
+ cellEditor(editor, validatorsOrInitialiser, initialiseComponent) {
3265
+ const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3266
+ const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3267
+ this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
3268
+ const formListModel = editSession.form.pluckList(this.property);
3269
+ if (validators) {
3270
+ formListModel.validateUsing(validators);
3271
+ }
3272
+ component.listModel = formListModel;
3273
+ if (initialiser) {
3274
+ initialiser(component);
3275
+ }
3276
+ }));
3277
+ return this;
3278
+ }
3279
+ format(formatter) {
3280
+ assert$1.isFunction(formatter);
3281
+ this._format = formatter;
3282
+ return this;
3283
+ }
3284
+ selectRowOnClick(selectRowOnClick) {
3285
+ return this._selectRowOnClick(selectRowOnClick);
3286
+ }
3287
+ }
3288
+
3289
+ class PropertyColumnModel extends ColumnModel {
3290
+ constructor(id, property, defaults) {
3291
+ super(id, defaults);
3292
+ this.property = property;
3293
+ this._format = (value) => value?.toString();
3294
+ this.cellRenderer(DefaultCellRendererComponent);
3295
+ }
3296
+ cellRenderer(componentType, onComponentInitOrOptions) {
3297
+ this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.DefaultValueFormatter()), row => row[this.property]);
3298
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3299
+ if (firstTime) {
3300
+ if (isFunction(onComponentInitOrOptions)) {
3301
+ onComponentInitOrOptions(component);
3302
+ }
3303
+ else {
3304
+ if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3305
+ onComponentInitOrOptions.onComponentInit(component);
3306
+ }
3307
+ }
3308
+ }
3309
+ component.value = this._format(rowData.row[this.property]);
3310
+ }));
3311
+ return this;
3312
+ }
3313
+ liveEditCellRenderer(componentType, options) {
3314
+ return this.mutableCellRenderer(componentType, options);
3315
+ }
3316
+ /**
3317
+ * Deprecated. Use #liveEditCellRenderer instead.
3318
+ * @param componentType
3319
+ * @param options
3320
+ */
3321
+ mutableCellRenderer(componentType, options) {
3322
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3323
+ // keep a local copy most recent row value so it's available to teh
3324
+ // edit callback without having to add/remove subscribers all the time.
3325
+ component[ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
3326
+ let disableEditCallback = false;
3327
+ if (firstTime) {
3328
+ if (isFunction(options?.onComponentInit)) {
3329
+ options.onComponentInit(component);
3330
+ }
3331
+ // install our edit callback
3332
+ component.onValueEdited((is, was) => {
3333
+ if (!disableEditCallback) {
3334
+ options.onValueEdit(component[ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE], is, was);
3335
+ }
3336
+ });
3337
+ }
3338
+ // now push the value the component and disable the callback just incase the component misbehaves
3339
+ // and fires a value change during the operation.
3340
+ disableEditCallback = true;
3341
+ component.value = rowData.row[this.property];
3342
+ disableEditCallback = false;
3343
+ if (!isFunction(options) && isFunction(options?.onRowUpdate)) {
3344
+ options.onRowUpdate(component, rowData.row);
3345
+ }
3346
+ }));
3347
+ return this;
3348
+ }
3349
+ cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
3350
+ const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3351
+ const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
3352
+ this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
3353
+ const formValueModel = editSession.form.pluck(this.property);
3354
+ if (validators) {
3355
+ formValueModel.validateUsing(validators);
3356
+ }
3357
+ component.valueModel = formValueModel;
3358
+ if (initialiser) {
3359
+ initialiser(component);
3360
+ }
3361
+ }));
3362
+ return this;
3363
+ }
3364
+ format(formatter) {
3365
+ assert$1.isFunction(formatter);
3366
+ this._format = formatter;
3367
+ return this;
2995
3368
  }
2996
3369
  selectRowOnClick(selectOnRowClick) {
2997
3370
  return this._selectRowOnClick(selectOnRowClick);
2998
3371
  }
2999
3372
  }
3373
+
3000
3374
  class SelectionColumnModel extends ColumnModel {
3001
3375
  constructor(columnId, defaults, selectionModel) {
3002
3376
  super(columnId, defaults);
3003
3377
  this._enableHeaderControls = true;
3004
3378
  this.selectionModel = DelegatingSelectionModel.createDelegate();
3005
3379
  this._selectRowOnClick(false);
3006
- this.cellHeaderRenderer(SelectHeaderCellRendererComponent, (component) => {
3380
+ this.cellHeaderRenderer(SelectionHeaderCellComponent, (component) => {
3007
3381
  component.selectionModel = this.selectionModel;
3008
3382
  component.enableHeaderControls = this._enableHeaderControls;
3009
3383
  });
3010
- this.configureCellRenderer(new ComponentCellRendererPortalRef(SelectCellRendererComponent, (component, rowData) => {
3384
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(SelectionCellComponent, (component, rowData) => {
3011
3385
  component.row = rowData.row;
3012
3386
  component.selectionModel = this.selectionModel;
3013
3387
  }));
@@ -3032,234 +3406,8 @@ class SelectionColumnModel extends ColumnModel {
3032
3406
  }
3033
3407
  }
3034
3408
 
3035
- /**
3036
- * Create your model:
3037
- * @example
3038
- * this.heroTableModel = TableModel.fromList(heroList, table => {
3039
- * table.pluck("firstName");
3040
- * table.pluck("lastName");
3041
- * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
3042
- * });
3043
- *
3044
- * Create your table
3045
- * @example
3046
- * <aup-table [tableModel]="heroTableModel"></aup-table>
3047
- *
3048
- * Column templates
3049
- * @example
3050
- * this.heroTableModel = TableModel.fromList(heroList, table => {
3051
- * table.pluck("firstName");
3052
- * table.pluck("lastName");
3053
- * table.addTemplateColumn("specialColumn");
3054
- * });
3055
- * <aup-table [tableModel]="heroTableModel">
3056
- * <div *aupColumnTemplate="let hero; columnId: 'specialColumn'; fillCell: true; padChild:false">
3057
- * {{hero.name}}
3058
- * </div>
3059
- * </aup-table>
3060
- *
3061
- * Styling
3062
- * @example
3063
- * // global settings
3064
- * :root {
3065
- * --aup-table-column-gap: 10px; // defaults to 24px
3066
- * --aup-table-row-hover-background-color, rgba(0, 0, 0, 0.05)
3067
- * --aup-table-row-selected-background-color: rebeccapurple; // defaults to transparent
3068
- * --aup-table-first-column-padding-left: 18px // defaults to --column-gap
3069
- * --aup-table-last-column-padding-right: 18px // defaults to --column-gap
3070
- * }
3071
- *
3072
- * // per table settings.
3073
- * aup-table {
3074
- * --column-gap: 10px; // defaults to 24px
3075
- * --row-hover-background-color, rgba(0, 0, 0, 0.05)
3076
- * --row-selected-background-color: rebeccapurple; // defaults to transparent
3077
- * --first-column-padding-left: 18px // defaults to --column-gap
3078
- * --last-column-padding-right: 18px // defaults to --column-gap
3079
- *
3080
- * aup-table-header-cell-renderer,
3081
- * aup-table-cell-renderer {
3082
- * &.aup-col-my-dasherised-column-id {
3083
- * // do stuff
3084
- * }
3085
- * &.first-visible-column {
3086
- * // do stuff
3087
- * }
3088
- * &.last-visible-column {
3089
- * // do stuff
3090
- * }
3091
- * }
3092
- * }
3093
- */
3094
- class AbstractTableComponent extends ResizeAwareComponent {
3095
- constructor(elementRef, ngZone) {
3096
- super(elementRef, ngZone);
3097
- /**
3098
- * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
3099
- * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
3100
- * containment area.
3101
- */
3102
- this.enableScrolling = false;
3103
- // TODO: support user defined header and row heights via css vars.
3104
- this.headerHeight = new MutableValueModel(56);
3105
- this.rowHeight = new MutableValueModel(48);
3106
- this.baseCssClass = 'aup-table-component';
3107
- const { chain, when } = Dsl.disposeWith(this);
3108
- const actualHeaderHeight = chain(this.showHeaderModel).map(show => {
3109
- return show ? this.headerHeight.value : 0;
3110
- }, { dependsOn: this.headerHeight });
3111
- this.visibleRowCount = chain(this.boundsModel).map(bounds => {
3112
- // TODO: this doesn't take into account any css styling adjustments etc. Will investigate if it's an issue.
3113
- const rawRowCount = (bounds.height - actualHeaderHeight.value) / this.rowHeight.value;
3114
- return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
3115
- }, {
3116
- dependsOn: [actualHeaderHeight, this.rowHeight],
3117
- postponeWhile: chain(this.boundsModel).pluckNumeric('height').isLessThan(1)
3118
- });
3119
- }
3120
- get hideHeader() {
3121
- return !this.showHeader;
3122
- }
3123
- getModel() {
3124
- return lang$1.abstractMethod(this.constructor);
3125
- }
3126
- ngOnInit() {
3127
- const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
3128
- this.columns = chain(this.getModel().columns);
3129
- this.columnIds = chain(this.columns).pluck('columnId');
3130
- this.columnsById = chain(this.columns).indexBy('columnId');
3131
- }
3132
- isEditing(row) {
3133
- return !!this.getModel().getEditSessionFor(row);
3134
- }
3135
- registerColumnTemplate(columnId, templateRef, viewContainer, fillCell, padChild) {
3136
- const column = this.columnsById.get(columnId);
3137
- if (column instanceof CustomTemplateColumnModel) {
3138
- column.setTemplate(templateRef, viewContainer, fillCell, padChild);
3139
- }
3140
- }
3141
- notifyCellClicked(columnModel, row) {
3142
- this.getModel()._notifyCellClicked(columnModel, row);
3143
- }
3144
- // @Trace()
3145
- isFirstVisibleColumn(columnId) {
3146
- return this.getModel().firstVisibleColumn.query().value?.columnId === columnId;
3147
- }
3148
- // @Trace()
3149
- isLastVisibleColumn(columnId) {
3150
- return this.getModel().lastVisibleColumn.query().value?.columnId === columnId;
3151
- }
3152
- getColumnClasses(columnId) {
3153
- const classes = [`aup-col-${this.columnsById.get(columnId).dasherisedColumnId}`];
3154
- if (this.isFirstVisibleColumn(columnId)) {
3155
- classes.push('first-visible-column');
3156
- }
3157
- if (this.isLastVisibleColumn(columnId)) {
3158
- classes.push('last-visible-column');
3159
- }
3160
- return classes;
3161
- }
3162
- }
3163
- 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 });
3164
- 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 });
3165
- __decorate([
3166
- TrackExternal({ defaultValue: true }),
3167
- __metadata("design:type", ValueModel)
3168
- ], AbstractTableComponent.prototype, "showHeaderModel", void 0);
3169
- __decorate([
3170
- StoreInValueModel('showHeaderModel'),
3171
- __metadata("design:type", Boolean)
3172
- ], AbstractTableComponent.prototype, "showHeader", void 0);
3173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AbstractTableComponent, decorators: [{
3174
- type: Component,
3175
- args: [{
3176
- selector: 'aup-abstract-table',
3177
- template: ''
3178
- }]
3179
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { showHeaderModel: [{
3180
- type: Input
3181
- }], showHeader: [{
3182
- type: Input
3183
- }], enableScrolling: [{
3184
- type: Input
3185
- }, {
3186
- type: HostBinding,
3187
- args: ['class.enable-scrolling']
3188
- }], baseCssClass: [{
3189
- type: HostBinding,
3190
- args: ['class']
3191
- }], hideHeader: [{
3192
- type: HostBinding,
3193
- args: ['class.hide-header']
3194
- }] } });
3195
-
3196
- class ColumnTemplateDirective {
3197
- constructor(host, templateRef, viewContainer) {
3198
- this.host = host;
3199
- this.templateRef = templateRef;
3200
- this.viewContainer = viewContainer;
3201
- this.aupColumnTemplateFillCell = false;
3202
- this.aupColumnTemplateAutoPadChild = undefined;
3203
- }
3204
- ngOnInit() {
3205
- assert.isTruthy(this.aupColumnTemplateColumnId);
3206
- this.host.registerColumnTemplate(this.aupColumnTemplateColumnId, this.templateRef, this.viewContainer, this.aupColumnTemplateFillCell, this.aupColumnTemplateAutoPadChild ?? this.aupColumnTemplateFillCell);
3207
- }
3208
- }
3209
- 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 });
3210
- 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 });
3211
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ColumnTemplateDirective, decorators: [{
3212
- type: Directive,
3213
- args: [{
3214
- selector: '[aupColumnTemplate]'
3215
- }]
3216
- }], ctorParameters: function () { return [{ type: AbstractTableComponent }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { aupColumnTemplate: [{
3217
- type: Input
3218
- }], aupColumnTemplateColumnId: [{
3219
- type: Input
3220
- }], aupColumnTemplateFillCell: [{
3221
- type: Input
3222
- }], aupColumnTemplateAutoPadChild: [{
3223
- type: Input
3224
- }] } });
3225
-
3226
- class ColumnListModel extends AbstractComputedListModel {
3227
- constructor() {
3228
- super();
3229
- this._allColumns = new MutableListModel();
3230
- const { chain } = Dsl.disposeWith(this);
3231
- this.columnsById = chain(this._allColumns).indexBy('columnId');
3232
- }
3233
- get allColumns() {
3234
- return this._allColumns.readonly;
3235
- }
3236
- getColumn(id) {
3237
- return this.columnsById.get(id);
3238
- }
3239
- hasColumn(id) {
3240
- return !!this.columnsById.get(id);
3241
- }
3242
- addColumn(column, index) {
3243
- if (this.hasColumn(column.columnId)) {
3244
- lang.illegalState(`Column with id=${column.columnId} already exists`);
3245
- }
3246
- this.registerDisposable(column);
3247
- this.runInTransaction(() => {
3248
- if (!isNil(index)) {
3249
- this._allColumns.insert(index, column);
3250
- }
3251
- else {
3252
- this._allColumns.push(column);
3253
- }
3254
- this.registerDisposable(this.trackSource(column.visible));
3255
- });
3256
- return column;
3257
- }
3258
- doComputeValue() {
3259
- return this._allColumns.value.filter(c => c.visible.value);
3260
- }
3261
- }
3262
-
3409
+ var DefaultValueFormatter = ColumnTextSearchFormatter.DefaultValueFormatter;
3410
+ var DefaultArrayFormatter = ColumnTextSearchFormatter.DefaultArrayFormatter;
3263
3411
  // export type StringPropertiesOf<T> = { [K in keyof T]: T[K] extends string ? K : never }[keyof T];
3264
3412
  // export type NumberPropertiesOf<T> = { [K in keyof T]: T[K] extends number ? K : never }[keyof T];
3265
3413
  class RowClass {
@@ -3276,39 +3424,69 @@ class AbstractTableModel extends GarbageCollector {
3276
3424
  this._editorSessions = new MutableListModel();
3277
3425
  this.rowClassNamePredicates = [];
3278
3426
  this.rowClickListeners = new EventListenerList();
3427
+ this._searchText$ = new DelegatingValueModel();
3279
3428
  this._createForm = (row) => new DirtyTrackingForm();
3280
3429
  this.trackBy = (index, item) => {
3281
3430
  return this.identityOf ? this.identityOf(item) : index;
3282
3431
  };
3283
3432
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
3284
- this._rowsBeingEdited = new MutableListModel([], {
3433
+ this._rowsBeingEdited$ = new MutableListModel([], {
3285
3434
  identifiedWith: row => this.identityOf(row)
3286
3435
  });
3287
- this._editorSessionByRowId = chain(this._editorSessions).indexBy('rowId');
3288
- this.editing = chain(this._editorSessions).count().isGreaterThan(0);
3289
- this.dataSource = chain(this._dataSource).replaceAll(this.rowsBeingEdited);
3290
- this.firstEditableColumn = chain(this.columns).select(c => c.hasEditorPortal()).first();
3291
- this.firstVisibleColumn = chain(this._columnList).first();
3292
- this.lastVisibleColumn = chain(this._columnList).last();
3293
- this.rowSelectionDisabledOnAllColumns = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
3436
+ this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
3437
+ this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
3438
+ this._textSearchPredicate$ = chain(this._searchText$).map(text => {
3439
+ return _.isEmpty(text) ? Functions.identity : (rows) => {
3440
+ const regex = new RegExp(escapeStringRegexp(text), "i");
3441
+ return rows.filter(row => this.hasMatchingColumn(row, regex));
3442
+ };
3443
+ }, {
3444
+ allowNil: true,
3445
+ dependsOn: this.columns
3446
+ });
3447
+ this.dataSource = chain(this._dataSource)
3448
+ .reduceToList(items => this._textSearchPredicate$.value(items), {
3449
+ dependsOn: this._textSearchPredicate$
3450
+ })
3451
+ .replaceAll(this.rowsBeingEdited$);
3452
+ this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
3453
+ this.firstVisibleColumn$ = chain(this._columnList).first();
3454
+ this.lastVisibleColumn$ = chain(this._columnList).last();
3455
+ this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
3294
3456
  }
3295
3457
  findMatchingColumns(row, regex) {
3296
- return this.columns.value.filter(c => c.isTextMatch(row, regex));
3458
+ return this.columns.value.filter(c => regex.test(c.getSearchTextFor(row)));
3297
3459
  }
3460
+ // @Trace()
3298
3461
  hasMatchingColumn(row, regex) {
3299
- return !!this.columns.value.find(c => c.isTextMatch(row, regex));
3462
+ return !!this.columns.value.find(c => regex.test(c.getSearchTextFor(row)));
3463
+ }
3464
+ initialise(injector) {
3465
+ // not sure if I should define these at the module level or not...
3466
+ const customInjector = Injector.create({
3467
+ providers: [
3468
+ { provide: DefaultValueFormatter },
3469
+ { provide: DefaultArrayFormatter }
3470
+ ],
3471
+ parent: injector
3472
+ });
3473
+ this.columns.value.forEach(c => c.initialise(customInjector));
3300
3474
  }
3301
3475
  setDataSource(sourceOfTruth) {
3302
3476
  this._dataSource.setDelegate(sourceOfTruth);
3303
3477
  }
3478
+ setTextSearch(searchText$, throttleDelayMilliseconds = 100) {
3479
+ const { chain } = Dsl.disposeWith(this);
3480
+ this._searchText$.setDelegate(chain(searchText$).throttle(throttleDelayMilliseconds));
3481
+ }
3304
3482
  identityOf(row) {
3305
3483
  return this._dataSource.identityOf(row);
3306
3484
  }
3307
- get rowsBeingEdited() {
3308
- return this._rowsBeingEdited.readonly;
3485
+ get rowsBeingEdited$() {
3486
+ return this._rowsBeingEdited$.readonly;
3309
3487
  }
3310
3488
  get columns() {
3311
- return this._columnList.allColumns;
3489
+ return this._columnList.allColumns$;
3312
3490
  }
3313
3491
  get visibleColumns() {
3314
3492
  return this._columnList.readonly;
@@ -3323,9 +3501,9 @@ class AbstractTableModel extends GarbageCollector {
3323
3501
  }
3324
3502
  _addSelectionColumn(selectionModel, visible) {
3325
3503
  assert.isNil(this.selectionColumnModel);
3326
- const columnId = 'selection-column';
3504
+ const columnId = "selection-column";
3327
3505
  this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), selectionModel);
3328
- this.addRowClass('aup-row-selected', row => this.selectionColumnModel.isSelected(row));
3506
+ this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
3329
3507
  const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
3330
3508
  if (!isNil(visible)) {
3331
3509
  selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
@@ -3337,7 +3515,7 @@ class AbstractTableModel extends GarbageCollector {
3337
3515
  if (isFunction(formFactory)) {
3338
3516
  this._createForm = formFactory;
3339
3517
  }
3340
- const columnId = 'editControls';
3518
+ const columnId = "editControls";
3341
3519
  return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
3342
3520
  }
3343
3521
  addCustomColumn(columnId, dataAccessor) {
@@ -3379,7 +3557,7 @@ class AbstractTableModel extends GarbageCollector {
3379
3557
  }
3380
3558
  startEditSession(row) {
3381
3559
  const rowId = this.identityOf(row);
3382
- if (this._rowsBeingEdited.query().indexOf(row) > -1) {
3560
+ if (this._rowsBeingEdited$.query().indexOf(row) > -1) {
3383
3561
  return lang.illegalState(`Row with id=${rowId} already being edited`);
3384
3562
  }
3385
3563
  // todo: pass the factories to the edit session so we can make the whole lot pluggable?
@@ -3387,12 +3565,12 @@ class AbstractTableModel extends GarbageCollector {
3387
3565
  const saveCommand = this.saveCommandFactory.create(form);
3388
3566
  const editSession = new EditSession(rowId, row, form, saveCommand);
3389
3567
  const { when } = Dsl.disposeWith(editSession);
3390
- when(editSession.liveRowValue).changes((editedValue) => {
3391
- this._rowsBeingEdited.replaceOrPush(editedValue);
3392
- }, { initialValue: 'triggerChangeUnlessNil' });
3568
+ when(editSession.liveRowValue$).changes((editedValue) => {
3569
+ this._rowsBeingEdited$.replaceOrPush(editedValue);
3570
+ }, { initialValue: "triggerChangeUnlessNil" });
3393
3571
  this._editorSessions.push(editSession);
3394
3572
  editSession.onDispose(() => {
3395
- this._rowsBeingEdited.remove(editSession.liveRowValue.value);
3573
+ this._rowsBeingEdited$.remove(editSession.liveRowValue$.value);
3396
3574
  this._editorSessions.remove(editSession);
3397
3575
  });
3398
3576
  return editSession;
@@ -3402,7 +3580,7 @@ class AbstractTableModel extends GarbageCollector {
3402
3580
  }
3403
3581
  cancelAllEditorSessions() {
3404
3582
  this._editorSessions.runInTransaction((draft) => {
3405
- this._rowsBeingEdited.runInTransaction(() => {
3583
+ this._rowsBeingEdited$.runInTransaction(() => {
3406
3584
  draft.value.forEach(session => session.dispose());
3407
3585
  });
3408
3586
  });
@@ -3411,7 +3589,7 @@ class AbstractTableModel extends GarbageCollector {
3411
3589
  return this.isRowSelectionEnabled() && column.isRowSelectionEnabled();
3412
3590
  }
3413
3591
  isRowSelectionEnabled() {
3414
- return this.hasUserSelectionModel() && !this.rowSelectionDisabledOnAllColumns.value;
3592
+ return this.hasUserSelectionModel() && !this.rowSelectionDisabledOnAllColumns$.value;
3415
3593
  }
3416
3594
  hasUserSelectionModel() {
3417
3595
  return !!this.selectionColumnModel?.selectionModel.getDelegate();
@@ -3440,7 +3618,7 @@ class AbstractTableModel extends GarbageCollector {
3440
3618
  }
3441
3619
  TrackExternal.oneTimeBinding(AbstractTableModel);
3442
3620
 
3443
- class TableCellRendererComponent extends DisposableComponent {
3621
+ class TableCellComponent extends DisposableComponent {
3444
3622
  constructor() {
3445
3623
  super();
3446
3624
  this.defaultClassNames = 'aup-cell-renderer';
@@ -3452,7 +3630,7 @@ class TableCellRendererComponent extends DisposableComponent {
3452
3630
  }
3453
3631
  ngOnInit() {
3454
3632
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
3455
- this.firstEditableColumn = chain(this.tableModel.firstEditableColumn).equals(this.column); // this would break if the column changed.
3633
+ this.firstEditableColumn = chain(this.tableModel.firstEditableColumn$).equals(this.column); // this would break if the column changed.
3456
3634
  this.column.attachCell(this);
3457
3635
  }
3458
3636
  hasActiveEditor() {
@@ -3499,11 +3677,11 @@ class TableCellRendererComponent extends DisposableComponent {
3499
3677
  };
3500
3678
  }
3501
3679
  }
3502
- TableCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3503
- 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"] }] });
3504
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableCellRendererComponent, decorators: [{
3680
+ TableCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3681
+ 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"] }] });
3682
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableCellComponent, decorators: [{
3505
3683
  type: Component,
3506
- 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: [""] }]
3684
+ 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: [""] }]
3507
3685
  }], ctorParameters: function () { return []; }, propDecorators: { row: [{
3508
3686
  type: Input
3509
3687
  }], column: [{
@@ -3523,7 +3701,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3523
3701
  args: ['class.padChild']
3524
3702
  }] } });
3525
3703
 
3526
- class TableHeaderCellRendererComponent {
3704
+ class TableHeaderCellComponent {
3527
3705
  constructor() {
3528
3706
  this.defaultClassNames = 'aup-header-cell-renderer';
3529
3707
  }
@@ -3538,11 +3716,11 @@ class TableHeaderCellRendererComponent {
3538
3716
  return this[HEADER_CELL_RENDERER_PORTAL];
3539
3717
  }
3540
3718
  }
3541
- TableHeaderCellRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableHeaderCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3542
- 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"] }] });
3543
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableHeaderCellRendererComponent, decorators: [{
3719
+ TableHeaderCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3720
+ 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"] }] });
3721
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TableHeaderCellComponent, decorators: [{
3544
3722
  type: Component,
3545
- 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"] }]
3723
+ 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"] }]
3546
3724
  }], ctorParameters: function () { return []; }, propDecorators: { column: [{
3547
3725
  type: Input
3548
3726
  }], defaultClassNames: [{
@@ -3628,7 +3806,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3628
3806
  /**
3629
3807
  * Create your model:
3630
3808
  * @example
3631
- * this.heroTableModel = TableModel.fromList(heroList, table => {
3809
+ * this.heroTableModel = new TableModel(heroList, table => {
3632
3810
  * table.pluck("firstName");
3633
3811
  * table.pluck("lastName");
3634
3812
  * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
@@ -3640,7 +3818,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3640
3818
  *
3641
3819
  * Column templates
3642
3820
  * @example
3643
- * this.heroTableModel = TableModel.fromList(heroList, table => {
3821
+ * this.heroTableModel = new TableModel(heroList, table => {
3644
3822
  * table.pluck("firstName");
3645
3823
  * table.pluck("lastName");
3646
3824
  * table.addTemplateColumn("specialColumn");
@@ -3686,17 +3864,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3686
3864
  * }
3687
3865
  */
3688
3866
  class TableComponent extends AbstractTableComponent {
3689
- constructor(elementRef, ngZone) {
3690
- super(elementRef, ngZone);
3867
+ constructor(elementRef, ngZone, injector) {
3868
+ super(elementRef, ngZone, injector);
3691
3869
  }
3692
3870
  getModel() {
3693
3871
  return this.tableModel;
3694
3872
  }
3695
3873
  }
3696
- 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 });
3874
+ 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 });
3697
3875
  TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TableComponent, selector: "aup-table", inputs: { tableModel: "tableModel" }, providers: [
3698
3876
  { provide: AbstractTableComponent, useExisting: TableComponent }
3699
- ], 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"] }] });
3877
+ ], 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"] }] });
3700
3878
  __decorate([
3701
3879
  TrackExternal(),
3702
3880
  __metadata("design:type", AbstractTableModel)
@@ -3705,8 +3883,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
3705
3883
  type: Component,
3706
3884
  args: [{ selector: 'aup-table', providers: [
3707
3885
  { provide: AbstractTableComponent, useExisting: TableComponent }
3708
- ], 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"] }]
3709
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { tableModel: [{
3886
+ ], 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"] }]
3887
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { tableModel: [{
3710
3888
  type: Input
3711
3889
  }] } });
3712
3890
 
@@ -4285,17 +4463,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4285
4463
  * }
4286
4464
  */
4287
4465
  class TreeTableComponent extends AbstractTableComponent {
4288
- constructor(elementRef, ngZone) {
4289
- super(elementRef, ngZone);
4466
+ constructor(elementRef, ngZone, injector) {
4467
+ super(elementRef, ngZone, injector);
4290
4468
  }
4291
4469
  getModel() {
4292
4470
  return this.treeTableModel;
4293
4471
  }
4294
4472
  }
4295
- 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 });
4473
+ 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 });
4296
4474
  TreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TreeTableComponent, selector: "aup-tree-table", inputs: { treeTableModel: "treeTableModel" }, providers: [
4297
4475
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
4298
- ], 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"] }] });
4476
+ ], 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"] }] });
4299
4477
  __decorate([
4300
4478
  TrackExternal(),
4301
4479
  __metadata("design:type", TreeTableModel)
@@ -4304,8 +4482,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4304
4482
  type: Component,
4305
4483
  args: [{ selector: 'aup-tree-table', providers: [
4306
4484
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
4307
- ], 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"] }]
4308
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { treeTableModel: [{
4485
+ ], 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"] }]
4486
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { treeTableModel: [{
4309
4487
  type: Input
4310
4488
  }] } });
4311
4489
 
@@ -4529,11 +4707,12 @@ ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
4529
4707
  EditRowControls,
4530
4708
  ColumnTemplateDirective,
4531
4709
  DefaultCellRendererComponent,
4532
- TableCellRendererComponent,
4533
- SelectCellRendererComponent,
4534
- SelectHeaderCellRendererComponent,
4710
+ DefaultListCellRendererComponent,
4711
+ TableCellComponent,
4712
+ SelectionCellComponent,
4713
+ SelectionHeaderCellComponent,
4535
4714
  DefaultHeaderCellRendererComponent,
4536
- TableHeaderCellRendererComponent,
4715
+ TableHeaderCellComponent,
4537
4716
  IconComponent,
4538
4717
  SectionHeaderComponent,
4539
4718
  TableRowMenuComponent,
@@ -4692,11 +4871,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4692
4871
  EditRowControls,
4693
4872
  ColumnTemplateDirective,
4694
4873
  DefaultCellRendererComponent,
4695
- TableCellRendererComponent,
4696
- SelectCellRendererComponent,
4697
- SelectHeaderCellRendererComponent,
4874
+ DefaultListCellRendererComponent,
4875
+ TableCellComponent,
4876
+ SelectionCellComponent,
4877
+ SelectionHeaderCellComponent,
4698
4878
  DefaultHeaderCellRendererComponent,
4699
- TableHeaderCellRendererComponent,
4879
+ TableHeaderCellComponent,
4700
4880
  IconComponent,
4701
4881
  SectionHeaderComponent,
4702
4882
  TableRowMenuComponent,
@@ -4820,9 +5000,15 @@ class ActivityActionsComponent extends DisposableComponent {
4820
5000
  this.cancelCommand = activity.cancelCommand;
4821
5001
  this.cdr.detectChanges();
4822
5002
  }
5003
+ focusConfirm() {
5004
+ this.confirmCommandComponent.tryAndFocus();
5005
+ }
5006
+ focusCancel() {
5007
+ this.cancelCommandComponent.tryAndFocus();
5008
+ }
4823
5009
  }
4824
5010
  ActivityActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ActivityActionsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
4825
- ActivityActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: { confirmCommand: "confirmCommand", cancelCommand: "cancelCommand", faces: "faces", confirmFace: "confirmFace", cancelFace: "cancelFace", style: "style", layout: "layout", align: "align" }, host: { properties: { "attr.layout": "this.layout", "attr.align": "this.align" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"content\">\n <ng-content></ng-content>\n</div>\n<ng-container *ngIf=\"hasConfirmFace()\">\n <aup-command class=\"confirm\" [command]=\"confirmCommand\" [face]=\"confirmFace\" data-cy=\"confirm-command\"></aup-command>\n</ng-container>\n<ng-container *ngIf=\"hasCancelFace()\">\n <aup-command class=\"cancel\" [command]=\"cancelCommand\" [face]=\"cancelFace\" data-cy=\"cancel-command\"></aup-command>\n</ng-container>\n", styles: [":host{display:grid;grid-template-rows:auto;align-items:center;justify-content:end;--resolved-activity-actions-gap: var(--activity-actions-gap, 8px)}:host[layout=block][align=start]{grid-template-areas:\"cancel confirm content\";grid-template-columns:auto auto 1fr}:host[layout=block][align=start] .confirm{margin-left:var(--resolved-activity-actions-gap)}:host[layout=block][align=end]{grid-template-areas:\"content cancel confirm\";grid-template-columns:1fr auto auto}:host[layout=block][align=end] .confirm{margin-left:var(--resolved-activity-actions-gap)}:host[layout=block][align=stretch]{grid-template-areas:\"cancel content confirm\";grid-template-columns:auto 1fr auto}:host[layout=inline]{grid-template-areas:\"confirm cancel content\";grid-template-columns:auto auto 1fr}:host[layout=inline] .cancel{margin-left:var(--resolved-activity-actions-gap)}.cancel{grid-area:cancel}.confirm{grid-area:confirm}.content{grid-area:content;text-align:left}\n"], components: [{ type: CommandComponent, selector: "aup-command", inputs: ["command", "faceModel", "face", "busyFaceModel", "busyFace", "alignFace"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
5011
+ ActivityActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: { confirmCommand: "confirmCommand", cancelCommand: "cancelCommand", faces: "faces", confirmFace: "confirmFace", cancelFace: "cancelFace", style: "style", layout: "layout", align: "align" }, host: { properties: { "attr.layout": "this.layout", "attr.align": "this.align" } }, viewQueries: [{ propertyName: "confirmCommandComponent", first: true, predicate: ["confirmCommandComponent"], descendants: true }, { propertyName: "cancelCommandComponent", first: true, predicate: ["cancelCommandComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"content\">\n <ng-content></ng-content>\n</div>\n<ng-container *ngIf=\"hasConfirmFace()\">\n <aup-command #confirmCommandComponent class=\"confirm\" [command]=\"confirmCommand\" [face]=\"confirmFace\" data-cy=\"confirm-command\"></aup-command>\n</ng-container>\n<ng-container *ngIf=\"hasCancelFace()\">\n <aup-command #cancelCommandComponent class=\"cancel\" [command]=\"cancelCommand\" [face]=\"cancelFace\" data-cy=\"cancel-command\"></aup-command>\n</ng-container>\n", styles: [":host{display:grid;grid-template-rows:auto;align-items:center;justify-content:end;--resolved-activity-actions-gap: var(--activity-actions-gap, 8px)}:host[layout=block][align=start]{grid-template-areas:\"cancel confirm content\";grid-template-columns:auto auto 1fr}:host[layout=block][align=start] .confirm{margin-left:var(--resolved-activity-actions-gap)}:host[layout=block][align=end]{grid-template-areas:\"content cancel confirm\";grid-template-columns:1fr auto auto}:host[layout=block][align=end] .confirm{margin-left:var(--resolved-activity-actions-gap)}:host[layout=block][align=stretch]{grid-template-areas:\"cancel content confirm\";grid-template-columns:auto 1fr auto}:host[layout=inline]{grid-template-areas:\"confirm cancel content\";grid-template-columns:auto auto 1fr}:host[layout=inline] .cancel{margin-left:var(--resolved-activity-actions-gap)}.cancel{grid-area:cancel}.confirm{grid-area:confirm}.content{grid-area:content;text-align:left}\n"], components: [{ type: CommandComponent, selector: "aup-command", inputs: ["command", "faceModel", "face", "busyFaceModel", "busyFace", "alignFace"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
4826
5012
  __decorate([
4827
5013
  TrackExternal(),
4828
5014
  __metadata("design:type", Command)
@@ -4833,8 +5019,14 @@ __decorate([
4833
5019
  ], ActivityActionsComponent.prototype, "cancelCommand", void 0);
4834
5020
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ActivityActionsComponent, decorators: [{
4835
5021
  type: Component,
4836
- args: [{ selector: 'aup-activity-actions', template: "<div class=\"content\">\n <ng-content></ng-content>\n</div>\n<ng-container *ngIf=\"hasConfirmFace()\">\n <aup-command class=\"confirm\" [command]=\"confirmCommand\" [face]=\"confirmFace\" data-cy=\"confirm-command\"></aup-command>\n</ng-container>\n<ng-container *ngIf=\"hasCancelFace()\">\n <aup-command class=\"cancel\" [command]=\"cancelCommand\" [face]=\"cancelFace\" data-cy=\"cancel-command\"></aup-command>\n</ng-container>\n", styles: [":host{display:grid;grid-template-rows:auto;align-items:center;justify-content:end;--resolved-activity-actions-gap: var(--activity-actions-gap, 8px)}:host[layout=block][align=start]{grid-template-areas:\"cancel confirm content\";grid-template-columns:auto auto 1fr}:host[layout=block][align=start] .confirm{margin-left:var(--resolved-activity-actions-gap)}:host[layout=block][align=end]{grid-template-areas:\"content cancel confirm\";grid-template-columns:1fr auto auto}:host[layout=block][align=end] .confirm{margin-left:var(--resolved-activity-actions-gap)}:host[layout=block][align=stretch]{grid-template-areas:\"cancel content confirm\";grid-template-columns:auto 1fr auto}:host[layout=inline]{grid-template-areas:\"confirm cancel content\";grid-template-columns:auto auto 1fr}:host[layout=inline] .cancel{margin-left:var(--resolved-activity-actions-gap)}.cancel{grid-area:cancel}.confirm{grid-area:confirm}.content{grid-area:content;text-align:left}\n"] }]
4837
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { confirmCommand: [{
5022
+ args: [{ selector: 'aup-activity-actions', template: "<div class=\"content\">\n <ng-content></ng-content>\n</div>\n<ng-container *ngIf=\"hasConfirmFace()\">\n <aup-command #confirmCommandComponent class=\"confirm\" [command]=\"confirmCommand\" [face]=\"confirmFace\" data-cy=\"confirm-command\"></aup-command>\n</ng-container>\n<ng-container *ngIf=\"hasCancelFace()\">\n <aup-command #cancelCommandComponent class=\"cancel\" [command]=\"cancelCommand\" [face]=\"cancelFace\" data-cy=\"cancel-command\"></aup-command>\n</ng-container>\n", styles: [":host{display:grid;grid-template-rows:auto;align-items:center;justify-content:end;--resolved-activity-actions-gap: var(--activity-actions-gap, 8px)}:host[layout=block][align=start]{grid-template-areas:\"cancel confirm content\";grid-template-columns:auto auto 1fr}:host[layout=block][align=start] .confirm{margin-left:var(--resolved-activity-actions-gap)}:host[layout=block][align=end]{grid-template-areas:\"content cancel confirm\";grid-template-columns:1fr auto auto}:host[layout=block][align=end] .confirm{margin-left:var(--resolved-activity-actions-gap)}:host[layout=block][align=stretch]{grid-template-areas:\"cancel content confirm\";grid-template-columns:auto 1fr auto}:host[layout=inline]{grid-template-areas:\"confirm cancel content\";grid-template-columns:auto auto 1fr}:host[layout=inline] .cancel{margin-left:var(--resolved-activity-actions-gap)}.cancel{grid-area:cancel}.confirm{grid-area:confirm}.content{grid-area:content;text-align:left}\n"] }]
5023
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { confirmCommandComponent: [{
5024
+ type: ViewChild,
5025
+ args: ["confirmCommandComponent"]
5026
+ }], cancelCommandComponent: [{
5027
+ type: ViewChild,
5028
+ args: ["cancelCommandComponent"]
5029
+ }], confirmCommand: [{
4838
5030
  type: Input
4839
5031
  }], cancelCommand: [{
4840
5032
  type: Input
@@ -4869,30 +5061,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
4869
5061
  });
4870
5062
  })(ActivityActionsComponent || (ActivityActionsComponent = {}));
4871
5063
 
4872
- const ACTIVITY_DATA = new InjectionToken('InteractionActivityData');
5064
+ const ACTIVITY_DATA = new InjectionToken("InteractionActivityData");
4873
5065
  class Activity extends DisposableComponent {
4874
5066
  constructor() {
4875
5067
  super();
4876
- this._busyModel = this.registerDisposable(new DelegatingValueModel().withDefault(false));
4877
- this._focusedModel = this.registerDisposable(new DelegatingValueModel());
4878
- this.class = 'aup-activity';
5068
+ this.activityReadyListeners = new EventListenerList();
5069
+ this._busy$ = this.registerDisposable(new DelegatingValueModel().withDefault(false));
5070
+ this._focused$ = this.registerDisposable(new DelegatingValueModel());
5071
+ this.class = "aup-activity";
4879
5072
  this.busyWhile(this.confirmCommand.busy);
4880
5073
  }
4881
5074
  get isFocused() {
4882
- return this._focusedModel.value;
5075
+ return this._focused$.value;
4883
5076
  }
4884
5077
  initialise(nestedInteractionContext, activityContext) {
4885
5078
  const { chain, when } = Dsl.disposeWith(this);
4886
5079
  assert$1.isNil(this._activityContext);
4887
5080
  this._activityContext = activityContext;
4888
5081
  this._interactionContext = nestedInteractionContext;
4889
- this._focusedModel.setDelegate(activityContext.focused);
4890
- when(this._focusedModel).becomesTruthy(() => {
4891
- this.onActivityReady();
5082
+ this._focused$.setDelegate(activityContext.focused);
5083
+ when(this._focused$).becomesTruthy(() => {
5084
+ this.notifyActivityReady();
4892
5085
  });
4893
5086
  }
4894
5087
  ngAfterViewInit() {
4895
- this.activityActions?.initCommands(this);
5088
+ if (this.activityActions) {
5089
+ this.initialiseActivityAction(this.activityActions);
5090
+ }
5091
+ }
5092
+ initialiseActivityAction(activityActions) {
5093
+ activityActions.initCommands(this);
4896
5094
  }
4897
5095
  get interactionContext() {
4898
5096
  assert$1.isTruthy(this.isInitialised());
@@ -4904,27 +5102,30 @@ class Activity extends DisposableComponent {
4904
5102
  cancel(error) {
4905
5103
  this._activityContext.onCancel(error);
4906
5104
  }
4907
- // @Trace()
4908
- onActivityReady() {
5105
+ notifyActivityReady() {
5106
+ this.activityReadyListeners.fire(l => l(this));
4909
5107
  }
4910
- get busy() {
4911
- return this._busyModel.readonly;
5108
+ onActivityReady(callback) {
5109
+ return this.activityReadyListeners.add(callback);
4912
5110
  }
4913
- get focused() {
4914
- return this._focusedModel.readonly;
5111
+ get busy$() {
5112
+ return this._busy$.readonly;
5113
+ }
5114
+ get focused$() {
5115
+ return this._focused$.readonly;
4915
5116
  }
4916
5117
  busyWhile(busyModel) {
4917
- this._busyModel.setDelegate(busyModel);
5118
+ this._busy$.setDelegate(busyModel);
4918
5119
  }
4919
5120
  isBusy() {
4920
- return this._busyModel.value;
5121
+ return this._busy$.value;
4921
5122
  }
4922
5123
  isInitialised() {
4923
5124
  return !!this._activityContext;
4924
5125
  }
4925
5126
  }
4926
5127
  Activity.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: Activity, deps: [], target: i0.ɵɵFactoryTarget.Component });
4927
- Activity.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: Activity, selector: "ng-component", host: { properties: { "class": "this.class", "attr.focused": "this.isFocused" } }, viewQueries: [{ propertyName: "activityActions", first: true, predicate: ActivityActionsComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
5128
+ Activity.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: Activity, selector: "ng-component", host: { properties: { "class": "this.class", "attr.focused": "this.isFocused" } }, viewQueries: [{ propertyName: "activityActions", first: true, predicate: ActivityActionsComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "", isInline: true });
4928
5129
  __decorate([
4929
5130
  TrackExternal(),
4930
5131
  __metadata("design:type", Command)
@@ -4936,17 +5137,17 @@ __decorate([
4936
5137
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: Activity, decorators: [{
4937
5138
  type: Component,
4938
5139
  args: [{
4939
- template: ''
5140
+ template: ""
4940
5141
  }]
4941
5142
  }], ctorParameters: function () { return []; }, propDecorators: { activityActions: [{
4942
5143
  type: ViewChild,
4943
5144
  args: [ActivityActionsComponent]
4944
5145
  }], confirmCommand: [], cancelCommand: [], class: [{
4945
5146
  type: HostBinding,
4946
- args: ['class']
5147
+ args: ["class"]
4947
5148
  }], isFocused: [{
4948
5149
  type: HostBinding,
4949
- args: ['attr.focused']
5150
+ args: ["attr.focused"]
4950
5151
  }] } });
4951
5152
 
4952
5153
  var Alert;
@@ -4980,6 +5181,11 @@ class AbstractDialogComponent extends Activity {
4980
5181
  color: () => this.color || 'primary',
4981
5182
  style: () => 'raised'
4982
5183
  };
5184
+ this.onActivityReady(() => {
5185
+ if (this.activityActions) {
5186
+ this.isDestructive() ? this.activityActions.focusCancel() : this.activityActions.focusConfirm();
5187
+ }
5188
+ });
4983
5189
  }
4984
5190
  getConfig() {
4985
5191
  return lang$1.abstractMethod(this.constructor);
@@ -6962,7 +7168,7 @@ class ActivityRef {
6962
7168
  },
6963
7169
  focused: this.focusedModel.readonly
6964
7170
  });
6965
- this._activityBusy.setDelegate(this._activity.busy);
7171
+ this._activityBusy.setDelegate(this._activity.busy$);
6966
7172
  }
6967
7173
  finishActivity(resolveOrReject) {
6968
7174
  assert.isFalsey(this.isComplete());
@@ -7014,7 +7220,10 @@ class ActivityOutletComponent {
7014
7220
  loadActivity(activityRef) {
7015
7221
  const injector = Injector.create({
7016
7222
  providers: [
7017
- { provide: ACTIVITY_DATA, useValue: activityRef.activityData }
7223
+ {
7224
+ provide: ACTIVITY_DATA,
7225
+ useValue: activityRef.activityData
7226
+ }
7018
7227
  ],
7019
7228
  parent: this.injector
7020
7229
  });
@@ -7823,13 +8032,11 @@ class InputActivity extends Activity {
7823
8032
  this.cancel();
7824
8033
  });
7825
8034
  this.busyWhile(this.confirmCommand.busy);
8035
+ this.onActivityReady(() => this.valueModel.focusContext.requestFocus());
7826
8036
  }
7827
8037
  get layout() {
7828
8038
  return this.data?.layout ?? InputActivity.Layout.BLOCK;
7829
8039
  }
7830
- onActivityReady() {
7831
- this.valueModel.focusContext.requestFocus();
7832
- }
7833
8040
  get additionalCssClassName() {
7834
8041
  return this.data.cssClassName ?? '';
7835
8042
  }
@@ -8042,14 +8249,6 @@ class TableModel extends AbstractTableModel {
8042
8249
  }
8043
8250
  this.setDataSource(sourceOfTruth);
8044
8251
  }
8045
- /**
8046
- * @deprecated use new TableModel(sourceOfTruth, table => {...}); instead.
8047
- * @param sourceOfTruth
8048
- * @param builder
8049
- */
8050
- static fromList(sourceOfTruth, builder) {
8051
- return new TableModel(sourceOfTruth, builder);
8052
- }
8053
8252
  addSelectionColumn(selectionModel, showSelectionColumn) {
8054
8253
  return this._addSelectionColumn(selectionModel, showSelectionColumn);
8055
8254
  }
@@ -9991,5 +10190,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
9991
10190
  * Generated bundle index. Do not edit.
9992
10191
  */
9993
10192
 
9994
- 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 };
10193
+ 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 };
9995
10194
  //# sourceMappingURL=coolon-angular-ui-powerups.mjs.map