@coolon/angular-ui-powerups 16.1.0-aplpha.118 → 16.1.0-aplpha.12

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 (178) hide show
  1. package/assets/activities/input-activities.scss +6 -14
  2. package/assets/form.scss +27 -74
  3. package/assets/icons.scss +0 -1
  4. package/assets/table.scss +27 -47
  5. package/assets/tabs.scss +6 -2
  6. package/esm2022/lib/animations/slide-animations.mjs +1 -6
  7. package/esm2022/lib/components/cards/card-container/card-container.component.mjs +4 -4
  8. package/esm2022/lib/components/commands/command/command.component.mjs +10 -24
  9. package/esm2022/lib/components/commands/command-face/command-face.component.mjs +3 -11
  10. package/esm2022/lib/components/commands/command-face.mjs +11 -11
  11. package/esm2022/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +11 -11
  12. package/esm2022/lib/components/commands/group/tool-bar/tool-bar.component.mjs +4 -6
  13. package/esm2022/lib/components/components.module.mjs +8 -27
  14. package/esm2022/lib/components/disposable-component.mjs +37 -20
  15. package/esm2022/lib/components/exports.mjs +2 -9
  16. package/esm2022/lib/components/forms/abstract-input.component.mjs +12 -55
  17. package/esm2022/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +2 -2
  18. package/esm2022/lib/components/forms/checkbox-input/checkbox-input.component.mjs +6 -8
  19. package/esm2022/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +2 -2
  20. package/esm2022/lib/components/forms/number-input/number-input.component.mjs +10 -49
  21. package/esm2022/lib/components/forms/password-input/password-input.component.mjs +3 -40
  22. package/esm2022/lib/components/forms/select-input/select-input.component.mjs +10 -11
  23. package/esm2022/lib/components/forms/string-input/string-input.component.mjs +9 -21
  24. package/esm2022/lib/components/icon/icon.component.mjs +4 -7
  25. package/esm2022/lib/components/resize-aware.component.mjs +24 -61
  26. package/esm2022/lib/components/switch-case/switch-case.component.mjs +7 -5
  27. package/esm2022/lib/components/tables/abstract-table-model.mjs +27 -69
  28. package/esm2022/lib/components/tables/abstract-table.component.mjs +5 -19
  29. package/esm2022/lib/components/tables/column/column-list-model.mjs +44 -0
  30. package/esm2022/lib/components/tables/column/column-model.mjs +3 -13
  31. package/esm2022/lib/components/tables/column/custom-template-column-model.mjs +3 -3
  32. package/esm2022/lib/components/tables/column/custom-value-column-model.mjs +3 -3
  33. package/esm2022/lib/components/tables/column/editor-controls-column-model.mjs +3 -3
  34. package/esm2022/lib/components/tables/column/list-propery-column-model.mjs +3 -3
  35. package/esm2022/lib/components/tables/column/property-column-model.mjs +3 -3
  36. package/esm2022/lib/components/tables/column/selection-column-model.mjs +3 -3
  37. package/esm2022/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +1 -1
  38. package/esm2022/lib/components/tables/editor/edit-session.mjs +1 -3
  39. package/esm2022/lib/components/tables/filter/table-filter-model.mjs +2 -4
  40. package/esm2022/lib/components/tables/filter/text-search-predicate.mjs +2 -16
  41. package/esm2022/lib/components/tables/renderer/cell-portal-ref.mjs +1 -19
  42. package/esm2022/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +3 -3
  43. package/esm2022/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +2 -3
  44. package/esm2022/lib/components/tables/renderer/table-body/table-body.component.mjs +40 -150
  45. package/esm2022/lib/components/tables/renderer/table-cell/table-cell.component.mjs +1 -1
  46. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu.component.mjs +2 -7
  47. package/esm2022/lib/components/tables/table/table-model.mjs +1 -1
  48. package/esm2022/lib/components/tables/table/table.component.mjs +61 -39
  49. package/esm2022/lib/components/tables/tree-table/decorated-tree-node.mjs +4 -5
  50. package/esm2022/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +1 -1
  51. package/esm2022/lib/components/tables/tree-table/tree-label-column-model.mjs +3 -3
  52. package/esm2022/lib/components/tables/tree-table/tree-table-component.mjs +5 -12
  53. package/esm2022/lib/components/tables/tree-table/tree-table-model.mjs +4 -4
  54. package/esm2022/lib/components/text/markdown/markdown.component.mjs +2 -2
  55. package/esm2022/lib/directives/directives.module.mjs +1 -1
  56. package/esm2022/lib/directives/exports.mjs +1 -2
  57. package/esm2022/lib/directives/highlight.pipe.mjs +2 -2
  58. package/esm2022/lib/interaction/activity.mjs +4 -3
  59. package/esm2022/lib/interaction/alert.mjs +2 -2
  60. package/esm2022/lib/interaction/components/abstract-confirm-dialog.component.mjs +4 -8
  61. package/esm2022/lib/interaction/components/activity-actions/activity-actions.component.mjs +11 -20
  62. package/esm2022/lib/interaction/components/activity-container/activity-container.component.mjs +11 -28
  63. package/esm2022/lib/interaction/components/activity-title/activity-title.component.mjs +4 -4
  64. package/esm2022/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.mjs +1 -1
  65. package/esm2022/lib/interaction/components/add-card-activity/add-card-activity.component.mjs +1 -1
  66. package/esm2022/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.mjs +1 -1
  67. package/esm2022/lib/interaction/components/alert-dialog/alert-dialog.component.mjs +1 -1
  68. package/esm2022/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.mjs +1 -1
  69. package/esm2022/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.mjs +1 -1
  70. package/esm2022/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.mjs +1 -1
  71. package/esm2022/lib/interaction/components/editors/edit-context.mjs +1 -1
  72. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +3 -3
  73. package/esm2022/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +5 -21
  74. package/esm2022/lib/interaction/components/input-activities/input-activity.mjs +2 -2
  75. package/esm2022/lib/interaction/components/input-activities/select-input-activity.mjs +2 -4
  76. package/esm2022/lib/interaction/components/input-activities/string-input-activity.mjs +4 -8
  77. package/esm2022/lib/interaction/directives/interaction-context-trigger-for.directive.mjs +2 -2
  78. package/esm2022/lib/interaction/exports.mjs +1 -2
  79. package/esm2022/lib/interaction/interaction-context.mjs +2 -3
  80. package/esm2022/lib/interaction/interaction.module.mjs +9 -7
  81. package/esm2022/lib/place/components/list-place-nav/list-place-nav.component.mjs +4 -3
  82. package/esm2022/lib/place/components/place-outlet/place-outlet.component.mjs +9 -7
  83. package/esm2022/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +2 -2
  84. package/esm2022/lib/place/guards/consolidated-param-map.mjs +4 -4
  85. package/esm2022/lib/place/guards/place.guard.mjs +1 -2
  86. package/esm2022/lib/place/navigation/place-component-deactivation-handler.mjs +2 -2
  87. package/esm2022/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs +6 -3
  88. package/esm2022/lib/place/place-component.mjs +7 -7
  89. package/esm2022/lib/place/place-definition.mjs +3 -3
  90. package/esm2022/lib/place/place-history.mjs +2 -2
  91. package/esm2022/lib/place/place-router.mjs +18 -20
  92. package/esm2022/lib/place/place.decorator.mjs +2 -2
  93. package/esm2022/lib/place/place.module.mjs +5 -1
  94. package/esm2022/lib/place/route/formatter.mjs +2 -2
  95. package/esm2022/lib/place/route/parameter-decorators.mjs +50 -54
  96. package/esm2022/lib/place/route/parameter-definition.mjs +2 -2
  97. package/esm2022/lib/place/url-snapshot.mjs +3 -3
  98. package/esm2022/lib/place/visit-segment.mjs +2 -2
  99. package/esm2022/lib/place/visit.mjs +2 -2
  100. package/fesm2022/coolon-angular-ui-powerups.mjs +537 -1333
  101. package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
  102. package/lib/animations/slide-animations.d.ts +0 -1
  103. package/lib/components/cards/card-container/card-container.component.d.ts +1 -1
  104. package/lib/components/commands/command/command.component.d.ts +1 -2
  105. package/lib/components/commands/command-face/command-face.component.d.ts +0 -2
  106. package/lib/components/commands/command-face.d.ts +7 -5
  107. package/lib/components/commands/group/popup-menu/abstract-popup-menu.component.d.ts +2 -2
  108. package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +1 -1
  109. package/lib/components/components.module.d.ts +53 -56
  110. package/lib/components/disposable-component.d.ts +8 -12
  111. package/lib/components/exports.d.ts +1 -8
  112. package/lib/components/forms/abstract-input.component.d.ts +5 -13
  113. package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +0 -2
  114. package/lib/components/forms/number-input/number-input.component.d.ts +4 -8
  115. package/lib/components/forms/password-input/password-input.component.d.ts +1 -7
  116. package/lib/components/forms/select-input/select-input.component.d.ts +3 -4
  117. package/lib/components/forms/string-input/string-input.component.d.ts +1 -3
  118. package/lib/components/resize-aware.component.d.ts +5 -24
  119. package/lib/components/switch-case/switch-case.component.d.ts +3 -2
  120. package/lib/components/tables/abstract-table-model.d.ts +8 -27
  121. package/lib/components/tables/abstract-table.component.d.ts +3 -4
  122. package/lib/components/tables/column/column-list-model.d.ts +13 -0
  123. package/lib/components/tables/column/column-model.d.ts +3 -7
  124. package/lib/components/tables/column/custom-template-column-model.d.ts +2 -3
  125. package/lib/components/tables/column/custom-value-column-model.d.ts +2 -3
  126. package/lib/components/tables/column/editor-controls-column-model.d.ts +2 -3
  127. package/lib/components/tables/column/list-propery-column-model.d.ts +2 -3
  128. package/lib/components/tables/column/property-column-model.d.ts +2 -3
  129. package/lib/components/tables/column/selection-column-model.d.ts +2 -3
  130. package/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.d.ts +1 -1
  131. package/lib/components/tables/editor/edit-session.d.ts +1 -1
  132. package/lib/components/tables/filter/text-search-predicate.d.ts +0 -9
  133. package/lib/components/tables/renderer/cell-portal-ref.d.ts +6 -14
  134. package/lib/components/tables/renderer/table-body/table-body.component.d.ts +16 -40
  135. package/lib/components/tables/renderer/table-cell/table-cell.component.d.ts +1 -1
  136. package/lib/components/tables/renderer/table-more-menu/table-more-menu.component.d.ts +1 -2
  137. package/lib/components/tables/table/table-model.d.ts +1 -1
  138. package/lib/components/tables/table/table.component.d.ts +10 -14
  139. package/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +1 -1
  140. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +2 -3
  141. package/lib/components/tables/tree-table/tree-table-component.d.ts +0 -3
  142. package/lib/components/tables/tree-table/tree-table-model.d.ts +2 -3
  143. package/lib/directives/exports.d.ts +0 -1
  144. package/lib/interaction/activity.d.ts +2 -2
  145. package/lib/interaction/components/abstract-confirm-dialog.component.d.ts +0 -1
  146. package/lib/interaction/components/activity-actions/activity-actions.component.d.ts +5 -10
  147. package/lib/interaction/components/activity-container/activity-container.component.d.ts +3 -7
  148. package/lib/interaction/components/activity-title/activity-title.component.d.ts +1 -1
  149. package/lib/interaction/components/editors/edit-context.d.ts +1 -1
  150. package/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.d.ts +3 -5
  151. package/lib/interaction/exports.d.ts +0 -1
  152. package/lib/interaction/interaction-context.d.ts +0 -2
  153. package/lib/interaction/interaction.module.d.ts +28 -28
  154. package/lib/place/components/place-outlet/place-outlet.component.d.ts +4 -3
  155. package/lib/place/place-component.d.ts +4 -4
  156. package/lib/place/place-router.d.ts +0 -4
  157. package/lib/place/place.module.d.ts +5 -4
  158. package/package.json +4 -6
  159. package/esm2022/lib/components/forms/form-field.mjs +0 -2
  160. package/esm2022/lib/components/forms/search-input/search-input.component.mjs +0 -33
  161. package/esm2022/lib/components/loadable-component.mjs +0 -49
  162. package/esm2022/lib/components/tables/column/column-manager.mjs +0 -81
  163. package/esm2022/lib/components/tables/column/column-order-manager.mjs +0 -19
  164. package/esm2022/lib/components/tables/footer/footer-row-model.mjs +0 -38
  165. package/esm2022/lib/components/tables/renderer/abstract-cell-renderer.mjs +0 -12
  166. package/esm2022/lib/components/tables/renderer/table-footer-row/table-footer-row.component.mjs +0 -30
  167. package/esm2022/lib/directives/resize-observer.directive.mjs +0 -40
  168. package/esm2022/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.mjs +0 -134
  169. package/lib/components/forms/form-field.d.ts +0 -5
  170. package/lib/components/forms/search-input/search-input.component.d.ts +0 -10
  171. package/lib/components/loadable-component.d.ts +0 -17
  172. package/lib/components/tables/column/column-manager.d.ts +0 -19
  173. package/lib/components/tables/column/column-order-manager.d.ts +0 -20
  174. package/lib/components/tables/footer/footer-row-model.d.ts +0 -22
  175. package/lib/components/tables/renderer/abstract-cell-renderer.d.ts +0 -8
  176. package/lib/components/tables/renderer/table-footer-row/table-footer-row.component.d.ts +0 -11
  177. package/lib/directives/resize-observer.directive.d.ts +0 -16
  178. package/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.d.ts +0 -53
@@ -2,27 +2,27 @@ 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';
9
9
  import { MatFormFieldModule } from '@angular/material/form-field';
10
10
  import * as i3 from '@angular/material/input';
11
11
  import { MatInputModule, MatInput } from '@angular/material/input';
12
- import * as i4$3 from '@angular/material/select';
12
+ import * as i4$4 from '@angular/material/select';
13
13
  import { MatSelectModule } from '@angular/material/select';
14
- import * as i3$2 from '@angular/material/tabs';
14
+ import * as i3$1 from '@angular/material/tabs';
15
15
  import { MatTabsModule, MAT_TABS_CONFIG } from '@angular/material/tabs';
16
16
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
17
- import * as i1$4 from '@angular/cdk/portal';
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';
24
24
  import { MatButton, MatButtonModule } from '@angular/material/button';
25
- import * as i3$1 from '@angular/material/checkbox';
25
+ import * as i4$3 from '@angular/material/checkbox';
26
26
  import { MAT_CHECKBOX_DEFAULT_OPTIONS, MatCheckboxModule } from '@angular/material/checkbox';
27
27
  import * as i2$3 from '@angular/material/divider';
28
28
  import { MatDividerModule } from '@angular/material/divider';
@@ -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$4 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, ProxyRegistry, DirtyTrackingForm, DependsOnOptions, 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, 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
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';
59
- import * as i1$7 from '@angular/material/dialog';
57
+ import * as i7$1 from '@angular/flex-layout';
58
+ import { FlexModule, GridModule } from '@angular/flex-layout';
59
+ import * as i1$6 from '@angular/material/dialog';
60
60
  import { MatDialogModule, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';
61
- import * as i1$5 from '@angular/router';
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
- import * as i1$6 from '@angular/cdk/overlay';
65
- import { style, trigger, transition, animate, group, query } from '@angular/animations';
65
+ import * as i1$5 from '@angular/cdk/overlay';
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,26 +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 or when it is contained within another component that
242
- * does (e.g. aup-table, aup-tree-table)
243
- * @param models
244
- * @protected
245
- */
246
- viewStateDependsOn(...models) {
247
- const { when } = Dsl.disposeWith(this);
248
- 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();
249
267
  }
250
268
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DisposableComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
251
269
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: DisposableComponent, usesInheritance: true, ngImport: i0 });
@@ -718,42 +736,42 @@ var CommandFace;
718
736
  }
719
737
  }
720
738
  __decorate([
721
- MemoizeGet(),
739
+ Memoize(),
722
740
  __metadata("design:type", Object),
723
741
  __metadata("design:paramtypes", [])
724
742
  ], Adapter.prototype, "text", null);
725
743
  __decorate([
726
- MemoizeGet(),
744
+ Memoize(),
727
745
  __metadata("design:type", Object),
728
746
  __metadata("design:paramtypes", [])
729
747
  ], Adapter.prototype, "icon", null);
730
748
  __decorate([
731
- MemoizeGet(),
749
+ Memoize(),
732
750
  __metadata("design:type", Object),
733
751
  __metadata("design:paramtypes", [])
734
752
  ], Adapter.prototype, "iconPosition", null);
735
753
  __decorate([
736
- MemoizeGet(),
754
+ Memoize(),
737
755
  __metadata("design:type", Object),
738
756
  __metadata("design:paramtypes", [])
739
757
  ], Adapter.prototype, "tooltip", null);
740
758
  __decorate([
741
- MemoizeGet(),
759
+ Memoize(),
742
760
  __metadata("design:type", Boolean),
743
761
  __metadata("design:paramtypes", [])
744
762
  ], Adapter.prototype, "iconPositionStart", null);
745
763
  __decorate([
746
- MemoizeGet(),
764
+ Memoize(),
747
765
  __metadata("design:type", Boolean),
748
766
  __metadata("design:paramtypes", [])
749
767
  ], Adapter.prototype, "iconPositionEnd", null);
750
768
  __decorate([
751
- MemoizeGet(),
769
+ Memoize(),
752
770
  __metadata("design:type", String),
753
771
  __metadata("design:paramtypes", [])
754
772
  ], Adapter.prototype, "color", null);
755
773
  __decorate([
756
- MemoizeGet(),
774
+ Memoize(),
757
775
  __metadata("design:type", String),
758
776
  __metadata("design:paramtypes", [])
759
777
  ], Adapter.prototype, "style", null);
@@ -824,7 +842,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
824
842
  args: ["class.disable-scroll"]
825
843
  }] } });
826
844
 
827
- /* eslint-disable @angular-eslint/no-host-metadata-property */
828
845
  class IconComponent {
829
846
  _icon;
830
847
  prefix;
@@ -856,13 +873,11 @@ class IconComponent {
856
873
  return `fa-${this.suffix}`;
857
874
  }
858
875
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
859
- 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"] }] });
860
877
  }
