@coolon/angular-ui-powerups 16.1.0-aplpha.88 → 16.1.0-aplpha.9

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 (145) hide show
  1. package/assets/activities/input-activities.scss +2 -10
  2. package/assets/form.scss +27 -62
  3. package/assets/table.scss +24 -13
  4. package/assets/tabs.scss +6 -2
  5. package/esm2022/lib/animations/slide-animations.mjs +1 -6
  6. package/esm2022/lib/components/cards/card-container/card-container.component.mjs +4 -4
  7. package/esm2022/lib/components/commands/command/command.component.mjs +10 -24
  8. package/esm2022/lib/components/commands/command-face/command-face.component.mjs +3 -11
  9. package/esm2022/lib/components/commands/command-face.mjs +11 -11
  10. package/esm2022/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +11 -11
  11. package/esm2022/lib/components/commands/group/tool-bar/tool-bar.component.mjs +4 -6
  12. package/esm2022/lib/components/components.module.mjs +8 -22
  13. package/esm2022/lib/components/disposable-component.mjs +37 -19
  14. package/esm2022/lib/components/exports.mjs +2 -6
  15. package/esm2022/lib/components/forms/abstract-input.component.mjs +12 -55
  16. package/esm2022/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +2 -2
  17. package/esm2022/lib/components/forms/checkbox-input/checkbox-input.component.mjs +3 -3
  18. package/esm2022/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +2 -2
  19. package/esm2022/lib/components/forms/number-input/number-input.component.mjs +10 -49
  20. package/esm2022/lib/components/forms/password-input/password-input.component.mjs +3 -40
  21. package/esm2022/lib/components/forms/select-input/select-input.component.mjs +10 -11
  22. package/esm2022/lib/components/forms/string-input/string-input.component.mjs +9 -21
  23. package/esm2022/lib/components/icon/icon.component.mjs +4 -7
  24. package/esm2022/lib/components/resize-aware.component.mjs +24 -61
  25. package/esm2022/lib/components/switch-case/switch-case.component.mjs +7 -5
  26. package/esm2022/lib/components/tables/abstract-table-model.mjs +25 -42
  27. package/esm2022/lib/components/tables/abstract-table.component.mjs +5 -19
  28. package/esm2022/lib/components/tables/column/column-list-model.mjs +44 -0
  29. package/esm2022/lib/components/tables/column/column-model.mjs +3 -13
  30. package/esm2022/lib/components/tables/column/custom-template-column-model.mjs +3 -3
  31. package/esm2022/lib/components/tables/column/custom-value-column-model.mjs +3 -3
  32. package/esm2022/lib/components/tables/column/editor-controls-column-model.mjs +3 -3
  33. package/esm2022/lib/components/tables/column/list-propery-column-model.mjs +3 -3
  34. package/esm2022/lib/components/tables/column/property-column-model.mjs +3 -3
  35. package/esm2022/lib/components/tables/column/selection-column-model.mjs +3 -3
  36. package/esm2022/lib/components/tables/editor/edit-session.mjs +2 -4
  37. package/esm2022/lib/components/tables/filter/table-filter-model.mjs +2 -4
  38. package/esm2022/lib/components/tables/filter/text-search-predicate.mjs +2 -16
  39. package/esm2022/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +3 -3
  40. package/esm2022/lib/components/tables/renderer/table-body/table-body.component.mjs +41 -132
  41. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu.component.mjs +2 -7
  42. package/esm2022/lib/components/tables/table/table.component.mjs +68 -19
  43. package/esm2022/lib/components/tables/tree-table/decorated-tree-node.mjs +4 -5
  44. package/esm2022/lib/components/tables/tree-table/tree-label-column-model.mjs +3 -3
  45. package/esm2022/lib/components/tables/tree-table/tree-table-component.mjs +4 -7
  46. package/esm2022/lib/components/tables/tree-table/tree-table-model.mjs +3 -3
  47. package/esm2022/lib/components/text/markdown/markdown.component.mjs +2 -2
  48. package/esm2022/lib/directives/directives.module.mjs +1 -1
  49. package/esm2022/lib/directives/exports.mjs +1 -2
  50. package/esm2022/lib/directives/highlight.pipe.mjs +2 -2
  51. package/esm2022/lib/interaction/activity.mjs +4 -3
  52. package/esm2022/lib/interaction/alert.mjs +2 -2
  53. package/esm2022/lib/interaction/components/abstract-confirm-dialog.component.mjs +4 -8
  54. package/esm2022/lib/interaction/components/activity-actions/activity-actions.component.mjs +9 -7
  55. package/esm2022/lib/interaction/components/activity-container/activity-container.component.mjs +11 -28
  56. package/esm2022/lib/interaction/components/activity-title/activity-title.component.mjs +4 -4
  57. package/esm2022/lib/interaction/components/editors/edit-context.mjs +1 -1
  58. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +2 -2
  59. package/esm2022/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +3 -3
  60. package/esm2022/lib/interaction/components/input-activities/input-activity.mjs +2 -2
  61. package/esm2022/lib/interaction/components/input-activities/select-input-activity.mjs +1 -3
  62. package/esm2022/lib/interaction/components/input-activities/string-input-activity.mjs +4 -8
  63. package/esm2022/lib/interaction/directives/interaction-context-trigger-for.directive.mjs +2 -2
  64. package/esm2022/lib/interaction/exports.mjs +1 -2
  65. package/esm2022/lib/interaction/interaction.module.mjs +9 -7
  66. package/esm2022/lib/place/components/list-place-nav/list-place-nav.component.mjs +4 -3
  67. package/esm2022/lib/place/components/place-outlet/place-outlet.component.mjs +9 -7
  68. package/esm2022/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +2 -2
  69. package/esm2022/lib/place/guards/consolidated-param-map.mjs +4 -4
  70. package/esm2022/lib/place/navigation/place-component-deactivation-handler.mjs +2 -2
  71. package/esm2022/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs +6 -3
  72. package/esm2022/lib/place/place-component.mjs +7 -7
  73. package/esm2022/lib/place/place-definition.mjs +3 -3
  74. package/esm2022/lib/place/place-history.mjs +2 -2
  75. package/esm2022/lib/place/place.decorator.mjs +2 -2
  76. package/esm2022/lib/place/place.module.mjs +5 -1
  77. package/esm2022/lib/place/route/formatter.mjs +2 -2
  78. package/esm2022/lib/place/route/parameter-decorators.mjs +50 -54
  79. package/esm2022/lib/place/route/parameter-definition.mjs +2 -2
  80. package/esm2022/lib/place/url-snapshot.mjs +3 -3
  81. package/esm2022/lib/place/visit-segment.mjs +2 -2
  82. package/esm2022/lib/place/visit.mjs +2 -2
  83. package/fesm2022/coolon-angular-ui-powerups.mjs +488 -1078
  84. package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
  85. package/lib/animations/slide-animations.d.ts +0 -1
  86. package/lib/components/cards/card-container/card-container.component.d.ts +1 -1
  87. package/lib/components/commands/command/command.component.d.ts +1 -2
  88. package/lib/components/commands/command-face/command-face.component.d.ts +0 -2
  89. package/lib/components/commands/command-face.d.ts +7 -5
  90. package/lib/components/commands/group/popup-menu/abstract-popup-menu.component.d.ts +2 -2
  91. package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +1 -1
  92. package/lib/components/components.module.d.ts +53 -55
  93. package/lib/components/disposable-component.d.ts +8 -11
  94. package/lib/components/exports.d.ts +1 -5
  95. package/lib/components/forms/abstract-input.component.d.ts +5 -13
  96. package/lib/components/forms/number-input/number-input.component.d.ts +4 -8
  97. package/lib/components/forms/password-input/password-input.component.d.ts +1 -7
  98. package/lib/components/forms/select-input/select-input.component.d.ts +3 -4
  99. package/lib/components/forms/string-input/string-input.component.d.ts +1 -3
  100. package/lib/components/resize-aware.component.d.ts +5 -24
  101. package/lib/components/switch-case/switch-case.component.d.ts +3 -2
  102. package/lib/components/tables/abstract-table-model.d.ts +5 -10
  103. package/lib/components/tables/abstract-table.component.d.ts +2 -3
  104. package/lib/components/tables/column/column-list-model.d.ts +13 -0
  105. package/lib/components/tables/column/column-model.d.ts +1 -5
  106. package/lib/components/tables/column/custom-template-column-model.d.ts +1 -2
  107. package/lib/components/tables/column/custom-value-column-model.d.ts +1 -2
  108. package/lib/components/tables/column/editor-controls-column-model.d.ts +1 -2
  109. package/lib/components/tables/column/list-propery-column-model.d.ts +1 -2
  110. package/lib/components/tables/column/property-column-model.d.ts +1 -2
  111. package/lib/components/tables/column/selection-column-model.d.ts +1 -2
  112. package/lib/components/tables/filter/text-search-predicate.d.ts +0 -9
  113. package/lib/components/tables/renderer/table-body/table-body.component.d.ts +16 -35
  114. package/lib/components/tables/renderer/table-more-menu/table-more-menu.component.d.ts +1 -2
  115. package/lib/components/tables/table/table.component.d.ts +10 -5
  116. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +1 -2
  117. package/lib/components/tables/tree-table/tree-table-component.d.ts +0 -3
  118. package/lib/directives/exports.d.ts +0 -1
  119. package/lib/interaction/activity.d.ts +2 -2
  120. package/lib/interaction/components/abstract-confirm-dialog.component.d.ts +0 -1
  121. package/lib/interaction/components/activity-actions/activity-actions.component.d.ts +3 -1
  122. package/lib/interaction/components/activity-container/activity-container.component.d.ts +3 -7
  123. package/lib/interaction/components/activity-title/activity-title.component.d.ts +1 -1
  124. package/lib/interaction/components/editors/edit-context.d.ts +1 -1
  125. package/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.d.ts +1 -1
  126. package/lib/interaction/exports.d.ts +0 -1
  127. package/lib/interaction/interaction.module.d.ts +28 -28
  128. package/lib/place/components/place-outlet/place-outlet.component.d.ts +4 -3
  129. package/lib/place/place-component.d.ts +4 -4
  130. package/lib/place/place.module.d.ts +5 -4
  131. package/package.json +5 -7
  132. package/esm2022/lib/components/forms/form-field.mjs +0 -2
  133. package/esm2022/lib/components/forms/search-input/search-input.component.mjs +0 -33
  134. package/esm2022/lib/components/loadable-component.mjs +0 -49
  135. package/esm2022/lib/components/tables/column/column-manager.mjs +0 -81
  136. package/esm2022/lib/components/tables/column/column-order-manager.mjs +0 -19
  137. package/esm2022/lib/directives/resize-observer.directive.mjs +0 -40
  138. package/esm2022/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.mjs +0 -129
  139. package/lib/components/forms/form-field.d.ts +0 -5
  140. package/lib/components/forms/search-input/search-input.component.d.ts +0 -10
  141. package/lib/components/loadable-component.d.ts +0 -17
  142. package/lib/components/tables/column/column-manager.d.ts +0 -19
  143. package/lib/components/tables/column/column-order-manager.d.ts +0 -20
  144. package/lib/directives/resize-observer.directive.d.ts +0 -16
  145. package/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.d.ts +0 -53
@@ -2,7 +2,7 @@ import { ObserversModule } from '@angular/cdk/observers';
2
2
  import * as i1$1 from '@angular/common';
3
3
  import { DOCUMENT, CommonModule } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { ElementRef, Directive, Inject, Host, Optional, Input, HostListener, ChangeDetectorRef, inject, NgZone, Injectable, Pipe, NgModule, Component, ContentChild, HostBinding, ChangeDetectionStrategy, ViewEncapsulation, InjectionToken, ViewChild, ViewChildren, EventEmitter, Output, SkipSelf, Self, ContentChildren, ComponentRef, Injector, PLATFORM_ID } from '@angular/core';
5
+ import { ElementRef, Directive, Inject, Host, Optional, Input, HostListener, inject, NgZone, Injectable, Pipe, NgModule, Component, ContentChild, HostBinding, ViewEncapsulation, InjectionToken, ViewChild, ViewChildren, EventEmitter, Output, SkipSelf, Self, ContentChildren, ComponentRef, Injector, PLATFORM_ID } from '@angular/core';
6
6
  import * as i2$4 from '@angular/forms';
7
7
  import { FormsModule } from '@angular/forms';
8
8
  import * as i4$2 from '@angular/material/form-field';
@@ -17,7 +17,7 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
17
17
  import * as i3$2 from '@angular/cdk/portal';
18
18
  import { ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';
19
19
  import * as i1$2 from '@angular/cdk/scrolling';
20
- import { CdkVirtualScrollViewport, CdkScrollableModule, ScrollingModule } from '@angular/cdk/scrolling';
20
+ import { CdkScrollableModule } from '@angular/cdk/scrolling';
21
21
  import * as i7 from '@angular/material/autocomplete';
22
22
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
23
23
  import * as i2 from '@angular/material/button';
@@ -38,34 +38,35 @@ import * as i2$6 from '@angular/material/table';
38
38
  import { MatTableModule } from '@angular/material/table';
39
39
  import * as i4$1 from '@angular/material/tooltip';
40
40
  import { MatTooltipModule } from '@angular/material/tooltip';
41
- import * as i4$5 from 'ng-table-virtual-scroll';
42
- import { TableVirtualScrollDataSource, TableVirtualScrollModule } from 'ng-table-virtual-scroll';
43
41
  import * as i1$3 from '@coolon/pectin';
44
- import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, Logger, proxify, ValueModel, Proxify, StoreInValueModel, Command, MutableListModel, StoreInListModel, Disposable, DelegatingListModel, MutableValueModel, DelegateToValueModel, FocusManager, EventListenerList, Guard, DelegatingFormListModel, Binding, DebugContext, DelegateToListModel, DelegatingFormValueModel, ListModel, Functions, PageController, SelectionModel, CanProxy, MultipleSelectionModel, WatchList, DirtyTrackingForm, ProxyRegistry, DelegatingCommand, ComputedListModel, Deferred, ReducingValueModel, AndValueModel } from '@coolon/pectin';
42
+ import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, MutableValueModel, Logger, proxify, ValueModel, Proxify, StoreInValueModel, Command, MutableListModel, StoreInListModel, Disposable, DelegatingListModel, DelegateToValueModel, FocusManager, EventListenerList, Guard, DelegatingFormListModel, Binding, DebugContext, DelegateToListModel, DelegatingFormValueModel, ListModel, Functions, PageController, SelectionModel, CanProxy, MultipleSelectionModel, AbstractComputedListModel, DirtyTrackingForm, ProxyRegistry, TransactionObserver, DelegatingCommand, PagedListModel, ComputedListModel, Deferred, ReducingValueModel, AndValueModel } from '@coolon/pectin';
45
43
  import { __decorate, __param, __metadata } from 'tslib';
46
44
  import * as i1 from '@angular/platform-browser';
47
45
  import escapeStringRegexp from 'escape-string-regexp';
48
- import { isEmpty, isString, isFunction, isNil, isInteger, isObject, isEqual, join, last, first, uniq, findLast, isNumber, isNaN as isNaN$1 } from 'lodash-es';
46
+ import { isEmpty, isString, isFunction, isNil, isInteger, isObject, isEqual, join, first, uniq, last as last$1, isNumber, isNaN as isNaN$1 } from 'lodash';
49
47
  import { marked } from 'marked';
50
- import { MemoizeGet, lang as lang$1, assert as assert$1, Stringy, Klass, Opts } from '@coolon/typescript-utilities';
48
+ import { Memoize } from '@typescript-plus/fast-memoize-decorator';
51
49
  import { Enum } from 'typescript-string-enums';
50
+ import { lang as lang$1, assert as assert$1, Stringy, Klass, Opts } from '@coolon/typescript-utilities';
52
51
  import * as i5 from '@angular/material/core';
53
- import { Memoize } from 'fast-typescript-memoize';
54
- import { produce } from 'immer';
52
+ import produce from 'immer';
55
53
  import ResizeObserver from 'resize-observer-polyfill';
56
- import { generateKeyBetween } from 'fractional-indexing';
54
+ import { isFunction as isFunction$1, isNil as isNil$1, isEmpty as isEmpty$1, last, findLast } from 'lodash-es';
57
55
  import * as i5$1 from '@angular/cdk/a11y';
58
56
  import { A11yModule } from '@angular/cdk/a11y';
57
+ import * as i7$1 from '@angular/flex-layout';
58
+ import { FlexModule, GridModule } from '@angular/flex-layout';
59
59
  import * as i1$6 from '@angular/material/dialog';
60
60
  import { MatDialogModule, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';
61
61
  import * as i1$4 from '@angular/router';
62
62
  import { ActivatedRouteSnapshot, UrlSegment, NavigationStart, NavigationEnd, NavigationError, NavigationCancel, RouterModule } from '@angular/router';
63
+ import { Memoize as Memoize$1 } from 'typescript-memoize';
63
64
  import 'reflect-metadata';
64
65
  import * as i1$5 from '@angular/cdk/overlay';
65
- import { style, trigger, transition, animate, group, query } from '@angular/animations';
66
66
  import { MatCardModule } from '@angular/material/card';
67
67
  import * as i3$3 from '@angular/material/list';
68
68
  import { MatListModule } from '@angular/material/list';
69
+ import { style, query, group, animate, trigger, transition } from '@angular/animations';
69
70
 
70
71
  class CommandDirective extends GarbageCollector {
71
72
  elementRef;
@@ -212,12 +213,11 @@ var Track;
212
213
 
213
214
  class DisposableComponent extends GarbageCollector {
214
215
  trackById = Track.byId();
215
- // #_loaded$ = new MutableValueModel<boolean>();
216
- // #asyncLoadables: Loadable[] = [];
217
- // #awaitedLoadables: Loadable[] = [];
216
+ #_loaded$ = new MutableValueModel();
217
+ #asyncLoadables = [];
218
+ #awaitedLoadables = [];
218
219
  #initCallbacks = [];
219
220
  #initialised = false;
220
- cdr = this.inject(ChangeDetectorRef);
221
221
  onInit(callback) {
222
222
  if (this.#initialised) {
223
223
  callback();
@@ -226,25 +226,44 @@ class DisposableComponent extends GarbageCollector {
226
226
  this.#initCallbacks.push(callback);
227
227
  }
228
228
  }
229
+ get loaded$() {
230
+ return this.#_loaded$.readonly$;
231
+ }
229
232
  ngOnInit() {
230
233
  this.#initCallbacks.forEach(it => it());
234
+ this.#asyncLoadables.forEach(it => it.ensureLoaded());
235
+ if (this.#awaitedLoadables.length > 0) {
236
+ Promise.all(this.#awaitedLoadables.map(it => {
237
+ return it.ensureLoaded(); //.then(() => console.log(`${it.constructor.name} loaded`));
238
+ })).then(() => {
239
+ this.#_loaded$.value = true;
240
+ });
241
+ }
242
+ else {
243
+ this.#_loaded$.value = true;
244
+ }
231
245
  this.#initialised = true;
232
246
  }
233
- ngOnDestroy() {
234
- this.dispose();
235
- }
236
247
  inject(token) {
237
248
  return inject(token);
238
249
  }
239
- /**
240
- * Monitors the specified models for any change and triggers and angular change detect cycle. This is intended for use
241
- * when the component uses the ON_PUSH change detection strategy.
242
- * @param models
243
- * @protected
244
- */
245
- trackChangesAndMarkForCheck(...models) {
246
- const { when } = Dsl.disposeWith(this);
247
- when.anyOf(...models).changes(() => this.cdr.markForCheck());
250
+ injectLoadable(token, options) {
251
+ const loadable = inject(token);
252
+ if (this.loaded$.value) {
253
+ loadable.ensureLoaded();
254
+ }
255
+ else {
256
+ if (!options || options.wait === true) {
257
+ this.#awaitedLoadables.push(loadable);
258
+ }
259
+ else {
260
+ this.#asyncLoadables.push(loadable);
261
+ }
262
+ }
263
+ return loadable;
264
+ }
265
+ ngOnDestroy() {
266
+ this.dispose();
248
267
  }
249
268
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DisposableComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
250
269
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: DisposableComponent, usesInheritance: true, ngImport: i0 });
@@ -717,42 +736,42 @@ var CommandFace;
717
736
  }
718
737
  }
719
738
  __decorate([
720
- MemoizeGet(),
739
+ Memoize(),
721
740
  __metadata("design:type", Object),
722
741
  __metadata("design:paramtypes", [])
723
742
  ], Adapter.prototype, "text", null);
724
743
  __decorate([
725
- MemoizeGet(),
744
+ Memoize(),
726
745
  __metadata("design:type", Object),
727
746
  __metadata("design:paramtypes", [])
728
747
  ], Adapter.prototype, "icon", null);
729
748
  __decorate([
730
- MemoizeGet(),
749
+ Memoize(),
731
750
  __metadata("design:type", Object),
732
751
  __metadata("design:paramtypes", [])
733
752
  ], Adapter.prototype, "iconPosition", null);
734
753
  __decorate([
735
- MemoizeGet(),
754
+ Memoize(),
736
755
  __metadata("design:type", Object),
737
756
  __metadata("design:paramtypes", [])
738
757
  ], Adapter.prototype, "tooltip", null);
739
758
  __decorate([
740
- MemoizeGet(),
759
+ Memoize(),
741
760
  __metadata("design:type", Boolean),
742
761
  __metadata("design:paramtypes", [])
743
762
  ], Adapter.prototype, "iconPositionStart", null);
744
763
  __decorate([
745
- MemoizeGet(),
764
+ Memoize(),
746
765
  __metadata("design:type", Boolean),
747
766
  __metadata("design:paramtypes", [])
748
767
  ], Adapter.prototype, "iconPositionEnd", null);
749
768
  __decorate([
750
- MemoizeGet(),
769
+ Memoize(),
751
770
  __metadata("design:type", String),
752
771
  __metadata("design:paramtypes", [])
753
772
  ], Adapter.prototype, "color", null);
754
773
  __decorate([
755
- MemoizeGet(),
774
+ Memoize(),
756
775
  __metadata("design:type", String),
757
776
  __metadata("design:paramtypes", [])
758
777
  ], Adapter.prototype, "style", null);
@@ -823,7 +842,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
823
842
  args: ["class.disable-scroll"]
824
843
  }] } });
825
844
 
