@coolon/angular-ui-powerups 16.1.0-aplpha.119 → 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 +39 -30
  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 +566 -1365
  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 -15
  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 -7
  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 -6
  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, proxify, ValueModel, Proxify, Logger, 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';
45
- import { __decorate, __metadata, __param } from 'tslib';
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';
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;
@@ -186,32 +187,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
186
187
  args: ['click', ['$event']]
187
188
  }] } });
188
189
 
189
- class HighlightTextModelDirective extends GarbageCollector {
190
- #aupHighlightTextModel_accessor_storage = proxify((ValueModel));
191
- get aupHighlightTextModel() { return this.#aupHighlightTextModel_accessor_storage; }
192
- set aupHighlightTextModel(value) { this.#aupHighlightTextModel_accessor_storage = value; }
193
- constructor() {
194
- super();
195
- }
196
- ngOnDestroy() {
197
- this.dispose();
198
- }
199
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: HighlightTextModelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
200
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: HighlightTextModelDirective, selector: "[aupHighlightTextModel]", inputs: { aupHighlightTextModel: "aupHighlightTextModel" }, usesInheritance: true, ngImport: i0 });
201
- }
202
- __decorate([
203
- Proxify(),
204
- __metadata("design:type", Object)
205
- ], HighlightTextModelDirective.prototype, "aupHighlightTextModel", null);
206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: HighlightTextModelDirective, decorators: [{
207
- type: Directive,
208
- args: [{
209
- selector: '[aupHighlightTextModel]'
210
- }]
211
- }], ctorParameters: function () { return []; }, propDecorators: { aupHighlightTextModel: [{
212
- type: Input
213
- }] } });
214
-
215
190
  var Track;
216
191
  (function (Track) {
217
192
  Track.byIndex = (index, item) => index;
@@ -238,19 +213,11 @@ var Track;
238
213
 
239
214
  class DisposableComponent extends GarbageCollector {
240
215
  trackById = Track.byId();
241
- // #_loaded$ = new MutableValueModel<boolean>();
242
- // #asyncLoadables: Loadable[] = [];
243
- // #awaitedLoadables: Loadable[] = [];
216
+ #_loaded$ = new MutableValueModel();
217
+ #asyncLoadables = [];
218
+ #awaitedLoadables = [];
244
219
  #initCallbacks = [];
245
220
  #initialised = false;
246
- cdr = this.inject(ChangeDetectorRef);
247
- highlightContext = this.inject(HighlightTextModelDirective);
248
- constructor() {
249
- super();
250
- if (this.highlightContext) { // the component might be rendered outside a table
251
- this.viewStateDependsOn(this.highlightContext.aupHighlightTextModel);
252
- }
253
- }
254
221
  onInit(callback) {
255
222
  if (this.#initialised) {
256
223
  callback();
@@ -259,33 +226,51 @@ class DisposableComponent extends GarbageCollector {
259
226
  this.#initCallbacks.push(callback);
260
227
  }
261
228
  }
229
+ get loaded$() {
230
+ return this.#_loaded$.readonly$;
231
+ }
262
232
  ngOnInit() {
263
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
+ }
264
245
  this.#initialised = true;
265
246
  }
266
- ngOnDestroy() {
267
- this.dispose();
268
- }
269
247
  inject(token) {
270
248
  return inject(token);
271
249
  }
272
- /**
273
- * Monitors the specified models for any change and triggers and angular change detect cycle. This is intended for use
274
- * when the component uses the ON_PUSH change detection strategy or when it is contained within another component that
275
- * does (e.g. aup-table, aup-tree-table)
276
- * @param models
277
- * @protected
278
- */
279
- viewStateDependsOn(...models) {
280
- const { when } = Dsl.disposeWith(this);
281
- 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;
282
264
  }
283
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DisposableComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
265
+ ngOnDestroy() {
266
+ this.dispose();
267
+ }
268
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DisposableComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
284
269
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: DisposableComponent, usesInheritance: true, ngImport: i0 });
285
270
  }
286
271
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DisposableComponent, decorators: [{
287
272
  type: Directive
288
- }], ctorParameters: function () { return []; } });
273
+ }] });
289
274
 
290
275
  let FocusBinding = class FocusBinding extends GarbageCollector {
291
276
  focusTargetElement;
@@ -481,6 +466,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
481
466
  }]
482
467
  }], ctorParameters: function () { return []; } });
483
468
 
469
+ class HighlightTextModelDirective extends GarbageCollector {
470
+ #aupHighlightTextModel_accessor_storage = proxify((ValueModel));
471
+ get aupHighlightTextModel() { return this.#aupHighlightTextModel_accessor_storage; }
472
+ set aupHighlightTextModel(value) { this.#aupHighlightTextModel_accessor_storage = value; }
473
+ constructor() {
474
+ super();
475
+ }
476
+ ngOnDestroy() {
477
+ this.dispose();
478
+ }
479
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: HighlightTextModelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
480
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: HighlightTextModelDirective, selector: "[aupHighlightTextModel]", inputs: { aupHighlightTextModel: "aupHighlightTextModel" }, usesInheritance: true, ngImport: i0 });
481
+ }
482
+ __decorate([
483
+ Proxify(),
484
+ __metadata("design:type", Object)
485
+ ], HighlightTextModelDirective.prototype, "aupHighlightTextModel", null);
486
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: HighlightTextModelDirective, decorators: [{
487
+ type: Directive,
488
+ args: [{
489
+ selector: '[aupHighlightTextModel]'
490
+ }]
491
+ }], ctorParameters: function () { return []; }, propDecorators: { aupHighlightTextModel: [{
492
+ type: Input
493
+ }] } });
494
+
484
495
  class HighlightPipe extends GarbageCollector {
485
496
  sanitizer;
486
497
  highlightContext;
@@ -725,42 +736,42 @@ var CommandFace;
725
736
  }
726
737
  }
727
738
  __decorate([
728
- MemoizeGet(),
739
+ Memoize(),
729
740
  __metadata("design:type", Object),
730
741
  __metadata("design:paramtypes", [])
731
742
  ], Adapter.prototype, "text", null);
732
743
  __decorate([
733
- MemoizeGet(),
744
+ Memoize(),
734
745
  __metadata("design:type", Object),
735
746
  __metadata("design:paramtypes", [])
736
747
  ], Adapter.prototype, "icon", null);
737
748
  __decorate([
738
- MemoizeGet(),
749
+ Memoize(),
739
750
  __metadata("design:type", Object),
740
751
  __metadata("design:paramtypes", [])
741
752
  ], Adapter.prototype, "iconPosition", null);
742
753
  __decorate([
743
- MemoizeGet(),
754
+ Memoize(),
744
755
  __metadata("design:type", Object),
745
756
  __metadata("design:paramtypes", [])
746
757
  ], Adapter.prototype, "tooltip", null);
747
758
  __decorate([
748
- MemoizeGet(),
759
+ Memoize(),
749
760
  __metadata("design:type", Boolean),
750
761
  __metadata("design:paramtypes", [])
751
762
  ], Adapter.prototype, "iconPositionStart", null);
752
763
  __decorate([
753
- MemoizeGet(),
764
+ Memoize(),
754
765
  __metadata("design:type", Boolean),
755
766
  __metadata("design:paramtypes", [])
756
767
  ], Adapter.prototype, "iconPositionEnd", null);
757
768
  __decorate([
758
- MemoizeGet(),
769
+ Memoize(),
759
770
  __metadata("design:type", String),
760
771
  __metadata("design:paramtypes", [])
761
772
  ], Adapter.prototype, "color", null);
762
773
  __decorate([
763
- MemoizeGet(),
774
+ Memoize(),
764
775
  __metadata("design:type", String),
765
776
  __metadata("design:paramtypes", [])
766
777
  ], Adapter.prototype, "style", null);
@@ -831,7 +842,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
831
842
  args: ["class.disable-scroll"]
832
843
  }] } });
833
844
 
834
- /* eslint-disable @angular-eslint/no-host-metadata-property */
835
845
  class IconComponent {
836
846
  _icon;
837
847
  prefix;
@@ -863,13 +873,11 @@ class IconComponent {
863
873
  return `fa-${this.suffix}`;
864
874
  }
865
875
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
866
- 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"] }] });
867
877
  }