861
878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IconComponent, decorators: [{
862
879
  type: Component,
863
- args: [{ selector: 'aup-icon', changeDetection: ChangeDetectionStrategy.OnPush, host: {
864
- class: "mat-icon" // this ensures angular form styles that target mat icon also work with us
865
- }, 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"] }]
866
881
  }], propDecorators: { icon: [{
867
882
  type: Input
868
883
  }, {
@@ -893,7 +908,6 @@ class CommandFaceComponent extends DisposableComponent {
893
908
  // tslint:disable-next-line:no-input-rename
894
909
  get _rawFaces() { return this.#_rawFaces_accessor_storage; }
895
910
  set _rawFaces(value) { this.#_rawFaces_accessor_storage = value; }
896
- hasTextAndLeadingIcon$;
897
911
  set face(face) {
898
912
  this.faces$.value = [face];
899
913
  }
@@ -913,7 +927,6 @@ class CommandFaceComponent extends DisposableComponent {
913
927
  const activeFace = this.faceAdapters.first();
914
928
  this.activeIcon = activeFace.pluck("icon");
915
929
  this.activeColor = activeFace.pluck("color");
916
- this.hasTextAndLeadingIcon$ = valueOf.all(this.activeIcon.isNotNil(), activeFace.pluckString('text').isNotBlank(), activeFace.pluck("iconPosition").doesNotEqual(CommandFace.Position.END)).areTruthy();
917
930
  }
918
931
  shouldIncludeIcon(face) {
919
932
  return (!this.ignoreIcon && face.icon) || this.includeMissingIconInLayout;
@@ -927,11 +940,8 @@ class CommandFaceComponent extends DisposableComponent {
927
940
  get color() {
928
941
  return this.activeColor.value;
929
942
  }
930
- get hasTextAndIcon() {
931
- return this.hasTextAndLeadingIcon$.value;
932
- }
933
943
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandFaceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
934
- 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 });
935
945
  }
936
946
  __decorate([
937
947
  StoreInListModel("faces$"),
@@ -939,7 +949,7 @@ __decorate([
939
949
  ], CommandFaceComponent.prototype, "_rawFaces", null);
940
950
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandFaceComponent, decorators: [{
941
951
  type: Component,
942
- 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"] }]
943
953
  }], ctorParameters: function () { return []; }, propDecorators: { _rawFaces: [{
944
954
  type: Input,
945
955
  args: ['faces']
@@ -957,9 +967,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
957
967
  }], color: [{
958
968
  type: HostBinding,
959
969
  args: ['attr.color']
960
- }], hasTextAndIcon: [{
961
- type: HostBinding,
962
- args: ['class.has-text-and-leading-icon']
963
970
  }] } });
964
971
 
965
972
  /**
@@ -1063,11 +1070,11 @@ class CardContainerComponent extends AbstractCardContainerComponent {
1063
1070
  }
1064
1071
  }
1065
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 });
1066
- 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-min-width: var(--card-min-width, var(--card-width, var(--card-max-width)));--resolved-card-max-width: var(--card-max-width, var(--card-width, var(--card-min-width)));--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-fill,minmax(var(--resolved-card-min-width),var(--resolved-card-max-width)))}: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"] }] });
1067
1074
  }
1068
1075
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CardContainerComponent, decorators: [{
1069
1076
  type: Component,
1070
- 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-min-width: var(--card-min-width, var(--card-width, var(--card-max-width)));--resolved-card-max-width: var(--card-max-width, var(--card-width, var(--card-min-width)));--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-fill,minmax(var(--resolved-card-min-width),var(--resolved-card-max-width)))}: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"] }]
1071
1078
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { columnCount: [{
1072
1079
  type: Input
1073
1080
  }], enableScroll: [{
@@ -1143,24 +1150,14 @@ class CommandComponent extends PopupAwareComponent {
1143
1150
  activeFace$;
1144
1151
  iconOnly$;
1145
1152
  tooltip$;
1146
- visible$;
1147
1153
  constructor(element, parent) {
1148
1154
  super(element, parent);
1149
1155
  const { chain, switchOn } = Dsl.disposeWith(this);
1150
- this.faces$ = chain(this.command.busy$)
1151
- .mapToList(busy => {
1156
+ this.faces$ = chain(this.command.busy$).mapToList(busy => {
1152
1157
  return busy ?
1153
- [this.busyFace$.value ?? this.command.busyFace$.value, this.face$.value ?? this.command.defaultFace$.value] :
1154
- [this.face$.value ?? this.command.defaultFace$.value, this.busyFace$.value ?? this.command.busyFace$.value];
1155
- }, {
1156
- allowNil: true,
1157
- dependsOn: [
1158
- this.face$,
1159
- this.busyFace$,
1160
- this.command.defaultFace$,
1161
- this.command.busyFace$
1162
- ]
1163
- })
1158
+ [this.busyFace$.value, this.face$.value] :
1159
+ [this.face$.value, this.busyFace$.value];
1160
+ }, { allowNil: true, dependsOn: [this.face$, this.busyFace$] })
1164
1161
  .rejectNil();
1165
1162
  this.activeFace$ = this.faces$.first();
1166
1163
  this.buttonStyle$ = chain(this.activeFace$).map(f => CommandFace.getStyleOf(f));
@@ -1169,19 +1166,18 @@ class CommandComponent extends PopupAwareComponent {
1169
1166
  this.iconOnly$ = this.faces$.select(face => {
1170
1167
  return isEmpty(CommandFace.getTextOf(face)) && !isEmpty(CommandFace.getIconOf(face));
1171
1168
  }).count().equals(this.faces$.count());
1172
- this.visible$ = chain(this.command.visible$);
1173
- }
1174
- get cssDisplayProperty() {
1175
- return this.visible$.value ? undefined : 'none';
1176
1169
  }
1177
1170
  isActive(face) {
1178
1171
  return this.activeFace$.query().equals(face);
1179
1172
  }
1173
+ getFace() {
1174
+ return this.face;
1175
+ }
1180
1176
  requestFocus() {
1181
1177
  this.button.focus();
1182
1178
  }
1183
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 });
1184
- 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"] }] });
1185
1181
  }
1186
1182
  __decorate([
1187
1183
  Proxify(),
@@ -1229,9 +1225,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1229
1225
  }], button: [{
1230
1226
  type: ViewChild,
1231
1227
  args: [MatButton]
1232
- }], cssDisplayProperty: [{
1233
- type: HostBinding,
1234
- args: ["style.display"]
1235
1228
  }] } });
1236
1229
 
1237
1230
  /**
@@ -1259,12 +1252,12 @@ class AbstractPopupMenuComponent extends PopupAwareComponent {
1259
1252
  xPosition = 'after';
1260
1253
  yPosition = 'below';
1261
1254
  triggers;
1255
+ #enabled_accessor_storage;
1256
+ get enabled() { return this.#enabled_accessor_storage; }
1257
+ set enabled(value) { this.#enabled_accessor_storage = value; }
1262
1258
  #enabled$_accessor_storage = proxify((ValueModel));
1263
1259
  get enabled$() { return this.#enabled$_accessor_storage; }
1264
1260
  set enabled$(value) { this.#enabled$_accessor_storage = value; }
1265
- #enabled_accessor_storage = true;
1266
- get enabled() { return this.#enabled_accessor_storage; }
1267
- set enabled(value) { this.#enabled_accessor_storage = value; }
1268
1261
  children;
1269
1262
  faces$;
1270
1263
  constructor(element, parent) {
@@ -1306,16 +1299,16 @@ class AbstractPopupMenuComponent extends PopupAwareComponent {
1306
1299
  return this.faceAdapter.face;
1307
1300
  }
1308
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 });
1309
- 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 });
1310
1303
  }
1304
+ __decorate([
1305
+ StoreInValueModel(),
1306
+ __metadata("design:type", Boolean)
1307
+ ], AbstractPopupMenuComponent.prototype, "enabled", null);
1311
1308
  __decorate([
1312
1309
  Proxify(),
1313
1310
  __metadata("design:type", Object)
1314
1311
  ], AbstractPopupMenuComponent.prototype, "enabled$", null);
1315
- __decorate([
1316
- StoreInValueModel(),
1317
- __metadata("design:type", Object)
1318
- ], AbstractPopupMenuComponent.prototype, "enabled", null);
1319
1312
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractPopupMenuComponent, decorators: [{
1320
1313
  type: Component,
1321
1314
  args: [{ selector: 'aup-abstract-popup-menu', template: '' }]
@@ -1329,10 +1322,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1329
1322
  }], triggers: [{
1330
1323
  type: ViewChildren,
1331
1324
  args: [MatMenuTrigger]
1332
- }], enabled$: [{
1333
- type: Input
1334
1325
  }], enabled: [{
1335
1326
  type: Input
1327
+ }], enabled$: [{
1328
+ type: Input
1336
1329
  }] } });
1337
1330
 
1338
1331
  class CommandContainer extends GarbageCollector {
@@ -1365,15 +1358,13 @@ class ToolBarComponent extends CommandContainer {
1365
1358
  get orientation() {
1366
1359
  return CommandContainer.Orientation.HORIZONTAL;
1367
1360
  }
1368
- 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 });
1369
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 });
1370
1363
  }
1371
1364
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ToolBarComponent, decorators: [{
1372
1365
  type: Component,
1373
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"] }]
1374
- }], ctorParameters: function () { return [{ type: CommandContainer, decorators: [{
1375
- type: Optional
1376
- }] }]; } });
1367
+ }], ctorParameters: function () { return [{ type: CommandContainer }]; } });
1377
1368
 
1378
1369
  /**
1379
1370
  *
@@ -1684,6 +1675,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1684
1675
  args: ['blur']
1685
1676
  }] } });
1686
1677
 
1678
+ /* tslint:disable:no-input-rename */
1687
1679
  const INPUT_TOKEN_HACK = new InjectionToken("INPUT_TOKEN_HACK");
1688
1680
  class AbstractInputComponent extends DisposableComponent {
1689
1681
  onValueEditedListeners = new EventListenerList();
@@ -1698,16 +1690,11 @@ class AbstractInputComponent extends DisposableComponent {
1698
1690
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
1699
1691
  */
1700
1692
  formValue$;
1701
- #i18n$_accessor_storage = proxify((MutableValueModel));
1702
- get i18n$() { return this.#i18n$_accessor_storage; }
1703
- set i18n$(value) { this.#i18n$_accessor_storage = value; }
1704
- #i18n_accessor_storage;
1705
- get i18n() { return this.#i18n_accessor_storage; }
1706
- set i18n(value) { this.#i18n_accessor_storage = value; }
1707
- _label;
1693
+ label;
1694
+ // eslint-disable-next-line @angular-eslint/no-input-rename
1708
1695
  userFloatLabel = 'always'; // TODO: make this an injectable default
1709
- _hint;
1710
- _placeholder;
1696
+ hint;
1697
+ placeholder;
1711
1698
  dense = false;
1712
1699
  _enabled$ = this.registerDisposable(new DelegatingValueModel());
1713
1700
  set enabled$(condition$) {
@@ -1774,9 +1761,6 @@ class AbstractInputComponent extends DisposableComponent {
1774
1761
  isEnabled() {
1775
1762
  return this.enabled$.value;
1776
1763
  }
1777
- get disabled() {
1778
- return !this.isEnabled();
1779
- }
1780
1764
  hasErrors() {
1781
1765
  return !this.errorList$.query().isEmpty();
1782
1766
  }
@@ -1789,15 +1773,6 @@ class AbstractInputComponent extends DisposableComponent {
1789
1773
  get focusContext() {
1790
1774
  return this.formValue$.focusContext;
1791
1775
  }
1792
- get label() {
1793
- return this._label ?? this.i18n?.label();
1794
- }
1795
- get hint() {
1796
- return this._hint ?? this.hackyGetI18n("hint");
1797
- }
1798
- get placeholder() {
1799
- return this._placeholder ?? this.hackyGetI18n("placeholder");
1800
- }
1801
1776
  get floatLabel() {
1802
1777
  // return this.dense ? 'never' : this.userFloatLabel;
1803
1778
  return this.userFloatLabel;
@@ -1812,45 +1787,24 @@ class AbstractInputComponent extends DisposableComponent {
1812
1787
  onValueEdited(callback) {
1813
1788
  return this.onValueEditedListeners.add(callback);
1814
1789
  }
1815
- hackyGetI18n(key) {
1816
- // TODO: update I18n to make it possible to get an optional value with return the missing key message.
1817
- const i18nFn = this.i18n ? this.i18n[key] : undefined;
1818
- const i18nValue = i18nFn && i18nFn();
1819
- return i18nValue?.startsWith("missing key") ? undefined : i18nValue;
1820
- }
1821
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 });
1822
- 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 });
1823
1792
  }
1824
- __decorate([
1825
- Proxify(),
1826
- __metadata("design:type", Object)
1827
- ], AbstractInputComponent.prototype, "i18n$", null);
1828
- __decorate([
1829
- StoreInValueModel(),
1830
- __metadata("design:type", Object)
1831
- ], AbstractInputComponent.prototype, "i18n", null);
1832
1793
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractInputComponent, decorators: [{
1833
1794
  type: Component,
1834
1795
  args: [{ template: '' }]
1835
1796
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1836
1797
  type: Inject,
1837
1798
  args: [INPUT_TOKEN_HACK]
1838
- }] }]; }, propDecorators: { i18n$: [{
1839
- type: Input
1840
- }], i18n: [{
1799
+ }] }]; }, propDecorators: { label: [{
1841
1800
  type: Input
1842
- }], _label: [{
1843
- type: Input,
1844
- args: ["label"]
1845
1801
  }], userFloatLabel: [{
1846
1802
  type: Input,
1847
1803
  args: ['floatLabel']
1848
- }], _hint: [{
1849
- type: Input,
1850
- args: ['hint']
1851
- }], _placeholder: [{
1852
- type: Input,
1853
- args: ['placeholder']
1804
+ }], hint: [{
1805
+ type: Input
1806
+ }], placeholder: [{
1807
+ type: Input
1854
1808
  }], dense: [{
1855
1809
  type: HostBinding,
1856
1810
  args: ['class.dense']
@@ -1893,9 +1847,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1893
1847
  }], notifyFocusOut: [{
1894
1848
  type: HostListener,
1895
1849
  args: ['focusout']
1896
- }], disabled: [{
1897
- type: HostBinding,
1898
- args: ["class.disabled"]
1899
1850
  }] } });
1900
1851
 
1901
1852
  class AbstractListInputComponent extends AbstractInputComponent {
@@ -2133,15 +2084,12 @@ class CheckboxInputComponent extends AbstractValueInputComponent {
2133
2084
  constructor() {
2134
2085
  super();
2135
2086
  }
2136
- select($event) {
2137
- this.componentValue$.value = $event.checked;
2138
- }
2139
2087
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CheckboxInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2140
- 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<!-- NOTE: using [(ngModel)] affects how material renders the component and makes it harder to test so we're using [checked] and (change) -->\n<mat-checkbox\n [checked]=\"componentValue$.value\"\n (change)=\"select($event)\"\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: i4$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i3$1.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"] }] });
2141
2089
  }
2142
2090
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CheckboxInputComponent, decorators: [{
2143
2091
  type: Component,
2144
- args: [{ selector: 'aup-checkbox-input', template: "<!-- TODO: add focus binding -->\n<!-- NOTE: using [(ngModel)] affects how material renders the component and makes it harder to test so we're using [checked] and (change) -->\n<mat-checkbox\n [checked]=\"componentValue$.value\"\n (change)=\"select($event)\"\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"] }]
2145
2093
  }], ctorParameters: function () { return []; }, propDecorators: { color: [{
2146
2094
  type: Input
2147
2095
  }], labelPosition: [{
@@ -2180,7 +2128,7 @@ class MultipleSelectInputComponent extends AbstractListInputComponent {
2180
2128
  const self = this;
2181
2129
  this.registerDisposable(new Binding(this.componentList$, this.ids$, {
2182
2130
  toLeft(selectedItems, currentLeftValue) {
2183
- const newValues = selectedItems.map(it => lookup.get(it)).filter(it => !!it);
2131
+ const newValues = selectedItems.map(it => lookup.get(it)).filter(it => !it);
2184
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
2185
2133
  return newValues.length < 1 && selectedItems.length > 0 ? currentLeftValue : newValues;
2186
2134
  },
@@ -2191,7 +2139,7 @@ class MultipleSelectInputComponent extends AbstractListInputComponent {
2191
2139
  })).writeRight();
2192
2140
  }
2193
2141
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: MultipleSelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2194
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: MultipleSelectInputComponent, selector: "aup-multiple-select-input", inputs: { options$: "options$", options: "options", optionLabel: "optionLabel", optionLabelFormat: "optionLabelFormat" }, queries: [{ propertyName: "optionTemplateRef", first: true, predicate: ["optionTemplate"], 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 multiple\n [ngModel]=\"componentList$.value\"\n (ngModelChange)=\"selectAll($event)\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngFor=\"let option of options$.value; let i = index\" [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>{{placeholder}}</div>\n <div class=\"item\" *ngFor=\"let item of options\">{{optionLabelFormat(item)}}</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:30px}\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$3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }] });
2142
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: MultipleSelectInputComponent, selector: "aup-multiple-select-input", inputs: { options$: "options$", options: "options", optionLabel: "optionLabel", optionLabelFormat: "optionLabelFormat" }, queries: [{ propertyName: "optionTemplateRef", first: true, predicate: ["optionTemplate"], 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 multiple\n [ngModel]=\"componentList$.value\"\n (ngModelChange)=\"selectAll($event)\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngFor=\"let option of options$.value; let i = index\" [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>{{placeholder}}</div>\n <div class=\"item\" *ngFor=\"let item of options\">{{optionLabelFormat(item)}}</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:30px}\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: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }] });
2195
2143
  }
2196
2144
  __decorate([
2197
2145
  Proxify(),
@@ -2219,142 +2167,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2219
2167
 
2220
2168
  class NumberInputComponent extends AbstractValueInputComponent {
2221
2169
  autocomplete;
2222
- #min$_accessor_storage = proxify((ValueModel));
2223
- get min$() { return this.#min$_accessor_storage; }
2224
- set min$(value) { this.#min$_accessor_storage = value; }
2225
- #min_accessor_storage = Number.MIN_SAFE_INTEGER;
2226
- get min() { return this.#min_accessor_storage; }
2227
- set min(value) { this.#min_accessor_storage = value; }
2228
- #max$_accessor_storage = proxify((ValueModel));
2229
- get max$() { return this.#max$_accessor_storage; }
2230
- set max$(value) { this.#max$_accessor_storage = value; }
2231
- #max_accessor_storage = Number.MAX_SAFE_INTEGER;
2232
- get max() { return this.#max_accessor_storage; }
2233
- set max(value) { this.#max_accessor_storage = value; }
2234
- incrementCommand;
2235
- decrementCommand;
2170
+ min = Number.MIN_SAFE_INTEGER;
2171
+ max = Number.MAX_SAFE_INTEGER;
2172
+ iconPrefix;
2236
2173
  constructor() {
2237
2174
  super();
2238
- const { chain } = Dsl.disposeWith(this);
2239
- const normalisedValue$ = chain(this.value$).otherwise(0);
2240
- this.incrementCommand = Command.create(() => {
2241
- this.value$.value = normalisedValue$.value + 1;
2242
- }).enableWhile(chain.numericValue(normalisedValue$).isLessThan(this.max$).and(this.enabled$));
2243
- this.decrementCommand = Command.create(() => {
2244
- this.value$.value = normalisedValue$.value - 1;
2245
- }).enableWhile(chain.numericValue(normalisedValue$).isGreaterThan(this.min$).and(this.enabled$));
2246
2175
  }
2247
2176
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: NumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2248
- 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"] }] });
2249
2178
  }
2250
- __decorate([
2251
- Proxify(),
2252
- __metadata("design:type", ValueModel)
2253
- ], NumberInputComponent.prototype, "min$", null);
2254
- __decorate([
2255
- StoreInValueModel(),
2256
- __metadata("design:type", Object)
2257
- ], NumberInputComponent.prototype, "min", null);
2258
- __decorate([
2259
- Proxify(),
2260
- __metadata("design:type", ValueModel)
2261
- ], NumberInputComponent.prototype, "max$", null);
2262
- __decorate([
2263
- StoreInValueModel(),
2264
- __metadata("design:type", Object)
2265
- ], NumberInputComponent.prototype, "max", null);
2266
2179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: NumberInputComponent, decorators: [{
2267
2180
  type: Component,
2268
- 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" }]
2269
2182
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2270
2183
  type: Input
2271
- }], min$: [{
2272
- type: Input
2273
2184
  }], min: [{
2274
2185
  type: Input
2275
- }], max$: [{
2276
- type: Input
2277
2186
  }], max: [{
2278
2187
  type: Input
2188
+ }], iconPrefix: [{
2189
+ type: Input
2279
2190
  }] } });
2280
2191
 
2281
2192
  class PasswordInputComponent extends AbstractValueInputComponent {
2282
2193
  autocomplete;
2283
- #enableShowPassword$_accessor_storage = proxify((ValueModel));
2284
- get enableShowPassword$() { return this.#enableShowPassword$_accessor_storage; }
2285
- set enableShowPassword$(value) { this.#enableShowPassword$_accessor_storage = value; }
2286
- #enableShowPassword_accessor_storage = false;
2287
- get enableShowPassword() { return this.#enableShowPassword_accessor_storage; }
2288
- set enableShowPassword(value) { this.#enableShowPassword_accessor_storage = value; }
2289
- showPassword$ = new MutableValueModel(false);
2290
- toggleShowPasswordCommand;
2291
2194
  constructor() {
2292
2195
  super();
2293
- const { chain, valueOf } = Dsl.disposeWith(this);
2294
- const face$ = chain(this.showPassword$).map(show => {
2295
- return {
2296
- icon: () => show ? "mat:visibility_off" : "mat:visibility"
2297
- };
2298
- });
2299
- this.toggleShowPasswordCommand = Command.create(() => {
2300
- this.showPassword$.value = !this.showPassword$.value;
2301
- })
2302
- .withFace(face$)
2303
- .enableWhile(chain.stringValue(this.componentValue$).isNotBlank());
2304
- }
2305
- get fieldType() {
2306
- return this.showPassword$.value ? "text" : "password";
2307
2196
  }
2308
2197
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PasswordInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2309
- 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"] }] });
2310
2199
  }
2311
- __decorate([
2312
- Proxify(),
2313
- __metadata("design:type", Object)
2314
- ], PasswordInputComponent.prototype, "enableShowPassword$", null);
2315
- __decorate([
2316
- StoreInValueModel(),
2317
- __metadata("design:type", Object)
2318
- ], PasswordInputComponent.prototype, "enableShowPassword", null);
2319
2200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PasswordInputComponent, decorators: [{
2320
2201
  type: Component,
2321
- 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" }]
2322
- }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2323
- type: Input
2324
- }], enableShowPassword$: [{
2325
- type: Input
2326
- }], enableShowPassword: [{
2327
- type: Input
2328
- }] } });
2329
-
2330
- class SearchInputComponent extends AbstractValueInputComponent {
2331
- autocomplete;
2332
- clearCommand;
2333
- constructor() {
2334
- super();
2335
- this.dense = true;
2336
- const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2337
- this.clearCommand = Command.create(() => {
2338
- this.componentValue$.value = "";
2339
- });
2340
- this.clearCommand.disableWhile(chain.stringValue(this.componentValue$).isBlank());
2341
- }
2342
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2343
- 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"] }] });
2344
- }
2345
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SearchInputComponent, decorators: [{
2346
- type: Component,
2347
- 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" }]
2348
2203
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2349
2204
  type: Input
2350
2205
  }] } });
2351
2206
 
2352
2207
  /**
2353
2208
  * Using templates:
2354
- * <aup-select-input [value$]="myModel" [options]="myOptions">
2209
+ * <aup-select-input [valueModel]="myModel" [options]="myOptions">
2355
2210
  * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
2356
- * <ng-template #selectedOptionTemplate let-option>{{option.thePropertyYouWant}} note, not used for nils (the placeholder is used)</ng-template>
2357
- * <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>
2358
2212
  * </aup-select_input>
2359
2213
  */
2360
2214
  class SelectInputComponent extends AbstractValueInputComponent {
@@ -2379,7 +2233,7 @@ class SelectInputComponent extends AbstractValueInputComponent {
2379
2233
  super();
2380
2234
  const { chain } = Dsl.disposeWith(this);
2381
2235
  this.cookedOptions$ = chain(this.options$)
2382
- .mapAll(options => {
2236
+ .reduceToList(options => {
2383
2237
  return options.length < 1 && !isNil(this.componentValue$.value) ? [this.componentValue$.value] : options;
2384
2238
  }, {
2385
2239
  dependsOn: this.componentValue$
@@ -2418,21 +2272,21 @@ class SelectInputComponent extends AbstractValueInputComponent {
2418
2272
  id: this.delegatedIdentityOf(value)
2419
2273
  });
2420
2274
  let lastIdSnapshot = snapshotValueAndId(this.componentValue$.value);
2421
- // console.log(lastIdSnapshot)
2275
+ console.log(lastIdSnapshot);
2422
2276
  before(this.options$).changes(() => {
2423
2277
  lastIdSnapshot = snapshotValueAndId(this.componentValue$.value);
2424
- // console.log(lastIdSnapshot)
2278
+ console.log(lastIdSnapshot);
2425
2279
  });
2426
2280
  when(this.options$).changes((is, was) => {
2427
2281
  const newIdSnapshot = snapshotValueAndId(lastIdSnapshot.value);
2428
- // console.log(lastIdSnapshot, newIdSnapshot)
2282
+ console.log(lastIdSnapshot, newIdSnapshot);
2429
2283
  if (newIdSnapshot !== lastIdSnapshot.id) {
2430
2284
  this.id$.value = this.delegatedIdentityOf(this.componentValue$.value);
2431
2285
  }
2432
2286
  });
2433
2287
  }
2434
2288
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2435
- 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$3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i4$3.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"] }] });
2436
2290
  }
2437
2291
  __decorate([
2438
2292
  Proxify(),
@@ -2444,7 +2298,7 @@ __decorate([
2444
2298
  ], SelectInputComponent.prototype, "options", null);
2445
2299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputComponent, decorators: [{
2446
2300
  type: Component,
2447
- 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"] }]
2448
2302
  }], ctorParameters: function () { return []; }, propDecorators: { options$: [{
2449
2303
  type: Input
2450
2304
  }], options: [{
@@ -2475,24 +2329,17 @@ class StringInputComponent extends AbstractValueInputComponent {
2475
2329
  get enableClear() { return this.#enableClear_accessor_storage; }
2476
2330
  set enableClear(value) { this.#enableClear_accessor_storage = value; }
2477
2331
  iconPrefix;
2478
- #suffixCommand_accessor_storage = proxify(Command);
2479
- get suffixCommand() { return this.#suffixCommand_accessor_storage; }
2480
- set suffixCommand(value) { this.#suffixCommand_accessor_storage = value; }
2481
2332
  clearCommand;
2482
2333
  constructor() {
2483
2334
  super();
2484
2335
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2485
2336
  this.clearCommand = Command.create(() => {
2486
2337
  this.componentValue$.value = "";
2487
- })
2488
- .withFace({ icon: () => "mat:clear" })
2489
- .enableWhile(chain.stringValue(this.componentValue$).isNotBlank());
2490
- }
2491
- get hasSuffixCommand() {
2492
- return Proxify.hasTarget(this.suffixCommand);
2338
+ });
2339
+ this.clearCommand.disableWhile(chain.stringValue(this.componentValue$).isBlank());
2493
2340
  }
2494
2341
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2495
- 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"] }] });
2496
2343
  }
2497
2344
  __decorate([
2498
2345
  Proxify(),
@@ -2502,13 +2349,9 @@ __decorate([
2502
2349
  StoreInValueModel(),
2503
2350
  __metadata("design:type", Object)
2504
2351
  ], StringInputComponent.prototype, "enableClear", null);
2505
- __decorate([
2506
- Proxify(),
2507
- __metadata("design:type", Command)
2508
- ], StringInputComponent.prototype, "suffixCommand", null);
2509
2352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, decorators: [{
2510
2353
  type: Component,
2511
- 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"] }]
2512
2355
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2513
2356
  type: Input
2514
2357
  }], enableClear$: [{
@@ -2517,8 +2360,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2517
2360
  type: Input
2518
2361
  }], iconPrefix: [{
2519
2362
  type: Input
2520
- }], suffixCommand: [{
2521
- type: Input
2522
2363
  }] } });
2523
2364
 
2524
2365
  class TextInputComponent extends AbstractValueInputComponent {
@@ -2706,6 +2547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2706
2547
  * </aup-switch-case>
2707
2548
  */
2708
2549
  class SwitchCaseComponent extends DisposableComponent {
2550
+ cdr;
2709
2551
  #switch$_accessor_storage = proxify((ValueModel));
2710
2552
  get switch$() { return this.#switch$_accessor_storage; }
2711
2553
  set switch$(value) { this.#switch$_accessor_storage = value; }
@@ -2714,8 +2556,9 @@ class SwitchCaseComponent extends DisposableComponent {
2714
2556
  set switch(value) { this.#switch_accessor_storage = value; }
2715
2557
  switchCaseOptions;
2716
2558
  selectedIndex = 0;
2717
- constructor() {
2559
+ constructor(cdr) {
2718
2560
  super();
2561
+ this.cdr = cdr;
2719
2562
  }
2720
2563
  ngAfterContentInit() {
2721
2564
  const subscription = this.switchCaseOptions.changes.subscribe(change => this.updateSelection());
@@ -2752,8 +2595,8 @@ class SwitchCaseComponent extends DisposableComponent {
2752
2595
  this.selectedIndex = -1;
2753
2596
  }
2754
2597
  }
2755
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SwitchCaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2756
- 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$2.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i3$2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }] });
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 });
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"] }] });
2757
2600
  }
2758
2601
  __decorate([
2759
2602
  Proxify(),
@@ -2766,7 +2609,7 @@ __decorate([
2766
2609
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SwitchCaseComponent, decorators: [{
2767
2610
  type: Component,
2768
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"] }]
2769
- }], ctorParameters: function () { return []; }, propDecorators: { switch$: [{
2612
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { switch$: [{
2770
2613
  type: Input
2771
2614
  }], switch: [{
2772
2615
  type: Input
@@ -2776,7 +2619,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2776
2619
  }] } });
2777
2620
 
2778
2621
  const HEADER_CELL_RENDERER_PORTAL = Symbol('aup-cell-header-renderer-component-ref');
2779
- const FOOTER_CELL_RENDERER_PORTAL = Symbol('aup-cell-footer-renderer-component-ref');
2780
2622
  const CELL_RENDERER_PORTAL = Symbol('aup-cell-renderer-component-ref');
2781
2623
  const CELL_EDITOR_PORTAL = Symbol('aup-cell-editor-component-ref');
2782
2624
  const PORTAL_RENDERER_COMPONENT = Symbol('aup-cell-renderer-portal-component');
@@ -2874,23 +2716,6 @@ class TemplateCellRendererPortalRef extends CellRendererPortalRef {
2874
2716
  return new TemplatePortal(this.templateRef, this.viewContainer, { ...(data), $implicit: data.row });
2875
2717
  }
2876
2718
  }
2877
- class CellFooterPortalRef extends CellPortalRef {
2878
- componentType;
2879
- initialiseHeader;
2880
- constructor(componentType, initialiseHeader) {
2881
- super();
2882
- this.componentType = componentType;
2883
- this.initialiseHeader = initialiseHeader;
2884
- }
2885
- initialiseHost(host, columnModel) {
2886
- assert$1.isTruthy(host);
2887
- host[HEADER_CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
2888
- }
2889
- // @Trace()
2890
- onPortalAttached(host, portalComponent) {
2891
- this.initialiseHeader(portalComponent, host.column);
2892
- }
2893
- }
2894
2719
 
2895
2720
  class ColumnTextSearchFormatter {
2896
2721
  }
@@ -2981,7 +2806,6 @@ class ColumnTextSearchWrapper extends ColumnTextSearchFormatter.Delegate {
2981
2806
  }
2982
2807
  class ColumnModel extends GarbageCollector {
2983
2808
  columnId;
2984
- order;
2985
2809
  textPropertiesProvider;
2986
2810
  _columnTextProperties;
2987
2811
  _columnHeaderPortalRef;
@@ -2995,10 +2819,9 @@ class ColumnModel extends GarbageCollector {
2995
2819
  dasherisedColumnId;
2996
2820
  textSearchDelegate = new ColumnTextSearchWrapper();
2997
2821
  visible$;
2998
- constructor(columnId, order, textPropertiesProvider) {
2822
+ constructor(columnId, textPropertiesProvider) {
2999
2823
  super();
3000
2824
  this.columnId = columnId;
3001
- this.order = order;
3002
2825
  this.textPropertiesProvider = textPropertiesProvider;
3003
2826
  const { valueOf } = Dsl.disposeWith(this);
3004
2827
  this.installHeaderRenderer();
@@ -3043,14 +2866,6 @@ class ColumnModel extends GarbageCollector {
3043
2866
  this._columnTextProperties = columnTextProperties;
3044
2867
  return this;
3045
2868
  }
3046
- positionAfter(column) {
3047
- this.order.position(this, { after: column });
3048
- return this;
3049
- }
3050
- positionBefore(column) {
3051
- this.order.position(this, { before: column });
3052
- return this;
3053
- }
3054
2869
  getSearchTextFor(row) {
3055
2870
  return this.textSearchDelegate.format(row);
3056
2871
  }
@@ -3152,8 +2967,8 @@ __decorate([
3152
2967
 
3153
2968
  class CustomTemplateColumnModel extends ColumnModel {
3154
2969
  config = new TemplateCellRendererPortalRef();
3155
- constructor(columnId, order, defaults) {
3156
- super(columnId, order, defaults);
2970
+ constructor(columnId, defaults) {
2971
+ super(columnId, defaults);
3157
2972
  this.configureCellRenderer(this.config);
3158
2973
  }
3159
2974
  setTemplate(templateRef, viewContainer, fillCell, padChild) {
@@ -3231,17 +3046,12 @@ class AbstractTableComponent extends DisposableComponent {
3231
3046
  #showHeader_accessor_storage = true;
3232
3047
  get showHeader() { return this.#showHeader_accessor_storage; }
3233
3048
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
3234
- #enableScrolling$_accessor_storage = proxify((ValueModel));
3235
3049
  /**
3236
3050
  * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
3237
3051
  * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
3238
3052
  * containment area.
3239
3053
  */
3240
- get enableScrolling$() { return this.#enableScrolling$_accessor_storage; }
3241
- set enableScrolling$(value) { this.#enableScrolling$_accessor_storage = value; }
3242
- #enableScrolling_accessor_storage = false;
3243
- get enableScrolling() { return this.#enableScrolling_accessor_storage; }
3244
- set enableScrolling(value) { this.#enableScrolling_accessor_storage = value; }
3054
+ enableScrolling = false;
3245
3055
  columns;
3246
3056
  columnIds;
3247
3057
  columnsById;
@@ -3260,6 +3070,7 @@ class AbstractTableComponent extends DisposableComponent {
3260
3070
  super();
3261
3071
  this.injector = injector;
3262
3072
  const { chain, when } = Dsl.disposeWith(this);
3073
+ this._visibleRows$.setDelegate(this._dataSource$);
3263
3074
  when(chain(this._dataSource$).first()).becomesTruthy(it => {
3264
3075
  if (it === this.identityOf(it)) {
3265
3076
  console.warn("Table model identity function is using reference equality. This can cause lots of table re-rendering", {
@@ -3278,7 +3089,7 @@ class AbstractTableComponent extends DisposableComponent {
3278
3089
  if (!model) {
3279
3090
  lang$1.illegalState("aup-table tableModel is nil");
3280
3091
  }
3281
- this.columnsById = chain(model.columns$).indexBy('columnId');
3092
+ this.columnsById = chain(model.columns).indexBy('columnId');
3282
3093
  this._dataSource$.setDelegate(model.dataSource$);
3283
3094
  model.initialise(this.injector, (row) => this.identityOf(row));
3284
3095
  }
@@ -3295,7 +3106,7 @@ class AbstractTableComponent extends DisposableComponent {
3295
3106
  }
3296
3107
  }
3297
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 });
3298
- 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 });
3299
3110
  }
3300
3111
  __decorate([
3301
3112
  Proxify(),
@@ -3305,14 +3116,6 @@ __decorate([
3305
3116
  StoreInValueModel(),
3306
3117
  __metadata("design:type", Object)
3307
3118
  ], AbstractTableComponent.prototype, "showHeader", null);
3308
- __decorate([
3309
- Proxify(),
3310
- __metadata("design:type", ValueModel)
3311
- ], AbstractTableComponent.prototype, "enableScrolling$", null);
3312
- __decorate([
3313
- StoreInValueModel(),
3314
- __metadata("design:type", Boolean)
3315
- ], AbstractTableComponent.prototype, "enableScrolling", null);
3316
3119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, decorators: [{
3317
3120
  type: Component,
3318
3121
  args: [{
@@ -3323,8 +3126,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
3323
3126
  type: Input
3324
3127
  }], showHeader: [{
3325
3128
  type: Input
3326
- }], enableScrolling$: [{
3327
- type: Input
3328
3129
  }], enableScrolling: [{
3329
3130
  type: Input
3330
3131
  }], baseCssClass: [{
@@ -3385,8 +3186,6 @@ class EditSession extends GarbageCollector {
3385
3186
  // console.warn()
3386
3187
  // }
3387
3188
  this._liveRowValue$.value = produce(this._liveRowValue$.value, draft => {
3388
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3389
- // @ts-ignore
3390
3189
  this.form.writeDirtyStateTo(draft);
3391
3190
  });
3392
3191
  });
@@ -3489,11 +3288,11 @@ class DefaultCellRendererComponent {
3489
3288
  return this._value;
3490
3289
  }
3491
3290
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3492
- 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" }] });
3493
3292
  }
3494
3293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, decorators: [{
3495
3294
  type: Component,
3496
- 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" }]
3497
3296
  }], propDecorators: { value: [{
3498
3297
  type: Input
3499
3298
  }] } });
@@ -3509,8 +3308,7 @@ class SelectionHeaderCellComponent extends DisposableComponent {
3509
3308
  super();
3510
3309
  this.selectCommand = Command.create(() => {
3511
3310
  this.selectionModel.toggleAllCommand.execute();
3512
- }).visibleWhile(this.selectionModel.toggleAllCommand.visible$)
3513
- .enableWhile(this.selectionModel.toggleAllCommand.enabled$);
3311
+ });
3514
3312
  }
3515
3313
  isSelected() {
3516
3314
  return this.ifMultiSelectionModel(m => m.allSelected$.value, false);
@@ -3538,7 +3336,7 @@ class SelectionHeaderCellComponent extends DisposableComponent {
3538
3336
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectionHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3539
3337
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SelectionHeaderCellComponent, selector: "aup-selection-header-cell", providers: [
3540
3338
  { provide: MAT_CHECKBOX_DEFAULT_OPTIONS, useValue: { clickAction: 'noop' } }
3541
- ], usesInheritance: true, ngImport: i0, template: "<mat-checkbox *ngIf=\"isVisible()\"\n (click)=\"handleClick($event)\"\n [checked]=\"isSelected()\"\n [indeterminate]=\"this.isIntermediate()\"\n [color]=\"color\"\n></mat-checkbox>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
3339
+ ], usesInheritance: true, ngImport: i0, template: "<mat-checkbox *ngIf=\"isVisible()\"\n (click)=\"handleClick($event)\"\n [checked]=\"isSelected()\"\n [indeterminate]=\"this.isIntermediate()\"\n [color]=\"color\"\n></mat-checkbox>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
3542
3340
  }
3543
3341
  __decorate([
3544
3342
  Proxify(),
@@ -3571,7 +3369,7 @@ class SelectionCellComponent extends DisposableComponent {
3571
3369
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectionCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3572
3370
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SelectionCellComponent, selector: "aup-selection-cell", inputs: { row: "row" }, providers: [
3573
3371
  { provide: MAT_CHECKBOX_DEFAULT_OPTIONS, useValue: { clickAction: 'noop' } }
3574
- ], usesInheritance: true, ngImport: i0, template: "<mat-checkbox (click)=\"select($event)\" [checked]=\"isSelected()\" [color]=\"color\"></mat-checkbox>\n", styles: [""], dependencies: [{ kind: "component", type: i3$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
3372
+ ], usesInheritance: true, ngImport: i0, template: "<mat-checkbox (click)=\"select($event)\" [checked]=\"isSelected()\" [color]=\"color\"></mat-checkbox>\n", styles: [""], dependencies: [{ kind: "component", type: i4$3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
3575
3373
  }
3576
3374
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectionCellComponent, decorators: [{
3577
3375
  type: Component,
@@ -3632,14 +3430,25 @@ class Bounds extends Dimension {
3632
3430
  })(Bounds || (Bounds = {}));
3633
3431
 
3634
3432
  class ResizeAwareComponent extends DisposableComponent {
3635
- elementRef = this.inject(ElementRef);
3636
- ngZone = this.inject(NgZone);
3637
- 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
+ }
3638
3441
  ngAfterViewInit() {
3639
- 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());
3640
3449
  }
3641
3450
  get bounds$() {
3642
- return this.boundsTracker.bounds$;
3451
+ return this._bounds$.readonly$;
3643
3452
  }
3644
3453
  get nativeElement() {
3645
3454
  return this.elementRef.nativeElement;
@@ -3649,160 +3458,57 @@ class ResizeAwareComponent extends DisposableComponent {
3649
3458
  return this.bounds.relativePositionOf(point);
3650
3459
  }
3651
3460
  get bounds() {
3652
- return this.bounds$.value;
3461
+ return this._bounds$.value;
3462
+ }
3463
+ _updateBounds() {
3464
+ this._bounds$.value = Bounds.ofElement(this.nativeElement);
3653
3465
  }
3654
- 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 });
3655
3467
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ResizeAwareComponent, usesInheritance: true, ngImport: i0 });
3656
3468
  }
3657
3469
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeAwareComponent, decorators: [{
3658
3470
  type: Directive
3659
- }] });
3660
- (function (ResizeAwareComponent) {
3661
- class ResizeTracker extends GarbageCollector {
3662
- elementRef;
3663
- ngZone;
3664
- _bounds$ = new MutableValueModel(new Bounds(0, 0, 0, 0));
3665
- width$;
3666
- height$;
3667
- top$;
3668
- left$;
3669
- bottom$;
3670
- right$;
3671
- constructor(elementRef, ngZone) {
3672
- super();
3673
- this.elementRef = elementRef;
3674
- this.ngZone = ngZone;
3675
- const { chain } = Dsl.disposeWith(this);
3676
- this.width$ = chain(this.bounds$).pluck("width");
3677
- this.height$ = chain(this.bounds$).pluck("height");
3678
- this.top$ = chain(this.bounds$).pluck("top");
3679
- this.left$ = chain(this.bounds$).pluck("left");
3680
- this.bottom$ = chain.numericValue(this.top$).add(this.height$);
3681
- this.right$ = chain.numericValue(this.left$).add(this.width$);
3682
- }
3683
- notifyViewReady() {
3684
- const element = this.elementRef.nativeElement;
3685
- const ro = new ResizeObserver((entries, observer) => {
3686
- this.ngZone.run(() => this._updateBounds());
3687
- });
3688
- ro.observe(element);
3689
- this.onDispose(() => ro.disconnect());
3690
- setTimeout(() => this._updateBounds());
3691
- }
3692
- get bounds$() {
3693
- return this._bounds$.readonly$;
3694
- }
3695
- get nativeElement() {
3696
- return this.elementRef.nativeElement;
3697
- }
3698
- // TODO: Make this handle body scroll
3699
- relativePositionOf(point) {
3700
- return this.bounds.relativePositionOf(point);
3701
- }
3702
- get bounds() {
3703
- return this._bounds$.value;
3704
- }
3705
- _updateBounds() {
3706
- this._bounds$.value = Bounds.ofElement(this.nativeElement);
3707
- }
3708
- }
3709
- ResizeAwareComponent.ResizeTracker = ResizeTracker;
3710
- })(ResizeAwareComponent || (ResizeAwareComponent = {}));
3471
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; } });
3711
3472
 
3712
- var ColumnOrderManager;
3713
- (function (ColumnOrderManager) {
3714
- function processPosition(position, callback) {
3715
- if (position) {
3716
- const keys = Object.keys(position);
3717
- if (keys.includes("before")) {
3718
- return position["before"] ? callback.before(position["before"]) : callback.first();
3719
- }
3720
- else {
3721
- return position["after"] ? callback.after(position["after"]) : callback.last();
3722
- }
3723
- }
3724
- else {
3725
- return callback.last();
3726
- }
3727
- }
3728
- ColumnOrderManager.processPosition = processPosition;
3729
- })(ColumnOrderManager || (ColumnOrderManager = {}));
3730
-
3731
- class ColumnRef {
3732
- column;
3733
- position;
3734
- constructor(column, position) {
3735
- this.column = column;
3736
- this.position = position;
3737
- }
3738
- }
3739
- class ColumnManager extends GarbageCollector {
3740
- _columnRefs$ = new MutableListModel();
3741
- orderedColumnRefs$;
3742
- _columnsById$;
3743
- allColumns$;
3744
- columnVisibilities$ = new WatchList();
3745
- visibleColumns$;
3473
+ class ColumnListModel extends AbstractComputedListModel {
3474
+ _allColumns$ = new MutableListModel();
3475
+ columnsById$;
3746
3476
  constructor() {
3747
3477
  super();
3748
3478
  const { chain } = Dsl.disposeWith(this);
3749
- this.orderedColumnRefs$ = chain(this._columnRefs$).orderBy("position", "asc");
3750
- this.allColumns$ = this.orderedColumnRefs$.pluck("column");
3751
- this._columnsById$ = chain(this.allColumns$).indexBy('columnId');
3752
- this.visibleColumns$ = chain(this.allColumns$).select(it => it.visible$.value, {
3753
- dependsOn: this.columnVisibilities$
3754
- });
3479
+ this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
3755
3480
  }
3756
- position(column, newPosition) {
3757
- const target = this._columnRefs$.query().findMatching(it => it.column === column);
3758
- const position = this.computePosition(newPosition);
3759
- this._columnRefs$.replace(target, { with: new ColumnRef(target.column, position) });
3481
+ get allColumns$() {
3482
+ return this._allColumns$.readonly$;
3760
3483
  }
3761
3484
  getColumn(id) {
3762
- return this._columnsById$.get(id);
3485
+ return this.columnsById$.get(id);
3763
3486
  }
3764
3487
  hasColumn(id) {
3765
- return !!this._columnsById$.get(id);
3488
+ return !!this.columnsById$.get(id);
3766
3489
  }
3767
3490
  hasMatchingColumn(row, regex) {
3768
3491
  // only search the visible columns
3769
- return !!this.visibleColumns$.value.find(c => regex.test(c.getSearchTextFor(row)));
3492
+ return !!this.value.find(c => regex.test(c.getSearchTextFor(row)));
3770
3493
  }
3771
- addColumn(column, position) {
3494
+ addColumn(column, index) {
3772
3495
  if (this.hasColumn(column.columnId)) {
3773
3496
  lang.illegalState(`Column with id=${column.columnId} already exists`);
3774
3497
  }
3775
3498
  this.registerDisposable(column);
3776
- this._columnRefs$.push(new ColumnRef(column, this.computePosition(position)));
3777
- this.columnVisibilities$.add(column.visible$);
3778
- return column;
3779
- }
3780
- computePosition(position) {
3781
- const q = this.orderedColumnRefs$.query();
3782
- return ColumnOrderManager.processPosition(position, {
3783
- before(col) {
3784
- const index = q.findIndex(ref => ref.column === col);
3785
- const beforeCol = q.value[index];
3786
- const afterCol = index - 1 >= 0 ? q.value[index - 1] : undefined;
3787
- return generateKeyBetween(afterCol?.position, beforeCol.position);
3788
- },
3789
- after(col) {
3790
- const index = q.findIndex(ref => ref.column === col);
3791
- const afterCol = q.value[index];
3792
- const beforeCol = index + 1 < q.length ? q.value[index + 1] : undefined;
3793
- return generateKeyBetween(afterCol.position, beforeCol?.position);
3794
- },
3795
- first() {
3796
- return generateKeyBetween(null, q.first()?.position);
3797
- },
3798
- last() {
3799
- // add it to the end of the list
3800
- return generateKeyBetween(q.last()?.position, null);
3499
+ this.runInTransaction(() => {
3500
+ if (!isNil(index)) {
3501
+ this._allColumns$.insert(index, column);
3502
+ }
3503
+ else {
3504
+ this._allColumns$.push(column);
3801
3505
  }
3506
+ this.registerDisposable(this.trackSource(column.visible$));
3802
3507
  });
3508
+ return column;
3803
3509
  }
3804
3510
  doComputeValue() {
3805
- return this.allColumns$.value.filter(c => c.visible$.value);
3511
+ return this._allColumns$.value.filter(c => c.visible$.value);
3806
3512
  }
3807
3513
  }
3808
3514
 
@@ -3836,8 +3542,8 @@ function EnableCellTextSearch(options) {
3836
3542
 
3837
3543
  class CustomValueColumnModel extends ColumnModel {
3838
3544
  getValue;
3839
- constructor(columnId, order, defaults, getValue) {
3840
- super(columnId, order, defaults);
3545
+ constructor(columnId, defaults, getValue) {
3546
+ super(columnId, defaults);
3841
3547
  this.getValue = getValue;
3842
3548
  this.cellRenderer(DefaultCellRendererComponent);
3843
3549
  }
@@ -3845,17 +3551,17 @@ class CustomValueColumnModel extends ColumnModel {
3845
3551
  this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.Null()), row => this.getValue(row));
3846
3552
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3847
3553
  if (firstTime) {
3848
- if (isFunction(onComponentInitOrOptions)) {
3554
+ if (isFunction$1(onComponentInitOrOptions)) {
3849
3555
  onComponentInitOrOptions(component);
3850
3556
  }
3851
3557
  else {
3852
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3558
+ if (isFunction$1(onComponentInitOrOptions?.onComponentInit)) {
3853
3559
  onComponentInitOrOptions.onComponentInit(component);
3854
3560
  }
3855
3561
  }
3856
3562
  }
3857
3563
  component.value = this.getValue(rowData.row);
3858
- if (!isFunction(onComponentInitOrOptions) && isFunction(onComponentInitOrOptions?.onRowUpdate)) {
3564
+ if (!isFunction$1(onComponentInitOrOptions) && isFunction$1(onComponentInitOrOptions?.onRowUpdate)) {
3859
3565
  onComponentInitOrOptions.onRowUpdate(component, rowData.row);
3860
3566
  }
3861
3567
  }));
@@ -3867,8 +3573,8 @@ class CustomValueColumnModel extends ColumnModel {
3867
3573
  }
3868
3574
 
3869
3575
  class EditorControlColumnModel extends ColumnModel {
3870
- constructor(columnId, order, saveCommandFactory, defaults) {
3871
- super(columnId, order, defaults);
3576
+ constructor(columnId, saveCommandFactory, defaults) {
3577
+ super(columnId, defaults);
3872
3578
  this.cellRenderer(EditRowControlsComponent);
3873
3579
  }
3874
3580
  cellRenderer(componentType) {
@@ -3893,8 +3599,8 @@ class ListPropertyColumnModel extends ColumnModel {
3893
3599
  intermediate.map(v => v?.toString()).join(", ") :
3894
3600
  intermediate?.toString();
3895
3601
  };
3896
- constructor(id, order, property, defaults) {
3897
- super(id, order, defaults);
3602
+ constructor(id, property, defaults) {
3603
+ super(id, defaults);
3898
3604
  this.property = property;
3899
3605
  this.cellRenderer(DefaultCellRendererComponent);
3900
3606
  }
@@ -3910,7 +3616,7 @@ class ListPropertyColumnModel extends ColumnModel {
3910
3616
  }
3911
3617
  cellEditor(editor, validatorsOrInitialiser, initialiseComponent) {
3912
3618
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3913
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3619
+ const initialiser = isFunction$1(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3914
3620
  this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
3915
3621
  const formListModel = editSession.form.pluckList(this.property);
3916
3622
  if (validators) {
@@ -3939,8 +3645,8 @@ class PropertyColumnModel extends ColumnModel {
3939
3645
  _defaultSearchTextFormatter = (value) => {
3940
3646
  return (this._userFormat ?? Functions.identity)(value)?.toString();
3941
3647
  };
3942
- constructor(id, order, property, defaults) {
3943
- super(id, order, defaults);
3648
+ constructor(id, property, defaults) {
3649
+ super(id, defaults);
3944
3650
  this.property = property;
3945
3651
  this.cellRenderer(DefaultCellRendererComponent);
3946
3652
  }
@@ -3948,11 +3654,11 @@ class PropertyColumnModel extends ColumnModel {
3948
3654
  this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => ColumnTextSearchFormatter.forFormatter(this._defaultSearchTextFormatter)), row => row[this.property]);
3949
3655
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3950
3656
  if (firstTime) {
3951
- if (isFunction(onComponentInitOrOptions)) {
3657
+ if (isFunction$1(onComponentInitOrOptions)) {
3952
3658
  onComponentInitOrOptions(component);
3953
3659
  }
3954
3660
  else {
3955
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3661
+ if (isFunction$1(onComponentInitOrOptions?.onComponentInit)) {
3956
3662
  onComponentInitOrOptions.onComponentInit(component);
3957
3663
  }
3958
3664
  }
@@ -3977,7 +3683,7 @@ class PropertyColumnModel extends ColumnModel {
3977
3683
  component[ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
3978
3684
  let disableEditCallback = false;
3979
3685
  if (firstTime) {
3980
- if (isFunction(options?.onComponentInit)) {
3686
+ if (isFunction$1(options?.onComponentInit)) {
3981
3687
  options.onComponentInit(component);
3982
3688
  }
3983
3689
  // install our edit callback
@@ -3992,7 +3698,7 @@ class PropertyColumnModel extends ColumnModel {
3992
3698
  disableEditCallback = true;
3993
3699
  component.value = rowData.row[this.property];
3994
3700
  disableEditCallback = false;
3995
- if (!isFunction(options) && isFunction(options?.onRowUpdate)) {
3701
+ if (!isFunction$1(options) && isFunction$1(options?.onRowUpdate)) {
3996
3702
  options.onRowUpdate(component, rowData.row);
3997
3703
  }
3998
3704
  }));
@@ -4000,7 +3706,7 @@ class PropertyColumnModel extends ColumnModel {
4000
3706
  }
4001
3707
  cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
4002
3708
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
4003
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
3709
+ const initialiser = isFunction$1(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
4004
3710
  this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
4005
3711
  const formValueModel = editSession.form.pluck(this.property);
4006
3712
  if (validators) {
@@ -4027,8 +3733,8 @@ class SelectionColumnModel extends ColumnModel {
4027
3733
  selectionModel;
4028
3734
  _enableHeaderControls = true;
4029
3735
  _color = "accent";
4030
- constructor(columnId, order, defaults, selectionModel) {
4031
- super(columnId, order, defaults);
3736
+ constructor(columnId, defaults, selectionModel) {
3737
+ super(columnId, defaults);
4032
3738
  this.selectionModel = selectionModel;
4033
3739
  const { chain } = Dsl.disposeWith(this);
4034
3740
  this._selectRowOnClick(false);
@@ -4069,42 +3775,6 @@ class SelectionColumnModel extends ColumnModel {
4069
3775
  }
4070
3776
  }
4071
3777
 
4072
- let RowClass$1 = class RowClass {
4073
- className;
4074
- matches;
4075
- constructor(className, matches) {
4076
- this.className = className;
4077
- this.matches = matches;
4078
- }
4079
- };
4080
- class FooterRowModel {
4081
- _rowClasses = [];
4082
- noPadding() {
4083
- this.addClass("no-padding");
4084
- }
4085
- addClass(className, condition) {
4086
- this._rowClasses.push(new RowClass$1(className, condition ?? (() => true)));
4087
- }
4088
- }
4089
- (function (FooterRowModel) {
4090
- class Impl extends FooterRowModel {
4091
- component;
4092
- onInit;
4093
- portal;
4094
- constructor(component, onInit) {
4095
- super();
4096
- this.component = component;
4097
- this.onInit = onInit;
4098
- this.portal = new ComponentPortal(component);
4099
- }
4100
- getActiveRowClasses() {
4101
- return this._rowClasses.filter(c => c.matches()).map(c => c.className).join(" ");
4102
- }
4103
- }
4104
- FooterRowModel.Impl = Impl;
4105
- })(FooterRowModel || (FooterRowModel = {}));
4106
- ProxyRegistry.registerOneTimeBinding(FooterRowModel);
4107
-
4108
3778
  class TableMoreMenuComponent extends DisposableComponent {
4109
3779
  value$ = new MutableValueModel();
4110
3780
  #value_accessor_storage;
@@ -4114,15 +3784,13 @@ class TableMoreMenuComponent extends DisposableComponent {
4114
3784
  popupType$ = new MutableValueModel();
4115
3785
  popupComponentPortal$;
4116
3786
  _visible$ = this.registerDisposable(new DelegatingValueModel());
4117
- initialiseCallback;
4118
3787
  constructor() {
4119
3788
  super();
4120
3789
  const { chain } = Dsl.disposeWith(this);
4121
3790
  this.popupComponentPortal$ = chain(this.popupType$).map(type => new ComponentPortal(type));
4122
3791
  }
4123
- configurePopupComponentType(popupComponentType, configureCallback) {
3792
+ configurePopupComponentType(popupComponentType) {
4124
3793
  this.popupType$.value = popupComponentType;
4125
- this.initialiseCallback = configureCallback;
4126
3794
  }
4127
3795
  // Stops tree selection when clicking the menu button
4128
3796
  preventDefault($event) {
@@ -4133,15 +3801,12 @@ class TableMoreMenuComponent extends DisposableComponent {
4133
3801
  const component = $event.instance;
4134
3802
  component.initialise(this.value$, Command.create(() => this.matMenuTrigger.closeMenu()));
4135
3803
  this._visible$.setDelegate(component.visible$);
4136
- if (this.initialiseCallback) {
4137
- this.initialiseCallback(component);
4138
- }
4139
3804
  }
4140
3805
  get visible$() {
4141
3806
  return this._visible$.readonly$;
4142
3807
  }
4143
3808
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableMoreMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4144
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableMoreMenuComponent, selector: "aup-table-more-menu", host: { listeners: { "click": "preventDefault($event)" } }, viewQueries: [{ propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-menu #menu=\"matMenu\" xPosition=\"before\">\n <ng-template matMenuContent [cdkPortalOutlet]=\"popupComponentPortal$.value\"\n (attached)=\"initialise($event)\"></ng-template>\n</mat-menu>\n\n<button mat-icon-button [matMenuTriggerFor]=\"menu\" data-cy=\"more-menu-trigger\" *ngIf=\"visible$.value\">\n <aup-icon icon=\"mat:more_vert\"></aup-icon>\n</button>\n", styles: [":host{display:inline;text-align:end}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i4.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }] });
3809
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableMoreMenuComponent, selector: "aup-table-more-menu", host: { listeners: { "click": "preventDefault($event)" } }, viewQueries: [{ propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-menu #menu=\"matMenu\" xPosition=\"before\">\n <ng-template matMenuContent [cdkPortalOutlet]=\"popupComponentPortal$.value\"\n (attached)=\"initialise($event)\"></ng-template>\n</mat-menu>\n\n<button mat-icon-button [matMenuTriggerFor]=\"menu\" data-cy=\"more-menu-trigger\" *ngIf=\"visible$.value\">\n <aup-icon icon=\"mat:more_vert\"></aup-icon>\n</button>\n", styles: [":host{display:inline;text-align:end}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3$2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i4.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }] });
4145
3810
  }
4146
3811
  __decorate([
4147
3812
  StoreInValueModel(),
@@ -4170,25 +3835,16 @@ class RowClass {
4170
3835
  this.matches = matches;
4171
3836
  }
4172
3837
  }
4173
- class RowAttribute {
4174
- attributeName;
4175
- getValue;
4176
- constructor(attributeName, getValue) {
4177
- this.attributeName = attributeName;
4178
- this.getValue = getValue;
4179
- }
4180
- }
4181
3838
  class AbstractTableModel extends GarbageCollector {
4182
3839
  _dataSource$ = this.registerDisposable(new DelegatingListModel());
4183
3840
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
4184
3841
  _visibleRows$ = this.registerDisposable(new DelegatingListModel());
4185
- columnManager = this.registerDisposable(new ColumnManager());
3842
+ _columnList = this.registerDisposable(new ColumnListModel());
4186
3843
  _editorSessions = new MutableListModel();
4187
3844
  _rowsBeingEdited$;
4188
3845
  saveCommandFactory;
4189
3846
  _editorSessionByRowId;
4190
3847
  rowClassNamePredicates = [];
4191
- rowAttributeGenerators = [];
4192
3848
  _columnTextPropertiesLookup;
4193
3849
  editing$;
4194
3850
  firstEditableColumn$;
@@ -4205,8 +3861,6 @@ class AbstractTableModel extends GarbageCollector {
4205
3861
  selectedItems$;
4206
3862
  leadSelection$;
4207
3863
  hasSelection$;
4208
- footerRowModel;
4209
- _viewDependencies = new Set();
4210
3864
  constructor() {
4211
3865
  super();
4212
3866
  const { chain } = Dsl.disposeWith(this);
@@ -4215,15 +3869,15 @@ class AbstractTableModel extends GarbageCollector {
4215
3869
  });
4216
3870
  this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
4217
3871
  this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
4218
- this.textSearchPredicate$ = chain(this.visibleColumns$).reduceAll(columns => {
3872
+ this.textSearchPredicate$ = chain(this.visibleColumns).reduce(columns => {
4219
3873
  return (row, regex) => {
4220
3874
  return (!regex || !!columns.find(c => regex.test(c.getSearchTextFor(row))));
4221
3875
  };
4222
3876
  });
4223
- this.firstEditableColumn$ = chain(this.columns$).select(c => c.hasEditorPortal()).first();
4224
- this.firstVisibleColumn$ = chain(this.visibleColumns$).first();
4225
- this.lastVisibleColumn$ = chain(this.visibleColumns$).last();
4226
- 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);
4227
3881
  this.dataSourceEmpty$ = chain(this.dataSource$).isEmpty();
4228
3882
  this.selectedItems$ = this.selectionModelProxy.selectedItems$;
4229
3883
  this.leadSelection$ = this.selectionModelProxy.leadSelection$;
@@ -4247,23 +3901,9 @@ class AbstractTableModel extends GarbageCollector {
4247
3901
  ],
4248
3902
  parent: injector
4249
3903
  });
4250
- this.columns$.value.forEach(c => c.initialise(customInjector));
3904
+ this.columns.value.forEach(c => c.initialise(customInjector));
4251
3905
  this.identityOf = identityOf;
4252
3906
  }
4253
- /**
4254
- * Adds additional models that will trigger a table repaint. This is required if the table
4255
- * needs to be redrawn outside of changes to the rows of filters. i.e. some eternal state is used
4256
- * to assign row classes etc.
4257
- *
4258
- * Note: This function must be called before the table is bound to the model.
4259
- * @param hasValues
4260
- */
4261
- viewStateDependsOn(...hasValues) {
4262
- hasValues.forEach(it => this._viewDependencies.add(it));
4263
- }
4264
- get viewStateDependencies() {
4265
- return Array.from(this._viewDependencies.values());
4266
- }
4267
3907
  get dataSource$() {
4268
3908
  return this._dataSource$.readonly$;
4269
3909
  }
@@ -4314,19 +3954,19 @@ class AbstractTableModel extends GarbageCollector {
4314
3954
  });
4315
3955
  });
4316
3956
  }
4317
- get columns$() {
4318
- return this.columnManager.allColumns$;
3957
+ get columns() {
3958
+ return this._columnList.allColumns$;
4319
3959
  }
4320
- get visibleColumns$() {
4321
- return this.columnManager.visibleColumns$;
3960
+ get visibleColumns() {
3961
+ return this._columnList.readonly$;
4322
3962
  }
4323
3963
  pluck(property, options) {
4324
3964
  const columnId = options?.columnId || property.toString();
4325
- return this.addColumn(new PropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
3965
+ return this.addColumn(new PropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
4326
3966
  }
4327
3967
  pluckList(property, options) {
4328
3968
  const columnId = options?.columnId || property.toString();
4329
- return this.addColumn(new ListPropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
3969
+ return this.addColumn(new ListPropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
4330
3970
  }
4331
3971
  // TODO: clean this up and assign the selection model on teh table directly.
4332
3972
  // tableModel.useSelectionModel(model) and have the seleciton column automatically
@@ -4335,54 +3975,43 @@ class AbstractTableModel extends GarbageCollector {
4335
3975
  _addSelectionColumn(selectionModel, visible) {
4336
3976
  assert.isNil(this.selectionColumnModel);
4337
3977
  const columnId = "selection-column";
4338
- this.selectionColumnModel = new SelectionColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
3978
+ this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
4339
3979
  this.selectionColumnModel.useSelectionModel(selectionModel);
4340
3980
  this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
4341
- const selectionColumnModel = this.addColumn(this.selectionColumnModel, { before: null }); // first column
4342
- if (!isNil(visible)) {
3981
+ const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
3982
+ if (!isNil$1(visible)) {
4343
3983
  selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
4344
3984
  }
4345
3985
  return selectionColumnModel;
4346
3986
  }
4347
3987
  addEditControls(saveCommandFactory, formFactory) {
4348
3988
  this.saveCommandFactory = saveCommandFactory;
4349
- if (isFunction(formFactory)) {
3989
+ if (isFunction$1(formFactory)) {
4350
3990
  this._createForm = formFactory;
4351
3991
  }
4352
3992
  const columnId = "editControls";
4353
- return this.addColumn(new EditorControlColumnModel(columnId, this.columnManager, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
3993
+ return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
4354
3994
  }
4355
3995
  addCustomColumn(columnId, dataAccessor) {
4356
- return this.addColumn(new CustomValueColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), dataAccessor));
3996
+ return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), dataAccessor));
4357
3997
  }
4358
3998
  addComponentColumn(columnId, component, onComponentInitOrOptions) {
4359
- 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);
4360
4000
  }
4361
- addMoreMenu(componentClass, initialiseCallback) {
4001
+ addMoreMenu(componentClass) {
4362
4002
  return this.addComponentColumn("more-menu", TableMoreMenuComponent, (component) => {
4363
- component.configurePopupComponentType(componentClass, initialiseCallback);
4003
+ component.configurePopupComponentType(componentClass);
4364
4004
  }).columnTextProperties({
4365
4005
  headerText() {
4366
4006
  return "";
4367
4007
  }
4368
4008
  });
4369
4009
  }
4370
- addFooterRow(component, initialiseCallback) {
4371
- assert.isNil(this.footerRowModel);
4372
- this.footerRowModel = new FooterRowModel.Impl(component, initialiseCallback);
4373
- return this.footerRowModel;
4374
- }
4375
4010
  addTemplateColumn(columnId) {
4376
- return this.addColumn(new CustomTemplateColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId)));
4011
+ return this.addColumn(new CustomTemplateColumnModel(columnId, () => this.getColumnTextProperties(columnId)));
4377
4012
  }
4378
- addRowClass(className, predicate, options) {
4013
+ addRowClass(className, predicate) {
4379
4014
  this.rowClassNamePredicates.push(new RowClass(className, predicate));
4380
- if (options) {
4381
- this.viewStateDependsOn(...DependsOnOptions.extract(options));
4382
- }
4383
- }
4384
- addRowAttribute(attributeName, getValue) {
4385
- this.rowAttributeGenerators.push(new RowAttribute(attributeName, getValue));
4386
4015
  }
4387
4016
  getRowClasses(row) {
4388
4017
  const classNames = [];
@@ -4393,13 +4022,8 @@ class AbstractTableModel extends GarbageCollector {
4393
4022
  });
4394
4023
  return classNames;
4395
4024
  }
4396
- getRowAttributes(row) {
4397
- return this.rowAttributeGenerators.reduce((result, generator) => {
4398
- return { ...result, [generator.attributeName]: generator.getValue(row) };
4399
- }, {});
4400
- }
4401
- addColumn(column, position) {
4402
- return this.columnManager.addColumn(column, position);
4025
+ addColumn(column, index) {
4026
+ return this._columnList.addColumn(column, index);
4403
4027
  }
4404
4028
  columnTextProperties(columnTextProperties) {
4405
4029
  this._columnTextPropertiesLookup = columnTextProperties;
@@ -4516,7 +4140,7 @@ class TableCellComponent extends DisposableComponent {
4516
4140
  };
4517
4141
  }
4518
4142
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4519
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableCellComponent, selector: "aup-table-cell", inputs: { row: "row", column: "column", editSession: "editSession", tableModel: "tableModel" }, host: { properties: { "class": "this.defaultClassNames", "class.fillCell": "this.fillCell", "class.padChild": "this.padChild" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!hasActiveEditor()\" [cdkPortalOutlet]=\"getRendererPortal()\" (attached)=\"initialiseRenderer($event)\"></ng-container>\n<ng-container *ngIf=\"hasActiveEditor()\" [cdkPortalOutlet]=\"getEditorPortal()\" (attached)=\"initialiseEditor($event)\"></ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
4143
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableCellComponent, selector: "aup-table-cell", inputs: { row: "row", column: "column", editSession: "editSession", tableModel: "tableModel" }, host: { properties: { "class": "this.defaultClassNames", "class.fillCell": "this.fillCell", "class.padChild": "this.padChild" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!hasActiveEditor()\" [cdkPortalOutlet]=\"getRendererPortal()\" (attached)=\"initialiseRenderer($event)\"></ng-container>\n<ng-container *ngIf=\"hasActiveEditor()\" [cdkPortalOutlet]=\"getEditorPortal()\" (attached)=\"initialiseEditor($event)\"></ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
4520
4144
  }
4521
4145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableCellComponent, decorators: [{
4522
4146
  type: Component,
@@ -4555,7 +4179,7 @@ class TableHeaderCellComponent {
4555
4179
  return this[HEADER_CELL_RENDERER_PORTAL];
4556
4180
  }
4557
4181
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4558
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: { column: "column" }, host: { properties: { "class": "this.defaultClassNames" } }, ngImport: i0, template: "<ng-container [cdkPortalOutlet]=\"getPortal()\" (attached)=\"initialiseHeader($event)\"></ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%}\n"], dependencies: [{ kind: "directive", type: i1$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
4182
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: { column: "column" }, host: { properties: { "class": "this.defaultClassNames" } }, ngImport: i0, template: "<ng-container [cdkPortalOutlet]=\"getPortal()\" (attached)=\"initialiseHeader($event)\"></ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%}\n"], dependencies: [{ kind: "directive", type: i3$2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
4559
4183
  }
4560
4184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableHeaderCellComponent, decorators: [{
4561
4185
  type: Component,
@@ -4567,132 +4191,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
4567
4191
  args: ['class']
4568
4192
  }] } });
4569
4193
 
4570
- // eslint-disable-next-line @angular-eslint/component-class-suffix
4571
- class TableFooterRow {
4572
- row;
4573
- defaultClassNames = 'aup-footer-row-renderer';
4574
- get rowClasses() {
4575
- return this.row.getActiveRowClasses();
4576
- }
4577
- initialise($event) {
4578
- this.row.onInit && this.row.onInit($event.instance);
4579
- }
4580
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableFooterRow, deps: [], target: i0.ɵɵFactoryTarget.Component });
4581
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableFooterRow, selector: "aup-table-footer-row", inputs: { row: "row" }, host: { properties: { "class": "this.rowClasses" } }, ngImport: i0, template: "<ng-container [cdkPortalOutlet]=\"row.portal\" (attached)=\"initialise($event)\"></ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%}\n"], dependencies: [{ kind: "directive", type: i1$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] });
4582
- }
4583
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableFooterRow, decorators: [{
4584
- type: Component,
4585
- args: [{ selector: 'aup-table-footer-row', template: "<ng-container [cdkPortalOutlet]=\"row.portal\" (attached)=\"initialise($event)\"></ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%}\n"] }]
4586
- }], propDecorators: { row: [{
4587
- type: Input
4588
- }], defaultClassNames: [{
4589
- type: HostBinding,
4590
- args: ['class']
4591
- }], rowClasses: [{
4592
- type: HostBinding,
4593
- args: ['class']
4594
- }] } });
4595
-
4596
- const AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER = new InjectionToken("AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER");
4597
- class TableRowAttributesDirective {
4598
- elementRef;
4599
- aupTableRowAttributes;
4600
- constructor(elementRef) {
4601
- this.elementRef = elementRef;
4602
- }
4603
- ngOnInit() {
4604
- for (const attr in this.aupTableRowAttributes) {
4605
- this.elementRef.nativeElement.setAttribute(attr, this.aupTableRowAttributes[attr]);
4606
- }
4607
- }
4608
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
4609
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: TableRowAttributesDirective, selector: "[aupTableRowAttributes]", inputs: { aupTableRowAttributes: "aupTableRowAttributes" }, ngImport: i0 });
4610
- }
4611
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, decorators: [{
4612
- type: Directive,
4613
- args: [{
4614
- selector: "[aupTableRowAttributes]",
4615
- }]
4616
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { aupTableRowAttributes: [{
4617
- type: Input
4618
- }] } });
4619
4194
  class TableBodyComponent extends ResizeAwareComponent {
4620
- bufferMultiplier;
4621
4195
  #data$_accessor_storage = proxify((ListModel));
4622
4196
  get data$() { return this.#data$_accessor_storage; }
4623
4197
  set data$(value) { this.#data$_accessor_storage = value; }
4624
4198
  #tableModel_accessor_storage = proxify((AbstractTableModel));
4625
4199
  get tableModel() { return this.#tableModel_accessor_storage; }
4626
4200
  set tableModel(value) { this.#tableModel_accessor_storage = value; }
4627
- #footerRow_accessor_storage = proxify((FooterRowModel.Impl));
4628
- get footerRow() { return this.#footerRow_accessor_storage; }
4629
- set footerRow(value) { this.#footerRow_accessor_storage = value; }
4630
4201
  #showHeader$_accessor_storage = proxify((ValueModel));
4631
4202
  get showHeader$() { return this.#showHeader$_accessor_storage; }
4632
4203
  set showHeader$(value) { this.#showHeader$_accessor_storage = value; }
4633
4204
  #showHeader_accessor_storage = true;
4634
4205
  get showHeader() { return this.#showHeader_accessor_storage; }
4635
4206
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
4207
+ visibleRowCount = new EventEmitter();
4636
4208
  trackBy;
4637
- #scrollMode$_accessor_storage = proxify((ValueModel));
4638
- get scrollMode$() { return this.#scrollMode$_accessor_storage; }
4639
- set scrollMode$(value) { this.#scrollMode$_accessor_storage = value; }
4640
- #scrollMode_accessor_storage = "none";
4641
- get scrollMode() { return this.#scrollMode_accessor_storage; }
4642
- set scrollMode(value) { this.#scrollMode_accessor_storage = value; }
4643
- 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;
4644
4215
  columns$;
4645
4216
  columnIds$;
4646
4217
  columnsById$;
4218
+ _visibleRowCount$;
4647
4219
  // TODO: support user defined header and row heights via css vars.
4648
- headerHeight$ = new MutableValueModel(48);
4649
- rowHeight$ = new MutableValueModel(44);
4220
+ headerHeight$ = new MutableValueModel(29);
4221
+ rowHeight$ = new MutableValueModel(40);
4650
4222
  baseCssClass = "aup-table-component";
4651
- virtualScrollDataSource = new TableVirtualScrollDataSource();
4652
- virtualScrollActive$ = new MutableValueModel(false);
4653
- scrollTimeout;
4654
- constructor(bufferMultiplier = 1) {
4655
- super();
4656
- this.bufferMultiplier = bufferMultiplier;
4657
- const { chain, when, observe } = Dsl.disposeWith(this);
4223
+ constructor(elementRef, ngZone) {
4224
+ super(elementRef, ngZone);
4225
+ const { chain, when } = Dsl.disposeWith(this);
4658
4226
  const actualHeaderHeight$ = chain(this.showHeader$).map(show => {
4659
4227
  return show ? this.headerHeight$.value : 0;
4660
4228
  }, { dependsOn: this.headerHeight$ });
4661
- // performance is terrible if the data changes while we're scrolling, so we postpone updates until
4662
- // scrolling stops.
4663
- const delayedDatea$ = chain(this.data$).postponeWhile(this.virtualScrollActive$);
4664
- when(delayedDatea$).changes(delatedData => {
4665
- this.virtualScrollDataSource.data = delatedData;
4666
- this.scheduleTableHeightCheck();
4667
- }, { 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" });
4668
4240
  this.onInit(() => {
4669
- this.columns$ = chain(this.tableModel.visibleColumns$);
4241
+ this.columns$ = chain(this.tableModel.columns);
4670
4242
  this.columnIds$ = chain(this.columns$).pluck("columnId");
4671
4243
  this.columnsById$ = chain(this.columns$).indexBy('columnId');
4672
4244
  });
4673
- // const txo = new TransactionObserver({verbose: false}).onEvent(e => console.log(e.name, e.payload));
4674
- // txo.observe('this.virtualScrollRowRange$', this.virtualScrollRowRange$);
4675
- // txo.observe('this.virtualScrollSpacerSize$', this.virtualScrollSpacerSize$);
4676
- // txo.observe('this.virtualRows$', this.virtualRows$);
4677
- // txo.observe('this.tableBodyHeight$', this.tableBodyHeight$);
4678
- // txo.observe('this.virtualScrollActive$', this.virtualScrollActive$);
4679
- }
4680
- ngAfterViewInit() {
4681
- super.ngAfterViewInit();
4682
- if (this.scrollViewport) {
4683
- const { observe } = Dsl.disposeWith(this);
4684
- this.scrollViewport.elementScrolled().subscribe(() => this.notifyScrolled());
4685
- }
4686
4245
  }
4687
4246
  get hideHeader() {
4688
4247
  return !this.showHeader;
4689
4248
  }
4690
- get headerHeightCssVar() {
4691
- return `${this.headerHeight$.value}px`;
4692
- }
4693
- get rowHeightCssVar() {
4694
- return `${this.rowHeight$.value}px`;
4695
- }
4696
4249
  isEditing(row) {
4697
4250
  return !!this.tableModel.getEditSessionFor(row);
4698
4251
  }
@@ -4717,110 +4270,51 @@ class TableBodyComponent extends ResizeAwareComponent {
4717
4270
  }
4718
4271
  return classes;
4719
4272
  }
4720
- scheduleTableHeightCheck(waitMillis = 50) {
4721
- setTimeout(() => {
4722
- const tbody = this.elementRef.nativeElement.querySelector("tbody");
4723
- const bodyHeight = tbody.offsetHeight;
4724
- if (this.data$.length > 0 && bodyHeight < this.rowHeight$.value) {
4725
- // Hacks to get our virtual scroll to repaint
4726
- // Logger.get(this).log(`rowCount=${this.data$.length}, bodyHeight=${bodyHeight} -> virtual table not rendering, triggering resize to force repaint`)
4727
- window.dispatchEvent(new Event('resize'));
4728
- if (waitMillis < 500) {
4729
- this.scheduleTableHeightCheck(waitMillis + 50);
4730
- }
4731
- }
4732
- }, waitMillis);
4733
- }
4734
- notifyScrolled() {
4735
- this.virtualScrollActive$.value = true;
4736
- this.clearScrollTimeout();
4737
- this.scrollTimeout = setTimeout(() => {
4738
- return this.virtualScrollActive$.value = false;
4739
- }, 200);
4740
- }
4741
- clearScrollTimeout() {
4742
- if (this.scrollTimeout) {
4743
- clearTimeout(this.scrollTimeout);
4744
- }
4745
- }
4746
- initialiseFooter($event) {
4747
- const portalRef = $event;
4748
- this.footerRow.onInit(portalRef.instance);
4749
- }
4750
- Proxify = Proxify;
4751
- 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 });
4752
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableBodyComponent, selector: "aup-table-body", inputs: { data$: "data$", tableModel: "tableModel", footerRow: "footerRow", 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]=\"$any(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 <ng-container matColumnDef=\"sticky-footer\" *ngIf=\"Proxify.hasTarget(footerRow)\">\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"columns$.length\" [ngClass]=\"'footer-cell'\">\n <aup-table-footer-row [row]=\"$any(footerRow)\"></aup-table-footer-row>\n </td>\n <tr mat-footer-row *matFooterRowDef=\"['sticky-footer']; sticky: true\"></tr>\n </ng-container>\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<!-- Layout doesn't work yet - probably needs fixed footer row height -->\n<!-- <ng-container matColumnDef=\"sticky-footer\" *ngIf=\"tableModel.footerRowPortalRef\">-->\n<!-- <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"columns$.length\">-->\n<!-- <ng-container [cdkPortalOutlet]=\"tableModel.footerRowPortalRef.portal\" (attached)=\"initialiseFooter($event)\"></ng-container>-->\n<!-- </td>-->\n<!-- <tr mat-footer-row *matFooterRowDef=\"['sticky-footer']; sticky: true\"></tr>-->\n<!-- </ng-container>-->\n\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.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2$6.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { 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: "directive", type: i2$6.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-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: i2$6.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i1$2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i4$4.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"] }, { kind: "component", type: TableFooterRow, selector: "aup-table-footer-row", inputs: ["row"] }] });
4273
+ 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 });
4274
+ 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"] }] });
4753
4275
  }
4754
4276
  __decorate([
4755
4277
  Proxify(),
4756
- __metadata("design:type", ListModel)
4278
+ __metadata("design:type", Object)
4757
4279
  ], TableBodyComponent.prototype, "data$", null);
4758
4280
  __decorate([
4759
4281
  Proxify(),
4760
- __metadata("design:type", AbstractTableModel)
4282
+ __metadata("design:type", Object)
4761
4283
  ], TableBodyComponent.prototype, "tableModel", null);
4762
4284
  __decorate([
4763
4285
  Proxify(),
4764
- __metadata("design:type", FooterRowModel.Impl)
4765
- ], TableBodyComponent.prototype, "footerRow", null);
4766
- __decorate([
4767
- Proxify(),
4768
- __metadata("design:type", ValueModel)
4286
+ __metadata("design:type", Object)
4769
4287
  ], TableBodyComponent.prototype, "showHeader$", null);
4770
4288
  __decorate([
4771
4289
  StoreInValueModel(),
4772
4290
  __metadata("design:type", Object)
4773
4291
  ], TableBodyComponent.prototype, "showHeader", null);
4774
- __decorate([
4775
- Proxify(),
4776
- __metadata("design:type", ValueModel)
4777
- ], TableBodyComponent.prototype, "scrollMode$", null);
4778
- __decorate([
4779
- StoreInValueModel(),
4780
- __metadata("design:type", String)
4781
- ], TableBodyComponent.prototype, "scrollMode", null);
4782
4292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, decorators: [{
4783
4293
  type: Component,
4784
- 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]=\"$any(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 <ng-container matColumnDef=\"sticky-footer\" *ngIf=\"Proxify.hasTarget(footerRow)\">\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"columns$.length\" [ngClass]=\"'footer-cell'\">\n <aup-table-footer-row [row]=\"$any(footerRow)\"></aup-table-footer-row>\n </td>\n <tr mat-footer-row *matFooterRowDef=\"['sticky-footer']; sticky: true\"></tr>\n </ng-container>\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<!-- Layout doesn't work yet - probably needs fixed footer row height -->\n<!-- <ng-container matColumnDef=\"sticky-footer\" *ngIf=\"tableModel.footerRowPortalRef\">-->\n<!-- <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"columns$.length\">-->\n<!-- <ng-container [cdkPortalOutlet]=\"tableModel.footerRowPortalRef.portal\" (attached)=\"initialiseFooter($event)\"></ng-container>-->\n<!-- </td>-->\n<!-- <tr mat-footer-row *matFooterRowDef=\"['sticky-footer']; sticky: true\"></tr>-->\n<!-- </ng-container>-->\n\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"] }]
4785
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
4786
- type: Inject,
4787
- args: [AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER]
4788
- }, {
4789
- type: Optional
4790
- }] }]; }, propDecorators: { data$: [{
4294
+ 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"] }]
4295
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { data$: [{
4791
4296
  type: Input
4792
4297
  }], tableModel: [{
4793
4298
  type: Input
4794
- }], footerRow: [{
4795
- type: Input
4796
4299
  }], showHeader$: [{
4797
4300
  type: Input
4798
4301
  }], showHeader: [{
4799
4302
  type: Input
4303
+ }], visibleRowCount: [{
4304
+ type: Output
4800
4305
  }], trackBy: [{
4801
4306
  type: Input
4802
- }], scrollMode$: [{
4803
- type: Input
4804
- }], scrollMode: [{
4307
+ }], enableScrolling: [{
4805
4308
  type: Input
4806
4309
  }, {
4807
4310
  type: HostBinding,
4808
- args: ["attr.scrollMode"]
4809
- }], scrollViewport: [{
4810
- type: ViewChild,
4811
- args: [CdkVirtualScrollViewport]
4311
+ args: ["class.enable-scrolling"]
4812
4312
  }], baseCssClass: [{
4813
4313
  type: HostBinding,
4814
4314
  args: ["class"]
4815
4315
  }], hideHeader: [{
4816
4316
  type: HostBinding,
4817
4317
  args: ["class.hide-header"]
4818
- }], headerHeightCssVar: [{
4819
- type: HostBinding,
4820
- args: ["style.--aup-table-header-height"]
4821
- }], rowHeightCssVar: [{
4822
- type: HostBinding,
4823
- args: ["style.--aup-table-row-height"]
4824
4318
  }] } });
4825
4319
 
4826
4320
  class TableMoreMenuPopupComponent extends DisposableComponent {
@@ -4941,10 +4435,8 @@ class TableFilterModel extends GarbageCollector {
4941
4435
  this.useSearchText(options.searchText$);
4942
4436
  this.useRowPredicate(options.predicate$);
4943
4437
  const { chain } = Dsl.disposeWith(this);
4944
- const textSearchRegex$ = chain(this._searchText$)
4945
- .debounce(250)
4946
- .map(text => {
4947
- return isEmpty(text) ? undefined : new RegExp(escapeStringRegexp(text), "i");
4438
+ const textSearchRegex$ = chain(this._searchText$).map(text => {
4439
+ return isEmpty$1(text) ? undefined : new RegExp(escapeStringRegexp(text), "i");
4948
4440
  }, { allowNil: true });
4949
4441
  this._rowPredicate = chain(this._rowPredicate$)
4950
4442
  .map(predicate => {
@@ -5152,30 +4644,31 @@ class TableComponent extends AbstractTableComponent {
5152
4644
  #filterModel_accessor_storage = proxify((TableFilterModel));
5153
4645
  get filterModel() { return this.#filterModel_accessor_storage; }
5154
4646
  set filterModel(value) { this.#filterModel_accessor_storage = value; }
5155
- tableBody;
5156
- #scrollMode$_accessor_storage = proxify((ValueModel));
5157
- /**
5158
- * Set to true to scroll mode to classic or virtual (default). Virtual scrolll performs better for large data sets but clamps the row height. Classic scroll
5159
- * renders all rows but allows row heights to grow.
5160
- */
5161
- get scrollMode$() { return this.#scrollMode$_accessor_storage; }
5162
- set scrollMode$(value) { this.#scrollMode$_accessor_storage = value; }
5163
- #scrollMode_accessor_storage;
5164
- get scrollMode() { return this.#scrollMode_accessor_storage; }
5165
- set scrollMode(value) { this.#scrollMode_accessor_storage = value; }
4647
+ #enablePaging$_accessor_storage = proxify((ValueModel));
4648
+ get enablePaging$() { return this.#enablePaging$_accessor_storage; }
4649
+ set enablePaging$(value) { this.#enablePaging$_accessor_storage = value; }
4650
+ #enablePaging_accessor_storage = false;
4651
+ get enablePaging() { return this.#enablePaging_accessor_storage; }
4652
+ set enablePaging(value) { this.#enablePaging_accessor_storage = value; }
4653
+ // enablePaging() {
4654
+ // if (isNil(this.pageController)) {
4655
+ // const pagedListModel = this.registerDisposable(PagedListModel.create(this._visibleRows$.getDelegate(), this._pageSize));
4656
+ // this._visibleRows$.setDelegate(pagedListModel);
4657
+ // this._pageController = pagedListModel.pageController;
4658
+ // }
4659
+ // }
5166
4660
  _footerContentAdded = false;
5167
4661
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
5168
- tableBodyScrollMode$;
4662
+ _pageSize = new MutableValueModel();
4663
+ pagedListModel;
5169
4664
  constructor(injector) {
5170
4665
  super(injector);
5171
- const { chain, when } = Dsl.disposeWith(this);
5172
- this.tableBodyScrollMode$ = chain(this.enableScrolling$).map(enable => {
5173
- return enable ? (this.scrollMode$.value ?? "virtual") : 'none';
5174
- }, { dependsOn: this.scrollMode$ });
4666
+ const { when } = Dsl.disposeWith(this);
4667
+ this.onDispose(() => this.disposeOfPagedListModel());
4668
+ when(this.enablePaging$).changes(enabled => this.configurePaging(enabled));
5175
4669
  }
5176
4670
  ngOnInit() {
5177
4671
  super.ngOnInit();
5178
- const { when } = Dsl.disposeWith(this);
5179
4672
  if (CanProxy.hasTarget(this.filterModel)) {
5180
4673
  this.registerDisposable(this.filterModel.bindToTable(this._dataSource$, this.getModel().textSearchPredicate$));
5181
4674
  this.highlightText$.setDelegate(this.filterModel.highlightText$);
@@ -5184,27 +4677,50 @@ class TableComponent extends AbstractTableComponent {
5184
4677
  else {
5185
4678
  this._filteredRows$.setDelegate(this._dataSource$);
5186
4679
  }
5187
- this._visibleRows$.setDelegate(this._filteredRows$);
5188
- // let users of the model know what the current visible and filtered rows are for selection models and what not
4680
+ this.configurePaging(this.enablePaging$.value);
5189
4681
  this.tableModel.bindToTable(this._filteredRows$, this._visibleRows$);
5190
- when.anyOf(...this.tableModel.viewStateDependencies).changes(() => this.cdr.markForCheck());
5191
- this.viewStateDependsOn(this._filteredRows$, this.tableModel.visibleColumns$);
5192
4682
  }
5193
4683
  getModel() {
5194
4684
  return this.tableModel;
5195
4685
  }
4686
+ get pageController() {
4687
+ // TODO: need to support external page controllers if the paging occurs to our primary data source.
4688
+ return this.pagedListModel.pageController;
4689
+ }
4690
+ configurePaging(enable) {
4691
+ if (enable) {
4692
+ if (!this.pagedListModel) {
4693
+ this.pagedListModel = PagedListModel.create(this._filteredRows$, this._pageSize);
4694
+ }
4695
+ this._visibleRows$.setDelegate(this.pagedListModel);
4696
+ }
4697
+ else {
4698
+ this.disposeOfPagedListModel();
4699
+ this._visibleRows$.setDelegate(this._filteredRows$);
4700
+ }
4701
+ }
4702
+ disposeOfPagedListModel() {
4703
+ if (this.pagedListModel) {
4704
+ this.pagedListModel.dispose();
4705
+ this.pagedListModel = null;
4706
+ }
4707
+ }
5196
4708
  footerContentChanged($event) {
5197
4709
  // console.log($event);
5198
4710
  this._footerContentAdded = true;
5199
4711
  }
4712
+ //@Trace()
4713
+ updatePageSize(count) {
4714
+ this._pageSize.value = count;
4715
+ }
5200
4716
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5201
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableComponent, selector: "aup-table", inputs: { tableModel: "tableModel", filterModel: "filterModel", scrollMode$: "scrollMode$", scrollMode: "scrollMode" }, providers: [
4717
+ 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: [
5202
4718
  { provide: AbstractTableComponent, useExisting: TableComponent }
5203
- ], viewQueries: [{ propertyName: "tableBody", first: true, predicate: TableBodyComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"$any(tableModel)\"\n [footerRow]=\"tableModel.footerRowModel\"\n [showHeader$]=\"$any(showHeader$)\"\n [scrollMode$]=\"tableBodyScrollMode$\"\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", "footerRow", "showHeader$", "showHeader", "trackBy", "scrollMode$", "scrollMode"] }] });
4719
+ ], 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"] }] });
5204
4720
  }
5205
4721
  __decorate([
5206
4722
  Proxify(),
5207
- __metadata("design:type", TableModel)
4723
+ __metadata("design:type", Object)
5208
4724
  ], TableComponent.prototype, "tableModel", null);
5209
4725
  __decorate([
5210
4726
  Proxify(),
@@ -5212,27 +4728,24 @@ __decorate([
5212
4728
  ], TableComponent.prototype, "filterModel", null);
5213
4729
  __decorate([
5214
4730
  Proxify(),
5215
- __metadata("design:type", ValueModel)
5216
- ], TableComponent.prototype, "scrollMode$", null);
4731
+ __metadata("design:type", Object)
4732
+ ], TableComponent.prototype, "enablePaging$", null);
5217
4733
  __decorate([
5218
4734
  StoreInValueModel(),
5219
4735
  __metadata("design:type", Object)
5220
- ], TableComponent.prototype, "scrollMode", null);
4736
+ ], TableComponent.prototype, "enablePaging", null);
5221
4737
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableComponent, decorators: [{
5222
4738
  type: Component,
5223
4739
  args: [{ selector: 'aup-table', providers: [
5224
4740
  { provide: AbstractTableComponent, useExisting: TableComponent }
5225
- ], template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"$any(tableModel)\"\n [footerRow]=\"tableModel.footerRowModel\"\n [showHeader$]=\"$any(showHeader$)\"\n [scrollMode$]=\"tableBodyScrollMode$\"\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"] }]
4741
+ ], 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"] }]
5226
4742
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { tableModel: [{
5227
4743
  type: Input
5228
4744
  }], filterModel: [{
5229
4745
  type: Input
5230
- }], tableBody: [{
5231
- type: ViewChild,
5232
- args: [TableBodyComponent]
5233
- }], scrollMode$: [{
4746
+ }], enablePaging$: [{
5234
4747
  type: Input
5235
- }], scrollMode: [{
4748
+ }], enablePaging: [{
5236
4749
  type: Input
5237
4750
  }] } });
5238
4751
 
@@ -5414,7 +4927,7 @@ var DecoratedTreeNode;
5414
4927
  }
5415
4928
  }
5416
4929
  __decorate([
5417
- MemoizeGet(),
4930
+ Memoize(),
5418
4931
  __metadata("design:type", Array),
5419
4932
  __metadata("design:paramtypes", [])
5420
4933
  ], Decorator.prototype, "children", null);
@@ -5467,7 +4980,7 @@ var DecoratedTreeNode;
5467
4980
  __metadata("design:returntype", Array)
5468
4981
  ], Decorator.prototype, "ancestors", null);
5469
4982
  __decorate([
5470
- MemoizeGet(),
4983
+ Memoize(),
5471
4984
  __metadata("design:type", Number),
5472
4985
  __metadata("design:paramtypes", [])
5473
4986
  ], Decorator.prototype, "depth", null);
@@ -5478,8 +4991,8 @@ class TreeLabelColumnModel extends ColumnModel {
5478
4991
  expansionModel;
5479
4992
  labelFactory = () => undefined;
5480
4993
  iconFactory;
5481
- constructor(columnId, order, textPropertiesProvider, expansionModel) {
5482
- super(columnId, order, textPropertiesProvider);
4994
+ constructor(columnId, textPropertiesProvider, expansionModel) {
4995
+ super(columnId, textPropertiesProvider);
5483
4996
  this.expansionModel = expansionModel;
5484
4997
  this.cellRenderer(TreeLabelCellRendererComponent);
5485
4998
  }
@@ -5538,7 +5051,7 @@ class TreeTableModel extends AbstractTableModel {
5538
5051
  get isExpandedPredicate$() {
5539
5052
  return this._isExpandedPredicate$.readonly$;
5540
5053
  }
5541
- bindToTable(expansionModel, filteredRows$, visibleRows$, cdr) {
5054
+ bindToTable(expansionModel, filteredRows$, visibleRows$) {
5542
5055
  this.treeExpansionModel = expansionModel;
5543
5056
  // TODO: Move all the expansion model stuff out of here and have things use the expansion model directly
5544
5057
  this._isExpandedPredicate$.setDelegate(this.treeExpansionModel.isExpandedPredicate$);
@@ -5547,7 +5060,7 @@ class TreeTableModel extends AbstractTableModel {
5547
5060
  }
5548
5061
  treeControlColumn(builder) {
5549
5062
  const columnId = 'tree-label';
5550
- const column = new TreeLabelColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), this);
5063
+ const column = new TreeLabelColumnModel(columnId, () => this.getColumnTextProperties(columnId), this);
5551
5064
  builder(column);
5552
5065
  this.addColumn(column);
5553
5066
  }
@@ -5873,15 +5386,11 @@ class TreeTableComponent extends AbstractTableComponent {
5873
5386
  #expansionModel_accessor_storage = proxify((TreeExpansionModel));
5874
5387
  get expansionModel() { return this.#expansionModel_accessor_storage; }
5875
5388
  set expansionModel(value) { this.#expansionModel_accessor_storage = value; }
5876
- scrollMode$;
5877
5389
  constructor(injector) {
5878
5390
  super(injector);
5879
- const { chain } = Dsl.disposeWith(this);
5880
- this.scrollMode$ = chain(this.enableScrolling$).map(enabled => enabled ? "classic" : "none");
5881
5391
  }
5882
5392
  ngOnInit() {
5883
5393
  super.ngOnInit();
5884
- const { when } = Dsl.disposeWith(this);
5885
5394
  // TODO: clean up all this tightly coupled shit, should the expansion model really be separate from the tree model?
5886
5395
  if (!this.expansionModel) {
5887
5396
  this.expansionModel = new TreeExpansionModel({ disposedWith: this });
@@ -5890,10 +5399,7 @@ class TreeTableComponent extends AbstractTableComponent {
5890
5399
  const visibleRows$ = new FlattenedTreeListModel(this._dataSource$, row => this.treeTableModel.childExtractor(row), this.expansionModel);
5891
5400
  this._visibleRows$.setDelegate(visibleRows$);
5892
5401
  this.expansionModel.bindToTable(this._dataSource$, visibleRows$);
5893
- this.treeTableModel.bindToTable(this.expansionModel, visibleRows$, this._visibleRows$, this.cdr);
5894
- this.viewStateDependsOn(this.treeTableModel.visibleRows$);
5895
- this.viewStateDependsOn(this.treeTableModel.visibleRows$);
5896
- when.anyOf(...this.treeTableModel.viewStateDependencies).changes(() => this.cdr.markForCheck());
5402
+ this.treeTableModel.bindToTable(this.expansionModel, visibleRows$, this._visibleRows$);
5897
5403
  }
5898
5404
  getModel() {
5899
5405
  return this.treeTableModel;
@@ -5901,7 +5407,7 @@ class TreeTableComponent extends AbstractTableComponent {
5901
5407
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TreeTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5902
5408
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TreeTableComponent, selector: "aup-tree-table", inputs: { treeTableModel: "treeTableModel", expansionModel: "expansionModel" }, providers: [
5903
5409
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
5904
- ], 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", "footerRow", "showHeader$", "showHeader", "trackBy", "scrollMode$", "scrollMode"] }] });
5410
+ ], 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"] }] });
5905
5411
  }
5906
5412
  __decorate([
5907
5413
  Proxify(),
@@ -5915,7 +5421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
5915
5421
  type: Component,
5916
5422
  args: [{ selector: 'aup-tree-table', providers: [
5917
5423
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
5918
- ], 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"] }]
5424
+ ], 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"] }]
5919
5425
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { treeTableModel: [{
5920
5426
  type: Input
5921
5427
  }], expansionModel: [{
@@ -6097,7 +5603,6 @@ class ComponentsModule {
6097
5603
  FocusableComponent,
6098
5604
  CardContainerComponent,
6099
5605
  TableComponent,
6100
- TableRowAttributesDirective,
6101
5606
  EditRowControlsComponent,
6102
5607
  ColumnTemplateDirective,
6103
5608
  DefaultCellRendererComponent,
@@ -6131,9 +5636,7 @@ class ComponentsModule {
6131
5636
  MarkdownComponent,
6132
5637
  TableBodyComponent,
6133
5638
  TableMoreMenuComponent,
6134
- TableMoreMenuPopupComponent,
6135
- SearchInputComponent,
6136
- TableFooterRow], imports: [CommonModule,
5639
+ TableMoreMenuPopupComponent], imports: [CommonModule,
6137
5640
  BrowserAnimationsModule,
6138
5641
  FormsModule,
6139
5642
  MatInputModule,
@@ -6152,10 +5655,7 @@ class ComponentsModule {
6152
5655
  MatMenuModule,
6153
5656
  MatDividerModule,
6154
5657
  MatProgressSpinnerModule,
6155
- MatProgressBarModule,
6156
- ScrollingModule,
6157
- TableVirtualScrollModule], exports: [TableFooterRow,
6158
- NumberInputComponent,
5658
+ MatProgressBarModule], exports: [NumberInputComponent,
6159
5659
  StringInputComponent,
6160
5660
  TextInputComponent,
6161
5661
  PasswordInputComponent,
@@ -6193,8 +5693,7 @@ class ComponentsModule {
6193
5693
  LoadingContainerComponent,
6194
5694
  MarkdownComponent,
6195
5695
  TableMoreMenuComponent,
6196
- TableMoreMenuPopupComponent,
6197
- SearchInputComponent] });
5696
+ TableMoreMenuPopupComponent] });
6198
5697
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ComponentsModule, providers: [
6199
5698
  FocusBindingFactory,
6200
5699
  MarkdownService
@@ -6217,9 +5716,7 @@ class ComponentsModule {
6217
5716
  MatMenuModule,
6218
5717
  MatDividerModule,
6219
5718
  MatProgressSpinnerModule,
6220
- MatProgressBarModule,
6221
- ScrollingModule,
6222
- TableVirtualScrollModule] });
5719
+ MatProgressBarModule] });
6223
5720
  }
6224
5721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ComponentsModule, decorators: [{
6225
5722
  type: NgModule,
@@ -6244,9 +5741,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6244
5741
  MatMenuModule,
6245
5742
  MatDividerModule,
6246
5743
  MatProgressSpinnerModule,
6247
- MatProgressBarModule,
6248
- ScrollingModule,
6249
- TableVirtualScrollModule
5744
+ MatProgressBarModule
6250
5745
  ],
6251
5746
  declarations: [
6252
5747
  AbstractInputComponent,
@@ -6270,7 +5765,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6270
5765
  FocusableComponent,
6271
5766
  CardContainerComponent,
6272
5767
  TableComponent,
6273
- TableRowAttributesDirective,
6274
5768
  EditRowControlsComponent,
6275
5769
  ColumnTemplateDirective,
6276
5770
  DefaultCellRendererComponent,
@@ -6305,11 +5799,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6305
5799
  TableBodyComponent,
6306
5800
  TableMoreMenuComponent,
6307
5801
  TableMoreMenuPopupComponent,
6308
- SearchInputComponent,
6309
- TableFooterRow
6310
5802
  ],
6311
5803
  exports: [
6312
- TableFooterRow,
6313
5804
  NumberInputComponent,
6314
5805
  StringInputComponent,
6315
5806
  TextInputComponent,
@@ -6349,7 +5840,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6349
5840
  MarkdownComponent,
6350
5841
  TableMoreMenuComponent,
6351
5842
  TableMoreMenuPopupComponent,
6352
- SearchInputComponent
6353
5843
  ],
6354
5844
  providers: [
6355
5845
  FocusBindingFactory,
@@ -6358,77 +5848,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6358
5848
  }]
6359
5849
  }] });
6360
5850
 
6361
- class LoadableComponent extends DisposableComponent {
6362
- #_loaded$ = new MutableValueModel();
6363
- #asyncLoadables = [];
6364
- #awaitedLoadables = [];
6365
- get loaded$() {
6366
- return this.#_loaded$.readonly$;
6367
- }
6368
- ngOnInit() {
6369
- super.ngOnInit();
6370
- this.#asyncLoadables.forEach(it => it.ensureLoaded());
6371
- if (this.#awaitedLoadables.length > 0) {
6372
- Promise.all(this.#awaitedLoadables.map(it => {
6373
- return it.ensureLoaded(); //.then(() => console.log(`${it.constructor.name} loaded`));
6374
- })).then(() => {
6375
- this.#_loaded$.value = true;
6376
- });
6377
- }
6378
- else {
6379
- this.#_loaded$.value = true;
6380
- }
6381
- }
6382
- injectLoadable(token, options) {
6383
- return this.registerLoadable(inject(token), options);
6384
- }
6385
- registerLoadable(loadable, options) {
6386
- if (this.loaded$.value) {
6387
- loadable.ensureLoaded();
6388
- }
6389
- else {
6390
- if (!options || options.wait === true) {
6391
- this.#awaitedLoadables.push(loadable);
6392
- }
6393
- else {
6394
- this.#asyncLoadables.push(loadable);
6395
- }
6396
- }
6397
- return loadable;
6398
- }
6399
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: LoadableComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
6400
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: LoadableComponent, usesInheritance: true, ngImport: i0 });
6401
- }
6402
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: LoadableComponent, decorators: [{
6403
- type: Directive
6404
- }] });
6405
-
6406
- class TextSearchContext {
6407
- row;
6408
- searchText;
6409
- searchRegex;
6410
- constructor(row, searchText, searchRegex) {
6411
- this.row = row;
6412
- this.searchText = searchText;
6413
- this.searchRegex = searchRegex;
6414
- }
6415
- getOrCreate(type, create) {
6416
- }
6417
- matchesText(text) {
6418
- return this.searchRegex.test(text);
6419
- }
6420
- }
6421
-
6422
- class AbstractCellRenderer extends LoadableComponent {
6423
- highlightContext = this.inject(HighlightTextModelDirective);
6424
- constructor() {
6425
- super();
6426
- if (this.highlightContext) { // the component might be rendered outside a table
6427
- this.viewStateDependsOn(this.highlightContext.aupHighlightTextModel);
6428
- }
6429
- }
6430
- }
6431
-
6432
5851
  /**
6433
5852
  * @file Automatically generated by barrelsby.
6434
5853
  */
@@ -6455,6 +5874,7 @@ class AbstractCellRenderer extends LoadableComponent {
6455
5874
  * </aup-activity-actions>
6456
5875
  */
6457
5876
  class ActivityActionsComponent extends DisposableComponent {
5877
+ cdr;
6458
5878
  confirmCommandComponent;
6459
5879
  cancelCommandComponent;
6460
5880
  #confirmCommand_accessor_storage = proxify((Command));
@@ -6483,9 +5903,9 @@ class ActivityActionsComponent extends DisposableComponent {
6483
5903
  }
6484
5904
  layout = ActivityActionsComponent.Layout.BLOCK;
6485
5905
  align = ActivityActionsComponent.Align.STRETCH;
6486
- alignContent = ActivityActionsComponent.AlignContent.CENTER;
6487
- constructor() {
5906
+ constructor(cdr) {
6488
5907
  super();
5908
+ this.cdr = cdr;
6489
5909
  }
6490
5910
  hasConfirmFace() {
6491
5911
  return !!this.confirmFace;
@@ -6504,8 +5924,8 @@ class ActivityActionsComponent extends DisposableComponent {
6504
5924
  focusCancel() {
6505
5925
  this.cancelCommandComponent.requestFocus();
6506
5926
  }
6507
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6508
- 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", alignContent: "alignContent" }, host: { properties: { "attr.layout": "this.layout", "attr.align": "this.align", "attr.align-content": "this.alignContent" } }, 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);grid-gap:var(--resolved-activity-actions-gap)}: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)}:host .cancel{grid-area:cancel}:host .confirm{grid-area:confirm}:host .content{display:flex;flex-direction:row;align-items:center}:host[align-content=start] .content{justify-items:start}:host[align-content=end]{justify-items:end}:host[align-content=center]{justify-items:center}\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"] }] });
5927
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
5928
+ 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"] }] });
6509
5929
  }
6510
5930
  __decorate([
6511
5931
  Proxify(),
@@ -6517,8 +5937,8 @@ __decorate([
6517
5937
  ], ActivityActionsComponent.prototype, "cancelCommand", null);
6518
5938
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, decorators: [{
6519
5939
  type: Component,
6520
- 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);grid-gap:var(--resolved-activity-actions-gap)}: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)}:host .cancel{grid-area:cancel}:host .confirm{grid-area:confirm}:host .content{display:flex;flex-direction:row;align-items:center}:host[align-content=start] .content{justify-items:start}:host[align-content=end]{justify-items:end}:host[align-content=center]{justify-items:center}\n"] }]
6521
- }], ctorParameters: function () { return []; }, propDecorators: { confirmCommandComponent: [{
5940
+ 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"] }]
5941
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { confirmCommandComponent: [{
6522
5942
  type: ViewChild,
6523
5943
  args: ["confirmCommandComponent"]
6524
5944
  }], cancelCommandComponent: [{
@@ -6546,11 +5966,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6546
5966
  }, {
6547
5967
  type: HostBinding,
6548
5968
  args: ['attr.align']
6549
- }], alignContent: [{
6550
- type: Input
6551
- }, {
6552
- type: HostBinding,
6553
- args: ['attr.align-content']
6554
5969
  }] } });
6555
5970
  (function (ActivityActionsComponent) {
6556
5971
  ActivityActionsComponent.Layout = Enum({
@@ -6559,19 +5974,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6559
5974
  });
6560
5975
  ActivityActionsComponent.Align = Enum({
6561
5976
  START: 'start',
6562
- STRETCH: 'stretch',
6563
- END: 'end'
6564
- });
6565
- ActivityActionsComponent.AlignContent = Enum({
6566
- START: 'start',
6567
- CENTER: 'center',
6568
- END: 'end'
5977
+ END: 'end',
5978
+ STRETCH: 'stretch'
6569
5979
  });
6570
5980
  })(ActivityActionsComponent || (ActivityActionsComponent = {}));
6571
5981
 
6572
5982
  const ACTIVITY_DATA = new InjectionToken("InteractionActivityData");
6573
5983
  // eslint-disable-next-line @angular-eslint/component-class-suffix
6574
- class Activity extends LoadableComponent {
5984
+ class Activity extends DisposableComponent {
6575
5985
  activityData = inject(ACTIVITY_DATA);
6576
5986
  activityReadyListeners = new EventListenerList();
6577
5987
  _busy$ = this.registerDisposable(new DelegatingValueModel().withDefault(false));
@@ -6626,6 +6036,7 @@ class Activity extends LoadableComponent {
6626
6036
  notifyActivityReady() {
6627
6037
  this.activityReadyListeners.fire(l => l(this));
6628
6038
  this._ready$.value = true;
6039
+ console.log("ready");
6629
6040
  }
6630
6041
  onActivityReady(callback) {
6631
6042
  return this.activityReadyListeners.add(callback);
@@ -6745,7 +6156,7 @@ class AbstractDialogComponent extends Activity {
6745
6156
  }
6746
6157
  }
6747
6158
  isDestructive() {
6748
- return isFunction(this.config['destructive']) && this.config["destructive"]();
6159
+ return isFunction$1(this.config['destructive']) && this.config["destructive"]();
6749
6160
  }
6750
6161
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractDialogComponent, deps: [{ token: ALERT_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
6751
6162
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractDialogComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
@@ -6762,7 +6173,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6762
6173
 
6763
6174
  class AbstractConfirmDialogComponent extends AbstractDialogComponent {
6764
6175
  cancelFace;
6765
- confirmClass = "aup-confirm-activity";
6766
6176
  constructor(config) {
6767
6177
  super(config);
6768
6178
  this.cancelFace = {
@@ -6773,7 +6183,7 @@ class AbstractConfirmDialogComponent extends AbstractDialogComponent {
6773
6183
  });
6774
6184
  }
6775
6185
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractConfirmDialogComponent, deps: [{ token: ALERT_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
6776
- 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 });
6186
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractConfirmDialogComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
6777
6187
  }
6778
6188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractConfirmDialogComponent, decorators: [{
6779
6189
  type: Component,
@@ -6783,10 +6193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6783
6193
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
6784
6194
  type: Inject,
6785
6195
  args: [ALERT_CONFIG]
6786
- }] }]; }, propDecorators: { confirmClass: [{
6787
- type: HostBinding,
6788
- args: ["class"]
6789
- }] } });
6196
+ }] }]; } });
6790
6197
 
6791
6198
  class ActivityBodyComponent extends DisposableComponent {
6792
6199
  fullWidth = false;
@@ -7325,7 +6732,7 @@ const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
7325
6732
  // return true;
7326
6733
  // }
7327
6734
  // }
7328
- class PlaceComponent extends LoadableComponent {
6735
+ class PlaceComponent extends DisposableComponent {
7329
6736
  _placeReadyCallbacks = [];
7330
6737
  visitModel = new MutableValueModel();
7331
6738
  _inVisitUpdate = new Guard();
@@ -7382,7 +6789,6 @@ class PlaceComponent extends LoadableComponent {
7382
6789
  */
7383
6790
  installAndInitialiseBinding(initialVisit, parameterDef) {
7384
6791
  const model = this[parameterDef.propertyName];
7385
- assert.notNil(model);
7386
6792
  DebugContext.tag(model, `${this.placeDefinition.component.name}.${parameterDef.propertyName}`);
7387
6793
  const binding = this.registerDisposable(new Binding(this.visitModel, model, {
7388
6794
  toRight(visit) {
@@ -7467,7 +6873,7 @@ class PlaceComponent extends LoadableComponent {
7467
6873
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: PlaceComponent, usesInheritance: true, ngImport: i0 });
7468
6874
  }
7469
6875
  __decorate([
7470
- MemoizeGet(),
6876
+ Memoize(),
7471
6877
  __metadata("design:type", PlaceDefinition),
7472
6878
  __metadata("design:paramtypes", [])
7473
6879
  ], PlaceComponent.prototype, "placeDefinition", null);
@@ -7657,7 +7063,7 @@ class Visit {
7657
7063
  getRouterCommands() {
7658
7064
  return this.segments.reduce((result, v) => {
7659
7065
  const path = v.placeDefinition.path;
7660
- return isEmpty(path) ?
7066
+ return isEmpty$1(path) ?
7661
7067
  [...result, path] : // Angular doesn't support route params on empty path segments
7662
7068
  [...result, path, ...v.createRouterCommands()];
7663
7069
  }, []);
@@ -7673,7 +7079,7 @@ class Visit {
7673
7079
  }
7674
7080
  }
7675
7081
  __decorate([
7676
- Memoize(),
7082
+ Memoize$1(),
7677
7083
  __metadata("design:type", Function),
7678
7084
  __metadata("design:paramtypes", [PlaceDefinition]),
7679
7085
  __metadata("design:returntype", VisitSegment)
@@ -8054,7 +7460,10 @@ class SynchroniseInteractionContextIdsWithRoute extends NavigationSession {
8054
7460
  return true;
8055
7461
  }
8056
7462
  notifyActive() {
8057
- this.syncInteractionIdsWithRouter();
7463
+ // TODO: Do I still need this??
7464
+ setTimeout(() => {
7465
+ this.syncInteractionIdsWithRouter();
7466
+ });
8058
7467
  }
8059
7468
  // @Trace()
8060
7469
  onRouterEnd(event) {
@@ -8797,7 +8206,7 @@ class ConsolidatedParameterMap {
8797
8206
  }
8798
8207
  }
8799
8208
  __decorate([
8800
- MemoizeGet(),
8209
+ Memoize(),
8801
8210
  __metadata("design:type", Array),
8802
8211
  __metadata("design:paramtypes", [])
8803
8212
  ], ConsolidatedParameterMap.prototype, "keys", null);
@@ -8875,7 +8284,7 @@ class UrlSnapshot {
8875
8284
  return this.getPrimaryUrlSegments().find(s => s.path === placeDef.path);
8876
8285
  }
8877
8286
  isLastPlaceInUrl(placeDef) {
8878
- return last(this.getPrimaryUrlSegments()).path === placeDef.path;
8287
+ return last$1(this.getPrimaryUrlSegments()).path === placeDef.path;
8879
8288
  }
8880
8289
  createVisitSegmentFor(placeDef) {
8881
8290
  return new VisitSegment(placeDef, new ConsolidatedParameterMap(this.getPrimaryUrlSegments()));
@@ -8991,7 +8400,7 @@ class UrlService {
8991
8400
  back() {
8992
8401
  this.angularLocation.back();
8993
8402
  }
8994
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: UrlService, deps: [{ token: i1$5.Router }, { token: i1$1.Location }, { token: i1$5.UrlSerializer }], target: i0.ɵɵFactoryTarget.Injectable });
8403
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: UrlService, deps: [{ token: i1$4.Router }, { token: i1$1.Location }, { token: i1$4.UrlSerializer }], target: i0.ɵɵFactoryTarget.Injectable });
8995
8404
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: UrlService, providedIn: 'root' });
8996
8405
  }
8997
8406
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: UrlService, decorators: [{
@@ -8999,7 +8408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
8999
8408
  args: [{
9000
8409
  providedIn: 'root'
9001
8410
  }]
9002
- }], ctorParameters: function () { return [{ type: i1$5.Router }, { type: i1$1.Location }, { type: i1$5.UrlSerializer }]; } });
8411
+ }], ctorParameters: function () { return [{ type: i1$4.Router }, { type: i1$1.Location }, { type: i1$4.UrlSerializer }]; } });
9003
8412
 
9004
8413
  // function asArray<T>(item: T | T[]): T[] {
9005
8414
  // return Array.isArray(item) ? item : [item];
@@ -9019,8 +8428,6 @@ class PlaceRouter extends GarbageCollector {
9019
8428
  routerInteractionAdapter;
9020
8429
  sessionFinishedJobs = [];
9021
8430
  authService = new PlaceAuthService();
9022
- _ready$ = this.registerDisposable(new DelegatingValueModel().withDefault(true));
9023
- ready$ = this._ready$.readonly$;
9024
8431
  constructor(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
9025
8432
  super();
9026
8433
  this.angularRouter = angularRouter;
@@ -9042,7 +8449,7 @@ class PlaceRouter extends GarbageCollector {
9042
8449
  });
9043
8450
  const { chain } = Dsl.disposeWith(this);
9044
8451
  this.navigationInProgress$ = chain(this.navigationSession$).isNotNil();
9045
- this.interactionSyncInProgress$ = chain(this.navigationSession$).pluck("isInteractionSync").otherwise(false);
8452
+ this.interactionSyncInProgress$ = chain(this.navigationSession$).pluck("isInteractionSync");
9046
8453
  const idleStateName = chain(this.interactionService.active).map(active => active ? "IdleDuringInteraction" : "Idle");
9047
8454
  this.navigationSessionName$ = chain(this.navigationSession$)
9048
8455
  .pluck("name")
@@ -9086,9 +8493,6 @@ class PlaceRouter extends GarbageCollector {
9086
8493
  // the back button was clicked.
9087
8494
  angularLocation.onUrlChange(url => this.onUrlChanged(url));
9088
8495
  }
9089
- postponeRoutingUntil(condition$) {
9090
- this._ready$.setDelegate(condition$);
9091
- }
9092
8496
  getAuthenticationFailureRedirect(activatedRoute, state) {
9093
8497
  return this.authService.getAuthenticationFailureRedirect(activatedRoute, state);
9094
8498
  }
@@ -9104,20 +8508,23 @@ class PlaceRouter extends GarbageCollector {
9104
8508
  isNavigating() {
9105
8509
  return this.navigationInProgress$.value;
9106
8510
  }
9107
- async waitUntilRouterReady() {
9108
- const { waitUntil } = Dsl.disposeWith(this);
9109
- await waitUntil(this.ready$).becomesTruthy();
9110
- return this;
9111
- }
9112
- async waitUntilIdle() {
9113
- const { waitUntil } = Dsl.disposeWith(this);
9114
- await waitUntil(this.navigationInProgress$).becomesFalsey();
9115
- return this;
8511
+ waitUntilIdle() {
8512
+ const { when } = Dsl.disposeWith(this);
8513
+ return new Promise(resolve => {
8514
+ when(this.navigationInProgress$).becomesFalsey(() => resolve(this), {
8515
+ initialValue: "evaluate",
8516
+ once: true
8517
+ });
8518
+ });
9116
8519
  }
9117
8520
  async waitActivitiesSynchronised() {
9118
- const { waitUntil } = Dsl.disposeWith(this);
9119
- await waitUntil(this.interactionSyncInProgress$).becomesFalsey();
9120
- return this;
8521
+ const { when } = Dsl.disposeWith(this);
8522
+ return new Promise(resolve => {
8523
+ when(this.interactionSyncInProgress$).becomesFalsey(() => resolve(this), {
8524
+ initialValue: "evaluate",
8525
+ once: true
8526
+ });
8527
+ });
9121
8528
  }
9122
8529
  // @Trace()
9123
8530
  onPopState(event) {
@@ -9303,7 +8710,7 @@ class PlaceRouter extends GarbageCollector {
9303
8710
  return Visit.goto(visitOrPlaceComponent, params);
9304
8711
  }
9305
8712
  }
9306
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, deps: [{ token: i1$5.Router }, { token: i1$1.Location }, { token: InteractionService }, { token: UrlService }, { token: PlaceHistory }], target: i0.ɵɵFactoryTarget.Injectable });
8713
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, deps: [{ token: i1$4.Router }, { token: i1$1.Location }, { token: InteractionService }, { token: UrlService }, { token: PlaceHistory }], target: i0.ɵɵFactoryTarget.Injectable });
9307
8714
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, providedIn: "root" });
9308
8715
  }
9309
8716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, decorators: [{
@@ -9311,7 +8718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9311
8718
  args: [{
9312
8719
  providedIn: "root"
9313
8720
  }]
9314
- }], ctorParameters: function () { return [{ type: i1$5.Router }, { type: i1$1.Location }, { type: InteractionService }, { type: UrlService }, { type: PlaceHistory }]; } });
8721
+ }], ctorParameters: function () { return [{ type: i1$4.Router }, { type: i1$1.Location }, { type: InteractionService }, { type: UrlService }, { type: PlaceHistory }]; } });
9315
8722
 
9316
8723
  class ActivityTitleComponent extends DisposableComponent {
9317
8724
  _color;
@@ -9333,11 +8740,11 @@ class ActivityTitleComponent extends DisposableComponent {
9333
8740
  return this._color;
9334
8741
  }
9335
8742
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
9336
- 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"] });
8743
+ 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"] });
9337
8744
  }
9338
8745
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityTitleComponent, decorators: [{
9339
8746
  type: Component,
9340
- 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"] }]
8747
+ args: [{ selector: 'aup-activity-title', template: "<ng-content></ng-content>\n", styles: [":host{display:block}\n"] }]
9341
8748
  }], propDecorators: { hasTransparentBackground: [{
9342
8749
  type: Input
9343
8750
  }, {
@@ -9358,7 +8765,7 @@ class AlertDialogComponent extends AbstractDialogComponent {
9358
8765
  });
9359
8766
  }
9360
8767
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AlertDialogComponent, deps: [{ token: ACTIVITY_DATA }], target: i0.ɵɵFactoryTarget.Component });
9361
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AlertDialogComponent, selector: "aup-alert-dialog", usesInheritance: true, ngImport: i0, template: "<aup-activity-title *ngIf=\"title\" [color]=\"color\"><aup-markdown [content]=\"title\" [inline]=\"true\"></aup-markdown></aup-activity-title>\n<aup-activity-body>\n <aup-markdown *ngFor=\"let line of content\" [content]=\"line\"></aup-markdown>\n</aup-activity-body>\n<aup-activity-actions [confirmFace]=\"confirmFace\"></aup-activity-actions>\n", styles: [":host{display:block}.mat-mdc-dialog-content{margin:0;padding:0}.mat-mdc-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-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: MarkdownComponent, selector: "aup-markdown, [aupMarkdown]", inputs: ["content$", "content", "inline"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align", "alignContent"] }, { kind: "component", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: ["hasTransparentBackground", "color"] }, { kind: "component", type: ActivityBodyComponent, selector: "aup-activity-body", inputs: ["fullWidth"] }] });
8768
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AlertDialogComponent, selector: "aup-alert-dialog", usesInheritance: true, ngImport: i0, template: "<aup-activity-title *ngIf=\"title\" [color]=\"color\"><aup-markdown [content]=\"title\" [inline]=\"true\"></aup-markdown></aup-activity-title>\n<aup-activity-body>\n <aup-markdown *ngFor=\"let line of content\" [content]=\"line\"></aup-markdown>\n</aup-activity-body>\n<aup-activity-actions [confirmFace]=\"confirmFace\"></aup-activity-actions>\n", styles: [":host{display:block}.mat-mdc-dialog-content{margin:0;padding:0}.mat-mdc-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-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: MarkdownComponent, selector: "aup-markdown, [aupMarkdown]", inputs: ["content$", "content", "inline"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align"] }, { kind: "component", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: ["hasTransparentBackground", "color"] }, { kind: "component", type: ActivityBodyComponent, selector: "aup-activity-body", inputs: ["fullWidth"] }] });
9362
8769
  }
9363
8770
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AlertDialogComponent, decorators: [{
9364
8771
  type: Component,
@@ -9378,7 +8785,7 @@ class ConfirmThenDialogComponent extends AbstractConfirmDialogComponent {
9378
8785
  });
9379
8786
  }
9380
8787
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmThenDialogComponent, deps: [{ token: ACTIVITY_DATA }], target: i0.ɵɵFactoryTarget.Component });
9381
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ConfirmThenDialogComponent, selector: "aup-confirmation-then-dialog", usesInheritance: true, ngImport: i0, template: "<aup-activity-title *ngIf=\"title\" [color]=\"color\"><aup-markdown [content]=\"title\" [inline]=\"true\"></aup-markdown></aup-activity-title>\n<aup-activity-body>\n <aup-markdown *ngFor=\"let line of content\" [content]=\"line\"></aup-markdown>\n</aup-activity-body>\n<aup-activity-actions [confirmFace]=\"confirmFace\" [cancelFace]=\"cancelFace\"></aup-activity-actions>\n", styles: [":host{display:block}.mat-mdc-dialog-content{margin:0;padding:0}.mat-mdc-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-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: MarkdownComponent, selector: "aup-markdown, [aupMarkdown]", inputs: ["content$", "content", "inline"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align", "alignContent"] }, { kind: "component", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: ["hasTransparentBackground", "color"] }, { kind: "component", type: ActivityBodyComponent, selector: "aup-activity-body", inputs: ["fullWidth"] }] });
8788
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ConfirmThenDialogComponent, selector: "aup-confirmation-then-dialog", usesInheritance: true, ngImport: i0, template: "<aup-activity-title *ngIf=\"title\" [color]=\"color\"><aup-markdown [content]=\"title\" [inline]=\"true\"></aup-markdown></aup-activity-title>\n<aup-activity-body>\n <aup-markdown *ngFor=\"let line of content\" [content]=\"line\"></aup-markdown>\n</aup-activity-body>\n<aup-activity-actions [confirmFace]=\"confirmFace\" [cancelFace]=\"cancelFace\"></aup-activity-actions>\n", styles: [":host{display:block}.mat-mdc-dialog-content{margin:0;padding:0}.mat-mdc-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-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: MarkdownComponent, selector: "aup-markdown, [aupMarkdown]", inputs: ["content$", "content", "inline"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align"] }, { kind: "component", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: ["hasTransparentBackground", "color"] }, { kind: "component", type: ActivityBodyComponent, selector: "aup-activity-body", inputs: ["fullWidth"] }] });
9382
8789
  }
9383
8790
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmThenDialogComponent, decorators: [{
9384
8791
  type: Component,
@@ -9402,7 +8809,7 @@ class ConfirmThenExecuteDialogComponent extends AbstractConfirmDialogComponent {
9402
8809
  });
9403
8810
  }
9404
8811
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmThenExecuteDialogComponent, deps: [{ token: ACTIVITY_DATA }], target: i0.ɵɵFactoryTarget.Component });
9405
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ConfirmThenExecuteDialogComponent, selector: "aup-confirmation-execute-dialog", usesInheritance: true, ngImport: i0, template: "<aup-activity-title *ngIf=\"title\" [color]=\"color\"><aup-markdown [content]=\"title\" [inline]=\"true\"></aup-markdown></aup-activity-title>\n<aup-activity-body>\n <aup-markdown *ngFor=\"let line of content\" [content]=\"line\"></aup-markdown>\n</aup-activity-body>\n<aup-activity-actions [confirmFace]=\"confirmFace\" [cancelFace]=\"cancelFace\"></aup-activity-actions>\n", styles: [":host{display:block}.mat-mdc-dialog-content{margin:0;padding:0}.mat-mdc-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-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: MarkdownComponent, selector: "aup-markdown, [aupMarkdown]", inputs: ["content$", "content", "inline"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align", "alignContent"] }, { kind: "component", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: ["hasTransparentBackground", "color"] }, { kind: "component", type: ActivityBodyComponent, selector: "aup-activity-body", inputs: ["fullWidth"] }] });
8812
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ConfirmThenExecuteDialogComponent, selector: "aup-confirmation-execute-dialog", usesInheritance: true, ngImport: i0, template: "<aup-activity-title *ngIf=\"title\" [color]=\"color\"><aup-markdown [content]=\"title\" [inline]=\"true\"></aup-markdown></aup-activity-title>\n<aup-activity-body>\n <aup-markdown *ngFor=\"let line of content\" [content]=\"line\"></aup-markdown>\n</aup-activity-body>\n<aup-activity-actions [confirmFace]=\"confirmFace\" [cancelFace]=\"cancelFace\"></aup-activity-actions>\n", styles: [":host{display:block}.mat-mdc-dialog-content{margin:0;padding:0}.mat-mdc-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-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: MarkdownComponent, selector: "aup-markdown, [aupMarkdown]", inputs: ["content$", "content", "inline"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align"] }, { kind: "component", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: ["hasTransparentBackground", "color"] }, { kind: "component", type: ActivityBodyComponent, selector: "aup-activity-body", inputs: ["fullWidth"] }] });
9406
8813
  }
9407
8814
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmThenExecuteDialogComponent, decorators: [{
9408
8815
  type: Component,
@@ -9422,7 +8829,7 @@ class ConfirmationDialogComponent extends AbstractConfirmDialogComponent {
9422
8829
  });
9423
8830
  }
9424
8831
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmationDialogComponent, deps: [{ token: ACTIVITY_DATA }], target: i0.ɵɵFactoryTarget.Component });
9425
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ConfirmationDialogComponent, selector: "aup-confirmation-dialog", usesInheritance: true, ngImport: i0, template: "<aup-activity-title *ngIf=\"title\" [color]=\"color\"><aup-markdown [content]=\"title\" [inline]=\"true\"></aup-markdown></aup-activity-title>\n<aup-activity-body>\n <aup-markdown *ngFor=\"let line of content\" [content]=\"line\"></aup-markdown>\n</aup-activity-body>\n<aup-activity-actions [confirmFace]=\"confirmFace\" [cancelFace]=\"cancelFace\"></aup-activity-actions>\n\n", styles: [":host{display:block}.mat-mdc-dialog-content{margin:0;padding:0}.mat-mdc-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-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: MarkdownComponent, selector: "aup-markdown, [aupMarkdown]", inputs: ["content$", "content", "inline"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align", "alignContent"] }, { kind: "component", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: ["hasTransparentBackground", "color"] }, { kind: "component", type: ActivityBodyComponent, selector: "aup-activity-body", inputs: ["fullWidth"] }] });
8832
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ConfirmationDialogComponent, selector: "aup-confirmation-dialog", usesInheritance: true, ngImport: i0, template: "<aup-activity-title *ngIf=\"title\" [color]=\"color\"><aup-markdown [content]=\"title\" [inline]=\"true\"></aup-markdown></aup-activity-title>\n<aup-activity-body>\n <aup-markdown *ngFor=\"let line of content\" [content]=\"line\"></aup-markdown>\n</aup-activity-body>\n<aup-activity-actions [confirmFace]=\"confirmFace\" [cancelFace]=\"cancelFace\"></aup-activity-actions>\n\n", styles: [":host{display:block}.mat-mdc-dialog-content{margin:0;padding:0}.mat-mdc-dialog-actions{margin-bottom:0!important;padding:0;align-items:flex-end;justify-content:flex-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: MarkdownComponent, selector: "aup-markdown, [aupMarkdown]", inputs: ["content$", "content", "inline"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align"] }, { kind: "component", type: ActivityTitleComponent, selector: "aup-activity-title", inputs: ["hasTransparentBackground", "color"] }, { kind: "component", type: ActivityBodyComponent, selector: "aup-activity-body", inputs: ["fullWidth"] }] });
9426
8833
  }
9427
8834
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmationDialogComponent, decorators: [{
9428
8835
  type: Component,
@@ -9602,7 +9009,6 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9602
9009
  tabs;
9603
9010
  activityOutlets;
9604
9011
  activityRefs = [];
9605
- animationDuration = "500ms";
9606
9012
  _identifier;
9607
9013
  _deferredCleanUp;
9608
9014
  interactionServiceApi;
@@ -9615,7 +9021,6 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9615
9021
  busy = this.registerDisposable(new DelegatingValueModel().withDefault(false));
9616
9022
  syncTabsJob = undefined;
9617
9023
  stable$;
9618
- wasActive = false;
9619
9024
  constructor(placeRouter) {
9620
9025
  super();
9621
9026
  this.placeRouter = placeRouter;
@@ -9652,12 +9057,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9652
9057
  * Returns true if an activity is currently running.
9653
9058
  */
9654
9059
  isActive() {
9655
- const isActive = this.getActiveActivityCount() > 0;
9656
- // if (this.wasActive !== isActive) {
9657
- // console.log({was: this.wasActive, is: isActive});
9658
- // }
9659
- // this.wasActive = isActive
9660
- return isActive;
9060
+ return this.getActiveActivityCount() > 0;
9661
9061
  }
9662
9062
  registerDisposable(disposable) {
9663
9063
  return this.garbage.registerDisposable(disposable);
@@ -9740,7 +9140,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9740
9140
  // by activity index)
9741
9141
  setTimeout(() => {
9742
9142
  this.activityRefs = []; // we have to do it after the animation timeout or the activity disappears before the animatin finsihes
9743
- }, this.getTabAnimationDurationInMillis());
9143
+ }, this.getTabAnimationDuration());
9744
9144
  const promise = this.interactionServiceApi.notifyFinished(this);
9745
9145
  this._deferredCleanUp = promise
9746
9146
  .finally(() => {
@@ -9766,6 +9166,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9766
9166
  /**
9767
9167
  * Synchronises the selected tab index.
9768
9168
  */
9169
+ // @Trace()
9769
9170
  synchroniseSelectedTabIndex() {
9770
9171
  assert.isTruthy(this.isActive());
9771
9172
  const previousIndex = this.tabs.selectedIndex;
@@ -9777,10 +9178,10 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9777
9178
  activityRef.setFocused(false);
9778
9179
  this.busy.setDelegate(activityRef.activityBusy);
9779
9180
  this.tabs.selectedIndex = newIndex;
9780
- // if (this.ready$.value) {
9781
- // // Note: We're not using the animation done event as it's firing almost immeadiately.
9782
- // setTimeout(() => this.finaliseActivityStates(), animate ? this.getTabAnimationDurationInMillis() : 0);
9783
- // }
9181
+ if (this.ready$.value) {
9182
+ // Note: We're not using the animation done event as it's firing almost immeadiately.
9183
+ setTimeout(() => this.finaliseActivityStates(), animate ? this.getTabAnimationDuration() : 0);
9184
+ }
9784
9185
  }
9785
9186
  }
9786
9187
  finaliseActivityStates() {
@@ -9794,12 +9195,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9794
9195
  return this.activityOutlets.toArray()[this.tabs.selectedIndex];
9795
9196
  }
9796
9197
  getTabAnimationDuration() {
9797
- // const s = this._started$.value ? this.animationDuration : "0";
9798
- // return s
9799
- return this.animationDuration;
9800
- }
9801
- getTabAnimationDurationInMillis() {
9802
- const match = this.animationDuration.match(/(\d+)(.*)/);
9198
+ const match = this.tabs.animationDuration.match(/(\d+)(.*)/);
9803
9199
  const numericValue = parseFloat(match[1]);
9804
9200
  switch (match[2].trim()) {
9805
9201
  case "ms":
@@ -9825,16 +9221,12 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9825
9221
  }
9826
9222
  }, 75);
9827
9223
  }
9828
- onAnimationDone() {
9829
- this._started$.value = true;
9830
- this.finaliseActivityStates();
9831
- }
9832
9224
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityContainerComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
9833
- 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$2.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i3$2.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"] }] });
9225
+ 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"] }] });
9834
9226
  }
9835
9227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityContainerComponent, decorators: [{
9836
9228
  type: Component,
9837
- 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"] }]
9229
+ 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"] }]
9838
9230
  }], ctorParameters: function () { return [{ type: PlaceRouter }]; }, propDecorators: { dynamicHeight: [{
9839
9231
  type: Input
9840
9232
  }], tabs: [{
@@ -9843,8 +9235,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9843
9235
  }], activityOutlets: [{
9844
9236
  type: ViewChildren,
9845
9237
  args: [ActivityOutletComponent]
9846
- }], animationDuration: [{
9847
- type: Input
9848
9238
  }] } });
9849
9239
 
9850
9240
  class AbstractActivityTriggerComponent extends DisposableComponent {
@@ -9945,16 +9335,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9945
9335
  args: ['class.active']
9946
9336
  }] } });
9947
9337
 
9948
- const INTERACTION_CONTEXT = new InjectionToken('interactionContext');
9949
-
9950
- const cssDurationRegex$1 = /(\d+)(m?s)/;
9338
+ const cssDurationRegex = /(\d+)(m?s)/;
9951
9339
  /**
9952
9340
  * @example
9953
9341
  * <aup-in-place-interaction-context #inPlaceInteractionContext>
9954
9342
  * </aup-in-place-interaction-context>
9955
9343
  *
9956
9344
  * in your component
9957
- * @ViewChild(InPlaceInteractionContextComponent)
9345
+ * @ViewChild('inPlaceInteractionContext', { static: true })
9958
9346
  * interactionContext: InteractionContext;
9959
9347
  *
9960
9348
  *
@@ -9973,13 +9361,11 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
9973
9361
  * active interactions.
9974
9362
  */
9975
9363
  syncWithRoutes = true;
9976
- started = new EventEmitter();
9977
- finished = new EventEmitter();
9978
9364
  get animationDuration() {
9979
9365
  return this.animateFirstActivity ? (this.tabConfig?.animationDuration || "500ms") : "0ms";
9980
9366
  }
9981
9367
  get animationDurationMillis() {
9982
- const result = cssDurationRegex$1.exec(this.animationDuration);
9368
+ const result = cssDurationRegex.exec(this.animationDuration);
9983
9369
  if (!result) {
9984
9370
  lang.illegalState(`unsupported css duration: ${this.animationDuration}`);
9985
9371
  }
@@ -10001,16 +9387,11 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
10001
9387
  this.interactionService.registerInplaceInteractionContext(this);
10002
9388
  }
10003
9389
  else {
10004
- const self = this;
10005
9390
  this.activityContainerComponent.initialise("dont-care", {
10006
9391
  async notifyActive(interactionContext) {
10007
- self.started.emit();
10008
9392
  return undefined;
10009
9393
  },
10010
9394
  async notifyFinished(interactionContext) {
10011
- // I've noticed some rendering fails when returning the the transcluded content we'll fire an event
10012
- // so components can do stuff if they need to.
10013
- self.started.emit();
10014
9395
  return undefined;
10015
9396
  }
10016
9397
  });
@@ -10057,15 +9438,11 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
10057
9438
  }
10058
9439
  }
10059
9440
  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 });
10060
- 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" }, outputs: { started: "started", finished: "finished" }, host: { properties: { "class.active": "this.active" } }, providers: [
10061
- { provide: INTERACTION_CONTEXT, useExisting: InPlaceInteractionContextComponent }
10062
- ], 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$2.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i3$2.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"] }] });
9441
+ 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"] }] });
10063
9442
  }