826
- /* eslint-disable @angular-eslint/no-host-metadata-property */
827
845
  class IconComponent {
828
846
  _icon;
829
847
  prefix;
@@ -855,13 +873,11 @@ class IconComponent {
855
873
  return `fa-${this.suffix}`;
856
874
  }
857
875
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
858
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: IconComponent, selector: "aup-icon", inputs: { icon: "icon" }, host: { properties: { "attr.icon": "this.icon" }, classAttribute: "mat-icon" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"iconPrefix.SVG\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"iconPrefix.MATERIAL\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"iconPrefix.FONT_AWESOME\" class=\"faIconWrapper\">\n <i class=\"fa-solid\" [class]=\"faIcon\"></i>\n </div>\n\n <mat-icon *ngSwitchDefault\n [matTooltip]=\"errorMessage\">\n bug_report\n </mat-icon>\n\n</ng-container>\n\n", styles: [":host{display:inline-flex;--resolved-size: var(--aup-icon-size, 24px);width:var(--resolved-size)!important;min-width:var(--resolved-size)!important;height:var(--resolved-size)!important;min-height:var(--resolved-size)!important}:host fa-icon{vertical-align:middle}:host .faIconWrapper{display:flex;flex-direction:row;align-items:center;justify-content:center;width:var(--resolved-size)!important;height:var(--resolved-size)!important}:host .svgIcon{width:var(--resolved-size)!important;height:var(--resolved-size)!important}:host :host(.mat-chip-remove){--aup-icon-size: 18px}:host mat-icon{font-size:var(--resolved-size)!important;width:var(--resolved-size)!important;height:var(--resolved-size)!important;margin-right:0!important}\n"], dependencies: [{ kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
876
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: IconComponent, selector: "aup-icon", inputs: { icon: "icon" }, host: { properties: { "attr.icon": "this.icon" } }, ngImport: i0, template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"iconPrefix.SVG\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"iconPrefix.MATERIAL\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"iconPrefix.FONT_AWESOME\" class=\"faIconWrapper\">\n <i class=\"fa-solid\" [class]=\"faIcon\"></i>\n </div>\n\n <mat-icon *ngSwitchDefault\n [matTooltip]=\"errorMessage\">\n bug_report\n </mat-icon>\n\n</ng-container>\n\n", styles: [":host{display:inline-flex;--resolved-size: var(--aup-icon-size, 24px);width:var(--resolved-size) fa-icon;width-vertical-align:middle}:host .faIconWrapper{display:flex;flex-direction:row;align-items:center;justify-content:center;width:var(--resolved-size);height:var(--resolved-size)}:host .svgIcon{width:var(--resolved-size);height:var(--resolved-size)}:host :host(.mat-chip-remove){--aup-icon-size: 18px}:host mat-icon{font-size:var(--resolved-size);width:var(--resolved-size);height:var(--resolved-size);margin-right:0!important}\n"], dependencies: [{ kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
859
877
  }
860
878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IconComponent, decorators: [{
861
879
  type: Component,
862
- args: [{ selector: 'aup-icon', changeDetection: ChangeDetectionStrategy.OnPush, host: {
863
- class: "mat-icon" // this ensures angular form styles that target mat icon also work with us
864
- }, template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"iconPrefix.SVG\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"iconPrefix.MATERIAL\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"iconPrefix.FONT_AWESOME\" class=\"faIconWrapper\">\n <i class=\"fa-solid\" [class]=\"faIcon\"></i>\n </div>\n\n <mat-icon *ngSwitchDefault\n [matTooltip]=\"errorMessage\">\n bug_report\n </mat-icon>\n\n</ng-container>\n\n", styles: [":host{display:inline-flex;--resolved-size: var(--aup-icon-size, 24px);width:var(--resolved-size)!important;min-width:var(--resolved-size)!important;height:var(--resolved-size)!important;min-height:var(--resolved-size)!important}:host fa-icon{vertical-align:middle}:host .faIconWrapper{display:flex;flex-direction:row;align-items:center;justify-content:center;width:var(--resolved-size)!important;height:var(--resolved-size)!important}:host .svgIcon{width:var(--resolved-size)!important;height:var(--resolved-size)!important}:host :host(.mat-chip-remove){--aup-icon-size: 18px}:host mat-icon{font-size:var(--resolved-size)!important;width:var(--resolved-size)!important;height:var(--resolved-size)!important;margin-right:0!important}\n"] }]
880
+ args: [{ selector: 'aup-icon', template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"iconPrefix.SVG\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"iconPrefix.MATERIAL\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"iconPrefix.FONT_AWESOME\" class=\"faIconWrapper\">\n <i class=\"fa-solid\" [class]=\"faIcon\"></i>\n </div>\n\n <mat-icon *ngSwitchDefault\n [matTooltip]=\"errorMessage\">\n bug_report\n </mat-icon>\n\n</ng-container>\n\n", styles: [":host{display:inline-flex;--resolved-size: var(--aup-icon-size, 24px);width:var(--resolved-size) fa-icon;width-vertical-align:middle}:host .faIconWrapper{display:flex;flex-direction:row;align-items:center;justify-content:center;width:var(--resolved-size);height:var(--resolved-size)}:host .svgIcon{width:var(--resolved-size);height:var(--resolved-size)}:host :host(.mat-chip-remove){--aup-icon-size: 18px}:host mat-icon{font-size:var(--resolved-size);width:var(--resolved-size);height:var(--resolved-size);margin-right:0!important}\n"] }]
865
881
  }], propDecorators: { icon: [{
866
882
  type: Input
867
883
  }, {
@@ -892,7 +908,6 @@ class CommandFaceComponent extends DisposableComponent {
892
908
  // tslint:disable-next-line:no-input-rename
893
909
  get _rawFaces() { return this.#_rawFaces_accessor_storage; }
894
910
  set _rawFaces(value) { this.#_rawFaces_accessor_storage = value; }
895
- hasTextAndLeadingIcon$;
896
911
  set face(face) {
897
912
  this.faces$.value = [face];
898
913
  }
@@ -912,7 +927,6 @@ class CommandFaceComponent extends DisposableComponent {
912
927
  const activeFace = this.faceAdapters.first();
913
928
  this.activeIcon = activeFace.pluck("icon");
914
929
  this.activeColor = activeFace.pluck("color");
915
- this.hasTextAndLeadingIcon$ = valueOf.all(this.activeIcon.isNotNil(), activeFace.pluckString('text').isNotBlank(), activeFace.pluck("iconPosition").doesNotEqual(CommandFace.Position.END)).areTruthy();
916
930
  }
917
931
  shouldIncludeIcon(face) {
918
932
  return (!this.ignoreIcon && face.icon) || this.includeMissingIconInLayout;
@@ -926,11 +940,8 @@ class CommandFaceComponent extends DisposableComponent {
926
940
  get color() {
927
941
  return this.activeColor.value;
928
942
  }
929
- get hasTextAndIcon() {
930
- return this.hasTextAndLeadingIcon$.value;
931
- }
932
943
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandFaceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
933
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: CommandFaceComponent, selector: "aup-command-face", inputs: { _rawFaces: ["faces", "_rawFaces"], face: "face", ignoreIcon: "ignoreIcon", ignoreText: "ignoreText", includeMissingIconInLayout: "includeMissingIconInLayout" }, host: { properties: { "class.hide-icon": "this.requiresMissingIconInLayout", "attr.color": "this.color", "class.has-text-and-leading-icon": "this.hasTextAndIcon" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"face-container\" *ngFor=\"let face of faceAdapters.value\">\n <aup-icon *ngIf=\"hasIconStart(face)\" [icon]=\"face.icon\"></aup-icon>\n <span *ngIf=\"face.text\">{{face.text}}</span>\n <aup-icon *ngIf=\"hasIconEnd(face)\" [icon]=\"face.icon\"></aup-icon>\n</div>\n", styles: ["aup-command-face{--icon-gap: var(--aup-command-face-icon-gap);display:inline-grid}aup-command-face>.face-container{grid-column:1;grid-row:1;display:inline-flex;flex-direction:row;align-items:center}aup-command-face>.face-container>span{white-space:nowrap}aup-command-face>.face-container:not(:first-child){visibility:hidden}aup-command-face>.face-container *+*{margin-left:var(--icon-gap)}aup-command-face.hide-icon aup-icon{visibility:hidden}aup-command-face.centered{justify-items:center}aup-command-face.start{justify-items:self-start}aup-command-face.end{justify-items:self-end}aup-command-face.has-text-and-leading-icon{margin-top:4px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }], encapsulation: i0.ViewEncapsulation.None });
944
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: CommandFaceComponent, selector: "aup-command-face", inputs: { _rawFaces: ["faces", "_rawFaces"], face: "face", ignoreIcon: "ignoreIcon", ignoreText: "ignoreText", includeMissingIconInLayout: "includeMissingIconInLayout" }, host: { properties: { "class.hide-icon": "this.requiresMissingIconInLayout", "attr.color": "this.color" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"face-container\" *ngFor=\"let face of faceAdapters.value\">\n <aup-icon *ngIf=\"hasIconStart(face)\" [icon]=\"face.icon\"></aup-icon>\n <span *ngIf=\"face.text\">{{face.text}}</span>\n <aup-icon *ngIf=\"hasIconEnd(face)\" [icon]=\"face.icon\"></aup-icon>\n</div>\n", styles: ["aup-command-face{--icon-gap: var(--aup-command-face-icon-gap);display:inline-grid}aup-command-face>.face-container{grid-column:1;grid-row:1;display:inline-flex;flex-direction:row;align-items:center}aup-command-face>.face-container:not(:first-child){visibility:hidden}aup-command-face>.face-container *+*{margin-left:var(--icon-gap)}aup-command-face.hide-icon aup-icon{visibility:hidden}aup-command-face.centered{justify-items:center}aup-command-face.start{justify-items:self-start}aup-command-face.end{justify-items:self-end}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }], encapsulation: i0.ViewEncapsulation.None });
934
945
  }
935
946
  __decorate([
936
947
  StoreInListModel("faces$"),
@@ -938,7 +949,7 @@ __decorate([
938
949
  ], CommandFaceComponent.prototype, "_rawFaces", null);
939
950
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandFaceComponent, decorators: [{
940
951
  type: Component,
941
- args: [{ selector: 'aup-command-face', encapsulation: ViewEncapsulation.None, template: "<div class=\"face-container\" *ngFor=\"let face of faceAdapters.value\">\n <aup-icon *ngIf=\"hasIconStart(face)\" [icon]=\"face.icon\"></aup-icon>\n <span *ngIf=\"face.text\">{{face.text}}</span>\n <aup-icon *ngIf=\"hasIconEnd(face)\" [icon]=\"face.icon\"></aup-icon>\n</div>\n", styles: ["aup-command-face{--icon-gap: var(--aup-command-face-icon-gap);display:inline-grid}aup-command-face>.face-container{grid-column:1;grid-row:1;display:inline-flex;flex-direction:row;align-items:center}aup-command-face>.face-container>span{white-space:nowrap}aup-command-face>.face-container:not(:first-child){visibility:hidden}aup-command-face>.face-container *+*{margin-left:var(--icon-gap)}aup-command-face.hide-icon aup-icon{visibility:hidden}aup-command-face.centered{justify-items:center}aup-command-face.start{justify-items:self-start}aup-command-face.end{justify-items:self-end}aup-command-face.has-text-and-leading-icon{margin-top:4px}\n"] }]
952
+ args: [{ selector: 'aup-command-face', encapsulation: ViewEncapsulation.None, template: "<div class=\"face-container\" *ngFor=\"let face of faceAdapters.value\">\n <aup-icon *ngIf=\"hasIconStart(face)\" [icon]=\"face.icon\"></aup-icon>\n <span *ngIf=\"face.text\">{{face.text}}</span>\n <aup-icon *ngIf=\"hasIconEnd(face)\" [icon]=\"face.icon\"></aup-icon>\n</div>\n", styles: ["aup-command-face{--icon-gap: var(--aup-command-face-icon-gap);display:inline-grid}aup-command-face>.face-container{grid-column:1;grid-row:1;display:inline-flex;flex-direction:row;align-items:center}aup-command-face>.face-container:not(:first-child){visibility:hidden}aup-command-face>.face-container *+*{margin-left:var(--icon-gap)}aup-command-face.hide-icon aup-icon{visibility:hidden}aup-command-face.centered{justify-items:center}aup-command-face.start{justify-items:self-start}aup-command-face.end{justify-items:self-end}\n"] }]
942
953
  }], ctorParameters: function () { return []; }, propDecorators: { _rawFaces: [{
943
954
  type: Input,
944
955
  args: ['faces']
@@ -956,9 +967,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
956
967
  }], color: [{
957
968
  type: HostBinding,
958
969
  args: ['attr.color']
959
- }], hasTextAndIcon: [{
960
- type: HostBinding,
961
- args: ['class.has-text-and-leading-icon']
962
970
  }] } });
963
971
 
964
972
  /**
@@ -1062,11 +1070,11 @@ class CardContainerComponent extends AbstractCardContainerComponent {
1062
1070
  }
1063
1071
  }
1064
1072
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CardContainerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1065
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: CardContainerComponent, selector: "aup-card-container", inputs: { columnCount: "columnCount", enableScroll: "enableScroll" }, host: { properties: { "class.auto-columns": "this.isAutoColumns", "class.single-column": "this.isSingleColumn" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"header-container\">\n <ng-content select=\"[card-container-header], [slot=header]\"></ng-content>\n</div>\n\n<ng-template #content>\n <div class=\"card-container\">\n <ng-content></ng-content>\n\n <div class=\"add-card-container\" *ngIf=\"addCardCommand.enabled$.value\" [pectinCommand]=\"addCardCommand\">\n <aup-command-face *ngIf=\"addCardFace\" [faces]=\"[addCardFace]\"></aup-command-face>\n <aup-icon *ngIf=\"!addCardFace\" icon=\"mat:add\"></aup-icon>\n </div>\n\n <div class=\"add-card-template\" *ngIf=\"addCardTemplate\">\n <ng-container [ngTemplateOutlet]=\"addCardTemplate\"></ng-container>\n </div>\n </div>\n</ng-template>\n\n<div class=\"no-scroll-container\" *ngIf=\"!enableScroll\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</div>\n\n<aup-scroll-container *ngIf=\"enableScroll\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</aup-scroll-container>\n\n<div class=\"footer-container\">\n <ng-content select=\"[card-container-footer], [slot=footer]\"></ng-content>\n</div>\n\n", styles: [":host{--resolved-card-gap: var(--card-gap, 16px);--resolved-card-width: var(--card-width, 300px);--resolved-card-max-width: var(--card-max-width, auto);--resolved-card-height: var(--card-height, auto);--resolved-card-min-height: var(--card-min-height, auto);--resolved-card-background: var(--card-background, var(--aup-card-container-default-background-color));flex:1;display:flex;flex-direction:column;align-items:stretch;background:var(--resolved-card-background)}:host.auto-columns>*>.card-container{grid-template-columns:repeat(auto-fit,minmax(var(--resolved-card-width),var(--resolved-card-max-width)));min-width:calc(var(--resolved-card-width) + 2 * var(--resolved-card-gap));width:calc((var(--resolved-card-width) + var(--resolved-card-gap)) * 2 + var(--grid-gap))}:host:not(.auto-columns)>*>.card-container{grid-template-columns:repeat(var(--aup-card-container-column-count),1fr)}.card-container{display:grid;box-sizing:border-box;padding:var(--resolved-card-gap);min-height:calc(var(--resolved-card-height) + 2 * var(--resolved-card-gap));max-width:100%;grid-auto-rows:minmax(var(--resolved-card-min-height),var(--resolved-card-height));grid-gap:var(--resolved-card-gap)}aup-scroll-container,.no-scroll-container{flex:1}.add-card-container{height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:center;justify-content:center;transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-sizing:border-box;border:2px dashed rgba(0,0,0,.1);border-radius:6px;font-weight:300;cursor:pointer;color:#0000008a;background-color:#fffc}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.add-card-container:hover{border-color:transparent;background-color:#fff;color:#0000008a}.add-card-template-container{height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:stretch;justify-content:stretch}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "component", type: ScrollContainerComponent, selector: "aup-scroll-container", inputs: ["disableScroll$", "disableScroll"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }, { kind: "component", type: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }] });
1073
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: CardContainerComponent, selector: "aup-card-container", inputs: { columnCount: "columnCount", enableScroll: "enableScroll" }, host: { properties: { "class.auto-columns": "this.isAutoColumns", "class.single-column": "this.isSingleColumn" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"header-container\">\n <ng-content select=\"[card-container-header]\"></ng-content>\n</div>\n\n<ng-template #content>\n <div class=\"card-container\">\n <ng-content></ng-content>\n\n <div class=\"add-card-container\" *ngIf=\"addCardCommand.enabled$.value\" [pectinCommand]=\"addCardCommand\">\n <aup-command-face *ngIf=\"addCardFace\" [faces]=\"[addCardFace]\"></aup-command-face>\n <aup-icon *ngIf=\"!addCardFace\" icon=\"mat:add\"></aup-icon>\n </div>\n\n <div class=\"add-card-template\" *ngIf=\"addCardTemplate\">\n <ng-container [ngTemplateOutlet]=\"addCardTemplate\"></ng-container>\n </div>\n </div>\n</ng-template>\n\n<div class=\"no-scroll-container\" *ngIf=\"!enableScroll\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</div>\n\n<aup-scroll-container *ngIf=\"enableScroll\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</aup-scroll-container>\n\n<div class=\"footer-container\">\n <ng-content select=\"[card-container-footer]\"></ng-content>\n</div>\n\n", styles: [":host{--resolved-card-gap: var(--card-gap, 16px);--resolved-card-width: var(--card-width, 300px);--resolved-card-max-width: var(--card-max-width, auto);--resolved-card-height: var(--card-height, auto);--resolved-card-min-height: var(--card-min-height, auto);--resolved-card-background: var(--card-background, var(--aup-card-container-default-background-color));flex:1;display:flex;flex-direction:column;align-items:stretch;background:var(--resolved-card-background)}:host.auto-columns>*>.card-container{grid-template-columns:repeat(auto-fit,minmax(var(--resolved-card-width),var(--resolved-card-max-width)));min-width:calc(var(--resolved-card-width) + 2 * var(--resolved-card-gap));width:calc((var(--resolved-card-width) + var(--resolved-card-gap)) * 2 + var(--grid-gap))}:host:not(.auto-columns)>*>.card-container{grid-template-columns:repeat(var(--aup-card-container-column-count),1fr)}.card-container{display:grid;box-sizing:border-box;padding:var(--resolved-card-gap);min-height:calc(var(--resolved-card-height) + 2 * var(--resolved-card-gap));max-width:100%;grid-auto-rows:minmax(var(--resolved-card-min-height),var(--resolved-card-height));grid-gap:var(--resolved-card-gap)}aup-scroll-container,.no-scroll-container{flex:1}.add-card-container{height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:center;justify-content:center;transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-sizing:border-box;border:2px dashed rgba(0,0,0,.1);border-radius:6px;font-weight:300;cursor:pointer;color:#0000008a;background-color:#fffc}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.add-card-container:hover{border-color:transparent;background-color:#fff;color:#0000008a}.add-card-template-container{height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:stretch;justify-content:stretch}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "component", type: ScrollContainerComponent, selector: "aup-scroll-container", inputs: ["disableScroll$", "disableScroll"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }, { kind: "component", type: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }] });
1066
1074
  }
1067
1075
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CardContainerComponent, decorators: [{
1068
1076
  type: Component,
1069
- args: [{ selector: 'aup-card-container', template: "<div class=\"header-container\">\n <ng-content select=\"[card-container-header], [slot=header]\"></ng-content>\n</div>\n\n<ng-template #content>\n <div class=\"card-container\">\n <ng-content></ng-content>\n\n <div class=\"add-card-container\" *ngIf=\"addCardCommand.enabled$.value\" [pectinCommand]=\"addCardCommand\">\n <aup-command-face *ngIf=\"addCardFace\" [faces]=\"[addCardFace]\"></aup-command-face>\n <aup-icon *ngIf=\"!addCardFace\" icon=\"mat:add\"></aup-icon>\n </div>\n\n <div class=\"add-card-template\" *ngIf=\"addCardTemplate\">\n <ng-container [ngTemplateOutlet]=\"addCardTemplate\"></ng-container>\n </div>\n </div>\n</ng-template>\n\n<div class=\"no-scroll-container\" *ngIf=\"!enableScroll\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</div>\n\n<aup-scroll-container *ngIf=\"enableScroll\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</aup-scroll-container>\n\n<div class=\"footer-container\">\n <ng-content select=\"[card-container-footer], [slot=footer]\"></ng-content>\n</div>\n\n", styles: [":host{--resolved-card-gap: var(--card-gap, 16px);--resolved-card-width: var(--card-width, 300px);--resolved-card-max-width: var(--card-max-width, auto);--resolved-card-height: var(--card-height, auto);--resolved-card-min-height: var(--card-min-height, auto);--resolved-card-background: var(--card-background, var(--aup-card-container-default-background-color));flex:1;display:flex;flex-direction:column;align-items:stretch;background:var(--resolved-card-background)}:host.auto-columns>*>.card-container{grid-template-columns:repeat(auto-fit,minmax(var(--resolved-card-width),var(--resolved-card-max-width)));min-width:calc(var(--resolved-card-width) + 2 * var(--resolved-card-gap));width:calc((var(--resolved-card-width) + var(--resolved-card-gap)) * 2 + var(--grid-gap))}:host:not(.auto-columns)>*>.card-container{grid-template-columns:repeat(var(--aup-card-container-column-count),1fr)}.card-container{display:grid;box-sizing:border-box;padding:var(--resolved-card-gap);min-height:calc(var(--resolved-card-height) + 2 * var(--resolved-card-gap));max-width:100%;grid-auto-rows:minmax(var(--resolved-card-min-height),var(--resolved-card-height));grid-gap:var(--resolved-card-gap)}aup-scroll-container,.no-scroll-container{flex:1}.add-card-container{height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:center;justify-content:center;transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-sizing:border-box;border:2px dashed rgba(0,0,0,.1);border-radius:6px;font-weight:300;cursor:pointer;color:#0000008a;background-color:#fffc}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.add-card-container:hover{border-color:transparent;background-color:#fff;color:#0000008a}.add-card-template-container{height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:stretch;justify-content:stretch}\n"] }]
1077
+ args: [{ selector: 'aup-card-container', template: "<div class=\"header-container\">\n <ng-content select=\"[card-container-header]\"></ng-content>\n</div>\n\n<ng-template #content>\n <div class=\"card-container\">\n <ng-content></ng-content>\n\n <div class=\"add-card-container\" *ngIf=\"addCardCommand.enabled$.value\" [pectinCommand]=\"addCardCommand\">\n <aup-command-face *ngIf=\"addCardFace\" [faces]=\"[addCardFace]\"></aup-command-face>\n <aup-icon *ngIf=\"!addCardFace\" icon=\"mat:add\"></aup-icon>\n </div>\n\n <div class=\"add-card-template\" *ngIf=\"addCardTemplate\">\n <ng-container [ngTemplateOutlet]=\"addCardTemplate\"></ng-container>\n </div>\n </div>\n</ng-template>\n\n<div class=\"no-scroll-container\" *ngIf=\"!enableScroll\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</div>\n\n<aup-scroll-container *ngIf=\"enableScroll\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</aup-scroll-container>\n\n<div class=\"footer-container\">\n <ng-content select=\"[card-container-footer]\"></ng-content>\n</div>\n\n", styles: [":host{--resolved-card-gap: var(--card-gap, 16px);--resolved-card-width: var(--card-width, 300px);--resolved-card-max-width: var(--card-max-width, auto);--resolved-card-height: var(--card-height, auto);--resolved-card-min-height: var(--card-min-height, auto);--resolved-card-background: var(--card-background, var(--aup-card-container-default-background-color));flex:1;display:flex;flex-direction:column;align-items:stretch;background:var(--resolved-card-background)}:host.auto-columns>*>.card-container{grid-template-columns:repeat(auto-fit,minmax(var(--resolved-card-width),var(--resolved-card-max-width)));min-width:calc(var(--resolved-card-width) + 2 * var(--resolved-card-gap));width:calc((var(--resolved-card-width) + var(--resolved-card-gap)) * 2 + var(--grid-gap))}:host:not(.auto-columns)>*>.card-container{grid-template-columns:repeat(var(--aup-card-container-column-count),1fr)}.card-container{display:grid;box-sizing:border-box;padding:var(--resolved-card-gap);min-height:calc(var(--resolved-card-height) + 2 * var(--resolved-card-gap));max-width:100%;grid-auto-rows:minmax(var(--resolved-card-min-height),var(--resolved-card-height));grid-gap:var(--resolved-card-gap)}aup-scroll-container,.no-scroll-container{flex:1}.add-card-container{height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:center;justify-content:center;transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-sizing:border-box;border:2px dashed rgba(0,0,0,.1);border-radius:6px;font-weight:300;cursor:pointer;color:#0000008a;background-color:#fffc}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.add-card-container:hover{border-color:transparent;background-color:#fff;color:#0000008a}.add-card-template-container{height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:stretch;justify-content:stretch}\n"] }]
1070
1078
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { columnCount: [{
1071
1079
  type: Input
1072
1080
  }], enableScroll: [{
@@ -1142,24 +1150,14 @@ class CommandComponent extends PopupAwareComponent {
1142
1150
  activeFace$;
1143
1151
  iconOnly$;
1144
1152
  tooltip$;
1145
- visible$;
1146
1153
  constructor(element, parent) {
1147
1154
  super(element, parent);
1148
1155
  const { chain, switchOn } = Dsl.disposeWith(this);
1149
- this.faces$ = chain(this.command.busy$)
1150
- .mapToList(busy => {
1156
+ this.faces$ = chain(this.command.busy$).mapToList(busy => {
1151
1157
  return busy ?
1152
- [this.busyFace$.value ?? this.command.busyFace$.value, this.face$.value ?? this.command.defaultFace$.value] :
1153
- [this.face$.value ?? this.command.defaultFace$.value, this.busyFace$.value ?? this.command.busyFace$.value];
1154
- }, {
1155
- allowNil: true,
1156
- dependsOn: [
1157
- this.face$,
1158
- this.busyFace$,
1159
- this.command.defaultFace$,
1160
- this.command.busyFace$
1161
- ]
1162
- })
1158
+ [this.busyFace$.value, this.face$.value] :
1159
+ [this.face$.value, this.busyFace$.value];
1160
+ }, { allowNil: true, dependsOn: [this.face$, this.busyFace$] })
1163
1161
  .rejectNil();
1164
1162
  this.activeFace$ = this.faces$.first();
1165
1163
  this.buttonStyle$ = chain(this.activeFace$).map(f => CommandFace.getStyleOf(f));
@@ -1168,19 +1166,18 @@ class CommandComponent extends PopupAwareComponent {
1168
1166
  this.iconOnly$ = this.faces$.select(face => {
1169
1167
  return isEmpty(CommandFace.getTextOf(face)) && !isEmpty(CommandFace.getIconOf(face));
1170
1168
  }).count().equals(this.faces$.count());
1171
- this.visible$ = chain(this.command.visible$);
1172
- }
1173
- get cssDisplayProperty() {
1174
- return this.visible$.value ? undefined : 'none';
1175
1169
  }
1176
1170
  isActive(face) {
1177
1171
  return this.activeFace$.query().equals(face);
1178
1172
  }
1173
+ getFace() {
1174
+ return this.face;
1175
+ }
1179
1176
  requestFocus() {
1180
1177
  this.button.focus();
1181
1178
  }
1182
1179
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandComponent, deps: [{ token: i0.ElementRef }, { token: POPUP_CONTAINER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1183
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: CommandComponent, selector: "aup-command", inputs: { command: "command", face$: "face$", face: "face", busyFace$: "busyFace$", busyFace: "busyFace", alignFace: "alignFace" }, host: { properties: { "class": "this.alignFace", "style.display": "this.cssDisplayProperty" } }, 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"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }] });
1180
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: CommandComponent, selector: "aup-command", inputs: { command: "command", face$: "face$", face: "face", busyFace$: "busyFace$", 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"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }] });
1184
1181
  }
1185
1182
  __decorate([
1186
1183
  Proxify(),
@@ -1228,9 +1225,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1228
1225
  }], button: [{
1229
1226
  type: ViewChild,
1230
1227
  args: [MatButton]
1231
- }], cssDisplayProperty: [{
1232
- type: HostBinding,
1233
- args: ["style.display"]
1234
1228
  }] } });
1235
1229
 
1236
1230
  /**
@@ -1258,12 +1252,12 @@ class AbstractPopupMenuComponent extends PopupAwareComponent {
1258
1252
  xPosition = 'after';
1259
1253
  yPosition = 'below';
1260
1254
  triggers;
1255
+ #enabled_accessor_storage;
1256
+ get enabled() { return this.#enabled_accessor_storage; }
1257
+ set enabled(value) { this.#enabled_accessor_storage = value; }
1261
1258
  #enabled$_accessor_storage = proxify((ValueModel));
1262
1259
  get enabled$() { return this.#enabled$_accessor_storage; }
1263
1260
  set enabled$(value) { this.#enabled$_accessor_storage = value; }
1264
- #enabled_accessor_storage = true;
1265
- get enabled() { return this.#enabled_accessor_storage; }
1266
- set enabled(value) { this.#enabled_accessor_storage = value; }
1267
1261
  children;
1268
1262
  faces$;
1269
1263
  constructor(element, parent) {
@@ -1305,16 +1299,16 @@ class AbstractPopupMenuComponent extends PopupAwareComponent {
1305
1299
  return this.faceAdapter.face;
1306
1300
  }
1307
1301
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractPopupMenuComponent, deps: [{ token: i0.ElementRef }, { token: POPUP_CONTAINER }], target: i0.ɵɵFactoryTarget.Component });
1308
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractPopupMenuComponent, selector: "aup-abstract-popup-menu", inputs: { xPosition: "xPosition", yPosition: "yPosition", enabled$: "enabled$", enabled: "enabled" }, viewQueries: [{ propertyName: "triggers", predicate: MatMenuTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
1302
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractPopupMenuComponent, selector: "aup-abstract-popup-menu", inputs: { xPosition: "xPosition", yPosition: "yPosition", enabled: "enabled", enabled$: "enabled$" }, viewQueries: [{ propertyName: "triggers", predicate: MatMenuTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
1309
1303
  }
1304
+ __decorate([
1305
+ StoreInValueModel(),
1306
+ __metadata("design:type", Boolean)
1307
+ ], AbstractPopupMenuComponent.prototype, "enabled", null);
1310
1308
  __decorate([
1311
1309
  Proxify(),
1312
1310
  __metadata("design:type", Object)
1313
1311
  ], AbstractPopupMenuComponent.prototype, "enabled$", null);
1314
- __decorate([
1315
- StoreInValueModel(),
1316
- __metadata("design:type", Object)
1317
- ], AbstractPopupMenuComponent.prototype, "enabled", null);
1318
1312
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractPopupMenuComponent, decorators: [{
1319
1313
  type: Component,
1320
1314
  args: [{ selector: 'aup-abstract-popup-menu', template: '' }]
@@ -1328,10 +1322,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1328
1322
  }], triggers: [{
1329
1323
  type: ViewChildren,
1330
1324
  args: [MatMenuTrigger]
1331
- }], enabled$: [{
1332
- type: Input
1333
1325
  }], enabled: [{
1334
1326
  type: Input
1327
+ }], enabled$: [{
1328
+ type: Input
1335
1329
  }] } });
1336
1330
 
1337
1331
  class CommandContainer extends GarbageCollector {
@@ -1364,15 +1358,13 @@ class ToolBarComponent extends CommandContainer {
1364
1358
  get orientation() {
1365
1359
  return CommandContainer.Orientation.HORIZONTAL;
1366
1360
  }
1367
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ToolBarComponent, deps: [{ token: CommandContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1361
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ToolBarComponent, deps: [{ token: CommandContainer }], target: i0.ɵɵFactoryTarget.Component });
1368
1362
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ToolBarComponent, selector: "aup-tool-bar", usesInheritance: true, ngImport: i0, template: '<div class="toolbar-content"><ng-content></ng-content></div>', isInline: true, styles: [":host{display:inline-block}.toolbar-content{display:inline-flex;flex-direction:row;align-items:center}.toolbar-content>aup-separator{align-self:stretch;margin:4px 0 4px 8px}.toolbar-content>aup-flex{flex:1}.toolbar-content>*+*{margin-left:8px}\n"], encapsulation: i0.ViewEncapsulation.None });
1369
1363
  }
1370
1364
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ToolBarComponent, decorators: [{
1371
1365
  type: Component,
1372
1366
  args: [{ selector: 'aup-tool-bar', template: '<div class="toolbar-content"><ng-content></ng-content></div>', encapsulation: ViewEncapsulation.None, styles: [":host{display:inline-block}.toolbar-content{display:inline-flex;flex-direction:row;align-items:center}.toolbar-content>aup-separator{align-self:stretch;margin:4px 0 4px 8px}.toolbar-content>aup-flex{flex:1}.toolbar-content>*+*{margin-left:8px}\n"] }]
1373
- }], ctorParameters: function () { return [{ type: CommandContainer, decorators: [{
1374
- type: Optional
1375
- }] }]; } });
1367
+ }], ctorParameters: function () { return [{ type: CommandContainer }]; } });
1376
1368
 
1377
1369
  /**
1378
1370
  *
@@ -1683,6 +1675,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1683
1675
  args: ['blur']
1684
1676
  }] } });
1685
1677
 
1678
+ /* tslint:disable:no-input-rename */
1686
1679
  const INPUT_TOKEN_HACK = new InjectionToken("INPUT_TOKEN_HACK");
1687
1680
  class AbstractInputComponent extends DisposableComponent {
1688
1681
  onValueEditedListeners = new EventListenerList();
@@ -1697,16 +1690,11 @@ class AbstractInputComponent extends DisposableComponent {
1697
1690
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
1698
1691
  */
1699
1692
  formValue$;
1700
- #i18n$_accessor_storage = proxify((MutableValueModel));
1701
- get i18n$() { return this.#i18n$_accessor_storage; }
1702
- set i18n$(value) { this.#i18n$_accessor_storage = value; }
1703
- #i18n_accessor_storage;
1704
- get i18n() { return this.#i18n_accessor_storage; }
1705
- set i18n(value) { this.#i18n_accessor_storage = value; }
1706
- _label;
1693
+ label;
1694
+ // eslint-disable-next-line @angular-eslint/no-input-rename
1707
1695
  userFloatLabel = 'always'; // TODO: make this an injectable default
1708
- _hint;
1709
- _placeholder;
1696
+ hint;
1697
+ placeholder;
1710
1698
  dense = false;
1711
1699
  _enabled$ = this.registerDisposable(new DelegatingValueModel());
1712
1700
  set enabled$(condition$) {
@@ -1773,9 +1761,6 @@ class AbstractInputComponent extends DisposableComponent {
1773
1761
  isEnabled() {
1774
1762
  return this.enabled$.value;
1775
1763
  }
1776
- get disabled() {
1777
- return !this.isEnabled();
1778
- }
1779
1764
  hasErrors() {
1780
1765
  return !this.errorList$.query().isEmpty();
1781
1766
  }
@@ -1788,15 +1773,6 @@ class AbstractInputComponent extends DisposableComponent {
1788
1773
  get focusContext() {
1789
1774
  return this.formValue$.focusContext;
1790
1775
  }
1791
- get label() {
1792
- return this._label ?? this.i18n?.label();
1793
- }
1794
- get hint() {
1795
- return this._hint ?? this.hackyGetI18n("hint");
1796
- }
1797
- get placeholder() {
1798
- return this._placeholder ?? this.hackyGetI18n("placeholder");
1799
- }
1800
1776
  get floatLabel() {
1801
1777
  // return this.dense ? 'never' : this.userFloatLabel;
1802
1778
  return this.userFloatLabel;
@@ -1811,45 +1787,24 @@ class AbstractInputComponent extends DisposableComponent {
1811
1787
  onValueEdited(callback) {
1812
1788
  return this.onValueEditedListeners.add(callback);
1813
1789
  }
1814
- hackyGetI18n(key) {
1815
- // TODO: update I18n to make it possible to get an optional value with return the missing key message.
1816
- const i18nFn = this.i18n ? this.i18n[key] : undefined;
1817
- const i18nValue = i18nFn && i18nFn();
1818
- return i18nValue?.startsWith("missing key") ? undefined : i18nValue;
1819
- }
1820
1790
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractInputComponent, deps: [{ token: INPUT_TOKEN_HACK }], target: i0.ɵɵFactoryTarget.Component });
1821
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractInputComponent, selector: "ng-component", inputs: { i18n$: "i18n$", i18n: "i18n", _label: ["label", "_label"], userFloatLabel: ["floatLabel", "userFloatLabel"], _hint: ["hint", "_hint"], _placeholder: ["placeholder", "_placeholder"], dense: "dense", enabled$: "enabled$", focusCommand: ["command.focus", "focusCommand"], blurCommand: ["command.blur", "blurCommand"], enterCommand: ["command.enter", "enterCommand"], escapeCommand: ["command.escape", "escapeCommand"], clickCommand: ["command.click", "clickCommand"] }, outputs: { focus: "focus", blur: "blur", enterKey: "enterKey", escapeKey: "escapeKey" }, host: { listeners: { "click": "notifyClick()", "focusin": "notifyFocusIn()", "focusout": "notifyFocusOut()" }, properties: { "class.dense": "this.dense", "class": "this.baseClassName", "class.disabled": "this.disabled" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
1791
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractInputComponent, selector: "ng-component", inputs: { label: "label", userFloatLabel: ["floatLabel", "userFloatLabel"], hint: "hint", placeholder: "placeholder", dense: "dense", enabled$: "enabled$", focusCommand: ["command.focus", "focusCommand"], blurCommand: ["command.blur", "blurCommand"], enterCommand: ["command.enter", "enterCommand"], escapeCommand: ["command.escape", "escapeCommand"], clickCommand: ["command.click", "clickCommand"] }, outputs: { focus: "focus", blur: "blur", enterKey: "enterKey", escapeKey: "escapeKey" }, host: { listeners: { "click": "notifyClick()", "focusin": "notifyFocusIn()", "focusout": "notifyFocusOut()" }, properties: { "class.dense": "this.dense", "class": "this.baseClassName" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
1822
1792
  }
1823
- __decorate([
1824
- Proxify(),
1825
- __metadata("design:type", Object)
1826
- ], AbstractInputComponent.prototype, "i18n$", null);
1827
- __decorate([
1828
- StoreInValueModel(),
1829
- __metadata("design:type", Object)
1830
- ], AbstractInputComponent.prototype, "i18n", null);
1831
1793
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractInputComponent, decorators: [{
1832
1794
  type: Component,
1833
1795
  args: [{ template: '' }]
1834
1796
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1835
1797
  type: Inject,
1836
1798
  args: [INPUT_TOKEN_HACK]
1837
- }] }]; }, propDecorators: { i18n$: [{
1838
- type: Input
1839
- }], i18n: [{
1799
+ }] }]; }, propDecorators: { label: [{
1840
1800
  type: Input
1841
- }], _label: [{
1842
- type: Input,
1843
- args: ["label"]
1844
1801
  }], userFloatLabel: [{
1845
1802
  type: Input,
1846
1803
  args: ['floatLabel']
1847
- }], _hint: [{
1848
- type: Input,
1849
- args: ['hint']
1850
- }], _placeholder: [{
1851
- type: Input,
1852
- args: ['placeholder']
1804
+ }], hint: [{
1805
+ type: Input
1806
+ }], placeholder: [{
1807
+ type: Input
1853
1808
  }], dense: [{
1854
1809
  type: HostBinding,
1855
1810
  args: ['class.dense']
@@ -1892,9 +1847,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1892
1847
  }], notifyFocusOut: [{
1893
1848
  type: HostListener,
1894
1849
  args: ['focusout']
1895
- }], disabled: [{
1896
- type: HostBinding,
1897
- args: ["class.disabled"]
1898
1850
  }] } });
1899
1851
 
1900
1852
  class AbstractListInputComponent extends AbstractInputComponent {
@@ -2133,11 +2085,11 @@ class CheckboxInputComponent extends AbstractValueInputComponent {
2133
2085
  super();
2134
2086
  }
2135
2087
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CheckboxInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2136
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: CheckboxInputComponent, selector: "aup-checkbox-input", inputs: { color: "color", labelPosition: "labelPosition" }, usesInheritance: true, ngImport: i0, template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"componentValue$.value\"\n [color]=\"color\"\n [labelPosition]=\"labelPosition\"\n [disabled]=\"!isEnabled()\"\n>{{ label }}\n</mat-checkbox>\n<ng-container *ngIf=\"!dense\">\n <mat-hint *ngIf=\"showHint\">{{ hint }}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{ firstError }}</mat-error>\n</ng-container>\n", styles: [":host{display:inline-flex;flex-direction:column;padding:10px 0 0}:host.dense{padding:4px 0 2px}mat-hint,mat-error{margin-top:4px;margin-left:24px;font-size:12px;font-weight:400;line-height:13.5px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i4$3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
2088
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: CheckboxInputComponent, selector: "aup-checkbox-input", inputs: { color: "color", labelPosition: "labelPosition" }, usesInheritance: true, ngImport: i0, template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"componentValue$.value\"\n [color]=\"color\"\n [labelPosition]=\"labelPosition\"\n [disabled]=\"!isEnabled()\"\n>{{label}}</mat-checkbox>\n<mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n<mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n", styles: [":host{display:inline-flex;flex-direction:column;padding:24px 0 16px}:host.dense{padding:6px 0 2px}mat-hint,mat-error{margin-top:4px;margin-left:24px;font-size:12px;font-weight:400;line-height:13.5px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i4$3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
2137
2089
  }
2138
2090
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CheckboxInputComponent, decorators: [{
2139
2091
  type: Component,
2140
- args: [{ selector: 'aup-checkbox-input', template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"componentValue$.value\"\n [color]=\"color\"\n [labelPosition]=\"labelPosition\"\n [disabled]=\"!isEnabled()\"\n>{{ label }}\n</mat-checkbox>\n<ng-container *ngIf=\"!dense\">\n <mat-hint *ngIf=\"showHint\">{{ hint }}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{ firstError }}</mat-error>\n</ng-container>\n", styles: [":host{display:inline-flex;flex-direction:column;padding:10px 0 0}:host.dense{padding:4px 0 2px}mat-hint,mat-error{margin-top:4px;margin-left:24px;font-size:12px;font-weight:400;line-height:13.5px}\n"] }]
2092
+ args: [{ selector: 'aup-checkbox-input', template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"componentValue$.value\"\n [color]=\"color\"\n [labelPosition]=\"labelPosition\"\n [disabled]=\"!isEnabled()\"\n>{{label}}</mat-checkbox>\n<mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n<mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n", styles: [":host{display:inline-flex;flex-direction:column;padding:24px 0 16px}:host.dense{padding:6px 0 2px}mat-hint,mat-error{margin-top:4px;margin-left:24px;font-size:12px;font-weight:400;line-height:13.5px}\n"] }]
2141
2093
  }], ctorParameters: function () { return []; }, propDecorators: { color: [{
2142
2094
  type: Input
2143
2095
  }], labelPosition: [{
@@ -2176,7 +2128,7 @@ class MultipleSelectInputComponent extends AbstractListInputComponent {
2176
2128
  const self = this;
2177
2129
  this.registerDisposable(new Binding(this.componentList$, this.ids$, {
2178
2130
  toLeft(selectedItems, currentLeftValue) {
2179
- const newValues = selectedItems.map(it => lookup.get(it)).filter(it => !!it);
2131
+ const newValues = selectedItems.map(it => lookup.get(it)).filter(it => !it);
2180
2132
  // if our lookup didn't find anything then we return the previous values so we don't clobber selections when the options go empty
2181
2133
  return newValues.length < 1 && selectedItems.length > 0 ? currentLeftValue : newValues;
2182
2134
  },
@@ -2215,142 +2167,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2215
2167
 
2216
2168
  class NumberInputComponent extends AbstractValueInputComponent {
2217
2169
  autocomplete;
2218
- #min$_accessor_storage = proxify((ValueModel));
2219
- get min$() { return this.#min$_accessor_storage; }
2220
- set min$(value) { this.#min$_accessor_storage = value; }
2221
- #min_accessor_storage = Number.MIN_SAFE_INTEGER;
2222
- get min() { return this.#min_accessor_storage; }
2223
- set min(value) { this.#min_accessor_storage = value; }
2224
- #max$_accessor_storage = proxify((ValueModel));
2225
- get max$() { return this.#max$_accessor_storage; }
2226
- set max$(value) { this.#max$_accessor_storage = value; }
2227
- #max_accessor_storage = Number.MAX_SAFE_INTEGER;
2228
- get max() { return this.#max_accessor_storage; }
2229
- set max(value) { this.#max_accessor_storage = value; }
2230
- incrementCommand;
2231
- decrementCommand;
2170
+ min = Number.MIN_SAFE_INTEGER;
2171
+ max = Number.MAX_SAFE_INTEGER;
2172
+ iconPrefix;
2232
2173
  constructor() {
2233
2174
  super();
2234
- const { chain } = Dsl.disposeWith(this);
2235
- const normalisedValue$ = chain(this.value$).otherwise(0);
2236
- this.incrementCommand = Command.create(() => {
2237
- this.value$.value = normalisedValue$.value + 1;
2238
- }).enableWhile(chain.numericValue(normalisedValue$).isLessThan(this.max$).and(this.enabled$));
2239
- this.decrementCommand = Command.create(() => {
2240
- this.value$.value = normalisedValue$.value - 1;
2241
- }).enableWhile(chain.numericValue(normalisedValue$).isGreaterThan(this.min$).and(this.enabled$));
2242
2175
  }
2243
2176
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: NumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2244
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: NumberInputComponent, selector: "aup-number-input", inputs: { autocomplete: "autocomplete", min$: "min$", min: "min", max$: "max$", max: "max" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field floatLabel=\"always\">\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\n <input type=\"number\"\n matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [min]=\"min\"\n [max]=\"max\"\n [size]=\"4\">\n <section matIconSuffix>\n <button [pectinCommand]=\"decrementCommand\">-</button>\n <button [pectinCommand]=\"incrementCommand\">+</button>\n </section>\n <mat-hint *ngIf=\"hint && !dense\">{{ hint }}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{ firstError }}</mat-error>\n</mat-form-field>\n", styles: [":host{--width: 56px;--height: 42px;--margin-right: 1px;--border-radius: 3px;--border-color:#d5d5d5;--button-background: #fafafa;--button-background-hover: #efefef}:host input[type=number]{appearance:textfield}:host input[type=number]::-webkit-inner-spin-button,:host input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}:host:focus-within:has(section:not(:focus-within)){--height: 40px;--margin-right: 2px;--border-radius: 2px}:host section[maticonsuffix]{display:flex;flex-direction:row;align-items:stretch;gap:1px;background-color:var(--border-color);border-left:1px solid var(--border-color);width:var(--width);min-width:var(--width);height:var(--height);min-height:var(--height);margin-right:var(--margin-right);border-top-right-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius);overflow:hidden}:host button{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:center;font-weight:600;border-style:none;background-color:var(--button-background)}:host button:hover{background-color:var(--button-background-hover)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2$4.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }] });
2177
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: NumberInputComponent, selector: "aup-number-input", inputs: { autocomplete: "autocomplete", min: "min", max: "max", iconPrefix: "iconPrefix" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"number\"\n matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [min]=\"min\"\n [max]=\"max\"\n >\n <mat-hint *ngIf=\"hint && !dense\" >{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <aup-icon *ngIf=\"iconPrefix\" matPrefix [icon]=\"iconPrefix\"></aup-icon>\n</mat-form-field>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2$4.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4$2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }] });
2245
2178
  }
2246
- __decorate([
2247
- Proxify(),
2248
- __metadata("design:type", ValueModel)
2249
- ], NumberInputComponent.prototype, "min$", null);
2250
- __decorate([
2251
- StoreInValueModel(),
2252
- __metadata("design:type", Object)
2253
- ], NumberInputComponent.prototype, "min", null);
2254
- __decorate([
2255
- Proxify(),
2256
- __metadata("design:type", ValueModel)
2257
- ], NumberInputComponent.prototype, "max$", null);
2258
- __decorate([
2259
- StoreInValueModel(),
2260
- __metadata("design:type", Object)
2261
- ], NumberInputComponent.prototype, "max", null);
2262
2179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: NumberInputComponent, decorators: [{
2263
2180
  type: Component,
2264
- args: [{ selector: 'aup-number-input', template: "<mat-form-field floatLabel=\"always\">\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\n <input type=\"number\"\n matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [min]=\"min\"\n [max]=\"max\"\n [size]=\"4\">\n <section matIconSuffix>\n <button [pectinCommand]=\"decrementCommand\">-</button>\n <button [pectinCommand]=\"incrementCommand\">+</button>\n </section>\n <mat-hint *ngIf=\"hint && !dense\">{{ hint }}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{ firstError }}</mat-error>\n</mat-form-field>\n", styles: [":host{--width: 56px;--height: 42px;--margin-right: 1px;--border-radius: 3px;--border-color:#d5d5d5;--button-background: #fafafa;--button-background-hover: #efefef}:host input[type=number]{appearance:textfield}:host input[type=number]::-webkit-inner-spin-button,:host input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}:host:focus-within:has(section:not(:focus-within)){--height: 40px;--margin-right: 2px;--border-radius: 2px}:host section[maticonsuffix]{display:flex;flex-direction:row;align-items:stretch;gap:1px;background-color:var(--border-color);border-left:1px solid var(--border-color);width:var(--width);min-width:var(--width);height:var(--height);min-height:var(--height);margin-right:var(--margin-right);border-top-right-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius);overflow:hidden}:host button{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:center;font-weight:600;border-style:none;background-color:var(--button-background)}:host button:hover{background-color:var(--button-background-hover)}\n"] }]
2181
+ args: [{ selector: 'aup-number-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"number\"\n matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [min]=\"min\"\n [max]=\"max\"\n >\n <mat-hint *ngIf=\"hint && !dense\" >{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <aup-icon *ngIf=\"iconPrefix\" matPrefix [icon]=\"iconPrefix\"></aup-icon>\n</mat-form-field>\n" }]
2265
2182
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2266
2183
  type: Input
2267
- }], min$: [{
2268
- type: Input
2269
2184
  }], min: [{
2270
2185
  type: Input
2271
- }], max$: [{
2272
- type: Input
2273
2186
  }], max: [{
2274
2187
  type: Input
2188
+ }], iconPrefix: [{
2189
+ type: Input
2275
2190
  }] } });
2276
2191
 
2277
2192
  class PasswordInputComponent extends AbstractValueInputComponent {
2278
2193
  autocomplete;
2279
- #enableShowPassword$_accessor_storage = proxify((ValueModel));
2280
- get enableShowPassword$() { return this.#enableShowPassword$_accessor_storage; }
2281
- set enableShowPassword$(value) { this.#enableShowPassword$_accessor_storage = value; }
2282
- #enableShowPassword_accessor_storage = false;
2283
- get enableShowPassword() { return this.#enableShowPassword_accessor_storage; }
2284
- set enableShowPassword(value) { this.#enableShowPassword_accessor_storage = value; }
2285
- showPassword$ = new MutableValueModel(false);
2286
- toggleShowPasswordCommand;
2287
2194
  constructor() {
2288
2195
  super();
2289
- const { chain, valueOf } = Dsl.disposeWith(this);
2290
- const face$ = chain(this.showPassword$).map(show => {
2291
- return {
2292
- icon: () => show ? "mat:visibility_off" : "mat:visibility"
2293
- };
2294
- });
2295
- this.toggleShowPasswordCommand = Command.create(() => {
2296
- this.showPassword$.value = !this.showPassword$.value;
2297
- })
2298
- .withFace(face$)
2299
- .enableWhile(chain.stringValue(this.componentValue$).isNotBlank());
2300
- }
2301
- get fieldType() {
2302
- return this.showPassword$.value ? "text" : "password";
2303
2196
  }
2304
2197
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PasswordInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2305
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: PasswordInputComponent, selector: "aup-password-input", inputs: { autocomplete: "autocomplete", enableShowPassword$: "enableShowPassword$", enableShowPassword: "enableShowPassword" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input [type]=\"fieldType\"\n matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <span matSuffix *ngIf=\"enableShowPassword$.value\">\n <aup-command [command]=\"toggleShowPasswordCommand\" data-cy=\"showPassword\"></aup-command>\n </span>\n</mat-form-field>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }, { kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }] });
2198
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: PasswordInputComponent, selector: "aup-password-input", inputs: { autocomplete: "autocomplete" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"password\"\n matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }] });
2306
2199
  }
2307
- __decorate([
2308
- Proxify(),
2309
- __metadata("design:type", Object)
2310
- ], PasswordInputComponent.prototype, "enableShowPassword$", null);
2311
- __decorate([
2312
- StoreInValueModel(),
2313
- __metadata("design:type", Object)
2314
- ], PasswordInputComponent.prototype, "enableShowPassword", null);
2315
2200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PasswordInputComponent, decorators: [{
2316
2201
  type: Component,
2317
- args: [{ selector: 'aup-password-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input [type]=\"fieldType\"\n matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <span matSuffix *ngIf=\"enableShowPassword$.value\">\n <aup-command [command]=\"toggleShowPasswordCommand\" data-cy=\"showPassword\"></aup-command>\n </span>\n</mat-form-field>\n\n" }]
2318
- }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2319
- type: Input
2320
- }], enableShowPassword$: [{
2321
- type: Input
2322
- }], enableShowPassword: [{
2323
- type: Input
2324
- }] } });
2325
-
2326
- class SearchInputComponent extends AbstractValueInputComponent {
2327
- autocomplete;
2328
- clearCommand;
2329
- constructor() {
2330
- super();
2331
- this.dense = true;
2332
- const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2333
- this.clearCommand = Command.create(() => {
2334
- this.componentValue$.value = "";
2335
- });
2336
- this.clearCommand.disableWhile(chain.stringValue(this.componentValue$).isBlank());
2337
- }
2338
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2339
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SearchInputComponent, selector: "aup-search-input", inputs: { autocomplete: "autocomplete" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <aup-icon matPrefix icon=\"mat:search\"></aup-icon>\n <button mat-icon-button matSuffix [pectinCommand]=\"clearCommand\">\n <aup-icon icon=\"mat:close\"></aup-icon>\n </button>\n</mat-form-field>\n\n", styles: ["button[disabled]{visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i2$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }] });
2340
- }
2341
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SearchInputComponent, decorators: [{
2342
- type: Component,
2343
- args: [{ selector: 'aup-search-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <aup-icon matPrefix icon=\"mat:search\"></aup-icon>\n <button mat-icon-button matSuffix [pectinCommand]=\"clearCommand\">\n <aup-icon icon=\"mat:close\"></aup-icon>\n </button>\n</mat-form-field>\n\n", styles: ["button[disabled]{visibility:hidden}\n"] }]
2202
+ args: [{ selector: 'aup-password-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"password\"\n matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n" }]
2344
2203
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2345
2204
  type: Input
2346
2205
  }] } });
2347
2206
 
2348
2207
  /**
2349
2208
  * Using templates:
2350
- * <aup-select-input [value$]="myModel" [options]="myOptions">
2209
+ * <aup-select-input [valueModel]="myModel" [options]="myOptions">
2351
2210
  * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
2352
- * <ng-template #selectedOptionTemplate let-option>{{option.thePropertyYouWant}} note, not used for nils (the placeholder is used)</ng-template>
2353
- * <ng-template #nilOptionTemplate>Uses the placeholder by default but you can customise it</ng-template>
2211
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
2354
2212
  * </aup-select_input>
2355
2213
  */
2356
2214
  class SelectInputComponent extends AbstractValueInputComponent {
@@ -2375,7 +2233,7 @@ class SelectInputComponent extends AbstractValueInputComponent {
2375
2233
  super();
2376
2234
  const { chain } = Dsl.disposeWith(this);
2377
2235
  this.cookedOptions$ = chain(this.options$)
2378
- .mapAll(options => {
2236
+ .reduceToList(options => {
2379
2237
  return options.length < 1 && !isNil(this.componentValue$.value) ? [this.componentValue$.value] : options;
2380
2238
  }, {
2381
2239
  dependsOn: this.componentValue$
@@ -2414,21 +2272,21 @@ class SelectInputComponent extends AbstractValueInputComponent {
2414
2272
  id: this.delegatedIdentityOf(value)
2415
2273
  });
2416
2274
  let lastIdSnapshot = snapshotValueAndId(this.componentValue$.value);
2417
- // console.log(lastIdSnapshot)
2275
+ console.log(lastIdSnapshot);
2418
2276
  before(this.options$).changes(() => {
2419
2277
  lastIdSnapshot = snapshotValueAndId(this.componentValue$.value);
2420
- // console.log(lastIdSnapshot)
2278
+ console.log(lastIdSnapshot);
2421
2279
  });
2422
2280
  when(this.options$).changes((is, was) => {
2423
2281
  const newIdSnapshot = snapshotValueAndId(lastIdSnapshot.value);
2424
- // console.log(lastIdSnapshot, newIdSnapshot)
2282
+ console.log(lastIdSnapshot, newIdSnapshot);
2425
2283
  if (newIdSnapshot !== lastIdSnapshot.id) {
2426
2284
  this.id$.value = this.delegatedIdentityOf(this.componentValue$.value);
2427
2285
  }
2428
2286
  });
2429
2287
  }
2430
2288
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2431
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SelectInputComponent, selector: "aup-select-input", inputs: { options$: "options$", options: "options", optionLabel: "optionLabel", allowNil: "allowNil", optionLabelFormat: "optionLabelFormat" }, queries: [{ propertyName: "selectedOptionTemplateRef", first: true, predicate: ["selectedOptionTemplate"], descendants: true }, { propertyName: "optionTemplateRef", first: true, predicate: ["optionTemplate"], descendants: true }, { propertyName: "nilOptionTemplateRef", first: true, predicate: ["nilOptionTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [ngModel]=\"componentValue$.value\"\n (ngModelChange)=\"select($event)\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n\n <!--\n TODO: dave has a scenario where the selected item isn't rendering that I can't reproduce so we explicity render it..\n It typically happens because the ngModel value isn't the one contained in the list - this means our source model\n identifyOf function has changed and our id$/lookup$/componentValue$ are out of sync.\n We get around this for now by explicity rendering the component value.\n Please Note: I haven't been able to reproduce this\n -->\n <mat-select-trigger *ngIf=\"!selectedOptionTemplateRef\">\n {{optionLabelFormat(componentValue$.value)}}\n </mat-select-trigger>\n\n <mat-select-trigger *ngIf=\"selectedOptionTemplateRef\">\n <ng-container [ngTemplateOutlet]=\"selectedOptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: componentValue$.value}\"></ng-container>\n </mat-select-trigger>\n\n <mat-option *ngIf=\"allowNil\">\n <ng-container *ngIf=\"!nilOptionTemplateRef\">{{placeholder}}</ng-container>\n <ng-container *ngIf=\"nilOptionTemplateRef\" [ngTemplateOutlet]=\"nilOptionTemplateRef\"></ng-container>\n </mat-option>\n <mat-option *ngFor=\"let option of cookedOptions$.value; trackBy: trackByIdentity;let i = index\"\n [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n <ng-content select=\"[select-option-footer]\"></ng-content>\n </mat-select>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n<div class=\"width-strut\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <div class=\"item\" *ngFor=\"let item of cookedOptions$.value\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(item)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: 0 }\"\n >\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:inline-block}mat-form-field{width:100%}.width-strut{display:block;height:0;max-height:0;width:auto;visibility:hidden;overflow:hidden;padding-right:35px}.width-strut mat-label{font-size:75%}.width-strut>.item{font-size:16px;padding-left:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i4$4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i4$4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }] });
2289
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SelectInputComponent, selector: "aup-select-input", inputs: { options$: "options$", options: "options", optionLabel: "optionLabel", allowNil: "allowNil", optionLabelFormat: "optionLabelFormat" }, queries: [{ propertyName: "selectedOptionTemplateRef", first: true, predicate: ["selectedOptionTemplate"], descendants: true }, { propertyName: "optionTemplateRef", first: true, predicate: ["optionTemplate"], descendants: true }, { propertyName: "nilOptionTemplateRef", first: true, predicate: ["nilOptionTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [ngModel]=\"componentValue$.value\"\n (ngModelChange)=\"select($event)\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n\n <!--\n TODO: dave has a scenario where the selected item isn't rendering that I can't reproduce so we explicity render it..\n It typically happens because the ngModel value isn't the one contained in the list - this means our source model\n identifyOf function has changed and our id$/lookup$/componentValue$ are out of sync.\n We get around this for now by explicity rendering the component value.\n Please Note: I haven't been able to reproduce this\n -->\n <mat-select-trigger *ngIf=\"!selectedOptionTemplateRef\">\n {{optionLabelFormat(componentValue$.value)}}\n </mat-select-trigger>\n\n <mat-select-trigger *ngIf=\"selectedOptionTemplateRef\">\n <ng-container [ngTemplateOutlet]=\"selectedOptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: componentValue$.value}\"></ng-container>\n </mat-select-trigger>\n\n <mat-option *ngIf=\"allowNil\">\n <ng-container *ngIf=\"!nilOptionTemplateRef\">{{placeholder}}</ng-container>\n <ng-container *ngIf=\"nilOptionTemplateRef\" [ngTemplateOutlet]=\"nilOptionTemplateRef\"></ng-container>\n </mat-option>\n <mat-option *ngFor=\"let option of cookedOptions$.value; trackBy: trackByIdentity;let i = index\"\n [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n </mat-select>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n<div class=\"width-strut\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <div class=\"item\" *ngFor=\"let item of cookedOptions$.value\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(item)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: 0 }\"\n >\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:inline-block}mat-form-field{width:100%}.width-strut{display:block;height:0;max-height:0;width:auto;visibility:hidden;overflow:hidden;padding-right:35px}.width-strut mat-label{font-size:75%}.width-strut>.item{font-size:16px;padding-left:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i4$4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i4$4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }] });
2432
2290
  }
2433
2291
  __decorate([
2434
2292
  Proxify(),
@@ -2440,7 +2298,7 @@ __decorate([
2440
2298
  ], SelectInputComponent.prototype, "options", null);
2441
2299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputComponent, decorators: [{
2442
2300
  type: Component,
2443
- args: [{ selector: 'aup-select-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [ngModel]=\"componentValue$.value\"\n (ngModelChange)=\"select($event)\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n\n <!--\n TODO: dave has a scenario where the selected item isn't rendering that I can't reproduce so we explicity render it..\n It typically happens because the ngModel value isn't the one contained in the list - this means our source model\n identifyOf function has changed and our id$/lookup$/componentValue$ are out of sync.\n We get around this for now by explicity rendering the component value.\n Please Note: I haven't been able to reproduce this\n -->\n <mat-select-trigger *ngIf=\"!selectedOptionTemplateRef\">\n {{optionLabelFormat(componentValue$.value)}}\n </mat-select-trigger>\n\n <mat-select-trigger *ngIf=\"selectedOptionTemplateRef\">\n <ng-container [ngTemplateOutlet]=\"selectedOptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: componentValue$.value}\"></ng-container>\n </mat-select-trigger>\n\n <mat-option *ngIf=\"allowNil\">\n <ng-container *ngIf=\"!nilOptionTemplateRef\">{{placeholder}}</ng-container>\n <ng-container *ngIf=\"nilOptionTemplateRef\" [ngTemplateOutlet]=\"nilOptionTemplateRef\"></ng-container>\n </mat-option>\n <mat-option *ngFor=\"let option of cookedOptions$.value; trackBy: trackByIdentity;let i = index\"\n [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n <ng-content select=\"[select-option-footer]\"></ng-content>\n </mat-select>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n<div class=\"width-strut\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <div class=\"item\" *ngFor=\"let item of cookedOptions$.value\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(item)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: 0 }\"\n >\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:inline-block}mat-form-field{width:100%}.width-strut{display:block;height:0;max-height:0;width:auto;visibility:hidden;overflow:hidden;padding-right:35px}.width-strut mat-label{font-size:75%}.width-strut>.item{font-size:16px;padding-left:0}\n"] }]
2301
+ args: [{ selector: 'aup-select-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [ngModel]=\"componentValue$.value\"\n (ngModelChange)=\"select($event)\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n\n <!--\n TODO: dave has a scenario where the selected item isn't rendering that I can't reproduce so we explicity render it..\n It typically happens because the ngModel value isn't the one contained in the list - this means our source model\n identifyOf function has changed and our id$/lookup$/componentValue$ are out of sync.\n We get around this for now by explicity rendering the component value.\n Please Note: I haven't been able to reproduce this\n -->\n <mat-select-trigger *ngIf=\"!selectedOptionTemplateRef\">\n {{optionLabelFormat(componentValue$.value)}}\n </mat-select-trigger>\n\n <mat-select-trigger *ngIf=\"selectedOptionTemplateRef\">\n <ng-container [ngTemplateOutlet]=\"selectedOptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: componentValue$.value}\"></ng-container>\n </mat-select-trigger>\n\n <mat-option *ngIf=\"allowNil\">\n <ng-container *ngIf=\"!nilOptionTemplateRef\">{{placeholder}}</ng-container>\n <ng-container *ngIf=\"nilOptionTemplateRef\" [ngTemplateOutlet]=\"nilOptionTemplateRef\"></ng-container>\n </mat-option>\n <mat-option *ngFor=\"let option of cookedOptions$.value; trackBy: trackByIdentity;let i = index\"\n [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n </mat-select>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n<div class=\"width-strut\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <div class=\"item\" *ngFor=\"let item of cookedOptions$.value\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(item)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: 0 }\"\n >\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:inline-block}mat-form-field{width:100%}.width-strut{display:block;height:0;max-height:0;width:auto;visibility:hidden;overflow:hidden;padding-right:35px}.width-strut mat-label{font-size:75%}.width-strut>.item{font-size:16px;padding-left:0}\n"] }]
2444
2302
  }], ctorParameters: function () { return []; }, propDecorators: { options$: [{
2445
2303
  type: Input
2446
2304
  }], options: [{
@@ -2471,24 +2329,17 @@ class StringInputComponent extends AbstractValueInputComponent {
2471
2329
  get enableClear() { return this.#enableClear_accessor_storage; }
2472
2330
  set enableClear(value) { this.#enableClear_accessor_storage = value; }
2473
2331
  iconPrefix;
2474
- #suffixCommand_accessor_storage = proxify(Command);
2475
- get suffixCommand() { return this.#suffixCommand_accessor_storage; }
2476
- set suffixCommand(value) { this.#suffixCommand_accessor_storage = value; }
2477
2332
  clearCommand;
2478
2333
  constructor() {
2479
2334
  super();
2480
2335
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2481
2336
  this.clearCommand = Command.create(() => {
2482
2337
  this.componentValue$.value = "";
2483
- })
2484
- .withFace({ icon: () => "mat:clear" })
2485
- .enableWhile(chain.stringValue(this.componentValue$).isNotBlank());
2486
- }
2487
- get hasSuffixCommand() {
2488
- return Proxify.hasTarget(this.suffixCommand);
2338
+ });
2339
+ this.clearCommand.disableWhile(chain.stringValue(this.componentValue$).isBlank());
2489
2340
  }
2490
2341
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2491
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: StringInputComponent, selector: "aup-string-input", inputs: { autocomplete: "autocomplete", enableClear$: "enableClear$", enableClear: "enableClear", iconPrefix: "iconPrefix", suffixCommand: "suffixCommand" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <aup-icon *ngIf=\"iconPrefix\" matPrefix [icon]=\"iconPrefix\"></aup-icon>\n <span matSuffix>\n <aup-command *ngIf=\"enableClear\" [command]=\"clearCommand\" data-cy=\"clearCommand\"></aup-command>\n <aup-command *ngIf=\"hasSuffixCommand\" [command]=\"suffixCommand\" data-cy=\"suffixCommand\"></aup-command>\n </span>\n</mat-form-field>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4$2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }, { kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }] });
2342
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: StringInputComponent, selector: "aup-string-input", inputs: { autocomplete: "autocomplete", enableClear$: "enableClear$", enableClear: "enableClear", iconPrefix: "iconPrefix" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <aup-icon *ngIf=\"iconPrefix\" matPrefix [icon]=\"iconPrefix\"></aup-icon>\n <button mat-icon-button matSuffix *ngIf=\"enableClear\" [pectinCommand]=\"clearCommand\">\n <aup-icon icon=\"mat:close\"></aup-icon>\n </button>\n</mat-form-field>\n\n", styles: ["button[disabled]{visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4$2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }] });
2492
2343
  }
2493
2344
  __decorate([
2494
2345
  Proxify(),
@@ -2498,13 +2349,9 @@ __decorate([
2498
2349
  StoreInValueModel(),
2499
2350
  __metadata("design:type", Object)
2500
2351
  ], StringInputComponent.prototype, "enableClear", null);
2501
- __decorate([
2502
- Proxify(),
2503
- __metadata("design:type", Command)
2504
- ], StringInputComponent.prototype, "suffixCommand", null);
2505
2352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, decorators: [{
2506
2353
  type: Component,
2507
- args: [{ selector: 'aup-string-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <aup-icon *ngIf=\"iconPrefix\" matPrefix [icon]=\"iconPrefix\"></aup-icon>\n <span matSuffix>\n <aup-command *ngIf=\"enableClear\" [command]=\"clearCommand\" data-cy=\"clearCommand\"></aup-command>\n <aup-command *ngIf=\"hasSuffixCommand\" [command]=\"suffixCommand\" data-cy=\"suffixCommand\"></aup-command>\n </span>\n</mat-form-field>\n\n" }]
2354
+ args: [{ selector: 'aup-string-input', template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [attr.autocomplete]=\"autocomplete\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <aup-icon *ngIf=\"iconPrefix\" matPrefix [icon]=\"iconPrefix\"></aup-icon>\n <button mat-icon-button matSuffix *ngIf=\"enableClear\" [pectinCommand]=\"clearCommand\">\n <aup-icon icon=\"mat:close\"></aup-icon>\n </button>\n</mat-form-field>\n\n", styles: ["button[disabled]{visibility:hidden}\n"] }]
2508
2355
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2509
2356
  type: Input
2510
2357
  }], enableClear$: [{
@@ -2513,8 +2360,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2513
2360
  type: Input
2514
2361
  }], iconPrefix: [{
2515
2362
  type: Input
2516
- }], suffixCommand: [{
2517
- type: Input
2518
2363
  }] } });
2519
2364
 
2520
2365
  class TextInputComponent extends AbstractValueInputComponent {
@@ -2702,6 +2547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2702
2547
  * </aup-switch-case>
2703
2548
  */
2704
2549
  class SwitchCaseComponent extends DisposableComponent {
2550
+ cdr;
2705
2551
  #switch$_accessor_storage = proxify((ValueModel));
2706
2552
  get switch$() { return this.#switch$_accessor_storage; }
2707
2553
  set switch$(value) { this.#switch$_accessor_storage = value; }
@@ -2710,8 +2556,9 @@ class SwitchCaseComponent extends DisposableComponent {
2710
2556
  set switch(value) { this.#switch_accessor_storage = value; }
2711
2557
  switchCaseOptions;
2712
2558
  selectedIndex = 0;
2713
- constructor() {
2559
+ constructor(cdr) {
2714
2560
  super();
2561
+ this.cdr = cdr;
2715
2562
  }
2716
2563
  ngAfterContentInit() {
2717
2564
  const subscription = this.switchCaseOptions.changes.subscribe(change => this.updateSelection());
@@ -2748,7 +2595,7 @@ class SwitchCaseComponent extends DisposableComponent {
2748
2595
  this.selectedIndex = -1;
2749
2596
  }
2750
2597
  }
2751
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SwitchCaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2598
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SwitchCaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
2752
2599
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SwitchCaseComponent, selector: "aup-switch-case", inputs: { switch$: "switch$", switch: "switch" }, queries: [{ propertyName: "switchCaseOptions", predicate: SwitchCaseOption }], usesInheritance: true, ngImport: i0, template: "<mat-tab-group class=\"content-wrapper\" no-tab-header full-height-tabs [selectedIndex]=\"selectedIndex\">\n <mat-tab *ngFor=\"let option of switchCaseOptions\">\n <ng-template [ngTemplateOutlet]=\"option.templateRef\"></ng-template>\n </mat-tab>\n</mat-tab-group>\n\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}mat-tab-group{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$1.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i3$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }] });
2753
2600
  }
2754
2601
  __decorate([
@@ -2762,7 +2609,7 @@ __decorate([
2762
2609
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SwitchCaseComponent, decorators: [{
2763
2610
  type: Component,
2764
2611
  args: [{ selector: 'aup-switch-case', template: "<mat-tab-group class=\"content-wrapper\" no-tab-header full-height-tabs [selectedIndex]=\"selectedIndex\">\n <mat-tab *ngFor=\"let option of switchCaseOptions\">\n <ng-template [ngTemplateOutlet]=\"option.templateRef\"></ng-template>\n </mat-tab>\n</mat-tab-group>\n\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}mat-tab-group{flex:1}\n"] }]
2765
- }], ctorParameters: function () { return []; }, propDecorators: { switch$: [{
2612
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { switch$: [{
2766
2613
  type: Input
2767
2614
  }], switch: [{
2768
2615
  type: Input
@@ -2959,7 +2806,6 @@ class ColumnTextSearchWrapper extends ColumnTextSearchFormatter.Delegate {
2959
2806
  }
2960
2807
  class ColumnModel extends GarbageCollector {
2961
2808
  columnId;
2962
- order;
2963
2809
  textPropertiesProvider;
2964
2810
  _columnTextProperties;
2965
2811
  _columnHeaderPortalRef;
@@ -2973,10 +2819,9 @@ class ColumnModel extends GarbageCollector {
2973
2819
  dasherisedColumnId;
2974
2820
  textSearchDelegate = new ColumnTextSearchWrapper();
2975
2821
  visible$;
2976
- constructor(columnId, order, textPropertiesProvider) {
2822
+ constructor(columnId, textPropertiesProvider) {
2977
2823
  super();
2978
2824
  this.columnId = columnId;
2979
- this.order = order;
2980
2825
  this.textPropertiesProvider = textPropertiesProvider;
2981
2826
  const { valueOf } = Dsl.disposeWith(this);
2982
2827
  this.installHeaderRenderer();
@@ -3021,14 +2866,6 @@ class ColumnModel extends GarbageCollector {
3021
2866
  this._columnTextProperties = columnTextProperties;
3022
2867
  return this;
3023
2868
  }
3024
- positionAfter(column) {
3025
- this.order.position(this, { after: column });
3026
- return this;
3027
- }
3028
- positionBefore(column) {
3029
- this.order.position(this, { before: column });
3030
- return this;
3031
- }
3032
2869
  getSearchTextFor(row) {
3033
2870
  return this.textSearchDelegate.format(row);
3034
2871
  }
@@ -3130,8 +2967,8 @@ __decorate([
3130
2967
 
3131
2968
  class CustomTemplateColumnModel extends ColumnModel {
3132
2969
  config = new TemplateCellRendererPortalRef();
3133
- constructor(columnId, order, defaults) {
3134
- super(columnId, order, defaults);
2970
+ constructor(columnId, defaults) {
2971
+ super(columnId, defaults);
3135
2972
  this.configureCellRenderer(this.config);
3136
2973
  }
3137
2974
  setTemplate(templateRef, viewContainer, fillCell, padChild) {
@@ -3209,17 +3046,12 @@ class AbstractTableComponent extends DisposableComponent {
3209
3046
  #showHeader_accessor_storage = true;
3210
3047
  get showHeader() { return this.#showHeader_accessor_storage; }
3211
3048
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
3212
- #enableScrolling$_accessor_storage = proxify((ValueModel));
3213
3049
  /**
3214
3050
  * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
3215
3051
  * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
3216
3052
  * containment area.
3217
3053
  */
3218
- get enableScrolling$() { return this.#enableScrolling$_accessor_storage; }
3219
- set enableScrolling$(value) { this.#enableScrolling$_accessor_storage = value; }
3220
- #enableScrolling_accessor_storage = false;
3221
- get enableScrolling() { return this.#enableScrolling_accessor_storage; }
3222
- set enableScrolling(value) { this.#enableScrolling_accessor_storage = value; }
3054
+ enableScrolling = false;
3223
3055
  columns;
3224
3056
  columnIds;
3225
3057
  columnsById;
@@ -3238,6 +3070,7 @@ class AbstractTableComponent extends DisposableComponent {
3238
3070
  super();
3239
3071
  this.injector = injector;
3240
3072
  const { chain, when } = Dsl.disposeWith(this);
3073
+ this._visibleRows$.setDelegate(this._dataSource$);
3241
3074
  when(chain(this._dataSource$).first()).becomesTruthy(it => {
3242
3075
  if (it === this.identityOf(it)) {
3243
3076
  console.warn("Table model identity function is using reference equality. This can cause lots of table re-rendering", {
@@ -3256,7 +3089,7 @@ class AbstractTableComponent extends DisposableComponent {
3256
3089
  if (!model) {
3257
3090
  lang$1.illegalState("aup-table tableModel is nil");
3258
3091
  }
3259
- this.columnsById = chain(model.columns$).indexBy('columnId');
3092
+ this.columnsById = chain(model.columns).indexBy('columnId');
3260
3093
  this._dataSource$.setDelegate(model.dataSource$);
3261
3094
  model.initialise(this.injector, (row) => this.identityOf(row));
3262
3095
  }
@@ -3273,7 +3106,7 @@ class AbstractTableComponent extends DisposableComponent {
3273
3106
  }
3274
3107
  }
3275
3108
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
3276
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeader$: "showHeader$", showHeader: "showHeader", enableScrolling$: "enableScrolling$", enableScrolling: "enableScrolling" }, host: { properties: { "class": "this.baseCssClass" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
3109
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeader$: "showHeader$", showHeader: "showHeader", enableScrolling: "enableScrolling" }, host: { properties: { "class": "this.baseCssClass" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
3277
3110
  }
3278
3111
  __decorate([
3279
3112
  Proxify(),
@@ -3283,14 +3116,6 @@ __decorate([
3283
3116
  StoreInValueModel(),
3284
3117
  __metadata("design:type", Object)
3285
3118
  ], AbstractTableComponent.prototype, "showHeader", null);
3286
- __decorate([
3287
- Proxify(),
3288
- __metadata("design:type", ValueModel)
3289
- ], AbstractTableComponent.prototype, "enableScrolling$", null);
3290
- __decorate([
3291
- StoreInValueModel(),
3292
- __metadata("design:type", Boolean)
3293
- ], AbstractTableComponent.prototype, "enableScrolling", null);
3294
3119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, decorators: [{
3295
3120
  type: Component,
3296
3121
  args: [{
@@ -3301,8 +3126,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
3301
3126
  type: Input
3302
3127
  }], showHeader: [{
3303
3128
  type: Input
3304
- }], enableScrolling$: [{
3305
- type: Input
3306
3129
  }], enableScrolling: [{
3307
3130
  type: Input
3308
3131
  }], baseCssClass: [{
@@ -3363,8 +3186,6 @@ class EditSession extends GarbageCollector {
3363
3186
  // console.warn()
3364
3187
  // }
3365
3188
  this._liveRowValue$.value = produce(this._liveRowValue$.value, draft => {
3366
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3367
- // @ts-ignore
3368
3189
  this.form.writeDirtyStateTo(draft);
3369
3190
  });
3370
3191
  });
@@ -3467,11 +3288,11 @@ class DefaultCellRendererComponent {
3467
3288
  return this._value;
3468
3289
  }
3469
3290
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3470
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: DefaultCellRendererComponent, selector: "aup-default-cell-renderer", inputs: { value: "value" }, ngImport: i0, template: "<span [innerHTML]=\"value?.toString()| aupHighlight\"></span>\n", styles: [""], dependencies: [{ kind: "pipe", type: HighlightPipe, name: "aupHighlight" }] });
3291
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: DefaultCellRendererComponent, selector: "aup-default-cell-renderer", inputs: { value: "value" }, ngImport: i0, template: "<span [innerHTML]=\"value| aupHighlight\"></span>\n", styles: [""], dependencies: [{ kind: "pipe", type: HighlightPipe, name: "aupHighlight" }] });
3471
3292
  }
3472
3293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, decorators: [{
3473
3294
  type: Component,
3474
- args: [{ selector: "aup-default-cell-renderer", template: "<span [innerHTML]=\"value?.toString()| aupHighlight\"></span>\n" }]
3295
+ args: [{ selector: "aup-default-cell-renderer", template: "<span [innerHTML]=\"value| aupHighlight\"></span>\n" }]
3475
3296
  }], propDecorators: { value: [{
3476
3297
  type: Input
3477
3298
  }] } });
@@ -3609,14 +3430,25 @@ class Bounds extends Dimension {
3609
3430
  })(Bounds || (Bounds = {}));
3610
3431
 
3611
3432
  class ResizeAwareComponent extends DisposableComponent {
3612
- elementRef = this.inject(ElementRef);
3613
- ngZone = this.inject(NgZone);
3614
- boundsTracker = new ResizeAwareComponent.ResizeTracker(this.elementRef, this.ngZone);
3433
+ elementRef;
3434
+ ngZone;
3435
+ _bounds$ = new MutableValueModel(new Bounds(0, 0, 0, 0));
3436
+ constructor(elementRef, ngZone) {
3437
+ super();
3438
+ this.elementRef = elementRef;
3439
+ this.ngZone = ngZone;
3440
+ }
3615
3441
  ngAfterViewInit() {
3616
- this.boundsTracker.notifyViewReady();
3442
+ const element = this.elementRef.nativeElement;
3443
+ const ro = new ResizeObserver((entries, observer) => {
3444
+ this.ngZone.run(() => this._updateBounds());
3445
+ });
3446
+ ro.observe(element);
3447
+ this.onDispose(() => ro.disconnect());
3448
+ setTimeout(() => this._updateBounds());
3617
3449
  }
3618
3450
  get bounds$() {
3619
- return this.boundsTracker.bounds$;
3451
+ return this._bounds$.readonly$;
3620
3452
  }
3621
3453
  get nativeElement() {
3622
3454
  return this.elementRef.nativeElement;
@@ -3626,160 +3458,57 @@ class ResizeAwareComponent extends DisposableComponent {
3626
3458
  return this.bounds.relativePositionOf(point);
3627
3459
  }
3628
3460
  get bounds() {
3629
- return this.bounds$.value;
3461
+ return this._bounds$.value;
3462
+ }
3463
+ _updateBounds() {
3464
+ this._bounds$.value = Bounds.ofElement(this.nativeElement);
3630
3465
  }
3631
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeAwareComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
3466
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeAwareComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
3632
3467
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ResizeAwareComponent, usesInheritance: true, ngImport: i0 });
3633
3468
  }
3634
3469
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeAwareComponent, decorators: [{
3635
3470
  type: Directive
3636
- }] });
3637
- (function (ResizeAwareComponent) {
3638
- class ResizeTracker extends GarbageCollector {
3639
- elementRef;
3640
- ngZone;
3641
- _bounds$ = new MutableValueModel(new Bounds(0, 0, 0, 0));
3642
- width$;
3643
- height$;
3644
- top$;
3645
- left$;
3646
- bottom$;
3647
- right$;
3648
- constructor(elementRef, ngZone) {
3649
- super();
3650
- this.elementRef = elementRef;
3651
- this.ngZone = ngZone;
3652
- const { chain } = Dsl.disposeWith(this);
3653
- this.width$ = chain(this.bounds$).pluck("width");
3654
- this.height$ = chain(this.bounds$).pluck("height");
3655
- this.top$ = chain(this.bounds$).pluck("top");
3656
- this.left$ = chain(this.bounds$).pluck("left");
3657
- this.bottom$ = chain.numericValue(this.top$).add(this.height$);
3658
- this.right$ = chain.numericValue(this.left$).add(this.width$);
3659
- }
3660
- notifyViewReady() {
3661
- const element = this.elementRef.nativeElement;
3662
- const ro = new ResizeObserver((entries, observer) => {
3663
- this.ngZone.run(() => this._updateBounds());
3664
- });
3665
- ro.observe(element);
3666
- this.onDispose(() => ro.disconnect());
3667
- setTimeout(() => this._updateBounds());
3668
- }
3669
- get bounds$() {
3670
- return this._bounds$.readonly$;
3671
- }
3672
- get nativeElement() {
3673
- return this.elementRef.nativeElement;
3674
- }
3675
- // TODO: Make this handle body scroll
3676
- relativePositionOf(point) {
3677
- return this.bounds.relativePositionOf(point);
3678
- }
3679
- get bounds() {
3680
- return this._bounds$.value;
3681
- }
3682
- _updateBounds() {
3683
- this._bounds$.value = Bounds.ofElement(this.nativeElement);
3684
- }
3685
- }
3686
- ResizeAwareComponent.ResizeTracker = ResizeTracker;
3687
- })(ResizeAwareComponent || (ResizeAwareComponent = {}));
3471
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; } });
3688
3472
 
3689
- var ColumnOrderManager;
3690
- (function (ColumnOrderManager) {
3691
- function processPosition(position, callback) {
3692
- if (position) {
3693
- const keys = Object.keys(position);
3694
- if (keys.includes("before")) {
3695
- return position["before"] ? callback.before(position["before"]) : callback.first();
3696
- }
3697
- else {
3698
- return position["after"] ? callback.after(position["after"]) : callback.last();
3699
- }
3700
- }
3701
- else {
3702
- return callback.last();
3703
- }
3704
- }
3705
- ColumnOrderManager.processPosition = processPosition;
3706
- })(ColumnOrderManager || (ColumnOrderManager = {}));
3707
-
3708
- class ColumnRef {
3709
- column;
3710
- position;
3711
- constructor(column, position) {
3712
- this.column = column;
3713
- this.position = position;
3714
- }
3715
- }
3716
- class ColumnManager extends GarbageCollector {
3717
- _columnRefs$ = new MutableListModel();
3718
- orderedColumnRefs$;
3719
- _columnsById$;
3720
- allColumns$;
3721
- columnVisibilities$ = new WatchList();
3722
- visibleColumns$;
3473
+ class ColumnListModel extends AbstractComputedListModel {
3474
+ _allColumns$ = new MutableListModel();
3475
+ columnsById$;
3723
3476
  constructor() {
3724
3477
  super();
3725
3478
  const { chain } = Dsl.disposeWith(this);
3726
- this.orderedColumnRefs$ = chain(this._columnRefs$).orderBy("position", "asc");
3727
- this.allColumns$ = this.orderedColumnRefs$.pluck("column");
3728
- this._columnsById$ = chain(this.allColumns$).indexBy('columnId');
3729
- this.visibleColumns$ = chain(this.allColumns$).select(it => it.visible$.value, {
3730
- dependsOn: this.columnVisibilities$
3731
- });
3479
+ this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
3732
3480
  }
3733
- position(column, newPosition) {
3734
- const target = this._columnRefs$.query().findMatching(it => it.column === column);
3735
- const position = this.computePosition(newPosition);
3736
- this._columnRefs$.replace(target, { with: new ColumnRef(target.column, position) });
3481
+ get allColumns$() {
3482
+ return this._allColumns$.readonly$;
3737
3483
  }
3738
3484
  getColumn(id) {
3739
- return this._columnsById$.get(id);
3485
+ return this.columnsById$.get(id);
3740
3486
  }
3741
3487
  hasColumn(id) {
3742
- return !!this._columnsById$.get(id);
3488
+ return !!this.columnsById$.get(id);
3743
3489
  }
3744
3490
  hasMatchingColumn(row, regex) {
3745
3491
  // only search the visible columns
3746
- return !!this.visibleColumns$.value.find(c => regex.test(c.getSearchTextFor(row)));
3492
+ return !!this.value.find(c => regex.test(c.getSearchTextFor(row)));
3747
3493
  }
3748
- addColumn(column, position) {
3494
+ addColumn(column, index) {
3749
3495
  if (this.hasColumn(column.columnId)) {
3750
3496
  lang.illegalState(`Column with id=${column.columnId} already exists`);
3751
3497
  }
3752
3498
  this.registerDisposable(column);
3753
- this._columnRefs$.push(new ColumnRef(column, this.computePosition(position)));
3754
- this.columnVisibilities$.add(column.visible$);
3755
- return column;
3756
- }
3757
- computePosition(position) {
3758
- const q = this.orderedColumnRefs$.query();
3759
- return ColumnOrderManager.processPosition(position, {
3760
- before(col) {
3761
- const index = q.findIndex(ref => ref.column === col);
3762
- const beforeCol = q.value[index];
3763
- const afterCol = index - 1 >= 0 ? q.value[index - 1] : undefined;
3764
- return generateKeyBetween(afterCol?.position, beforeCol.position);
3765
- },
3766
- after(col) {
3767
- const index = q.findIndex(ref => ref.column === col);
3768
- const afterCol = q.value[index];
3769
- const beforeCol = index + 1 < q.length ? q.value[index + 1] : undefined;
3770
- return generateKeyBetween(afterCol.position, beforeCol?.position);
3771
- },
3772
- first() {
3773
- return generateKeyBetween(null, q.first()?.position);
3774
- },
3775
- last() {
3776
- // add it to the end of the list
3777
- return generateKeyBetween(q.last()?.position, null);
3499
+ this.runInTransaction(() => {
3500
+ if (!isNil(index)) {
3501
+ this._allColumns$.insert(index, column);
3778
3502
  }
3503
+ else {
3504
+ this._allColumns$.push(column);
3505
+ }
3506
+ this.registerDisposable(this.trackSource(column.visible$));
3779
3507
  });
3508
+ return column;
3780
3509
  }
3781
3510
  doComputeValue() {
3782
- return this.allColumns$.value.filter(c => c.visible$.value);
3511
+ return this._allColumns$.value.filter(c => c.visible$.value);
3783
3512
  }
3784
3513
  }
3785
3514
 
@@ -3813,8 +3542,8 @@ function EnableCellTextSearch(options) {
3813
3542
 
3814
3543
  class CustomValueColumnModel extends ColumnModel {
3815
3544
  getValue;
3816
- constructor(columnId, order, defaults, getValue) {
3817
- super(columnId, order, defaults);
3545
+ constructor(columnId, defaults, getValue) {
3546
+ super(columnId, defaults);
3818
3547
  this.getValue = getValue;
3819
3548
  this.cellRenderer(DefaultCellRendererComponent);
3820
3549
  }
@@ -3822,17 +3551,17 @@ class CustomValueColumnModel extends ColumnModel {
3822
3551
  this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.Null()), row => this.getValue(row));
3823
3552
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3824
3553
  if (firstTime) {
3825
- if (isFunction(onComponentInitOrOptions)) {
3554
+ if (isFunction$1(onComponentInitOrOptions)) {
3826
3555
  onComponentInitOrOptions(component);
3827
3556
  }
3828
3557
  else {
3829
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3558
+ if (isFunction$1(onComponentInitOrOptions?.onComponentInit)) {
3830
3559
  onComponentInitOrOptions.onComponentInit(component);
3831
3560
  }
3832
3561
  }
3833
3562
  }
3834
3563
  component.value = this.getValue(rowData.row);
3835
- if (!isFunction(onComponentInitOrOptions) && isFunction(onComponentInitOrOptions?.onRowUpdate)) {
3564
+ if (!isFunction$1(onComponentInitOrOptions) && isFunction$1(onComponentInitOrOptions?.onRowUpdate)) {
3836
3565
  onComponentInitOrOptions.onRowUpdate(component, rowData.row);
3837
3566
  }
3838
3567
  }));
@@ -3844,8 +3573,8 @@ class CustomValueColumnModel extends ColumnModel {
3844
3573
  }
3845
3574
 
3846
3575
  class EditorControlColumnModel extends ColumnModel {
3847
- constructor(columnId, order, saveCommandFactory, defaults) {
3848
- super(columnId, order, defaults);
3576
+ constructor(columnId, saveCommandFactory, defaults) {
3577
+ super(columnId, defaults);
3849
3578
  this.cellRenderer(EditRowControlsComponent);
3850
3579
  }
3851
3580
  cellRenderer(componentType) {
@@ -3870,8 +3599,8 @@ class ListPropertyColumnModel extends ColumnModel {
3870
3599
  intermediate.map(v => v?.toString()).join(", ") :
3871
3600
  intermediate?.toString();
3872
3601
  };
3873
- constructor(id, order, property, defaults) {
3874
- super(id, order, defaults);
3602
+ constructor(id, property, defaults) {
3603
+ super(id, defaults);
3875
3604
  this.property = property;
3876
3605
  this.cellRenderer(DefaultCellRendererComponent);
3877
3606
  }
@@ -3887,7 +3616,7 @@ class ListPropertyColumnModel extends ColumnModel {
3887
3616
  }
3888
3617
  cellEditor(editor, validatorsOrInitialiser, initialiseComponent) {
3889
3618
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3890
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3619
+ const initialiser = isFunction$1(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3891
3620
  this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
3892
3621
  const formListModel = editSession.form.pluckList(this.property);
3893
3622
  if (validators) {
@@ -3916,8 +3645,8 @@ class PropertyColumnModel extends ColumnModel {
3916
3645
  _defaultSearchTextFormatter = (value) => {
3917
3646
  return (this._userFormat ?? Functions.identity)(value)?.toString();
3918
3647
  };
3919
- constructor(id, order, property, defaults) {
3920
- super(id, order, defaults);
3648
+ constructor(id, property, defaults) {
3649
+ super(id, defaults);
3921
3650
  this.property = property;
3922
3651
  this.cellRenderer(DefaultCellRendererComponent);
3923
3652
  }
@@ -3925,11 +3654,11 @@ class PropertyColumnModel extends ColumnModel {
3925
3654
  this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => ColumnTextSearchFormatter.forFormatter(this._defaultSearchTextFormatter)), row => row[this.property]);
3926
3655
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3927
3656
  if (firstTime) {
3928
- if (isFunction(onComponentInitOrOptions)) {
3657
+ if (isFunction$1(onComponentInitOrOptions)) {
3929
3658
  onComponentInitOrOptions(component);
3930
3659
  }
3931
3660
  else {
3932
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3661
+ if (isFunction$1(onComponentInitOrOptions?.onComponentInit)) {
3933
3662
  onComponentInitOrOptions.onComponentInit(component);
3934
3663
  }
3935
3664
  }
@@ -3954,7 +3683,7 @@ class PropertyColumnModel extends ColumnModel {
3954
3683
  component[ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
3955
3684
  let disableEditCallback = false;
3956
3685
  if (firstTime) {
3957
- if (isFunction(options?.onComponentInit)) {
3686
+ if (isFunction$1(options?.onComponentInit)) {
3958
3687
  options.onComponentInit(component);
3959
3688
  }
3960
3689
  // install our edit callback
@@ -3969,7 +3698,7 @@ class PropertyColumnModel extends ColumnModel {
3969
3698
  disableEditCallback = true;
3970
3699
  component.value = rowData.row[this.property];
3971
3700
  disableEditCallback = false;
3972
- if (!isFunction(options) && isFunction(options?.onRowUpdate)) {
3701
+ if (!isFunction$1(options) && isFunction$1(options?.onRowUpdate)) {
3973
3702
  options.onRowUpdate(component, rowData.row);
3974
3703
  }
3975
3704
  }));
@@ -3977,7 +3706,7 @@ class PropertyColumnModel extends ColumnModel {
3977
3706
  }
3978
3707
  cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
3979
3708
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3980
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
3709
+ const initialiser = isFunction$1(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
3981
3710
  this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
3982
3711
  const formValueModel = editSession.form.pluck(this.property);
3983
3712
  if (validators) {
@@ -4004,8 +3733,8 @@ class SelectionColumnModel extends ColumnModel {
4004
3733
  selectionModel;
4005
3734
  _enableHeaderControls = true;
4006
3735
  _color = "accent";
4007
- constructor(columnId, order, defaults, selectionModel) {
4008
- super(columnId, order, defaults);
3736
+ constructor(columnId, defaults, selectionModel) {
3737
+ super(columnId, defaults);
4009
3738
  this.selectionModel = selectionModel;
4010
3739
  const { chain } = Dsl.disposeWith(this);
4011
3740
  this._selectRowOnClick(false);
@@ -4055,15 +3784,13 @@ class TableMoreMenuComponent extends DisposableComponent {
4055
3784
  popupType$ = new MutableValueModel();
4056
3785
  popupComponentPortal$;
4057
3786
  _visible$ = this.registerDisposable(new DelegatingValueModel());
4058
- initialiseCallback;
4059
3787
  constructor() {
4060
3788
  super();
4061
3789
  const { chain } = Dsl.disposeWith(this);
4062
3790
  this.popupComponentPortal$ = chain(this.popupType$).map(type => new ComponentPortal(type));
4063
3791
  }
4064
- configurePopupComponentType(popupComponentType, configureCallback) {
3792
+ configurePopupComponentType(popupComponentType) {
4065
3793
  this.popupType$.value = popupComponentType;
4066
- this.initialiseCallback = configureCallback;
4067
3794
  }
4068
3795
  // Stops tree selection when clicking the menu button
4069
3796
  preventDefault($event) {
@@ -4074,9 +3801,6 @@ class TableMoreMenuComponent extends DisposableComponent {
4074
3801
  const component = $event.instance;
4075
3802
  component.initialise(this.value$, Command.create(() => this.matMenuTrigger.closeMenu()));
4076
3803
  this._visible$.setDelegate(component.visible$);
4077
- if (this.initialiseCallback) {
4078
- this.initialiseCallback(component);
4079
- }
4080
3804
  }
4081
3805
  get visible$() {
4082
3806
  return this._visible$.readonly$;
@@ -4111,25 +3835,16 @@ class RowClass {
4111
3835
  this.matches = matches;
4112
3836
  }
4113
3837
  }
4114
- class RowAttribute {
4115
- attributeName;
4116
- getValue;
4117
- constructor(attributeName, getValue) {
4118
- this.attributeName = attributeName;
4119
- this.getValue = getValue;
4120
- }
4121
- }
4122
3838
  class AbstractTableModel extends GarbageCollector {
4123
3839
  _dataSource$ = this.registerDisposable(new DelegatingListModel());
4124
3840
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
4125
3841
  _visibleRows$ = this.registerDisposable(new DelegatingListModel());
4126
- columnManager = this.registerDisposable(new ColumnManager());
3842
+ _columnList = this.registerDisposable(new ColumnListModel());
4127
3843
  _editorSessions = new MutableListModel();
4128
3844
  _rowsBeingEdited$;
4129
3845
  saveCommandFactory;
4130
3846
  _editorSessionByRowId;
4131
3847
  rowClassNamePredicates = [];
4132
- rowAttributeGenerators = [];
4133
3848
  _columnTextPropertiesLookup;
4134
3849
  editing$;
4135
3850
  firstEditableColumn$;
@@ -4154,15 +3869,15 @@ class AbstractTableModel extends GarbageCollector {
4154
3869
  });
4155
3870
  this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
4156
3871
  this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
4157
- this.textSearchPredicate$ = chain(this.visibleColumns$).reduceAll(columns => {
3872
+ this.textSearchPredicate$ = chain(this.visibleColumns).reduce(columns => {
4158
3873
  return (row, regex) => {
4159
3874
  return (!regex || !!columns.find(c => regex.test(c.getSearchTextFor(row))));
4160
3875
  };
4161
3876
  });
4162
- this.firstEditableColumn$ = chain(this.columns$).select(c => c.hasEditorPortal()).first();
4163
- this.firstVisibleColumn$ = chain(this.visibleColumns$).first();
4164
- this.lastVisibleColumn$ = chain(this.visibleColumns$).last();
4165
- this.rowSelectionDisabledOnAllColumns$ = chain(this.columnManager.visibleColumns$).select(column => column.isRowSelectionEnabled()).count().equals(0);
3877
+ this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
3878
+ this.firstVisibleColumn$ = chain(this._columnList).first();
3879
+ this.lastVisibleColumn$ = chain(this._columnList).last();
3880
+ this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
4166
3881
  this.dataSourceEmpty$ = chain(this.dataSource$).isEmpty();
4167
3882
  this.selectedItems$ = this.selectionModelProxy.selectedItems$;
4168
3883
  this.leadSelection$ = this.selectionModelProxy.leadSelection$;
@@ -4186,7 +3901,7 @@ class AbstractTableModel extends GarbageCollector {
4186
3901
  ],
4187
3902
  parent: injector
4188
3903
  });
4189
- this.columns$.value.forEach(c => c.initialise(customInjector));
3904
+ this.columns.value.forEach(c => c.initialise(customInjector));
4190
3905
  this.identityOf = identityOf;
4191
3906
  }
4192
3907
  get dataSource$() {
@@ -4239,19 +3954,19 @@ class AbstractTableModel extends GarbageCollector {
4239
3954
  });
4240
3955
  });
4241
3956
  }
4242
- get columns$() {
4243
- return this.columnManager.allColumns$;
3957
+ get columns() {
3958
+ return this._columnList.allColumns$;
4244
3959
  }
4245
- get visibleColumns$() {
4246
- return this.columnManager.visibleColumns$;
3960
+ get visibleColumns() {
3961
+ return this._columnList.readonly$;
4247
3962
  }
4248
3963
  pluck(property, options) {
4249
3964
  const columnId = options?.columnId || property.toString();
4250
- return this.addColumn(new PropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
3965
+ return this.addColumn(new PropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
4251
3966
  }
4252
3967
  pluckList(property, options) {
4253
3968
  const columnId = options?.columnId || property.toString();
4254
- return this.addColumn(new ListPropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
3969
+ return this.addColumn(new ListPropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
4255
3970
  }
4256
3971
  // TODO: clean this up and assign the selection model on teh table directly.
4257
3972
  // tableModel.useSelectionModel(model) and have the seleciton column automatically
@@ -4260,32 +3975,32 @@ class AbstractTableModel extends GarbageCollector {
4260
3975
  _addSelectionColumn(selectionModel, visible) {
4261
3976
  assert.isNil(this.selectionColumnModel);
4262
3977
  const columnId = "selection-column";
4263
- this.selectionColumnModel = new SelectionColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
3978
+ this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
4264
3979
  this.selectionColumnModel.useSelectionModel(selectionModel);
4265
3980
  this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
4266
- const selectionColumnModel = this.addColumn(this.selectionColumnModel, { before: null }); // first column
4267
- if (!isNil(visible)) {
3981
+ const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
3982
+ if (!isNil$1(visible)) {
4268
3983
  selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
4269
3984
  }
4270
3985
  return selectionColumnModel;
4271
3986
  }
4272
3987
  addEditControls(saveCommandFactory, formFactory) {
4273
3988
  this.saveCommandFactory = saveCommandFactory;
4274
- if (isFunction(formFactory)) {
3989
+ if (isFunction$1(formFactory)) {
4275
3990
  this._createForm = formFactory;
4276
3991
  }
4277
3992
  const columnId = "editControls";
4278
- return this.addColumn(new EditorControlColumnModel(columnId, this.columnManager, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
3993
+ return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
4279
3994
  }
4280
3995
  addCustomColumn(columnId, dataAccessor) {
4281
- return this.addColumn(new CustomValueColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), dataAccessor));
3996
+ return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), dataAccessor));
4282
3997
  }
4283
3998
  addComponentColumn(columnId, component, onComponentInitOrOptions) {
4284
- return this.addColumn(new CustomValueColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), row => row)).cellRenderer(component, onComponentInitOrOptions);
3999
+ return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), row => row)).cellRenderer(component, onComponentInitOrOptions);
4285
4000
  }
4286
- addMoreMenu(componentClass, initialiseCallback) {
4001
+ addMoreMenu(componentClass) {
4287
4002
  return this.addComponentColumn("more-menu", TableMoreMenuComponent, (component) => {
4288
- component.configurePopupComponentType(componentClass, initialiseCallback);
4003
+ component.configurePopupComponentType(componentClass);
4289
4004
  }).columnTextProperties({
4290
4005
  headerText() {
4291
4006
  return "";
@@ -4293,14 +4008,11 @@ class AbstractTableModel extends GarbageCollector {
4293
4008
  });
4294
4009
  }
4295
4010
  addTemplateColumn(columnId) {
4296
- return this.addColumn(new CustomTemplateColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId)));
4011
+ return this.addColumn(new CustomTemplateColumnModel(columnId, () => this.getColumnTextProperties(columnId)));
4297
4012
  }
4298
4013
  addRowClass(className, predicate) {
4299
4014
  this.rowClassNamePredicates.push(new RowClass(className, predicate));
4300
4015
  }
4301
- addRowAttribute(attributeName, getValue) {
4302
- this.rowAttributeGenerators.push(new RowAttribute(attributeName, getValue));
4303
- }
4304
4016
  getRowClasses(row) {
4305
4017
  const classNames = [];
4306
4018
  this.rowClassNamePredicates.forEach(i => {
@@ -4310,13 +4022,8 @@ class AbstractTableModel extends GarbageCollector {
4310
4022
  });
4311
4023
  return classNames;
4312
4024
  }
4313
- getRowAttributes(row) {
4314
- return this.rowAttributeGenerators.reduce((result, generator) => {
4315
- return { ...result, [generator.attributeName]: generator.getValue(row) };
4316
- }, {});
4317
- }
4318
- addColumn(column, position) {
4319
- return this.columnManager.addColumn(column, position);
4025
+ addColumn(column, index) {
4026
+ return this._columnList.addColumn(column, index);
4320
4027
  }
4321
4028
  columnTextProperties(columnTextProperties) {
4322
4029
  this._columnTextPropertiesLookup = columnTextProperties;
@@ -4484,31 +4191,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
4484
4191
  args: ['class']
4485
4192
  }] } });
4486
4193
 
4487
- const AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER = new InjectionToken("AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER");
4488
- class TableRowAttributesDirective {
4489
- elementRef;
4490
- aupTableRowAttributes;
4491
- constructor(elementRef) {
4492
- this.elementRef = elementRef;
4493
- }
4494
- ngOnInit() {
4495
- for (const attr in this.aupTableRowAttributes) {
4496
- this.elementRef.nativeElement.setAttribute(attr, this.aupTableRowAttributes[attr]);
4497
- }
4498
- }
4499
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
4500
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: TableRowAttributesDirective, selector: "[aupTableRowAttributes]", inputs: { aupTableRowAttributes: "aupTableRowAttributes" }, ngImport: i0 });
4501
- }
4502
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, decorators: [{
4503
- type: Directive,
4504
- args: [{
4505
- selector: "[aupTableRowAttributes]",
4506
- }]
4507
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { aupTableRowAttributes: [{
4508
- type: Input
4509
- }] } });
4510
4194
  class TableBodyComponent extends ResizeAwareComponent {
4511
- bufferMultiplier;
4512
4195
  #data$_accessor_storage = proxify((ListModel));
4513
4196
  get data$() { return this.#data$_accessor_storage; }
4514
4197
  set data$(value) { this.#data$_accessor_storage = value; }
@@ -4521,66 +4204,51 @@ class TableBodyComponent extends ResizeAwareComponent {
4521
4204
  #showHeader_accessor_storage = true;
4522
4205
  get showHeader() { return this.#showHeader_accessor_storage; }
4523
4206
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
4207
+ visibleRowCount = new EventEmitter();
4524
4208
  trackBy;
4525
- #scrollMode$_accessor_storage = proxify((ValueModel));
4526
- get scrollMode$() { return this.#scrollMode$_accessor_storage; }
4527
- set scrollMode$(value) { this.#scrollMode$_accessor_storage = value; }
4528
- #scrollMode_accessor_storage = "none";
4529
- get scrollMode() { return this.#scrollMode_accessor_storage; }
4530
- set scrollMode(value) { this.#scrollMode_accessor_storage = value; }
4531
- scrollViewport;
4209
+ /**
4210
+ * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
4211
+ * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
4212
+ * containment area.
4213
+ */
4214
+ enableScrolling = false;
4532
4215
  columns$;
4533
4216
  columnIds$;
4534
4217
  columnsById$;
4218
+ _visibleRowCount$;
4535
4219
  // TODO: support user defined header and row heights via css vars.
4536
- headerHeight$ = new MutableValueModel(48);
4537
- rowHeight$ = new MutableValueModel(44);
4220
+ headerHeight$ = new MutableValueModel(29);
4221
+ rowHeight$ = new MutableValueModel(40);
4538
4222
  baseCssClass = "aup-table-component";
4539
- virtualScrollDataSource = new TableVirtualScrollDataSource();
4540
- virtualScrollActive$ = new MutableValueModel(false);
4541
- scrollTimeout;
4542
- constructor(bufferMultiplier = 1) {
4543
- super();
4544
- this.bufferMultiplier = bufferMultiplier;
4545
- const { chain, when, observe } = Dsl.disposeWith(this);
4223
+ constructor(elementRef, ngZone) {
4224
+ super(elementRef, ngZone);
4225
+ const { chain, when } = Dsl.disposeWith(this);
4546
4226
  const actualHeaderHeight$ = chain(this.showHeader$).map(show => {
4547
4227
  return show ? this.headerHeight$.value : 0;
4548
4228
  }, { dependsOn: this.headerHeight$ });
4549
- // performance is terrible if the data changes while we're scrolling, so we postpone updates until
4550
- // scrolling stops.
4551
- const delayedDatea$ = chain(this.data$).postponeWhile(this.virtualScrollActive$);
4552
- when(delayedDatea$).changes(delatedData => {
4553
- this.virtualScrollDataSource.data = delatedData;
4554
- this.scheduleTableHeightCheck();
4555
- }, { initialValue: "evaluate" });
4229
+ this._visibleRowCount$ = chain(this.bounds$).map(bounds => {
4230
+ // TODO: this doesn't take into account any css styling adjustments etc. Will investigate if it's an issue.
4231
+ const rawRowCount = (bounds.height - actualHeaderHeight$.value) / this.rowHeight$.value;
4232
+ return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
4233
+ }, {
4234
+ dependsOn: [actualHeaderHeight$, this.rowHeight$],
4235
+ postponeWhile: chain(this.bounds$).pluckNumeric("height").isLessThan(1)
4236
+ });
4237
+ when(this._visibleRowCount$).changes(visibleRows => {
4238
+ this.visibleRowCount.emit(visibleRows);
4239
+ }, { initialValue: "triggerChangeUnlessNil" });
4556
4240
  this.onInit(() => {
4557
- this.columns$ = chain(this.tableModel.visibleColumns$);
4241
+ this.columns$ = chain(this.tableModel.columns);
4558
4242
  this.columnIds$ = chain(this.columns$).pluck("columnId");
4559
4243
  this.columnsById$ = chain(this.columns$).indexBy('columnId');
4560
4244
  });
4561
- // const txo = new TransactionObserver({verbose: false}).onEvent(e => console.log(e.name, e.payload));
4562
- // txo.observe('this.virtualScrollRowRange$', this.virtualScrollRowRange$);
4563
- // txo.observe('this.virtualScrollSpacerSize$', this.virtualScrollSpacerSize$);
4564
- // txo.observe('this.virtualRows$', this.virtualRows$);
4565
- // txo.observe('this.tableBodyHeight$', this.tableBodyHeight$);
4566
- // txo.observe('this.virtualScrollActive$', this.virtualScrollActive$);
4567
- }
4568
- ngAfterViewInit() {
4569
- super.ngAfterViewInit();
4570
- if (this.scrollViewport) {
4571
- const { observe } = Dsl.disposeWith(this);
4572
- this.scrollViewport.elementScrolled().subscribe(() => this.notifyScrolled());
4573
- }
4245
+ const txo = new TransactionObserver().onEvent(e => console.log(e.name, e.payload));
4246
+ txo.observe('this.boundsModel', this.bounds$);
4247
+ txo.observe('this._visibleRowCount$', this._visibleRowCount$);
4574
4248
  }
4575
4249
  get hideHeader() {
4576
4250
  return !this.showHeader;
4577
4251
  }
4578
- get headerHeightCssVar() {
4579
- return `${this.headerHeight$.value}px`;
4580
- }
4581
- get rowHeightCssVar() {
4582
- return `${this.rowHeight$.value}px`;
4583
- }
4584
4252
  isEditing(row) {
4585
4253
  return !!this.tableModel.getEditSessionFor(row);
4586
4254
  }
@@ -4605,34 +4273,8 @@ class TableBodyComponent extends ResizeAwareComponent {
4605
4273
  }
4606
4274
  return classes;
4607
4275
  }
4608
- scheduleTableHeightCheck(waitMillis = 50) {
4609
- setTimeout(() => {
4610
- const tbody = this.elementRef.nativeElement.querySelector("tbody");
4611
- const bodyHeight = tbody.offsetHeight;
4612
- if (this.data$.length > 0 && bodyHeight < this.rowHeight$.value) {
4613
- // Hacks to get our virtual scroll to repaint
4614
- // Logger.get(this).log(`rowCount=${this.data$.length}, bodyHeight=${bodyHeight} -> virtual table not rendering, triggering resize to force repaint`)
4615
- window.dispatchEvent(new Event('resize'));
4616
- if (waitMillis < 500) {
4617
- this.scheduleTableHeightCheck(waitMillis + 50);
4618
- }
4619
- }
4620
- }, waitMillis);
4621
- }
4622
- notifyScrolled() {
4623
- this.virtualScrollActive$.value = true;
4624
- this.clearScrollTimeout();
4625
- this.scrollTimeout = setTimeout(() => {
4626
- return this.virtualScrollActive$.value = false;
4627
- }, 200);
4628
- }
4629
- clearScrollTimeout() {
4630
- if (this.scrollTimeout) {
4631
- clearTimeout(this.scrollTimeout);
4632
- }
4633
- }
4634
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, deps: [{ token: AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
4635
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableBodyComponent, selector: "aup-table-body", inputs: { data$: "data$", tableModel: "tableModel", showHeader$: "showHeader$", showHeader: "showHeader", trackBy: "trackBy", scrollMode$: "scrollMode$", scrollMode: "scrollMode" }, host: { properties: { "attr.scrollMode": "this.scrollMode", "class": "this.baseCssClass", "class.hide-header": "this.hideHeader", "style.--aup-table-header-height": "this.headerHeightCssVar", "style.--aup-table-row-height": "this.rowHeightCssVar" } }, viewQueries: [{ propertyName: "scrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "\n<div class=\"classic-scroll-container\" *ngIf=\"scrollMode$.value !== 'virtual'\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\" [multiTemplateDataRows]>\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [aupTableRowAttributes]=\"tableModel.getRowAttributes(row)\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n<cdk-virtual-scroll-viewport *ngIf=\"scrollMode$.value === 'virtual'\"\n [tvsItemSize]=\"rowHeight$.value\"\n [headerHeight]=\"headerHeight$.value\"\n [bufferMultiplier]=\"bufferMultiplier\"\n>\n <table mat-table [dataSource]=\"virtualScrollDataSource\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [aupTableRowAttributes]=\"tableModel.getRowAttributes(row)\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</cdk-virtual-scroll-viewport>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host[scrollMode=virtual] cdk-virtual-scroll-viewport{flex:1}:host[scrollMode=virtual] table th{height:var(--aup-table-header-height);max-height:var(--aup-table-header-height);min-height:var(--aup-table-header-height)}:host[scrollMode=virtual] table td{height:var(--aup-table-row-height);max-height:var(--aup-table-row-height);min-height:var(--aup-table-row-height)}:host[scrollMode=classic]{min-height:0}:host[scrollMode=classic] .classic-scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$6.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2$6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1$2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i4$5.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "directive", type: TableRowAttributesDirective, selector: "[aupTableRowAttributes]", inputs: ["aupTableRowAttributes"] }, { kind: "component", type: TableCellComponent, selector: "aup-table-cell", inputs: ["row", "column", "editSession", "tableModel"] }, { kind: "component", type: TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: ["column"] }] });
4276
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
4277
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableBodyComponent, selector: "aup-table-body", inputs: { data$: "data$", tableModel: "tableModel", showHeader$: "showHeader$", showHeader: "showHeader", trackBy: "trackBy", enableScrolling: "enableScrolling" }, outputs: { visibleRowCount: "visibleRowCount" }, host: { properties: { "class.enable-scrolling": "this.enableScrolling", "class": "this.baseCssClass", "class.hide-header": "this.hideHeader" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$6.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2$6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: TableCellComponent, selector: "aup-table-cell", inputs: ["row", "column", "editSession", "tableModel"] }, { kind: "component", type: TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: ["column"] }] });
4636
4278
  }
4637
4279
  __decorate([
4638
4280
  Proxify(),
@@ -4650,23 +4292,10 @@ __decorate([
4650
4292
  StoreInValueModel(),
4651
4293
  __metadata("design:type", Object)
4652
4294
  ], TableBodyComponent.prototype, "showHeader", null);
4653
- __decorate([
4654
- Proxify(),
4655
- __metadata("design:type", ValueModel)
4656
- ], TableBodyComponent.prototype, "scrollMode$", null);
4657
- __decorate([
4658
- StoreInValueModel(),
4659
- __metadata("design:type", String)
4660
- ], TableBodyComponent.prototype, "scrollMode", null);
4661
4295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, decorators: [{
4662
4296
  type: Component,
4663
- args: [{ selector: "aup-table-body", template: "\n<div class=\"classic-scroll-container\" *ngIf=\"scrollMode$.value !== 'virtual'\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\" [multiTemplateDataRows]>\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [aupTableRowAttributes]=\"tableModel.getRowAttributes(row)\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n<cdk-virtual-scroll-viewport *ngIf=\"scrollMode$.value === 'virtual'\"\n [tvsItemSize]=\"rowHeight$.value\"\n [headerHeight]=\"headerHeight$.value\"\n [bufferMultiplier]=\"bufferMultiplier\"\n>\n <table mat-table [dataSource]=\"virtualScrollDataSource\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [aupTableRowAttributes]=\"tableModel.getRowAttributes(row)\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</cdk-virtual-scroll-viewport>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host[scrollMode=virtual] cdk-virtual-scroll-viewport{flex:1}:host[scrollMode=virtual] table th{height:var(--aup-table-header-height);max-height:var(--aup-table-header-height);min-height:var(--aup-table-header-height)}:host[scrollMode=virtual] table td{height:var(--aup-table-row-height);max-height:var(--aup-table-row-height);min-height:var(--aup-table-row-height)}:host[scrollMode=classic]{min-height:0}:host[scrollMode=classic] .classic-scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"] }]
4664
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
4665
- type: Inject,
4666
- args: [AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER]
4667
- }, {
4668
- type: Optional
4669
- }] }]; }, propDecorators: { data$: [{
4297
+ args: [{ selector: "aup-table-body", template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"] }]
4298
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { data$: [{
4670
4299
  type: Input
4671
4300
  }], tableModel: [{
4672
4301
  type: Input
@@ -4674,30 +4303,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
4674
4303
  type: Input
4675
4304
  }], showHeader: [{
4676
4305
  type: Input
4306
+ }], visibleRowCount: [{
4307
+ type: Output
4677
4308
  }], trackBy: [{
4678
4309
  type: Input
4679
- }], scrollMode$: [{
4680
- type: Input
4681
- }], scrollMode: [{
4310
+ }], enableScrolling: [{
4682
4311
  type: Input
4683
4312
  }, {
4684
4313
  type: HostBinding,
4685
- args: ["attr.scrollMode"]
4686
- }], scrollViewport: [{
4687
- type: ViewChild,
4688
- args: [CdkVirtualScrollViewport]
4314
+ args: ["class.enable-scrolling"]
4689
4315
  }], baseCssClass: [{
4690
4316
  type: HostBinding,
4691
4317
  args: ["class"]
4692
4318
  }], hideHeader: [{
4693
4319
  type: HostBinding,
4694
4320
  args: ["class.hide-header"]
4695
- }], headerHeightCssVar: [{
4696
- type: HostBinding,
4697
- args: ["style.--aup-table-header-height"]
4698
- }], rowHeightCssVar: [{
4699
- type: HostBinding,
4700
- args: ["style.--aup-table-row-height"]
4701
4321
  }] } });
4702
4322
 
4703
4323
  class TableMoreMenuPopupComponent extends DisposableComponent {
@@ -4818,10 +4438,8 @@ class TableFilterModel extends GarbageCollector {
4818
4438
  this.useSearchText(options.searchText$);
4819
4439
  this.useRowPredicate(options.predicate$);
4820
4440
  const { chain } = Dsl.disposeWith(this);
4821
- const textSearchRegex$ = chain(this._searchText$)
4822
- .debounce(250)
4823
- .map(text => {
4824
- return isEmpty(text) ? undefined : new RegExp(escapeStringRegexp(text), "i");
4441
+ const textSearchRegex$ = chain(this._searchText$).map(text => {
4442
+ return isEmpty$1(text) ? undefined : new RegExp(escapeStringRegexp(text), "i");
4825
4443
  }, { allowNil: true });
4826
4444
  this._rowPredicate = chain(this._rowPredicate$)
4827
4445
  .map(predicate => {
@@ -5029,14 +4647,28 @@ class TableComponent extends AbstractTableComponent {
5029
4647
  #filterModel_accessor_storage = proxify((TableFilterModel));
5030
4648
  get filterModel() { return this.#filterModel_accessor_storage; }
5031
4649
  set filterModel(value) { this.#filterModel_accessor_storage = value; }
5032
- tableBody;
4650
+ #enablePaging$_accessor_storage = proxify((ValueModel));
4651
+ get enablePaging$() { return this.#enablePaging$_accessor_storage; }
4652
+ set enablePaging$(value) { this.#enablePaging$_accessor_storage = value; }
4653
+ #enablePaging_accessor_storage = false;
4654
+ get enablePaging() { return this.#enablePaging_accessor_storage; }
4655
+ set enablePaging(value) { this.#enablePaging_accessor_storage = value; }
4656
+ // enablePaging() {
4657
+ // if (isNil(this.pageController)) {
4658
+ // const pagedListModel = this.registerDisposable(PagedListModel.create(this._visibleRows$.getDelegate(), this._pageSize));
4659
+ // this._visibleRows$.setDelegate(pagedListModel);
4660
+ // this._pageController = pagedListModel.pageController;
4661
+ // }
4662
+ // }
5033
4663
  _footerContentAdded = false;
5034
4664
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
5035
- scrollMode$;
4665
+ _pageSize = new MutableValueModel();
4666
+ pagedListModel;
5036
4667
  constructor(injector) {
5037
4668
  super(injector);
5038
- const { chain, when } = Dsl.disposeWith(this);
5039
- this.scrollMode$ = chain(this.enableScrolling$).map(enabled => enabled ? "virtual" : "none");
4669
+ const { when } = Dsl.disposeWith(this);
4670
+ this.onDispose(() => this.disposeOfPagedListModel());
4671
+ when(this.enablePaging$).changes(enabled => this.configurePaging(enabled));
5040
4672
  }
5041
4673
  ngOnInit() {
5042
4674
  super.ngOnInit();
@@ -5048,42 +4680,76 @@ class TableComponent extends AbstractTableComponent {
5048
4680
  else {
5049
4681
  this._filteredRows$.setDelegate(this._dataSource$);
5050
4682
  }
5051
- this._visibleRows$.setDelegate(this._filteredRows$);
5052
- // let users of the model know what the current visible and filtered rows are for selection models and what not
4683
+ this.configurePaging(this.enablePaging$.value);
5053
4684
  this.tableModel.bindToTable(this._filteredRows$, this._visibleRows$);
5054
4685
  }
5055
4686
  getModel() {
5056
4687
  return this.tableModel;
5057
4688
  }
4689
+ get pageController() {
4690
+ // TODO: need to support external page controllers if the paging occurs to our primary data source.
4691
+ return this.pagedListModel.pageController;
4692
+ }
4693
+ configurePaging(enable) {
4694
+ if (enable) {
4695
+ if (!this.pagedListModel) {
4696
+ this.pagedListModel = PagedListModel.create(this._filteredRows$, this._pageSize);
4697
+ }
4698
+ this._visibleRows$.setDelegate(this.pagedListModel);
4699
+ }
4700
+ else {
4701
+ this.disposeOfPagedListModel();
4702
+ this._visibleRows$.setDelegate(this._filteredRows$);
4703
+ }
4704
+ }
4705
+ disposeOfPagedListModel() {
4706
+ if (this.pagedListModel) {
4707
+ this.pagedListModel.dispose();
4708
+ this.pagedListModel = null;
4709
+ }
4710
+ }
5058
4711
  footerContentChanged($event) {
5059
4712
  // console.log($event);
5060
4713
  this._footerContentAdded = true;
5061
4714
  }
4715
+ //@Trace()
4716
+ updatePageSize(count) {
4717
+ this._pageSize.value = count;
4718
+ }
5062
4719
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5063
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableComponent, selector: "aup-table", inputs: { tableModel: "tableModel", filterModel: "filterModel" }, providers: [
4720
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableComponent, selector: "aup-table", inputs: { tableModel: "tableModel", filterModel: "filterModel", enablePaging$: "enablePaging$", enablePaging: "enablePaging" }, providers: [
5064
4721
  { provide: AbstractTableComponent, useExisting: TableComponent }
5065
- ], viewQueries: [{ propertyName: "tableBody", first: true, predicate: TableBodyComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [scrollMode$]=\"scrollMode$\"\n [trackBy]=\"trackBy\"\n [aupHighlightTextModel]=\"highlightText$\"\n></aup-table-body>\n<section class=\"table-footer\">\n <div class=\"footer-content\"><ng-content select=\"[footer], [slot=footer]\"></ng-content></div>\n</section>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}aup-table-body{flex:1}.table-footer{display:flex;flex-direction:row;align-items:center}.table-footer .footer-content{flex:1}\n"], dependencies: [{ kind: "directive", type: HighlightTextModelDirective, selector: "[aupHighlightTextModel]", inputs: ["aupHighlightTextModel"] }, { kind: "component", type: TableBodyComponent, selector: "aup-table-body", inputs: ["data$", "tableModel", "showHeader$", "showHeader", "trackBy", "scrollMode$", "scrollMode"] }] });
4722
+ ], usesInheritance: true, ngImport: i0, template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [enableScrolling]=\"enableScrolling\"\n [trackBy]=\"trackBy\"\n (visibleRowCount)=\"updatePageSize($event)\"\n [aupHighlightTextModel]=\"highlightText$\"\n></aup-table-body>\n<section class=\"table-footer\">\n <div class=\"footer-content\"><ng-content select=\"[footer]\"></ng-content></div>\n <aup-paginator *ngIf=\"enablePaging$.value\" [pageController]=\"pageController\"></aup-paginator>\n</section>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}aup-table-body{flex:1}.table-footer{display:flex;flex-direction:row;align-items:center}.table-footer .footer-content{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: HighlightTextModelDirective, selector: "[aupHighlightTextModel]", inputs: ["aupHighlightTextModel"] }, { kind: "component", type: PaginatorComponent, selector: "aup-paginator", inputs: ["pageController"] }, { kind: "component", type: TableBodyComponent, selector: "aup-table-body", inputs: ["data$", "tableModel", "showHeader$", "showHeader", "trackBy", "enableScrolling"], outputs: ["visibleRowCount"] }] });
5066
4723
  }
5067
4724
  __decorate([
5068
4725
  Proxify(),
5069
- __metadata("design:type", TableModel)
4726
+ __metadata("design:type", Object)
5070
4727
  ], TableComponent.prototype, "tableModel", null);
5071
4728
  __decorate([
5072
4729
  Proxify(),
5073
4730
  __metadata("design:type", Object)
5074
4731
  ], TableComponent.prototype, "filterModel", null);
4732
+ __decorate([
4733
+ Proxify(),
4734
+ __metadata("design:type", Object)
4735
+ ], TableComponent.prototype, "enablePaging$", null);
4736
+ __decorate([
4737
+ StoreInValueModel(),
4738
+ __metadata("design:type", Object)
4739
+ ], TableComponent.prototype, "enablePaging", null);
5075
4740
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableComponent, decorators: [{
5076
4741
  type: Component,
5077
4742
  args: [{ selector: 'aup-table', providers: [
5078
4743
  { provide: AbstractTableComponent, useExisting: TableComponent }
5079
- ], template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [scrollMode$]=\"scrollMode$\"\n [trackBy]=\"trackBy\"\n [aupHighlightTextModel]=\"highlightText$\"\n></aup-table-body>\n<section class=\"table-footer\">\n <div class=\"footer-content\"><ng-content select=\"[footer], [slot=footer]\"></ng-content></div>\n</section>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}aup-table-body{flex:1}.table-footer{display:flex;flex-direction:row;align-items:center}.table-footer .footer-content{flex:1}\n"] }]
4744
+ ], template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [enableScrolling]=\"enableScrolling\"\n [trackBy]=\"trackBy\"\n (visibleRowCount)=\"updatePageSize($event)\"\n [aupHighlightTextModel]=\"highlightText$\"\n></aup-table-body>\n<section class=\"table-footer\">\n <div class=\"footer-content\"><ng-content select=\"[footer]\"></ng-content></div>\n <aup-paginator *ngIf=\"enablePaging$.value\" [pageController]=\"pageController\"></aup-paginator>\n</section>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}aup-table-body{flex:1}.table-footer{display:flex;flex-direction:row;align-items:center}.table-footer .footer-content{flex:1}\n"] }]
5080
4745
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { tableModel: [{
5081
4746
  type: Input
5082
4747
  }], filterModel: [{
5083
4748
  type: Input
5084
- }], tableBody: [{
5085
- type: ViewChild,
5086
- args: [TableBodyComponent]
4749
+ }], enablePaging$: [{
4750
+ type: Input
4751
+ }], enablePaging: [{
4752
+ type: Input
5087
4753
  }] } });
5088
4754
 
5089
4755
  const SVG_HEIGHT = 60;
@@ -5264,7 +4930,7 @@ var DecoratedTreeNode;
5264
4930
  }
5265
4931
  }
5266
4932
  __decorate([
5267
- MemoizeGet(),
4933
+ Memoize(),
5268
4934
  __metadata("design:type", Array),
5269
4935
  __metadata("design:paramtypes", [])
5270
4936
  ], Decorator.prototype, "children", null);
@@ -5317,7 +4983,7 @@ var DecoratedTreeNode;
5317
4983
  __metadata("design:returntype", Array)
5318
4984
  ], Decorator.prototype, "ancestors", null);
5319
4985
  __decorate([
5320
- MemoizeGet(),
4986
+ Memoize(),
5321
4987
  __metadata("design:type", Number),
5322
4988
  __metadata("design:paramtypes", [])
5323
4989
  ], Decorator.prototype, "depth", null);
@@ -5328,8 +4994,8 @@ class TreeLabelColumnModel extends ColumnModel {
5328
4994
  expansionModel;
5329
4995
  labelFactory = () => undefined;
5330
4996
  iconFactory;
5331
- constructor(columnId, order, textPropertiesProvider, expansionModel) {
5332
- super(columnId, order, textPropertiesProvider);
4997
+ constructor(columnId, textPropertiesProvider, expansionModel) {
4998
+ super(columnId, textPropertiesProvider);
5333
4999
  this.expansionModel = expansionModel;
5334
5000
  this.cellRenderer(TreeLabelCellRendererComponent);
5335
5001
  }
@@ -5397,7 +5063,7 @@ class TreeTableModel extends AbstractTableModel {
5397
5063
  }
5398
5064
  treeControlColumn(builder) {
5399
5065
  const columnId = 'tree-label';
5400
- const column = new TreeLabelColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), this);
5066
+ const column = new TreeLabelColumnModel(columnId, () => this.getColumnTextProperties(columnId), this);
5401
5067
  builder(column);
5402
5068
  this.addColumn(column);
5403
5069
  }
@@ -5723,11 +5389,8 @@ class TreeTableComponent extends AbstractTableComponent {
5723
5389
  #expansionModel_accessor_storage = proxify((TreeExpansionModel));
5724
5390
  get expansionModel() { return this.#expansionModel_accessor_storage; }
5725
5391
  set expansionModel(value) { this.#expansionModel_accessor_storage = value; }
5726
- scrollMode$;
5727
5392
  constructor(injector) {
5728
5393
  super(injector);
5729
- const { chain } = Dsl.disposeWith(this);
5730
- this.scrollMode$ = chain(this.enableScrolling$).map(enabled => enabled ? "virtual" : "none");
5731
5394
  }
5732
5395
  ngOnInit() {
5733
5396
  super.ngOnInit();
@@ -5747,7 +5410,7 @@ class TreeTableComponent extends AbstractTableComponent {
5747
5410
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TreeTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5748
5411
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TreeTableComponent, selector: "aup-tree-table", inputs: { treeTableModel: "treeTableModel", expansionModel: "expansionModel" }, providers: [
5749
5412
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
5750
- ], usesInheritance: true, ngImport: i0, template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"treeTableModel\"\n [showHeader$]=\"showHeader$\"\n [scrollMode$]=\"scrollMode$\"\n [aupHighlightTextModel]=\"highlightText$\"\n [trackBy]=\"trackBy\"\n></aup-table-body>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host::ng-deep td.mat-mdc-cell{border-top-width:0!important;border-bottom-width:0!important}:host::ng-deep td.mat-column-tree-label{width:1px}:host::ng-deep aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}:host::ng-deep aup-tree-label-cell-renderer{flex:1}aup-table-body{flex:1}\n"], dependencies: [{ kind: "directive", type: HighlightTextModelDirective, selector: "[aupHighlightTextModel]", inputs: ["aupHighlightTextModel"] }, { kind: "component", type: TableBodyComponent, selector: "aup-table-body", inputs: ["data$", "tableModel", "showHeader$", "showHeader", "trackBy", "scrollMode$", "scrollMode"] }] });
5413
+ ], usesInheritance: true, ngImport: i0, template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"treeTableModel\"\n [showHeader$]=\"showHeader$\"\n [enableScrolling]=\"enableScrolling\"\n [aupHighlightTextModel]=\"highlightText$\"\n [trackBy]=\"trackBy\"\n></aup-table-body>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host::ng-deep td.mat-mdc-cell{border-top-width:0!important;border-bottom-width:0!important}:host::ng-deep td.mat-column-tree-label{width:1px}:host::ng-deep aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}:host::ng-deep aup-tree-label-cell-renderer{flex:1}aup-table-body{flex:1}\n"], dependencies: [{ kind: "directive", type: HighlightTextModelDirective, selector: "[aupHighlightTextModel]", inputs: ["aupHighlightTextModel"] }, { kind: "component", type: TableBodyComponent, selector: "aup-table-body", inputs: ["data$", "tableModel", "showHeader$", "showHeader", "trackBy", "enableScrolling"], outputs: ["visibleRowCount"] }] });
5751
5414
  }
5752
5415
  __decorate([
5753
5416
  Proxify(),
@@ -5761,7 +5424,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
5761
5424
  type: Component,
5762
5425
  args: [{ selector: 'aup-tree-table', providers: [
5763
5426
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
5764
- ], template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"treeTableModel\"\n [showHeader$]=\"showHeader$\"\n [scrollMode$]=\"scrollMode$\"\n [aupHighlightTextModel]=\"highlightText$\"\n [trackBy]=\"trackBy\"\n></aup-table-body>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host::ng-deep td.mat-mdc-cell{border-top-width:0!important;border-bottom-width:0!important}:host::ng-deep td.mat-column-tree-label{width:1px}:host::ng-deep aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}:host::ng-deep aup-tree-label-cell-renderer{flex:1}aup-table-body{flex:1}\n"] }]
5427
+ ], template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"treeTableModel\"\n [showHeader$]=\"showHeader$\"\n [enableScrolling]=\"enableScrolling\"\n [aupHighlightTextModel]=\"highlightText$\"\n [trackBy]=\"trackBy\"\n></aup-table-body>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host::ng-deep td.mat-mdc-cell{border-top-width:0!important;border-bottom-width:0!important}:host::ng-deep td.mat-column-tree-label{width:1px}:host::ng-deep aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}:host::ng-deep aup-tree-label-cell-renderer{flex:1}aup-table-body{flex:1}\n"] }]
5765
5428
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { treeTableModel: [{
5766
5429
  type: Input
5767
5430
  }], expansionModel: [{
@@ -5943,7 +5606,6 @@ class ComponentsModule {
5943
5606
  FocusableComponent,
5944
5607
  CardContainerComponent,
5945
5608
  TableComponent,
5946
- TableRowAttributesDirective,
5947
5609
  EditRowControlsComponent,
5948
5610
  ColumnTemplateDirective,
5949
5611
  DefaultCellRendererComponent,
@@ -5977,8 +5639,7 @@ class ComponentsModule {
5977
5639
  MarkdownComponent,
5978
5640
  TableBodyComponent,
5979
5641
  TableMoreMenuComponent,
5980
- TableMoreMenuPopupComponent,
5981
- SearchInputComponent], imports: [CommonModule,
5642
+ TableMoreMenuPopupComponent], imports: [CommonModule,
5982
5643
  BrowserAnimationsModule,
5983
5644
  FormsModule,
5984
5645
  MatInputModule,
@@ -5997,9 +5658,7 @@ class ComponentsModule {
5997
5658
  MatMenuModule,
5998
5659
  MatDividerModule,
5999
5660
  MatProgressSpinnerModule,
6000
- MatProgressBarModule,
6001
- ScrollingModule,
6002
- TableVirtualScrollModule], exports: [NumberInputComponent,
5661
+ MatProgressBarModule], exports: [NumberInputComponent,
6003
5662
  StringInputComponent,
6004
5663
  TextInputComponent,
6005
5664
  PasswordInputComponent,
@@ -6037,8 +5696,7 @@ class ComponentsModule {
6037
5696
  LoadingContainerComponent,
6038
5697
  MarkdownComponent,
6039
5698
  TableMoreMenuComponent,
6040
- TableMoreMenuPopupComponent,
6041
- SearchInputComponent] });
5699
+ TableMoreMenuPopupComponent] });
6042
5700
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ComponentsModule, providers: [
6043
5701
  FocusBindingFactory,
6044
5702
  MarkdownService
@@ -6061,9 +5719,7 @@ class ComponentsModule {
6061
5719
  MatMenuModule,
6062
5720
  MatDividerModule,
6063
5721
  MatProgressSpinnerModule,
6064
- MatProgressBarModule,
6065
- ScrollingModule,
6066
- TableVirtualScrollModule] });
5722
+ MatProgressBarModule] });
6067
5723
  }
6068
5724
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ComponentsModule, decorators: [{
6069
5725
  type: NgModule,
@@ -6088,9 +5744,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6088
5744
  MatMenuModule,
6089
5745
  MatDividerModule,
6090
5746
  MatProgressSpinnerModule,
6091
- MatProgressBarModule,
6092
- ScrollingModule,
6093
- TableVirtualScrollModule
5747
+ MatProgressBarModule
6094
5748
  ],
6095
5749
  declarations: [
6096
5750
  AbstractInputComponent,
@@ -6114,7 +5768,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6114
5768
  FocusableComponent,
6115
5769
  CardContainerComponent,
6116
5770
  TableComponent,
6117
- TableRowAttributesDirective,
6118
5771
  EditRowControlsComponent,
6119
5772
  ColumnTemplateDirective,
6120
5773
  DefaultCellRendererComponent,
@@ -6149,7 +5802,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6149
5802
  TableBodyComponent,
6150
5803
  TableMoreMenuComponent,
6151
5804
  TableMoreMenuPopupComponent,
6152
- SearchInputComponent
6153
5805
  ],
6154
5806
  exports: [
6155
5807
  NumberInputComponent,
@@ -6191,76 +5843,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6191
5843
  MarkdownComponent,
6192
5844
  TableMoreMenuComponent,
6193
5845
  TableMoreMenuPopupComponent,
6194
- SearchInputComponent
6195
5846
  ],
6196
5847
  providers: [
6197
5848
  FocusBindingFactory,
6198
- MarkdownService
6199
- ]
6200
- }]
6201
- }] });
6202
-
6203
- class LoadableComponent extends DisposableComponent {
6204
- #_loaded$ = new MutableValueModel();
6205
- #asyncLoadables = [];
6206
- #awaitedLoadables = [];
6207
- get loaded$() {
6208
- return this.#_loaded$.readonly$;
6209
- }
6210
- ngOnInit() {
6211
- super.ngOnInit();
6212
- this.#asyncLoadables.forEach(it => it.ensureLoaded());
6213
- if (this.#awaitedLoadables.length > 0) {
6214
- Promise.all(this.#awaitedLoadables.map(it => {
6215
- return it.ensureLoaded(); //.then(() => console.log(`${it.constructor.name} loaded`));
6216
- })).then(() => {
6217
- this.#_loaded$.value = true;
6218
- });
6219
- }
6220
- else {
6221
- this.#_loaded$.value = true;
6222
- }
6223
- }
6224
- injectLoadable(token, options) {
6225
- return this.registerLoadable(inject(token), options);
6226
- }
6227
- registerLoadable(loadable, options) {
6228
- if (this.loaded$.value) {
6229
- loadable.ensureLoaded();
6230
- }
6231
- else {
6232
- if (!options || options.wait === true) {
6233
- this.#awaitedLoadables.push(loadable);
6234
- }
6235
- else {
6236
- this.#asyncLoadables.push(loadable);
6237
- }
6238
- }
6239
- return loadable;
6240
- }
6241
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: LoadableComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
6242
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: LoadableComponent, usesInheritance: true, ngImport: i0 });
6243
- }
6244
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: LoadableComponent, decorators: [{
6245
- type: Directive
5849
+ MarkdownService
5850
+ ]
5851
+ }]
6246
5852
  }] });
6247
5853
 
6248
- class TextSearchContext {
6249
- row;
6250
- searchText;
6251
- searchRegex;
6252
- constructor(row, searchText, searchRegex) {
6253
- this.row = row;
6254
- this.searchText = searchText;
6255
- this.searchRegex = searchRegex;
6256
- }
6257
- getOrCreate(type, create) {
6258
- }
6259
- matchesText(text) {
6260
- return this.searchRegex.test(text);
6261
- }
6262
- }
6263
-
6264
5854
  /**
6265
5855
  * @file Automatically generated by barrelsby.
6266
5856
  */
@@ -6287,6 +5877,7 @@ class TextSearchContext {
6287
5877
  * </aup-activity-actions>
6288
5878
  */
6289
5879
  class ActivityActionsComponent extends DisposableComponent {
5880
+ cdr;
6290
5881
  confirmCommandComponent;
6291
5882
  cancelCommandComponent;
6292
5883
  #confirmCommand_accessor_storage = proxify((Command));
@@ -6315,8 +5906,9 @@ class ActivityActionsComponent extends DisposableComponent {
6315
5906
  }
6316
5907
  layout = ActivityActionsComponent.Layout.BLOCK;
6317
5908
  align = ActivityActionsComponent.Align.STRETCH;
6318
- constructor() {
5909
+ constructor(cdr) {
6319
5910
  super();
5911
+ this.cdr = cdr;
6320
5912
  }
6321
5913
  hasConfirmFace() {
6322
5914
  return !!this.confirmFace;
@@ -6335,8 +5927,8 @@ class ActivityActionsComponent extends DisposableComponent {
6335
5927
  focusCancel() {
6336
5928
  this.cancelCommandComponent.requestFocus();
6337
5929
  }
6338
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6339
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", 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=\"hasCancelFace()\">\n <aup-command #cancelCommandComponent class=\"cancel\" [command]=\"cancelCommand\" [face]=\"cancelFace\" data-cy=\"cancel-command\"></aup-command>\n</ng-container>\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", 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"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }] });
5930
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
5931
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", 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"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }] });
6340
5932
  }
6341
5933
  __decorate([
6342
5934
  Proxify(),
@@ -6348,8 +5940,8 @@ __decorate([
6348
5940
  ], ActivityActionsComponent.prototype, "cancelCommand", null);
6349
5941
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, decorators: [{
6350
5942
  type: Component,
6351
- args: [{ selector: 'aup-activity-actions', template: "<div class=\"content\">\n <ng-content></ng-content>\n</div>\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<ng-container *ngIf=\"hasConfirmFace()\">\n <aup-command #confirmCommandComponent class=\"confirm\" [command]=\"confirmCommand\" [face]=\"confirmFace\" data-cy=\"confirm-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"] }]
6352
- }], ctorParameters: function () { return []; }, propDecorators: { confirmCommandComponent: [{
5943
+ 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"] }]
5944
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { confirmCommandComponent: [{
6353
5945
  type: ViewChild,
6354
5946
  args: ["confirmCommandComponent"]
6355
5947
  }], cancelCommandComponent: [{
@@ -6392,7 +5984,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6392
5984
 
6393
5985
  const ACTIVITY_DATA = new InjectionToken("InteractionActivityData");
6394
5986
  // eslint-disable-next-line @angular-eslint/component-class-suffix
6395
- class Activity extends LoadableComponent {
5987
+ class Activity extends DisposableComponent {
6396
5988
  activityData = inject(ACTIVITY_DATA);
6397
5989
  activityReadyListeners = new EventListenerList();
6398
5990
  _busy$ = this.registerDisposable(new DelegatingValueModel().withDefault(false));
@@ -6447,6 +6039,7 @@ class Activity extends LoadableComponent {
6447
6039
  notifyActivityReady() {
6448
6040
  this.activityReadyListeners.fire(l => l(this));
6449
6041
  this._ready$.value = true;
6042
+ console.log("ready");
6450
6043
  }
6451
6044
  onActivityReady(callback) {
6452
6045
  return this.activityReadyListeners.add(callback);
@@ -6566,7 +6159,7 @@ class AbstractDialogComponent extends Activity {
6566
6159
  }
6567
6160
  }
6568
6161
  isDestructive() {
6569
- return isFunction(this.config['destructive']) && this.config["destructive"]();
6162
+ return isFunction$1(this.config['destructive']) && this.config["destructive"]();
6570
6163
  }
6571
6164
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractDialogComponent, deps: [{ token: ALERT_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
6572
6165
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractDialogComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
@@ -6583,7 +6176,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6583
6176
 
6584
6177
  class AbstractConfirmDialogComponent extends AbstractDialogComponent {
6585
6178
  cancelFace;
6586
- confirmClass = "aup-confirm-activity";
6587
6179
  constructor(config) {
6588
6180
  super(config);
6589
6181
  this.cancelFace = {
@@ -6594,7 +6186,7 @@ class AbstractConfirmDialogComponent extends AbstractDialogComponent {
6594
6186
  });
6595
6187
  }
6596
6188
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractConfirmDialogComponent, deps: [{ token: ALERT_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
6597
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractConfirmDialogComponent, selector: "ng-component", host: { properties: { "class": "this.confirmClass" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
6189
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractConfirmDialogComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
6598
6190
  }
6599
6191
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractConfirmDialogComponent, decorators: [{
6600
6192
  type: Component,
@@ -6604,10 +6196,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6604
6196
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
6605
6197
  type: Inject,
6606
6198
  args: [ALERT_CONFIG]
6607
- }] }]; }, propDecorators: { confirmClass: [{
6608
- type: HostBinding,
6609
- args: ["class"]
6610
- }] } });
6199
+ }] }]; } });
6611
6200
 
6612
6201
  class ActivityBodyComponent extends DisposableComponent {
6613
6202
  fullWidth = false;
@@ -7146,7 +6735,7 @@ const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
7146
6735
  // return true;
7147
6736
  // }
7148
6737
  // }
7149
- class PlaceComponent extends LoadableComponent {
6738
+ class PlaceComponent extends DisposableComponent {
7150
6739
  _placeReadyCallbacks = [];
7151
6740
  visitModel = new MutableValueModel();
7152
6741
  _inVisitUpdate = new Guard();
@@ -7203,7 +6792,6 @@ class PlaceComponent extends LoadableComponent {
7203
6792
  */
7204
6793
  installAndInitialiseBinding(initialVisit, parameterDef) {
7205
6794
  const model = this[parameterDef.propertyName];
7206
- assert.notNil(model);
7207
6795
  DebugContext.tag(model, `${this.placeDefinition.component.name}.${parameterDef.propertyName}`);
7208
6796
  const binding = this.registerDisposable(new Binding(this.visitModel, model, {
7209
6797
  toRight(visit) {
@@ -7288,7 +6876,7 @@ class PlaceComponent extends LoadableComponent {
7288
6876
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: PlaceComponent, usesInheritance: true, ngImport: i0 });
7289
6877
  }
7290
6878
  __decorate([
7291
- MemoizeGet(),
6879
+ Memoize(),
7292
6880
  __metadata("design:type", PlaceDefinition),
7293
6881
  __metadata("design:paramtypes", [])
7294
6882
  ], PlaceComponent.prototype, "placeDefinition", null);
@@ -7478,7 +7066,7 @@ class Visit {
7478
7066
  getRouterCommands() {
7479
7067
  return this.segments.reduce((result, v) => {
7480
7068
  const path = v.placeDefinition.path;
7481
- return isEmpty(path) ?
7069
+ return isEmpty$1(path) ?
7482
7070
  [...result, path] : // Angular doesn't support route params on empty path segments
7483
7071
  [...result, path, ...v.createRouterCommands()];
7484
7072
  }, []);
@@ -7494,7 +7082,7 @@ class Visit {
7494
7082
  }
7495
7083
  }
7496
7084
  __decorate([
7497
- Memoize(),
7085
+ Memoize$1(),
7498
7086
  __metadata("design:type", Function),
7499
7087
  __metadata("design:paramtypes", [PlaceDefinition]),
7500
7088
  __metadata("design:returntype", VisitSegment)
@@ -7875,7 +7463,10 @@ class SynchroniseInteractionContextIdsWithRoute extends NavigationSession {
7875
7463
  return true;
7876
7464
  }
7877
7465
  notifyActive() {
7878
- this.syncInteractionIdsWithRouter();
7466
+ // TODO: Do I still need this??
7467
+ setTimeout(() => {
7468
+ this.syncInteractionIdsWithRouter();
7469
+ });
7879
7470
  }
7880
7471
  // @Trace()
7881
7472
  onRouterEnd(event) {
@@ -8618,7 +8209,7 @@ class ConsolidatedParameterMap {
8618
8209
  }
8619
8210
  }
8620
8211
  __decorate([
8621
- MemoizeGet(),
8212
+ Memoize(),
8622
8213
  __metadata("design:type", Array),
8623
8214
  __metadata("design:paramtypes", [])
8624
8215
  ], ConsolidatedParameterMap.prototype, "keys", null);
@@ -8696,7 +8287,7 @@ class UrlSnapshot {
8696
8287
  return this.getPrimaryUrlSegments().find(s => s.path === placeDef.path);
8697
8288
  }
8698
8289
  isLastPlaceInUrl(placeDef) {
8699
- return last(this.getPrimaryUrlSegments()).path === placeDef.path;
8290
+ return last$1(this.getPrimaryUrlSegments()).path === placeDef.path;
8700
8291
  }
8701
8292
  createVisitSegmentFor(placeDef) {
8702
8293
  return new VisitSegment(placeDef, new ConsolidatedParameterMap(this.getPrimaryUrlSegments()));
@@ -9152,11 +8743,11 @@ class ActivityTitleComponent extends DisposableComponent {
9152
8743
  return this._color;
9153
8744
  }
9154
8745
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
9155
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: { hasTransparentBackground: "hasTransparentBackground", color: "color" }, host: { properties: { "class.transparent-background": "this.hasTransparentBackground", "attr.color": "this.color" } }, usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n<span style=\"flex:1\"></span>\n<ng-content select=\"[slot='title-end']\"></ng-content>\n", styles: [":host{display:flex;flex-direction:row;align-items:center}\n"] });
8746
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: { hasTransparentBackground: "hasTransparentBackground", color: "color" }, host: { properties: { "class.transparent-background": "this.hasTransparentBackground", "attr.color": "this.color" } }, usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:block}\n"] });
9156
8747
  }
9157
8748
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityTitleComponent, decorators: [{
9158
8749
  type: Component,
9159
- args: [{ selector: 'aup-activity-title', template: "<ng-content></ng-content>\n<span style=\"flex:1\"></span>\n<ng-content select=\"[slot='title-end']\"></ng-content>\n", styles: [":host{display:flex;flex-direction:row;align-items:center}\n"] }]
8750
+ args: [{ selector: 'aup-activity-title', template: "<ng-content></ng-content>\n", styles: [":host{display:block}\n"] }]
9160
8751
  }], propDecorators: { hasTransparentBackground: [{
9161
8752
  type: Input
9162
8753
  }, {
@@ -9421,7 +9012,6 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9421
9012
  tabs;
9422
9013
  activityOutlets;
9423
9014
  activityRefs = [];
9424
- animationDuration = "500ms";
9425
9015
  _identifier;
9426
9016
  _deferredCleanUp;
9427
9017
  interactionServiceApi;
@@ -9434,7 +9024,6 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9434
9024
  busy = this.registerDisposable(new DelegatingValueModel().withDefault(false));
9435
9025
  syncTabsJob = undefined;
9436
9026
  stable$;
9437
- wasActive = false;
9438
9027
  constructor(placeRouter) {
9439
9028
  super();
9440
9029
  this.placeRouter = placeRouter;
@@ -9471,12 +9060,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9471
9060
  * Returns true if an activity is currently running.
9472
9061
  */
9473
9062
  isActive() {
9474
- const isActive = this.getActiveActivityCount() > 0;
9475
- // if (this.wasActive !== isActive) {
9476
- // console.log({was: this.wasActive, is: isActive});
9477
- // }
9478
- // this.wasActive = isActive
9479
- return isActive;
9063
+ return this.getActiveActivityCount() > 0;
9480
9064
  }
9481
9065
  registerDisposable(disposable) {
9482
9066
  return this.garbage.registerDisposable(disposable);
@@ -9559,7 +9143,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9559
9143
  // by activity index)
9560
9144
  setTimeout(() => {
9561
9145
  this.activityRefs = []; // we have to do it after the animation timeout or the activity disappears before the animatin finsihes
9562
- }, this.getTabAnimationDurationInMillis());
9146
+ }, this.getTabAnimationDuration());
9563
9147
  const promise = this.interactionServiceApi.notifyFinished(this);
9564
9148
  this._deferredCleanUp = promise
9565
9149
  .finally(() => {
@@ -9585,6 +9169,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9585
9169
  /**
9586
9170
  * Synchronises the selected tab index.
9587
9171
  */
9172
+ // @Trace()
9588
9173
  synchroniseSelectedTabIndex() {
9589
9174
  assert.isTruthy(this.isActive());
9590
9175
  const previousIndex = this.tabs.selectedIndex;
@@ -9596,10 +9181,10 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9596
9181
  activityRef.setFocused(false);
9597
9182
  this.busy.setDelegate(activityRef.activityBusy);
9598
9183
  this.tabs.selectedIndex = newIndex;
9599
- // if (this.ready$.value) {
9600
- // // Note: We're not using the animation done event as it's firing almost immeadiately.
9601
- // setTimeout(() => this.finaliseActivityStates(), animate ? this.getTabAnimationDurationInMillis() : 0);
9602
- // }
9184
+ if (this.ready$.value) {
9185
+ // Note: We're not using the animation done event as it's firing almost immeadiately.
9186
+ setTimeout(() => this.finaliseActivityStates(), animate ? this.getTabAnimationDuration() : 0);
9187
+ }
9603
9188
  }
9604
9189
  }
9605
9190
  finaliseActivityStates() {
@@ -9613,12 +9198,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9613
9198
  return this.activityOutlets.toArray()[this.tabs.selectedIndex];
9614
9199
  }
9615
9200
  getTabAnimationDuration() {
9616
- // const s = this._started$.value ? this.animationDuration : "0";
9617
- // return s
9618
- return this.animationDuration;
9619
- }
9620
- getTabAnimationDurationInMillis() {
9621
- const match = this.animationDuration.match(/(\d+)(.*)/);
9201
+ const match = this.tabs.animationDuration.match(/(\d+)(.*)/);
9622
9202
  const numericValue = parseFloat(match[1]);
9623
9203
  switch (match[2].trim()) {
9624
9204
  case "ms":
@@ -9644,16 +9224,12 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9644
9224
  }
9645
9225
  }, 75);
9646
9226
  }
9647
- onAnimationDone() {
9648
- this._started$.value = true;
9649
- this.finaliseActivityStates();
9650
- }
9651
9227
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityContainerComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
9652
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ActivityContainerComponent, selector: "aup-activity-container", inputs: { dynamicHeight: "dynamicHeight", animationDuration: "animationDuration" }, viewQueries: [{ propertyName: "tabs", first: true, predicate: ["tabs"], descendants: true, static: true }, { propertyName: "activityOutlets", predicate: ActivityOutletComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-tab-group #tabs no-tab-header\n [dynamicHeight]=\"dynamicHeight\"\n [class.full-height-tabs]=\"!dynamicHeight\"\n [animationDuration]=\"getTabAnimationDuration()\"\n (animationDone)=\"onAnimationDone()\"\n>\n <mat-tab *ngFor=\"let activityRef of activityRefs; let i = index; trackBy: activityIndex\">\n <aup-busy-overlay [busy$]=\"busy\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <!--\n We have issues where angular is triggering a leave animation when an\n new activity is started, but is not running the enter animation\n when it is scrolled back into view. So we track the tab changes and\n disable all animations inside the tab while we're animating.\n -->\n <div class=\"activity-outlet-wrapper\" [@.disabled]=\"!activityRef.focused\">\n <aup-activity-outlet [nestedInteractionContext]=\"this\" [activityRef]=\"activityRef\"></aup-activity-outlet>\n </div>\n </aup-busy-overlay>\n </mat-tab>\n</mat-tab-group>\n", styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}aup-busy-overlay{flex:1}.activity-outlet-wrapper{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3$1.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i3$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: BusyOverlayComponent, selector: "aup-busy-overlay", inputs: ["busy$", "busy"] }, { kind: "directive", type: i5$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ActivityOutletComponent, selector: "aup-activity-outlet", inputs: ["nestedInteractionContext", "activityRef"] }] });
9228
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ActivityContainerComponent, selector: "aup-activity-container", inputs: { dynamicHeight: "dynamicHeight" }, viewQueries: [{ propertyName: "tabs", first: true, predicate: ["tabs"], descendants: true, static: true }, { propertyName: "activityOutlets", predicate: ActivityOutletComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-tab-group #tabs no-tab-header\n [dynamicHeight]=\"dynamicHeight\"\n [class.full-height-tabs]=\"!dynamicHeight\">\n <mat-tab *ngFor=\"let activityRef of activityRefs; let i = index; trackBy: activityIndex\">\n <aup-busy-overlay [busy$]=\"busy\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <!--\n We have issues where angular is triggering a leave animation when an\n new activity is started, but is not running the enter animation\n when it is scrolled back into view. So we track the tab changes and\n disable all animations inside the tab while we're animating.\n -->\n <div class=\"activity-outlet-wrapper\" [@.disabled]=\"!activityRef.focused\">\n <aup-activity-outlet [nestedInteractionContext]=\"this\" [activityRef]=\"activityRef\"></aup-activity-outlet>\n </div>\n </aup-busy-overlay>\n </mat-tab>\n</mat-tab-group>\n", styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}aup-busy-overlay{flex:1}.activity-outlet-wrapper{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3$1.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i3$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: BusyOverlayComponent, selector: "aup-busy-overlay", inputs: ["busy$", "busy"] }, { kind: "directive", type: i5$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ActivityOutletComponent, selector: "aup-activity-outlet", inputs: ["nestedInteractionContext", "activityRef"] }] });
9653
9229
  }
9654
9230
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityContainerComponent, decorators: [{
9655
9231
  type: Component,
9656
- args: [{ selector: "aup-activity-container", template: "<mat-tab-group #tabs no-tab-header\n [dynamicHeight]=\"dynamicHeight\"\n [class.full-height-tabs]=\"!dynamicHeight\"\n [animationDuration]=\"getTabAnimationDuration()\"\n (animationDone)=\"onAnimationDone()\"\n>\n <mat-tab *ngFor=\"let activityRef of activityRefs; let i = index; trackBy: activityIndex\">\n <aup-busy-overlay [busy$]=\"busy\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <!--\n We have issues where angular is triggering a leave animation when an\n new activity is started, but is not running the enter animation\n when it is scrolled back into view. So we track the tab changes and\n disable all animations inside the tab while we're animating.\n -->\n <div class=\"activity-outlet-wrapper\" [@.disabled]=\"!activityRef.focused\">\n <aup-activity-outlet [nestedInteractionContext]=\"this\" [activityRef]=\"activityRef\"></aup-activity-outlet>\n </div>\n </aup-busy-overlay>\n </mat-tab>\n</mat-tab-group>\n", styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}aup-busy-overlay{flex:1}.activity-outlet-wrapper{flex:1}\n"] }]
9232
+ args: [{ selector: "aup-activity-container", template: "<mat-tab-group #tabs no-tab-header\n [dynamicHeight]=\"dynamicHeight\"\n [class.full-height-tabs]=\"!dynamicHeight\">\n <mat-tab *ngFor=\"let activityRef of activityRefs; let i = index; trackBy: activityIndex\">\n <aup-busy-overlay [busy$]=\"busy\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <!--\n We have issues where angular is triggering a leave animation when an\n new activity is started, but is not running the enter animation\n when it is scrolled back into view. So we track the tab changes and\n disable all animations inside the tab while we're animating.\n -->\n <div class=\"activity-outlet-wrapper\" [@.disabled]=\"!activityRef.focused\">\n <aup-activity-outlet [nestedInteractionContext]=\"this\" [activityRef]=\"activityRef\"></aup-activity-outlet>\n </div>\n </aup-busy-overlay>\n </mat-tab>\n</mat-tab-group>\n", styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}aup-busy-overlay{flex:1}.activity-outlet-wrapper{flex:1}\n"] }]
9657
9233
  }], ctorParameters: function () { return [{ type: PlaceRouter }]; }, propDecorators: { dynamicHeight: [{
9658
9234
  type: Input
9659
9235
  }], tabs: [{
@@ -9662,8 +9238,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9662
9238
  }], activityOutlets: [{
9663
9239
  type: ViewChildren,
9664
9240
  args: [ActivityOutletComponent]
9665
- }], animationDuration: [{
9666
- type: Input
9667
9241
  }] } });
9668
9242
 
9669
9243
  class AbstractActivityTriggerComponent extends DisposableComponent {
@@ -9764,14 +9338,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9764
9338
  args: ['class.active']
9765
9339
  }] } });
9766
9340
 
9767
- const cssDurationRegex$1 = /(\d+)(m?s)/;
9341
+ const cssDurationRegex = /(\d+)(m?s)/;
9768
9342
  /**
9769
9343
  * @example
9770
9344
  * <aup-in-place-interaction-context #inPlaceInteractionContext>
9771
9345
  * </aup-in-place-interaction-context>
9772
9346
  *
9773
9347
  * in your component
9774
- * @ViewChild(InPlaceInteractionContextComponent)
9348
+ * @ViewChild('inPlaceInteractionContext', { static: true })
9775
9349
  * interactionContext: InteractionContext;
9776
9350
  *
9777
9351
  *
@@ -9794,7 +9368,7 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
9794
9368
  return this.animateFirstActivity ? (this.tabConfig?.animationDuration || "500ms") : "0ms";
9795
9369
  }
9796
9370
  get animationDurationMillis() {
9797
- const result = cssDurationRegex$1.exec(this.animationDuration);
9371
+ const result = cssDurationRegex.exec(this.animationDuration);
9798
9372
  if (!result) {
9799
9373
  lang.illegalState(`unsupported css duration: ${this.animationDuration}`);
9800
9374
  }
@@ -9867,7 +9441,7 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
9867
9441
  }
9868
9442
  }
9869
9443
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InPlaceInteractionContextComponent, deps: [{ token: MAT_TABS_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
9870
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: { animateFirstActivity: "animateFirstActivity", syncWithRoutes: "syncWithRoutes" }, host: { properties: { "class.active": "this.active" } }, viewQueries: [{ propertyName: "activityContainerComponent", first: true, predicate: ["activityContainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-tab-group no-tab-header [selectedIndex]=\"isActive() ? 1 : 0\" full-height-tabs\n (selectedTabChange)=\"onTabChanged($event)\"\n [dynamicHeight]=\"false\"\n [animationDuration]=\"animationDuration\">\n <mat-tab>\n <ng-content></ng-content>\n </mat-tab>\n <mat-tab>\n <aup-activity-container #activityContainer [dynamicHeight]=\"false\"></aup-activity-container>\n </mat-tab>\n</mat-tab-group>\n\n", styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}aup-activity-container{flex:1}\n"], dependencies: [{ kind: "component", type: i3$1.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i3$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: ActivityContainerComponent, selector: "aup-activity-container", inputs: ["dynamicHeight", "animationDuration"] }] });
9444
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: { animateFirstActivity: "animateFirstActivity", syncWithRoutes: "syncWithRoutes" }, host: { properties: { "class.active": "this.active" } }, viewQueries: [{ propertyName: "activityContainerComponent", first: true, predicate: ["activityContainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-tab-group no-tab-header [selectedIndex]=\"isActive() ? 1 : 0\" full-height-tabs\n (selectedTabChange)=\"onTabChanged($event)\"\n [dynamicHeight]=\"false\"\n [animationDuration]=\"animationDuration\">\n <mat-tab>\n <ng-content></ng-content>\n </mat-tab>\n <mat-tab>\n <aup-activity-container #activityContainer [dynamicHeight]=\"false\"></aup-activity-container>\n </mat-tab>\n</mat-tab-group>\n\n", styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}aup-activity-container{flex:1}\n"], dependencies: [{ kind: "component", type: i3$1.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i3$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: ActivityContainerComponent, selector: "aup-activity-container", inputs: ["dynamicHeight"] }] });
9871
9445
  }
9872
9446
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InPlaceInteractionContextComponent, decorators: [{
9873
9447
  type: Component,
@@ -10336,14 +9910,12 @@ class StringInputActivity extends InputActivity {
10336
9910
  [label]="activityData.label"
10337
9911
  [placeholder]="activityData.placeholder"
10338
9912
  [command.enter]="confirmCommand"
10339
- [command.escape]="cancelCommand"
10340
- [dense]="true"
10341
- ></aup-string-input>
9913
+ [command.escape]="cancelCommand"></aup-string-input>
10342
9914
  <aup-activity-actions [layout]="layout" align="end"
10343
9915
  [confirmFace]="confirmFace"
10344
9916
  [cancelFace]="cancelFace"
10345
9917
  ></aup-activity-actions>
10346
- `, isInline: true, dependencies: [{ kind: "component", type: StringInputComponent, selector: "aup-string-input", inputs: ["autocomplete", "enableClear$", "enableClear", "iconPrefix", "suffixCommand"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align"] }] });
9918
+ `, isInline: true, dependencies: [{ kind: "component", type: StringInputComponent, selector: "aup-string-input", inputs: ["autocomplete", "enableClear$", "enableClear", "iconPrefix"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align"] }] });
10347
9919
  }
10348
9920
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputActivity, decorators: [{
10349
9921
  type: Component,
@@ -10354,9 +9926,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10354
9926
  [label]="activityData.label"
10355
9927
  [placeholder]="activityData.placeholder"
10356
9928
  [command.enter]="confirmCommand"
10357
- [command.escape]="cancelCommand"
10358
- [dense]="true"
10359
- ></aup-string-input>
9929
+ [command.escape]="cancelCommand"></aup-string-input>
10360
9930
  <aup-activity-actions [layout]="layout" align="end"
10361
9931
  [confirmFace]="confirmFace"
10362
9932
  [cancelFace]="cancelFace"
@@ -10622,7 +10192,6 @@ class SelectInputActivity extends InputActivity {
10622
10192
  [options]="options"
10623
10193
  [optionLabelFormat]="optionLabelFormat"
10624
10194
  [allowNil]="activityData.allowNil"
10625
- [dense]="true"
10626
10195
  >
10627
10196
  <ng-template #nilOptionTemplate>{{activityData.nilLabel}}</ng-template>
10628
10197
  </aup-select-input>
@@ -10645,7 +10214,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10645
10214
  [options]="options"
10646
10215
  [optionLabelFormat]="optionLabelFormat"
10647
10216
  [allowNil]="activityData.allowNil"
10648
- [dense]="true"
10649
10217
  >
10650
10218
  <ng-template #nilOptionTemplate>{{activityData.nilLabel}}</ng-template>
10651
10219
  </aup-select-input>
@@ -10657,182 +10225,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10657
10225
  }]
10658
10226
  }] });
10659
10227
 
10660
- const slideDownOnEnterDef = style({
10661
- opacity: 0,
10662
- 'height': '0',
10663
- 'max-height': '0',
10664
- paddingTop: '0',
10665
- paddingBottom: '0'
10666
- });
10667
- // TODO: params aren't getting customised in the view. Need to figure out the correct approach.
10668
- const slideDownOnEnterAnimation = trigger('slideDownOnEnter', [
10669
- transition(':enter', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10670
- transition(':leave', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
10671
- ]);
10672
- const slideDownWhenOpenAnimation = trigger('slideDownWhenOpen', [
10673
- transition('closed => open', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10674
- transition('open => closed', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
10675
- ]);
10676
- const slideLeftOnEnterDef = style({
10677
- opacity: 0,
10678
- 'width': '0',
10679
- paddingLeft: '0',
10680
- paddingRight: '0'
10681
- });
10682
- const slideRightOnEnterAnimation = trigger('slideRightOnEnter', [
10683
- transition(':enter', [slideLeftOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10684
- transition(':leave', [animate('{{duration}}', slideLeftOnEnterDef)], { params: { duration: '100ms' } })
10685
- ]);
10686
- const ZERO_WIDTH = {
10687
- opacity: 0,
10688
- width: '0',
10689
- paddingLeft: '0',
10690
- paddingRight: '0',
10691
- };
10692
- const ZERO_HEIGHT = {
10693
- opacity: 0,
10694
- height: '0',
10695
- paddingTop: '0',
10696
- paddingBottom: '0',
10697
- };
10698
- const slideDownAndRightOnEnterAnimation = trigger('slideDownAndRightOnEnter', [
10699
- transition(':enter', [
10700
- style({ overflow: "hidden", whiteSpace: "nowrap", ...ZERO_WIDTH, ...ZERO_HEIGHT }),
10701
- animate('{{duration}}')
10702
- ], { params: { duration: '100ms' } }),
10703
- transition(':leave', [
10704
- style({ overflow: "hidden", whiteSpace: "nowrap" }),
10705
- group([
10706
- animate('{{duration}}', style(ZERO_HEIGHT)),
10707
- // Hack: 100ms is too quick as it animates from * - 0 as we only see it animate the width is greater than the parent.
10708
- // Not sure how to animate from * to natural new width of parent. This hack won't work for text that's just a little
10709
- // bit wider than the parent as it'll fall within the parent bounds very early in the animation cycle.
10710
- animate('300ms', style(ZERO_WIDTH)),
10711
- ])
10712
- ], { params: { duration: '100ms' } })
10713
- ]);
10714
-
10715
- const cssDurationRegex = /(\d+)(m?s)/;
10716
- /**
10717
- * This interaction context remains hidden (height: 0) until it is active.
10718
- * @example
10719
- * <aup-slide-down-interaction-context #inPlaceInteractionContext>
10720
- * </aup-slide-down-interaction-context>
10721
- *
10722
- * in your component
10723
- * @ViewChild(SlideDownInteractionContextComponent)
10724
- * interactionContext: InteractionContext;
10725
- *
10726
- *
10727
- */
10728
- class SlideDownInteractionContextComponent extends DisposableComponent {
10729
- tabConfig;
10730
- activityContainerComponent;
10731
- // NOTE: disabling this as I'm using the initialise callback to release the hacky height clamp.
10732
- // The whole registration thing is a bit naf so I should really clean that up at some point.
10733
- // /**
10734
- // * If true the activity will sync with the router to enable back button support. This is a work around for
10735
- // * deeply nested activities that can't be linked with the root place interactionContext hook for cancelling
10736
- // * active interactions.
10737
- // */
10738
- // @Input()
10739
- // syncWithRoutes = true;
10740
- dynamicHeight = true;
10741
- get active() {
10742
- return this.isActive();
10743
- }
10744
- // Horrible hack to stop the div and activity container bouncing back for a bit in after closing. No idea why it's doing that.
10745
- clampShut = true;
10746
- interactionService = this.inject(InteractionService);
10747
- constructor(tabConfig) {
10748
- super();
10749
- this.tabConfig = tabConfig;
10750
- }
10751
- ngAfterViewInit() {
10752
- // NOTE: this is a temp work around to detach inplace contexts from the router until AUP-88 is implemented.
10753
- // https://coolon.atlassian.net/browse/AUP-88?atlOrigin=eyJpIjoiOTg5YjEzZGUzZjRmNDg0NmExOWU3ZGJmMzJiNTRmNGYiLCJwIjoiaiJ9
10754
- const self = this;
10755
- this.activityContainerComponent.initialise("dont-care", {
10756
- async notifyActive(interactionContext) {
10757
- self.clampShut = false;
10758
- return undefined;
10759
- },
10760
- async notifyFinished(interactionContext) {
10761
- return undefined;
10762
- }
10763
- });
10764
- // if (this.syncWithRoutes) {
10765
- // this.interactionService.registerInplaceInteractionContext(this);
10766
- // }
10767
- }
10768
- getAnimationState() {
10769
- return {
10770
- value: this.isActive() ? "open" : "closed",
10771
- params: { duration: "200ms" }
10772
- };
10773
- }
10774
- // this is a regsitration callback from the interaction service
10775
- // @Trace() // webstorm says no usages... but I'm not sure.
10776
- onInplaceInteractionContextRegistered(id, api) {
10777
- this.activityContainerComponent.initialise(id, api);
10778
- }
10779
- get identifier() {
10780
- return this.activityContainerComponent.identifier;
10781
- }
10782
- alert(alert) {
10783
- return this.activityContainerComponent.alert(alert);
10784
- }
10785
- cancelActiveActivity() {
10786
- return this.activityContainerComponent.cancelActiveActivity();
10787
- }
10788
- confirm(confirm) {
10789
- return this.activityContainerComponent.confirm(confirm);
10790
- }
10791
- confirmOrReject(confirm) {
10792
- return this.activityContainerComponent.confirmOrReject(confirm);
10793
- }
10794
- confirmThen(confirm, activityType, data) {
10795
- return this.activityContainerComponent.confirmThen(confirm, activityType);
10796
- }
10797
- confirmThenExecute(confirm, operation) {
10798
- return this.activityContainerComponent.confirmThenExecute(confirm, operation);
10799
- }
10800
- isActive() {
10801
- return this.activityContainerComponent.isActive();
10802
- }
10803
- startActivity(activityType, data, options) {
10804
- return this.activityContainerComponent.startActivity(activityType, data, options);
10805
- }
10806
- onAnimationDone() {
10807
- if (!this.isActive()) {
10808
- this.clampShut = true;
10809
- }
10810
- }
10811
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SlideDownInteractionContextComponent, deps: [{ token: MAT_TABS_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
10812
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SlideDownInteractionContextComponent, selector: "aup-slide-down-interaction-context", inputs: { dynamicHeight: "dynamicHeight" }, host: { properties: { "class.active": "this.active" } }, viewQueries: [{ propertyName: "activityContainerComponent", first: true, predicate: ["activityContainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div [@slideDownWhenOpen]=\"getAnimationState()\" (@slideDownWhenOpen.done)=\"onAnimationDone()\" [style.max-height.px]=\"clampShut ? 0 : undefined\">\n <aup-activity-container #activityContainer [dynamicHeight]=\"dynamicHeight\"></aup-activity-container>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column}:host>div{overflow:hidden}\n"], dependencies: [{ kind: "component", type: ActivityContainerComponent, selector: "aup-activity-container", inputs: ["dynamicHeight", "animationDuration"] }], animations: [
10813
- slideDownWhenOpenAnimation
10814
- ] });
10815
- }
10816
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SlideDownInteractionContextComponent, decorators: [{
10817
- type: Component,
10818
- args: [{ selector: "aup-slide-down-interaction-context", animations: [
10819
- slideDownWhenOpenAnimation
10820
- ], template: "<div [@slideDownWhenOpen]=\"getAnimationState()\" (@slideDownWhenOpen.done)=\"onAnimationDone()\" [style.max-height.px]=\"clampShut ? 0 : undefined\">\n <aup-activity-container #activityContainer [dynamicHeight]=\"dynamicHeight\"></aup-activity-container>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column}:host>div{overflow:hidden}\n"] }]
10821
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
10822
- type: Inject,
10823
- args: [MAT_TABS_CONFIG]
10824
- }, {
10825
- type: Optional
10826
- }] }]; }, propDecorators: { activityContainerComponent: [{
10827
- type: ViewChild,
10828
- args: ["activityContainer", { static: true }]
10829
- }], dynamicHeight: [{
10830
- type: Input
10831
- }], active: [{
10832
- type: HostBinding,
10833
- args: ["class.active"]
10834
- }] } });
10835
-
10836
10228
  class InteractionContextTriggerForDirective extends GarbageCollector {
10837
10229
  aupInteractionContextTriggerFor;
10838
10230
  activityClass;
@@ -10915,7 +10307,6 @@ class InteractionModule {
10915
10307
  AlertDialogComponent,
10916
10308
  ActivityOutletComponent,
10917
10309
  InPlaceInteractionContextComponent,
10918
- SlideDownInteractionContextComponent,
10919
10310
  AddItemInteractionContextComponent,
10920
10311
  ActivityActionsComponent,
10921
10312
  PopupInteractionContextComponent,
@@ -10942,6 +10333,8 @@ class InteractionModule {
10942
10333
  RouterModule,
10943
10334
  MatIconModule,
10944
10335
  DirectivesModule,
10336
+ FlexModule,
10337
+ GridModule,
10945
10338
  ComponentsModule,
10946
10339
  FormsModule,
10947
10340
  MatInputModule,
@@ -10961,8 +10354,7 @@ class InteractionModule {
10961
10354
  InlineActivityTriggerComponent,
10962
10355
  ModalActivityTriggerComponent,
10963
10356
  AddCardActivityComponent,
10964
- InlineStringEditorComponent,
10965
- SlideDownInteractionContextComponent] });
10357
+ InlineStringEditorComponent] });
10966
10358
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InteractionModule, providers: [
10967
10359
  InteractionService
10968
10360
  // {
@@ -10976,6 +10368,8 @@ class InteractionModule {
10976
10368
  RouterModule,
10977
10369
  MatIconModule,
10978
10370
  DirectivesModule,
10371
+ FlexModule,
10372
+ GridModule,
10979
10373
  ComponentsModule,
10980
10374
  FormsModule,
10981
10375
  MatInputModule,
@@ -10994,6 +10388,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10994
10388
  RouterModule,
10995
10389
  MatIconModule,
10996
10390
  DirectivesModule,
10391
+ FlexModule,
10392
+ GridModule,
10997
10393
  ComponentsModule,
10998
10394
  FormsModule,
10999
10395
  MatInputModule,
@@ -11008,7 +10404,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11008
10404
  AlertDialogComponent,
11009
10405
  ActivityOutletComponent,
11010
10406
  InPlaceInteractionContextComponent,
11011
- SlideDownInteractionContextComponent,
11012
10407
  AddItemInteractionContextComponent,
11013
10408
  ActivityActionsComponent,
11014
10409
  PopupInteractionContextComponent,
@@ -11046,7 +10441,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11046
10441
  ModalActivityTriggerComponent,
11047
10442
  AddCardActivityComponent,
11048
10443
  InlineStringEditorComponent,
11049
- SlideDownInteractionContextComponent,
11050
10444
  ],
11051
10445
  providers: [
11052
10446
  InteractionService
@@ -11117,6 +10511,7 @@ class PlaceOutletComponent extends DisposableComponent {
11117
10511
  router;
11118
10512
  placeRouter;
11119
10513
  placeConfig;
10514
+ cdr;
11120
10515
  #animate$_accessor_storage = proxify((ValueModel));
11121
10516
  get animate$() { return this.#animate$_accessor_storage; }
11122
10517
  set animate$(value) { this.#animate$_accessor_storage = value; }
@@ -11150,11 +10545,12 @@ class PlaceOutletComponent extends DisposableComponent {
11150
10545
  animationEnabled;
11151
10546
  authorised;
11152
10547
  notAuthorisedNoticePortal;
11153
- constructor(router, placeRouter, placeConfig, unauthorisedPlaceNotice, parentOutlet) {
10548
+ constructor(router, placeRouter, placeConfig, unauthorisedPlaceNotice, parentOutlet, cdr) {
11154
10549
  super();
11155
10550
  this.router = router;
11156
10551
  this.placeRouter = placeRouter;
11157
10552
  this.placeConfig = placeConfig;
10553
+ this.cdr = cdr;
11158
10554
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
11159
10555
  this.parentOutletModel = new MutableValueModel(parentOutlet);
11160
10556
  const defaultPlaceAnimationOrder = chain(this.parentOutletModel)
@@ -11166,7 +10562,7 @@ class PlaceOutletComponent extends DisposableComponent {
11166
10562
  this.placesInAnimationOrder = chain(this.customPlaceAnimationOrder$)
11167
10563
  .otherwise(defaultPlaceAnimationOrder);
11168
10564
  this.activePlaceAnimationPosition = this.placesInAnimationOrder
11169
- .reduceAll((placesInOrder) => {
10565
+ .reduce((placesInOrder) => {
11170
10566
  let placeIndex = 0;
11171
10567
  if (activatePlaceType.value) {
11172
10568
  placeIndex = placesInOrder.indexOf(activatePlaceType.value);
@@ -11320,7 +10716,7 @@ class PlaceOutletComponent extends DisposableComponent {
11320
10716
  this.onAnimationFinishedJob = undefined;
11321
10717
  }
11322
10718
  }
11323
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceOutletComponent, deps: [{ token: i1$4.Router }, { token: PlaceRouter }, { token: AUP_PLACE_CONFIG, optional: true }, { token: AUP_UNAUTHORISED_PLACE_NOTICE_COMPONENT, optional: true }, { token: PlaceOutletComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
10719
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceOutletComponent, deps: [{ token: i1$4.Router }, { token: PlaceRouter }, { token: AUP_PLACE_CONFIG, optional: true }, { token: AUP_UNAUTHORISED_PLACE_NOTICE_COMPONENT, optional: true }, { token: PlaceOutletComponent, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11324
10720
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: PlaceOutletComponent, selector: "aup-place-outlet", inputs: { animate$: "animate$", animate: "animate", customPlaceAnimationOrder$: ["placeAnimationOrderModel", "customPlaceAnimationOrder$"], customPlaceAnimationOrder: ["placeAnimationOrder", "customPlaceAnimationOrder"] }, outputs: { placeChanged: "placeChanged" }, host: { properties: { "class.authorised": "this.isAuthorised" } }, viewQueries: [{ propertyName: "routerOut", first: true, predicate: ["routeOutlet"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"animationEnabled.value\">\n <div class=\"router-outlet-container\"\n cdkScrollable\n [@routeAnimations]=\"{value: getAnimationOrder(), params:{duration: animationDuration}}\"\n (@routeAnimations.start)=\"animationStarted()\"\n (@routeAnimations.done)=\"animationDone()\"\n >\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onOutletActivated(routerOutlet, $event)\"\n (deactivate)=\"onOutletDeactivated()\">\n </router-outlet>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!animationEnabled.value\">\n <div class=\"router-outlet-container\"\n cdkScrollable>\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onOutletActivated(routerOutlet, $event)\"\n (deactivate)=\"onOutletDeactivated()\">\n </router-outlet>\n </div>\n</ng-container>\n\n<div class=\"not-authorised-component-container\" *ngIf=\"!authorised.value\">\n <ng-template [cdkPortalOutlet]=\"notAuthorisedNoticePortal\"></ng-template>\n</div>\n", styles: [":host{display:flex;flex-direction:column;min-height:0}:host:not(.authorised) .router-outlet-container{display:none}.router-outlet-container{flex:1;display:block;position:relative;min-height:0;overflow-x:hidden;overflow-y:auto}router-outlet{display:none}.not-authorised-component-container{flex:1;display:grid;grid-template-columns:1fr;grid-template-rows:1fr}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i1$2.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: i3$2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], animations: [LEFT_RIGHT_PLACE_ANIMATION] });
11325
10721
  }
11326
10722
  __decorate([
@@ -11356,7 +10752,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11356
10752
  type: SkipSelf
11357
10753
  }, {
11358
10754
  type: Optional
11359
- }] }]; }, propDecorators: { animate$: [{
10755
+ }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { animate$: [{
11360
10756
  type: Input
11361
10757
  }], animate: [{
11362
10758
  type: Input
@@ -11489,7 +10885,7 @@ class ListPlaceNavComponent extends AbstractPlaceNavigationComponent {
11489
10885
  super(router);
11490
10886
  }
11491
10887
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ListPlaceNavComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11492
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ListPlaceNavComponent, selector: "aup-list-place-nav", usesInheritance: true, ngImport: i0, template: "<mat-nav-list fxFlex>\n <a mat-list-item *ngFor=\"let item of menuItems.value; trackBy: trackByPlaceDef\"\n aup-gc #gc=\"aup-gc\"\n [pectinCommand]=\"commandFactory.create(item.place, {disposedWith: gc})\"\n [class.active]=\"item.active\"\n [matTooltip]=\"getNavigationFace(item.place).tooltip()\">\n <aup-command-face [faces]=\"[getNavigationFace(item.place)]\"></aup-command-face>\n </a>\n</mat-nav-list>\n", styles: [":host{display:flex;flex-direction:column;--selected-border-color: #838383;--selected-color: inherit;--selected-background: #f1f1f1}mat-nav-list{padding-top:0}a{border-right:2px solid transparent}a.active{border-right:2px solid var(--selected-border-color);background:var(--selected-background);color:var(--selected-color)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3$3.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i3$3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "directive", type: GarbageCollectorDirective, selector: "[aup-gc]", exportAs: ["aup-gc"] }, { kind: "component", type: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }] });
10888
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ListPlaceNavComponent, selector: "aup-list-place-nav", usesInheritance: true, ngImport: i0, template: "<mat-nav-list fxFlex>\n <a mat-list-item *ngFor=\"let item of menuItems.value; trackBy: trackByPlaceDef\"\n aup-gc #gc=\"aup-gc\"\n [pectinCommand]=\"commandFactory.create(item.place, {disposedWith: gc})\"\n [class.active]=\"item.active\"\n [matTooltip]=\"getNavigationFace(item.place).tooltip()\">\n <aup-command-face [faces]=\"[getNavigationFace(item.place)]\"></aup-command-face>\n </a>\n</mat-nav-list>\n", styles: [":host{display:flex;flex-direction:column;--selected-border-color: #838383;--selected-color: inherit;--selected-background: #f1f1f1}mat-nav-list{padding-top:0}a{border-right:2px solid transparent}a.active{border-right:2px solid var(--selected-border-color);background:var(--selected-background);color:var(--selected-color)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3$3.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i3$3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "directive", type: GarbageCollectorDirective, selector: "[aup-gc]", exportAs: ["aup-gc"] }, { kind: "directive", type: i7$1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }] });
11493
10889
  }
11494
10890
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ListPlaceNavComponent, decorators: [{
11495
10891
  type: Component,
@@ -11564,7 +10960,7 @@ class SidePlaceNavigationComponent extends AbstractPlaceNavigationComponent {
11564
10960
  this.expanded = !this.expanded;
11565
10961
  }
11566
10962
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SidePlaceNavigationComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11567
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SidePlaceNavigationComponent, selector: "aup-side-place-navigation", inputs: { expanded$: "expanded$", expanded: "expanded" }, host: { properties: { "class.expanded": "this.expanded" } }, queries: [{ propertyName: "navEndTemplate", first: true, predicate: ["navEndTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-nav-list>\n <a mat-list-item (click)=\"toggleMenu()\">\n <aup-icon matListItemIcon [icon]=\"homeIcon$.value\"></aup-icon>\n <span matListItemTitle class=\"expanded-only\">Menu</span>\n </a>\n <a *ngFor=\"let item of menuItems.value; trackBy: trackByPlaceDef\"\n mat-list-item\n [pectinCommand]=\"commandFactory.create(item.place, {disposedWith: gc})\"\n [activated]=\"item.active\"\n aup-gc #gc=\"aup-gc\"\n [matTooltip]=\"getNavigationFace(item.place).tooltip()\"\n >\n <aup-icon matListItemIcon *ngIf=\"getNavigationFace(item.place).icon()\" [icon]=\"getNavigationFace(item.place).icon()\"></aup-icon>\n <span matListItemTitle class=\"expanded-only\">{{getNavigationFace(item.place).text()}}</span>\n </a>\n <span [style.flex]=\"1\"></span>\n <ng-container *ngIf=\"navEndTemplate\" [ngTemplateOutlet]=\"navEndTemplate\"></ng-container>\n</mat-nav-list>\n", styles: [":host{display:flex;flex-direction:column;--resolved-nav-item-width: var(--nav-width, 56px);--resolved-expanded-width: var(--nav-expanded-width, 235px);--resolved-color: var(--nav-color, rgba(255, 255, 255, .9));--resolved-background-color: var(--nav-background-color, #555);color:var(--resolved-color);background-color:var(--resolved-background-color);width:var(--resolved-nav-item-width);transition:width 125ms linear}:host.expanded{width:var(--resolved-expanded-width);max-width:var(--resolved-expanded-width)}:host aup-icon{margin-right:12px}:host>mat-nav-list{flex:1;display:flex;flex-direction:column;padding:0}:host .mat-mdc-list-item,:host .mat-mdc-list-item-icon,:host .mat-mdc-list-item-icon.activated,:host .mdc-list-item--with-leading-icon:hover .mdc-list-item__start,:host .mdc-list-item__primary-text{color:var(--resolved-color)}:host .mdc-list-item--activated .mdc-list-item__primary-text,:host .mdc-list-item--activated .mat-mdc-list-item-icon{color:var(--resolved-color)}:host .mdc-list-item:hover{background-color:#444}:host .mdc-list-item:hover .mdc-list-item__primary-text{color:var(--resolved-color)}:host .mdc-list-item--activated{background-color:#444}:host *.flip-horizontal{transform:scaleX(-1)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$3.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i3$3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i3$3.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i3$3.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "directive", type: GarbageCollectorDirective, selector: "[aup-gc]", exportAs: ["aup-gc"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }] });
10963
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SidePlaceNavigationComponent, selector: "aup-side-place-navigation", inputs: { expanded$: "expanded$", expanded: "expanded" }, host: { properties: { "class.expanded": "this.expanded" } }, queries: [{ propertyName: "navEndTemplate", first: true, predicate: ["navEndTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-nav-list>\n <a mat-list-item (click)=\"toggleMenu()\">\n <aup-icon matListItemIcon [icon]=\"homeIcon$.value\"></aup-icon>\n <span matListItemTitle class=\"expanded-only\">Menu</span>\n </a>\n <a *ngFor=\"let item of menuItems.value; trackBy: trackByPlaceDef\"\n mat-list-item\n [pectinCommand]=\"commandFactory.create(item.place, {disposedWith: gc})\"\n [activated]=\"item.active\"\n aup-gc #gc=\"aup-gc\"\n [matTooltip]=\"getNavigationFace(item.place).tooltip()\"\n >\n <aup-icon matListItemIcon *ngIf=\"getNavigationFace(item.place).icon()\" [icon]=\"getNavigationFace(item.place).icon()\"></aup-icon>\n <span matListItemTitle class=\"expanded-only\">{{getNavigationFace(item.place).text()}}</span>\n </a>\n <span [style.flex]=\"1\"></span>\n <ng-container *ngIf=\"navEndTemplate\" [ngTemplateOutlet]=\"navEndTemplate\"></ng-container>\n</mat-nav-list>\n", styles: [":host{display:flex;flex-direction:column;--resolved-nav-item-width: var(--nav-width, 56px);--resolved-expanded-width: var(--nav-expanded-width, 235px);--resolved-color: var(--nav-color, rgba(255, 255, 255, .9));--resolved-background-color: var(--nav-background-color, #555);color:var(--resolved-color);background-color:var(--resolved-background-color);width:var(--resolved-nav-item-width);transition:width 125ms linear}:host.expanded{width:var(--resolved-expanded-width);max-width:var(--resolved-expanded-width)}:host aup-icon{margin-right:12px}:host>mat-nav-list{flex:1;display:flex;flex-direction:column;padding:0}:host .mat-mdc-list-item,:host .mat-mdc-list-item-icon,:host .mat-mdc-list-item-icon.activated,:host .mdc-list-item__primary-text{color:var(--resolved-color)}:host .mdc-list-item--activated .mdc-list-item__primary-text,:host .mdc-list-item--activated .mat-mdc-list-item-icon{color:var(--resolved-color)}:host .mdc-list-item--activated{background-color:#444}:host *.flip-horizontal{transform:scaleX(-1)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$3.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i3$3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i3$3.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i3$3.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "directive", type: GarbageCollectorDirective, selector: "[aup-gc]", exportAs: ["aup-gc"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }] });
11568
10964
  }
11569
10965
  __decorate([
11570
10966
  Proxify(),
@@ -11576,7 +10972,7 @@ __decorate([
11576
10972
  ], SidePlaceNavigationComponent.prototype, "expanded", null);
11577
10973
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SidePlaceNavigationComponent, decorators: [{
11578
10974
  type: Component,
11579
- args: [{ selector: 'aup-side-place-navigation', template: "<mat-nav-list>\n <a mat-list-item (click)=\"toggleMenu()\">\n <aup-icon matListItemIcon [icon]=\"homeIcon$.value\"></aup-icon>\n <span matListItemTitle class=\"expanded-only\">Menu</span>\n </a>\n <a *ngFor=\"let item of menuItems.value; trackBy: trackByPlaceDef\"\n mat-list-item\n [pectinCommand]=\"commandFactory.create(item.place, {disposedWith: gc})\"\n [activated]=\"item.active\"\n aup-gc #gc=\"aup-gc\"\n [matTooltip]=\"getNavigationFace(item.place).tooltip()\"\n >\n <aup-icon matListItemIcon *ngIf=\"getNavigationFace(item.place).icon()\" [icon]=\"getNavigationFace(item.place).icon()\"></aup-icon>\n <span matListItemTitle class=\"expanded-only\">{{getNavigationFace(item.place).text()}}</span>\n </a>\n <span [style.flex]=\"1\"></span>\n <ng-container *ngIf=\"navEndTemplate\" [ngTemplateOutlet]=\"navEndTemplate\"></ng-container>\n</mat-nav-list>\n", styles: [":host{display:flex;flex-direction:column;--resolved-nav-item-width: var(--nav-width, 56px);--resolved-expanded-width: var(--nav-expanded-width, 235px);--resolved-color: var(--nav-color, rgba(255, 255, 255, .9));--resolved-background-color: var(--nav-background-color, #555);color:var(--resolved-color);background-color:var(--resolved-background-color);width:var(--resolved-nav-item-width);transition:width 125ms linear}:host.expanded{width:var(--resolved-expanded-width);max-width:var(--resolved-expanded-width)}:host aup-icon{margin-right:12px}:host>mat-nav-list{flex:1;display:flex;flex-direction:column;padding:0}:host .mat-mdc-list-item,:host .mat-mdc-list-item-icon,:host .mat-mdc-list-item-icon.activated,:host .mdc-list-item--with-leading-icon:hover .mdc-list-item__start,:host .mdc-list-item__primary-text{color:var(--resolved-color)}:host .mdc-list-item--activated .mdc-list-item__primary-text,:host .mdc-list-item--activated .mat-mdc-list-item-icon{color:var(--resolved-color)}:host .mdc-list-item:hover{background-color:#444}:host .mdc-list-item:hover .mdc-list-item__primary-text{color:var(--resolved-color)}:host .mdc-list-item--activated{background-color:#444}:host *.flip-horizontal{transform:scaleX(-1)}\n"] }]
10975
+ args: [{ selector: 'aup-side-place-navigation', template: "<mat-nav-list>\n <a mat-list-item (click)=\"toggleMenu()\">\n <aup-icon matListItemIcon [icon]=\"homeIcon$.value\"></aup-icon>\n <span matListItemTitle class=\"expanded-only\">Menu</span>\n </a>\n <a *ngFor=\"let item of menuItems.value; trackBy: trackByPlaceDef\"\n mat-list-item\n [pectinCommand]=\"commandFactory.create(item.place, {disposedWith: gc})\"\n [activated]=\"item.active\"\n aup-gc #gc=\"aup-gc\"\n [matTooltip]=\"getNavigationFace(item.place).tooltip()\"\n >\n <aup-icon matListItemIcon *ngIf=\"getNavigationFace(item.place).icon()\" [icon]=\"getNavigationFace(item.place).icon()\"></aup-icon>\n <span matListItemTitle class=\"expanded-only\">{{getNavigationFace(item.place).text()}}</span>\n </a>\n <span [style.flex]=\"1\"></span>\n <ng-container *ngIf=\"navEndTemplate\" [ngTemplateOutlet]=\"navEndTemplate\"></ng-container>\n</mat-nav-list>\n", styles: [":host{display:flex;flex-direction:column;--resolved-nav-item-width: var(--nav-width, 56px);--resolved-expanded-width: var(--nav-expanded-width, 235px);--resolved-color: var(--nav-color, rgba(255, 255, 255, .9));--resolved-background-color: var(--nav-background-color, #555);color:var(--resolved-color);background-color:var(--resolved-background-color);width:var(--resolved-nav-item-width);transition:width 125ms linear}:host.expanded{width:var(--resolved-expanded-width);max-width:var(--resolved-expanded-width)}:host aup-icon{margin-right:12px}:host>mat-nav-list{flex:1;display:flex;flex-direction:column;padding:0}:host .mat-mdc-list-item,:host .mat-mdc-list-item-icon,:host .mat-mdc-list-item-icon.activated,:host .mdc-list-item__primary-text{color:var(--resolved-color)}:host .mdc-list-item--activated .mdc-list-item__primary-text,:host .mdc-list-item--activated .mat-mdc-list-item-icon{color:var(--resolved-color)}:host .mdc-list-item--activated{background-color:#444}:host *.flip-horizontal{transform:scaleX(-1)}\n"] }]
11580
10976
  }], ctorParameters: function () { return [{ type: PlaceRouter }]; }, propDecorators: { expanded$: [{
11581
10977
  type: Input
11582
10978
  }], expanded: [{
@@ -11617,6 +11013,7 @@ class PlaceModule {
11617
11013
  MatTooltipModule,
11618
11014
  MatIconModule,
11619
11015
  DirectivesModule,
11016
+ FlexModule,
11620
11017
  ComponentsModule,
11621
11018
  PortalModule,
11622
11019
  MatCardModule], exports: [PlaceOutletComponent,
@@ -11633,6 +11030,7 @@ class PlaceModule {
11633
11030
  MatTooltipModule,
11634
11031
  MatIconModule,
11635
11032
  DirectivesModule,
11033
+ FlexModule,
11636
11034
  ComponentsModule,
11637
11035
  PortalModule,
11638
11036
  MatCardModule] });
@@ -11650,6 +11048,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11650
11048
  MatTooltipModule,
11651
11049
  MatIconModule,
11652
11050
  DirectivesModule,
11051
+ FlexModule,
11653
11052
  ComponentsModule,
11654
11053
  PortalModule,
11655
11054
  MatCardModule
@@ -11739,44 +11138,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11739
11138
  }]
11740
11139
  }] });
11741
11140
 
11141
+ const slideDownOnEnterDef = style({
11142
+ opacity: 0,
11143
+ 'height': '0',
11144
+ paddingTop: '0',
11145
+ paddingBottom: '0'
11146
+ });
11147
+ // TODO: params aren't getting customised in the view. Need to figure out the correct approach.
11148
+ const slideDownOnEnterAnimation = trigger('slideDownOnEnter', [
11149
+ transition(':enter', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
11150
+ transition(':leave', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
11151
+ ]);
11152
+ const slideLeftOnEnterDef = style({
11153
+ opacity: 0,
11154
+ 'width': '0',
11155
+ paddingLeft: '0',
11156
+ paddingRight: '0'
11157
+ });
11158
+ const slideRightOnEnterAnimation = trigger('slideRightOnEnter', [
11159
+ transition(':enter', [slideLeftOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
11160
+ transition(':leave', [animate('{{duration}}', slideLeftOnEnterDef)], { params: { duration: '100ms' } })
11161
+ ]);
11162
+ const ZERO_WIDTH = {
11163
+ opacity: 0,
11164
+ width: '0',
11165
+ paddingLeft: '0',
11166
+ paddingRight: '0',
11167
+ };
11168
+ const ZERO_HEIGHT = {
11169
+ opacity: 0,
11170
+ height: '0',
11171
+ paddingTop: '0',
11172
+ paddingBottom: '0',
11173
+ };
11174
+ const slideDownAndRightOnEnterAnimation = trigger('slideDownAndRightOnEnter', [
11175
+ transition(':enter', [
11176
+ style({ overflow: "hidden", whiteSpace: "nowrap", ...ZERO_WIDTH, ...ZERO_HEIGHT }),
11177
+ animate('{{duration}}')
11178
+ ], { params: { duration: '100ms' } }),
11179
+ transition(':leave', [
11180
+ style({ overflow: "hidden", whiteSpace: "nowrap" }),
11181
+ group([
11182
+ animate('{{duration}}', style(ZERO_HEIGHT)),
11183
+ // Hack: 100ms is too quick as it animates from * - 0 as we only see it animate the width is greater than the parent.
11184
+ // Not sure how to animate from * to natural new width of parent. This hack won't work for text that's just a little
11185
+ // bit wider than the parent as it'll fall within the parent bounds very early in the animation cycle.
11186
+ animate('300ms', style(ZERO_WIDTH)),
11187
+ ])
11188
+ ], { params: { duration: '100ms' } })
11189
+ ]);
11190
+
11742
11191
  /**
11743
11192
  * @file Automatically generated by barrelsby.
11744
11193
  */
11745
11194
 
11746
- class ResizeObserverDirective extends DisposableComponent {
11747
- aupOnResize = new EventEmitter();
11748
- elementRef = this.inject(ElementRef);
11749
- ngZone = this.inject(NgZone);
11750
- _bounds$ = new MutableValueModel();
11751
- ngAfterViewInit() {
11752
- const element = this.elementRef.nativeElement;
11753
- const ro = new ResizeObserver((entries, observer) => {
11754
- this.ngZone.run(() => this._updateBounds());
11755
- });
11756
- ro.observe(element);
11757
- this.onDispose(() => ro.disconnect());
11758
- setTimeout(() => this._updateBounds());
11759
- }
11760
- get bounds$() {
11761
- return this._bounds$.readonly$;
11762
- }
11763
- _updateBounds() {
11764
- this._bounds$.value = Bounds.ofElement(this.elementRef.nativeElement);
11765
- this.aupOnResize.emit(this._bounds$.value);
11766
- }
11767
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeObserverDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
11768
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ResizeObserverDirective, isStandalone: true, selector: "[aupOnResize]", outputs: { aupOnResize: "aupOnResize" }, usesInheritance: true, ngImport: i0 });
11769
- }
11770
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeObserverDirective, decorators: [{
11771
- type: Directive,
11772
- args: [{
11773
- selector: "[aupOnResize]",
11774
- standalone: true
11775
- }]
11776
- }], propDecorators: { aupOnResize: [{
11777
- type: Output
11778
- }] } });
11779
-
11780
11195
  /**
11781
11196
  * @file Automatically generated by barrelsby.
11782
11197
  */
@@ -12152,74 +11567,69 @@ var Formatter;
12152
11567
  Formatter.BOOLEAN = new BooleanType();
12153
11568
  })(Formatter || (Formatter = {}));
12154
11569
 
12155
- // function installMechanics<M extends HasValue<any>>(parameterDef: ParameterDefinition<any>, prototype: object, propertyKey: string | symbol, tagPrefix: string) {
12156
- //
12157
- // Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12158
- //
12159
- // function getMechanics(instance: M, propertyName: string | symbol) {
12160
- // const key = `__mechanics_${propertyName.toString()}`;
12161
- // if (!instance[key]) {
12162
- // const backingModel = parameterDef.createBackingModel();
12163
- // instance[key] = {
12164
- // backingModel: backingModel,
12165
- // binding: null as Binding<any, any>
12166
- // };
12167
- // const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
12168
- // DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
12169
- // }
12170
- // return instance[key];
12171
- // }
12172
- //
12173
- // Object.defineProperty(prototype, propertyKey, {
12174
- // get: function() {
12175
- // return getMechanics(this, propertyKey).backingModel;
12176
- // },
12177
- // set: function(userModel: M) {
12178
- // const mechanics = getMechanics(this, propertyKey);
12179
- // // This handles the scenario where we want to push an existing value model (such as a form model)
12180
- // // to and from the route.
12181
- // if (mechanics.binding) {
12182
- // mechanics.binding.dispose();
12183
- // }
12184
- // if (userModel) {
12185
- // mechanics.binding = new Binding(mechanics.backingModel, userModel, {
12186
- // toLeft: Functions.identity,
12187
- // toRight: Functions.identity
12188
- // });
12189
- // if (parameterDef.isEmptyValue(userModel.value)) {
12190
- // // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
12191
- // mechanics.binding.writeRight(); // push the visit into the user model;
12192
- // } else {
12193
- // if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
12194
- // console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
12195
- // }
12196
- // mechanics.binding.writeLeft(); // push the user model into the visit
12197
- // }
12198
- // }
12199
- // }
12200
- // });
12201
- // }
11570
+ function installMechanics(parameterDef, prototype, propertyKey, tagPrefix) {
11571
+ Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11572
+ function getMechanics(instance, propertyName) {
11573
+ const key = `__mechanics_${propertyName.toString()}`;
11574
+ if (!instance[key]) {
11575
+ const backingModel = parameterDef.createBackingModel();
11576
+ instance[key] = {
11577
+ backingModel: backingModel,
11578
+ binding: null
11579
+ };
11580
+ const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
11581
+ DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
11582
+ }
11583
+ return instance[key];
11584
+ }
11585
+ Object.defineProperty(prototype, propertyKey, {
11586
+ get: function () {
11587
+ return getMechanics(this, propertyKey).backingModel;
11588
+ },
11589
+ set: function (userModel) {
11590
+ const mechanics = getMechanics(this, propertyKey);
11591
+ // This handles the scenario where we want to push an existing value model (such as a form model)
11592
+ // to and from the route.
11593
+ if (mechanics.binding) {
11594
+ mechanics.binding.dispose();
11595
+ }
11596
+ if (userModel) {
11597
+ mechanics.binding = new Binding(mechanics.backingModel, userModel, {
11598
+ toLeft: Functions.identity,
11599
+ toRight: Functions.identity
11600
+ });
11601
+ if (parameterDef.isEmptyValue(userModel.value)) {
11602
+ // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
11603
+ mechanics.binding.writeRight(); // push the visit into the user model;
11604
+ }
11605
+ else {
11606
+ if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
11607
+ console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
11608
+ }
11609
+ mechanics.binding.writeLeft(); // push the user model into the visit
11610
+ }
11611
+ }
11612
+ }
11613
+ });
11614
+ }
12202
11615
  function RouteId(formatter, options) {
12203
11616
  return (prototype, propertyKey) => {
12204
11617
  const parameterDef = new ParameterDefinition.RouteId(propertyKey.toString(), options, formatter);
12205
- // installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
12206
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11618
+ installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
12207
11619
  };
12208
11620
  }
12209
11621
  function VisitParameter(options) {
12210
11622
  const opts = Opts.get(options);
12211
11623
  return (prototype, propertyKey) => {
12212
11624
  const parameterDef = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
12213
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12214
- // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
11625
+ installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
12215
11626
  };
12216
11627
  }
12217
11628
  function VisitParameterList(options) {
12218
11629
  const opts = Opts.get(options);
12219
11630
  return (prototype, propertyKey) => {
12220
11631
  const parameterDef = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
12221
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12222
- // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
11632
+ installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
12223
11633
  };
12224
11634
  }
12225
11635
 
@@ -12313,5 +11723,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
12313
11723
  * Generated bundle index. Do not edit.
12314
11724
  */
12315
11725
 
12316
- export { ACTIVITY_DATA, ALERT_CONFIG, AUP_PLACE_CONFIG, AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER, 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, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnManager, ColumnModel, ColumnOrderManager, ColumnTemplateDirective, ColumnTextSearchFormatter, CommandComponent, CommandContainer, CommandDirective, CommandFace, CommandFaceComponent, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmThenExecuteDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DecoratedTreeNode, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControlsComponent, EditSession, EditorControlColumnModel, EmptyStateComponent, EnableCellTextSearch, EventCleanUpSession, FlattenedTreeListModel, FlexComponent, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, GarbageCollectorDirective, HEADER_CELL_RENDERER_PORTAL, HighlightPipe, HighlightTextModelDirective, HorizontalAlignment, IconComponent, InPlaceInteractionContextComponent, InlineActivityTriggerComponent, InlineEditorModel, InlineStringEditorComponent, InputActivity, InteractionContextTriggerForDirective, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, Keys, LEFT_RIGHT_PLACE_ANIMATION, LabelledValueComponent, ListPlaceNavComponent, ListPropertyColumnModel, LoadableComponent, 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, PlaceAuthService, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupActivityTriggerComponent, PopupAwareComponent, PopupInteractionContextComponent, PopupMenuComponent, PopupMenuRendererComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, ResizeObserverDirective, RouteId, ScrollContainerComponent, SearchInputComponent, SectionHeaderComponent, SelectInputActivity, SelectInputComponent, SelectionCellComponent, SelectionColumnModel, SelectionHeaderCellComponent, SeparatorComponent, SidePlaceNavigationComponent, SlideDownInteractionContextComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableBodyComponent, TableCellComponent, TableComponent, TableFilterModel, TableHeaderCellComponent, TableModel, TableMoreMenuComponent, TableMoreMenuPopupComponent, TableRowAttributesDirective, TableRowMenuComponent, TemplateCellRendererPortalRef, TextInputComponent, TextSearchContext, ToolBarComponent, Track, TreeExpansionModel, TreeInheritanceIconComponent, TreeLabelCellRendererComponent, TreeLabelColumnModel, TreeTableComponent, TreeTableModel, UrlService, UrlSnapshot, VerticalFocusContainerComponent, VisibilityService, Visit, VisitParameter, VisitParameterList, VisitSegment, VisitSegmentSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationTypeDetermined, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, markdownPillExtension, slideDownAndRightOnEnterAnimation, slideDownOnEnterAnimation, slideDownWhenOpenAnimation, slideRightOnEnterAnimation, treeNodeDecorator };
11726
+ 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, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnListModel, ColumnModel, ColumnTemplateDirective, ColumnTextSearchFormatter, CommandComponent, CommandContainer, CommandDirective, CommandFace, CommandFaceComponent, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmThenExecuteDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DecoratedTreeNode, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControlsComponent, EditSession, EditorControlColumnModel, EmptyStateComponent, EnableCellTextSearch, EventCleanUpSession, FlattenedTreeListModel, FlexComponent, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, GarbageCollectorDirective, HEADER_CELL_RENDERER_PORTAL, HighlightPipe, HighlightTextModelDirective, HorizontalAlignment, IconComponent, InPlaceInteractionContextComponent, InlineActivityTriggerComponent, InlineEditorModel, InlineStringEditorComponent, InputActivity, InteractionContextTriggerForDirective, 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, PlaceAuthService, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupActivityTriggerComponent, PopupAwareComponent, PopupInteractionContextComponent, PopupMenuComponent, PopupMenuRendererComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectInputActivity, SelectInputComponent, SelectionCellComponent, SelectionColumnModel, SelectionHeaderCellComponent, SeparatorComponent, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableBodyComponent, TableCellComponent, TableComponent, TableFilterModel, TableHeaderCellComponent, TableModel, TableMoreMenuComponent, TableMoreMenuPopupComponent, TableRowMenuComponent, TemplateCellRendererPortalRef, TextInputComponent, ToolBarComponent, Track, TreeExpansionModel, TreeInheritanceIconComponent, TreeLabelCellRendererComponent, TreeLabelColumnModel, TreeTableComponent, TreeTableModel, UrlService, UrlSnapshot, VerticalFocusContainerComponent, VisibilityService, Visit, VisitParameter, VisitParameterList, VisitSegment, VisitSegmentSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationTypeDetermined, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, markdownPillExtension, slideDownAndRightOnEnterAnimation, slideDownOnEnterAnimation, slideRightOnEnterAnimation, treeNodeDecorator };
12317
11727
  //# sourceMappingURL=coolon-angular-ui-powerups.mjs.map