868
878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IconComponent, decorators: [{
869
879
  type: Component,
870
- args: [{ selector: 'aup-icon', changeDetection: ChangeDetectionStrategy.OnPush, host: {
871
- class: "mat-icon" // this ensures angular form styles that target mat icon also work with us
872
- }, 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"] }]
873
881
  }], propDecorators: { icon: [{
874
882
  type: Input
875
883
  }, {
@@ -900,7 +908,6 @@ class CommandFaceComponent extends DisposableComponent {
900
908
  // tslint:disable-next-line:no-input-rename
901
909
  get _rawFaces() { return this.#_rawFaces_accessor_storage; }
902
910
  set _rawFaces(value) { this.#_rawFaces_accessor_storage = value; }
903
- hasTextAndLeadingIcon$;
904
911
  set face(face) {
905
912
  this.faces$.value = [face];
906
913
  }
@@ -920,7 +927,6 @@ class CommandFaceComponent extends DisposableComponent {
920
927
  const activeFace = this.faceAdapters.first();
921
928
  this.activeIcon = activeFace.pluck("icon");
922
929
  this.activeColor = activeFace.pluck("color");
923
- this.hasTextAndLeadingIcon$ = valueOf.all(this.activeIcon.isNotNil(), activeFace.pluckString('text').isNotBlank(), activeFace.pluck("iconPosition").doesNotEqual(CommandFace.Position.END)).areTruthy();
924
930
  }
925
931
  shouldIncludeIcon(face) {
926
932
  return (!this.ignoreIcon && face.icon) || this.includeMissingIconInLayout;
@@ -934,11 +940,8 @@ class CommandFaceComponent extends DisposableComponent {
934
940
  get color() {
935
941
  return this.activeColor.value;
936
942
  }
937
- get hasTextAndIcon() {
938
- return this.hasTextAndLeadingIcon$.value;
939
- }
940
943
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandFaceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
941
- 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 });
942
945
  }
943
946
  __decorate([
944
947
  StoreInListModel("faces$"),
@@ -946,7 +949,7 @@ __decorate([
946
949
  ], CommandFaceComponent.prototype, "_rawFaces", null);
947
950
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandFaceComponent, decorators: [{
948
951
  type: Component,
949
- 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"] }]
950
953
  }], ctorParameters: function () { return []; }, propDecorators: { _rawFaces: [{
951
954
  type: Input,
952
955
  args: ['faces']
@@ -964,9 +967,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
964
967
  }], color: [{
965
968
  type: HostBinding,
966
969
  args: ['attr.color']
967
- }], hasTextAndIcon: [{
968
- type: HostBinding,
969
- args: ['class.has-text-and-leading-icon']
970
970
  }] } });
971
971
 
972
972
  /**
@@ -1070,11 +1070,11 @@ class CardContainerComponent extends AbstractCardContainerComponent {
1070
1070
  }
1071
1071
  }
1072
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 });
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], [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"] }] });
1074
1074
  }
1075
1075
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CardContainerComponent, decorators: [{
1076
1076
  type: Component,
1077
- 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"] }]
1078
1078
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { columnCount: [{
1079
1079
  type: Input
1080
1080
  }], enableScroll: [{
@@ -1150,24 +1150,14 @@ class CommandComponent extends PopupAwareComponent {
1150
1150
  activeFace$;
1151
1151
  iconOnly$;
1152
1152
  tooltip$;
1153
- visible$;
1154
1153
  constructor(element, parent) {
1155
1154
  super(element, parent);
1156
1155
  const { chain, switchOn } = Dsl.disposeWith(this);
1157
- this.faces$ = chain(this.command.busy$)
1158
- .mapToList(busy => {
1156
+ this.faces$ = chain(this.command.busy$).mapToList(busy => {
1159
1157
  return busy ?
1160
- [this.busyFace$.value ?? this.command.busyFace$.value, this.face$.value ?? this.command.defaultFace$.value] :
1161
- [this.face$.value ?? this.command.defaultFace$.value, this.busyFace$.value ?? this.command.busyFace$.value];
1162
- }, {
1163
- allowNil: true,
1164
- dependsOn: [
1165
- this.face$,
1166
- this.busyFace$,
1167
- this.command.defaultFace$,
1168
- this.command.busyFace$
1169
- ]
1170
- })
1158
+ [this.busyFace$.value, this.face$.value] :
1159
+ [this.face$.value, this.busyFace$.value];
1160
+ }, { allowNil: true, dependsOn: [this.face$, this.busyFace$] })
1171
1161
  .rejectNil();
1172
1162
  this.activeFace$ = this.faces$.first();
1173
1163
  this.buttonStyle$ = chain(this.activeFace$).map(f => CommandFace.getStyleOf(f));
@@ -1176,19 +1166,18 @@ class CommandComponent extends PopupAwareComponent {
1176
1166
  this.iconOnly$ = this.faces$.select(face => {
1177
1167
  return isEmpty(CommandFace.getTextOf(face)) && !isEmpty(CommandFace.getIconOf(face));
1178
1168
  }).count().equals(this.faces$.count());
1179
- this.visible$ = chain(this.command.visible$);
1180
- }
1181
- get cssDisplayProperty() {
1182
- return this.visible$.value ? undefined : 'none';
1183
1169
  }
1184
1170
  isActive(face) {
1185
1171
  return this.activeFace$.query().equals(face);
1186
1172
  }
1173
+ getFace() {
1174
+ return this.face;
1175
+ }
1187
1176
  requestFocus() {
1188
1177
  this.button.focus();
1189
1178
  }
1190
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 });
1191
- 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"] }] });
1192
1181
  }
1193
1182
  __decorate([
1194
1183
  Proxify(),
@@ -1236,9 +1225,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1236
1225
  }], button: [{
1237
1226
  type: ViewChild,
1238
1227
  args: [MatButton]
1239
- }], cssDisplayProperty: [{
1240
- type: HostBinding,
1241
- args: ["style.display"]
1242
1228
  }] } });
1243
1229
 
1244
1230
  /**
@@ -1266,12 +1252,12 @@ class AbstractPopupMenuComponent extends PopupAwareComponent {
1266
1252
  xPosition = 'after';
1267
1253
  yPosition = 'below';
1268
1254
  triggers;
1255
+ #enabled_accessor_storage;
1256
+ get enabled() { return this.#enabled_accessor_storage; }
1257
+ set enabled(value) { this.#enabled_accessor_storage = value; }
1269
1258
  #enabled$_accessor_storage = proxify((ValueModel));
1270
1259
  get enabled$() { return this.#enabled$_accessor_storage; }
1271
1260
  set enabled$(value) { this.#enabled$_accessor_storage = value; }
1272
- #enabled_accessor_storage = true;
1273
- get enabled() { return this.#enabled_accessor_storage; }
1274
- set enabled(value) { this.#enabled_accessor_storage = value; }
1275
1261
  children;
1276
1262
  faces$;
1277
1263
  constructor(element, parent) {
@@ -1313,16 +1299,16 @@ class AbstractPopupMenuComponent extends PopupAwareComponent {
1313
1299
  return this.faceAdapter.face;
1314
1300
  }
1315
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 });
1316
- 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 });
1317
1303
  }
1304
+ __decorate([
1305
+ StoreInValueModel(),
1306
+ __metadata("design:type", Boolean)
1307
+ ], AbstractPopupMenuComponent.prototype, "enabled", null);
1318
1308
  __decorate([
1319
1309
  Proxify(),
1320
1310
  __metadata("design:type", Object)
1321
1311
  ], AbstractPopupMenuComponent.prototype, "enabled$", null);
1322
- __decorate([
1323
- StoreInValueModel(),
1324
- __metadata("design:type", Object)
1325
- ], AbstractPopupMenuComponent.prototype, "enabled", null);
1326
1312
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractPopupMenuComponent, decorators: [{
1327
1313
  type: Component,
1328
1314
  args: [{ selector: 'aup-abstract-popup-menu', template: '' }]
@@ -1336,10 +1322,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1336
1322
  }], triggers: [{
1337
1323
  type: ViewChildren,
1338
1324
  args: [MatMenuTrigger]
1339
- }], enabled$: [{
1340
- type: Input
1341
1325
  }], enabled: [{
1342
1326
  type: Input
1327
+ }], enabled$: [{
1328
+ type: Input
1343
1329
  }] } });
1344
1330
 
1345
1331
  class CommandContainer extends GarbageCollector {
@@ -1372,15 +1358,13 @@ class ToolBarComponent extends CommandContainer {
1372
1358
  get orientation() {
1373
1359
  return CommandContainer.Orientation.HORIZONTAL;
1374
1360
  }
1375
- 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 });
1376
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 });
1377
1363
  }
1378
1364
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ToolBarComponent, decorators: [{
1379
1365
  type: Component,
1380
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"] }]
1381
- }], ctorParameters: function () { return [{ type: CommandContainer, decorators: [{
1382
- type: Optional
1383
- }] }]; } });
1367
+ }], ctorParameters: function () { return [{ type: CommandContainer }]; } });
1384
1368
 
1385
1369
  /**
1386
1370
  *
@@ -1691,6 +1675,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1691
1675
  args: ['blur']
1692
1676
  }] } });
1693
1677
 
1678
+ /* tslint:disable:no-input-rename */
1694
1679
  const INPUT_TOKEN_HACK = new InjectionToken("INPUT_TOKEN_HACK");
1695
1680
  class AbstractInputComponent extends DisposableComponent {
1696
1681
  onValueEditedListeners = new EventListenerList();
@@ -1705,16 +1690,11 @@ class AbstractInputComponent extends DisposableComponent {
1705
1690
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
1706
1691
  */
1707
1692
  formValue$;
1708
- #i18n$_accessor_storage = proxify((MutableValueModel));
1709
- get i18n$() { return this.#i18n$_accessor_storage; }
1710
- set i18n$(value) { this.#i18n$_accessor_storage = value; }
1711
- #i18n_accessor_storage;
1712
- get i18n() { return this.#i18n_accessor_storage; }
1713
- set i18n(value) { this.#i18n_accessor_storage = value; }
1714
- _label;
1693
+ label;
1694
+ // eslint-disable-next-line @angular-eslint/no-input-rename
1715
1695
  userFloatLabel = 'always'; // TODO: make this an injectable default
1716
- _hint;
1717
- _placeholder;
1696
+ hint;
1697
+ placeholder;
1718
1698
  dense = false;
1719
1699
  _enabled$ = this.registerDisposable(new DelegatingValueModel());
1720
1700
  set enabled$(condition$) {
@@ -1781,9 +1761,6 @@ class AbstractInputComponent extends DisposableComponent {
1781
1761
  isEnabled() {
1782
1762
  return this.enabled$.value;
1783
1763
  }
1784
- get disabled() {
1785
- return !this.isEnabled();
1786
- }
1787
1764
  hasErrors() {
1788
1765
  return !this.errorList$.query().isEmpty();
1789
1766
  }
@@ -1796,15 +1773,6 @@ class AbstractInputComponent extends DisposableComponent {
1796
1773
  get focusContext() {
1797
1774
  return this.formValue$.focusContext;
1798
1775
  }
1799
- get label() {
1800
- return this._label ?? this.i18n?.label();
1801
- }
1802
- get hint() {
1803
- return this._hint ?? this.hackyGetI18n("hint");
1804
- }
1805
- get placeholder() {
1806
- return this._placeholder ?? this.hackyGetI18n("placeholder");
1807
- }
1808
1776
  get floatLabel() {
1809
1777
  // return this.dense ? 'never' : this.userFloatLabel;
1810
1778
  return this.userFloatLabel;
@@ -1819,45 +1787,24 @@ class AbstractInputComponent extends DisposableComponent {
1819
1787
  onValueEdited(callback) {
1820
1788
  return this.onValueEditedListeners.add(callback);
1821
1789
  }
1822
- hackyGetI18n(key) {
1823
- // TODO: update I18n to make it possible to get an optional value with return the missing key message.
1824
- const i18nFn = this.i18n ? this.i18n[key] : undefined;
1825
- const i18nValue = i18nFn && i18nFn();
1826
- return i18nValue?.startsWith("missing key") ? undefined : i18nValue;
1827
- }
1828
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 });
1829
- 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 });
1830
1792
  }
1831
- __decorate([
1832
- Proxify(),
1833
- __metadata("design:type", Object)
1834
- ], AbstractInputComponent.prototype, "i18n$", null);
1835
- __decorate([
1836
- StoreInValueModel(),
1837
- __metadata("design:type", Object)
1838
- ], AbstractInputComponent.prototype, "i18n", null);
1839
1793
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractInputComponent, decorators: [{
1840
1794
  type: Component,
1841
1795
  args: [{ template: '' }]
1842
1796
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1843
1797
  type: Inject,
1844
1798
  args: [INPUT_TOKEN_HACK]
1845
- }] }]; }, propDecorators: { i18n$: [{
1799
+ }] }]; }, propDecorators: { label: [{
1846
1800
  type: Input
1847
- }], i18n: [{
1848
- type: Input
1849
- }], _label: [{
1850
- type: Input,
1851
- args: ["label"]
1852
1801
  }], userFloatLabel: [{
1853
1802
  type: Input,
1854
1803
  args: ['floatLabel']
1855
- }], _hint: [{
1856
- type: Input,
1857
- args: ['hint']
1858
- }], _placeholder: [{
1859
- type: Input,
1860
- args: ['placeholder']
1804
+ }], hint: [{
1805
+ type: Input
1806
+ }], placeholder: [{
1807
+ type: Input
1861
1808
  }], dense: [{
1862
1809
  type: HostBinding,
1863
1810
  args: ['class.dense']
@@ -1900,9 +1847,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1900
1847
  }], notifyFocusOut: [{
1901
1848
  type: HostListener,
1902
1849
  args: ['focusout']
1903
- }], disabled: [{
1904
- type: HostBinding,
1905
- args: ["class.disabled"]
1906
1850
  }] } });
1907
1851
 
1908
1852
  class AbstractListInputComponent extends AbstractInputComponent {
@@ -2140,15 +2084,12 @@ class CheckboxInputComponent extends AbstractValueInputComponent {
2140
2084
  constructor() {
2141
2085
  super();
2142
2086
  }
2143
- select($event) {
2144
- this.componentValue$.value = $event.checked;
2145
- }
2146
2087
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CheckboxInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2147
- 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"] }] });
2148
2089
  }
2149
2090
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CheckboxInputComponent, decorators: [{
2150
2091
  type: Component,
2151
- 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"] }]
2152
2093
  }], ctorParameters: function () { return []; }, propDecorators: { color: [{
2153
2094
  type: Input
2154
2095
  }], labelPosition: [{
@@ -2187,7 +2128,7 @@ class MultipleSelectInputComponent extends AbstractListInputComponent {
2187
2128
  const self = this;
2188
2129
  this.registerDisposable(new Binding(this.componentList$, this.ids$, {
2189
2130
  toLeft(selectedItems, currentLeftValue) {
2190
- const newValues = selectedItems.map(it => lookup.get(it)).filter(it => !!it);
2131
+ const newValues = selectedItems.map(it => lookup.get(it)).filter(it => !it);
2191
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
2192
2133
  return newValues.length < 1 && selectedItems.length > 0 ? currentLeftValue : newValues;
2193
2134
  },
@@ -2198,7 +2139,7 @@ class MultipleSelectInputComponent extends AbstractListInputComponent {
2198
2139
  })).writeRight();
2199
2140
  }
2200
2141
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: MultipleSelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2201
- 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"] }] });
2202
2143
  }
2203
2144
  __decorate([
2204
2145
  Proxify(),
@@ -2226,142 +2167,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2226
2167
 
2227
2168
  class NumberInputComponent extends AbstractValueInputComponent {
2228
2169
  autocomplete;
2229
- #min$_accessor_storage = proxify((ValueModel));
2230
- get min$() { return this.#min$_accessor_storage; }
2231
- set min$(value) { this.#min$_accessor_storage = value; }
2232
- #min_accessor_storage = Number.MIN_SAFE_INTEGER;
2233
- get min() { return this.#min_accessor_storage; }
2234
- set min(value) { this.#min_accessor_storage = value; }
2235
- #max$_accessor_storage = proxify((ValueModel));
2236
- get max$() { return this.#max$_accessor_storage; }
2237
- set max$(value) { this.#max$_accessor_storage = value; }
2238
- #max_accessor_storage = Number.MAX_SAFE_INTEGER;
2239
- get max() { return this.#max_accessor_storage; }
2240
- set max(value) { this.#max_accessor_storage = value; }
2241
- incrementCommand;
2242
- decrementCommand;
2170
+ min = Number.MIN_SAFE_INTEGER;
2171
+ max = Number.MAX_SAFE_INTEGER;
2172
+ iconPrefix;
2243
2173
  constructor() {
2244
2174
  super();
2245
- const { chain } = Dsl.disposeWith(this);
2246
- const normalisedValue$ = chain(this.value$).otherwise(0);
2247
- this.incrementCommand = Command.create(() => {
2248
- this.value$.value = normalisedValue$.value + 1;
2249
- }).enableWhile(chain.numericValue(normalisedValue$).isLessThan(this.max$).and(this.enabled$));
2250
- this.decrementCommand = Command.create(() => {
2251
- this.value$.value = normalisedValue$.value - 1;
2252
- }).enableWhile(chain.numericValue(normalisedValue$).isGreaterThan(this.min$).and(this.enabled$));
2253
2175
  }
2254
2176
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: NumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2255
- 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"] }] });
2256
2178
  }
2257
- __decorate([
2258
- Proxify(),
2259
- __metadata("design:type", ValueModel)
2260
- ], NumberInputComponent.prototype, "min$", null);
2261
- __decorate([
2262
- StoreInValueModel(),
2263
- __metadata("design:type", Object)
2264
- ], NumberInputComponent.prototype, "min", null);
2265
- __decorate([
2266
- Proxify(),
2267
- __metadata("design:type", ValueModel)
2268
- ], NumberInputComponent.prototype, "max$", null);
2269
- __decorate([
2270
- StoreInValueModel(),
2271
- __metadata("design:type", Object)
2272
- ], NumberInputComponent.prototype, "max", null);
2273
2179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: NumberInputComponent, decorators: [{
2274
2180
  type: Component,
2275
- 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" }]
2276
2182
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2277
2183
  type: Input
2278
- }], min$: [{
2279
- type: Input
2280
2184
  }], min: [{
2281
2185
  type: Input
2282
- }], max$: [{
2283
- type: Input
2284
2186
  }], max: [{
2285
2187
  type: Input
2188
+ }], iconPrefix: [{
2189
+ type: Input
2286
2190
  }] } });
2287
2191
 
2288
2192
  class PasswordInputComponent extends AbstractValueInputComponent {
2289
2193
  autocomplete;
2290
- #enableShowPassword$_accessor_storage = proxify((ValueModel));
2291
- get enableShowPassword$() { return this.#enableShowPassword$_accessor_storage; }
2292
- set enableShowPassword$(value) { this.#enableShowPassword$_accessor_storage = value; }
2293
- #enableShowPassword_accessor_storage = false;
2294
- get enableShowPassword() { return this.#enableShowPassword_accessor_storage; }
2295
- set enableShowPassword(value) { this.#enableShowPassword_accessor_storage = value; }
2296
- showPassword$ = new MutableValueModel(false);
2297
- toggleShowPasswordCommand;
2298
2194
  constructor() {
2299
2195
  super();
2300
- const { chain, valueOf } = Dsl.disposeWith(this);
2301
- const face$ = chain(this.showPassword$).map(show => {
2302
- return {
2303
- icon: () => show ? "mat:visibility_off" : "mat:visibility"
2304
- };
2305
- });
2306
- this.toggleShowPasswordCommand = Command.create(() => {
2307
- this.showPassword$.value = !this.showPassword$.value;
2308
- })
2309
- .withFace(face$)
2310
- .enableWhile(chain.stringValue(this.componentValue$).isNotBlank());
2311
- }
2312
- get fieldType() {
2313
- return this.showPassword$.value ? "text" : "password";
2314
2196
  }
2315
2197
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PasswordInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2316
- 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"] }] });
2317
2199
  }
2318
- __decorate([
2319
- Proxify(),
2320
- __metadata("design:type", Object)
2321
- ], PasswordInputComponent.prototype, "enableShowPassword$", null);
2322
- __decorate([
2323
- StoreInValueModel(),
2324
- __metadata("design:type", Object)
2325
- ], PasswordInputComponent.prototype, "enableShowPassword", null);
2326
2200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PasswordInputComponent, decorators: [{
2327
2201
  type: Component,
2328
- 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" }]
2329
- }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2330
- type: Input
2331
- }], enableShowPassword$: [{
2332
- type: Input
2333
- }], enableShowPassword: [{
2334
- type: Input
2335
- }] } });
2336
-
2337
- class SearchInputComponent extends AbstractValueInputComponent {
2338
- autocomplete;
2339
- clearCommand;
2340
- constructor() {
2341
- super();
2342
- this.dense = true;
2343
- const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2344
- this.clearCommand = Command.create(() => {
2345
- this.componentValue$.value = "";
2346
- });
2347
- this.clearCommand.disableWhile(chain.stringValue(this.componentValue$).isBlank());
2348
- }
2349
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2350
- 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"] }] });
2351
- }
2352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SearchInputComponent, decorators: [{
2353
- type: Component,
2354
- 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" }]
2355
2203
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2356
2204
  type: Input
2357
2205
  }] } });
2358
2206
 
2359
2207
  /**
2360
2208
  * Using templates:
2361
- * <aup-select-input [value$]="myModel" [options]="myOptions">
2209
+ * <aup-select-input [valueModel]="myModel" [options]="myOptions">
2362
2210
  * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
2363
- * <ng-template #selectedOptionTemplate let-option>{{option.thePropertyYouWant}} note, not used for nils (the placeholder is used)</ng-template>
2364
- * <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>
2365
2212
  * </aup-select_input>
2366
2213
  */
2367
2214
  class SelectInputComponent extends AbstractValueInputComponent {
@@ -2386,7 +2233,7 @@ class SelectInputComponent extends AbstractValueInputComponent {
2386
2233
  super();
2387
2234
  const { chain } = Dsl.disposeWith(this);
2388
2235
  this.cookedOptions$ = chain(this.options$)
2389
- .mapAll(options => {
2236
+ .reduceToList(options => {
2390
2237
  return options.length < 1 && !isNil(this.componentValue$.value) ? [this.componentValue$.value] : options;
2391
2238
  }, {
2392
2239
  dependsOn: this.componentValue$
@@ -2425,21 +2272,21 @@ class SelectInputComponent extends AbstractValueInputComponent {
2425
2272
  id: this.delegatedIdentityOf(value)
2426
2273
  });
2427
2274
  let lastIdSnapshot = snapshotValueAndId(this.componentValue$.value);
2428
- // console.log(lastIdSnapshot)
2275
+ console.log(lastIdSnapshot);
2429
2276
  before(this.options$).changes(() => {
2430
2277
  lastIdSnapshot = snapshotValueAndId(this.componentValue$.value);
2431
- // console.log(lastIdSnapshot)
2278
+ console.log(lastIdSnapshot);
2432
2279
  });
2433
2280
  when(this.options$).changes((is, was) => {
2434
2281
  const newIdSnapshot = snapshotValueAndId(lastIdSnapshot.value);
2435
- // console.log(lastIdSnapshot, newIdSnapshot)
2282
+ console.log(lastIdSnapshot, newIdSnapshot);
2436
2283
  if (newIdSnapshot !== lastIdSnapshot.id) {
2437
2284
  this.id$.value = this.delegatedIdentityOf(this.componentValue$.value);
2438
2285
  }
2439
2286
  });
2440
2287
  }
2441
2288
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2442
- 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"] }] });
2443
2290
  }
2444
2291
  __decorate([
2445
2292
  Proxify(),
@@ -2451,7 +2298,7 @@ __decorate([
2451
2298
  ], SelectInputComponent.prototype, "options", null);
2452
2299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputComponent, decorators: [{
2453
2300
  type: Component,
2454
- 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"] }]
2455
2302
  }], ctorParameters: function () { return []; }, propDecorators: { options$: [{
2456
2303
  type: Input
2457
2304
  }], options: [{
@@ -2482,24 +2329,17 @@ class StringInputComponent extends AbstractValueInputComponent {
2482
2329
  get enableClear() { return this.#enableClear_accessor_storage; }
2483
2330
  set enableClear(value) { this.#enableClear_accessor_storage = value; }
2484
2331
  iconPrefix;
2485
- #suffixCommand_accessor_storage = proxify(Command);
2486
- get suffixCommand() { return this.#suffixCommand_accessor_storage; }
2487
- set suffixCommand(value) { this.#suffixCommand_accessor_storage = value; }
2488
2332
  clearCommand;
2489
2333
  constructor() {
2490
2334
  super();
2491
2335
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2492
2336
  this.clearCommand = Command.create(() => {
2493
2337
  this.componentValue$.value = "";
2494
- })
2495
- .withFace({ icon: () => "mat:clear" })
2496
- .enableWhile(chain.stringValue(this.componentValue$).isNotBlank());
2497
- }
2498
- get hasSuffixCommand() {
2499
- return Proxify.hasTarget(this.suffixCommand);
2338
+ });
2339
+ this.clearCommand.disableWhile(chain.stringValue(this.componentValue$).isBlank());
2500
2340
  }
2501
2341
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2502
- 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"] }] });
2503
2343
  }
2504
2344
  __decorate([
2505
2345
  Proxify(),
@@ -2509,13 +2349,9 @@ __decorate([
2509
2349
  StoreInValueModel(),
2510
2350
  __metadata("design:type", Object)
2511
2351
  ], StringInputComponent.prototype, "enableClear", null);
2512
- __decorate([
2513
- Proxify(),
2514
- __metadata("design:type", Command)
2515
- ], StringInputComponent.prototype, "suffixCommand", null);
2516
2352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, decorators: [{
2517
2353
  type: Component,
2518
- 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"] }]
2519
2355
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2520
2356
  type: Input
2521
2357
  }], enableClear$: [{
@@ -2524,8 +2360,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2524
2360
  type: Input
2525
2361
  }], iconPrefix: [{
2526
2362
  type: Input
2527
- }], suffixCommand: [{
2528
- type: Input
2529
2363
  }] } });
2530
2364
 
2531
2365
  class TextInputComponent extends AbstractValueInputComponent {
@@ -2713,6 +2547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2713
2547
  * </aup-switch-case>
2714
2548
  */
2715
2549
  class SwitchCaseComponent extends DisposableComponent {
2550
+ cdr;
2716
2551
  #switch$_accessor_storage = proxify((ValueModel));
2717
2552
  get switch$() { return this.#switch$_accessor_storage; }
2718
2553
  set switch$(value) { this.#switch$_accessor_storage = value; }
@@ -2721,8 +2556,9 @@ class SwitchCaseComponent extends DisposableComponent {
2721
2556
  set switch(value) { this.#switch_accessor_storage = value; }
2722
2557
  switchCaseOptions;
2723
2558
  selectedIndex = 0;
2724
- constructor() {
2559
+ constructor(cdr) {
2725
2560
  super();
2561
+ this.cdr = cdr;
2726
2562
  }
2727
2563
  ngAfterContentInit() {
2728
2564
  const subscription = this.switchCaseOptions.changes.subscribe(change => this.updateSelection());
@@ -2759,8 +2595,8 @@ class SwitchCaseComponent extends DisposableComponent {
2759
2595
  this.selectedIndex = -1;
2760
2596
  }
2761
2597
  }
2762
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SwitchCaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2763
- 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"] }] });
2764
2600
  }
2765
2601
  __decorate([
2766
2602
  Proxify(),
@@ -2773,7 +2609,7 @@ __decorate([
2773
2609
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SwitchCaseComponent, decorators: [{
2774
2610
  type: Component,
2775
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"] }]
2776
- }], ctorParameters: function () { return []; }, propDecorators: { switch$: [{
2612
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { switch$: [{
2777
2613
  type: Input
2778
2614
  }], switch: [{
2779
2615
  type: Input
@@ -2783,7 +2619,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2783
2619
  }] } });
2784
2620
 
2785
2621
  const HEADER_CELL_RENDERER_PORTAL = Symbol('aup-cell-header-renderer-component-ref');
2786
- const FOOTER_CELL_RENDERER_PORTAL = Symbol('aup-cell-footer-renderer-component-ref');
2787
2622
  const CELL_RENDERER_PORTAL = Symbol('aup-cell-renderer-component-ref');
2788
2623
  const CELL_EDITOR_PORTAL = Symbol('aup-cell-editor-component-ref');
2789
2624
  const PORTAL_RENDERER_COMPONENT = Symbol('aup-cell-renderer-portal-component');
@@ -2881,23 +2716,6 @@ class TemplateCellRendererPortalRef extends CellRendererPortalRef {
2881
2716
  return new TemplatePortal(this.templateRef, this.viewContainer, { ...(data), $implicit: data.row });
2882
2717
  }
2883
2718
  }
2884
- class CellFooterPortalRef extends CellPortalRef {
2885
- componentType;
2886
- initialiseHeader;
2887
- constructor(componentType, initialiseHeader) {
2888
- super();
2889
- this.componentType = componentType;
2890
- this.initialiseHeader = initialiseHeader;
2891
- }
2892
- initialiseHost(host, columnModel) {
2893
- assert$1.isTruthy(host);
2894
- host[HEADER_CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
2895
- }
2896
- // @Trace()
2897
- onPortalAttached(host, portalComponent) {
2898
- this.initialiseHeader(portalComponent, host.column);
2899
- }
2900
- }
2901
2719
 
2902
2720
  class ColumnTextSearchFormatter {
2903
2721
  }
@@ -2988,7 +2806,6 @@ class ColumnTextSearchWrapper extends ColumnTextSearchFormatter.Delegate {
2988
2806
  }
2989
2807
  class ColumnModel extends GarbageCollector {
2990
2808
  columnId;
2991
- order;
2992
2809
  textPropertiesProvider;
2993
2810
  _columnTextProperties;
2994
2811
  _columnHeaderPortalRef;
@@ -3002,10 +2819,9 @@ class ColumnModel extends GarbageCollector {
3002
2819
  dasherisedColumnId;
3003
2820
  textSearchDelegate = new ColumnTextSearchWrapper();
3004
2821
  visible$;
3005
- constructor(columnId, order, textPropertiesProvider) {
2822
+ constructor(columnId, textPropertiesProvider) {
3006
2823
  super();
3007
2824
  this.columnId = columnId;
3008
- this.order = order;
3009
2825
  this.textPropertiesProvider = textPropertiesProvider;
3010
2826
  const { valueOf } = Dsl.disposeWith(this);
3011
2827
  this.installHeaderRenderer();
@@ -3050,14 +2866,6 @@ class ColumnModel extends GarbageCollector {
3050
2866
  this._columnTextProperties = columnTextProperties;
3051
2867
  return this;
3052
2868
  }
3053
- positionAfter(column) {
3054
- this.order.position(this, { after: column });
3055
- return this;
3056
- }
3057
- positionBefore(column) {
3058
- this.order.position(this, { before: column });
3059
- return this;
3060
- }
3061
2869
  getSearchTextFor(row) {
3062
2870
  return this.textSearchDelegate.format(row);
3063
2871
  }
@@ -3159,8 +2967,8 @@ __decorate([
3159
2967
 
3160
2968
  class CustomTemplateColumnModel extends ColumnModel {
3161
2969
  config = new TemplateCellRendererPortalRef();
3162
- constructor(columnId, order, defaults) {
3163
- super(columnId, order, defaults);
2970
+ constructor(columnId, defaults) {
2971
+ super(columnId, defaults);
3164
2972
  this.configureCellRenderer(this.config);
3165
2973
  }
3166
2974
  setTemplate(templateRef, viewContainer, fillCell, padChild) {
@@ -3238,17 +3046,12 @@ class AbstractTableComponent extends DisposableComponent {
3238
3046
  #showHeader_accessor_storage = true;
3239
3047
  get showHeader() { return this.#showHeader_accessor_storage; }
3240
3048
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
3241
- #enableScrolling$_accessor_storage = proxify((ValueModel));
3242
3049
  /**
3243
3050
  * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
3244
3051
  * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
3245
3052
  * containment area.
3246
3053
  */
3247
- get enableScrolling$() { return this.#enableScrolling$_accessor_storage; }
3248
- set enableScrolling$(value) { this.#enableScrolling$_accessor_storage = value; }
3249
- #enableScrolling_accessor_storage = false;
3250
- get enableScrolling() { return this.#enableScrolling_accessor_storage; }
3251
- set enableScrolling(value) { this.#enableScrolling_accessor_storage = value; }
3054
+ enableScrolling = false;
3252
3055
  columns;
3253
3056
  columnIds;
3254
3057
  columnsById;
@@ -3267,6 +3070,7 @@ class AbstractTableComponent extends DisposableComponent {
3267
3070
  super();
3268
3071
  this.injector = injector;
3269
3072
  const { chain, when } = Dsl.disposeWith(this);
3073
+ this._visibleRows$.setDelegate(this._dataSource$);
3270
3074
  when(chain(this._dataSource$).first()).becomesTruthy(it => {
3271
3075
  if (it === this.identityOf(it)) {
3272
3076
  console.warn("Table model identity function is using reference equality. This can cause lots of table re-rendering", {
@@ -3285,7 +3089,7 @@ class AbstractTableComponent extends DisposableComponent {
3285
3089
  if (!model) {
3286
3090
  lang$1.illegalState("aup-table tableModel is nil");
3287
3091
  }
3288
- this.columnsById = chain(model.columns$).indexBy('columnId');
3092
+ this.columnsById = chain(model.columns).indexBy('columnId');
3289
3093
  this._dataSource$.setDelegate(model.dataSource$);
3290
3094
  model.initialise(this.injector, (row) => this.identityOf(row));
3291
3095
  }
@@ -3302,7 +3106,7 @@ class AbstractTableComponent extends DisposableComponent {
3302
3106
  }
3303
3107
  }
3304
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 });
3305
- 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 });
3306
3110
  }
3307
3111
  __decorate([
3308
3112
  Proxify(),
@@ -3312,14 +3116,6 @@ __decorate([
3312
3116
  StoreInValueModel(),
3313
3117
  __metadata("design:type", Object)
3314
3118
  ], AbstractTableComponent.prototype, "showHeader", null);
3315
- __decorate([
3316
- Proxify(),
3317
- __metadata("design:type", ValueModel)
3318
- ], AbstractTableComponent.prototype, "enableScrolling$", null);
3319
- __decorate([
3320
- StoreInValueModel(),
3321
- __metadata("design:type", Boolean)
3322
- ], AbstractTableComponent.prototype, "enableScrolling", null);
3323
3119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, decorators: [{
3324
3120
  type: Component,
3325
3121
  args: [{
@@ -3330,8 +3126,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
3330
3126
  type: Input
3331
3127
  }], showHeader: [{
3332
3128
  type: Input
3333
- }], enableScrolling$: [{
3334
- type: Input
3335
3129
  }], enableScrolling: [{
3336
3130
  type: Input
3337
3131
  }], baseCssClass: [{
@@ -3392,8 +3186,6 @@ class EditSession extends GarbageCollector {
3392
3186
  // console.warn()
3393
3187
  // }
3394
3188
  this._liveRowValue$.value = produce(this._liveRowValue$.value, draft => {
3395
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3396
- // @ts-ignore
3397
3189
  this.form.writeDirtyStateTo(draft);
3398
3190
  });
3399
3191
  });
@@ -3496,11 +3288,11 @@ class DefaultCellRendererComponent {
3496
3288
  return this._value;
3497
3289
  }
3498
3290
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3499
- 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" }] });
3500
3292
  }
3501
3293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, decorators: [{
3502
3294
  type: Component,
3503
- 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" }]
3504
3296
  }], propDecorators: { value: [{
3505
3297
  type: Input
3506
3298
  }] } });
@@ -3516,8 +3308,7 @@ class SelectionHeaderCellComponent extends DisposableComponent {
3516
3308
  super();
3517
3309
  this.selectCommand = Command.create(() => {
3518
3310
  this.selectionModel.toggleAllCommand.execute();
3519
- }).visibleWhile(this.selectionModel.toggleAllCommand.visible$)
3520
- .enableWhile(this.selectionModel.toggleAllCommand.enabled$);
3311
+ });
3521
3312
  }
3522
3313
  isSelected() {
3523
3314
  return this.ifMultiSelectionModel(m => m.allSelected$.value, false);
@@ -3545,7 +3336,7 @@ class SelectionHeaderCellComponent extends DisposableComponent {
3545
3336
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectionHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3546
3337
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SelectionHeaderCellComponent, selector: "aup-selection-header-cell", providers: [
3547
3338
  { provide: MAT_CHECKBOX_DEFAULT_OPTIONS, useValue: { clickAction: 'noop' } }
3548
- ], 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"] }] });
3549
3340
  }
3550
3341
  __decorate([
3551
3342
  Proxify(),
@@ -3578,7 +3369,7 @@ class SelectionCellComponent extends DisposableComponent {
3578
3369
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectionCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3579
3370
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SelectionCellComponent, selector: "aup-selection-cell", inputs: { row: "row" }, providers: [
3580
3371
  { provide: MAT_CHECKBOX_DEFAULT_OPTIONS, useValue: { clickAction: 'noop' } }
3581
- ], 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"] }] });
3582
3373
  }
3583
3374
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectionCellComponent, decorators: [{
3584
3375
  type: Component,
@@ -3639,14 +3430,25 @@ class Bounds extends Dimension {
3639
3430
  })(Bounds || (Bounds = {}));
3640
3431
 
3641
3432
  class ResizeAwareComponent extends DisposableComponent {
3642
- elementRef = this.inject(ElementRef);
3643
- ngZone = this.inject(NgZone);
3644
- 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
+ }
3645
3441
  ngAfterViewInit() {
3646
- 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());
3647
3449
  }
3648
3450
  get bounds$() {
3649
- return this.boundsTracker.bounds$;
3451
+ return this._bounds$.readonly$;
3650
3452
  }
3651
3453
  get nativeElement() {
3652
3454
  return this.elementRef.nativeElement;
@@ -3656,160 +3458,57 @@ class ResizeAwareComponent extends DisposableComponent {
3656
3458
  return this.bounds.relativePositionOf(point);
3657
3459
  }
3658
3460
  get bounds() {
3659
- return this.bounds$.value;
3461
+ return this._bounds$.value;
3462
+ }
3463
+ _updateBounds() {
3464
+ this._bounds$.value = Bounds.ofElement(this.nativeElement);
3660
3465
  }
3661
- 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 });
3662
3467
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ResizeAwareComponent, usesInheritance: true, ngImport: i0 });
3663
3468
  }
3664
3469
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeAwareComponent, decorators: [{
3665
3470
  type: Directive
3666
- }] });
3667
- (function (ResizeAwareComponent) {
3668
- class ResizeTracker extends GarbageCollector {
3669
- elementRef;
3670
- ngZone;
3671
- _bounds$ = new MutableValueModel(new Bounds(0, 0, 0, 0));
3672
- width$;
3673
- height$;
3674
- top$;
3675
- left$;
3676
- bottom$;
3677
- right$;
3678
- constructor(elementRef, ngZone) {
3679
- super();
3680
- this.elementRef = elementRef;
3681
- this.ngZone = ngZone;
3682
- const { chain } = Dsl.disposeWith(this);
3683
- this.width$ = chain(this.bounds$).pluck("width");
3684
- this.height$ = chain(this.bounds$).pluck("height");
3685
- this.top$ = chain(this.bounds$).pluck("top");
3686
- this.left$ = chain(this.bounds$).pluck("left");
3687
- this.bottom$ = chain.numericValue(this.top$).add(this.height$);
3688
- this.right$ = chain.numericValue(this.left$).add(this.width$);
3689
- }
3690
- notifyViewReady() {
3691
- const element = this.elementRef.nativeElement;
3692
- const ro = new ResizeObserver((entries, observer) => {
3693
- this.ngZone.run(() => this._updateBounds());
3694
- });
3695
- ro.observe(element);
3696
- this.onDispose(() => ro.disconnect());
3697
- setTimeout(() => this._updateBounds());
3698
- }
3699
- get bounds$() {
3700
- return this._bounds$.readonly$;
3701
- }
3702
- get nativeElement() {
3703
- return this.elementRef.nativeElement;
3704
- }
3705
- // TODO: Make this handle body scroll
3706
- relativePositionOf(point) {
3707
- return this.bounds.relativePositionOf(point);
3708
- }
3709
- get bounds() {
3710
- return this._bounds$.value;
3711
- }
3712
- _updateBounds() {
3713
- this._bounds$.value = Bounds.ofElement(this.nativeElement);
3714
- }
3715
- }
3716
- ResizeAwareComponent.ResizeTracker = ResizeTracker;
3717
- })(ResizeAwareComponent || (ResizeAwareComponent = {}));
3718
-
3719
- var ColumnOrderManager;
3720
- (function (ColumnOrderManager) {
3721
- function processPosition(position, callback) {
3722
- if (position) {
3723
- const keys = Object.keys(position);
3724
- if (keys.includes("before")) {
3725
- return position["before"] ? callback.before(position["before"]) : callback.first();
3726
- }
3727
- else {
3728
- return position["after"] ? callback.after(position["after"]) : callback.last();
3729
- }
3730
- }
3731
- else {
3732
- return callback.last();
3733
- }
3734
- }
3735
- ColumnOrderManager.processPosition = processPosition;
3736
- })(ColumnOrderManager || (ColumnOrderManager = {}));
3471
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; } });
3737
3472
 
3738
- class ColumnRef {
3739
- column;
3740
- position;
3741
- constructor(column, position) {
3742
- this.column = column;
3743
- this.position = position;
3744
- }
3745
- }
3746
- class ColumnManager extends GarbageCollector {
3747
- _columnRefs$ = new MutableListModel();
3748
- orderedColumnRefs$;
3749
- _columnsById$;
3750
- allColumns$;
3751
- columnVisibilities$ = new WatchList();
3752
- visibleColumns$;
3473
+ class ColumnListModel extends AbstractComputedListModel {
3474
+ _allColumns$ = new MutableListModel();
3475
+ columnsById$;
3753
3476
  constructor() {
3754
3477
  super();
3755
3478
  const { chain } = Dsl.disposeWith(this);
3756
- this.orderedColumnRefs$ = chain(this._columnRefs$).orderBy("position", "asc");
3757
- this.allColumns$ = this.orderedColumnRefs$.pluck("column");
3758
- this._columnsById$ = chain(this.allColumns$).indexBy('columnId');
3759
- this.visibleColumns$ = chain(this.allColumns$).select(it => it.visible$.value, {
3760
- dependsOn: this.columnVisibilities$
3761
- });
3479
+ this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
3762
3480
  }
3763
- position(column, newPosition) {
3764
- const target = this._columnRefs$.query().findMatching(it => it.column === column);
3765
- const position = this.computePosition(newPosition);
3766
- this._columnRefs$.replace(target, { with: new ColumnRef(target.column, position) });
3481
+ get allColumns$() {
3482
+ return this._allColumns$.readonly$;
3767
3483
  }
3768
3484
  getColumn(id) {
3769
- return this._columnsById$.get(id);
3485
+ return this.columnsById$.get(id);
3770
3486
  }
3771
3487
  hasColumn(id) {
3772
- return !!this._columnsById$.get(id);
3488
+ return !!this.columnsById$.get(id);
3773
3489
  }
3774
3490
  hasMatchingColumn(row, regex) {
3775
3491
  // only search the visible columns
3776
- return !!this.visibleColumns$.value.find(c => regex.test(c.getSearchTextFor(row)));
3492
+ return !!this.value.find(c => regex.test(c.getSearchTextFor(row)));
3777
3493
  }
3778
- addColumn(column, position) {
3494
+ addColumn(column, index) {
3779
3495
  if (this.hasColumn(column.columnId)) {
3780
3496
  lang.illegalState(`Column with id=${column.columnId} already exists`);
3781
3497
  }
3782
3498
  this.registerDisposable(column);
3783
- this._columnRefs$.push(new ColumnRef(column, this.computePosition(position)));
3784
- this.columnVisibilities$.add(column.visible$);
3785
- return column;
3786
- }
3787
- computePosition(position) {
3788
- const q = this.orderedColumnRefs$.query();
3789
- return ColumnOrderManager.processPosition(position, {
3790
- before(col) {
3791
- const index = q.findIndex(ref => ref.column === col);
3792
- const beforeCol = q.value[index];
3793
- const afterCol = index - 1 >= 0 ? q.value[index - 1] : undefined;
3794
- return generateKeyBetween(afterCol?.position, beforeCol.position);
3795
- },
3796
- after(col) {
3797
- const index = q.findIndex(ref => ref.column === col);
3798
- const afterCol = q.value[index];
3799
- const beforeCol = index + 1 < q.length ? q.value[index + 1] : undefined;
3800
- return generateKeyBetween(afterCol.position, beforeCol?.position);
3801
- },
3802
- first() {
3803
- return generateKeyBetween(null, q.first()?.position);
3804
- },
3805
- last() {
3806
- // add it to the end of the list
3807
- return generateKeyBetween(q.last()?.position, null);
3499
+ this.runInTransaction(() => {
3500
+ if (!isNil(index)) {
3501
+ this._allColumns$.insert(index, column);
3808
3502
  }
3503
+ else {
3504
+ this._allColumns$.push(column);
3505
+ }
3506
+ this.registerDisposable(this.trackSource(column.visible$));
3809
3507
  });
3508
+ return column;
3810
3509
  }
3811
3510
  doComputeValue() {
3812
- return this.allColumns$.value.filter(c => c.visible$.value);
3511
+ return this._allColumns$.value.filter(c => c.visible$.value);
3813
3512
  }
3814
3513
  }
3815
3514
 
@@ -3843,8 +3542,8 @@ function EnableCellTextSearch(options) {
3843
3542
 
3844
3543
  class CustomValueColumnModel extends ColumnModel {
3845
3544
  getValue;
3846
- constructor(columnId, order, defaults, getValue) {
3847
- super(columnId, order, defaults);
3545
+ constructor(columnId, defaults, getValue) {
3546
+ super(columnId, defaults);
3848
3547
  this.getValue = getValue;
3849
3548
  this.cellRenderer(DefaultCellRendererComponent);
3850
3549
  }
@@ -3852,17 +3551,17 @@ class CustomValueColumnModel extends ColumnModel {
3852
3551
  this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.Null()), row => this.getValue(row));
3853
3552
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3854
3553
  if (firstTime) {
3855
- if (isFunction(onComponentInitOrOptions)) {
3554
+ if (isFunction$1(onComponentInitOrOptions)) {
3856
3555
  onComponentInitOrOptions(component);
3857
3556
  }
3858
3557
  else {
3859
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3558
+ if (isFunction$1(onComponentInitOrOptions?.onComponentInit)) {
3860
3559
  onComponentInitOrOptions.onComponentInit(component);
3861
3560
  }
3862
3561
  }
3863
3562
  }
3864
3563
  component.value = this.getValue(rowData.row);
3865
- if (!isFunction(onComponentInitOrOptions) && isFunction(onComponentInitOrOptions?.onRowUpdate)) {
3564
+ if (!isFunction$1(onComponentInitOrOptions) && isFunction$1(onComponentInitOrOptions?.onRowUpdate)) {
3866
3565
  onComponentInitOrOptions.onRowUpdate(component, rowData.row);
3867
3566
  }
3868
3567
  }));
@@ -3874,8 +3573,8 @@ class CustomValueColumnModel extends ColumnModel {
3874
3573
  }
3875
3574
 
3876
3575
  class EditorControlColumnModel extends ColumnModel {
3877
- constructor(columnId, order, saveCommandFactory, defaults) {
3878
- super(columnId, order, defaults);
3576
+ constructor(columnId, saveCommandFactory, defaults) {
3577
+ super(columnId, defaults);
3879
3578
  this.cellRenderer(EditRowControlsComponent);
3880
3579
  }
3881
3580
  cellRenderer(componentType) {
@@ -3900,8 +3599,8 @@ class ListPropertyColumnModel extends ColumnModel {
3900
3599
  intermediate.map(v => v?.toString()).join(", ") :
3901
3600
  intermediate?.toString();
3902
3601
  };
3903
- constructor(id, order, property, defaults) {
3904
- super(id, order, defaults);
3602
+ constructor(id, property, defaults) {
3603
+ super(id, defaults);
3905
3604
  this.property = property;
3906
3605
  this.cellRenderer(DefaultCellRendererComponent);
3907
3606
  }
@@ -3917,7 +3616,7 @@ class ListPropertyColumnModel extends ColumnModel {
3917
3616
  }
3918
3617
  cellEditor(editor, validatorsOrInitialiser, initialiseComponent) {
3919
3618
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3920
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3619
+ const initialiser = isFunction$1(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3921
3620
  this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
3922
3621
  const formListModel = editSession.form.pluckList(this.property);
3923
3622
  if (validators) {
@@ -3946,8 +3645,8 @@ class PropertyColumnModel extends ColumnModel {
3946
3645
  _defaultSearchTextFormatter = (value) => {
3947
3646
  return (this._userFormat ?? Functions.identity)(value)?.toString();
3948
3647
  };
3949
- constructor(id, order, property, defaults) {
3950
- super(id, order, defaults);
3648
+ constructor(id, property, defaults) {
3649
+ super(id, defaults);
3951
3650
  this.property = property;
3952
3651
  this.cellRenderer(DefaultCellRendererComponent);
3953
3652
  }
@@ -3955,11 +3654,11 @@ class PropertyColumnModel extends ColumnModel {
3955
3654
  this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => ColumnTextSearchFormatter.forFormatter(this._defaultSearchTextFormatter)), row => row[this.property]);
3956
3655
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3957
3656
  if (firstTime) {
3958
- if (isFunction(onComponentInitOrOptions)) {
3657
+ if (isFunction$1(onComponentInitOrOptions)) {
3959
3658
  onComponentInitOrOptions(component);
3960
3659
  }
3961
3660
  else {
3962
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3661
+ if (isFunction$1(onComponentInitOrOptions?.onComponentInit)) {
3963
3662
  onComponentInitOrOptions.onComponentInit(component);
3964
3663
  }
3965
3664
  }
@@ -3984,7 +3683,7 @@ class PropertyColumnModel extends ColumnModel {
3984
3683
  component[ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
3985
3684
  let disableEditCallback = false;
3986
3685
  if (firstTime) {
3987
- if (isFunction(options?.onComponentInit)) {
3686
+ if (isFunction$1(options?.onComponentInit)) {
3988
3687
  options.onComponentInit(component);
3989
3688
  }
3990
3689
  // install our edit callback
@@ -3999,7 +3698,7 @@ class PropertyColumnModel extends ColumnModel {
3999
3698
  disableEditCallback = true;
4000
3699
  component.value = rowData.row[this.property];
4001
3700
  disableEditCallback = false;
4002
- if (!isFunction(options) && isFunction(options?.onRowUpdate)) {
3701
+ if (!isFunction$1(options) && isFunction$1(options?.onRowUpdate)) {
4003
3702
  options.onRowUpdate(component, rowData.row);
4004
3703
  }
4005
3704
  }));
@@ -4007,7 +3706,7 @@ class PropertyColumnModel extends ColumnModel {
4007
3706
  }
4008
3707
  cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
4009
3708
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
4010
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
3709
+ const initialiser = isFunction$1(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
4011
3710
  this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
4012
3711
  const formValueModel = editSession.form.pluck(this.property);
4013
3712
  if (validators) {
@@ -4034,8 +3733,8 @@ class SelectionColumnModel extends ColumnModel {
4034
3733
  selectionModel;
4035
3734
  _enableHeaderControls = true;
4036
3735
  _color = "accent";
4037
- constructor(columnId, order, defaults, selectionModel) {
4038
- super(columnId, order, defaults);
3736
+ constructor(columnId, defaults, selectionModel) {
3737
+ super(columnId, defaults);
4039
3738
  this.selectionModel = selectionModel;
4040
3739
  const { chain } = Dsl.disposeWith(this);
4041
3740
  this._selectRowOnClick(false);
@@ -4076,42 +3775,6 @@ class SelectionColumnModel extends ColumnModel {
4076
3775
  }
4077
3776
  }
4078
3777
 
4079
- let RowClass$1 = class RowClass {
4080
- className;
4081
- matches;
4082
- constructor(className, matches) {
4083
- this.className = className;
4084
- this.matches = matches;
4085
- }
4086
- };
4087
- class FooterRowModel {
4088
- _rowClasses = [];
4089
- noPadding() {
4090
- this.addClass("no-padding");
4091
- }
4092
- addClass(className, condition) {
4093
- this._rowClasses.push(new RowClass$1(className, condition ?? (() => true)));
4094
- }
4095
- }
4096
- (function (FooterRowModel) {
4097
- class Impl extends FooterRowModel {
4098
- component;
4099
- onInit;
4100
- portal;
4101
- constructor(component, onInit) {
4102
- super();
4103
- this.component = component;
4104
- this.onInit = onInit;
4105
- this.portal = new ComponentPortal(component);
4106
- }
4107
- getActiveRowClasses() {
4108
- return this._rowClasses.filter(c => c.matches()).map(c => c.className).join(" ");
4109
- }
4110
- }
4111
- FooterRowModel.Impl = Impl;
4112
- })(FooterRowModel || (FooterRowModel = {}));
4113
- ProxyRegistry.registerOneTimeBinding(FooterRowModel);
4114
-
4115
3778
  class TableMoreMenuComponent extends DisposableComponent {
4116
3779
  value$ = new MutableValueModel();
4117
3780
  #value_accessor_storage;
@@ -4121,15 +3784,13 @@ class TableMoreMenuComponent extends DisposableComponent {
4121
3784
  popupType$ = new MutableValueModel();
4122
3785
  popupComponentPortal$;
4123
3786
  _visible$ = this.registerDisposable(new DelegatingValueModel());
4124
- initialiseCallback;
4125
3787
  constructor() {
4126
3788
  super();
4127
3789
  const { chain } = Dsl.disposeWith(this);
4128
3790
  this.popupComponentPortal$ = chain(this.popupType$).map(type => new ComponentPortal(type));
4129
3791
  }
4130
- configurePopupComponentType(popupComponentType, configureCallback) {
3792
+ configurePopupComponentType(popupComponentType) {
4131
3793
  this.popupType$.value = popupComponentType;
4132
- this.initialiseCallback = configureCallback;
4133
3794
  }
4134
3795
  // Stops tree selection when clicking the menu button
4135
3796
  preventDefault($event) {
@@ -4140,15 +3801,12 @@ class TableMoreMenuComponent extends DisposableComponent {
4140
3801
  const component = $event.instance;
4141
3802
  component.initialise(this.value$, Command.create(() => this.matMenuTrigger.closeMenu()));
4142
3803
  this._visible$.setDelegate(component.visible$);
4143
- if (this.initialiseCallback) {
4144
- this.initialiseCallback(component);
4145
- }
4146
3804
  }
4147
3805
  get visible$() {
4148
3806
  return this._visible$.readonly$;
4149
3807
  }
4150
3808
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableMoreMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4151
- 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"] }] });
4152
3810
  }
4153
3811
  __decorate([
4154
3812
  StoreInValueModel(),
@@ -4177,25 +3835,16 @@ class RowClass {
4177
3835
  this.matches = matches;
4178
3836
  }
4179
3837
  }
4180
- class RowAttribute {
4181
- attributeName;
4182
- getValue;
4183
- constructor(attributeName, getValue) {
4184
- this.attributeName = attributeName;
4185
- this.getValue = getValue;
4186
- }
4187
- }
4188
3838
  class AbstractTableModel extends GarbageCollector {
4189
3839
  _dataSource$ = this.registerDisposable(new DelegatingListModel());
4190
3840
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
4191
3841
  _visibleRows$ = this.registerDisposable(new DelegatingListModel());
4192
- columnManager = this.registerDisposable(new ColumnManager());
3842
+ _columnList = this.registerDisposable(new ColumnListModel());
4193
3843
  _editorSessions = new MutableListModel();
4194
3844
  _rowsBeingEdited$;
4195
3845
  saveCommandFactory;
4196
3846
  _editorSessionByRowId;
4197
3847
  rowClassNamePredicates = [];
4198
- rowAttributeGenerators = [];
4199
3848
  _columnTextPropertiesLookup;
4200
3849
  editing$;
4201
3850
  firstEditableColumn$;
@@ -4212,8 +3861,6 @@ class AbstractTableModel extends GarbageCollector {
4212
3861
  selectedItems$;
4213
3862
  leadSelection$;
4214
3863
  hasSelection$;
4215
- footerRowModel;
4216
- _viewDependencies = new Set();
4217
3864
  constructor() {
4218
3865
  super();
4219
3866
  const { chain } = Dsl.disposeWith(this);
@@ -4222,15 +3869,15 @@ class AbstractTableModel extends GarbageCollector {
4222
3869
  });
4223
3870
  this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
4224
3871
  this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
4225
- this.textSearchPredicate$ = chain(this.visibleColumns$).reduceAll(columns => {
3872
+ this.textSearchPredicate$ = chain(this.visibleColumns).reduce(columns => {
4226
3873
  return (row, regex) => {
4227
3874
  return (!regex || !!columns.find(c => regex.test(c.getSearchTextFor(row))));
4228
3875
  };
4229
3876
  });
4230
- this.firstEditableColumn$ = chain(this.columns$).select(c => c.hasEditorPortal()).first();
4231
- this.firstVisibleColumn$ = chain(this.visibleColumns$).first();
4232
- this.lastVisibleColumn$ = chain(this.visibleColumns$).last();
4233
- 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);
4234
3881
  this.dataSourceEmpty$ = chain(this.dataSource$).isEmpty();
4235
3882
  this.selectedItems$ = this.selectionModelProxy.selectedItems$;
4236
3883
  this.leadSelection$ = this.selectionModelProxy.leadSelection$;
@@ -4254,23 +3901,9 @@ class AbstractTableModel extends GarbageCollector {
4254
3901
  ],
4255
3902
  parent: injector
4256
3903
  });
4257
- this.columns$.value.forEach(c => c.initialise(customInjector));
3904
+ this.columns.value.forEach(c => c.initialise(customInjector));
4258
3905
  this.identityOf = identityOf;
4259
3906
  }
4260
- /**
4261
- * Adds additional models that will trigger a table repaint. This is required if the table
4262
- * needs to be redrawn outside of changes to the rows of filters. i.e. some eternal state is used
4263
- * to assign row classes etc.
4264
- *
4265
- * Note: This function must be called before the table is bound to the model.
4266
- * @param hasValues
4267
- */
4268
- viewStateDependsOn(...hasValues) {
4269
- hasValues.forEach(it => this._viewDependencies.add(it));
4270
- }
4271
- get viewStateDependencies() {
4272
- return Array.from(this._viewDependencies.values());
4273
- }
4274
3907
  get dataSource$() {
4275
3908
  return this._dataSource$.readonly$;
4276
3909
  }
@@ -4321,19 +3954,19 @@ class AbstractTableModel extends GarbageCollector {
4321
3954
  });
4322
3955
  });
4323
3956
  }
4324
- get columns$() {
4325
- return this.columnManager.allColumns$;
3957
+ get columns() {
3958
+ return this._columnList.allColumns$;
4326
3959
  }
4327
- get visibleColumns$() {
4328
- return this.columnManager.visibleColumns$;
3960
+ get visibleColumns() {
3961
+ return this._columnList.readonly$;
4329
3962
  }
4330
3963
  pluck(property, options) {
4331
3964
  const columnId = options?.columnId || property.toString();
4332
- return this.addColumn(new PropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
3965
+ return this.addColumn(new PropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
4333
3966
  }
4334
3967
  pluckList(property, options) {
4335
3968
  const columnId = options?.columnId || property.toString();
4336
- return this.addColumn(new ListPropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
3969
+ return this.addColumn(new ListPropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
4337
3970
  }
4338
3971
  // TODO: clean this up and assign the selection model on teh table directly.
4339
3972
  // tableModel.useSelectionModel(model) and have the seleciton column automatically
@@ -4342,54 +3975,43 @@ class AbstractTableModel extends GarbageCollector {
4342
3975
  _addSelectionColumn(selectionModel, visible) {
4343
3976
  assert.isNil(this.selectionColumnModel);
4344
3977
  const columnId = "selection-column";
4345
- this.selectionColumnModel = new SelectionColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
3978
+ this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
4346
3979
  this.selectionColumnModel.useSelectionModel(selectionModel);
4347
3980
  this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
4348
- const selectionColumnModel = this.addColumn(this.selectionColumnModel, { before: null }); // first column
4349
- if (!isNil(visible)) {
3981
+ const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
3982
+ if (!isNil$1(visible)) {
4350
3983
  selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
4351
3984
  }
4352
3985
  return selectionColumnModel;
4353
3986
  }
4354
3987
  addEditControls(saveCommandFactory, formFactory) {
4355
3988
  this.saveCommandFactory = saveCommandFactory;
4356
- if (isFunction(formFactory)) {
3989
+ if (isFunction$1(formFactory)) {
4357
3990
  this._createForm = formFactory;
4358
3991
  }
4359
3992
  const columnId = "editControls";
4360
- return this.addColumn(new EditorControlColumnModel(columnId, this.columnManager, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
3993
+ return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
4361
3994
  }
4362
3995
  addCustomColumn(columnId, dataAccessor) {
4363
- return this.addColumn(new CustomValueColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), dataAccessor));
3996
+ return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), dataAccessor));
4364
3997
  }
4365
3998
  addComponentColumn(columnId, component, onComponentInitOrOptions) {
4366
- 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);
4367
4000
  }
4368
- addMoreMenu(componentClass, initialiseCallback) {
4001
+ addMoreMenu(componentClass) {
4369
4002
  return this.addComponentColumn("more-menu", TableMoreMenuComponent, (component) => {
4370
- component.configurePopupComponentType(componentClass, initialiseCallback);
4003
+ component.configurePopupComponentType(componentClass);
4371
4004
  }).columnTextProperties({
4372
4005
  headerText() {
4373
4006
  return "";
4374
4007
  }
4375
4008
  });
4376
4009
  }
4377
- addFooterRow(component, initialiseCallback) {
4378
- assert.isNil(this.footerRowModel);
4379
- this.footerRowModel = new FooterRowModel.Impl(component, initialiseCallback);
4380
- return this.footerRowModel;
4381
- }
4382
4010
  addTemplateColumn(columnId) {
4383
- return this.addColumn(new CustomTemplateColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId)));
4011
+ return this.addColumn(new CustomTemplateColumnModel(columnId, () => this.getColumnTextProperties(columnId)));
4384
4012
  }
4385
- addRowClass(className, predicate, options) {
4013
+ addRowClass(className, predicate) {
4386
4014
  this.rowClassNamePredicates.push(new RowClass(className, predicate));
4387
- if (options) {
4388
- this.viewStateDependsOn(...DependsOnOptions.extract(options));
4389
- }
4390
- }
4391
- addRowAttribute(attributeName, getValue) {
4392
- this.rowAttributeGenerators.push(new RowAttribute(attributeName, getValue));
4393
4015
  }
4394
4016
  getRowClasses(row) {
4395
4017
  const classNames = [];
@@ -4400,13 +4022,8 @@ class AbstractTableModel extends GarbageCollector {
4400
4022
  });
4401
4023
  return classNames;
4402
4024
  }
4403
- getRowAttributes(row) {
4404
- return this.rowAttributeGenerators.reduce((result, generator) => {
4405
- return { ...result, [generator.attributeName]: generator.getValue(row) };
4406
- }, {});
4407
- }
4408
- addColumn(column, position) {
4409
- return this.columnManager.addColumn(column, position);
4025
+ addColumn(column, index) {
4026
+ return this._columnList.addColumn(column, index);
4410
4027
  }
4411
4028
  columnTextProperties(columnTextProperties) {
4412
4029
  this._columnTextPropertiesLookup = columnTextProperties;
@@ -4523,7 +4140,7 @@ class TableCellComponent extends DisposableComponent {
4523
4140
  };
4524
4141
  }
4525
4142
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4526
- 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"] }] });
4527
4144
  }
4528
4145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableCellComponent, decorators: [{
4529
4146
  type: Component,
@@ -4562,7 +4179,7 @@ class TableHeaderCellComponent {
4562
4179
  return this[HEADER_CELL_RENDERER_PORTAL];
4563
4180
  }
4564
4181
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4565
- 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"] }] });
4566
4183
  }
4567
4184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableHeaderCellComponent, decorators: [{
4568
4185
  type: Component,
@@ -4574,132 +4191,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
4574
4191
  args: ['class']
4575
4192
  }] } });
4576
4193
 
4577
- // eslint-disable-next-line @angular-eslint/component-class-suffix
4578
- class TableFooterRow {
4579
- row;
4580
- defaultClassNames = 'aup-footer-row-renderer';
4581
- get rowClasses() {
4582
- return this.row.getActiveRowClasses();
4583
- }
4584
- initialise($event) {
4585
- this.row.onInit && this.row.onInit($event.instance);
4586
- }
4587
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableFooterRow, deps: [], target: i0.ɵɵFactoryTarget.Component });
4588
- 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"] }] });
4589
- }
4590
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableFooterRow, decorators: [{
4591
- type: Component,
4592
- 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"] }]
4593
- }], propDecorators: { row: [{
4594
- type: Input
4595
- }], defaultClassNames: [{
4596
- type: HostBinding,
4597
- args: ['class']
4598
- }], rowClasses: [{
4599
- type: HostBinding,
4600
- args: ['class']
4601
- }] } });
4602
-
4603
- const AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER = new InjectionToken("AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER");
4604
- class TableRowAttributesDirective {
4605
- elementRef;
4606
- aupTableRowAttributes;
4607
- constructor(elementRef) {
4608
- this.elementRef = elementRef;
4609
- }
4610
- ngOnInit() {
4611
- for (const attr in this.aupTableRowAttributes) {
4612
- this.elementRef.nativeElement.setAttribute(attr, this.aupTableRowAttributes[attr]);
4613
- }
4614
- }
4615
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
4616
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: TableRowAttributesDirective, selector: "[aupTableRowAttributes]", inputs: { aupTableRowAttributes: "aupTableRowAttributes" }, ngImport: i0 });
4617
- }
4618
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, decorators: [{
4619
- type: Directive,
4620
- args: [{
4621
- selector: "[aupTableRowAttributes]",
4622
- }]
4623
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { aupTableRowAttributes: [{
4624
- type: Input
4625
- }] } });
4626
4194
  class TableBodyComponent extends ResizeAwareComponent {
4627
- bufferMultiplier;
4628
4195
  #data$_accessor_storage = proxify((ListModel));
4629
4196
  get data$() { return this.#data$_accessor_storage; }
4630
4197
  set data$(value) { this.#data$_accessor_storage = value; }
4631
4198
  #tableModel_accessor_storage = proxify((AbstractTableModel));
4632
4199
  get tableModel() { return this.#tableModel_accessor_storage; }
4633
4200
  set tableModel(value) { this.#tableModel_accessor_storage = value; }
4634
- #footerRow_accessor_storage = proxify((FooterRowModel.Impl));
4635
- get footerRow() { return this.#footerRow_accessor_storage; }
4636
- set footerRow(value) { this.#footerRow_accessor_storage = value; }
4637
4201
  #showHeader$_accessor_storage = proxify((ValueModel));
4638
4202
  get showHeader$() { return this.#showHeader$_accessor_storage; }
4639
4203
  set showHeader$(value) { this.#showHeader$_accessor_storage = value; }
4640
4204
  #showHeader_accessor_storage = true;
4641
4205
  get showHeader() { return this.#showHeader_accessor_storage; }
4642
4206
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
4207
+ visibleRowCount = new EventEmitter();
4643
4208
  trackBy;
4644
- #scrollMode$_accessor_storage = proxify((ValueModel));
4645
- get scrollMode$() { return this.#scrollMode$_accessor_storage; }
4646
- set scrollMode$(value) { this.#scrollMode$_accessor_storage = value; }
4647
- #scrollMode_accessor_storage = "none";
4648
- get scrollMode() { return this.#scrollMode_accessor_storage; }
4649
- set scrollMode(value) { this.#scrollMode_accessor_storage = value; }
4650
- 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;
4651
4215
  columns$;
4652
4216
  columnIds$;
4653
4217
  columnsById$;
4218
+ _visibleRowCount$;
4654
4219
  // TODO: support user defined header and row heights via css vars.
4655
- headerHeight$ = new MutableValueModel(48);
4656
- rowHeight$ = new MutableValueModel(44);
4220
+ headerHeight$ = new MutableValueModel(29);
4221
+ rowHeight$ = new MutableValueModel(40);
4657
4222
  baseCssClass = "aup-table-component";
4658
- virtualScrollDataSource = new TableVirtualScrollDataSource();
4659
- virtualScrollActive$ = new MutableValueModel(false);
4660
- scrollTimeout;
4661
- constructor(bufferMultiplier = 1) {
4662
- super();
4663
- this.bufferMultiplier = bufferMultiplier;
4664
- const { chain, when, observe } = Dsl.disposeWith(this);
4223
+ constructor(elementRef, ngZone) {
4224
+ super(elementRef, ngZone);
4225
+ const { chain, when } = Dsl.disposeWith(this);
4665
4226
  const actualHeaderHeight$ = chain(this.showHeader$).map(show => {
4666
4227
  return show ? this.headerHeight$.value : 0;
4667
4228
  }, { dependsOn: this.headerHeight$ });
4668
- // performance is terrible if the data changes while we're scrolling, so we postpone updates until
4669
- // scrolling stops.
4670
- const delayedDatea$ = chain(this.data$).postponeWhile(this.virtualScrollActive$);
4671
- when(delayedDatea$).changes(delatedData => {
4672
- this.virtualScrollDataSource.data = delatedData;
4673
- this.scheduleTableHeightCheck();
4674
- }, { 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" });
4675
4240
  this.onInit(() => {
4676
- this.columns$ = chain(this.tableModel.visibleColumns$);
4241
+ this.columns$ = chain(this.tableModel.columns);
4677
4242
  this.columnIds$ = chain(this.columns$).pluck("columnId");
4678
4243
  this.columnsById$ = chain(this.columns$).indexBy('columnId');
4679
4244
  });
4680
- // const txo = new TransactionObserver({verbose: false}).onEvent(e => console.log(e.name, e.payload));
4681
- // txo.observe('this.virtualScrollRowRange$', this.virtualScrollRowRange$);
4682
- // txo.observe('this.virtualScrollSpacerSize$', this.virtualScrollSpacerSize$);
4683
- // txo.observe('this.virtualRows$', this.virtualRows$);
4684
- // txo.observe('this.tableBodyHeight$', this.tableBodyHeight$);
4685
- // txo.observe('this.virtualScrollActive$', this.virtualScrollActive$);
4686
- }
4687
- ngAfterViewInit() {
4688
- super.ngAfterViewInit();
4689
- if (this.scrollViewport) {
4690
- const { observe } = Dsl.disposeWith(this);
4691
- this.scrollViewport.elementScrolled().subscribe(() => this.notifyScrolled());
4692
- }
4693
4245
  }
4694
4246
  get hideHeader() {
4695
4247
  return !this.showHeader;
4696
4248
  }
4697
- get headerHeightCssVar() {
4698
- return `${this.headerHeight$.value}px`;
4699
- }
4700
- get rowHeightCssVar() {
4701
- return `${this.rowHeight$.value}px`;
4702
- }
4703
4249
  isEditing(row) {
4704
4250
  return !!this.tableModel.getEditSessionFor(row);
4705
4251
  }
@@ -4724,110 +4270,51 @@ class TableBodyComponent extends ResizeAwareComponent {
4724
4270
  }
4725
4271
  return classes;
4726
4272
  }
4727
- scheduleTableHeightCheck(waitMillis = 50) {
4728
- setTimeout(() => {
4729
- const tbody = this.elementRef.nativeElement.querySelector("tbody");
4730
- const bodyHeight = tbody.offsetHeight;
4731
- if (this.data$.length > 0 && bodyHeight < this.rowHeight$.value) {
4732
- // Hacks to get our virtual scroll to repaint
4733
- // Logger.get(this).log(`rowCount=${this.data$.length}, bodyHeight=${bodyHeight} -> virtual table not rendering, triggering resize to force repaint`)
4734
- window.dispatchEvent(new Event('resize'));
4735
- if (waitMillis < 500) {
4736
- this.scheduleTableHeightCheck(waitMillis + 50);
4737
- }
4738
- }
4739
- }, waitMillis);
4740
- }
4741
- notifyScrolled() {
4742
- this.virtualScrollActive$.value = true;
4743
- this.clearScrollTimeout();
4744
- this.scrollTimeout = setTimeout(() => {
4745
- return this.virtualScrollActive$.value = false;
4746
- }, 200);
4747
- }
4748
- clearScrollTimeout() {
4749
- if (this.scrollTimeout) {
4750
- clearTimeout(this.scrollTimeout);
4751
- }
4752
- }
4753
- initialiseFooter($event) {
4754
- const portalRef = $event;
4755
- this.footerRow.onInit(portalRef.instance);
4756
- }
4757
- Proxify = Proxify;
4758
- 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 });
4759
- 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"] }] });
4760
4275
  }
4761
4276
  __decorate([
4762
4277
  Proxify(),
4763
- __metadata("design:type", ListModel)
4278
+ __metadata("design:type", Object)
4764
4279
  ], TableBodyComponent.prototype, "data$", null);
4765
4280
  __decorate([
4766
4281
  Proxify(),
4767
- __metadata("design:type", AbstractTableModel)
4282
+ __metadata("design:type", Object)
4768
4283
  ], TableBodyComponent.prototype, "tableModel", null);
4769
4284
  __decorate([
4770
4285
  Proxify(),
4771
- __metadata("design:type", FooterRowModel.Impl)
4772
- ], TableBodyComponent.prototype, "footerRow", null);
4773
- __decorate([
4774
- Proxify(),
4775
- __metadata("design:type", ValueModel)
4286
+ __metadata("design:type", Object)
4776
4287
  ], TableBodyComponent.prototype, "showHeader$", null);
4777
4288
  __decorate([
4778
4289
  StoreInValueModel(),
4779
4290
  __metadata("design:type", Object)
4780
4291
  ], TableBodyComponent.prototype, "showHeader", null);
4781
- __decorate([
4782
- Proxify(),
4783
- __metadata("design:type", ValueModel)
4784
- ], TableBodyComponent.prototype, "scrollMode$", null);
4785
- __decorate([
4786
- StoreInValueModel(),
4787
- __metadata("design:type", String)
4788
- ], TableBodyComponent.prototype, "scrollMode", null);
4789
4292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, decorators: [{
4790
4293
  type: Component,
4791
- 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"] }]
4792
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
4793
- type: Inject,
4794
- args: [AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER]
4795
- }, {
4796
- type: Optional
4797
- }] }]; }, 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$: [{
4798
4296
  type: Input
4799
4297
  }], tableModel: [{
4800
4298
  type: Input
4801
- }], footerRow: [{
4802
- type: Input
4803
4299
  }], showHeader$: [{
4804
4300
  type: Input
4805
4301
  }], showHeader: [{
4806
4302
  type: Input
4303
+ }], visibleRowCount: [{
4304
+ type: Output
4807
4305
  }], trackBy: [{
4808
4306
  type: Input
4809
- }], scrollMode$: [{
4810
- type: Input
4811
- }], scrollMode: [{
4307
+ }], enableScrolling: [{
4812
4308
  type: Input
4813
4309
  }, {
4814
4310
  type: HostBinding,
4815
- args: ["attr.scrollMode"]
4816
- }], scrollViewport: [{
4817
- type: ViewChild,
4818
- args: [CdkVirtualScrollViewport]
4311
+ args: ["class.enable-scrolling"]
4819
4312
  }], baseCssClass: [{
4820
4313
  type: HostBinding,
4821
4314
  args: ["class"]
4822
4315
  }], hideHeader: [{
4823
4316
  type: HostBinding,
4824
4317
  args: ["class.hide-header"]
4825
- }], headerHeightCssVar: [{
4826
- type: HostBinding,
4827
- args: ["style.--aup-table-header-height"]
4828
- }], rowHeightCssVar: [{
4829
- type: HostBinding,
4830
- args: ["style.--aup-table-row-height"]
4831
4318
  }] } });
4832
4319
 
4833
4320
  class TableMoreMenuPopupComponent extends DisposableComponent {
@@ -4948,10 +4435,8 @@ class TableFilterModel extends GarbageCollector {
4948
4435
  this.useSearchText(options.searchText$);
4949
4436
  this.useRowPredicate(options.predicate$);
4950
4437
  const { chain } = Dsl.disposeWith(this);
4951
- const textSearchRegex$ = chain(this._searchText$)
4952
- .debounce(250)
4953
- .map(text => {
4954
- 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");
4955
4440
  }, { allowNil: true });
4956
4441
  this._rowPredicate = chain(this._rowPredicate$)
4957
4442
  .map(predicate => {
@@ -5159,30 +4644,31 @@ class TableComponent extends AbstractTableComponent {
5159
4644
  #filterModel_accessor_storage = proxify((TableFilterModel));
5160
4645
  get filterModel() { return this.#filterModel_accessor_storage; }
5161
4646
  set filterModel(value) { this.#filterModel_accessor_storage = value; }
5162
- tableBody;
5163
- #scrollMode$_accessor_storage = proxify((ValueModel));
5164
- /**
5165
- * 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
5166
- * renders all rows but allows row heights to grow.
5167
- */
5168
- get scrollMode$() { return this.#scrollMode$_accessor_storage; }
5169
- set scrollMode$(value) { this.#scrollMode$_accessor_storage = value; }
5170
- #scrollMode_accessor_storage;
5171
- get scrollMode() { return this.#scrollMode_accessor_storage; }
5172
- 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
+ // }
5173
4660
  _footerContentAdded = false;
5174
4661
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
5175
- tableBodyScrollMode$;
4662
+ _pageSize = new MutableValueModel();
4663
+ pagedListModel;
5176
4664
  constructor(injector) {
5177
4665
  super(injector);
5178
- const { chain, when } = Dsl.disposeWith(this);
5179
- this.tableBodyScrollMode$ = chain(this.enableScrolling$).map(enable => {
5180
- return enable ? (this.scrollMode$.value ?? "virtual") : 'none';
5181
- }, { dependsOn: this.scrollMode$ });
4666
+ const { when } = Dsl.disposeWith(this);
4667
+ this.onDispose(() => this.disposeOfPagedListModel());
4668
+ when(this.enablePaging$).changes(enabled => this.configurePaging(enabled));
5182
4669
  }
5183
4670
  ngOnInit() {
5184
4671
  super.ngOnInit();
5185
- const { when } = Dsl.disposeWith(this);
5186
4672
  if (CanProxy.hasTarget(this.filterModel)) {
5187
4673
  this.registerDisposable(this.filterModel.bindToTable(this._dataSource$, this.getModel().textSearchPredicate$));
5188
4674
  this.highlightText$.setDelegate(this.filterModel.highlightText$);
@@ -5191,27 +4677,50 @@ class TableComponent extends AbstractTableComponent {
5191
4677
  else {
5192
4678
  this._filteredRows$.setDelegate(this._dataSource$);
5193
4679
  }
5194
- this._visibleRows$.setDelegate(this._filteredRows$);
5195
- // 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);
5196
4681
  this.tableModel.bindToTable(this._filteredRows$, this._visibleRows$);
5197
- when.anyOf(...this.tableModel.viewStateDependencies).changes(() => this.cdr.markForCheck());
5198
- this.viewStateDependsOn(this._filteredRows$, this.tableModel.visibleColumns$);
5199
4682
  }
5200
4683
  getModel() {
5201
4684
  return this.tableModel;
5202
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
+ }
5203
4708
  footerContentChanged($event) {
5204
4709
  // console.log($event);
5205
4710
  this._footerContentAdded = true;
5206
4711
  }
4712
+ //@Trace()
4713
+ updatePageSize(count) {
4714
+ this._pageSize.value = count;
4715
+ }
5207
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 });
5208
- 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: [
5209
4718
  { provide: AbstractTableComponent, useExisting: TableComponent }
5210
- ], 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"] }] });
5211
4720
  }
5212
4721
  __decorate([
5213
4722
  Proxify(),
5214
- __metadata("design:type", TableModel)
4723
+ __metadata("design:type", Object)
5215
4724
  ], TableComponent.prototype, "tableModel", null);
5216
4725
  __decorate([
5217
4726
  Proxify(),
@@ -5219,27 +4728,24 @@ __decorate([
5219
4728
  ], TableComponent.prototype, "filterModel", null);
5220
4729
  __decorate([
5221
4730
  Proxify(),
5222
- __metadata("design:type", ValueModel)
5223
- ], TableComponent.prototype, "scrollMode$", null);
4731
+ __metadata("design:type", Object)
4732
+ ], TableComponent.prototype, "enablePaging$", null);
5224
4733
  __decorate([
5225
4734
  StoreInValueModel(),
5226
4735
  __metadata("design:type", Object)
5227
- ], TableComponent.prototype, "scrollMode", null);
4736
+ ], TableComponent.prototype, "enablePaging", null);
5228
4737
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableComponent, decorators: [{
5229
4738
  type: Component,
5230
4739
  args: [{ selector: 'aup-table', providers: [
5231
4740
  { provide: AbstractTableComponent, useExisting: TableComponent }
5232
- ], 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"] }]
5233
4742
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { tableModel: [{
5234
4743
  type: Input
5235
4744
  }], filterModel: [{
5236
4745
  type: Input
5237
- }], tableBody: [{
5238
- type: ViewChild,
5239
- args: [TableBodyComponent]
5240
- }], scrollMode$: [{
4746
+ }], enablePaging$: [{
5241
4747
  type: Input
5242
- }], scrollMode: [{
4748
+ }], enablePaging: [{
5243
4749
  type: Input
5244
4750
  }] } });
5245
4751
 
@@ -5421,7 +4927,7 @@ var DecoratedTreeNode;
5421
4927
  }
5422
4928
  }
5423
4929
  __decorate([
5424
- MemoizeGet(),
4930
+ Memoize(),
5425
4931
  __metadata("design:type", Array),
5426
4932
  __metadata("design:paramtypes", [])
5427
4933
  ], Decorator.prototype, "children", null);
@@ -5474,7 +4980,7 @@ var DecoratedTreeNode;
5474
4980
  __metadata("design:returntype", Array)
5475
4981
  ], Decorator.prototype, "ancestors", null);
5476
4982
  __decorate([
5477
- MemoizeGet(),
4983
+ Memoize(),
5478
4984
  __metadata("design:type", Number),
5479
4985
  __metadata("design:paramtypes", [])
5480
4986
  ], Decorator.prototype, "depth", null);
@@ -5485,8 +4991,8 @@ class TreeLabelColumnModel extends ColumnModel {
5485
4991
  expansionModel;
5486
4992
  labelFactory = () => undefined;
5487
4993
  iconFactory;
5488
- constructor(columnId, order, textPropertiesProvider, expansionModel) {
5489
- super(columnId, order, textPropertiesProvider);
4994
+ constructor(columnId, textPropertiesProvider, expansionModel) {
4995
+ super(columnId, textPropertiesProvider);
5490
4996
  this.expansionModel = expansionModel;
5491
4997
  this.cellRenderer(TreeLabelCellRendererComponent);
5492
4998
  }
@@ -5545,7 +5051,7 @@ class TreeTableModel extends AbstractTableModel {
5545
5051
  get isExpandedPredicate$() {
5546
5052
  return this._isExpandedPredicate$.readonly$;
5547
5053
  }
5548
- bindToTable(expansionModel, filteredRows$, visibleRows$, cdr) {
5054
+ bindToTable(expansionModel, filteredRows$, visibleRows$) {
5549
5055
  this.treeExpansionModel = expansionModel;
5550
5056
  // TODO: Move all the expansion model stuff out of here and have things use the expansion model directly
5551
5057
  this._isExpandedPredicate$.setDelegate(this.treeExpansionModel.isExpandedPredicate$);
@@ -5554,7 +5060,7 @@ class TreeTableModel extends AbstractTableModel {
5554
5060
  }
5555
5061
  treeControlColumn(builder) {
5556
5062
  const columnId = 'tree-label';
5557
- const column = new TreeLabelColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), this);
5063
+ const column = new TreeLabelColumnModel(columnId, () => this.getColumnTextProperties(columnId), this);
5558
5064
  builder(column);
5559
5065
  this.addColumn(column);
5560
5066
  }
@@ -5880,15 +5386,11 @@ class TreeTableComponent extends AbstractTableComponent {
5880
5386
  #expansionModel_accessor_storage = proxify((TreeExpansionModel));
5881
5387
  get expansionModel() { return this.#expansionModel_accessor_storage; }
5882
5388
  set expansionModel(value) { this.#expansionModel_accessor_storage = value; }
5883
- scrollMode$;
5884
5389
  constructor(injector) {
5885
5390
  super(injector);
5886
- const { chain } = Dsl.disposeWith(this);
5887
- this.scrollMode$ = chain(this.enableScrolling$).map(enabled => enabled ? "classic" : "none");
5888
5391
  }
5889
5392
  ngOnInit() {
5890
5393
  super.ngOnInit();
5891
- const { when } = Dsl.disposeWith(this);
5892
5394
  // TODO: clean up all this tightly coupled shit, should the expansion model really be separate from the tree model?
5893
5395
  if (!this.expansionModel) {
5894
5396
  this.expansionModel = new TreeExpansionModel({ disposedWith: this });
@@ -5897,10 +5399,7 @@ class TreeTableComponent extends AbstractTableComponent {
5897
5399
  const visibleRows$ = new FlattenedTreeListModel(this._dataSource$, row => this.treeTableModel.childExtractor(row), this.expansionModel);
5898
5400
  this._visibleRows$.setDelegate(visibleRows$);
5899
5401
  this.expansionModel.bindToTable(this._dataSource$, visibleRows$);
5900
- this.treeTableModel.bindToTable(this.expansionModel, visibleRows$, this._visibleRows$, this.cdr);
5901
- this.viewStateDependsOn(this.treeTableModel.visibleRows$);
5902
- this.viewStateDependsOn(this.treeTableModel.visibleRows$);
5903
- when.anyOf(...this.treeTableModel.viewStateDependencies).changes(() => this.cdr.markForCheck());
5402
+ this.treeTableModel.bindToTable(this.expansionModel, visibleRows$, this._visibleRows$);
5904
5403
  }
5905
5404
  getModel() {
5906
5405
  return this.treeTableModel;
@@ -5908,7 +5407,7 @@ class TreeTableComponent extends AbstractTableComponent {
5908
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 });
5909
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: [
5910
5409
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
5911
- ], 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"] }] });
5912
5411
  }
5913
5412
  __decorate([
5914
5413
  Proxify(),
@@ -5922,7 +5421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
5922
5421
  type: Component,
5923
5422
  args: [{ selector: 'aup-tree-table', providers: [
5924
5423
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
5925
- ], 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"] }]
5926
5425
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { treeTableModel: [{
5927
5426
  type: Input
5928
5427
  }], expansionModel: [{
@@ -6104,7 +5603,6 @@ class ComponentsModule {
6104
5603
  FocusableComponent,
6105
5604
  CardContainerComponent,
6106
5605
  TableComponent,
6107
- TableRowAttributesDirective,
6108
5606
  EditRowControlsComponent,
6109
5607
  ColumnTemplateDirective,
6110
5608
  DefaultCellRendererComponent,
@@ -6138,9 +5636,7 @@ class ComponentsModule {
6138
5636
  MarkdownComponent,
6139
5637
  TableBodyComponent,
6140
5638
  TableMoreMenuComponent,
6141
- TableMoreMenuPopupComponent,
6142
- SearchInputComponent,
6143
- TableFooterRow], imports: [CommonModule,
5639
+ TableMoreMenuPopupComponent], imports: [CommonModule,
6144
5640
  BrowserAnimationsModule,
6145
5641
  FormsModule,
6146
5642
  MatInputModule,
@@ -6159,10 +5655,7 @@ class ComponentsModule {
6159
5655
  MatMenuModule,
6160
5656
  MatDividerModule,
6161
5657
  MatProgressSpinnerModule,
6162
- MatProgressBarModule,
6163
- ScrollingModule,
6164
- TableVirtualScrollModule], exports: [TableFooterRow,
6165
- NumberInputComponent,
5658
+ MatProgressBarModule], exports: [NumberInputComponent,
6166
5659
  StringInputComponent,
6167
5660
  TextInputComponent,
6168
5661
  PasswordInputComponent,
@@ -6200,8 +5693,7 @@ class ComponentsModule {
6200
5693
  LoadingContainerComponent,
6201
5694
  MarkdownComponent,
6202
5695
  TableMoreMenuComponent,
6203
- TableMoreMenuPopupComponent,
6204
- SearchInputComponent] });
5696
+ TableMoreMenuPopupComponent] });
6205
5697
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ComponentsModule, providers: [
6206
5698
  FocusBindingFactory,
6207
5699
  MarkdownService
@@ -6224,9 +5716,7 @@ class ComponentsModule {
6224
5716
  MatMenuModule,
6225
5717
  MatDividerModule,
6226
5718
  MatProgressSpinnerModule,
6227
- MatProgressBarModule,
6228
- ScrollingModule,
6229
- TableVirtualScrollModule] });
5719
+ MatProgressBarModule] });
6230
5720
  }
6231
5721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ComponentsModule, decorators: [{
6232
5722
  type: NgModule,
@@ -6251,9 +5741,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6251
5741
  MatMenuModule,
6252
5742
  MatDividerModule,
6253
5743
  MatProgressSpinnerModule,
6254
- MatProgressBarModule,
6255
- ScrollingModule,
6256
- TableVirtualScrollModule
5744
+ MatProgressBarModule
6257
5745
  ],
6258
5746
  declarations: [
6259
5747
  AbstractInputComponent,
@@ -6277,7 +5765,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6277
5765
  FocusableComponent,
6278
5766
  CardContainerComponent,
6279
5767
  TableComponent,
6280
- TableRowAttributesDirective,
6281
5768
  EditRowControlsComponent,
6282
5769
  ColumnTemplateDirective,
6283
5770
  DefaultCellRendererComponent,
@@ -6312,11 +5799,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6312
5799
  TableBodyComponent,
6313
5800
  TableMoreMenuComponent,
6314
5801
  TableMoreMenuPopupComponent,
6315
- SearchInputComponent,
6316
- TableFooterRow
6317
5802
  ],
6318
5803
  exports: [
6319
- TableFooterRow,
6320
5804
  NumberInputComponent,
6321
5805
  StringInputComponent,
6322
5806
  TextInputComponent,
@@ -6356,7 +5840,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6356
5840
  MarkdownComponent,
6357
5841
  TableMoreMenuComponent,
6358
5842
  TableMoreMenuPopupComponent,
6359
- SearchInputComponent
6360
5843
  ],
6361
5844
  providers: [
6362
5845
  FocusBindingFactory,
@@ -6365,73 +5848,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6365
5848
  }]
6366
5849
  }] });
6367
5850
 
6368
- class LoadableComponent extends DisposableComponent {
6369
- #_loaded$ = new MutableValueModel();
6370
- #asyncLoadables = [];
6371
- #awaitedLoadables = [];
6372
- get loaded$() {
6373
- return this.#_loaded$.readonly$;
6374
- }
6375
- ngOnInit() {
6376
- super.ngOnInit();
6377
- this.#asyncLoadables.forEach(it => it.ensureLoaded());
6378
- if (this.#awaitedLoadables.length > 0) {
6379
- Promise.all(this.#awaitedLoadables.map(it => {
6380
- return it.ensureLoaded(); //.then(() => console.log(`${it.constructor.name} loaded`));
6381
- })).then(() => {
6382
- this.#_loaded$.value = true;
6383
- });
6384
- }
6385
- else {
6386
- this.#_loaded$.value = true;
6387
- }
6388
- }
6389
- injectLoadable(token, options) {
6390
- return this.registerLoadable(inject(token), options);
6391
- }
6392
- registerLoadable(loadable, options) {
6393
- if (this.loaded$.value) {
6394
- loadable.ensureLoaded();
6395
- }
6396
- else {
6397
- if (!options || options.wait === true) {
6398
- this.#awaitedLoadables.push(loadable);
6399
- }
6400
- else {
6401
- this.#asyncLoadables.push(loadable);
6402
- }
6403
- }
6404
- return loadable;
6405
- }
6406
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: LoadableComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
6407
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: LoadableComponent, usesInheritance: true, ngImport: i0 });
6408
- }
6409
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: LoadableComponent, decorators: [{
6410
- type: Directive
6411
- }] });
6412
-
6413
- class TextSearchContext {
6414
- row;
6415
- searchText;
6416
- searchRegex;
6417
- constructor(row, searchText, searchRegex) {
6418
- this.row = row;
6419
- this.searchText = searchText;
6420
- this.searchRegex = searchRegex;
6421
- }
6422
- getOrCreate(type, create) {
6423
- }
6424
- matchesText(text) {
6425
- return this.searchRegex.test(text);
6426
- }
6427
- }
6428
-
6429
- class AbstractCellRenderer extends LoadableComponent {
6430
- constructor() {
6431
- super();
6432
- }
6433
- }
6434
-
6435
5851
  /**
6436
5852
  * @file Automatically generated by barrelsby.
6437
5853
  */
@@ -6458,6 +5874,7 @@ class AbstractCellRenderer extends LoadableComponent {
6458
5874
  * </aup-activity-actions>
6459
5875
  */
6460
5876
  class ActivityActionsComponent extends DisposableComponent {
5877
+ cdr;
6461
5878
  confirmCommandComponent;
6462
5879
  cancelCommandComponent;
6463
5880
  #confirmCommand_accessor_storage = proxify((Command));
@@ -6486,9 +5903,9 @@ class ActivityActionsComponent extends DisposableComponent {
6486
5903
  }
6487
5904
  layout = ActivityActionsComponent.Layout.BLOCK;
6488
5905
  align = ActivityActionsComponent.Align.STRETCH;
6489
- alignContent = ActivityActionsComponent.AlignContent.CENTER;
6490
- constructor() {
5906
+ constructor(cdr) {
6491
5907
  super();
5908
+ this.cdr = cdr;
6492
5909
  }
6493
5910
  hasConfirmFace() {
6494
5911
  return !!this.confirmFace;
@@ -6507,8 +5924,8 @@ class ActivityActionsComponent extends DisposableComponent {
6507
5924
  focusCancel() {
6508
5925
  this.cancelCommandComponent.requestFocus();
6509
5926
  }
6510
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6511
- 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"] }] });
6512
5929
  }
6513
5930
  __decorate([
6514
5931
  Proxify(),
@@ -6520,8 +5937,8 @@ __decorate([
6520
5937
  ], ActivityActionsComponent.prototype, "cancelCommand", null);
6521
5938
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, decorators: [{
6522
5939
  type: Component,
6523
- 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"] }]
6524
- }], 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: [{
6525
5942
  type: ViewChild,
6526
5943
  args: ["confirmCommandComponent"]
6527
5944
  }], cancelCommandComponent: [{
@@ -6549,11 +5966,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6549
5966
  }, {
6550
5967
  type: HostBinding,
6551
5968
  args: ['attr.align']
6552
- }], alignContent: [{
6553
- type: Input
6554
- }, {
6555
- type: HostBinding,
6556
- args: ['attr.align-content']
6557
5969
  }] } });
6558
5970
  (function (ActivityActionsComponent) {
6559
5971
  ActivityActionsComponent.Layout = Enum({
@@ -6562,19 +5974,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6562
5974
  });
6563
5975
  ActivityActionsComponent.Align = Enum({
6564
5976
  START: 'start',
6565
- STRETCH: 'stretch',
6566
- END: 'end'
6567
- });
6568
- ActivityActionsComponent.AlignContent = Enum({
6569
- START: 'start',
6570
- CENTER: 'center',
6571
- END: 'end'
5977
+ END: 'end',
5978
+ STRETCH: 'stretch'
6572
5979
  });
6573
5980
  })(ActivityActionsComponent || (ActivityActionsComponent = {}));
6574
5981
 
6575
5982
  const ACTIVITY_DATA = new InjectionToken("InteractionActivityData");
6576
5983
  // eslint-disable-next-line @angular-eslint/component-class-suffix
6577
- class Activity extends LoadableComponent {
5984
+ class Activity extends DisposableComponent {
6578
5985
  activityData = inject(ACTIVITY_DATA);
6579
5986
  activityReadyListeners = new EventListenerList();
6580
5987
  _busy$ = this.registerDisposable(new DelegatingValueModel().withDefault(false));
@@ -6629,6 +6036,7 @@ class Activity extends LoadableComponent {
6629
6036
  notifyActivityReady() {
6630
6037
  this.activityReadyListeners.fire(l => l(this));
6631
6038
  this._ready$.value = true;
6039
+ console.log("ready");
6632
6040
  }
6633
6041
  onActivityReady(callback) {
6634
6042
  return this.activityReadyListeners.add(callback);
@@ -6748,7 +6156,7 @@ class AbstractDialogComponent extends Activity {
6748
6156
  }
6749
6157
  }
6750
6158
  isDestructive() {
6751
- return isFunction(this.config['destructive']) && this.config["destructive"]();
6159
+ return isFunction$1(this.config['destructive']) && this.config["destructive"]();
6752
6160
  }
6753
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 });
6754
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 });
@@ -6765,7 +6173,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6765
6173
 
6766
6174
  class AbstractConfirmDialogComponent extends AbstractDialogComponent {
6767
6175
  cancelFace;
6768
- confirmClass = "aup-confirm-activity";
6769
6176
  constructor(config) {
6770
6177
  super(config);
6771
6178
  this.cancelFace = {
@@ -6776,7 +6183,7 @@ class AbstractConfirmDialogComponent extends AbstractDialogComponent {
6776
6183
  });
6777
6184
  }
6778
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 });
6779
- 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 });
6780
6187
  }
6781
6188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractConfirmDialogComponent, decorators: [{
6782
6189
  type: Component,
@@ -6786,10 +6193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6786
6193
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
6787
6194
  type: Inject,
6788
6195
  args: [ALERT_CONFIG]
6789
- }] }]; }, propDecorators: { confirmClass: [{
6790
- type: HostBinding,
6791
- args: ["class"]
6792
- }] } });
6196
+ }] }]; } });
6793
6197
 
6794
6198
  class ActivityBodyComponent extends DisposableComponent {
6795
6199
  fullWidth = false;
@@ -7328,7 +6732,7 @@ const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
7328
6732
  // return true;
7329
6733
  // }
7330
6734
  // }
7331
- class PlaceComponent extends LoadableComponent {
6735
+ class PlaceComponent extends DisposableComponent {
7332
6736
  _placeReadyCallbacks = [];
7333
6737
  visitModel = new MutableValueModel();
7334
6738
  _inVisitUpdate = new Guard();
@@ -7385,7 +6789,6 @@ class PlaceComponent extends LoadableComponent {
7385
6789
  */
7386
6790
  installAndInitialiseBinding(initialVisit, parameterDef) {
7387
6791
  const model = this[parameterDef.propertyName];
7388
- assert.notNil(model);
7389
6792
  DebugContext.tag(model, `${this.placeDefinition.component.name}.${parameterDef.propertyName}`);
7390
6793
  const binding = this.registerDisposable(new Binding(this.visitModel, model, {
7391
6794
  toRight(visit) {
@@ -7470,7 +6873,7 @@ class PlaceComponent extends LoadableComponent {
7470
6873
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: PlaceComponent, usesInheritance: true, ngImport: i0 });
7471
6874
  }
7472
6875
  __decorate([
7473
- MemoizeGet(),
6876
+ Memoize(),
7474
6877
  __metadata("design:type", PlaceDefinition),
7475
6878
  __metadata("design:paramtypes", [])
7476
6879
  ], PlaceComponent.prototype, "placeDefinition", null);
@@ -7660,7 +7063,7 @@ class Visit {
7660
7063
  getRouterCommands() {
7661
7064
  return this.segments.reduce((result, v) => {
7662
7065
  const path = v.placeDefinition.path;
7663
- return isEmpty(path) ?
7066
+ return isEmpty$1(path) ?
7664
7067
  [...result, path] : // Angular doesn't support route params on empty path segments
7665
7068
  [...result, path, ...v.createRouterCommands()];
7666
7069
  }, []);
@@ -7676,7 +7079,7 @@ class Visit {
7676
7079
  }
7677
7080
  }
7678
7081
  __decorate([
7679
- Memoize(),
7082
+ Memoize$1(),
7680
7083
  __metadata("design:type", Function),
7681
7084
  __metadata("design:paramtypes", [PlaceDefinition]),
7682
7085
  __metadata("design:returntype", VisitSegment)
@@ -8057,7 +7460,10 @@ class SynchroniseInteractionContextIdsWithRoute extends NavigationSession {
8057
7460
  return true;
8058
7461
  }
8059
7462
  notifyActive() {
8060
- this.syncInteractionIdsWithRouter();
7463
+ // TODO: Do I still need this??
7464
+ setTimeout(() => {
7465
+ this.syncInteractionIdsWithRouter();
7466
+ });
8061
7467
  }
8062
7468
  // @Trace()
8063
7469
  onRouterEnd(event) {
@@ -8800,7 +8206,7 @@ class ConsolidatedParameterMap {
8800
8206
  }
8801
8207
  }
8802
8208
  __decorate([
8803
- MemoizeGet(),
8209
+ Memoize(),
8804
8210
  __metadata("design:type", Array),
8805
8211
  __metadata("design:paramtypes", [])
8806
8212
  ], ConsolidatedParameterMap.prototype, "keys", null);
@@ -8878,7 +8284,7 @@ class UrlSnapshot {
8878
8284
  return this.getPrimaryUrlSegments().find(s => s.path === placeDef.path);
8879
8285
  }
8880
8286
  isLastPlaceInUrl(placeDef) {
8881
- return last(this.getPrimaryUrlSegments()).path === placeDef.path;
8287
+ return last$1(this.getPrimaryUrlSegments()).path === placeDef.path;
8882
8288
  }
8883
8289
  createVisitSegmentFor(placeDef) {
8884
8290
  return new VisitSegment(placeDef, new ConsolidatedParameterMap(this.getPrimaryUrlSegments()));
@@ -8994,7 +8400,7 @@ class UrlService {
8994
8400
  back() {
8995
8401
  this.angularLocation.back();
8996
8402
  }
8997
- 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 });
8998
8404
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: UrlService, providedIn: 'root' });
8999
8405
  }
9000
8406
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: UrlService, decorators: [{
@@ -9002,7 +8408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9002
8408
  args: [{
9003
8409
  providedIn: 'root'
9004
8410
  }]
9005
- }], 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 }]; } });
9006
8412
 
9007
8413
  // function asArray<T>(item: T | T[]): T[] {
9008
8414
  // return Array.isArray(item) ? item : [item];
@@ -9022,8 +8428,6 @@ class PlaceRouter extends GarbageCollector {
9022
8428
  routerInteractionAdapter;
9023
8429
  sessionFinishedJobs = [];
9024
8430
  authService = new PlaceAuthService();
9025
- _ready$ = this.registerDisposable(new DelegatingValueModel().withDefault(true));
9026
- ready$ = this._ready$.readonly$;
9027
8431
  constructor(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
9028
8432
  super();
9029
8433
  this.angularRouter = angularRouter;
@@ -9045,7 +8449,7 @@ class PlaceRouter extends GarbageCollector {
9045
8449
  });
9046
8450
  const { chain } = Dsl.disposeWith(this);
9047
8451
  this.navigationInProgress$ = chain(this.navigationSession$).isNotNil();
9048
- this.interactionSyncInProgress$ = chain(this.navigationSession$).pluck("isInteractionSync").otherwise(false);
8452
+ this.interactionSyncInProgress$ = chain(this.navigationSession$).pluck("isInteractionSync");
9049
8453
  const idleStateName = chain(this.interactionService.active).map(active => active ? "IdleDuringInteraction" : "Idle");
9050
8454
  this.navigationSessionName$ = chain(this.navigationSession$)
9051
8455
  .pluck("name")
@@ -9089,9 +8493,6 @@ class PlaceRouter extends GarbageCollector {
9089
8493
  // the back button was clicked.
9090
8494
  angularLocation.onUrlChange(url => this.onUrlChanged(url));
9091
8495
  }
9092
- postponeRoutingUntil(condition$) {
9093
- this._ready$.setDelegate(condition$);
9094
- }
9095
8496
  getAuthenticationFailureRedirect(activatedRoute, state) {
9096
8497
  return this.authService.getAuthenticationFailureRedirect(activatedRoute, state);
9097
8498
  }
@@ -9107,20 +8508,23 @@ class PlaceRouter extends GarbageCollector {
9107
8508
  isNavigating() {
9108
8509
  return this.navigationInProgress$.value;
9109
8510
  }
9110
- async waitUntilRouterReady() {
9111
- const { waitUntil } = Dsl.disposeWith(this);
9112
- await waitUntil(this.ready$).becomesTruthy();
9113
- return this;
9114
- }
9115
- async waitUntilIdle() {
9116
- const { waitUntil } = Dsl.disposeWith(this);
9117
- await waitUntil(this.navigationInProgress$).becomesFalsey();
9118
- 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
+ });
9119
8519
  }
9120
8520
  async waitActivitiesSynchronised() {
9121
- const { waitUntil } = Dsl.disposeWith(this);
9122
- await waitUntil(this.interactionSyncInProgress$).becomesFalsey();
9123
- 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
+ });
9124
8528
  }
9125
8529
  // @Trace()
9126
8530
  onPopState(event) {
@@ -9306,7 +8710,7 @@ class PlaceRouter extends GarbageCollector {
9306
8710
  return Visit.goto(visitOrPlaceComponent, params);
9307
8711
  }
9308
8712
  }
9309
- 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 });
9310
8714
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, providedIn: "root" });
9311
8715
  }
9312
8716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, decorators: [{
@@ -9314,7 +8718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9314
8718
  args: [{
9315
8719
  providedIn: "root"
9316
8720
  }]
9317
- }], 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 }]; } });
9318
8722
 
9319
8723
  class ActivityTitleComponent extends DisposableComponent {
9320
8724
  _color;
@@ -9336,11 +8740,11 @@ class ActivityTitleComponent extends DisposableComponent {
9336
8740
  return this._color;
9337
8741
  }
9338
8742
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
9339
- 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"] });
9340
8744
  }
9341
8745
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityTitleComponent, decorators: [{
9342
8746
  type: Component,
9343
- 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"] }]
9344
8748
  }], propDecorators: { hasTransparentBackground: [{
9345
8749
  type: Input
9346
8750
  }, {
@@ -9361,7 +8765,7 @@ class AlertDialogComponent extends AbstractDialogComponent {
9361
8765
  });
9362
8766
  }
9363
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 });
9364
- 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"] }] });
9365
8769
  }
9366
8770
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AlertDialogComponent, decorators: [{
9367
8771
  type: Component,
@@ -9381,7 +8785,7 @@ class ConfirmThenDialogComponent extends AbstractConfirmDialogComponent {
9381
8785
  });
9382
8786
  }
9383
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 });
9384
- 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"] }] });
9385
8789
  }
9386
8790
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmThenDialogComponent, decorators: [{
9387
8791
  type: Component,
@@ -9405,7 +8809,7 @@ class ConfirmThenExecuteDialogComponent extends AbstractConfirmDialogComponent {
9405
8809
  });
9406
8810
  }
9407
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 });
9408
- 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"] }] });
9409
8813
  }
9410
8814
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmThenExecuteDialogComponent, decorators: [{
9411
8815
  type: Component,
@@ -9425,7 +8829,7 @@ class ConfirmationDialogComponent extends AbstractConfirmDialogComponent {
9425
8829
  });
9426
8830
  }
9427
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 });
9428
- 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"] }] });
9429
8833
  }
9430
8834
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmationDialogComponent, decorators: [{
9431
8835
  type: Component,
@@ -9605,7 +9009,6 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9605
9009
  tabs;
9606
9010
  activityOutlets;
9607
9011
  activityRefs = [];
9608
- animationDuration = "500ms";
9609
9012
  _identifier;
9610
9013
  _deferredCleanUp;
9611
9014
  interactionServiceApi;
@@ -9618,7 +9021,6 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9618
9021
  busy = this.registerDisposable(new DelegatingValueModel().withDefault(false));
9619
9022
  syncTabsJob = undefined;
9620
9023
  stable$;
9621
- wasActive = false;
9622
9024
  constructor(placeRouter) {
9623
9025
  super();
9624
9026
  this.placeRouter = placeRouter;
@@ -9655,12 +9057,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9655
9057
  * Returns true if an activity is currently running.
9656
9058
  */
9657
9059
  isActive() {
9658
- const isActive = this.getActiveActivityCount() > 0;
9659
- // if (this.wasActive !== isActive) {
9660
- // console.log({was: this.wasActive, is: isActive});
9661
- // }
9662
- // this.wasActive = isActive
9663
- return isActive;
9060
+ return this.getActiveActivityCount() > 0;
9664
9061
  }
9665
9062
  registerDisposable(disposable) {
9666
9063
  return this.garbage.registerDisposable(disposable);
@@ -9743,7 +9140,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9743
9140
  // by activity index)
9744
9141
  setTimeout(() => {
9745
9142
  this.activityRefs = []; // we have to do it after the animation timeout or the activity disappears before the animatin finsihes
9746
- }, this.getTabAnimationDurationInMillis());
9143
+ }, this.getTabAnimationDuration());
9747
9144
  const promise = this.interactionServiceApi.notifyFinished(this);
9748
9145
  this._deferredCleanUp = promise
9749
9146
  .finally(() => {
@@ -9769,6 +9166,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9769
9166
  /**
9770
9167
  * Synchronises the selected tab index.
9771
9168
  */
9169
+ // @Trace()
9772
9170
  synchroniseSelectedTabIndex() {
9773
9171
  assert.isTruthy(this.isActive());
9774
9172
  const previousIndex = this.tabs.selectedIndex;
@@ -9780,10 +9178,10 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9780
9178
  activityRef.setFocused(false);
9781
9179
  this.busy.setDelegate(activityRef.activityBusy);
9782
9180
  this.tabs.selectedIndex = newIndex;
9783
- // if (this.ready$.value) {
9784
- // // Note: We're not using the animation done event as it's firing almost immeadiately.
9785
- // setTimeout(() => this.finaliseActivityStates(), animate ? this.getTabAnimationDurationInMillis() : 0);
9786
- // }
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
+ }
9787
9185
  }
9788
9186
  }
9789
9187
  finaliseActivityStates() {
@@ -9797,12 +9195,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9797
9195
  return this.activityOutlets.toArray()[this.tabs.selectedIndex];
9798
9196
  }
9799
9197
  getTabAnimationDuration() {
9800
- // const s = this._started$.value ? this.animationDuration : "0";
9801
- // return s
9802
- return this.animationDuration;
9803
- }
9804
- getTabAnimationDurationInMillis() {
9805
- const match = this.animationDuration.match(/(\d+)(.*)/);
9198
+ const match = this.tabs.animationDuration.match(/(\d+)(.*)/);
9806
9199
  const numericValue = parseFloat(match[1]);
9807
9200
  switch (match[2].trim()) {
9808
9201
  case "ms":
@@ -9828,16 +9221,12 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9828
9221
  }
9829
9222
  }, 75);
9830
9223
  }
9831
- onAnimationDone() {
9832
- this._started$.value = true;
9833
- this.finaliseActivityStates();
9834
- }
9835
9224
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityContainerComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
9836
- 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"] }] });
9837
9226
  }
9838
9227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityContainerComponent, decorators: [{
9839
9228
  type: Component,
9840
- 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"] }]
9841
9230
  }], ctorParameters: function () { return [{ type: PlaceRouter }]; }, propDecorators: { dynamicHeight: [{
9842
9231
  type: Input
9843
9232
  }], tabs: [{
@@ -9846,8 +9235,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9846
9235
  }], activityOutlets: [{
9847
9236
  type: ViewChildren,
9848
9237
  args: [ActivityOutletComponent]
9849
- }], animationDuration: [{
9850
- type: Input
9851
9238
  }] } });
9852
9239
 
9853
9240
  class AbstractActivityTriggerComponent extends DisposableComponent {
@@ -9948,16 +9335,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9948
9335
  args: ['class.active']
9949
9336
  }] } });
9950
9337
 
9951
- const INTERACTION_CONTEXT = new InjectionToken('interactionContext');
9952
-
9953
- const cssDurationRegex$1 = /(\d+)(m?s)/;
9338
+ const cssDurationRegex = /(\d+)(m?s)/;
9954
9339
  /**
9955
9340
  * @example
9956
9341
  * <aup-in-place-interaction-context #inPlaceInteractionContext>
9957
9342
  * </aup-in-place-interaction-context>
9958
9343
  *
9959
9344
  * in your component
9960
- * @ViewChild(InPlaceInteractionContextComponent)
9345
+ * @ViewChild('inPlaceInteractionContext', { static: true })
9961
9346
  * interactionContext: InteractionContext;
9962
9347
  *
9963
9348
  *
@@ -9976,13 +9361,11 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
9976
9361
  * active interactions.
9977
9362
  */
9978
9363
  syncWithRoutes = true;
9979
- started = new EventEmitter();
9980
- finished = new EventEmitter();
9981
9364
  get animationDuration() {
9982
9365
  return this.animateFirstActivity ? (this.tabConfig?.animationDuration || "500ms") : "0ms";
9983
9366
  }
9984
9367
  get animationDurationMillis() {
9985
- const result = cssDurationRegex$1.exec(this.animationDuration);
9368
+ const result = cssDurationRegex.exec(this.animationDuration);
9986
9369
  if (!result) {
9987
9370
  lang.illegalState(`unsupported css duration: ${this.animationDuration}`);
9988
9371
  }
@@ -10004,16 +9387,11 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
10004
9387
  this.interactionService.registerInplaceInteractionContext(this);
10005
9388
  }
10006
9389
  else {
10007
- const self = this;
10008
9390
  this.activityContainerComponent.initialise("dont-care", {
10009
9391
  async notifyActive(interactionContext) {
10010
- self.started.emit();
10011
9392
  return undefined;
10012
9393
  },
10013
9394
  async notifyFinished(interactionContext) {
10014
- // I've noticed some rendering fails when returning the the transcluded content we'll fire an event
10015
- // so components can do stuff if they need to.
10016
- self.started.emit();
10017
9395
  return undefined;
10018
9396
  }
10019
9397
  });
@@ -10060,15 +9438,11 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
10060
9438
  }
10061
9439
  }
10062
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 });
10063
- 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: [
10064
- { provide: INTERACTION_CONTEXT, useExisting: InPlaceInteractionContextComponent }
10065
- ], 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"] }] });
10066
9442
  }
10067
9443
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InPlaceInteractionContextComponent, decorators: [{
10068
9444
  type: Component,
10069
- args: [{ selector: "aup-in-place-interaction-context", providers: [
10070
- { provide: INTERACTION_CONTEXT, useExisting: InPlaceInteractionContextComponent }
10071
- ], 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"] }]
10072
9446
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
10073
9447
  type: Inject,
10074
9448
  args: [MAT_TABS_CONFIG]
@@ -10081,10 +9455,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10081
9455
  type: Input
10082
9456
  }], syncWithRoutes: [{
10083
9457
  type: Input
10084
- }], started: [{
10085
- type: Output
10086
- }], finished: [{
10087
- type: Output
10088
9458
  }], active: [{
10089
9459
  type: HostBinding,
10090
9460
  args: ["class.active"]
@@ -10099,7 +9469,7 @@ class InlineActivityTriggerComponent extends AbstractActivityTriggerComponent {
10099
9469
  super();
10100
9470
  }
10101
9471
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InlineActivityTriggerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10102
- 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"] }] });
10103
9473
  }
10104
9474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InlineActivityTriggerComponent, decorators: [{
10105
9475
  type: Component,
@@ -10223,7 +9593,7 @@ class PopupInteractionContextComponent extends DisposableComponent {
10223
9593
  isActive() {
10224
9594
  return this.interactionContext && this.interactionContext.isActive();
10225
9595
  }
10226
- 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 });
10227
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"] });
10228
9598
  }
10229
9599
  __decorate([
@@ -10237,7 +9607,7 @@ __decorate([
10237
9607
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PopupInteractionContextComponent, decorators: [{
10238
9608
  type: Component,
10239
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"] }]
10240
- }], 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: [{
10241
9611
  type: Optional
10242
9612
  }, {
10243
9613
  type: SkipSelf
@@ -10322,7 +9692,7 @@ class AddCardActivityComponent extends AbstractActivityTriggerComponent {
10322
9692
  return this.interactionStyle === 'inline';
10323
9693
  }
10324
9694
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AddCardActivityComponent, deps: [{ token: InteractionService }], target: i0.ɵɵFactoryTarget.Component });
10325
- 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"] }] });
10326
9696
  }
10327
9697
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AddCardActivityComponent, decorators: [{
10328
9698
  type: Component,
@@ -10398,7 +9768,7 @@ class AddItemInteractionContextComponent extends DisposableComponent {
10398
9768
  return this.interactionContext.startActivity(activityType, data);
10399
9769
  }
10400
9770
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AddItemInteractionContextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10401
- 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"] }] });
10402
9772
  }
10403
9773
  __decorate([
10404
9774
  Proxify(),
@@ -10537,14 +9907,12 @@ class StringInputActivity extends InputActivity {
10537
9907
  [label]="activityData.label"
10538
9908
  [placeholder]="activityData.placeholder"
10539
9909
  [command.enter]="confirmCommand"
10540
- [command.escape]="cancelCommand"
10541
- [dense]="true"
10542
- ></aup-string-input>
9910
+ [command.escape]="cancelCommand"></aup-string-input>
10543
9911
  <aup-activity-actions [layout]="layout" align="end"
10544
9912
  [confirmFace]="confirmFace"
10545
9913
  [cancelFace]="cancelFace"
10546
9914
  ></aup-activity-actions>
10547
- `, 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"] }] });
10548
9916
  }
10549
9917
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputActivity, decorators: [{
10550
9918
  type: Component,
@@ -10555,9 +9923,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10555
9923
  [label]="activityData.label"
10556
9924
  [placeholder]="activityData.placeholder"
10557
9925
  [command.enter]="confirmCommand"
10558
- [command.escape]="cancelCommand"
10559
- [dense]="true"
10560
- ></aup-string-input>
9926
+ [command.escape]="cancelCommand"></aup-string-input>
10561
9927
  <aup-activity-actions [layout]="layout" align="end"
10562
9928
  [confirmFace]="confirmFace"
10563
9929
  [cancelFace]="cancelFace"
@@ -10740,7 +10106,7 @@ class InlineStringEditorComponent extends DisposableComponent {
10740
10106
  return !this.editingEnabled$.value;
10741
10107
  }
10742
10108
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InlineStringEditorComponent, deps: [{ token: InteractionService }], target: i0.ɵɵFactoryTarget.Component });
10743
- 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"] }] });
10744
10110
  }
10745
10111
  __decorate([
10746
10112
  Proxify(),
@@ -10823,7 +10189,6 @@ class SelectInputActivity extends InputActivity {
10823
10189
  [options]="options"
10824
10190
  [optionLabelFormat]="optionLabelFormat"
10825
10191
  [allowNil]="activityData.allowNil"
10826
- [dense]="true"
10827
10192
  >
10828
10193
  <ng-template #nilOptionTemplate>{{activityData.nilLabel}}</ng-template>
10829
10194
  </aup-select-input>
@@ -10831,7 +10196,7 @@ class SelectInputActivity extends InputActivity {
10831
10196
  [confirmFace]="confirmFace"
10832
10197
  [cancelFace]="cancelFace"
10833
10198
  ></aup-activity-actions>
10834
- `, 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"] }] });
10835
10200
  }
10836
10201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputActivity, decorators: [{
10837
10202
  type: Component,
@@ -10846,7 +10211,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10846
10211
  [options]="options"
10847
10212
  [optionLabelFormat]="optionLabelFormat"
10848
10213
  [allowNil]="activityData.allowNil"
10849
- [dense]="true"
10850
10214
  >
10851
10215
  <ng-template #nilOptionTemplate>{{activityData.nilLabel}}</ng-template>
10852
10216
  </aup-select-input>
@@ -10858,186 +10222,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10858
10222
  }]
10859
10223
  }] });
10860
10224
 
10861
- const slideDownOnEnterDef = style({
10862
- opacity: 0,
10863
- 'height': '0',
10864
- 'max-height': '0',
10865
- paddingTop: '0',
10866
- paddingBottom: '0'
10867
- });
10868
- // TODO: params aren't getting customised in the view. Need to figure out the correct approach.
10869
- const slideDownOnEnterAnimation = trigger('slideDownOnEnter', [
10870
- transition(':enter', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10871
- transition(':leave', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
10872
- ]);
10873
- const slideDownWhenOpenAnimation = trigger('slideDownWhenOpen', [
10874
- transition('closed => open', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10875
- transition('open => closed', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
10876
- ]);
10877
- const slideLeftOnEnterDef = style({
10878
- opacity: 0,
10879
- 'width': '0',
10880
- paddingLeft: '0',
10881
- paddingRight: '0'
10882
- });
10883
- const slideRightOnEnterAnimation = trigger('slideRightOnEnter', [
10884
- transition(':enter', [slideLeftOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10885
- transition(':leave', [animate('{{duration}}', slideLeftOnEnterDef)], { params: { duration: '100ms' } })
10886
- ]);
10887
- const ZERO_WIDTH = {
10888
- opacity: 0,
10889
- width: '0',
10890
- paddingLeft: '0',
10891
- paddingRight: '0',
10892
- };
10893
- const ZERO_HEIGHT = {
10894
- opacity: 0,
10895
- height: '0',
10896
- paddingTop: '0',
10897
- paddingBottom: '0',
10898
- };
10899
- const slideDownAndRightOnEnterAnimation = trigger('slideDownAndRightOnEnter', [
10900
- transition(':enter', [
10901
- style({ overflow: "hidden", whiteSpace: "nowrap", ...ZERO_WIDTH, ...ZERO_HEIGHT }),
10902
- animate('{{duration}}')
10903
- ], { params: { duration: '100ms' } }),
10904
- transition(':leave', [
10905
- style({ overflow: "hidden", whiteSpace: "nowrap" }),
10906
- group([
10907
- animate('{{duration}}', style(ZERO_HEIGHT)),
10908
- // Hack: 100ms is too quick as it animates from * - 0 as we only see it animate the width is greater than the parent.
10909
- // Not sure how to animate from * to natural new width of parent. This hack won't work for text that's just a little
10910
- // bit wider than the parent as it'll fall within the parent bounds very early in the animation cycle.
10911
- animate('300ms', style(ZERO_WIDTH)),
10912
- ])
10913
- ], { params: { duration: '100ms' } })
10914
- ]);
10915
-
10916
- const cssDurationRegex = /(\d+)(m?s)/;
10917
- /**
10918
- * This interaction context remains hidden (height: 0) until it is active.
10919
- * @example
10920
- * <aup-slide-down-interaction-context #inPlaceInteractionContext>
10921
- * </aup-slide-down-interaction-context>
10922
- *
10923
- * in your component
10924
- * @ViewChild(SlideDownInteractionContextComponent)
10925
- * interactionContext: InteractionContext;
10926
- *
10927
- *
10928
- */
10929
- class SlideDownInteractionContextComponent extends DisposableComponent {
10930
- tabConfig;
10931
- activityContainerComponent;
10932
- // NOTE: disabling this as I'm using the initialise callback to release the hacky height clamp.
10933
- // The whole registration thing is a bit naf so I should really clean that up at some point.
10934
- // /**
10935
- // * If true the activity will sync with the router to enable back button support. This is a work around for
10936
- // * deeply nested activities that can't be linked with the root place interactionContext hook for cancelling
10937
- // * active interactions.
10938
- // */
10939
- // @Input()
10940
- // syncWithRoutes = true;
10941
- dynamicHeight = true;
10942
- get active() {
10943
- return this.isActive();
10944
- }
10945
- // Horrible hack to stop the div and activity container bouncing back for a bit in after closing. No idea why it's doing that.
10946
- clampShut = true;
10947
- interactionService = this.inject(InteractionService);
10948
- constructor(tabConfig) {
10949
- super();
10950
- this.tabConfig = tabConfig;
10951
- }
10952
- ngAfterViewInit() {
10953
- // NOTE: this is a temp work around to detach inplace contexts from the router until AUP-88 is implemented.
10954
- // https://coolon.atlassian.net/browse/AUP-88?atlOrigin=eyJpIjoiOTg5YjEzZGUzZjRmNDg0NmExOWU3ZGJmMzJiNTRmNGYiLCJwIjoiaiJ9
10955
- const self = this;
10956
- this.activityContainerComponent.initialise("dont-care", {
10957
- async notifyActive(interactionContext) {
10958
- self.clampShut = false;
10959
- return undefined;
10960
- },
10961
- async notifyFinished(interactionContext) {
10962
- return undefined;
10963
- }
10964
- });
10965
- // if (this.syncWithRoutes) {
10966
- // this.interactionService.registerInplaceInteractionContext(this);
10967
- // }
10968
- }
10969
- getAnimationState() {
10970
- return {
10971
- value: this.isActive() ? "open" : "closed",
10972
- params: { duration: "200ms" }
10973
- };
10974
- }
10975
- // this is a regsitration callback from the interaction service
10976
- // @Trace() // webstorm says no usages... but I'm not sure.
10977
- onInplaceInteractionContextRegistered(id, api) {
10978
- this.activityContainerComponent.initialise(id, api);
10979
- }
10980
- get identifier() {
10981
- return this.activityContainerComponent.identifier;
10982
- }
10983
- alert(alert) {
10984
- return this.activityContainerComponent.alert(alert);
10985
- }
10986
- cancelActiveActivity() {
10987
- return this.activityContainerComponent.cancelActiveActivity();
10988
- }
10989
- confirm(confirm) {
10990
- return this.activityContainerComponent.confirm(confirm);
10991
- }
10992
- confirmOrReject(confirm) {
10993
- return this.activityContainerComponent.confirmOrReject(confirm);
10994
- }
10995
- confirmThen(confirm, activityType, data) {
10996
- return this.activityContainerComponent.confirmThen(confirm, activityType);
10997
- }
10998
- confirmThenExecute(confirm, operation) {
10999
- return this.activityContainerComponent.confirmThenExecute(confirm, operation);
11000
- }
11001
- isActive() {
11002
- return this.activityContainerComponent.isActive();
11003
- }
11004
- startActivity(activityType, data, options) {
11005
- return this.activityContainerComponent.startActivity(activityType, data, options);
11006
- }
11007
- onAnimationDone() {
11008
- if (!this.isActive()) {
11009
- this.clampShut = true;
11010
- }
11011
- }
11012
- 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 });
11013
- 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: [
11014
- { provide: INTERACTION_CONTEXT, useExisting: SlideDownInteractionContextComponent }
11015
- ], 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: [
11016
- slideDownWhenOpenAnimation
11017
- ] });
11018
- }
11019
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SlideDownInteractionContextComponent, decorators: [{
11020
- type: Component,
11021
- args: [{ selector: "aup-slide-down-interaction-context", providers: [
11022
- { provide: INTERACTION_CONTEXT, useExisting: SlideDownInteractionContextComponent }
11023
- ], animations: [
11024
- slideDownWhenOpenAnimation
11025
- ], 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"] }]
11026
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
11027
- type: Inject,
11028
- args: [MAT_TABS_CONFIG]
11029
- }, {
11030
- type: Optional
11031
- }] }]; }, propDecorators: { activityContainerComponent: [{
11032
- type: ViewChild,
11033
- args: ["activityContainer", { static: true }]
11034
- }], dynamicHeight: [{
11035
- type: Input
11036
- }], active: [{
11037
- type: HostBinding,
11038
- args: ["class.active"]
11039
- }] } });
11040
-
11041
10225
  class InteractionContextTriggerForDirective extends GarbageCollector {
11042
10226
  aupInteractionContextTriggerFor;
11043
10227
  activityClass;
@@ -11120,7 +10304,6 @@ class InteractionModule {
11120
10304
  AlertDialogComponent,
11121
10305
  ActivityOutletComponent,
11122
10306
  InPlaceInteractionContextComponent,
11123
- SlideDownInteractionContextComponent,
11124
10307
  AddItemInteractionContextComponent,
11125
10308
  ActivityActionsComponent,
11126
10309
  PopupInteractionContextComponent,
@@ -11147,6 +10330,8 @@ class InteractionModule {
11147
10330
  RouterModule,
11148
10331
  MatIconModule,
11149
10332
  DirectivesModule,
10333
+ FlexModule,
10334
+ GridModule,
11150
10335
  ComponentsModule,
11151
10336
  FormsModule,
11152
10337
  MatInputModule,
@@ -11166,8 +10351,7 @@ class InteractionModule {
11166
10351
  InlineActivityTriggerComponent,
11167
10352
  ModalActivityTriggerComponent,
11168
10353
  AddCardActivityComponent,
11169
- InlineStringEditorComponent,
11170
- SlideDownInteractionContextComponent] });
10354
+ InlineStringEditorComponent] });
11171
10355
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InteractionModule, providers: [
11172
10356
  InteractionService
11173
10357
  // {
@@ -11181,6 +10365,8 @@ class InteractionModule {
11181
10365
  RouterModule,
11182
10366
  MatIconModule,
11183
10367
  DirectivesModule,
10368
+ FlexModule,
10369
+ GridModule,
11184
10370
  ComponentsModule,
11185
10371
  FormsModule,
11186
10372
  MatInputModule,
@@ -11199,6 +10385,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11199
10385
  RouterModule,
11200
10386
  MatIconModule,
11201
10387
  DirectivesModule,
10388
+ FlexModule,
10389
+ GridModule,
11202
10390
  ComponentsModule,
11203
10391
  FormsModule,
11204
10392
  MatInputModule,
@@ -11213,7 +10401,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11213
10401
  AlertDialogComponent,
11214
10402
  ActivityOutletComponent,
11215
10403
  InPlaceInteractionContextComponent,
11216
- SlideDownInteractionContextComponent,
11217
10404
  AddItemInteractionContextComponent,
11218
10405
  ActivityActionsComponent,
11219
10406
  PopupInteractionContextComponent,
@@ -11251,7 +10438,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11251
10438
  ModalActivityTriggerComponent,
11252
10439
  AddCardActivityComponent,
11253
10440
  InlineStringEditorComponent,
11254
- SlideDownInteractionContextComponent,
11255
10441
  ],
11256
10442
  providers: [
11257
10443
  InteractionService
@@ -11322,6 +10508,7 @@ class PlaceOutletComponent extends DisposableComponent {
11322
10508
  router;
11323
10509
  placeRouter;
11324
10510
  placeConfig;
10511
+ cdr;
11325
10512
  #animate$_accessor_storage = proxify((ValueModel));
11326
10513
  get animate$() { return this.#animate$_accessor_storage; }
11327
10514
  set animate$(value) { this.#animate$_accessor_storage = value; }
@@ -11355,11 +10542,12 @@ class PlaceOutletComponent extends DisposableComponent {
11355
10542
  animationEnabled;
11356
10543
  authorised;
11357
10544
  notAuthorisedNoticePortal;
11358
- constructor(router, placeRouter, placeConfig, unauthorisedPlaceNotice, parentOutlet) {
10545
+ constructor(router, placeRouter, placeConfig, unauthorisedPlaceNotice, parentOutlet, cdr) {
11359
10546
  super();
11360
10547
  this.router = router;
11361
10548
  this.placeRouter = placeRouter;
11362
10549
  this.placeConfig = placeConfig;
10550
+ this.cdr = cdr;
11363
10551
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
11364
10552
  this.parentOutletModel = new MutableValueModel(parentOutlet);
11365
10553
  const defaultPlaceAnimationOrder = chain(this.parentOutletModel)
@@ -11371,7 +10559,7 @@ class PlaceOutletComponent extends DisposableComponent {
11371
10559
  this.placesInAnimationOrder = chain(this.customPlaceAnimationOrder$)
11372
10560
  .otherwise(defaultPlaceAnimationOrder);
11373
10561
  this.activePlaceAnimationPosition = this.placesInAnimationOrder
11374
- .reduceAll((placesInOrder) => {
10562
+ .reduce((placesInOrder) => {
11375
10563
  let placeIndex = 0;
11376
10564
  if (activatePlaceType.value) {
11377
10565
  placeIndex = placesInOrder.indexOf(activatePlaceType.value);
@@ -11525,8 +10713,8 @@ class PlaceOutletComponent extends DisposableComponent {
11525
10713
  this.onAnimationFinishedJob = undefined;
11526
10714
  }
11527
10715
  }
11528
- 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 });
11529
- 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] });
11530
10718
  }
11531
10719
  __decorate([
11532
10720
  Proxify(),
@@ -11547,7 +10735,7 @@ __decorate([
11547
10735
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceOutletComponent, decorators: [{
11548
10736
  type: Component,
11549
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"] }]
11550
- }], 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: [{
11551
10739
  type: Optional
11552
10740
  }, {
11553
10741
  type: Inject,
@@ -11561,7 +10749,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11561
10749
  type: SkipSelf
11562
10750
  }, {
11563
10751
  type: Optional
11564
- }] }]; }, propDecorators: { animate$: [{
10752
+ }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { animate$: [{
11565
10753
  type: Input
11566
10754
  }], animate: [{
11567
10755
  type: Input
@@ -11694,7 +10882,7 @@ class ListPlaceNavComponent extends AbstractPlaceNavigationComponent {
11694
10882
  super(router);
11695
10883
  }
11696
10884
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ListPlaceNavComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11697
- 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"] }] });
11698
10886
  }
11699
10887
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ListPlaceNavComponent, decorators: [{
11700
10888
  type: Component,
@@ -11769,7 +10957,7 @@ class SidePlaceNavigationComponent extends AbstractPlaceNavigationComponent {
11769
10957
  this.expanded = !this.expanded;
11770
10958
  }
11771
10959
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SidePlaceNavigationComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11772
- 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"] }] });
11773
10961
  }
11774
10962
  __decorate([
11775
10963
  Proxify(),
@@ -11781,7 +10969,7 @@ __decorate([
11781
10969
  ], SidePlaceNavigationComponent.prototype, "expanded", null);
11782
10970
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SidePlaceNavigationComponent, decorators: [{
11783
10971
  type: Component,
11784
- 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"] }]
11785
10973
  }], ctorParameters: function () { return [{ type: PlaceRouter }]; }, propDecorators: { expanded$: [{
11786
10974
  type: Input
11787
10975
  }], expanded: [{
@@ -11799,7 +10987,7 @@ class TabbedPlaceNavigationComponent extends AbstractPlaceNavigationComponent {
11799
10987
  super(router);
11800
10988
  }
11801
10989
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TabbedPlaceNavigationComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11802
- 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"] }] });
11803
10991
  }
11804
10992
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TabbedPlaceNavigationComponent, decorators: [{
11805
10993
  type: Component,
@@ -11822,6 +11010,7 @@ class PlaceModule {
11822
11010
  MatTooltipModule,
11823
11011
  MatIconModule,
11824
11012
  DirectivesModule,
11013
+ FlexModule,
11825
11014
  ComponentsModule,
11826
11015
  PortalModule,
11827
11016
  MatCardModule], exports: [PlaceOutletComponent,
@@ -11838,6 +11027,7 @@ class PlaceModule {
11838
11027
  MatTooltipModule,
11839
11028
  MatIconModule,
11840
11029
  DirectivesModule,
11030
+ FlexModule,
11841
11031
  ComponentsModule,
11842
11032
  PortalModule,
11843
11033
  MatCardModule] });
@@ -11855,6 +11045,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11855
11045
  MatTooltipModule,
11856
11046
  MatIconModule,
11857
11047
  DirectivesModule,
11048
+ FlexModule,
11858
11049
  ComponentsModule,
11859
11050
  PortalModule,
11860
11051
  MatCardModule
@@ -11944,44 +11135,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11944
11135
  }]
11945
11136
  }] });
11946
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
+
11947
11188
  /**
11948
11189
  * @file Automatically generated by barrelsby.
11949
11190
  */
11950
11191
 
11951
- class ResizeObserverDirective extends DisposableComponent {
11952
- aupOnResize = new EventEmitter();
11953
- elementRef = this.inject(ElementRef);
11954
- ngZone = this.inject(NgZone);
11955
- _bounds$ = new MutableValueModel();
11956
- ngAfterViewInit() {
11957
- const element = this.elementRef.nativeElement;
11958
- const ro = new ResizeObserver((entries, observer) => {
11959
- this.ngZone.run(() => this._updateBounds());
11960
- });
11961
- ro.observe(element);
11962
- this.onDispose(() => ro.disconnect());
11963
- setTimeout(() => this._updateBounds());
11964
- }
11965
- get bounds$() {
11966
- return this._bounds$.readonly$;
11967
- }
11968
- _updateBounds() {
11969
- this._bounds$.value = Bounds.ofElement(this.elementRef.nativeElement);
11970
- this.aupOnResize.emit(this._bounds$.value);
11971
- }
11972
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeObserverDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
11973
- 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 });
11974
- }
11975
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeObserverDirective, decorators: [{
11976
- type: Directive,
11977
- args: [{
11978
- selector: "[aupOnResize]",
11979
- standalone: true
11980
- }]
11981
- }], propDecorators: { aupOnResize: [{
11982
- type: Output
11983
- }] } });
11984
-
11985
11192
  /**
11986
11193
  * @file Automatically generated by barrelsby.
11987
11194
  */
@@ -12072,7 +11279,7 @@ class DialogInteractionContextFactory extends ModalInteractionContextFactory {
12072
11279
  };
12073
11280
  return new DialogInteractionContext(identifier, api, this.dialogService, config);
12074
11281
  }
12075
- 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 });
12076
11283
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DialogInteractionContextFactory, providedIn: 'root' });
12077
11284
  }
12078
11285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DialogInteractionContextFactory, decorators: [{
@@ -12080,12 +11287,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
12080
11287
  args: [{
12081
11288
  providedIn: 'root'
12082
11289
  }]
12083
- }], 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: [{
12084
11291
  type: Optional
12085
11292
  }, {
12086
11293
  type: Inject,
12087
11294
  args: [DIALOG_INTERACTION_SERVICE_DEFAULTS]
12088
- }] }, { type: i1$7.MatDialogConfig, decorators: [{
11295
+ }] }, { type: i1$6.MatDialogConfig, decorators: [{
12089
11296
  type: Optional
12090
11297
  }, {
12091
11298
  type: Inject,
@@ -12205,7 +11412,6 @@ class PlaceGuard {
12205
11412
  }
12206
11413
  // @Trace()
12207
11414
  async canActivate(activatedRoute, state) {
12208
- await this.placeRouter.waitUntilRouterReady();
12209
11415
  if (PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) {
12210
11416
  const placeDefinition = PlaceComponent.getDefinition(activatedRoute.component);
12211
11417
  if (placeDefinition.authenticate) {
@@ -12318,13 +11524,13 @@ class PlaceGuard {
12318
11524
  return next();
12319
11525
  }
12320
11526
  }
12321
- 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 });
12322
11528
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceGuard, providedIn: 'root' });
12323
11529
  }
12324
11530
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceGuard, decorators: [{
12325
11531
  type: Injectable,
12326
11532
  args: [{ providedIn: 'root' }]
12327
- }], 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 }]; } });
12328
11534
 
12329
11535
  var Formatter;
12330
11536
  (function (Formatter) {
@@ -12358,74 +11564,69 @@ var Formatter;
12358
11564
  Formatter.BOOLEAN = new BooleanType();
12359
11565
  })(Formatter || (Formatter = {}));
12360
11566
 
12361
- // function installMechanics<M extends HasValue<any>>(parameterDef: ParameterDefinition<any>, prototype: object, propertyKey: string | symbol, tagPrefix: string) {
12362
- //
12363
- // Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12364
- //
12365
- // function getMechanics(instance: M, propertyName: string | symbol) {
12366
- // const key = `__mechanics_${propertyName.toString()}`;
12367
- // if (!instance[key]) {
12368
- // const backingModel = parameterDef.createBackingModel();
12369
- // instance[key] = {
12370
- // backingModel: backingModel,
12371
- // binding: null as Binding<any, any>
12372
- // };
12373
- // const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
12374
- // DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
12375
- // }
12376
- // return instance[key];
12377
- // }
12378
- //
12379
- // Object.defineProperty(prototype, propertyKey, {
12380
- // get: function() {
12381
- // return getMechanics(this, propertyKey).backingModel;
12382
- // },
12383
- // set: function(userModel: M) {
12384
- // const mechanics = getMechanics(this, propertyKey);
12385
- // // This handles the scenario where we want to push an existing value model (such as a form model)
12386
- // // to and from the route.
12387
- // if (mechanics.binding) {
12388
- // mechanics.binding.dispose();
12389
- // }
12390
- // if (userModel) {
12391
- // mechanics.binding = new Binding(mechanics.backingModel, userModel, {
12392
- // toLeft: Functions.identity,
12393
- // toRight: Functions.identity
12394
- // });
12395
- // if (parameterDef.isEmptyValue(userModel.value)) {
12396
- // // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
12397
- // mechanics.binding.writeRight(); // push the visit into the user model;
12398
- // } else {
12399
- // if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
12400
- // console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
12401
- // }
12402
- // mechanics.binding.writeLeft(); // push the user model into the visit
12403
- // }
12404
- // }
12405
- // }
12406
- // });
12407
- // }
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
+ }
12408
11612
  function RouteId(formatter, options) {
12409
11613
  return (prototype, propertyKey) => {
12410
11614
  const parameterDef = new ParameterDefinition.RouteId(propertyKey.toString(), options, formatter);
12411
- // installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
12412
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11615
+ installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
12413
11616
  };
12414
11617
  }
12415
11618
  function VisitParameter(options) {
12416
11619
  const opts = Opts.get(options);
12417
11620
  return (prototype, propertyKey) => {
12418
11621
  const parameterDef = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
12419
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12420
- // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
11622
+ installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
12421
11623
  };
12422
11624
  }
12423
11625
  function VisitParameterList(options) {
12424
11626
  const opts = Opts.get(options);
12425
11627
  return (prototype, propertyKey) => {
12426
11628
  const parameterDef = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
12427
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12428
- // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
11629
+ installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
12429
11630
  };
12430
11631
  }
12431
11632
 
@@ -12519,5 +11720,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
12519
11720
  * Generated bundle index. Do not edit.
12520
11721
  */
12521
11722
 
12522
- 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 };
12523
11724
  //# sourceMappingURL=coolon-angular-ui-powerups.mjs.map