10064
9443
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InPlaceInteractionContextComponent, decorators: [{
10065
9444
  type: Component,
10066
- args: [{ selector: "aup-in-place-interaction-context", providers: [
10067
- { provide: INTERACTION_CONTEXT, useExisting: InPlaceInteractionContextComponent }
10068
- ], 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"] }]
9445
+ args: [{ selector: "aup-in-place-interaction-context", 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"] }]
10069
9446
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
10070
9447
  type: Inject,
10071
9448
  args: [MAT_TABS_CONFIG]
@@ -10078,10 +9455,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10078
9455
  type: Input
10079
9456
  }], syncWithRoutes: [{
10080
9457
  type: Input
10081
- }], started: [{
10082
- type: Output
10083
- }], finished: [{
10084
- type: Output
10085
9458
  }], active: [{
10086
9459
  type: HostBinding,
10087
9460
  args: ["class.active"]
@@ -10096,7 +9469,7 @@ class InlineActivityTriggerComponent extends AbstractActivityTriggerComponent {
10096
9469
  super();
10097
9470
  }
10098
9471
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InlineActivityTriggerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10099
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: InlineActivityTriggerComponent, selector: "aup-inline-activity-trigger", viewQueries: [{ propertyName: "_interactionContext", first: true, predicate: InPlaceInteractionContextComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<aup-in-place-interaction-context #interactionContext [animateFirstActivity]=\"false\">\n <aup-command [command]=\"startActivityCommand\" [face$]=\"face$\" [alignFace]=\"alignFace\"></aup-command>\n</aup-in-place-interaction-context>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }, { kind: "component", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: ["animateFirstActivity", "syncWithRoutes"], outputs: ["started", "finished"] }] });
9472
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: InlineActivityTriggerComponent, selector: "aup-inline-activity-trigger", viewQueries: [{ propertyName: "_interactionContext", first: true, predicate: InPlaceInteractionContextComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<aup-in-place-interaction-context #interactionContext [animateFirstActivity]=\"false\">\n <aup-command [command]=\"startActivityCommand\" [face$]=\"face$\" [alignFace]=\"alignFace\"></aup-command>\n</aup-in-place-interaction-context>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }, { kind: "component", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: ["animateFirstActivity", "syncWithRoutes"] }] });
10100
9473
  }
10101
9474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InlineActivityTriggerComponent, decorators: [{
10102
9475
  type: Component,
@@ -10220,7 +9593,7 @@ class PopupInteractionContextComponent extends DisposableComponent {
10220
9593
  isActive() {
10221
9594
  return this.interactionContext && this.interactionContext.isActive();
10222
9595
  }
10223
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PopupInteractionContextComponent, deps: [{ token: i0.ElementRef }, { token: i1$6.Overlay }, { token: i1$6.CdkScrollable, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
9596
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PopupInteractionContextComponent, deps: [{ token: i0.ElementRef }, { token: i1$5.Overlay }, { token: i1$5.CdkScrollable, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
10224
9597
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: PopupInteractionContextComponent, selector: "aup-popup-interaction-context", inputs: { anchorX: "anchorX", anchorY: "anchorY", cancelOnEscape$: "cancelOnEscape$", cancelOnEscape: "cancelOnEscape" }, host: { properties: { "class.interaction-active": "this.active" } }, usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-block}:host.interaction-active{background:rgba(0,0,0,.05)}:host::ng-deep .popup-interaction-context-backdrop{background-color:#0000}\n"] });
10225
9598
  }
10226
9599
  __decorate([
@@ -10234,7 +9607,7 @@ __decorate([
10234
9607
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PopupInteractionContextComponent, decorators: [{
10235
9608
  type: Component,
10236
9609
  args: [{ selector: 'aup-popup-interaction-context', template: "<ng-content></ng-content>\n", styles: [":host{display:inline-block}:host.interaction-active{background:rgba(0,0,0,.05)}:host::ng-deep .popup-interaction-context-backdrop{background-color:#0000}\n"] }]
10237
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$6.Overlay }, { type: i1$6.CdkScrollable, decorators: [{
9610
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$5.Overlay }, { type: i1$5.CdkScrollable, decorators: [{
10238
9611
  type: Optional
10239
9612
  }, {
10240
9613
  type: SkipSelf
@@ -10319,7 +9692,7 @@ class AddCardActivityComponent extends AbstractActivityTriggerComponent {
10319
9692
  return this.interactionStyle === 'inline';
10320
9693
  }
10321
9694
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AddCardActivityComponent, deps: [{ token: InteractionService }], target: i0.ɵɵFactoryTarget.Component });
10322
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AddCardActivityComponent, selector: "aup-add-card-activity", inputs: { interactionStyle: "interactionStyle", renderAs: "renderAs" }, host: { properties: { "class": "this.activityTypeClass", "class.not-card": "this.notCard" } }, viewQueries: [{ propertyName: "inlineInteractionContext", first: true, predicate: InPlaceInteractionContextComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<aup-in-place-interaction-context [animateFirstActivity]=\"false\" [pectinCommand]=\"startActivityCommand\">\n <aup-command *ngIf=\"isRenderAsButton()\" [command]=\"startActivityCommand\" [face$]=\"face$\" [alignFace]=\"alignFace\"></aup-command>\n <section *ngIf=\"isRenderAsCard()\" class=\"face-wrapper\">\n <aup-command-face class=\"mat-button\" [faces]=\"faceList.value\"></aup-command-face>\n </section>\n</aup-in-place-interaction-context>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;background-color:#fff}:host[interactionStyle=inline][renderas=card]:not(.active){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}:host[interactionStyle=inline][renderas=card]:not(.active):hover{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}:host[interactionStyle=inline][renderas=card]:not(.active):hover{border-color:transparent;background-color:#fff;color:#0000008a}:host[interactionStyle=modal][renderas=card]{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}:host[interactionStyle=modal][renderas=card]:hover{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}:host[interactionStyle=modal][renderas=card]:hover{border-color:transparent;background-color:#fff;color:#0000008a}:host-context(aup-card-container)[renderas=button]{align-self:start}section.face-wrapper{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}aup-in-place-interaction-context{flex:1}aup-in-place-interaction-context.active{border:3px solid #6273c7;border-radius:4px;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }, { kind: "component", type: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }, { kind: "component", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: ["animateFirstActivity", "syncWithRoutes"], outputs: ["started", "finished"] }] });
9695
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AddCardActivityComponent, selector: "aup-add-card-activity", inputs: { interactionStyle: "interactionStyle", renderAs: "renderAs" }, host: { properties: { "class": "this.activityTypeClass", "class.not-card": "this.notCard" } }, viewQueries: [{ propertyName: "inlineInteractionContext", first: true, predicate: InPlaceInteractionContextComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<aup-in-place-interaction-context [animateFirstActivity]=\"false\" [pectinCommand]=\"startActivityCommand\">\n <aup-command *ngIf=\"isRenderAsButton()\" [command]=\"startActivityCommand\" [face$]=\"face$\" [alignFace]=\"alignFace\"></aup-command>\n <section *ngIf=\"isRenderAsCard()\" class=\"face-wrapper\">\n <aup-command-face class=\"mat-button\" [faces]=\"faceList.value\"></aup-command-face>\n </section>\n</aup-in-place-interaction-context>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;background-color:#fff}:host[interactionStyle=inline][renderas=card]:not(.active){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}:host[interactionStyle=inline][renderas=card]:not(.active):hover{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}:host[interactionStyle=inline][renderas=card]:not(.active):hover{border-color:transparent;background-color:#fff;color:#0000008a}:host[interactionStyle=modal][renderas=card]{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}:host[interactionStyle=modal][renderas=card]:hover{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}:host[interactionStyle=modal][renderas=card]:hover{border-color:transparent;background-color:#fff;color:#0000008a}:host-context(aup-card-container)[renderas=button]{align-self:start}section.face-wrapper{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}aup-in-place-interaction-context{flex:1}aup-in-place-interaction-context.active{border:3px solid #6273c7;border-radius:4px;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "component", type: CommandComponent, selector: "aup-command", inputs: ["command", "face$", "face", "busyFace$", "busyFace", "alignFace"] }, { kind: "component", type: CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }, { kind: "component", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: ["animateFirstActivity", "syncWithRoutes"] }] });
10323
9696
  }
10324
9697
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AddCardActivityComponent, decorators: [{
10325
9698
  type: Component,
@@ -10395,7 +9768,7 @@ class AddItemInteractionContextComponent extends DisposableComponent {
10395
9768
  return this.interactionContext.startActivity(activityType, data);
10396
9769
  }
10397
9770
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AddItemInteractionContextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10398
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AddItemInteractionContextComponent, selector: "aup-add-item-interaction-context", inputs: { label: "label", icon: "icon", activityClass: "activityClass", activityData: "activityData", addCommand: "addCommand" }, host: { properties: { "class.interaction-active": "this.active", "tabindex": "this.tabindex" } }, viewQueries: [{ propertyName: "interactionContext", first: true, predicate: InPlaceInteractionContextComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<aup-in-place-interaction-context [animateFirstActivity]=\"false\">\n <a part=\"link\" class=\"link\" [pectinCommand]=\"clickCommand\"><aup-icon [icon]=\"icon\"></aup-icon> {{label}}</a>\n</aup-in-place-interaction-context>\n", styles: [":host{--def-link-color: var(--link-color, currentColor);--def-link-color-hover: var(--link-color-hover, currentColor);--def-link-background: var(--link-background, transparent);--def-link-background-hover: var(--link-background-hover, rgba(0, 0, 0, .05));--def-link-border-radius: var(--link-border-radius, 4px);--def-link-padding: var(--link-padding, calc(var(--aup-default-padding) / 2));display:flex;flex-direction:column;border-radius:var(--def-link-border-radius);box-sizing:border-box;outline:none}:host:hover a.link{color:var(--def-link-color-hover);background-color:var(--def-link-background-hover)}aup-in-place-interaction-context{border-radius:var(--def-link-border-radius)}a.link{display:flex;flex-direction:row;align-items:center;border-radius:var(--def-link-border-radius);color:var(--def-link-color);background:var(--def-link-background);padding:var(--def-link-padding);cursor:pointer;text-decoration:none}a.link mat-icon{margin-right:8px}\n"], dependencies: [{ kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }, { kind: "component", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: ["animateFirstActivity", "syncWithRoutes"], outputs: ["started", "finished"] }] });
9771
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AddItemInteractionContextComponent, selector: "aup-add-item-interaction-context", inputs: { label: "label", icon: "icon", activityClass: "activityClass", activityData: "activityData", addCommand: "addCommand" }, host: { properties: { "class.interaction-active": "this.active", "tabindex": "this.tabindex" } }, viewQueries: [{ propertyName: "interactionContext", first: true, predicate: InPlaceInteractionContextComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<aup-in-place-interaction-context [animateFirstActivity]=\"false\">\n <a part=\"link\" class=\"link\" [pectinCommand]=\"clickCommand\"><aup-icon [icon]=\"icon\"></aup-icon> {{label}}</a>\n</aup-in-place-interaction-context>\n", styles: [":host{--def-link-color: var(--link-color, currentColor);--def-link-color-hover: var(--link-color-hover, currentColor);--def-link-background: var(--link-background, transparent);--def-link-background-hover: var(--link-background-hover, rgba(0, 0, 0, .05));--def-link-border-radius: var(--link-border-radius, 4px);--def-link-padding: var(--link-padding, calc(var(--aup-default-padding) / 2));display:flex;flex-direction:column;border-radius:var(--def-link-border-radius);box-sizing:border-box;outline:none}:host:hover a.link{color:var(--def-link-color-hover);background-color:var(--def-link-background-hover)}aup-in-place-interaction-context{border-radius:var(--def-link-border-radius)}a.link{display:flex;flex-direction:row;align-items:center;border-radius:var(--def-link-border-radius);color:var(--def-link-color);background:var(--def-link-background);padding:var(--def-link-padding);cursor:pointer;text-decoration:none}a.link mat-icon{margin-right:8px}\n"], dependencies: [{ kind: "directive", type: CommandDirective, selector: "[pectinCommand]", inputs: ["pectinCommand", "commandParameter"] }, { kind: "component", type: IconComponent, selector: "aup-icon", inputs: ["icon"] }, { kind: "component", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: ["animateFirstActivity", "syncWithRoutes"] }] });
10399
9772
  }
10400
9773
  __decorate([
10401
9774
  Proxify(),
@@ -10534,14 +9907,12 @@ class StringInputActivity extends InputActivity {
10534
9907
  [label]="activityData.label"
10535
9908
  [placeholder]="activityData.placeholder"
10536
9909
  [command.enter]="confirmCommand"
10537
- [command.escape]="cancelCommand"
10538
- [dense]="true"
10539
- ></aup-string-input>
9910
+ [command.escape]="cancelCommand"></aup-string-input>
10540
9911
  <aup-activity-actions [layout]="layout" align="end"
10541
9912
  [confirmFace]="confirmFace"
10542
9913
  [cancelFace]="cancelFace"
10543
9914
  ></aup-activity-actions>
10544
- `, 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", "alignContent"] }] });
9915
+ `, 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"] }] });
10545
9916
  }
10546
9917
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputActivity, decorators: [{
10547
9918
  type: Component,
@@ -10552,9 +9923,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10552
9923
  [label]="activityData.label"
10553
9924
  [placeholder]="activityData.placeholder"
10554
9925
  [command.enter]="confirmCommand"
10555
- [command.escape]="cancelCommand"
10556
- [dense]="true"
10557
- ></aup-string-input>
9926
+ [command.escape]="cancelCommand"></aup-string-input>
10558
9927
  <aup-activity-actions [layout]="layout" align="end"
10559
9928
  [confirmFace]="confirmFace"
10560
9929
  [cancelFace]="cancelFace"
@@ -10737,7 +10106,7 @@ class InlineStringEditorComponent extends DisposableComponent {
10737
10106
  return !this.editingEnabled$.value;
10738
10107
  }
10739
10108
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InlineStringEditorComponent, deps: [{ token: InteractionService }], target: i0.ɵɵFactoryTarget.Component });
10740
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: InlineStringEditorComponent, selector: "aup-inline-string-editor", inputs: { editorModel: "editorModel", facesModel: "facesModel", faces: "faces", label: "label", placeHolder: "placeHolder", placeHolder$: "placeHolder$" }, host: { properties: { "class.disabled": "this.isDisabled" } }, viewQueries: [{ propertyName: "interactionContext", first: true, predicate: InPlaceInteractionContextComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container\" *ngIf=\"!editorModel.isEditing()\">\n <mat-form-field floatLabel=\"always\" (click)=\"startEdit()\"\n [class.editable]=\"editingEnabled$.value\" [class.empty]=\"isEmpty()\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeHolder}}\"\n [ngModel]=\"editorModel.valueModel.value\"\n [disabled]=\"true\"\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 </mat-form-field>\n <aup-command *ngIf=\"editCommand.enabled$.value\" [command]=\"editCommand\" [face$]=\"editFaceModel\"></aup-command>\n</div>\n<aup-in-place-interaction-context [animateFirstActivity]=\"false\"></aup-in-place-interaction-context>\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"] }, { 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: "component", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: ["animateFirstActivity", "syncWithRoutes"], outputs: ["started", "finished"] }] });
10109
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: InlineStringEditorComponent, selector: "aup-inline-string-editor", inputs: { editorModel: "editorModel", facesModel: "facesModel", faces: "faces", label: "label", placeHolder: "placeHolder", placeHolder$: "placeHolder$" }, host: { properties: { "class.disabled": "this.isDisabled" } }, viewQueries: [{ propertyName: "interactionContext", first: true, predicate: InPlaceInteractionContextComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container\" *ngIf=\"!editorModel.isEditing()\">\n <mat-form-field floatLabel=\"always\" (click)=\"startEdit()\"\n [class.editable]=\"editingEnabled$.value\" [class.empty]=\"isEmpty()\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeHolder}}\"\n [ngModel]=\"editorModel.valueModel.value\"\n [disabled]=\"true\"\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 </mat-form-field>\n <aup-command *ngIf=\"editCommand.enabled$.value\" [command]=\"editCommand\" [face$]=\"editFaceModel\"></aup-command>\n</div>\n<aup-in-place-interaction-context [animateFirstActivity]=\"false\"></aup-in-place-interaction-context>\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"] }, { 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: "component", type: InPlaceInteractionContextComponent, selector: "aup-in-place-interaction-context", inputs: ["animateFirstActivity", "syncWithRoutes"] }] });
10741
10110
  }
10742
10111
  __decorate([
10743
10112
  Proxify(),
@@ -10820,7 +10189,6 @@ class SelectInputActivity extends InputActivity {
10820
10189
  [options]="options"
10821
10190
  [optionLabelFormat]="optionLabelFormat"
10822
10191
  [allowNil]="activityData.allowNil"
10823
- [dense]="true"
10824
10192
  >
10825
10193
  <ng-template #nilOptionTemplate>{{activityData.nilLabel}}</ng-template>
10826
10194
  </aup-select-input>
@@ -10828,7 +10196,7 @@ class SelectInputActivity extends InputActivity {
10828
10196
  [confirmFace]="confirmFace"
10829
10197
  [cancelFace]="cancelFace"
10830
10198
  ></aup-activity-actions>
10831
- `, isInline: true, dependencies: [{ kind: "component", type: SelectInputComponent, selector: "aup-select-input", inputs: ["options$", "options", "optionLabel", "allowNil", "optionLabelFormat"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align", "alignContent"] }] });
10199
+ `, isInline: true, dependencies: [{ kind: "component", type: SelectInputComponent, selector: "aup-select-input", inputs: ["options$", "options", "optionLabel", "allowNil", "optionLabelFormat"] }, { kind: "component", type: ActivityActionsComponent, selector: "aup-activity-actions", inputs: ["confirmCommand", "cancelCommand", "faces", "confirmFace", "cancelFace", "style", "layout", "align"] }] });
10832
10200
  }
10833
10201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputActivity, decorators: [{
10834
10202
  type: Component,
@@ -10843,7 +10211,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10843
10211
  [options]="options"
10844
10212
  [optionLabelFormat]="optionLabelFormat"
10845
10213
  [allowNil]="activityData.allowNil"
10846
- [dense]="true"
10847
10214
  >
10848
10215
  <ng-template #nilOptionTemplate>{{activityData.nilLabel}}</ng-template>
10849
10216
  </aup-select-input>
@@ -10855,186 +10222,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10855
10222
  }]
10856
10223
  }] });
10857
10224
 
10858
- const slideDownOnEnterDef = style({
10859
- opacity: 0,
10860
- 'height': '0',
10861
- 'max-height': '0',
10862
- paddingTop: '0',
10863
- paddingBottom: '0'
10864
- });
10865
- // TODO: params aren't getting customised in the view. Need to figure out the correct approach.
10866
- const slideDownOnEnterAnimation = trigger('slideDownOnEnter', [
10867
- transition(':enter', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10868
- transition(':leave', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
10869
- ]);
10870
- const slideDownWhenOpenAnimation = trigger('slideDownWhenOpen', [
10871
- transition('closed => open', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10872
- transition('open => closed', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
10873
- ]);
10874
- const slideLeftOnEnterDef = style({
10875
- opacity: 0,
10876
- 'width': '0',
10877
- paddingLeft: '0',
10878
- paddingRight: '0'
10879
- });
10880
- const slideRightOnEnterAnimation = trigger('slideRightOnEnter', [
10881
- transition(':enter', [slideLeftOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10882
- transition(':leave', [animate('{{duration}}', slideLeftOnEnterDef)], { params: { duration: '100ms' } })
10883
- ]);
10884
- const ZERO_WIDTH = {
10885
- opacity: 0,
10886
- width: '0',
10887
- paddingLeft: '0',
10888
- paddingRight: '0',
10889
- };
10890
- const ZERO_HEIGHT = {
10891
- opacity: 0,
10892
- height: '0',
10893
- paddingTop: '0',
10894
- paddingBottom: '0',
10895
- };
10896
- const slideDownAndRightOnEnterAnimation = trigger('slideDownAndRightOnEnter', [
10897
- transition(':enter', [
10898
- style({ overflow: "hidden", whiteSpace: "nowrap", ...ZERO_WIDTH, ...ZERO_HEIGHT }),
10899
- animate('{{duration}}')
10900
- ], { params: { duration: '100ms' } }),
10901
- transition(':leave', [
10902
- style({ overflow: "hidden", whiteSpace: "nowrap" }),
10903
- group([
10904
- animate('{{duration}}', style(ZERO_HEIGHT)),
10905
- // Hack: 100ms is too quick as it animates from * - 0 as we only see it animate the width is greater than the parent.
10906
- // Not sure how to animate from * to natural new width of parent. This hack won't work for text that's just a little
10907
- // bit wider than the parent as it'll fall within the parent bounds very early in the animation cycle.
10908
- animate('300ms', style(ZERO_WIDTH)),
10909
- ])
10910
- ], { params: { duration: '100ms' } })
10911
- ]);
10912
-
10913
- const cssDurationRegex = /(\d+)(m?s)/;
10914
- /**
10915
- * This interaction context remains hidden (height: 0) until it is active.
10916
- * @example
10917
- * <aup-slide-down-interaction-context #inPlaceInteractionContext>
10918
- * </aup-slide-down-interaction-context>
10919
- *
10920
- * in your component
10921
- * @ViewChild(SlideDownInteractionContextComponent)
10922
- * interactionContext: InteractionContext;
10923
- *
10924
- *
10925
- */
10926
- class SlideDownInteractionContextComponent extends DisposableComponent {
10927
- tabConfig;
10928
- activityContainerComponent;
10929
- // NOTE: disabling this as I'm using the initialise callback to release the hacky height clamp.
10930
- // The whole registration thing is a bit naf so I should really clean that up at some point.
10931
- // /**
10932
- // * If true the activity will sync with the router to enable back button support. This is a work around for
10933
- // * deeply nested activities that can't be linked with the root place interactionContext hook for cancelling
10934
- // * active interactions.
10935
- // */
10936
- // @Input()
10937
- // syncWithRoutes = true;
10938
- dynamicHeight = true;
10939
- get active() {
10940
- return this.isActive();
10941
- }
10942
- // Horrible hack to stop the div and activity container bouncing back for a bit in after closing. No idea why it's doing that.
10943
- clampShut = true;
10944
- interactionService = this.inject(InteractionService);
10945
- constructor(tabConfig) {
10946
- super();
10947
- this.tabConfig = tabConfig;
10948
- }
10949
- ngAfterViewInit() {
10950
- // NOTE: this is a temp work around to detach inplace contexts from the router until AUP-88 is implemented.
10951
- // https://coolon.atlassian.net/browse/AUP-88?atlOrigin=eyJpIjoiOTg5YjEzZGUzZjRmNDg0NmExOWU3ZGJmMzJiNTRmNGYiLCJwIjoiaiJ9
10952
- const self = this;
10953
- this.activityContainerComponent.initialise("dont-care", {
10954
- async notifyActive(interactionContext) {
10955
- self.clampShut = false;
10956
- return undefined;
10957
- },
10958
- async notifyFinished(interactionContext) {
10959
- return undefined;
10960
- }
10961
- });
10962
- // if (this.syncWithRoutes) {
10963
- // this.interactionService.registerInplaceInteractionContext(this);
10964
- // }
10965
- }
10966
- getAnimationState() {
10967
- return {
10968
- value: this.isActive() ? "open" : "closed",
10969
- params: { duration: "200ms" }
10970
- };
10971
- }
10972
- // this is a regsitration callback from the interaction service
10973
- // @Trace() // webstorm says no usages... but I'm not sure.
10974
- onInplaceInteractionContextRegistered(id, api) {
10975
- this.activityContainerComponent.initialise(id, api);
10976
- }
10977
- get identifier() {
10978
- return this.activityContainerComponent.identifier;
10979
- }
10980
- alert(alert) {
10981
- return this.activityContainerComponent.alert(alert);
10982
- }
10983
- cancelActiveActivity() {
10984
- return this.activityContainerComponent.cancelActiveActivity();
10985
- }
10986
- confirm(confirm) {
10987
- return this.activityContainerComponent.confirm(confirm);
10988
- }
10989
- confirmOrReject(confirm) {
10990
- return this.activityContainerComponent.confirmOrReject(confirm);
10991
- }
10992
- confirmThen(confirm, activityType, data) {
10993
- return this.activityContainerComponent.confirmThen(confirm, activityType);
10994
- }
10995
- confirmThenExecute(confirm, operation) {
10996
- return this.activityContainerComponent.confirmThenExecute(confirm, operation);
10997
- }
10998
- isActive() {
10999
- return this.activityContainerComponent.isActive();
11000
- }
11001
- startActivity(activityType, data, options) {
11002
- return this.activityContainerComponent.startActivity(activityType, data, options);
11003
- }
11004
- onAnimationDone() {
11005
- if (!this.isActive()) {
11006
- this.clampShut = true;
11007
- }
11008
- }
11009
- 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 });
11010
- 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" } }, providers: [
11011
- { provide: INTERACTION_CONTEXT, useExisting: SlideDownInteractionContextComponent }
11012
- ], 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: [
11013
- slideDownWhenOpenAnimation
11014
- ] });
11015
- }
11016
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SlideDownInteractionContextComponent, decorators: [{
11017
- type: Component,
11018
- args: [{ selector: "aup-slide-down-interaction-context", providers: [
11019
- { provide: INTERACTION_CONTEXT, useExisting: SlideDownInteractionContextComponent }
11020
- ], animations: [
11021
- slideDownWhenOpenAnimation
11022
- ], 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"] }]
11023
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
11024
- type: Inject,
11025
- args: [MAT_TABS_CONFIG]
11026
- }, {
11027
- type: Optional
11028
- }] }]; }, propDecorators: { activityContainerComponent: [{
11029
- type: ViewChild,
11030
- args: ["activityContainer", { static: true }]
11031
- }], dynamicHeight: [{
11032
- type: Input
11033
- }], active: [{
11034
- type: HostBinding,
11035
- args: ["class.active"]
11036
- }] } });
11037
-
11038
10225
  class InteractionContextTriggerForDirective extends GarbageCollector {
11039
10226
  aupInteractionContextTriggerFor;
11040
10227
  activityClass;
@@ -11117,7 +10304,6 @@ class InteractionModule {
11117
10304
  AlertDialogComponent,
11118
10305
  ActivityOutletComponent,
11119
10306
  InPlaceInteractionContextComponent,
11120
- SlideDownInteractionContextComponent,
11121
10307
  AddItemInteractionContextComponent,
11122
10308
  ActivityActionsComponent,
11123
10309
  PopupInteractionContextComponent,
@@ -11144,6 +10330,8 @@ class InteractionModule {
11144
10330
  RouterModule,
11145
10331
  MatIconModule,
11146
10332
  DirectivesModule,
10333
+ FlexModule,
10334
+ GridModule,
11147
10335
  ComponentsModule,
11148
10336
  FormsModule,
11149
10337
  MatInputModule,
@@ -11163,8 +10351,7 @@ class InteractionModule {
11163
10351
  InlineActivityTriggerComponent,
11164
10352
  ModalActivityTriggerComponent,
11165
10353
  AddCardActivityComponent,
11166
- InlineStringEditorComponent,
11167
- SlideDownInteractionContextComponent] });
10354
+ InlineStringEditorComponent] });
11168
10355
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InteractionModule, providers: [
11169
10356
  InteractionService
11170
10357
  // {
@@ -11178,6 +10365,8 @@ class InteractionModule {
11178
10365
  RouterModule,
11179
10366
  MatIconModule,
11180
10367
  DirectivesModule,
10368
+ FlexModule,
10369
+ GridModule,
11181
10370
  ComponentsModule,
11182
10371
  FormsModule,
11183
10372
  MatInputModule,
@@ -11196,6 +10385,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11196
10385
  RouterModule,
11197
10386
  MatIconModule,
11198
10387
  DirectivesModule,
10388
+ FlexModule,
10389
+ GridModule,
11199
10390
  ComponentsModule,
11200
10391
  FormsModule,
11201
10392
  MatInputModule,
@@ -11210,7 +10401,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11210
10401
  AlertDialogComponent,
11211
10402
  ActivityOutletComponent,
11212
10403
  InPlaceInteractionContextComponent,
11213
- SlideDownInteractionContextComponent,
11214
10404
  AddItemInteractionContextComponent,
11215
10405
  ActivityActionsComponent,
11216
10406
  PopupInteractionContextComponent,
@@ -11248,7 +10438,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11248
10438
  ModalActivityTriggerComponent,
11249
10439
  AddCardActivityComponent,
11250
10440
  InlineStringEditorComponent,
11251
- SlideDownInteractionContextComponent,
11252
10441
  ],
11253
10442
  providers: [
11254
10443
  InteractionService
@@ -11319,6 +10508,7 @@ class PlaceOutletComponent extends DisposableComponent {
11319
10508
  router;
11320
10509
  placeRouter;
11321
10510
  placeConfig;
10511
+ cdr;
11322
10512
  #animate$_accessor_storage = proxify((ValueModel));
11323
10513
  get animate$() { return this.#animate$_accessor_storage; }
11324
10514
  set animate$(value) { this.#animate$_accessor_storage = value; }
@@ -11352,11 +10542,12 @@ class PlaceOutletComponent extends DisposableComponent {
11352
10542
  animationEnabled;
11353
10543
  authorised;
11354
10544
  notAuthorisedNoticePortal;
11355
- constructor(router, placeRouter, placeConfig, unauthorisedPlaceNotice, parentOutlet) {
10545
+ constructor(router, placeRouter, placeConfig, unauthorisedPlaceNotice, parentOutlet, cdr) {
11356
10546
  super();
11357
10547
  this.router = router;
11358
10548
  this.placeRouter = placeRouter;
11359
10549
  this.placeConfig = placeConfig;
10550
+ this.cdr = cdr;
11360
10551
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
11361
10552
  this.parentOutletModel = new MutableValueModel(parentOutlet);
11362
10553
  const defaultPlaceAnimationOrder = chain(this.parentOutletModel)
@@ -11368,7 +10559,7 @@ class PlaceOutletComponent extends DisposableComponent {
11368
10559
  this.placesInAnimationOrder = chain(this.customPlaceAnimationOrder$)
11369
10560
  .otherwise(defaultPlaceAnimationOrder);
11370
10561
  this.activePlaceAnimationPosition = this.placesInAnimationOrder
11371
- .reduceAll((placesInOrder) => {
10562
+ .reduce((placesInOrder) => {
11372
10563
  let placeIndex = 0;
11373
10564
  if (activatePlaceType.value) {
11374
10565
  placeIndex = placesInOrder.indexOf(activatePlaceType.value);
@@ -11522,8 +10713,8 @@ class PlaceOutletComponent extends DisposableComponent {
11522
10713
  this.onAnimationFinishedJob = undefined;
11523
10714
  }
11524
10715
  }
11525
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceOutletComponent, deps: [{ token: i1$5.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 });
11526
- 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$5.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: i1$4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], animations: [LEFT_RIGHT_PLACE_ANIMATION] });
10716
+ 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 });
10717
+ 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] });
11527
10718
  }
11528
10719
  __decorate([
11529
10720
  Proxify(),
@@ -11544,7 +10735,7 @@ __decorate([
11544
10735
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceOutletComponent, decorators: [{
11545
10736
  type: Component,
11546
10737
  args: [{ selector: 'aup-place-outlet', animations: [LEFT_RIGHT_PLACE_ANIMATION], 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"] }]
11547
- }], ctorParameters: function () { return [{ type: i1$5.Router }, { type: PlaceRouter }, { type: undefined, decorators: [{
10738
+ }], ctorParameters: function () { return [{ type: i1$4.Router }, { type: PlaceRouter }, { type: undefined, decorators: [{
11548
10739
  type: Optional
11549
10740
  }, {
11550
10741
  type: Inject,
@@ -11558,7 +10749,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11558
10749
  type: SkipSelf
11559
10750
  }, {
11560
10751
  type: Optional
11561
- }] }]; }, propDecorators: { animate$: [{
10752
+ }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { animate$: [{
11562
10753
  type: Input
11563
10754
  }], animate: [{
11564
10755
  type: Input
@@ -11691,7 +10882,7 @@ class ListPlaceNavComponent extends AbstractPlaceNavigationComponent {
11691
10882
  super(router);
11692
10883
  }
11693
10884
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ListPlaceNavComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11694
- 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"] }] });
10885
+ 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"] }] });
11695
10886
  }
11696
10887
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ListPlaceNavComponent, decorators: [{
11697
10888
  type: Component,
@@ -11766,7 +10957,7 @@ class SidePlaceNavigationComponent extends AbstractPlaceNavigationComponent {
11766
10957
  this.expanded = !this.expanded;
11767
10958
  }
11768
10959
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SidePlaceNavigationComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11769
- 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"] }] });
10960
+ 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"] }] });
11770
10961
  }
11771
10962
  __decorate([
11772
10963
  Proxify(),
@@ -11778,7 +10969,7 @@ __decorate([
11778
10969
  ], SidePlaceNavigationComponent.prototype, "expanded", null);
11779
10970
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SidePlaceNavigationComponent, decorators: [{
11780
10971
  type: Component,
11781
- 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"] }]
10972
+ 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"] }]
11782
10973
  }], ctorParameters: function () { return [{ type: PlaceRouter }]; }, propDecorators: { expanded$: [{
11783
10974
  type: Input
11784
10975
  }], expanded: [{
@@ -11796,7 +10987,7 @@ class TabbedPlaceNavigationComponent extends AbstractPlaceNavigationComponent {
11796
10987
  super(router);
11797
10988
  }
11798
10989
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TabbedPlaceNavigationComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11799
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TabbedPlaceNavigationComponent, selector: "aup-tabbed-place-navigation", usesInheritance: true, ngImport: i0, template: "<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <ng-content select=\"[nav-start]\"></ng-content>\n <a mat-tab-link *ngFor=\"let item of menuItems.value; trackBy: trackByPlaceDef\"\n aup-gc #gc=\"aup-gc\"\n [pectinCommand]=\"commandFactory.create(item.place, {disposedWith: gc})\"\n [active]=\"item.active\"\n [matTooltip]=\"getNavigationFace(item.place).tooltip()\">\n <aup-command-face [faces]=\"[getNavigationFace(item.place)]\"></aup-command-face>\n </a>\n <ng-content select=\"[nav-end]\"></ng-content>\n</nav>\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n", styles: [":host{display:block}div.place-holder{border:1px solid green}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3$2.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "animationDuration"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i3$2.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i3$2.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex", "active", "id"], exportAs: ["matTabLink"] }, { 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"] }] });
10990
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TabbedPlaceNavigationComponent, selector: "aup-tabbed-place-navigation", usesInheritance: true, ngImport: i0, template: "<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <ng-content select=\"[nav-start]\"></ng-content>\n <a mat-tab-link *ngFor=\"let item of menuItems.value; trackBy: trackByPlaceDef\"\n aup-gc #gc=\"aup-gc\"\n [pectinCommand]=\"commandFactory.create(item.place, {disposedWith: gc})\"\n [active]=\"item.active\"\n [matTooltip]=\"getNavigationFace(item.place).tooltip()\">\n <aup-command-face [faces]=\"[getNavigationFace(item.place)]\"></aup-command-face>\n </a>\n <ng-content select=\"[nav-end]\"></ng-content>\n</nav>\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n", styles: [":host{display:block}div.place-holder{border:1px solid green}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3$1.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "animationDuration"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i3$1.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i3$1.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex", "active", "id"], exportAs: ["matTabLink"] }, { 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"] }] });
11800
10991
  }
11801
10992
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TabbedPlaceNavigationComponent, decorators: [{
11802
10993
  type: Component,
@@ -11819,6 +11010,7 @@ class PlaceModule {
11819
11010
  MatTooltipModule,
11820
11011
  MatIconModule,
11821
11012
  DirectivesModule,
11013
+ FlexModule,
11822
11014
  ComponentsModule,
11823
11015
  PortalModule,
11824
11016
  MatCardModule], exports: [PlaceOutletComponent,
@@ -11835,6 +11027,7 @@ class PlaceModule {
11835
11027
  MatTooltipModule,
11836
11028
  MatIconModule,
11837
11029
  DirectivesModule,
11030
+ FlexModule,
11838
11031
  ComponentsModule,
11839
11032
  PortalModule,
11840
11033
  MatCardModule] });
@@ -11852,6 +11045,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11852
11045
  MatTooltipModule,
11853
11046
  MatIconModule,
11854
11047
  DirectivesModule,
11048
+ FlexModule,
11855
11049
  ComponentsModule,
11856
11050
  PortalModule,
11857
11051
  MatCardModule
@@ -11941,44 +11135,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11941
11135
  }]
11942
11136
  }] });
11943
11137
 
11138
+ const slideDownOnEnterDef = style({
11139
+ opacity: 0,
11140
+ 'height': '0',
11141
+ paddingTop: '0',
11142
+ paddingBottom: '0'
11143
+ });
11144
+ // TODO: params aren't getting customised in the view. Need to figure out the correct approach.
11145
+ const slideDownOnEnterAnimation = trigger('slideDownOnEnter', [
11146
+ transition(':enter', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
11147
+ transition(':leave', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
11148
+ ]);
11149
+ const slideLeftOnEnterDef = style({
11150
+ opacity: 0,
11151
+ 'width': '0',
11152
+ paddingLeft: '0',
11153
+ paddingRight: '0'
11154
+ });
11155
+ const slideRightOnEnterAnimation = trigger('slideRightOnEnter', [
11156
+ transition(':enter', [slideLeftOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
11157
+ transition(':leave', [animate('{{duration}}', slideLeftOnEnterDef)], { params: { duration: '100ms' } })
11158
+ ]);
11159
+ const ZERO_WIDTH = {
11160
+ opacity: 0,
11161
+ width: '0',
11162
+ paddingLeft: '0',
11163
+ paddingRight: '0',
11164
+ };
11165
+ const ZERO_HEIGHT = {
11166
+ opacity: 0,
11167
+ height: '0',
11168
+ paddingTop: '0',
11169
+ paddingBottom: '0',
11170
+ };
11171
+ const slideDownAndRightOnEnterAnimation = trigger('slideDownAndRightOnEnter', [
11172
+ transition(':enter', [
11173
+ style({ overflow: "hidden", whiteSpace: "nowrap", ...ZERO_WIDTH, ...ZERO_HEIGHT }),
11174
+ animate('{{duration}}')
11175
+ ], { params: { duration: '100ms' } }),
11176
+ transition(':leave', [
11177
+ style({ overflow: "hidden", whiteSpace: "nowrap" }),
11178
+ group([
11179
+ animate('{{duration}}', style(ZERO_HEIGHT)),
11180
+ // Hack: 100ms is too quick as it animates from * - 0 as we only see it animate the width is greater than the parent.
11181
+ // Not sure how to animate from * to natural new width of parent. This hack won't work for text that's just a little
11182
+ // bit wider than the parent as it'll fall within the parent bounds very early in the animation cycle.
11183
+ animate('300ms', style(ZERO_WIDTH)),
11184
+ ])
11185
+ ], { params: { duration: '100ms' } })
11186
+ ]);
11187
+
11944
11188
  /**
11945
11189
  * @file Automatically generated by barrelsby.
11946
11190
  */
11947
11191
 
11948
- class ResizeObserverDirective extends DisposableComponent {
11949
- aupOnResize = new EventEmitter();
11950
- elementRef = this.inject(ElementRef);
11951
- ngZone = this.inject(NgZone);
11952
- _bounds$ = new MutableValueModel();
11953
- ngAfterViewInit() {
11954
- const element = this.elementRef.nativeElement;
11955
- const ro = new ResizeObserver((entries, observer) => {
11956
- this.ngZone.run(() => this._updateBounds());
11957
- });
11958
- ro.observe(element);
11959
- this.onDispose(() => ro.disconnect());
11960
- setTimeout(() => this._updateBounds());
11961
- }
11962
- get bounds$() {
11963
- return this._bounds$.readonly$;
11964
- }
11965
- _updateBounds() {
11966
- this._bounds$.value = Bounds.ofElement(this.elementRef.nativeElement);
11967
- this.aupOnResize.emit(this._bounds$.value);
11968
- }
11969
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeObserverDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
11970
- 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 });
11971
- }
11972
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeObserverDirective, decorators: [{
11973
- type: Directive,
11974
- args: [{
11975
- selector: "[aupOnResize]",
11976
- standalone: true
11977
- }]
11978
- }], propDecorators: { aupOnResize: [{
11979
- type: Output
11980
- }] } });
11981
-
11982
11192
  /**
11983
11193
  * @file Automatically generated by barrelsby.
11984
11194
  */
@@ -12069,7 +11279,7 @@ class DialogInteractionContextFactory extends ModalInteractionContextFactory {
12069
11279
  };
12070
11280
  return new DialogInteractionContext(identifier, api, this.dialogService, config);
12071
11281
  }
12072
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DialogInteractionContextFactory, deps: [{ token: i1$7.MatDialog }, { token: DIALOG_INTERACTION_SERVICE_DEFAULTS, optional: true }, { token: MAT_DIALOG_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
11282
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DialogInteractionContextFactory, deps: [{ token: i1$6.MatDialog }, { token: DIALOG_INTERACTION_SERVICE_DEFAULTS, optional: true }, { token: MAT_DIALOG_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
12073
11283
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DialogInteractionContextFactory, providedIn: 'root' });
12074
11284
  }
12075
11285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DialogInteractionContextFactory, decorators: [{
@@ -12077,12 +11287,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
12077
11287
  args: [{
12078
11288
  providedIn: 'root'
12079
11289
  }]
12080
- }], ctorParameters: function () { return [{ type: i1$7.MatDialog }, { type: i1$7.MatDialogConfig, decorators: [{
11290
+ }], ctorParameters: function () { return [{ type: i1$6.MatDialog }, { type: i1$6.MatDialogConfig, decorators: [{
12081
11291
  type: Optional
12082
11292
  }, {
12083
11293
  type: Inject,
12084
11294
  args: [DIALOG_INTERACTION_SERVICE_DEFAULTS]
12085
- }] }, { type: i1$7.MatDialogConfig, decorators: [{
11295
+ }] }, { type: i1$6.MatDialogConfig, decorators: [{
12086
11296
  type: Optional
12087
11297
  }, {
12088
11298
  type: Inject,
@@ -12202,7 +11412,6 @@ class PlaceGuard {
12202
11412
  }
12203
11413
  // @Trace()
12204
11414
  async canActivate(activatedRoute, state) {
12205
- await this.placeRouter.waitUntilRouterReady();
12206
11415
  if (PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) {
12207
11416
  const placeDefinition = PlaceComponent.getDefinition(activatedRoute.component);
12208
11417
  if (placeDefinition.authenticate) {
@@ -12315,13 +11524,13 @@ class PlaceGuard {
12315
11524
  return next();
12316
11525
  }
12317
11526
  }
12318
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceGuard, deps: [{ token: i1$5.Router }, { token: UrlService }, { token: PlaceRouter }, { token: PlaceHistory }, { token: InteractionService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
11527
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceGuard, deps: [{ token: i1$4.Router }, { token: UrlService }, { token: PlaceRouter }, { token: PlaceHistory }, { token: InteractionService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
12319
11528
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceGuard, providedIn: 'root' });
12320
11529
  }
12321
11530
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceGuard, decorators: [{
12322
11531
  type: Injectable,
12323
11532
  args: [{ providedIn: 'root' }]
12324
- }], ctorParameters: function () { return [{ type: i1$5.Router }, { type: UrlService }, { type: PlaceRouter }, { type: PlaceHistory }, { type: InteractionService }, { type: i0.Injector }]; } });
11533
+ }], ctorParameters: function () { return [{ type: i1$4.Router }, { type: UrlService }, { type: PlaceRouter }, { type: PlaceHistory }, { type: InteractionService }, { type: i0.Injector }]; } });
12325
11534
 
12326
11535
  var Formatter;
12327
11536
  (function (Formatter) {
@@ -12355,74 +11564,69 @@ var Formatter;
12355
11564
  Formatter.BOOLEAN = new BooleanType();
12356
11565
  })(Formatter || (Formatter = {}));
12357
11566
 
12358
- // function installMechanics<M extends HasValue<any>>(parameterDef: ParameterDefinition<any>, prototype: object, propertyKey: string | symbol, tagPrefix: string) {
12359
- //
12360
- // Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12361
- //
12362
- // function getMechanics(instance: M, propertyName: string | symbol) {
12363
- // const key = `__mechanics_${propertyName.toString()}`;
12364
- // if (!instance[key]) {
12365
- // const backingModel = parameterDef.createBackingModel();
12366
- // instance[key] = {
12367
- // backingModel: backingModel,
12368
- // binding: null as Binding<any, any>
12369
- // };
12370
- // const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
12371
- // DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
12372
- // }
12373
- // return instance[key];
12374
- // }
12375
- //
12376
- // Object.defineProperty(prototype, propertyKey, {
12377
- // get: function() {
12378
- // return getMechanics(this, propertyKey).backingModel;
12379
- // },
12380
- // set: function(userModel: M) {
12381
- // const mechanics = getMechanics(this, propertyKey);
12382
- // // This handles the scenario where we want to push an existing value model (such as a form model)
12383
- // // to and from the route.
12384
- // if (mechanics.binding) {
12385
- // mechanics.binding.dispose();
12386
- // }
12387
- // if (userModel) {
12388
- // mechanics.binding = new Binding(mechanics.backingModel, userModel, {
12389
- // toLeft: Functions.identity,
12390
- // toRight: Functions.identity
12391
- // });
12392
- // if (parameterDef.isEmptyValue(userModel.value)) {
12393
- // // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
12394
- // mechanics.binding.writeRight(); // push the visit into the user model;
12395
- // } else {
12396
- // if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
12397
- // console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
12398
- // }
12399
- // mechanics.binding.writeLeft(); // push the user model into the visit
12400
- // }
12401
- // }
12402
- // }
12403
- // });
12404
- // }
11567
+ function installMechanics(parameterDef, prototype, propertyKey, tagPrefix) {
11568
+ Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11569
+ function getMechanics(instance, propertyName) {
11570
+ const key = `__mechanics_${propertyName.toString()}`;
11571
+ if (!instance[key]) {
11572
+ const backingModel = parameterDef.createBackingModel();
11573
+ instance[key] = {
11574
+ backingModel: backingModel,
11575
+ binding: null
11576
+ };
11577
+ const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
11578
+ DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
11579
+ }
11580
+ return instance[key];
11581
+ }
11582
+ Object.defineProperty(prototype, propertyKey, {
11583
+ get: function () {
11584
+ return getMechanics(this, propertyKey).backingModel;
11585
+ },
11586
+ set: function (userModel) {
11587
+ const mechanics = getMechanics(this, propertyKey);
11588
+ // This handles the scenario where we want to push an existing value model (such as a form model)
11589
+ // to and from the route.
11590
+ if (mechanics.binding) {
11591
+ mechanics.binding.dispose();
11592
+ }
11593
+ if (userModel) {
11594
+ mechanics.binding = new Binding(mechanics.backingModel, userModel, {
11595
+ toLeft: Functions.identity,
11596
+ toRight: Functions.identity
11597
+ });
11598
+ if (parameterDef.isEmptyValue(userModel.value)) {
11599
+ // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
11600
+ mechanics.binding.writeRight(); // push the visit into the user model;
11601
+ }
11602
+ else {
11603
+ if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
11604
+ console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
11605
+ }
11606
+ mechanics.binding.writeLeft(); // push the user model into the visit
11607
+ }
11608
+ }
11609
+ }
11610
+ });
11611
+ }
12405
11612
  function RouteId(formatter, options) {
12406
11613
  return (prototype, propertyKey) => {
12407
11614
  const parameterDef = new ParameterDefinition.RouteId(propertyKey.toString(), options, formatter);
12408
- // installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
12409
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11615
+ installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
12410
11616
  };
12411
11617
  }
12412
11618
  function VisitParameter(options) {
12413
11619
  const opts = Opts.get(options);
12414
11620
  return (prototype, propertyKey) => {
12415
11621
  const parameterDef = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
12416
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12417
- // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
11622
+ installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
12418
11623
  };
12419
11624
  }
12420
11625
  function VisitParameterList(options) {
12421
11626
  const opts = Opts.get(options);
12422
11627
  return (prototype, propertyKey) => {
12423
11628
  const parameterDef = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
12424
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12425
- // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
11629
+ installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
12426
11630
  };
12427
11631
  }
12428
11632
 
@@ -12516,5 +11720,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
12516
11720
  * Generated bundle index. Do not edit.
12517
11721
  */
12518
11722
 
12519
- export { ACTIVITY_DATA, ALERT_CONFIG, AUP_PLACE_CONFIG, AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER, AUP_UNAUTHORISED_PLACE_NOTICE_COMPONENT, AbstractActivityTriggerComponent, AbstractCardContainerComponent, AbstractCellRenderer, 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, CellFooterPortalRef, 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, FOOTER_CELL_RENDERER_PORTAL, FlattenedTreeListModel, FlexComponent, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, FooterRowModel, Formatter, GarbageCollectorDirective, HEADER_CELL_RENDERER_PORTAL, HighlightPipe, HighlightTextModelDirective, HorizontalAlignment, INTERACTION_CONTEXT, 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, TableFooterRow, 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 };
11723
+ 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 };
12520
11724
  //# sourceMappingURL=coolon-angular-ui-powerups.mjs.map