@coolon/angular-ui-powerups 16.1.0-aplpha.128 → 16.1.0-aplpha.13

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 (185) 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/styles.scss +0 -2
  5. package/assets/table.scss +27 -47
  6. package/assets/tabs.scss +5 -15
  7. package/esm2022/lib/animations/slide-animations.mjs +10 -15
  8. package/esm2022/lib/components/cards/card-container/card-container.component.mjs +4 -4
  9. package/esm2022/lib/components/commands/command/command.component.mjs +10 -24
  10. package/esm2022/lib/components/commands/command-face/command-face.component.mjs +3 -11
  11. package/esm2022/lib/components/commands/command-face.mjs +11 -11
  12. package/esm2022/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +11 -11
  13. package/esm2022/lib/components/commands/group/tool-bar/tool-bar.component.mjs +4 -6
  14. package/esm2022/lib/components/components.module.mjs +8 -27
  15. package/esm2022/lib/components/disposable-component.mjs +40 -36
  16. package/esm2022/lib/components/exports.mjs +2 -9
  17. package/esm2022/lib/components/forms/abstract-input.component.mjs +12 -55
  18. package/esm2022/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +2 -2
  19. package/esm2022/lib/components/forms/checkbox-input/checkbox-input.component.mjs +6 -8
  20. package/esm2022/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +2 -2
  21. package/esm2022/lib/components/forms/number-input/number-input.component.mjs +9 -84
  22. package/esm2022/lib/components/forms/password-input/password-input.component.mjs +3 -40
  23. package/esm2022/lib/components/forms/select-input/select-input.component.mjs +10 -11
  24. package/esm2022/lib/components/forms/string-input/string-input.component.mjs +10 -26
  25. package/esm2022/lib/components/forms/text-input/text-input.component.mjs +2 -6
  26. package/esm2022/lib/components/icon/icon.component.mjs +4 -7
  27. package/esm2022/lib/components/resize-aware.component.mjs +24 -61
  28. package/esm2022/lib/components/switch-case/switch-case.component.mjs +7 -5
  29. package/esm2022/lib/components/tables/abstract-table-model.mjs +47 -77
  30. package/esm2022/lib/components/tables/abstract-table.component.mjs +5 -19
  31. package/esm2022/lib/components/tables/column/column-list-model.mjs +44 -0
  32. package/esm2022/lib/components/tables/column/column-model.mjs +6 -16
  33. package/esm2022/lib/components/tables/column/custom-template-column-model.mjs +3 -3
  34. package/esm2022/lib/components/tables/column/custom-value-column-model.mjs +3 -3
  35. package/esm2022/lib/components/tables/column/editor-controls-column-model.mjs +3 -3
  36. package/esm2022/lib/components/tables/column/list-propery-column-model.mjs +3 -3
  37. package/esm2022/lib/components/tables/column/property-column-model.mjs +3 -3
  38. package/esm2022/lib/components/tables/column/selection-column-model.mjs +13 -35
  39. package/esm2022/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +1 -1
  40. package/esm2022/lib/components/tables/editor/edit-session.mjs +1 -3
  41. package/esm2022/lib/components/tables/filter/table-filter-model.mjs +2 -4
  42. package/esm2022/lib/components/tables/filter/text-search-predicate.mjs +2 -16
  43. package/esm2022/lib/components/tables/renderer/cell-portal-ref.mjs +5 -23
  44. package/esm2022/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +3 -3
  45. package/esm2022/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +2 -3
  46. package/esm2022/lib/components/tables/renderer/table-body/table-body.component.mjs +40 -150
  47. package/esm2022/lib/components/tables/renderer/table-cell/table-cell.component.mjs +6 -6
  48. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu.component.mjs +2 -7
  49. package/esm2022/lib/components/tables/table/table-model.mjs +3 -12
  50. package/esm2022/lib/components/tables/table/table.component.mjs +61 -39
  51. package/esm2022/lib/components/tables/tree-table/decorated-tree-node.mjs +4 -5
  52. package/esm2022/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +1 -1
  53. package/esm2022/lib/components/tables/tree-table/tree-label-column-model.mjs +3 -3
  54. package/esm2022/lib/components/tables/tree-table/tree-table-component.mjs +5 -12
  55. package/esm2022/lib/components/tables/tree-table/tree-table-model.mjs +7 -4
  56. package/esm2022/lib/components/text/markdown/markdown.component.mjs +2 -2
  57. package/esm2022/lib/directives/directives.module.mjs +1 -1
  58. package/esm2022/lib/directives/exports.mjs +1 -2
  59. package/esm2022/lib/directives/highlight.pipe.mjs +6 -9
  60. package/esm2022/lib/interaction/activity.mjs +4 -3
  61. package/esm2022/lib/interaction/alert.mjs +2 -2
  62. package/esm2022/lib/interaction/components/abstract-confirm-dialog.component.mjs +4 -8
  63. package/esm2022/lib/interaction/components/activity-actions/activity-actions.component.mjs +11 -20
  64. package/esm2022/lib/interaction/components/activity-container/activity-container.component.mjs +11 -28
  65. package/esm2022/lib/interaction/components/activity-title/activity-title.component.mjs +4 -4
  66. package/esm2022/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.mjs +1 -1
  67. package/esm2022/lib/interaction/components/add-card-activity/add-card-activity.component.mjs +1 -1
  68. package/esm2022/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.mjs +1 -1
  69. package/esm2022/lib/interaction/components/alert-dialog/alert-dialog.component.mjs +1 -1
  70. package/esm2022/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.mjs +1 -1
  71. package/esm2022/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.mjs +1 -1
  72. package/esm2022/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.mjs +1 -1
  73. package/esm2022/lib/interaction/components/editors/edit-context.mjs +1 -1
  74. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +3 -3
  75. package/esm2022/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +5 -21
  76. package/esm2022/lib/interaction/components/input-activities/input-activity.mjs +2 -2
  77. package/esm2022/lib/interaction/components/input-activities/select-input-activity.mjs +2 -4
  78. package/esm2022/lib/interaction/components/input-activities/string-input-activity.mjs +4 -8
  79. package/esm2022/lib/interaction/directives/interaction-context-trigger-for.directive.mjs +2 -2
  80. package/esm2022/lib/interaction/exports.mjs +1 -2
  81. package/esm2022/lib/interaction/interaction-context.mjs +2 -3
  82. package/esm2022/lib/interaction/interaction.module.mjs +9 -7
  83. package/esm2022/lib/place/components/list-place-nav/list-place-nav.component.mjs +4 -3
  84. package/esm2022/lib/place/components/place-outlet/place-outlet.component.mjs +9 -7
  85. package/esm2022/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +2 -2
  86. package/esm2022/lib/place/guards/consolidated-param-map.mjs +4 -4
  87. package/esm2022/lib/place/guards/place.guard.mjs +5 -6
  88. package/esm2022/lib/place/navigation/place-component-deactivation-handler.mjs +2 -2
  89. package/esm2022/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs +6 -3
  90. package/esm2022/lib/place/place-auth-service.mjs +5 -5
  91. package/esm2022/lib/place/place-component.mjs +7 -7
  92. package/esm2022/lib/place/place-definition.mjs +3 -3
  93. package/esm2022/lib/place/place-history.mjs +2 -2
  94. package/esm2022/lib/place/place-router.mjs +20 -22
  95. package/esm2022/lib/place/place.decorator.mjs +2 -2
  96. package/esm2022/lib/place/place.module.mjs +5 -1
  97. package/esm2022/lib/place/route/formatter.mjs +2 -2
  98. package/esm2022/lib/place/route/parameter-decorators.mjs +50 -54
  99. package/esm2022/lib/place/route/parameter-definition.mjs +2 -2
  100. package/esm2022/lib/place/url-snapshot.mjs +3 -3
  101. package/esm2022/lib/place/visit-segment.mjs +2 -2
  102. package/esm2022/lib/place/visit.mjs +2 -2
  103. package/fesm2022/coolon-angular-ui-powerups.mjs +623 -1488
  104. package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
  105. package/lib/animations/slide-animations.d.ts +0 -1
  106. package/lib/components/cards/card-container/card-container.component.d.ts +1 -1
  107. package/lib/components/commands/command/command.component.d.ts +1 -2
  108. package/lib/components/commands/command-face/command-face.component.d.ts +0 -2
  109. package/lib/components/commands/command-face.d.ts +7 -5
  110. package/lib/components/commands/group/popup-menu/abstract-popup-menu.component.d.ts +2 -2
  111. package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +1 -1
  112. package/lib/components/components.module.d.ts +53 -56
  113. package/lib/components/disposable-component.d.ts +8 -16
  114. package/lib/components/exports.d.ts +1 -8
  115. package/lib/components/forms/abstract-input.component.d.ts +5 -13
  116. package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +0 -2
  117. package/lib/components/forms/number-input/number-input.component.d.ts +4 -16
  118. package/lib/components/forms/password-input/password-input.component.d.ts +1 -7
  119. package/lib/components/forms/select-input/select-input.component.d.ts +3 -4
  120. package/lib/components/forms/string-input/string-input.component.d.ts +1 -6
  121. package/lib/components/forms/text-input/text-input.component.d.ts +0 -3
  122. package/lib/components/resize-aware.component.d.ts +5 -24
  123. package/lib/components/switch-case/switch-case.component.d.ts +3 -2
  124. package/lib/components/tables/abstract-table-model.d.ts +11 -29
  125. package/lib/components/tables/abstract-table.component.d.ts +3 -4
  126. package/lib/components/tables/column/column-list-model.d.ts +13 -0
  127. package/lib/components/tables/column/column-model.d.ts +3 -7
  128. package/lib/components/tables/column/custom-template-column-model.d.ts +2 -3
  129. package/lib/components/tables/column/custom-value-column-model.d.ts +2 -3
  130. package/lib/components/tables/column/editor-controls-column-model.d.ts +2 -3
  131. package/lib/components/tables/column/list-propery-column-model.d.ts +2 -3
  132. package/lib/components/tables/column/property-column-model.d.ts +2 -3
  133. package/lib/components/tables/column/selection-column-model.d.ts +4 -10
  134. package/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.d.ts +1 -1
  135. package/lib/components/tables/editor/edit-session.d.ts +1 -1
  136. package/lib/components/tables/filter/text-search-predicate.d.ts +0 -9
  137. package/lib/components/tables/renderer/cell-portal-ref.d.ts +12 -20
  138. package/lib/components/tables/renderer/table-body/table-body.component.d.ts +16 -40
  139. package/lib/components/tables/renderer/table-cell/table-cell.component.d.ts +3 -2
  140. package/lib/components/tables/renderer/table-more-menu/table-more-menu.component.d.ts +1 -2
  141. package/lib/components/tables/table/table-model.d.ts +4 -4
  142. package/lib/components/tables/table/table.component.d.ts +10 -14
  143. package/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +1 -1
  144. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +2 -3
  145. package/lib/components/tables/tree-table/tree-table-component.d.ts +0 -3
  146. package/lib/components/tables/tree-table/tree-table-model.d.ts +5 -4
  147. package/lib/directives/exports.d.ts +0 -1
  148. package/lib/interaction/activity.d.ts +2 -2
  149. package/lib/interaction/components/abstract-confirm-dialog.component.d.ts +0 -1
  150. package/lib/interaction/components/activity-actions/activity-actions.component.d.ts +5 -10
  151. package/lib/interaction/components/activity-container/activity-container.component.d.ts +3 -7
  152. package/lib/interaction/components/activity-title/activity-title.component.d.ts +1 -1
  153. package/lib/interaction/components/editors/edit-context.d.ts +1 -1
  154. package/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.d.ts +3 -5
  155. package/lib/interaction/exports.d.ts +0 -1
  156. package/lib/interaction/interaction-context.d.ts +0 -2
  157. package/lib/interaction/interaction.module.d.ts +28 -28
  158. package/lib/place/components/place-outlet/place-outlet.component.d.ts +4 -3
  159. package/lib/place/place-auth-service.d.ts +4 -4
  160. package/lib/place/place-component.d.ts +4 -4
  161. package/lib/place/place-router.d.ts +2 -6
  162. package/lib/place/place.module.d.ts +5 -4
  163. package/package.json +4 -6
  164. package/assets/draw.scss +0 -20
  165. package/assets/layout.scss +0 -3
  166. package/esm2022/lib/components/forms/form-field.mjs +0 -2
  167. package/esm2022/lib/components/forms/search-input/search-input.component.mjs +0 -33
  168. package/esm2022/lib/components/loadable-component.mjs +0 -49
  169. package/esm2022/lib/components/tables/column/column-manager.mjs +0 -81
  170. package/esm2022/lib/components/tables/column/column-order-manager.mjs +0 -19
  171. package/esm2022/lib/components/tables/footer/footer-row-model.mjs +0 -38
  172. package/esm2022/lib/components/tables/renderer/abstract-cell-renderer.mjs +0 -7
  173. package/esm2022/lib/components/tables/renderer/table-footer-row/table-footer-row.component.mjs +0 -30
  174. package/esm2022/lib/directives/resize-observer.directive.mjs +0 -40
  175. package/esm2022/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.mjs +0 -134
  176. package/lib/components/forms/form-field.d.ts +0 -5
  177. package/lib/components/forms/search-input/search-input.component.d.ts +0 -10
  178. package/lib/components/loadable-component.d.ts +0 -17
  179. package/lib/components/tables/column/column-manager.d.ts +0 -19
  180. package/lib/components/tables/column/column-order-manager.d.ts +0 -20
  181. package/lib/components/tables/footer/footer-row-model.d.ts +0 -22
  182. package/lib/components/tables/renderer/abstract-cell-renderer.d.ts +0 -6
  183. package/lib/components/tables/renderer/table-footer-row/table-footer-row.component.d.ts +0 -11
  184. package/lib/directives/resize-observer.directive.d.ts +0 -16
  185. 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 { escape, 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,21 +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
- optional: true
249
- });
250
- constructor() {
251
- super();
252
- if (this.highlightContext) { // the component might be rendered outside a table
253
- this.viewStateDependsOn(this.highlightContext.aupHighlightTextModel);
254
- }
255
- }
256
221
  onInit(callback) {
257
222
  if (this.#initialised) {
258
223
  callback();
@@ -261,36 +226,51 @@ class DisposableComponent extends GarbageCollector {
261
226
  this.#initCallbacks.push(callback);
262
227
  }
263
228
  }
229
+ get loaded$() {
230
+ return this.#_loaded$.readonly$;
231
+ }
264
232
  ngOnInit() {
265
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
+ }
266
245
  this.#initialised = true;
267
246
  }
268
- ngOnDestroy() {
269
- this.dispose();
247
+ inject(token) {
248
+ return inject(token);
270
249
  }
271
- inject(token, options) {
272
- return inject(token, options);
273
- }
274
- /**
275
- * Monitors the specified models for any change and triggers and angular change detect cycle. This is intended for use
276
- * when the component uses the ON_PUSH change detection strategy or when it is contained within another component that
277
- * does (e.g. aup-table, aup-tree-table)
278
- * @param models
279
- * @protected
280
- */
281
- viewStateDependsOn(...models) {
282
- const { when } = Dsl.disposeWith(this);
283
- when.anyOf(...models).changes(() => this.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;
284
264
  }
285
- markForCheck() {
286
- this.cdr.markForCheck();
265
+ ngOnDestroy() {
266
+ this.dispose();
287
267
  }
288
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DisposableComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
268
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DisposableComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
289
269
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: DisposableComponent, usesInheritance: true, ngImport: i0 });
290
270
  }
291
271
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DisposableComponent, decorators: [{
292
272
  type: Directive
293
- }], ctorParameters: function () { return []; } });
273
+ }] });
294
274
 
295
275
  let FocusBinding = class FocusBinding extends GarbageCollector {
296
276
  focusTargetElement;
@@ -486,6 +466,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
486
466
  }]
487
467
  }], ctorParameters: function () { return []; } });
488
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
+
489
495
  class HighlightPipe extends GarbageCollector {
490
496
  sanitizer;
491
497
  highlightContext;
@@ -498,21 +504,19 @@ class HighlightPipe extends GarbageCollector {
498
504
  this.dispose();
499
505
  }
500
506
  transform(value, searchModel) {
501
- const sanitisedValue = escape(value);
502
- console.log(sanitisedValue);
503
507
  const model = searchModel ?? this.highlightContext?.aupHighlightTextModel;
504
508
  const searchText = model?.value;
505
509
  if (isEmpty(searchText) || !isString(value)) {
506
- return sanitisedValue;
510
+ return value;
507
511
  }
508
512
  // Match in a case insensitive manner
509
513
  const re = new RegExp(escapeStringRegexp(searchText), 'gi');
510
- const match = sanitisedValue.match(re);
514
+ const match = value.match(re);
511
515
  // If there's no match, just return the original value.
512
516
  if (!match) {
513
- return sanitisedValue;
517
+ return value;
514
518
  }
515
- const result = sanitisedValue.replace(re, '<mark>' + match[0] + '</mark>');
519
+ const result = value.replace(re, '<mark>' + match[0] + '</mark>');
516
520
  return this.sanitizer.bypassSecurityTrustHtml(result);
517
521
  }
518
522
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: HighlightPipe, deps: [{ token: i1.DomSanitizer }, { token: HighlightTextModelDirective, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
@@ -732,42 +736,42 @@ var CommandFace;
732
736
  }
733
737
  }
734
738
  __decorate([
735
- MemoizeGet(),
739
+ Memoize(),
736
740
  __metadata("design:type", Object),
737
741
  __metadata("design:paramtypes", [])
738
742
  ], Adapter.prototype, "text", null);
739
743
  __decorate([
740
- MemoizeGet(),
744
+ Memoize(),
741
745
  __metadata("design:type", Object),
742
746
  __metadata("design:paramtypes", [])
743
747
  ], Adapter.prototype, "icon", null);
744
748
  __decorate([
745
- MemoizeGet(),
749
+ Memoize(),
746
750
  __metadata("design:type", Object),
747
751
  __metadata("design:paramtypes", [])
748
752
  ], Adapter.prototype, "iconPosition", null);
749
753
  __decorate([
750
- MemoizeGet(),
754
+ Memoize(),
751
755
  __metadata("design:type", Object),
752
756
  __metadata("design:paramtypes", [])
753
757
  ], Adapter.prototype, "tooltip", null);
754
758
  __decorate([
755
- MemoizeGet(),
759
+ Memoize(),
756
760
  __metadata("design:type", Boolean),
757
761
  __metadata("design:paramtypes", [])
758
762
  ], Adapter.prototype, "iconPositionStart", null);
759
763
  __decorate([
760
- MemoizeGet(),
764
+ Memoize(),
761
765
  __metadata("design:type", Boolean),
762
766
  __metadata("design:paramtypes", [])
763
767
  ], Adapter.prototype, "iconPositionEnd", null);
764
768
  __decorate([
765
- MemoizeGet(),
769
+ Memoize(),
766
770
  __metadata("design:type", String),
767
771
  __metadata("design:paramtypes", [])
768
772
  ], Adapter.prototype, "color", null);
769
773
  __decorate([
770
- MemoizeGet(),
774
+ Memoize(),
771
775
  __metadata("design:type", String),
772
776
  __metadata("design:paramtypes", [])
773
777
  ], Adapter.prototype, "style", null);
@@ -838,7 +842,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
838
842
  args: ["class.disable-scroll"]
839
843
  }] } });
840
844
 
841
- /* eslint-disable @angular-eslint/no-host-metadata-property */
842
845
  class IconComponent {
843
846
  _icon;
844
847
  prefix;
@@ -870,13 +873,11 @@ class IconComponent {
870
873
  return `fa-${this.suffix}`;
871
874
  }
872
875
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
873
- 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"] }] });
874
877
  }
875
878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IconComponent, decorators: [{
876
879
  type: Component,
877
- args: [{ selector: 'aup-icon', changeDetection: ChangeDetectionStrategy.OnPush, host: {
878
- class: "mat-icon" // this ensures angular form styles that target mat icon also work with us
879
- }, 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"] }]
880
881
  }], propDecorators: { icon: [{
881
882
  type: Input
882
883
  }, {
@@ -907,7 +908,6 @@ class CommandFaceComponent extends DisposableComponent {
907
908
  // tslint:disable-next-line:no-input-rename
908
909
  get _rawFaces() { return this.#_rawFaces_accessor_storage; }
909
910
  set _rawFaces(value) { this.#_rawFaces_accessor_storage = value; }
910
- hasTextAndLeadingIcon$;
911
911
  set face(face) {
912
912
  this.faces$.value = [face];
913
913
  }
@@ -927,7 +927,6 @@ class CommandFaceComponent extends DisposableComponent {
927
927
  const activeFace = this.faceAdapters.first();
928
928
  this.activeIcon = activeFace.pluck("icon");
929
929
  this.activeColor = activeFace.pluck("color");
930
- this.hasTextAndLeadingIcon$ = valueOf.all(this.activeIcon.isNotNil(), activeFace.pluckString('text').isNotBlank(), activeFace.pluck("iconPosition").doesNotEqual(CommandFace.Position.END)).areTruthy();
931
930
  }
932
931
  shouldIncludeIcon(face) {
933
932
  return (!this.ignoreIcon && face.icon) || this.includeMissingIconInLayout;
@@ -941,11 +940,8 @@ class CommandFaceComponent extends DisposableComponent {
941
940
  get color() {
942
941
  return this.activeColor.value;
943
942
  }
944
- get hasTextAndIcon() {
945
- return this.hasTextAndLeadingIcon$.value;
946
- }
947
943
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandFaceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
948
- 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 });
949
945
  }
950
946
  __decorate([
951
947
  StoreInListModel("faces$"),
@@ -953,7 +949,7 @@ __decorate([
953
949
  ], CommandFaceComponent.prototype, "_rawFaces", null);
954
950
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandFaceComponent, decorators: [{
955
951
  type: Component,
956
- 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"] }]
957
953
  }], ctorParameters: function () { return []; }, propDecorators: { _rawFaces: [{
958
954
  type: Input,
959
955
  args: ['faces']
@@ -971,9 +967,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
971
967
  }], color: [{
972
968
  type: HostBinding,
973
969
  args: ['attr.color']
974
- }], hasTextAndIcon: [{
975
- type: HostBinding,
976
- args: ['class.has-text-and-leading-icon']
977
970
  }] } });
978
971
 
979
972
  /**
@@ -1077,11 +1070,11 @@ class CardContainerComponent extends AbstractCardContainerComponent {
1077
1070
  }
1078
1071
  }
1079
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 });
1080
- 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"] }] });
1081
1074
  }
1082
1075
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CardContainerComponent, decorators: [{
1083
1076
  type: Component,
1084
- 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"] }]
1085
1078
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { columnCount: [{
1086
1079
  type: Input
1087
1080
  }], enableScroll: [{
@@ -1157,24 +1150,14 @@ class CommandComponent extends PopupAwareComponent {
1157
1150
  activeFace$;
1158
1151
  iconOnly$;
1159
1152
  tooltip$;
1160
- visible$;
1161
1153
  constructor(element, parent) {
1162
1154
  super(element, parent);
1163
1155
  const { chain, switchOn } = Dsl.disposeWith(this);
1164
- this.faces$ = chain(this.command.busy$)
1165
- .mapToList(busy => {
1156
+ this.faces$ = chain(this.command.busy$).mapToList(busy => {
1166
1157
  return busy ?
1167
- [this.busyFace$.value ?? this.command.busyFace$.value, this.face$.value ?? this.command.defaultFace$.value] :
1168
- [this.face$.value ?? this.command.defaultFace$.value, this.busyFace$.value ?? this.command.busyFace$.value];
1169
- }, {
1170
- allowNil: true,
1171
- dependsOn: [
1172
- this.face$,
1173
- this.busyFace$,
1174
- this.command.defaultFace$,
1175
- this.command.busyFace$
1176
- ]
1177
- })
1158
+ [this.busyFace$.value, this.face$.value] :
1159
+ [this.face$.value, this.busyFace$.value];
1160
+ }, { allowNil: true, dependsOn: [this.face$, this.busyFace$] })
1178
1161
  .rejectNil();
1179
1162
  this.activeFace$ = this.faces$.first();
1180
1163
  this.buttonStyle$ = chain(this.activeFace$).map(f => CommandFace.getStyleOf(f));
@@ -1183,19 +1166,18 @@ class CommandComponent extends PopupAwareComponent {
1183
1166
  this.iconOnly$ = this.faces$.select(face => {
1184
1167
  return isEmpty(CommandFace.getTextOf(face)) && !isEmpty(CommandFace.getIconOf(face));
1185
1168
  }).count().equals(this.faces$.count());
1186
- this.visible$ = chain(this.command.visible$);
1187
- }
1188
- get cssDisplayProperty() {
1189
- return this.visible$.value ? undefined : 'none';
1190
1169
  }
1191
1170
  isActive(face) {
1192
1171
  return this.activeFace$.query().equals(face);
1193
1172
  }
1173
+ getFace() {
1174
+ return this.face;
1175
+ }
1194
1176
  requestFocus() {
1195
1177
  this.button.focus();
1196
1178
  }
1197
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 });
1198
- 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"] }] });
1199
1181
  }
1200
1182
  __decorate([
1201
1183
  Proxify(),
@@ -1243,9 +1225,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1243
1225
  }], button: [{
1244
1226
  type: ViewChild,
1245
1227
  args: [MatButton]
1246
- }], cssDisplayProperty: [{
1247
- type: HostBinding,
1248
- args: ["style.display"]
1249
1228
  }] } });
1250
1229
 
1251
1230
  /**
@@ -1273,12 +1252,12 @@ class AbstractPopupMenuComponent extends PopupAwareComponent {
1273
1252
  xPosition = 'after';
1274
1253
  yPosition = 'below';
1275
1254
  triggers;
1255
+ #enabled_accessor_storage;
1256
+ get enabled() { return this.#enabled_accessor_storage; }
1257
+ set enabled(value) { this.#enabled_accessor_storage = value; }
1276
1258
  #enabled$_accessor_storage = proxify((ValueModel));
1277
1259
  get enabled$() { return this.#enabled$_accessor_storage; }
1278
1260
  set enabled$(value) { this.#enabled$_accessor_storage = value; }
1279
- #enabled_accessor_storage = true;
1280
- get enabled() { return this.#enabled_accessor_storage; }
1281
- set enabled(value) { this.#enabled_accessor_storage = value; }
1282
1261
  children;
1283
1262
  faces$;
1284
1263
  constructor(element, parent) {
@@ -1320,16 +1299,16 @@ class AbstractPopupMenuComponent extends PopupAwareComponent {
1320
1299
  return this.faceAdapter.face;
1321
1300
  }
1322
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 });
1323
- 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 });
1324
1303
  }
1304
+ __decorate([
1305
+ StoreInValueModel(),
1306
+ __metadata("design:type", Boolean)
1307
+ ], AbstractPopupMenuComponent.prototype, "enabled", null);
1325
1308
  __decorate([
1326
1309
  Proxify(),
1327
1310
  __metadata("design:type", Object)
1328
1311
  ], AbstractPopupMenuComponent.prototype, "enabled$", null);
1329
- __decorate([
1330
- StoreInValueModel(),
1331
- __metadata("design:type", Object)
1332
- ], AbstractPopupMenuComponent.prototype, "enabled", null);
1333
1312
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractPopupMenuComponent, decorators: [{
1334
1313
  type: Component,
1335
1314
  args: [{ selector: 'aup-abstract-popup-menu', template: '' }]
@@ -1343,10 +1322,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1343
1322
  }], triggers: [{
1344
1323
  type: ViewChildren,
1345
1324
  args: [MatMenuTrigger]
1346
- }], enabled$: [{
1347
- type: Input
1348
1325
  }], enabled: [{
1349
1326
  type: Input
1327
+ }], enabled$: [{
1328
+ type: Input
1350
1329
  }] } });
1351
1330
 
1352
1331
  class CommandContainer extends GarbageCollector {
@@ -1379,15 +1358,13 @@ class ToolBarComponent extends CommandContainer {
1379
1358
  get orientation() {
1380
1359
  return CommandContainer.Orientation.HORIZONTAL;
1381
1360
  }
1382
- 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 });
1383
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 });
1384
1363
  }
1385
1364
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ToolBarComponent, decorators: [{
1386
1365
  type: Component,
1387
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"] }]
1388
- }], ctorParameters: function () { return [{ type: CommandContainer, decorators: [{
1389
- type: Optional
1390
- }] }]; } });
1367
+ }], ctorParameters: function () { return [{ type: CommandContainer }]; } });
1391
1368
 
1392
1369
  /**
1393
1370
  *
@@ -1698,6 +1675,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1698
1675
  args: ['blur']
1699
1676
  }] } });
1700
1677
 
1678
+ /* tslint:disable:no-input-rename */
1701
1679
  const INPUT_TOKEN_HACK = new InjectionToken("INPUT_TOKEN_HACK");
1702
1680
  class AbstractInputComponent extends DisposableComponent {
1703
1681
  onValueEditedListeners = new EventListenerList();
@@ -1712,16 +1690,11 @@ class AbstractInputComponent extends DisposableComponent {
1712
1690
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
1713
1691
  */
1714
1692
  formValue$;
1715
- #i18n$_accessor_storage = proxify((MutableValueModel));
1716
- get i18n$() { return this.#i18n$_accessor_storage; }
1717
- set i18n$(value) { this.#i18n$_accessor_storage = value; }
1718
- #i18n_accessor_storage;
1719
- get i18n() { return this.#i18n_accessor_storage; }
1720
- set i18n(value) { this.#i18n_accessor_storage = value; }
1721
- _label;
1693
+ label;
1694
+ // eslint-disable-next-line @angular-eslint/no-input-rename
1722
1695
  userFloatLabel = 'always'; // TODO: make this an injectable default
1723
- _hint;
1724
- _placeholder;
1696
+ hint;
1697
+ placeholder;
1725
1698
  dense = false;
1726
1699
  _enabled$ = this.registerDisposable(new DelegatingValueModel());
1727
1700
  set enabled$(condition$) {
@@ -1788,9 +1761,6 @@ class AbstractInputComponent extends DisposableComponent {
1788
1761
  isEnabled() {
1789
1762
  return this.enabled$.value;
1790
1763
  }
1791
- get disabled() {
1792
- return !this.isEnabled();
1793
- }
1794
1764
  hasErrors() {
1795
1765
  return !this.errorList$.query().isEmpty();
1796
1766
  }
@@ -1803,15 +1773,6 @@ class AbstractInputComponent extends DisposableComponent {
1803
1773
  get focusContext() {
1804
1774
  return this.formValue$.focusContext;
1805
1775
  }
1806
- get label() {
1807
- return this._label ?? this.i18n?.label();
1808
- }
1809
- get hint() {
1810
- return this._hint ?? this.hackyGetI18n("hint");
1811
- }
1812
- get placeholder() {
1813
- return this._placeholder ?? this.hackyGetI18n("placeholder");
1814
- }
1815
1776
  get floatLabel() {
1816
1777
  // return this.dense ? 'never' : this.userFloatLabel;
1817
1778
  return this.userFloatLabel;
@@ -1826,45 +1787,24 @@ class AbstractInputComponent extends DisposableComponent {
1826
1787
  onValueEdited(callback) {
1827
1788
  return this.onValueEditedListeners.add(callback);
1828
1789
  }
1829
- hackyGetI18n(key) {
1830
- // TODO: update I18n to make it possible to get an optional value with return the missing key message.
1831
- const i18nFn = this.i18n ? this.i18n[key] : undefined;
1832
- const i18nValue = i18nFn && i18nFn();
1833
- return i18nValue?.startsWith("missing key") ? undefined : i18nValue;
1834
- }
1835
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 });
1836
- 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 });
1837
1792
  }
1838
- __decorate([
1839
- Proxify(),
1840
- __metadata("design:type", Object)
1841
- ], AbstractInputComponent.prototype, "i18n$", null);
1842
- __decorate([
1843
- StoreInValueModel(),
1844
- __metadata("design:type", Object)
1845
- ], AbstractInputComponent.prototype, "i18n", null);
1846
1793
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractInputComponent, decorators: [{
1847
1794
  type: Component,
1848
1795
  args: [{ template: '' }]
1849
1796
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1850
1797
  type: Inject,
1851
1798
  args: [INPUT_TOKEN_HACK]
1852
- }] }]; }, propDecorators: { i18n$: [{
1799
+ }] }]; }, propDecorators: { label: [{
1853
1800
  type: Input
1854
- }], i18n: [{
1855
- type: Input
1856
- }], _label: [{
1857
- type: Input,
1858
- args: ["label"]
1859
1801
  }], userFloatLabel: [{
1860
1802
  type: Input,
1861
1803
  args: ['floatLabel']
1862
- }], _hint: [{
1863
- type: Input,
1864
- args: ['hint']
1865
- }], _placeholder: [{
1866
- type: Input,
1867
- args: ['placeholder']
1804
+ }], hint: [{
1805
+ type: Input
1806
+ }], placeholder: [{
1807
+ type: Input
1868
1808
  }], dense: [{
1869
1809
  type: HostBinding,
1870
1810
  args: ['class.dense']
@@ -1907,9 +1847,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
1907
1847
  }], notifyFocusOut: [{
1908
1848
  type: HostListener,
1909
1849
  args: ['focusout']
1910
- }], disabled: [{
1911
- type: HostBinding,
1912
- args: ["class.disabled"]
1913
1850
  }] } });
1914
1851
 
1915
1852
  class AbstractListInputComponent extends AbstractInputComponent {
@@ -2147,15 +2084,12 @@ class CheckboxInputComponent extends AbstractValueInputComponent {
2147
2084
  constructor() {
2148
2085
  super();
2149
2086
  }
2150
- select($event) {
2151
- this.componentValue$.value = $event.checked;
2152
- }
2153
2087
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CheckboxInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2154
- 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"] }] });
2155
2089
  }
2156
2090
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CheckboxInputComponent, decorators: [{
2157
2091
  type: Component,
2158
- 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"] }]
2159
2093
  }], ctorParameters: function () { return []; }, propDecorators: { color: [{
2160
2094
  type: Input
2161
2095
  }], labelPosition: [{
@@ -2194,7 +2128,7 @@ class MultipleSelectInputComponent extends AbstractListInputComponent {
2194
2128
  const self = this;
2195
2129
  this.registerDisposable(new Binding(this.componentList$, this.ids$, {
2196
2130
  toLeft(selectedItems, currentLeftValue) {
2197
- const newValues = selectedItems.map(it => lookup.get(it)).filter(it => !!it);
2131
+ const newValues = selectedItems.map(it => lookup.get(it)).filter(it => !it);
2198
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
2199
2133
  return newValues.length < 1 && selectedItems.length > 0 ? currentLeftValue : newValues;
2200
2134
  },
@@ -2205,7 +2139,7 @@ class MultipleSelectInputComponent extends AbstractListInputComponent {
2205
2139
  })).writeRight();
2206
2140
  }
2207
2141
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: MultipleSelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2208
- 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"] }] });
2209
2143
  }
2210
2144
  __decorate([
2211
2145
  Proxify(),
@@ -2233,178 +2167,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2233
2167
 
2234
2168
  class NumberInputComponent extends AbstractValueInputComponent {
2235
2169
  autocomplete;
2236
- #min$_accessor_storage = proxify((ValueModel));
2237
- get min$() { return this.#min$_accessor_storage; }
2238
- set min$(value) { this.#min$_accessor_storage = value; }
2239
- #min_accessor_storage = Number.MIN_SAFE_INTEGER;
2240
- get min() { return this.#min_accessor_storage; }
2241
- set min(value) { this.#min_accessor_storage = value; }
2242
- #max$_accessor_storage = proxify((ValueModel));
2243
- get max$() { return this.#max$_accessor_storage; }
2244
- set max$(value) { this.#max$_accessor_storage = value; }
2245
- #max_accessor_storage = Number.MAX_SAFE_INTEGER;
2246
- get max() { return this.#max_accessor_storage; }
2247
- set max(value) { this.#max_accessor_storage = value; }
2248
- #significantDigits$_accessor_storage = proxify((ValueModel));
2249
- get significantDigits$() { return this.#significantDigits$_accessor_storage; }
2250
- set significantDigits$(value) { this.#significantDigits$_accessor_storage = value; }
2251
- #significantDigits_accessor_storage;
2252
- get significantDigits() { return this.#significantDigits_accessor_storage; }
2253
- set significantDigits(value) { this.#significantDigits_accessor_storage = value; }
2254
- incrementCommand;
2255
- decrementCommand;
2256
- displayValue$;
2257
- step$;
2170
+ min = Number.MIN_SAFE_INTEGER;
2171
+ max = Number.MAX_SAFE_INTEGER;
2172
+ iconPrefix;
2258
2173
  constructor() {
2259
2174
  super();
2260
- const { chain } = Dsl.disposeWith(this);
2261
- this.step$ = chain(this.significantDigits$).map(v => 10 ** (-v)).otherwise(1);
2262
- this.displayValue$ = chain(this.value$).map(v => this.clampSignificantDigits(v), {
2263
- dependsOn: this.significantDigits$
2264
- });
2265
- const normalisedValue$ = chain(this.value$).otherwise(0);
2266
- this.incrementCommand = Command.create(() => {
2267
- this.value$.value = this.increment(this.value$.value);
2268
- }).enableWhile(chain.numericValue(normalisedValue$).isLessThan(this.max$).and(this.enabled$));
2269
- this.decrementCommand = Command.create(() => {
2270
- this.value$.value = this.decrement(this.value$.value);
2271
- }).enableWhile(chain.numericValue(normalisedValue$).isGreaterThan(this.min$).and(this.enabled$));
2272
- }
2273
- increment(value) {
2274
- return this.clampSignificantDigits((value ?? 0) + this.step$.value);
2275
- }
2276
- decrement(value) {
2277
- return this.clampSignificantDigits((value ?? 0) - this.step$.value);
2278
- }
2279
- clampSignificantDigits(value) {
2280
- return Number(value.toFixed(this.significantDigits));
2281
- }
2282
- onValueChange(value) {
2283
- this.value$.value = value;
2284
2175
  }
2285
2176
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: NumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2286
- 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", significantDigits$: "significantDigits$", significantDigits: "significantDigits" }, 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]=\"displayValue$.value\"\n (ngModelChange)=\"onValueChange($event)\"\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 [step]=\"step$.value\"\n >\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"] }] });
2287
2178
  }
2288
- __decorate([
2289
- Proxify(),
2290
- __metadata("design:type", ValueModel)
2291
- ], NumberInputComponent.prototype, "min$", null);
2292
- __decorate([
2293
- StoreInValueModel(),
2294
- __metadata("design:type", Object)
2295
- ], NumberInputComponent.prototype, "min", null);
2296
- __decorate([
2297
- Proxify(),
2298
- __metadata("design:type", ValueModel)
2299
- ], NumberInputComponent.prototype, "max$", null);
2300
- __decorate([
2301
- StoreInValueModel(),
2302
- __metadata("design:type", Object)
2303
- ], NumberInputComponent.prototype, "max", null);
2304
- __decorate([
2305
- Proxify(),
2306
- __metadata("design:type", ValueModel)
2307
- ], NumberInputComponent.prototype, "significantDigits$", null);
2308
- __decorate([
2309
- StoreInValueModel(),
2310
- __metadata("design:type", Number)
2311
- ], NumberInputComponent.prototype, "significantDigits", null);
2312
2179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: NumberInputComponent, decorators: [{
2313
2180
  type: Component,
2314
- 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]=\"displayValue$.value\"\n (ngModelChange)=\"onValueChange($event)\"\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 [step]=\"step$.value\"\n >\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" }]
2315
2182
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2316
2183
  type: Input
2317
- }], min$: [{
2318
- type: Input
2319
2184
  }], min: [{
2320
2185
  type: Input
2321
- }], max$: [{
2322
- type: Input
2323
2186
  }], max: [{
2324
2187
  type: Input
2325
- }], significantDigits$: [{
2326
- type: Input
2327
- }], significantDigits: [{
2188
+ }], iconPrefix: [{
2328
2189
  type: Input
2329
2190
  }] } });
2330
2191
 
2331
2192
  class PasswordInputComponent extends AbstractValueInputComponent {
2332
2193
  autocomplete;
2333
- #enableShowPassword$_accessor_storage = proxify((ValueModel));
2334
- get enableShowPassword$() { return this.#enableShowPassword$_accessor_storage; }
2335
- set enableShowPassword$(value) { this.#enableShowPassword$_accessor_storage = value; }
2336
- #enableShowPassword_accessor_storage = false;
2337
- get enableShowPassword() { return this.#enableShowPassword_accessor_storage; }
2338
- set enableShowPassword(value) { this.#enableShowPassword_accessor_storage = value; }
2339
- showPassword$ = new MutableValueModel(false);
2340
- toggleShowPasswordCommand;
2341
2194
  constructor() {
2342
2195
  super();
2343
- const { chain, valueOf } = Dsl.disposeWith(this);
2344
- const face$ = chain(this.showPassword$).map(show => {
2345
- return {
2346
- icon: () => show ? "mat:visibility_off" : "mat:visibility"
2347
- };
2348
- });
2349
- this.toggleShowPasswordCommand = Command.create(() => {
2350
- this.showPassword$.value = !this.showPassword$.value;
2351
- })
2352
- .withFace(face$)
2353
- .enableWhile(chain.stringValue(this.componentValue$).isNotBlank());
2354
- }
2355
- get fieldType() {
2356
- return this.showPassword$.value ? "text" : "password";
2357
2196
  }
2358
2197
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PasswordInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2359
- 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"] }] });
2360
2199
  }
2361
- __decorate([
2362
- Proxify(),
2363
- __metadata("design:type", Object)
2364
- ], PasswordInputComponent.prototype, "enableShowPassword$", null);
2365
- __decorate([
2366
- StoreInValueModel(),
2367
- __metadata("design:type", Object)
2368
- ], PasswordInputComponent.prototype, "enableShowPassword", null);
2369
2200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PasswordInputComponent, decorators: [{
2370
2201
  type: Component,
2371
- 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" }]
2372
- }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2373
- type: Input
2374
- }], enableShowPassword$: [{
2375
- type: Input
2376
- }], enableShowPassword: [{
2377
- type: Input
2378
- }] } });
2379
-
2380
- class SearchInputComponent extends AbstractValueInputComponent {
2381
- autocomplete;
2382
- clearCommand;
2383
- constructor() {
2384
- super();
2385
- this.dense = true;
2386
- const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2387
- this.clearCommand = Command.create(() => {
2388
- this.componentValue$.value = "";
2389
- });
2390
- this.clearCommand.disableWhile(chain.stringValue(this.componentValue$).isBlank());
2391
- }
2392
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2393
- 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"] }] });
2394
- }
2395
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SearchInputComponent, decorators: [{
2396
- type: Component,
2397
- 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" }]
2398
2203
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2399
2204
  type: Input
2400
2205
  }] } });
2401
2206
 
2402
2207
  /**
2403
2208
  * Using templates:
2404
- * <aup-select-input [value$]="myModel" [options]="myOptions">
2209
+ * <aup-select-input [valueModel]="myModel" [options]="myOptions">
2405
2210
  * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
2406
- * <ng-template #selectedOptionTemplate let-option>{{option.thePropertyYouWant}} note, not used for nils (the placeholder is used)</ng-template>
2407
- * <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>
2408
2212
  * </aup-select_input>
2409
2213
  */
2410
2214
  class SelectInputComponent extends AbstractValueInputComponent {
@@ -2429,7 +2233,7 @@ class SelectInputComponent extends AbstractValueInputComponent {
2429
2233
  super();
2430
2234
  const { chain } = Dsl.disposeWith(this);
2431
2235
  this.cookedOptions$ = chain(this.options$)
2432
- .mapAll(options => {
2236
+ .reduceToList(options => {
2433
2237
  return options.length < 1 && !isNil(this.componentValue$.value) ? [this.componentValue$.value] : options;
2434
2238
  }, {
2435
2239
  dependsOn: this.componentValue$
@@ -2468,21 +2272,21 @@ class SelectInputComponent extends AbstractValueInputComponent {
2468
2272
  id: this.delegatedIdentityOf(value)
2469
2273
  });
2470
2274
  let lastIdSnapshot = snapshotValueAndId(this.componentValue$.value);
2471
- // console.log(lastIdSnapshot)
2275
+ console.log(lastIdSnapshot);
2472
2276
  before(this.options$).changes(() => {
2473
2277
  lastIdSnapshot = snapshotValueAndId(this.componentValue$.value);
2474
- // console.log(lastIdSnapshot)
2278
+ console.log(lastIdSnapshot);
2475
2279
  });
2476
2280
  when(this.options$).changes((is, was) => {
2477
2281
  const newIdSnapshot = snapshotValueAndId(lastIdSnapshot.value);
2478
- // console.log(lastIdSnapshot, newIdSnapshot)
2282
+ console.log(lastIdSnapshot, newIdSnapshot);
2479
2283
  if (newIdSnapshot !== lastIdSnapshot.id) {
2480
2284
  this.id$.value = this.delegatedIdentityOf(this.componentValue$.value);
2481
2285
  }
2482
2286
  });
2483
2287
  }
2484
2288
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2485
- 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"] }] });
2486
2290
  }
2487
2291
  __decorate([
2488
2292
  Proxify(),
@@ -2494,7 +2298,7 @@ __decorate([
2494
2298
  ], SelectInputComponent.prototype, "options", null);
2495
2299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputComponent, decorators: [{
2496
2300
  type: Component,
2497
- 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"] }]
2498
2302
  }], ctorParameters: function () { return []; }, propDecorators: { options$: [{
2499
2303
  type: Input
2500
2304
  }], options: [{
@@ -2525,28 +2329,17 @@ class StringInputComponent extends AbstractValueInputComponent {
2525
2329
  get enableClear() { return this.#enableClear_accessor_storage; }
2526
2330
  set enableClear(value) { this.#enableClear_accessor_storage = value; }
2527
2331
  iconPrefix;
2528
- #suffixCommand_accessor_storage = proxify(Command);
2529
- get suffixCommand() { return this.#suffixCommand_accessor_storage; }
2530
- set suffixCommand(value) { this.#suffixCommand_accessor_storage = value; }
2531
2332
  clearCommand;
2532
- elementRef = this.inject(ElementRef);
2533
2333
  constructor() {
2534
2334
  super();
2535
2335
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2536
2336
  this.clearCommand = Command.create(() => {
2537
2337
  this.componentValue$.value = "";
2538
- })
2539
- .withFace({ icon: () => "mat:clear" })
2540
- .enableWhile(chain.stringValue(this.componentValue$).isNotBlank());
2541
- }
2542
- get hasSuffixCommand() {
2543
- return Proxify.hasTarget(this.suffixCommand);
2544
- }
2545
- select() {
2546
- this.elementRef.nativeElement.querySelector('input').select();
2338
+ });
2339
+ this.clearCommand.disableWhile(chain.stringValue(this.componentValue$).isBlank());
2547
2340
  }
2548
2341
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2549
- 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"] }] });
2550
2343
  }
2551
2344
  __decorate([
2552
2345
  Proxify(),
@@ -2556,13 +2349,9 @@ __decorate([
2556
2349
  StoreInValueModel(),
2557
2350
  __metadata("design:type", Object)
2558
2351
  ], StringInputComponent.prototype, "enableClear", null);
2559
- __decorate([
2560
- Proxify(),
2561
- __metadata("design:type", Command)
2562
- ], StringInputComponent.prototype, "suffixCommand", null);
2563
2352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputComponent, decorators: [{
2564
2353
  type: Component,
2565
- 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"] }]
2566
2355
  }], ctorParameters: function () { return []; }, propDecorators: { autocomplete: [{
2567
2356
  type: Input
2568
2357
  }], enableClear$: [{
@@ -2571,8 +2360,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2571
2360
  type: Input
2572
2361
  }], iconPrefix: [{
2573
2362
  type: Input
2574
- }], suffixCommand: [{
2575
- type: Input
2576
2363
  }] } });
2577
2364
 
2578
2365
  class TextInputComponent extends AbstractValueInputComponent {
@@ -2580,14 +2367,10 @@ class TextInputComponent extends AbstractValueInputComponent {
2580
2367
  // valueModel: Form.ValueModelBase<string> | MutableValueModel<string>;
2581
2368
  rows = 2;
2582
2369
  cols;
2583
- elementRef = this.inject(ElementRef);
2584
2370
  constructor() {
2585
2371
  super();
2586
2372
  // const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
2587
2373
  }
2588
- select() {
2589
- this.elementRef.nativeElement.querySelector('input').select();
2590
- }
2591
2374
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2592
2375
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TextInputComponent, selector: "aup-text-input", inputs: { rows: "rows", cols: "cols" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <textarea matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"componentValue$.value\"\n [disabled]=\"!enabled$.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [rows]=\"rows\"\n [cols]=\"cols\"\n >\n </textarea>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n", styles: ["button[disabled]{visibility:hidden}textarea{overflow:auto}\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: FocusBindingDirective, selector: "[pectinFocusBinding]", inputs: ["pectinFocusBinding", "focusBindingTarget"] }] });
2593
2376
  }
@@ -2764,6 +2547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2764
2547
  * </aup-switch-case>
2765
2548
  */
2766
2549
  class SwitchCaseComponent extends DisposableComponent {
2550
+ cdr;
2767
2551
  #switch$_accessor_storage = proxify((ValueModel));
2768
2552
  get switch$() { return this.#switch$_accessor_storage; }
2769
2553
  set switch$(value) { this.#switch$_accessor_storage = value; }
@@ -2772,8 +2556,9 @@ class SwitchCaseComponent extends DisposableComponent {
2772
2556
  set switch(value) { this.#switch_accessor_storage = value; }
2773
2557
  switchCaseOptions;
2774
2558
  selectedIndex = 0;
2775
- constructor() {
2559
+ constructor(cdr) {
2776
2560
  super();
2561
+ this.cdr = cdr;
2777
2562
  }
2778
2563
  ngAfterContentInit() {
2779
2564
  const subscription = this.switchCaseOptions.changes.subscribe(change => this.updateSelection());
@@ -2810,8 +2595,8 @@ class SwitchCaseComponent extends DisposableComponent {
2810
2595
  this.selectedIndex = -1;
2811
2596
  }
2812
2597
  }
2813
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SwitchCaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2814
- 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"] }] });
2815
2600
  }
2816
2601
  __decorate([
2817
2602
  Proxify(),
@@ -2824,7 +2609,7 @@ __decorate([
2824
2609
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SwitchCaseComponent, decorators: [{
2825
2610
  type: Component,
2826
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"] }]
2827
- }], ctorParameters: function () { return []; }, propDecorators: { switch$: [{
2612
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { switch$: [{
2828
2613
  type: Input
2829
2614
  }], switch: [{
2830
2615
  type: Input
@@ -2834,7 +2619,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2834
2619
  }] } });
2835
2620
 
2836
2621
  const HEADER_CELL_RENDERER_PORTAL = Symbol('aup-cell-header-renderer-component-ref');
2837
- const FOOTER_CELL_RENDERER_PORTAL = Symbol('aup-cell-footer-renderer-component-ref');
2838
2622
  const CELL_RENDERER_PORTAL = Symbol('aup-cell-renderer-component-ref');
2839
2623
  const CELL_EDITOR_PORTAL = Symbol('aup-cell-editor-component-ref');
2840
2624
  const PORTAL_RENDERER_COMPONENT = Symbol('aup-cell-renderer-portal-component');
@@ -2849,7 +2633,7 @@ class CellHeaderPortalRef extends CellPortalRef {
2849
2633
  this.componentType = componentType;
2850
2634
  this.initialiseHeader = initialiseHeader;
2851
2635
  }
2852
- initialiseHost(host) {
2636
+ initialiseHost(host, columnModel) {
2853
2637
  assert$1.isTruthy(host);
2854
2638
  host[HEADER_CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
2855
2639
  }
@@ -2868,7 +2652,7 @@ class ComponentCellRendererPortalRef extends CellRendererPortalRef {
2868
2652
  this.componentType = componentType;
2869
2653
  this.updateComponent = updateComponent;
2870
2654
  }
2871
- initialiseHost(host) {
2655
+ initialiseHost(host, columnModel) {
2872
2656
  host[CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
2873
2657
  }
2874
2658
  // @Trace()
@@ -2891,7 +2675,7 @@ class CellEditorPortalRef extends CellPortalRef {
2891
2675
  this.componentType = componentType;
2892
2676
  this.initialiseEditorSession = initialiseEditorSession;
2893
2677
  }
2894
- initialiseHost(host) {
2678
+ initialiseHost(host, columnModel) {
2895
2679
  assert$1.isTruthy(host);
2896
2680
  host[CELL_EDITOR_PORTAL] = new ComponentPortal(this.componentType);
2897
2681
  }
@@ -2915,7 +2699,7 @@ class TemplateCellRendererPortalRef extends CellRendererPortalRef {
2915
2699
  this.fillCell = fillCell;
2916
2700
  this.padChild = padChild;
2917
2701
  }
2918
- initialiseHost(host) {
2702
+ initialiseHost(host, columnModel) {
2919
2703
  assert$1.isTruthy(host);
2920
2704
  }
2921
2705
  // @Trace()
@@ -2932,23 +2716,6 @@ class TemplateCellRendererPortalRef extends CellRendererPortalRef {
2932
2716
  return new TemplatePortal(this.templateRef, this.viewContainer, { ...(data), $implicit: data.row });
2933
2717
  }
2934
2718
  }
2935
- class CellFooterPortalRef extends CellPortalRef {
2936
- componentType;
2937
- initialiseHeader;
2938
- constructor(componentType, initialiseHeader) {
2939
- super();
2940
- this.componentType = componentType;
2941
- this.initialiseHeader = initialiseHeader;
2942
- }
2943
- initialiseHost(host) {
2944
- assert$1.isTruthy(host);
2945
- host[HEADER_CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
2946
- }
2947
- // @Trace()
2948
- onPortalAttached(host, portalComponent) {
2949
- this.initialiseHeader(portalComponent, host.column);
2950
- }
2951
- }
2952
2719
 
2953
2720
  class ColumnTextSearchFormatter {
2954
2721
  }
@@ -3039,7 +2806,6 @@ class ColumnTextSearchWrapper extends ColumnTextSearchFormatter.Delegate {
3039
2806
  }
3040
2807
  class ColumnModel extends GarbageCollector {
3041
2808
  columnId;
3042
- order;
3043
2809
  textPropertiesProvider;
3044
2810
  _columnTextProperties;
3045
2811
  _columnHeaderPortalRef;
@@ -3053,10 +2819,9 @@ class ColumnModel extends GarbageCollector {
3053
2819
  dasherisedColumnId;
3054
2820
  textSearchDelegate = new ColumnTextSearchWrapper();
3055
2821
  visible$;
3056
- constructor(columnId, order, textPropertiesProvider) {
2822
+ constructor(columnId, textPropertiesProvider) {
3057
2823
  super();
3058
2824
  this.columnId = columnId;
3059
- this.order = order;
3060
2825
  this.textPropertiesProvider = textPropertiesProvider;
3061
2826
  const { valueOf } = Dsl.disposeWith(this);
3062
2827
  this.installHeaderRenderer();
@@ -3101,14 +2866,6 @@ class ColumnModel extends GarbageCollector {
3101
2866
  this._columnTextProperties = columnTextProperties;
3102
2867
  return this;
3103
2868
  }
3104
- positionAfter(column) {
3105
- this.order.position(this, { after: column });
3106
- return this;
3107
- }
3108
- positionBefore(column) {
3109
- this.order.position(this, { before: column });
3110
- return this;
3111
- }
3112
2869
  getSearchTextFor(row) {
3113
2870
  return this.textSearchDelegate.format(row);
3114
2871
  }
@@ -3141,12 +2898,12 @@ class ColumnModel extends GarbageCollector {
3141
2898
  return !!this._cellEditorPortalRef;
3142
2899
  }
3143
2900
  attachHeaderCell(host) {
3144
- this._columnHeaderPortalRef.initialiseHost(host);
2901
+ this._columnHeaderPortalRef.initialiseHost(host, this);
3145
2902
  }
3146
2903
  attachCell(host) {
3147
- this._cellRendererPortalRef.initialiseHost(host);
2904
+ this._cellRendererPortalRef.initialiseHost(host, this);
3148
2905
  if (this.hasEditorPortal()) {
3149
- this._cellEditorPortalRef.initialiseHost(host);
2906
+ this._cellEditorPortalRef.initialiseHost(host, this);
3150
2907
  }
3151
2908
  }
3152
2909
  onHeaderAttached(host, ref) {
@@ -3210,8 +2967,8 @@ __decorate([
3210
2967
 
3211
2968
  class CustomTemplateColumnModel extends ColumnModel {
3212
2969
  config = new TemplateCellRendererPortalRef();
3213
- constructor(columnId, order, defaults) {
3214
- super(columnId, order, defaults);
2970
+ constructor(columnId, defaults) {
2971
+ super(columnId, defaults);
3215
2972
  this.configureCellRenderer(this.config);
3216
2973
  }
3217
2974
  setTemplate(templateRef, viewContainer, fillCell, padChild) {
@@ -3289,17 +3046,12 @@ class AbstractTableComponent extends DisposableComponent {
3289
3046
  #showHeader_accessor_storage = true;
3290
3047
  get showHeader() { return this.#showHeader_accessor_storage; }
3291
3048
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
3292
- #enableScrolling$_accessor_storage = proxify((ValueModel));
3293
3049
  /**
3294
3050
  * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
3295
3051
  * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
3296
3052
  * containment area.
3297
3053
  */
3298
- get enableScrolling$() { return this.#enableScrolling$_accessor_storage; }
3299
- set enableScrolling$(value) { this.#enableScrolling$_accessor_storage = value; }
3300
- #enableScrolling_accessor_storage = false;
3301
- get enableScrolling() { return this.#enableScrolling_accessor_storage; }
3302
- set enableScrolling(value) { this.#enableScrolling_accessor_storage = value; }
3054
+ enableScrolling = false;
3303
3055
  columns;
3304
3056
  columnIds;
3305
3057
  columnsById;
@@ -3318,6 +3070,7 @@ class AbstractTableComponent extends DisposableComponent {
3318
3070
  super();
3319
3071
  this.injector = injector;
3320
3072
  const { chain, when } = Dsl.disposeWith(this);
3073
+ this._visibleRows$.setDelegate(this._dataSource$);
3321
3074
  when(chain(this._dataSource$).first()).becomesTruthy(it => {
3322
3075
  if (it === this.identityOf(it)) {
3323
3076
  console.warn("Table model identity function is using reference equality. This can cause lots of table re-rendering", {
@@ -3336,7 +3089,7 @@ class AbstractTableComponent extends DisposableComponent {
3336
3089
  if (!model) {
3337
3090
  lang$1.illegalState("aup-table tableModel is nil");
3338
3091
  }
3339
- this.columnsById = chain(model.columns$).indexBy('columnId');
3092
+ this.columnsById = chain(model.columns).indexBy('columnId');
3340
3093
  this._dataSource$.setDelegate(model.dataSource$);
3341
3094
  model.initialise(this.injector, (row) => this.identityOf(row));
3342
3095
  }
@@ -3353,7 +3106,7 @@ class AbstractTableComponent extends DisposableComponent {
3353
3106
  }
3354
3107
  }
3355
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 });
3356
- 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 });
3357
3110
  }
3358
3111
  __decorate([
3359
3112
  Proxify(),
@@ -3363,14 +3116,6 @@ __decorate([
3363
3116
  StoreInValueModel(),
3364
3117
  __metadata("design:type", Object)
3365
3118
  ], AbstractTableComponent.prototype, "showHeader", null);
3366
- __decorate([
3367
- Proxify(),
3368
- __metadata("design:type", ValueModel)
3369
- ], AbstractTableComponent.prototype, "enableScrolling$", null);
3370
- __decorate([
3371
- StoreInValueModel(),
3372
- __metadata("design:type", Boolean)
3373
- ], AbstractTableComponent.prototype, "enableScrolling", null);
3374
3119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, decorators: [{
3375
3120
  type: Component,
3376
3121
  args: [{
@@ -3381,8 +3126,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
3381
3126
  type: Input
3382
3127
  }], showHeader: [{
3383
3128
  type: Input
3384
- }], enableScrolling$: [{
3385
- type: Input
3386
3129
  }], enableScrolling: [{
3387
3130
  type: Input
3388
3131
  }], baseCssClass: [{
@@ -3443,8 +3186,6 @@ class EditSession extends GarbageCollector {
3443
3186
  // console.warn()
3444
3187
  // }
3445
3188
  this._liveRowValue$.value = produce(this._liveRowValue$.value, draft => {
3446
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3447
- // @ts-ignore
3448
3189
  this.form.writeDirtyStateTo(draft);
3449
3190
  });
3450
3191
  });
@@ -3547,11 +3288,11 @@ class DefaultCellRendererComponent {
3547
3288
  return this._value;
3548
3289
  }
3549
3290
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3550
- 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" }] });
3551
3292
  }
3552
3293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, decorators: [{
3553
3294
  type: Component,
3554
- 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" }]
3555
3296
  }], propDecorators: { value: [{
3556
3297
  type: Input
3557
3298
  }] } });
@@ -3567,8 +3308,7 @@ class SelectionHeaderCellComponent extends DisposableComponent {
3567
3308
  super();
3568
3309
  this.selectCommand = Command.create(() => {
3569
3310
  this.selectionModel.toggleAllCommand.execute();
3570
- }).visibleWhile(this.selectionModel.toggleAllCommand.visible$)
3571
- .enableWhile(this.selectionModel.toggleAllCommand.enabled$);
3311
+ });
3572
3312
  }
3573
3313
  isSelected() {
3574
3314
  return this.ifMultiSelectionModel(m => m.allSelected$.value, false);
@@ -3596,7 +3336,7 @@ class SelectionHeaderCellComponent extends DisposableComponent {
3596
3336
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectionHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3597
3337
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SelectionHeaderCellComponent, selector: "aup-selection-header-cell", providers: [
3598
3338
  { provide: MAT_CHECKBOX_DEFAULT_OPTIONS, useValue: { clickAction: 'noop' } }
3599
- ], 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"] }] });
3600
3340
  }
3601
3341
  __decorate([
3602
3342
  Proxify(),
@@ -3629,7 +3369,7 @@ class SelectionCellComponent extends DisposableComponent {
3629
3369
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectionCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3630
3370
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: SelectionCellComponent, selector: "aup-selection-cell", inputs: { row: "row" }, providers: [
3631
3371
  { provide: MAT_CHECKBOX_DEFAULT_OPTIONS, useValue: { clickAction: 'noop' } }
3632
- ], 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"] }] });
3633
3373
  }
3634
3374
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectionCellComponent, decorators: [{
3635
3375
  type: Component,
@@ -3690,14 +3430,25 @@ class Bounds extends Dimension {
3690
3430
  })(Bounds || (Bounds = {}));
3691
3431
 
3692
3432
  class ResizeAwareComponent extends DisposableComponent {
3693
- elementRef = this.inject(ElementRef);
3694
- ngZone = this.inject(NgZone);
3695
- 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
+ }
3696
3441
  ngAfterViewInit() {
3697
- 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());
3698
3449
  }
3699
3450
  get bounds$() {
3700
- return this.boundsTracker.bounds$;
3451
+ return this._bounds$.readonly$;
3701
3452
  }
3702
3453
  get nativeElement() {
3703
3454
  return this.elementRef.nativeElement;
@@ -3707,160 +3458,57 @@ class ResizeAwareComponent extends DisposableComponent {
3707
3458
  return this.bounds.relativePositionOf(point);
3708
3459
  }
3709
3460
  get bounds() {
3710
- return this.bounds$.value;
3461
+ return this._bounds$.value;
3462
+ }
3463
+ _updateBounds() {
3464
+ this._bounds$.value = Bounds.ofElement(this.nativeElement);
3711
3465
  }
3712
- 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 });
3713
3467
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ResizeAwareComponent, usesInheritance: true, ngImport: i0 });
3714
3468
  }
3715
3469
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeAwareComponent, decorators: [{
3716
3470
  type: Directive
3717
- }] });
3718
- (function (ResizeAwareComponent) {
3719
- class ResizeTracker extends GarbageCollector {
3720
- elementRef;
3721
- ngZone;
3722
- _bounds$ = new MutableValueModel(new Bounds(0, 0, 0, 0));
3723
- width$;
3724
- height$;
3725
- top$;
3726
- left$;
3727
- bottom$;
3728
- right$;
3729
- constructor(elementRef, ngZone) {
3730
- super();
3731
- this.elementRef = elementRef;
3732
- this.ngZone = ngZone;
3733
- const { chain } = Dsl.disposeWith(this);
3734
- this.width$ = chain(this.bounds$).pluck("width");
3735
- this.height$ = chain(this.bounds$).pluck("height");
3736
- this.top$ = chain(this.bounds$).pluck("top");
3737
- this.left$ = chain(this.bounds$).pluck("left");
3738
- this.bottom$ = chain.numericValue(this.top$).add(this.height$);
3739
- this.right$ = chain.numericValue(this.left$).add(this.width$);
3740
- }
3741
- notifyViewReady() {
3742
- const element = this.elementRef.nativeElement;
3743
- const ro = new ResizeObserver((entries, observer) => {
3744
- this.ngZone.run(() => this._updateBounds());
3745
- });
3746
- ro.observe(element);
3747
- this.onDispose(() => ro.disconnect());
3748
- setTimeout(() => this._updateBounds());
3749
- }
3750
- get bounds$() {
3751
- return this._bounds$.readonly$;
3752
- }
3753
- get nativeElement() {
3754
- return this.elementRef.nativeElement;
3755
- }
3756
- // TODO: Make this handle body scroll
3757
- relativePositionOf(point) {
3758
- return this.bounds.relativePositionOf(point);
3759
- }
3760
- get bounds() {
3761
- return this._bounds$.value;
3762
- }
3763
- _updateBounds() {
3764
- this._bounds$.value = Bounds.ofElement(this.nativeElement);
3765
- }
3766
- }
3767
- ResizeAwareComponent.ResizeTracker = ResizeTracker;
3768
- })(ResizeAwareComponent || (ResizeAwareComponent = {}));
3769
-
3770
- var ColumnOrderManager;
3771
- (function (ColumnOrderManager) {
3772
- function processPosition(position, callback) {
3773
- if (position) {
3774
- const keys = Object.keys(position);
3775
- if (keys.includes("before")) {
3776
- return position["before"] ? callback.before(position["before"]) : callback.first();
3777
- }
3778
- else {
3779
- return position["after"] ? callback.after(position["after"]) : callback.last();
3780
- }
3781
- }
3782
- else {
3783
- return callback.last();
3784
- }
3785
- }
3786
- ColumnOrderManager.processPosition = processPosition;
3787
- })(ColumnOrderManager || (ColumnOrderManager = {}));
3471
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; } });
3788
3472
 
3789
- class ColumnRef {
3790
- column;
3791
- position;
3792
- constructor(column, position) {
3793
- this.column = column;
3794
- this.position = position;
3795
- }
3796
- }
3797
- class ColumnManager extends GarbageCollector {
3798
- _columnRefs$ = new MutableListModel();
3799
- orderedColumnRefs$;
3800
- _columnsById$;
3801
- allColumns$;
3802
- columnVisibilities$ = new WatchList();
3803
- visibleColumns$;
3473
+ class ColumnListModel extends AbstractComputedListModel {
3474
+ _allColumns$ = new MutableListModel();
3475
+ columnsById$;
3804
3476
  constructor() {
3805
3477
  super();
3806
3478
  const { chain } = Dsl.disposeWith(this);
3807
- this.orderedColumnRefs$ = chain(this._columnRefs$).orderBy("position", "asc");
3808
- this.allColumns$ = this.orderedColumnRefs$.pluck("column");
3809
- this._columnsById$ = chain(this.allColumns$).indexBy('columnId');
3810
- this.visibleColumns$ = chain(this.allColumns$).select(it => it.visible$.value, {
3811
- dependsOn: this.columnVisibilities$
3812
- });
3479
+ this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
3813
3480
  }
3814
- position(column, newPosition) {
3815
- const target = this._columnRefs$.query().findMatching(it => it.column === column);
3816
- const position = this.computePosition(newPosition);
3817
- this._columnRefs$.replace(target, { with: new ColumnRef(target.column, position) });
3481
+ get allColumns$() {
3482
+ return this._allColumns$.readonly$;
3818
3483
  }
3819
3484
  getColumn(id) {
3820
- return this._columnsById$.get(id);
3485
+ return this.columnsById$.get(id);
3821
3486
  }
3822
3487
  hasColumn(id) {
3823
- return !!this._columnsById$.get(id);
3488
+ return !!this.columnsById$.get(id);
3824
3489
  }
3825
3490
  hasMatchingColumn(row, regex) {
3826
3491
  // only search the visible columns
3827
- return !!this.visibleColumns$.value.find(c => regex.test(c.getSearchTextFor(row)));
3492
+ return !!this.value.find(c => regex.test(c.getSearchTextFor(row)));
3828
3493
  }
3829
- addColumn(column, position) {
3494
+ addColumn(column, index) {
3830
3495
  if (this.hasColumn(column.columnId)) {
3831
3496
  lang.illegalState(`Column with id=${column.columnId} already exists`);
3832
3497
  }
3833
3498
  this.registerDisposable(column);
3834
- this._columnRefs$.push(new ColumnRef(column, this.computePosition(position)));
3835
- this.columnVisibilities$.add(column.visible$);
3836
- return column;
3837
- }
3838
- computePosition(position) {
3839
- const q = this.orderedColumnRefs$.query();
3840
- return ColumnOrderManager.processPosition(position, {
3841
- before(col) {
3842
- const index = q.findIndex(ref => ref.column === col);
3843
- const beforeCol = q.value[index];
3844
- const afterCol = index - 1 >= 0 ? q.value[index - 1] : undefined;
3845
- return generateKeyBetween(afterCol?.position, beforeCol.position);
3846
- },
3847
- after(col) {
3848
- const index = q.findIndex(ref => ref.column === col);
3849
- const afterCol = q.value[index];
3850
- const beforeCol = index + 1 < q.length ? q.value[index + 1] : undefined;
3851
- return generateKeyBetween(afterCol.position, beforeCol?.position);
3852
- },
3853
- first() {
3854
- return generateKeyBetween(null, q.first()?.position);
3855
- },
3856
- last() {
3857
- // add it to the end of the list
3858
- return generateKeyBetween(q.last()?.position, null);
3499
+ this.runInTransaction(() => {
3500
+ if (!isNil(index)) {
3501
+ this._allColumns$.insert(index, column);
3502
+ }
3503
+ else {
3504
+ this._allColumns$.push(column);
3859
3505
  }
3506
+ this.registerDisposable(this.trackSource(column.visible$));
3860
3507
  });
3508
+ return column;
3861
3509
  }
3862
3510
  doComputeValue() {
3863
- return this.allColumns$.value.filter(c => c.visible$.value);
3511
+ return this._allColumns$.value.filter(c => c.visible$.value);
3864
3512
  }
3865
3513
  }
3866
3514
 
@@ -3894,8 +3542,8 @@ function EnableCellTextSearch(options) {
3894
3542
 
3895
3543
  class CustomValueColumnModel extends ColumnModel {
3896
3544
  getValue;
3897
- constructor(columnId, order, defaults, getValue) {
3898
- super(columnId, order, defaults);
3545
+ constructor(columnId, defaults, getValue) {
3546
+ super(columnId, defaults);
3899
3547
  this.getValue = getValue;
3900
3548
  this.cellRenderer(DefaultCellRendererComponent);
3901
3549
  }
@@ -3903,17 +3551,17 @@ class CustomValueColumnModel extends ColumnModel {
3903
3551
  this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => new ColumnTextSearchFormatter.Null()), row => this.getValue(row));
3904
3552
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
3905
3553
  if (firstTime) {
3906
- if (isFunction(onComponentInitOrOptions)) {
3554
+ if (isFunction$1(onComponentInitOrOptions)) {
3907
3555
  onComponentInitOrOptions(component);
3908
3556
  }
3909
3557
  else {
3910
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3558
+ if (isFunction$1(onComponentInitOrOptions?.onComponentInit)) {
3911
3559
  onComponentInitOrOptions.onComponentInit(component);
3912
3560
  }
3913
3561
  }
3914
3562
  }
3915
3563
  component.value = this.getValue(rowData.row);
3916
- if (!isFunction(onComponentInitOrOptions) && isFunction(onComponentInitOrOptions?.onRowUpdate)) {
3564
+ if (!isFunction$1(onComponentInitOrOptions) && isFunction$1(onComponentInitOrOptions?.onRowUpdate)) {
3917
3565
  onComponentInitOrOptions.onRowUpdate(component, rowData.row);
3918
3566
  }
3919
3567
  }));
@@ -3925,8 +3573,8 @@ class CustomValueColumnModel extends ColumnModel {
3925
3573
  }
3926
3574
 
3927
3575
  class EditorControlColumnModel extends ColumnModel {
3928
- constructor(columnId, order, saveCommandFactory, defaults) {
3929
- super(columnId, order, defaults);
3576
+ constructor(columnId, saveCommandFactory, defaults) {
3577
+ super(columnId, defaults);
3930
3578
  this.cellRenderer(EditRowControlsComponent);
3931
3579
  }
3932
3580
  cellRenderer(componentType) {
@@ -3951,8 +3599,8 @@ class ListPropertyColumnModel extends ColumnModel {
3951
3599
  intermediate.map(v => v?.toString()).join(", ") :
3952
3600
  intermediate?.toString();
3953
3601
  };
3954
- constructor(id, order, property, defaults) {
3955
- super(id, order, defaults);
3602
+ constructor(id, property, defaults) {
3603
+ super(id, defaults);
3956
3604
  this.property = property;
3957
3605
  this.cellRenderer(DefaultCellRendererComponent);
3958
3606
  }
@@ -3968,7 +3616,7 @@ class ListPropertyColumnModel extends ColumnModel {
3968
3616
  }
3969
3617
  cellEditor(editor, validatorsOrInitialiser, initialiseComponent) {
3970
3618
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3971
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3619
+ const initialiser = isFunction$1(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3972
3620
  this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
3973
3621
  const formListModel = editSession.form.pluckList(this.property);
3974
3622
  if (validators) {
@@ -3997,8 +3645,8 @@ class PropertyColumnModel extends ColumnModel {
3997
3645
  _defaultSearchTextFormatter = (value) => {
3998
3646
  return (this._userFormat ?? Functions.identity)(value)?.toString();
3999
3647
  };
4000
- constructor(id, order, property, defaults) {
4001
- super(id, order, defaults);
3648
+ constructor(id, property, defaults) {
3649
+ super(id, defaults);
4002
3650
  this.property = property;
4003
3651
  this.cellRenderer(DefaultCellRendererComponent);
4004
3652
  }
@@ -4006,11 +3654,11 @@ class PropertyColumnModel extends ColumnModel {
4006
3654
  this.configureColumnTextSearch(EnableCellTextSearch.getFormatter(componentType, () => ColumnTextSearchFormatter.forFormatter(this._defaultSearchTextFormatter)), row => row[this.property]);
4007
3655
  this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
4008
3656
  if (firstTime) {
4009
- if (isFunction(onComponentInitOrOptions)) {
3657
+ if (isFunction$1(onComponentInitOrOptions)) {
4010
3658
  onComponentInitOrOptions(component);
4011
3659
  }
4012
3660
  else {
4013
- if (isFunction(onComponentInitOrOptions?.onComponentInit)) {
3661
+ if (isFunction$1(onComponentInitOrOptions?.onComponentInit)) {
4014
3662
  onComponentInitOrOptions.onComponentInit(component);
4015
3663
  }
4016
3664
  }
@@ -4035,7 +3683,7 @@ class PropertyColumnModel extends ColumnModel {
4035
3683
  component[ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
4036
3684
  let disableEditCallback = false;
4037
3685
  if (firstTime) {
4038
- if (isFunction(options?.onComponentInit)) {
3686
+ if (isFunction$1(options?.onComponentInit)) {
4039
3687
  options.onComponentInit(component);
4040
3688
  }
4041
3689
  // install our edit callback
@@ -4050,7 +3698,7 @@ class PropertyColumnModel extends ColumnModel {
4050
3698
  disableEditCallback = true;
4051
3699
  component.value = rowData.row[this.property];
4052
3700
  disableEditCallback = false;
4053
- if (!isFunction(options) && isFunction(options?.onRowUpdate)) {
3701
+ if (!isFunction$1(options) && isFunction$1(options?.onRowUpdate)) {
4054
3702
  options.onRowUpdate(component, rowData.row);
4055
3703
  }
4056
3704
  }));
@@ -4058,7 +3706,7 @@ class PropertyColumnModel extends ColumnModel {
4058
3706
  }
4059
3707
  cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
4060
3708
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
4061
- const initialiser = isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
3709
+ const initialiser = isFunction$1(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
4062
3710
  this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
4063
3711
  const formValueModel = editSession.form.pluck(this.property);
4064
3712
  if (validators) {
@@ -4082,37 +3730,29 @@ class PropertyColumnModel extends ColumnModel {
4082
3730
  }
4083
3731
 
4084
3732
  class SelectionColumnModel extends ColumnModel {
3733
+ selectionModel;
4085
3734
  _enableHeaderControls = true;
4086
3735
  _color = "accent";
4087
- _selectionModelProxy = proxify((SelectionModel));
4088
- _isUsingTemporarySelection$ = new MutableValueModel(false);
4089
- _userSelectionModel;
4090
- constructor(columnId, order, defaults) {
4091
- super(columnId, order, defaults);
3736
+ constructor(columnId, defaults, selectionModel) {
3737
+ super(columnId, defaults);
3738
+ this.selectionModel = selectionModel;
4092
3739
  const { chain } = Dsl.disposeWith(this);
4093
3740
  this._selectRowOnClick(false);
4094
3741
  this.cellHeaderRenderer(SelectionHeaderCellComponent, (component) => {
4095
- component.selectionModel = this._selectionModelProxy;
3742
+ component.selectionModel = this.selectionModel;
4096
3743
  component.enableHeaderControls = this._enableHeaderControls;
4097
3744
  component.color = this._color;
4098
3745
  });
4099
3746
  this.configureCellRenderer(new ComponentCellRendererPortalRef(SelectionCellComponent, (component, rowData) => {
4100
3747
  component.row = rowData.row;
4101
- component.selectionModel = this._selectionModelProxy;
3748
+ component.selectionModel = this.selectionModel;
4102
3749
  component.color = this._color;
4103
3750
  }));
4104
- this.setMasterVisibility(this._selectionModelProxy.enabled$);
4105
- this.setDefaultVisibility(chain(this._selectionModelProxy.mode$).equals(SelectionModel.Mode.MULTIPLE));
4106
- }
4107
- get selectionModel() {
4108
- return this._selectionModelProxy;
4109
- }
4110
- get isUsingTemporarySelectionModel$() {
4111
- return this._isUsingTemporarySelection$.readonly$;
3751
+ this.setMasterVisibility(this.selectionModel.enabled$);
3752
+ this.setDefaultVisibility(chain(this.selectionModel.mode$).equals(SelectionModel.Mode.MULTIPLE));
4112
3753
  }
4113
3754
  useSelectionModel(selectionModel) {
4114
- this._userSelectionModel = selectionModel;
4115
- this._selectionModelProxy.setProxyTarget(selectionModel);
3755
+ this.selectionModel.setProxyTarget(selectionModel);
4116
3756
  }
4117
3757
  getDefaultHeaderText() {
4118
3758
  return '';
@@ -4128,63 +3768,13 @@ class SelectionColumnModel extends ColumnModel {
4128
3768
  this._color = color;
4129
3769
  }
4130
3770
  selectRow(row) {
4131
- this._selectionModelProxy.selectCommand.execute(row);
3771
+ this.selectionModel.selectCommand.execute(row);
4132
3772
  }
4133
3773
  isSelected(row) {
4134
- return this._selectionModelProxy.isSelected(row);
4135
- }
4136
- async withTemporarySelectionModel(createSelectionModel, process) {
4137
- const garbage = new GarbageCollector();
4138
- this._isUsingTemporarySelection$.value = true;
4139
- const selectionModel = createSelectionModel(garbage);
4140
- this._selectionModelProxy.setProxyTarget(selectionModel);
4141
- try {
4142
- await process(selectionModel);
4143
- }
4144
- finally {
4145
- this._selectionModelProxy.setProxyTarget(this._userSelectionModel);
4146
- garbage.dispose();
4147
- this._isUsingTemporarySelection$.value = false;
4148
- }
3774
+ return this.selectionModel.isSelected(row);
4149
3775
  }
4150
3776
  }
4151
3777
 
4152
- let RowClass$1 = class RowClass {
4153
- className;
4154
- matches;
4155
- constructor(className, matches) {
4156
- this.className = className;
4157
- this.matches = matches;
4158
- }
4159
- };
4160
- class FooterRowModel {
4161
- _rowClasses = [];
4162
- noPadding() {
4163
- this.addClass("no-padding");
4164
- }
4165
- addClass(className, condition) {
4166
- this._rowClasses.push(new RowClass$1(className, condition ?? (() => true)));
4167
- }
4168
- }
4169
- (function (FooterRowModel) {
4170
- class Impl extends FooterRowModel {
4171
- component;
4172
- onInit;
4173
- portal;
4174
- constructor(component, onInit) {
4175
- super();
4176
- this.component = component;
4177
- this.onInit = onInit;
4178
- this.portal = new ComponentPortal(component);
4179
- }
4180
- getActiveRowClasses() {
4181
- return this._rowClasses.filter(c => c.matches()).map(c => c.className).join(" ");
4182
- }
4183
- }
4184
- FooterRowModel.Impl = Impl;
4185
- })(FooterRowModel || (FooterRowModel = {}));
4186
- ProxyRegistry.registerOneTimeBinding(FooterRowModel);
4187
-
4188
3778
  class TableMoreMenuComponent extends DisposableComponent {
4189
3779
  value$ = new MutableValueModel();
4190
3780
  #value_accessor_storage;
@@ -4194,15 +3784,13 @@ class TableMoreMenuComponent extends DisposableComponent {
4194
3784
  popupType$ = new MutableValueModel();
4195
3785
  popupComponentPortal$;
4196
3786
  _visible$ = this.registerDisposable(new DelegatingValueModel());
4197
- initialiseCallback;
4198
3787
  constructor() {
4199
3788
  super();
4200
3789
  const { chain } = Dsl.disposeWith(this);
4201
3790
  this.popupComponentPortal$ = chain(this.popupType$).map(type => new ComponentPortal(type));
4202
3791
  }
4203
- configurePopupComponentType(popupComponentType, configureCallback) {
3792
+ configurePopupComponentType(popupComponentType) {
4204
3793
  this.popupType$.value = popupComponentType;
4205
- this.initialiseCallback = configureCallback;
4206
3794
  }
4207
3795
  // Stops tree selection when clicking the menu button
4208
3796
  preventDefault($event) {
@@ -4213,15 +3801,12 @@ class TableMoreMenuComponent extends DisposableComponent {
4213
3801
  const component = $event.instance;
4214
3802
  component.initialise(this.value$, Command.create(() => this.matMenuTrigger.closeMenu()));
4215
3803
  this._visible$.setDelegate(component.visible$);
4216
- if (this.initialiseCallback) {
4217
- this.initialiseCallback(component);
4218
- }
4219
3804
  }
4220
3805
  get visible$() {
4221
3806
  return this._visible$.readonly$;
4222
3807
  }
4223
3808
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableMoreMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4224
- 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"] }] });
4225
3810
  }
4226
3811
  __decorate([
4227
3812
  StoreInValueModel(),
@@ -4250,25 +3835,16 @@ class RowClass {
4250
3835
  this.matches = matches;
4251
3836
  }
4252
3837
  }
4253
- class RowAttribute {
4254
- attributeName;
4255
- getValue;
4256
- constructor(attributeName, getValue) {
4257
- this.attributeName = attributeName;
4258
- this.getValue = getValue;
4259
- }
4260
- }
4261
3838
  class AbstractTableModel extends GarbageCollector {
4262
3839
  _dataSource$ = this.registerDisposable(new DelegatingListModel());
4263
3840
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
4264
3841
  _visibleRows$ = this.registerDisposable(new DelegatingListModel());
4265
- columnManager = this.registerDisposable(new ColumnManager());
3842
+ _columnList = this.registerDisposable(new ColumnListModel());
4266
3843
  _editorSessions = new MutableListModel();
4267
3844
  _rowsBeingEdited$;
4268
3845
  saveCommandFactory;
4269
3846
  _editorSessionByRowId;
4270
3847
  rowClassNamePredicates = [];
4271
- rowAttributeGenerators = [];
4272
3848
  _columnTextPropertiesLookup;
4273
3849
  editing$;
4274
3850
  firstEditableColumn$;
@@ -4281,11 +3857,10 @@ class AbstractTableModel extends GarbageCollector {
4281
3857
  textSearchPredicate$;
4282
3858
  identityOf;
4283
3859
  dataSourceEmpty$;
3860
+ selectionModelProxy = proxify((SelectionModel));
4284
3861
  selectedItems$;
4285
3862
  leadSelection$;
4286
3863
  hasSelection$;
4287
- footerRowModel;
4288
- _viewDependencies = new Set();
4289
3864
  constructor() {
4290
3865
  super();
4291
3866
  const { chain } = Dsl.disposeWith(this);
@@ -4294,21 +3869,18 @@ class AbstractTableModel extends GarbageCollector {
4294
3869
  });
4295
3870
  this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
4296
3871
  this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
4297
- this.textSearchPredicate$ = chain(this.visibleColumns$).reduceAll(columns => {
3872
+ this.textSearchPredicate$ = chain(this.visibleColumns).reduce(columns => {
4298
3873
  return (row, regex) => {
4299
3874
  return (!regex || !!columns.find(c => regex.test(c.getSearchTextFor(row))));
4300
3875
  };
4301
3876
  });
4302
- this.selectionColumnModel = new SelectionColumnModel("selection-column", this.columnManager, () => this.getColumnTextProperties("selection-column"));
4303
- this.addColumn(this.selectionColumnModel, { before: null }); // first column
4304
- this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
4305
- this.firstEditableColumn$ = chain(this.columns$).select(c => c.hasEditorPortal()).first();
4306
- this.firstVisibleColumn$ = chain(this.visibleColumns$).first();
4307
- this.lastVisibleColumn$ = chain(this.visibleColumns$).last();
4308
- 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);
4309
3881
  this.dataSourceEmpty$ = chain(this.dataSource$).isEmpty();
4310
- this.selectedItems$ = this.selectionColumnModel.selectionModel.selectedItems$;
4311
- this.leadSelection$ = this.selectionColumnModel.selectionModel.leadSelection$;
3882
+ this.selectedItems$ = this.selectionModelProxy.selectedItems$;
3883
+ this.leadSelection$ = this.selectionModelProxy.leadSelection$;
4312
3884
  this.hasSelection$ = chain(this.selectedItems$).isNotEmpty();
4313
3885
  }
4314
3886
  setDataSource(dataSource$) {
@@ -4329,23 +3901,9 @@ class AbstractTableModel extends GarbageCollector {
4329
3901
  ],
4330
3902
  parent: injector
4331
3903
  });
4332
- this.columns$.value.forEach(c => c.initialise(customInjector));
3904
+ this.columns.value.forEach(c => c.initialise(customInjector));
4333
3905
  this.identityOf = identityOf;
4334
3906
  }
4335
- /**
4336
- * Adds additional models that will trigger a table repaint. This is required if the table
4337
- * needs to be redrawn outside of changes to the rows of filters. i.e. some eternal state is used
4338
- * to assign row classes etc.
4339
- *
4340
- * Note: This function must be called before the table is bound to the model.
4341
- * @param hasValues
4342
- */
4343
- viewStateDependsOn(...hasValues) {
4344
- hasValues.forEach(it => this._viewDependencies.add(it));
4345
- }
4346
- get viewStateDependencies() {
4347
- return Array.from(this._viewDependencies.values());
4348
- }
4349
3907
  get dataSource$() {
4350
3908
  return this._dataSource$.readonly$;
4351
3909
  }
@@ -4396,62 +3954,64 @@ class AbstractTableModel extends GarbageCollector {
4396
3954
  });
4397
3955
  });
4398
3956
  }
4399
- get columns$() {
4400
- return this.columnManager.allColumns$;
3957
+ get columns() {
3958
+ return this._columnList.allColumns$;
4401
3959
  }
4402
- get visibleColumns$() {
4403
- return this.columnManager.visibleColumns$;
3960
+ get visibleColumns() {
3961
+ return this._columnList.readonly$;
4404
3962
  }
4405
3963
  pluck(property, options) {
4406
3964
  const columnId = options?.columnId || property.toString();
4407
- return this.addColumn(new PropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
3965
+ return this.addColumn(new PropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
4408
3966
  }
4409
3967
  pluckList(property, options) {
4410
3968
  const columnId = options?.columnId || property.toString();
4411
- return this.addColumn(new ListPropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
4412
- }
4413
- useSelectionModel(selectionModel) {
3969
+ return this.addColumn(new ListPropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
3970
+ }
3971
+ // TODO: clean this up and assign the selection model on teh table directly.
3972
+ // tableModel.useSelectionModel(model) and have the seleciton column automatically
3973
+ // added. Need to look at how we're using the visibility controls as well.
3974
+ // Should also lazy create the selection column model if someone accesses it.
3975
+ _addSelectionColumn(selectionModel, visible) {
3976
+ assert.isNil(this.selectionColumnModel);
3977
+ const columnId = "selection-column";
3978
+ this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
4414
3979
  this.selectionColumnModel.useSelectionModel(selectionModel);
3980
+ this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
3981
+ const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
3982
+ if (!isNil$1(visible)) {
3983
+ selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
3984
+ }
3985
+ return selectionColumnModel;
4415
3986
  }
4416
3987
  addEditControls(saveCommandFactory, formFactory) {
4417
3988
  this.saveCommandFactory = saveCommandFactory;
4418
- if (isFunction(formFactory)) {
3989
+ if (isFunction$1(formFactory)) {
4419
3990
  this._createForm = formFactory;
4420
3991
  }
4421
3992
  const columnId = "editControls";
4422
- return this.addColumn(new EditorControlColumnModel(columnId, this.columnManager, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
3993
+ return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
4423
3994
  }
4424
3995
  addCustomColumn(columnId, dataAccessor) {
4425
- return this.addColumn(new CustomValueColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), dataAccessor));
3996
+ return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), dataAccessor));
4426
3997
  }
4427
3998
  addComponentColumn(columnId, component, onComponentInitOrOptions) {
4428
- 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);
4429
4000
  }
4430
- addMoreMenu(componentClass, initialiseCallback) {
4001
+ addMoreMenu(componentClass) {
4431
4002
  return this.addComponentColumn("more-menu", TableMoreMenuComponent, (component) => {
4432
- component.configurePopupComponentType(componentClass, initialiseCallback);
4003
+ component.configurePopupComponentType(componentClass);
4433
4004
  }).columnTextProperties({
4434
4005
  headerText() {
4435
4006
  return "";
4436
4007
  }
4437
4008
  });
4438
4009
  }
4439
- addFooterRow(component, initialiseCallback) {
4440
- assert.isNil(this.footerRowModel);
4441
- this.footerRowModel = new FooterRowModel.Impl(component, initialiseCallback);
4442
- return this.footerRowModel;
4443
- }
4444
4010
  addTemplateColumn(columnId) {
4445
- return this.addColumn(new CustomTemplateColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId)));
4011
+ return this.addColumn(new CustomTemplateColumnModel(columnId, () => this.getColumnTextProperties(columnId)));
4446
4012
  }
4447
- addRowClass(className, predicate, options) {
4013
+ addRowClass(className, predicate) {
4448
4014
  this.rowClassNamePredicates.push(new RowClass(className, predicate));
4449
- if (options) {
4450
- this.viewStateDependsOn(...DependsOnOptions.extract(options));
4451
- }
4452
- }
4453
- addRowAttribute(attributeName, getValue) {
4454
- this.rowAttributeGenerators.push(new RowAttribute(attributeName, getValue));
4455
4015
  }
4456
4016
  getRowClasses(row) {
4457
4017
  const classNames = [];
@@ -4462,13 +4022,8 @@ class AbstractTableModel extends GarbageCollector {
4462
4022
  });
4463
4023
  return classNames;
4464
4024
  }
4465
- getRowAttributes(row) {
4466
- return this.rowAttributeGenerators.reduce((result, generator) => {
4467
- return { ...result, [generator.attributeName]: generator.getValue(row) };
4468
- }, {});
4469
- }
4470
- addColumn(column, position) {
4471
- return this.columnManager.addColumn(column, position);
4025
+ addColumn(column, index) {
4026
+ return this._columnList.addColumn(column, index);
4472
4027
  }
4473
4028
  columnTextProperties(columnTextProperties) {
4474
4029
  this._columnTextPropertiesLookup = columnTextProperties;
@@ -4483,10 +4038,11 @@ class AbstractTableModel extends GarbageCollector {
4483
4038
  return this.hasUserSelectionModelThatIsEnabled() && !this.rowSelectionDisabledOnAllColumns$.value;
4484
4039
  }
4485
4040
  hasUserSelectionModelThatIsEnabled() {
4486
- return this.selectionColumnModel.selectionModel.enabled$.value;
4041
+ const userSelectionModel = this.selectionColumnModel?.selectionModel.getProxyTarget();
4042
+ return !!userSelectionModel && userSelectionModel.enabled$.value;
4487
4043
  }
4488
4044
  getSelectionModel() {
4489
- return this.selectionColumnModel.selectionModel;
4045
+ return this.selectionColumnModel?.selectionModel;
4490
4046
  }
4491
4047
  isHoverEnabled() {
4492
4048
  return this.isRowSelectionEnabled() || this.rowClickListeners.listenerCount > 0;
@@ -4528,15 +4084,15 @@ class TableCellComponent extends DisposableComponent {
4528
4084
  defaultClassNames = 'aup-cell-renderer';
4529
4085
  fillCell = false;
4530
4086
  padChild = false;
4087
+ firstEditableColumn;
4531
4088
  constructor() {
4532
4089
  super();
4533
4090
  this.editRowCommand = Command.create(() => {
4534
4091
  this.tableModel.startEditSession(this.row);
4535
4092
  });
4536
4093
  this.onInit(() => {
4537
- // This binding was triggering a memory leak... not sure why.
4538
- // const { chain} = Dsl.disposeWith(this);
4539
- // this.firstEditableColumn = chain(this.tableModel.firstEditableColumn$).equals(this.column); // this would break if the column changed.
4094
+ const { chain } = Dsl.disposeWith(this);
4095
+ this.firstEditableColumn = chain(this.tableModel.firstEditableColumn$).equals(this.column); // this would break if the column changed.
4540
4096
  this.column.attachCell(this);
4541
4097
  });
4542
4098
  }
@@ -4548,7 +4104,7 @@ class TableCellComponent extends DisposableComponent {
4548
4104
  }
4549
4105
  initialiseEditor(ref) {
4550
4106
  this.column.onEditorAttached(this, ref);
4551
- if (this.tableModel.firstEditableColumn$.value === this.column) {
4107
+ if (this.firstEditableColumn.value) {
4552
4108
  // @see https://github.com/angular/components/issues/12070
4553
4109
  setTimeout(() => this.tryAndFocusEditor(ref));
4554
4110
  }
@@ -4584,7 +4140,7 @@ class TableCellComponent extends DisposableComponent {
4584
4140
  };
4585
4141
  }
4586
4142
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4587
- 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"] }] });
4588
4144
  }
4589
4145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableCellComponent, decorators: [{
4590
4146
  type: Component,
@@ -4623,7 +4179,7 @@ class TableHeaderCellComponent {
4623
4179
  return this[HEADER_CELL_RENDERER_PORTAL];
4624
4180
  }
4625
4181
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4626
- 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"] }] });
4627
4183
  }
4628
4184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableHeaderCellComponent, decorators: [{
4629
4185
  type: Component,
@@ -4635,132 +4191,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
4635
4191
  args: ['class']
4636
4192
  }] } });
4637
4193
 
4638
- // eslint-disable-next-line @angular-eslint/component-class-suffix
4639
- class TableFooterRow {
4640
- row;
4641
- defaultClassNames = 'aup-footer-row-renderer';
4642
- get rowClasses() {
4643
- return this.row.getActiveRowClasses();
4644
- }
4645
- initialise($event) {
4646
- this.row.onInit && this.row.onInit($event.instance);
4647
- }
4648
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableFooterRow, deps: [], target: i0.ɵɵFactoryTarget.Component });
4649
- 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"] }] });
4650
- }
4651
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableFooterRow, decorators: [{
4652
- type: Component,
4653
- 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"] }]
4654
- }], propDecorators: { row: [{
4655
- type: Input
4656
- }], defaultClassNames: [{
4657
- type: HostBinding,
4658
- args: ['class']
4659
- }], rowClasses: [{
4660
- type: HostBinding,
4661
- args: ['class']
4662
- }] } });
4663
-
4664
- const AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER = new InjectionToken("AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER");
4665
- class TableRowAttributesDirective {
4666
- elementRef;
4667
- aupTableRowAttributes;
4668
- constructor(elementRef) {
4669
- this.elementRef = elementRef;
4670
- }
4671
- ngOnInit() {
4672
- for (const attr in this.aupTableRowAttributes) {
4673
- this.elementRef.nativeElement.setAttribute(attr, this.aupTableRowAttributes[attr]);
4674
- }
4675
- }
4676
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
4677
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: TableRowAttributesDirective, selector: "[aupTableRowAttributes]", inputs: { aupTableRowAttributes: "aupTableRowAttributes" }, ngImport: i0 });
4678
- }
4679
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, decorators: [{
4680
- type: Directive,
4681
- args: [{
4682
- selector: "[aupTableRowAttributes]",
4683
- }]
4684
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { aupTableRowAttributes: [{
4685
- type: Input
4686
- }] } });
4687
4194
  class TableBodyComponent extends ResizeAwareComponent {
4688
- bufferMultiplier;
4689
4195
  #data$_accessor_storage = proxify((ListModel));
4690
4196
  get data$() { return this.#data$_accessor_storage; }
4691
4197
  set data$(value) { this.#data$_accessor_storage = value; }
4692
4198
  #tableModel_accessor_storage = proxify((AbstractTableModel));
4693
4199
  get tableModel() { return this.#tableModel_accessor_storage; }
4694
4200
  set tableModel(value) { this.#tableModel_accessor_storage = value; }
4695
- #footerRow_accessor_storage = proxify((FooterRowModel.Impl));
4696
- get footerRow() { return this.#footerRow_accessor_storage; }
4697
- set footerRow(value) { this.#footerRow_accessor_storage = value; }
4698
4201
  #showHeader$_accessor_storage = proxify((ValueModel));
4699
4202
  get showHeader$() { return this.#showHeader$_accessor_storage; }
4700
4203
  set showHeader$(value) { this.#showHeader$_accessor_storage = value; }
4701
4204
  #showHeader_accessor_storage = true;
4702
4205
  get showHeader() { return this.#showHeader_accessor_storage; }
4703
4206
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
4207
+ visibleRowCount = new EventEmitter();
4704
4208
  trackBy;
4705
- #scrollMode$_accessor_storage = proxify((ValueModel));
4706
- get scrollMode$() { return this.#scrollMode$_accessor_storage; }
4707
- set scrollMode$(value) { this.#scrollMode$_accessor_storage = value; }
4708
- #scrollMode_accessor_storage = "none";
4709
- get scrollMode() { return this.#scrollMode_accessor_storage; }
4710
- set scrollMode(value) { this.#scrollMode_accessor_storage = value; }
4711
- 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;
4712
4215
  columns$;
4713
4216
  columnIds$;
4714
4217
  columnsById$;
4218
+ _visibleRowCount$;
4715
4219
  // TODO: support user defined header and row heights via css vars.
4716
- headerHeight$ = new MutableValueModel(48);
4717
- rowHeight$ = new MutableValueModel(44);
4220
+ headerHeight$ = new MutableValueModel(29);
4221
+ rowHeight$ = new MutableValueModel(40);
4718
4222
  baseCssClass = "aup-table-component";
4719
- virtualScrollDataSource = new TableVirtualScrollDataSource();
4720
- virtualScrollActive$ = new MutableValueModel(false);
4721
- scrollTimeout;
4722
- constructor(bufferMultiplier = 1) {
4723
- super();
4724
- this.bufferMultiplier = bufferMultiplier;
4725
- const { chain, when, observe } = Dsl.disposeWith(this);
4223
+ constructor(elementRef, ngZone) {
4224
+ super(elementRef, ngZone);
4225
+ const { chain, when } = Dsl.disposeWith(this);
4726
4226
  const actualHeaderHeight$ = chain(this.showHeader$).map(show => {
4727
4227
  return show ? this.headerHeight$.value : 0;
4728
4228
  }, { dependsOn: this.headerHeight$ });
4729
- // performance is terrible if the data changes while we're scrolling, so we postpone updates until
4730
- // scrolling stops.
4731
- const delayedDatea$ = chain(this.data$).postponeWhile(this.virtualScrollActive$);
4732
- when(delayedDatea$).changes(delatedData => {
4733
- this.virtualScrollDataSource.data = delatedData;
4734
- this.scheduleTableHeightCheck();
4735
- }, { 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" });
4736
4240
  this.onInit(() => {
4737
- this.columns$ = chain(this.tableModel.visibleColumns$);
4241
+ this.columns$ = chain(this.tableModel.columns);
4738
4242
  this.columnIds$ = chain(this.columns$).pluck("columnId");
4739
4243
  this.columnsById$ = chain(this.columns$).indexBy('columnId');
4740
4244
  });
4741
- // const txo = new TransactionObserver({verbose: false}).onEvent(e => console.log(e.name, e.payload));
4742
- // txo.observe('this.virtualScrollRowRange$', this.virtualScrollRowRange$);
4743
- // txo.observe('this.virtualScrollSpacerSize$', this.virtualScrollSpacerSize$);
4744
- // txo.observe('this.virtualRows$', this.virtualRows$);
4745
- // txo.observe('this.tableBodyHeight$', this.tableBodyHeight$);
4746
- // txo.observe('this.virtualScrollActive$', this.virtualScrollActive$);
4747
- }
4748
- ngAfterViewInit() {
4749
- super.ngAfterViewInit();
4750
- if (this.scrollViewport) {
4751
- const { observe } = Dsl.disposeWith(this);
4752
- this.scrollViewport.elementScrolled().subscribe(() => this.notifyScrolled());
4753
- }
4754
4245
  }
4755
4246
  get hideHeader() {
4756
4247
  return !this.showHeader;
4757
4248
  }
4758
- get headerHeightCssVar() {
4759
- return `${this.headerHeight$.value}px`;
4760
- }
4761
- get rowHeightCssVar() {
4762
- return `${this.rowHeight$.value}px`;
4763
- }
4764
4249
  isEditing(row) {
4765
4250
  return !!this.tableModel.getEditSessionFor(row);
4766
4251
  }
@@ -4785,110 +4270,51 @@ class TableBodyComponent extends ResizeAwareComponent {
4785
4270
  }
4786
4271
  return classes;
4787
4272
  }
4788
- scheduleTableHeightCheck(waitMillis = 50) {
4789
- setTimeout(() => {
4790
- const tbody = this.elementRef.nativeElement.querySelector("tbody");
4791
- const bodyHeight = tbody.offsetHeight;
4792
- if (this.data$.length > 0 && bodyHeight < this.rowHeight$.value) {
4793
- // Hacks to get our virtual scroll to repaint
4794
- // Logger.get(this).log(`rowCount=${this.data$.length}, bodyHeight=${bodyHeight} -> virtual table not rendering, triggering resize to force repaint`)
4795
- window.dispatchEvent(new Event('resize'));
4796
- if (waitMillis < 500) {
4797
- this.scheduleTableHeightCheck(waitMillis + 50);
4798
- }
4799
- }
4800
- }, waitMillis);
4801
- }
4802
- notifyScrolled() {
4803
- this.virtualScrollActive$.value = true;
4804
- this.clearScrollTimeout();
4805
- this.scrollTimeout = setTimeout(() => {
4806
- return this.virtualScrollActive$.value = false;
4807
- }, 200);
4808
- }
4809
- clearScrollTimeout() {
4810
- if (this.scrollTimeout) {
4811
- clearTimeout(this.scrollTimeout);
4812
- }
4813
- }
4814
- initialiseFooter($event) {
4815
- const portalRef = $event;
4816
- this.footerRow.onInit(portalRef.instance);
4817
- }
4818
- Proxify = Proxify;
4819
- 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 });
4820
- 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"] }] });
4821
4275
  }
4822
4276
  __decorate([
4823
4277
  Proxify(),
4824
- __metadata("design:type", ListModel)
4278
+ __metadata("design:type", Object)
4825
4279
  ], TableBodyComponent.prototype, "data$", null);
4826
4280
  __decorate([
4827
4281
  Proxify(),
4828
- __metadata("design:type", AbstractTableModel)
4282
+ __metadata("design:type", Object)
4829
4283
  ], TableBodyComponent.prototype, "tableModel", null);
4830
4284
  __decorate([
4831
4285
  Proxify(),
4832
- __metadata("design:type", FooterRowModel.Impl)
4833
- ], TableBodyComponent.prototype, "footerRow", null);
4834
- __decorate([
4835
- Proxify(),
4836
- __metadata("design:type", ValueModel)
4286
+ __metadata("design:type", Object)
4837
4287
  ], TableBodyComponent.prototype, "showHeader$", null);
4838
4288
  __decorate([
4839
4289
  StoreInValueModel(),
4840
4290
  __metadata("design:type", Object)
4841
4291
  ], TableBodyComponent.prototype, "showHeader", null);
4842
- __decorate([
4843
- Proxify(),
4844
- __metadata("design:type", ValueModel)
4845
- ], TableBodyComponent.prototype, "scrollMode$", null);
4846
- __decorate([
4847
- StoreInValueModel(),
4848
- __metadata("design:type", String)
4849
- ], TableBodyComponent.prototype, "scrollMode", null);
4850
4292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, decorators: [{
4851
4293
  type: Component,
4852
- 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"] }]
4853
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
4854
- type: Inject,
4855
- args: [AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER]
4856
- }, {
4857
- type: Optional
4858
- }] }]; }, 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$: [{
4859
4296
  type: Input
4860
4297
  }], tableModel: [{
4861
4298
  type: Input
4862
- }], footerRow: [{
4863
- type: Input
4864
4299
  }], showHeader$: [{
4865
4300
  type: Input
4866
4301
  }], showHeader: [{
4867
4302
  type: Input
4303
+ }], visibleRowCount: [{
4304
+ type: Output
4868
4305
  }], trackBy: [{
4869
4306
  type: Input
4870
- }], scrollMode$: [{
4871
- type: Input
4872
- }], scrollMode: [{
4307
+ }], enableScrolling: [{
4873
4308
  type: Input
4874
4309
  }, {
4875
4310
  type: HostBinding,
4876
- args: ["attr.scrollMode"]
4877
- }], scrollViewport: [{
4878
- type: ViewChild,
4879
- args: [CdkVirtualScrollViewport]
4311
+ args: ["class.enable-scrolling"]
4880
4312
  }], baseCssClass: [{
4881
4313
  type: HostBinding,
4882
4314
  args: ["class"]
4883
4315
  }], hideHeader: [{
4884
4316
  type: HostBinding,
4885
4317
  args: ["class.hide-header"]
4886
- }], headerHeightCssVar: [{
4887
- type: HostBinding,
4888
- args: ["style.--aup-table-header-height"]
4889
- }], rowHeightCssVar: [{
4890
- type: HostBinding,
4891
- args: ["style.--aup-table-row-height"]
4892
4318
  }] } });
4893
4319
 
4894
4320
  class TableMoreMenuPopupComponent extends DisposableComponent {
@@ -5009,10 +4435,8 @@ class TableFilterModel extends GarbageCollector {
5009
4435
  this.useSearchText(options.searchText$);
5010
4436
  this.useRowPredicate(options.predicate$);
5011
4437
  const { chain } = Dsl.disposeWith(this);
5012
- const textSearchRegex$ = chain(this._searchText$)
5013
- .debounce(250)
5014
- .map(text => {
5015
- 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");
5016
4440
  }, { allowNil: true });
5017
4441
  this._rowPredicate = chain(this._rowPredicate$)
5018
4442
  .map(predicate => {
@@ -5148,16 +4572,8 @@ class TableModel extends AbstractTableModel {
5148
4572
  this._filteredRows$.setDelegate(filteredRows$);
5149
4573
  this._visibleRows$.setDelegate(visibleRows$);
5150
4574
  }
5151
- get isUsingTemporarySelectionModel$() {
5152
- return this.selectionColumnModel.isUsingTemporarySelectionModel$;
5153
- }
5154
- async withTemporaryMultipleSelectionModel(process) {
5155
- return this.selectionColumnModel.withTemporarySelectionModel(garbage => {
5156
- return new MultipleSelectionModel(this.filteredRows$, {
5157
- identifiedWith: this.dataSource$.identityOf,
5158
- disposedWith: garbage
5159
- });
5160
- }, process);
4575
+ addSelectionColumn(selectionModel, showSelectionColumn) {
4576
+ return this._addSelectionColumn(selectionModel, showSelectionColumn);
5161
4577
  }
5162
4578
  }
5163
4579
 
@@ -5228,30 +4644,31 @@ class TableComponent extends AbstractTableComponent {
5228
4644
  #filterModel_accessor_storage = proxify((TableFilterModel));
5229
4645
  get filterModel() { return this.#filterModel_accessor_storage; }
5230
4646
  set filterModel(value) { this.#filterModel_accessor_storage = value; }
5231
- tableBody;
5232
- #scrollMode$_accessor_storage = proxify((ValueModel));
5233
- /**
5234
- * 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
5235
- * renders all rows but allows row heights to grow.
5236
- */
5237
- get scrollMode$() { return this.#scrollMode$_accessor_storage; }
5238
- set scrollMode$(value) { this.#scrollMode$_accessor_storage = value; }
5239
- #scrollMode_accessor_storage;
5240
- get scrollMode() { return this.#scrollMode_accessor_storage; }
5241
- 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
+ // }
5242
4660
  _footerContentAdded = false;
5243
4661
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
5244
- tableBodyScrollMode$;
4662
+ _pageSize = new MutableValueModel();
4663
+ pagedListModel;
5245
4664
  constructor(injector) {
5246
4665
  super(injector);
5247
- const { chain, when } = Dsl.disposeWith(this);
5248
- this.tableBodyScrollMode$ = chain(this.enableScrolling$).map(enable => {
5249
- return enable ? (this.scrollMode$.value ?? "virtual") : 'none';
5250
- }, { dependsOn: this.scrollMode$ });
4666
+ const { when } = Dsl.disposeWith(this);
4667
+ this.onDispose(() => this.disposeOfPagedListModel());
4668
+ when(this.enablePaging$).changes(enabled => this.configurePaging(enabled));
5251
4669
  }
5252
4670
  ngOnInit() {
5253
4671
  super.ngOnInit();
5254
- const { when } = Dsl.disposeWith(this);
5255
4672
  if (CanProxy.hasTarget(this.filterModel)) {
5256
4673
  this.registerDisposable(this.filterModel.bindToTable(this._dataSource$, this.getModel().textSearchPredicate$));
5257
4674
  this.highlightText$.setDelegate(this.filterModel.highlightText$);
@@ -5260,27 +4677,50 @@ class TableComponent extends AbstractTableComponent {
5260
4677
  else {
5261
4678
  this._filteredRows$.setDelegate(this._dataSource$);
5262
4679
  }
5263
- this._visibleRows$.setDelegate(this._filteredRows$);
5264
- // 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);
5265
4681
  this.tableModel.bindToTable(this._filteredRows$, this._visibleRows$);
5266
- when.anyOf(...this.tableModel.viewStateDependencies).changes(() => this.cdr.markForCheck());
5267
- this.viewStateDependsOn(this._filteredRows$, this.tableModel.visibleColumns$);
5268
4682
  }
5269
4683
  getModel() {
5270
4684
  return this.tableModel;
5271
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
+ }
5272
4708
  footerContentChanged($event) {
5273
4709
  // console.log($event);
5274
4710
  this._footerContentAdded = true;
5275
4711
  }
4712
+ //@Trace()
4713
+ updatePageSize(count) {
4714
+ this._pageSize.value = count;
4715
+ }
5276
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 });
5277
- 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: [
5278
4718
  { provide: AbstractTableComponent, useExisting: TableComponent }
5279
- ], 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"] }] });
5280
4720
  }
5281
4721
  __decorate([
5282
4722
  Proxify(),
5283
- __metadata("design:type", TableModel)
4723
+ __metadata("design:type", Object)
5284
4724
  ], TableComponent.prototype, "tableModel", null);
5285
4725
  __decorate([
5286
4726
  Proxify(),
@@ -5288,27 +4728,24 @@ __decorate([
5288
4728
  ], TableComponent.prototype, "filterModel", null);
5289
4729
  __decorate([
5290
4730
  Proxify(),
5291
- __metadata("design:type", ValueModel)
5292
- ], TableComponent.prototype, "scrollMode$", null);
4731
+ __metadata("design:type", Object)
4732
+ ], TableComponent.prototype, "enablePaging$", null);
5293
4733
  __decorate([
5294
4734
  StoreInValueModel(),
5295
4735
  __metadata("design:type", Object)
5296
- ], TableComponent.prototype, "scrollMode", null);
4736
+ ], TableComponent.prototype, "enablePaging", null);
5297
4737
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableComponent, decorators: [{
5298
4738
  type: Component,
5299
4739
  args: [{ selector: 'aup-table', providers: [
5300
4740
  { provide: AbstractTableComponent, useExisting: TableComponent }
5301
- ], 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"] }]
5302
4742
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { tableModel: [{
5303
4743
  type: Input
5304
4744
  }], filterModel: [{
5305
4745
  type: Input
5306
- }], tableBody: [{
5307
- type: ViewChild,
5308
- args: [TableBodyComponent]
5309
- }], scrollMode$: [{
4746
+ }], enablePaging$: [{
5310
4747
  type: Input
5311
- }], scrollMode: [{
4748
+ }], enablePaging: [{
5312
4749
  type: Input
5313
4750
  }] } });
5314
4751
 
@@ -5490,7 +4927,7 @@ var DecoratedTreeNode;
5490
4927
  }
5491
4928
  }
5492
4929
  __decorate([
5493
- MemoizeGet(),
4930
+ Memoize(),
5494
4931
  __metadata("design:type", Array),
5495
4932
  __metadata("design:paramtypes", [])
5496
4933
  ], Decorator.prototype, "children", null);
@@ -5543,7 +4980,7 @@ var DecoratedTreeNode;
5543
4980
  __metadata("design:returntype", Array)
5544
4981
  ], Decorator.prototype, "ancestors", null);
5545
4982
  __decorate([
5546
- MemoizeGet(),
4983
+ Memoize(),
5547
4984
  __metadata("design:type", Number),
5548
4985
  __metadata("design:paramtypes", [])
5549
4986
  ], Decorator.prototype, "depth", null);
@@ -5554,8 +4991,8 @@ class TreeLabelColumnModel extends ColumnModel {
5554
4991
  expansionModel;
5555
4992
  labelFactory = () => undefined;
5556
4993
  iconFactory;
5557
- constructor(columnId, order, textPropertiesProvider, expansionModel) {
5558
- super(columnId, order, textPropertiesProvider);
4994
+ constructor(columnId, textPropertiesProvider, expansionModel) {
4995
+ super(columnId, textPropertiesProvider);
5559
4996
  this.expansionModel = expansionModel;
5560
4997
  this.cellRenderer(TreeLabelCellRendererComponent);
5561
4998
  }
@@ -5614,7 +5051,7 @@ class TreeTableModel extends AbstractTableModel {
5614
5051
  get isExpandedPredicate$() {
5615
5052
  return this._isExpandedPredicate$.readonly$;
5616
5053
  }
5617
- bindToTable(expansionModel, filteredRows$, visibleRows$, cdr) {
5054
+ bindToTable(expansionModel, filteredRows$, visibleRows$) {
5618
5055
  this.treeExpansionModel = expansionModel;
5619
5056
  // TODO: Move all the expansion model stuff out of here and have things use the expansion model directly
5620
5057
  this._isExpandedPredicate$.setDelegate(this.treeExpansionModel.isExpandedPredicate$);
@@ -5623,7 +5060,7 @@ class TreeTableModel extends AbstractTableModel {
5623
5060
  }
5624
5061
  treeControlColumn(builder) {
5625
5062
  const columnId = 'tree-label';
5626
- const column = new TreeLabelColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), this);
5063
+ const column = new TreeLabelColumnModel(columnId, () => this.getColumnTextProperties(columnId), this);
5627
5064
  builder(column);
5628
5065
  this.addColumn(column);
5629
5066
  }
@@ -5642,6 +5079,9 @@ class TreeTableModel extends AbstractTableModel {
5642
5079
  isExpanded(row) {
5643
5080
  return this.treeExpansionModel.isExpanded(row);
5644
5081
  }
5082
+ addSelectionColumn(selectionModel, showSelectionColumn) {
5083
+ return this._addSelectionColumn(selectionModel, showSelectionColumn);
5084
+ }
5645
5085
  }
5646
5086
  // export class FlattenStrategy<T extends VisitableTree<any>> extends SelfAndDescendantsVisitor<T> {
5647
5087
  //
@@ -5946,15 +5386,11 @@ class TreeTableComponent extends AbstractTableComponent {
5946
5386
  #expansionModel_accessor_storage = proxify((TreeExpansionModel));
5947
5387
  get expansionModel() { return this.#expansionModel_accessor_storage; }
5948
5388
  set expansionModel(value) { this.#expansionModel_accessor_storage = value; }
5949
- scrollMode$;
5950
5389
  constructor(injector) {
5951
5390
  super(injector);
5952
- const { chain } = Dsl.disposeWith(this);
5953
- this.scrollMode$ = chain(this.enableScrolling$).map(enabled => enabled ? "classic" : "none");
5954
5391
  }
5955
5392
  ngOnInit() {
5956
5393
  super.ngOnInit();
5957
- const { when } = Dsl.disposeWith(this);
5958
5394
  // TODO: clean up all this tightly coupled shit, should the expansion model really be separate from the tree model?
5959
5395
  if (!this.expansionModel) {
5960
5396
  this.expansionModel = new TreeExpansionModel({ disposedWith: this });
@@ -5963,10 +5399,7 @@ class TreeTableComponent extends AbstractTableComponent {
5963
5399
  const visibleRows$ = new FlattenedTreeListModel(this._dataSource$, row => this.treeTableModel.childExtractor(row), this.expansionModel);
5964
5400
  this._visibleRows$.setDelegate(visibleRows$);
5965
5401
  this.expansionModel.bindToTable(this._dataSource$, visibleRows$);
5966
- this.treeTableModel.bindToTable(this.expansionModel, visibleRows$, this._visibleRows$, this.cdr);
5967
- this.viewStateDependsOn(this.treeTableModel.visibleRows$);
5968
- this.viewStateDependsOn(this.treeTableModel.visibleRows$);
5969
- when.anyOf(...this.treeTableModel.viewStateDependencies).changes(() => this.cdr.markForCheck());
5402
+ this.treeTableModel.bindToTable(this.expansionModel, visibleRows$, this._visibleRows$);
5970
5403
  }
5971
5404
  getModel() {
5972
5405
  return this.treeTableModel;
@@ -5974,7 +5407,7 @@ class TreeTableComponent extends AbstractTableComponent {
5974
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 });
5975
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: [
5976
5409
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
5977
- ], 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"] }] });
5978
5411
  }
5979
5412
  __decorate([
5980
5413
  Proxify(),
@@ -5988,7 +5421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
5988
5421
  type: Component,
5989
5422
  args: [{ selector: 'aup-tree-table', providers: [
5990
5423
  { provide: AbstractTableComponent, useExisting: TreeTableComponent }
5991
- ], 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"] }]
5992
5425
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { treeTableModel: [{
5993
5426
  type: Input
5994
5427
  }], expansionModel: [{
@@ -6170,7 +5603,6 @@ class ComponentsModule {
6170
5603
  FocusableComponent,
6171
5604
  CardContainerComponent,
6172
5605
  TableComponent,
6173
- TableRowAttributesDirective,
6174
5606
  EditRowControlsComponent,
6175
5607
  ColumnTemplateDirective,
6176
5608
  DefaultCellRendererComponent,
@@ -6204,9 +5636,7 @@ class ComponentsModule {
6204
5636
  MarkdownComponent,
6205
5637
  TableBodyComponent,
6206
5638
  TableMoreMenuComponent,
6207
- TableMoreMenuPopupComponent,
6208
- SearchInputComponent,
6209
- TableFooterRow], imports: [CommonModule,
5639
+ TableMoreMenuPopupComponent], imports: [CommonModule,
6210
5640
  BrowserAnimationsModule,
6211
5641
  FormsModule,
6212
5642
  MatInputModule,
@@ -6225,10 +5655,7 @@ class ComponentsModule {
6225
5655
  MatMenuModule,
6226
5656
  MatDividerModule,
6227
5657
  MatProgressSpinnerModule,
6228
- MatProgressBarModule,
6229
- ScrollingModule,
6230
- TableVirtualScrollModule], exports: [TableFooterRow,
6231
- NumberInputComponent,
5658
+ MatProgressBarModule], exports: [NumberInputComponent,
6232
5659
  StringInputComponent,
6233
5660
  TextInputComponent,
6234
5661
  PasswordInputComponent,
@@ -6266,8 +5693,7 @@ class ComponentsModule {
6266
5693
  LoadingContainerComponent,
6267
5694
  MarkdownComponent,
6268
5695
  TableMoreMenuComponent,
6269
- TableMoreMenuPopupComponent,
6270
- SearchInputComponent] });
5696
+ TableMoreMenuPopupComponent] });
6271
5697
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ComponentsModule, providers: [
6272
5698
  FocusBindingFactory,
6273
5699
  MarkdownService
@@ -6290,9 +5716,7 @@ class ComponentsModule {
6290
5716
  MatMenuModule,
6291
5717
  MatDividerModule,
6292
5718
  MatProgressSpinnerModule,
6293
- MatProgressBarModule,
6294
- ScrollingModule,
6295
- TableVirtualScrollModule] });
5719
+ MatProgressBarModule] });
6296
5720
  }
6297
5721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ComponentsModule, decorators: [{
6298
5722
  type: NgModule,
@@ -6317,9 +5741,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6317
5741
  MatMenuModule,
6318
5742
  MatDividerModule,
6319
5743
  MatProgressSpinnerModule,
6320
- MatProgressBarModule,
6321
- ScrollingModule,
6322
- TableVirtualScrollModule
5744
+ MatProgressBarModule
6323
5745
  ],
6324
5746
  declarations: [
6325
5747
  AbstractInputComponent,
@@ -6343,7 +5765,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6343
5765
  FocusableComponent,
6344
5766
  CardContainerComponent,
6345
5767
  TableComponent,
6346
- TableRowAttributesDirective,
6347
5768
  EditRowControlsComponent,
6348
5769
  ColumnTemplateDirective,
6349
5770
  DefaultCellRendererComponent,
@@ -6378,11 +5799,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6378
5799
  TableBodyComponent,
6379
5800
  TableMoreMenuComponent,
6380
5801
  TableMoreMenuPopupComponent,
6381
- SearchInputComponent,
6382
- TableFooterRow
6383
5802
  ],
6384
5803
  exports: [
6385
- TableFooterRow,
6386
5804
  NumberInputComponent,
6387
5805
  StringInputComponent,
6388
5806
  TextInputComponent,
@@ -6422,7 +5840,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6422
5840
  MarkdownComponent,
6423
5841
  TableMoreMenuComponent,
6424
5842
  TableMoreMenuPopupComponent,
6425
- SearchInputComponent
6426
5843
  ],
6427
5844
  providers: [
6428
5845
  FocusBindingFactory,
@@ -6431,73 +5848,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6431
5848
  }]
6432
5849
  }] });
6433
5850
 
6434
- class LoadableComponent extends DisposableComponent {
6435
- #_loaded$ = new MutableValueModel();
6436
- #asyncLoadables = [];
6437
- #awaitedLoadables = [];
6438
- get loaded$() {
6439
- return this.#_loaded$.readonly$;
6440
- }
6441
- ngOnInit() {
6442
- super.ngOnInit();
6443
- this.#asyncLoadables.forEach(it => it.ensureLoaded());
6444
- if (this.#awaitedLoadables.length > 0) {
6445
- Promise.all(this.#awaitedLoadables.map(it => {
6446
- return it.ensureLoaded(); //.then(() => console.log(`${it.constructor.name} loaded`));
6447
- })).then(() => {
6448
- this.#_loaded$.value = true;
6449
- });
6450
- }
6451
- else {
6452
- this.#_loaded$.value = true;
6453
- }
6454
- }
6455
- injectLoadable(token, options) {
6456
- return this.registerLoadable(inject(token, options), options);
6457
- }
6458
- registerLoadable(loadable, options) {
6459
- if (this.loaded$.value) {
6460
- loadable.ensureLoaded();
6461
- }
6462
- else {
6463
- if (!options || options.wait === true) {
6464
- this.#awaitedLoadables.push(loadable);
6465
- }
6466
- else {
6467
- this.#asyncLoadables.push(loadable);
6468
- }
6469
- }
6470
- return loadable;
6471
- }
6472
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: LoadableComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
6473
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: LoadableComponent, usesInheritance: true, ngImport: i0 });
6474
- }
6475
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: LoadableComponent, decorators: [{
6476
- type: Directive
6477
- }] });
6478
-
6479
- class TextSearchContext {
6480
- row;
6481
- searchText;
6482
- searchRegex;
6483
- constructor(row, searchText, searchRegex) {
6484
- this.row = row;
6485
- this.searchText = searchText;
6486
- this.searchRegex = searchRegex;
6487
- }
6488
- getOrCreate(type, create) {
6489
- }
6490
- matchesText(text) {
6491
- return this.searchRegex.test(text);
6492
- }
6493
- }
6494
-
6495
- class AbstractCellRenderer extends LoadableComponent {
6496
- constructor() {
6497
- super();
6498
- }
6499
- }
6500
-
6501
5851
  /**
6502
5852
  * @file Automatically generated by barrelsby.
6503
5853
  */
@@ -6524,6 +5874,7 @@ class AbstractCellRenderer extends LoadableComponent {
6524
5874
  * </aup-activity-actions>
6525
5875
  */
6526
5876
  class ActivityActionsComponent extends DisposableComponent {
5877
+ cdr;
6527
5878
  confirmCommandComponent;
6528
5879
  cancelCommandComponent;
6529
5880
  #confirmCommand_accessor_storage = proxify((Command));
@@ -6552,9 +5903,9 @@ class ActivityActionsComponent extends DisposableComponent {
6552
5903
  }
6553
5904
  layout = ActivityActionsComponent.Layout.BLOCK;
6554
5905
  align = ActivityActionsComponent.Align.STRETCH;
6555
- alignContent = ActivityActionsComponent.AlignContent.CENTER;
6556
- constructor() {
5906
+ constructor(cdr) {
6557
5907
  super();
5908
+ this.cdr = cdr;
6558
5909
  }
6559
5910
  hasConfirmFace() {
6560
5911
  return !!this.confirmFace;
@@ -6573,8 +5924,8 @@ class ActivityActionsComponent extends DisposableComponent {
6573
5924
  focusCancel() {
6574
5925
  this.cancelCommandComponent.requestFocus();
6575
5926
  }
6576
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6577
- 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"] }] });
6578
5929
  }
6579
5930
  __decorate([
6580
5931
  Proxify(),
@@ -6586,8 +5937,8 @@ __decorate([
6586
5937
  ], ActivityActionsComponent.prototype, "cancelCommand", null);
6587
5938
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityActionsComponent, decorators: [{
6588
5939
  type: Component,
6589
- 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"] }]
6590
- }], 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: [{
6591
5942
  type: ViewChild,
6592
5943
  args: ["confirmCommandComponent"]
6593
5944
  }], cancelCommandComponent: [{
@@ -6615,11 +5966,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6615
5966
  }, {
6616
5967
  type: HostBinding,
6617
5968
  args: ['attr.align']
6618
- }], alignContent: [{
6619
- type: Input
6620
- }, {
6621
- type: HostBinding,
6622
- args: ['attr.align-content']
6623
5969
  }] } });
6624
5970
  (function (ActivityActionsComponent) {
6625
5971
  ActivityActionsComponent.Layout = Enum({
@@ -6628,19 +5974,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6628
5974
  });
6629
5975
  ActivityActionsComponent.Align = Enum({
6630
5976
  START: 'start',
6631
- STRETCH: 'stretch',
6632
- END: 'end'
6633
- });
6634
- ActivityActionsComponent.AlignContent = Enum({
6635
- START: 'start',
6636
- CENTER: 'center',
6637
- END: 'end'
5977
+ END: 'end',
5978
+ STRETCH: 'stretch'
6638
5979
  });
6639
5980
  })(ActivityActionsComponent || (ActivityActionsComponent = {}));
6640
5981
 
6641
5982
  const ACTIVITY_DATA = new InjectionToken("InteractionActivityData");
6642
5983
  // eslint-disable-next-line @angular-eslint/component-class-suffix
6643
- class Activity extends LoadableComponent {
5984
+ class Activity extends DisposableComponent {
6644
5985
  activityData = inject(ACTIVITY_DATA);
6645
5986
  activityReadyListeners = new EventListenerList();
6646
5987
  _busy$ = this.registerDisposable(new DelegatingValueModel().withDefault(false));
@@ -6695,6 +6036,7 @@ class Activity extends LoadableComponent {
6695
6036
  notifyActivityReady() {
6696
6037
  this.activityReadyListeners.fire(l => l(this));
6697
6038
  this._ready$.value = true;
6039
+ console.log("ready");
6698
6040
  }
6699
6041
  onActivityReady(callback) {
6700
6042
  return this.activityReadyListeners.add(callback);
@@ -6814,7 +6156,7 @@ class AbstractDialogComponent extends Activity {
6814
6156
  }
6815
6157
  }
6816
6158
  isDestructive() {
6817
- return isFunction(this.config['destructive']) && this.config["destructive"]();
6159
+ return isFunction$1(this.config['destructive']) && this.config["destructive"]();
6818
6160
  }
6819
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 });
6820
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 });
@@ -6831,7 +6173,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6831
6173
 
6832
6174
  class AbstractConfirmDialogComponent extends AbstractDialogComponent {
6833
6175
  cancelFace;
6834
- confirmClass = "aup-confirm-activity";
6835
6176
  constructor(config) {
6836
6177
  super(config);
6837
6178
  this.cancelFace = {
@@ -6842,7 +6183,7 @@ class AbstractConfirmDialogComponent extends AbstractDialogComponent {
6842
6183
  });
6843
6184
  }
6844
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 });
6845
- 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 });
6846
6187
  }
6847
6188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractConfirmDialogComponent, decorators: [{
6848
6189
  type: Component,
@@ -6852,10 +6193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
6852
6193
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
6853
6194
  type: Inject,
6854
6195
  args: [ALERT_CONFIG]
6855
- }] }]; }, propDecorators: { confirmClass: [{
6856
- type: HostBinding,
6857
- args: ["class"]
6858
- }] } });
6196
+ }] }]; } });
6859
6197
 
6860
6198
  class ActivityBodyComponent extends DisposableComponent {
6861
6199
  fullWidth = false;
@@ -7394,7 +6732,7 @@ const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
7394
6732
  // return true;
7395
6733
  // }
7396
6734
  // }
7397
- class PlaceComponent extends LoadableComponent {
6735
+ class PlaceComponent extends DisposableComponent {
7398
6736
  _placeReadyCallbacks = [];
7399
6737
  visitModel = new MutableValueModel();
7400
6738
  _inVisitUpdate = new Guard();
@@ -7451,7 +6789,6 @@ class PlaceComponent extends LoadableComponent {
7451
6789
  */
7452
6790
  installAndInitialiseBinding(initialVisit, parameterDef) {
7453
6791
  const model = this[parameterDef.propertyName];
7454
- assert.notNil(model);
7455
6792
  DebugContext.tag(model, `${this.placeDefinition.component.name}.${parameterDef.propertyName}`);
7456
6793
  const binding = this.registerDisposable(new Binding(this.visitModel, model, {
7457
6794
  toRight(visit) {
@@ -7536,7 +6873,7 @@ class PlaceComponent extends LoadableComponent {
7536
6873
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: PlaceComponent, usesInheritance: true, ngImport: i0 });
7537
6874
  }
7538
6875
  __decorate([
7539
- MemoizeGet(),
6876
+ Memoize(),
7540
6877
  __metadata("design:type", PlaceDefinition),
7541
6878
  __metadata("design:paramtypes", [])
7542
6879
  ], PlaceComponent.prototype, "placeDefinition", null);
@@ -7726,7 +7063,7 @@ class Visit {
7726
7063
  getRouterCommands() {
7727
7064
  return this.segments.reduce((result, v) => {
7728
7065
  const path = v.placeDefinition.path;
7729
- return isEmpty(path) ?
7066
+ return isEmpty$1(path) ?
7730
7067
  [...result, path] : // Angular doesn't support route params on empty path segments
7731
7068
  [...result, path, ...v.createRouterCommands()];
7732
7069
  }, []);
@@ -7742,7 +7079,7 @@ class Visit {
7742
7079
  }
7743
7080
  }
7744
7081
  __decorate([
7745
- Memoize(),
7082
+ Memoize$1(),
7746
7083
  __metadata("design:type", Function),
7747
7084
  __metadata("design:paramtypes", [PlaceDefinition]),
7748
7085
  __metadata("design:returntype", VisitSegment)
@@ -8123,7 +7460,10 @@ class SynchroniseInteractionContextIdsWithRoute extends NavigationSession {
8123
7460
  return true;
8124
7461
  }
8125
7462
  notifyActive() {
8126
- this.syncInteractionIdsWithRouter();
7463
+ // TODO: Do I still need this??
7464
+ setTimeout(() => {
7465
+ this.syncInteractionIdsWithRouter();
7466
+ });
8127
7467
  }
8128
7468
  // @Trace()
8129
7469
  onRouterEnd(event) {
@@ -8662,12 +8002,12 @@ class PlaceAuthService extends GarbageCollector {
8662
8002
  await toPromise(this, this._authZReady$);
8663
8003
  await this.enabledPlaceChecker.waitUntilReady(placeDef);
8664
8004
  }
8665
- async getAuthenticationFailureRedirect(activatedRoute, state) {
8666
- const redirect = await this.authNOptions.redirectTo(activatedRoute, state);
8005
+ getAuthenticationFailureRedirect(activatedRoute, state) {
8006
+ const redirect = this.authNOptions.redirectTo(activatedRoute, state);
8667
8007
  return redirect instanceof Visit ? redirect : Visit.goto(redirect);
8668
8008
  }
8669
- async getAuthorisationFailureRedirectOptions(component) {
8670
- return (await this.authZOptions.redirectTo(component)).map(it => it instanceof Visit ? it : Visit.goto(it));
8009
+ getAuthorisationFailureRedirectOptions(component) {
8010
+ return this.authZOptions.redirectTo(component).map(it => it instanceof Visit ? it : Visit.goto(it));
8671
8011
  }
8672
8012
  isAuthenticated() {
8673
8013
  return this.accessGuard$.value.isAuthenticated();
@@ -8866,7 +8206,7 @@ class ConsolidatedParameterMap {
8866
8206
  }
8867
8207
  }
8868
8208
  __decorate([
8869
- MemoizeGet(),
8209
+ Memoize(),
8870
8210
  __metadata("design:type", Array),
8871
8211
  __metadata("design:paramtypes", [])
8872
8212
  ], ConsolidatedParameterMap.prototype, "keys", null);
@@ -8944,7 +8284,7 @@ class UrlSnapshot {
8944
8284
  return this.getPrimaryUrlSegments().find(s => s.path === placeDef.path);
8945
8285
  }
8946
8286
  isLastPlaceInUrl(placeDef) {
8947
- return last(this.getPrimaryUrlSegments()).path === placeDef.path;
8287
+ return last$1(this.getPrimaryUrlSegments()).path === placeDef.path;
8948
8288
  }
8949
8289
  createVisitSegmentFor(placeDef) {
8950
8290
  return new VisitSegment(placeDef, new ConsolidatedParameterMap(this.getPrimaryUrlSegments()));
@@ -9060,7 +8400,7 @@ class UrlService {
9060
8400
  back() {
9061
8401
  this.angularLocation.back();
9062
8402
  }
9063
- 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 });
9064
8404
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: UrlService, providedIn: 'root' });
9065
8405
  }
9066
8406
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: UrlService, decorators: [{
@@ -9068,7 +8408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9068
8408
  args: [{
9069
8409
  providedIn: 'root'
9070
8410
  }]
9071
- }], 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 }]; } });
9072
8412
 
9073
8413
  // function asArray<T>(item: T | T[]): T[] {
9074
8414
  // return Array.isArray(item) ? item : [item];
@@ -9088,8 +8428,6 @@ class PlaceRouter extends GarbageCollector {
9088
8428
  routerInteractionAdapter;
9089
8429
  sessionFinishedJobs = [];
9090
8430
  authService = new PlaceAuthService();
9091
- _ready$ = this.registerDisposable(new DelegatingValueModel().withDefault(true));
9092
- ready$ = this._ready$.readonly$;
9093
8431
  constructor(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
9094
8432
  super();
9095
8433
  this.angularRouter = angularRouter;
@@ -9111,7 +8449,7 @@ class PlaceRouter extends GarbageCollector {
9111
8449
  });
9112
8450
  const { chain } = Dsl.disposeWith(this);
9113
8451
  this.navigationInProgress$ = chain(this.navigationSession$).isNotNil();
9114
- this.interactionSyncInProgress$ = chain(this.navigationSession$).pluck("isInteractionSync").otherwise(false);
8452
+ this.interactionSyncInProgress$ = chain(this.navigationSession$).pluck("isInteractionSync");
9115
8453
  const idleStateName = chain(this.interactionService.active).map(active => active ? "IdleDuringInteraction" : "Idle");
9116
8454
  this.navigationSessionName$ = chain(this.navigationSession$)
9117
8455
  .pluck("name")
@@ -9155,13 +8493,10 @@ class PlaceRouter extends GarbageCollector {
9155
8493
  // the back button was clicked.
9156
8494
  angularLocation.onUrlChange(url => this.onUrlChanged(url));
9157
8495
  }
9158
- postponeRoutingUntil(condition$) {
9159
- this._ready$.setDelegate(condition$);
9160
- }
9161
- async getAuthenticationFailureRedirect(activatedRoute, state) {
8496
+ getAuthenticationFailureRedirect(activatedRoute, state) {
9162
8497
  return this.authService.getAuthenticationFailureRedirect(activatedRoute, state);
9163
8498
  }
9164
- async getAuthorisationFailureRedirectOptions(component) {
8499
+ getAuthorisationFailureRedirectOptions(component) {
9165
8500
  return this.authService.getAuthorisationFailureRedirectOptions(component);
9166
8501
  }
9167
8502
  get navigationSession() {
@@ -9173,20 +8508,23 @@ class PlaceRouter extends GarbageCollector {
9173
8508
  isNavigating() {
9174
8509
  return this.navigationInProgress$.value;
9175
8510
  }
9176
- async waitUntilRouterReady() {
9177
- const { waitUntil } = Dsl.disposeWith(this);
9178
- await waitUntil(this.ready$).becomesTruthy();
9179
- return this;
9180
- }
9181
- async waitUntilIdle() {
9182
- const { waitUntil } = Dsl.disposeWith(this);
9183
- await waitUntil(this.navigationInProgress$).becomesFalsey();
9184
- 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
+ });
9185
8519
  }
9186
8520
  async waitActivitiesSynchronised() {
9187
- const { waitUntil } = Dsl.disposeWith(this);
9188
- await waitUntil(this.interactionSyncInProgress$).becomesFalsey();
9189
- 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
+ });
9190
8528
  }
9191
8529
  // @Trace()
9192
8530
  onPopState(event) {
@@ -9372,7 +8710,7 @@ class PlaceRouter extends GarbageCollector {
9372
8710
  return Visit.goto(visitOrPlaceComponent, params);
9373
8711
  }
9374
8712
  }
9375
- 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 });
9376
8714
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, providedIn: "root" });
9377
8715
  }
9378
8716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceRouter, decorators: [{
@@ -9380,7 +8718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9380
8718
  args: [{
9381
8719
  providedIn: "root"
9382
8720
  }]
9383
- }], 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 }]; } });
9384
8722
 
9385
8723
  class ActivityTitleComponent extends DisposableComponent {
9386
8724
  _color;
@@ -9402,11 +8740,11 @@ class ActivityTitleComponent extends DisposableComponent {
9402
8740
  return this._color;
9403
8741
  }
9404
8742
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
9405
- 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"] });
9406
8744
  }
9407
8745
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityTitleComponent, decorators: [{
9408
8746
  type: Component,
9409
- 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"] }]
9410
8748
  }], propDecorators: { hasTransparentBackground: [{
9411
8749
  type: Input
9412
8750
  }, {
@@ -9427,7 +8765,7 @@ class AlertDialogComponent extends AbstractDialogComponent {
9427
8765
  });
9428
8766
  }
9429
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 });
9430
- 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"] }] });
9431
8769
  }
9432
8770
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AlertDialogComponent, decorators: [{
9433
8771
  type: Component,
@@ -9447,7 +8785,7 @@ class ConfirmThenDialogComponent extends AbstractConfirmDialogComponent {
9447
8785
  });
9448
8786
  }
9449
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 });
9450
- 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"] }] });
9451
8789
  }
9452
8790
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmThenDialogComponent, decorators: [{
9453
8791
  type: Component,
@@ -9471,7 +8809,7 @@ class ConfirmThenExecuteDialogComponent extends AbstractConfirmDialogComponent {
9471
8809
  });
9472
8810
  }
9473
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 });
9474
- 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"] }] });
9475
8813
  }
9476
8814
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmThenExecuteDialogComponent, decorators: [{
9477
8815
  type: Component,
@@ -9491,7 +8829,7 @@ class ConfirmationDialogComponent extends AbstractConfirmDialogComponent {
9491
8829
  });
9492
8830
  }
9493
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 });
9494
- 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"] }] });
9495
8833
  }
9496
8834
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ConfirmationDialogComponent, decorators: [{
9497
8835
  type: Component,
@@ -9671,7 +9009,6 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9671
9009
  tabs;
9672
9010
  activityOutlets;
9673
9011
  activityRefs = [];
9674
- animationDuration = "500ms";
9675
9012
  _identifier;
9676
9013
  _deferredCleanUp;
9677
9014
  interactionServiceApi;
@@ -9684,7 +9021,6 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9684
9021
  busy = this.registerDisposable(new DelegatingValueModel().withDefault(false));
9685
9022
  syncTabsJob = undefined;
9686
9023
  stable$;
9687
- wasActive = false;
9688
9024
  constructor(placeRouter) {
9689
9025
  super();
9690
9026
  this.placeRouter = placeRouter;
@@ -9721,12 +9057,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9721
9057
  * Returns true if an activity is currently running.
9722
9058
  */
9723
9059
  isActive() {
9724
- const isActive = this.getActiveActivityCount() > 0;
9725
- // if (this.wasActive !== isActive) {
9726
- // console.log({was: this.wasActive, is: isActive});
9727
- // }
9728
- // this.wasActive = isActive
9729
- return isActive;
9060
+ return this.getActiveActivityCount() > 0;
9730
9061
  }
9731
9062
  registerDisposable(disposable) {
9732
9063
  return this.garbage.registerDisposable(disposable);
@@ -9809,7 +9140,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9809
9140
  // by activity index)
9810
9141
  setTimeout(() => {
9811
9142
  this.activityRefs = []; // we have to do it after the animation timeout or the activity disappears before the animatin finsihes
9812
- }, this.getTabAnimationDurationInMillis());
9143
+ }, this.getTabAnimationDuration());
9813
9144
  const promise = this.interactionServiceApi.notifyFinished(this);
9814
9145
  this._deferredCleanUp = promise
9815
9146
  .finally(() => {
@@ -9835,6 +9166,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9835
9166
  /**
9836
9167
  * Synchronises the selected tab index.
9837
9168
  */
9169
+ // @Trace()
9838
9170
  synchroniseSelectedTabIndex() {
9839
9171
  assert.isTruthy(this.isActive());
9840
9172
  const previousIndex = this.tabs.selectedIndex;
@@ -9846,10 +9178,10 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9846
9178
  activityRef.setFocused(false);
9847
9179
  this.busy.setDelegate(activityRef.activityBusy);
9848
9180
  this.tabs.selectedIndex = newIndex;
9849
- // if (this.ready$.value) {
9850
- // // Note: We're not using the animation done event as it's firing almost immeadiately.
9851
- // setTimeout(() => this.finaliseActivityStates(), animate ? this.getTabAnimationDurationInMillis() : 0);
9852
- // }
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
+ }
9853
9185
  }
9854
9186
  }
9855
9187
  finaliseActivityStates() {
@@ -9863,12 +9195,7 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9863
9195
  return this.activityOutlets.toArray()[this.tabs.selectedIndex];
9864
9196
  }
9865
9197
  getTabAnimationDuration() {
9866
- // const s = this._started$.value ? this.animationDuration : "0";
9867
- // return s
9868
- return this.animationDuration;
9869
- }
9870
- getTabAnimationDurationInMillis() {
9871
- const match = this.animationDuration.match(/(\d+)(.*)/);
9198
+ const match = this.tabs.animationDuration.match(/(\d+)(.*)/);
9872
9199
  const numericValue = parseFloat(match[1]);
9873
9200
  switch (match[2].trim()) {
9874
9201
  case "ms":
@@ -9894,16 +9221,12 @@ class ActivityContainerComponent extends AbstractInteractionContext {
9894
9221
  }
9895
9222
  }, 75);
9896
9223
  }
9897
- onAnimationDone() {
9898
- this._started$.value = true;
9899
- this.finaliseActivityStates();
9900
- }
9901
9224
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityContainerComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
9902
- 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"] }] });
9903
9226
  }
9904
9227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ActivityContainerComponent, decorators: [{
9905
9228
  type: Component,
9906
- 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"] }]
9907
9230
  }], ctorParameters: function () { return [{ type: PlaceRouter }]; }, propDecorators: { dynamicHeight: [{
9908
9231
  type: Input
9909
9232
  }], tabs: [{
@@ -9912,8 +9235,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
9912
9235
  }], activityOutlets: [{
9913
9236
  type: ViewChildren,
9914
9237
  args: [ActivityOutletComponent]
9915
- }], animationDuration: [{
9916
- type: Input
9917
9238
  }] } });
9918
9239
 
9919
9240
  class AbstractActivityTriggerComponent extends DisposableComponent {
@@ -10014,16 +9335,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10014
9335
  args: ['class.active']
10015
9336
  }] } });
10016
9337
 
10017
- const INTERACTION_CONTEXT = new InjectionToken('interactionContext');
10018
-
10019
- const cssDurationRegex$1 = /(\d+)(m?s)/;
9338
+ const cssDurationRegex = /(\d+)(m?s)/;
10020
9339
  /**
10021
9340
  * @example
10022
9341
  * <aup-in-place-interaction-context #inPlaceInteractionContext>
10023
9342
  * </aup-in-place-interaction-context>
10024
9343
  *
10025
9344
  * in your component
10026
- * @ViewChild(InPlaceInteractionContextComponent)
9345
+ * @ViewChild('inPlaceInteractionContext', { static: true })
10027
9346
  * interactionContext: InteractionContext;
10028
9347
  *
10029
9348
  *
@@ -10042,13 +9361,11 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
10042
9361
  * active interactions.
10043
9362
  */
10044
9363
  syncWithRoutes = true;
10045
- started = new EventEmitter();
10046
- finished = new EventEmitter();
10047
9364
  get animationDuration() {
10048
9365
  return this.animateFirstActivity ? (this.tabConfig?.animationDuration || "500ms") : "0ms";
10049
9366
  }
10050
9367
  get animationDurationMillis() {
10051
- const result = cssDurationRegex$1.exec(this.animationDuration);
9368
+ const result = cssDurationRegex.exec(this.animationDuration);
10052
9369
  if (!result) {
10053
9370
  lang.illegalState(`unsupported css duration: ${this.animationDuration}`);
10054
9371
  }
@@ -10070,16 +9387,11 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
10070
9387
  this.interactionService.registerInplaceInteractionContext(this);
10071
9388
  }
10072
9389
  else {
10073
- const self = this;
10074
9390
  this.activityContainerComponent.initialise("dont-care", {
10075
9391
  async notifyActive(interactionContext) {
10076
- self.started.emit();
10077
9392
  return undefined;
10078
9393
  },
10079
9394
  async notifyFinished(interactionContext) {
10080
- // I've noticed some rendering fails when returning the the transcluded content we'll fire an event
10081
- // so components can do stuff if they need to.
10082
- self.started.emit();
10083
9395
  return undefined;
10084
9396
  }
10085
9397
  });
@@ -10126,15 +9438,11 @@ class InPlaceInteractionContextComponent extends DisposableComponent {
10126
9438
  }
10127
9439
  }
10128
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 });
10129
- 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: [
10130
- { provide: INTERACTION_CONTEXT, useExisting: InPlaceInteractionContextComponent }
10131
- ], 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"] }] });
10132
9442
  }
10133
9443
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InPlaceInteractionContextComponent, decorators: [{
10134
9444
  type: Component,
10135
- args: [{ selector: "aup-in-place-interaction-context", providers: [
10136
- { provide: INTERACTION_CONTEXT, useExisting: InPlaceInteractionContextComponent }
10137
- ], 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"] }]
10138
9446
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
10139
9447
  type: Inject,
10140
9448
  args: [MAT_TABS_CONFIG]
@@ -10147,10 +9455,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10147
9455
  type: Input
10148
9456
  }], syncWithRoutes: [{
10149
9457
  type: Input
10150
- }], started: [{
10151
- type: Output
10152
- }], finished: [{
10153
- type: Output
10154
9458
  }], active: [{
10155
9459
  type: HostBinding,
10156
9460
  args: ["class.active"]
@@ -10165,7 +9469,7 @@ class InlineActivityTriggerComponent extends AbstractActivityTriggerComponent {
10165
9469
  super();
10166
9470
  }
10167
9471
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InlineActivityTriggerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10168
- 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"] }] });
10169
9473
  }
10170
9474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InlineActivityTriggerComponent, decorators: [{
10171
9475
  type: Component,
@@ -10289,7 +9593,7 @@ class PopupInteractionContextComponent extends DisposableComponent {
10289
9593
  isActive() {
10290
9594
  return this.interactionContext && this.interactionContext.isActive();
10291
9595
  }
10292
- 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 });
10293
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"] });
10294
9598
  }
10295
9599
  __decorate([
@@ -10303,7 +9607,7 @@ __decorate([
10303
9607
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PopupInteractionContextComponent, decorators: [{
10304
9608
  type: Component,
10305
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"] }]
10306
- }], 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: [{
10307
9611
  type: Optional
10308
9612
  }, {
10309
9613
  type: SkipSelf
@@ -10388,7 +9692,7 @@ class AddCardActivityComponent extends AbstractActivityTriggerComponent {
10388
9692
  return this.interactionStyle === 'inline';
10389
9693
  }
10390
9694
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AddCardActivityComponent, deps: [{ token: InteractionService }], target: i0.ɵɵFactoryTarget.Component });
10391
- 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"] }] });
10392
9696
  }
10393
9697
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AddCardActivityComponent, decorators: [{
10394
9698
  type: Component,
@@ -10464,7 +9768,7 @@ class AddItemInteractionContextComponent extends DisposableComponent {
10464
9768
  return this.interactionContext.startActivity(activityType, data);
10465
9769
  }
10466
9770
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AddItemInteractionContextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10467
- 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"] }] });
10468
9772
  }
10469
9773
  __decorate([
10470
9774
  Proxify(),
@@ -10603,14 +9907,12 @@ class StringInputActivity extends InputActivity {
10603
9907
  [label]="activityData.label"
10604
9908
  [placeholder]="activityData.placeholder"
10605
9909
  [command.enter]="confirmCommand"
10606
- [command.escape]="cancelCommand"
10607
- [dense]="true"
10608
- ></aup-string-input>
9910
+ [command.escape]="cancelCommand"></aup-string-input>
10609
9911
  <aup-activity-actions [layout]="layout" align="end"
10610
9912
  [confirmFace]="confirmFace"
10611
9913
  [cancelFace]="cancelFace"
10612
9914
  ></aup-activity-actions>
10613
- `, 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"] }] });
10614
9916
  }
10615
9917
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: StringInputActivity, decorators: [{
10616
9918
  type: Component,
@@ -10621,9 +9923,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10621
9923
  [label]="activityData.label"
10622
9924
  [placeholder]="activityData.placeholder"
10623
9925
  [command.enter]="confirmCommand"
10624
- [command.escape]="cancelCommand"
10625
- [dense]="true"
10626
- ></aup-string-input>
9926
+ [command.escape]="cancelCommand"></aup-string-input>
10627
9927
  <aup-activity-actions [layout]="layout" align="end"
10628
9928
  [confirmFace]="confirmFace"
10629
9929
  [cancelFace]="cancelFace"
@@ -10806,7 +10106,7 @@ class InlineStringEditorComponent extends DisposableComponent {
10806
10106
  return !this.editingEnabled$.value;
10807
10107
  }
10808
10108
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InlineStringEditorComponent, deps: [{ token: InteractionService }], target: i0.ɵɵFactoryTarget.Component });
10809
- 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"] }] });
10810
10110
  }
10811
10111
  __decorate([
10812
10112
  Proxify(),
@@ -10889,7 +10189,6 @@ class SelectInputActivity extends InputActivity {
10889
10189
  [options]="options"
10890
10190
  [optionLabelFormat]="optionLabelFormat"
10891
10191
  [allowNil]="activityData.allowNil"
10892
- [dense]="true"
10893
10192
  >
10894
10193
  <ng-template #nilOptionTemplate>{{activityData.nilLabel}}</ng-template>
10895
10194
  </aup-select-input>
@@ -10897,7 +10196,7 @@ class SelectInputActivity extends InputActivity {
10897
10196
  [confirmFace]="confirmFace"
10898
10197
  [cancelFace]="cancelFace"
10899
10198
  ></aup-activity-actions>
10900
- `, 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"] }] });
10901
10200
  }
10902
10201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SelectInputActivity, decorators: [{
10903
10202
  type: Component,
@@ -10912,7 +10211,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10912
10211
  [options]="options"
10913
10212
  [optionLabelFormat]="optionLabelFormat"
10914
10213
  [allowNil]="activityData.allowNil"
10915
- [dense]="true"
10916
10214
  >
10917
10215
  <ng-template #nilOptionTemplate>{{activityData.nilLabel}}</ng-template>
10918
10216
  </aup-select-input>
@@ -10924,186 +10222,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
10924
10222
  }]
10925
10223
  }] });
10926
10224
 
10927
- const slideDownOnEnterDef = style({
10928
- opacity: 0,
10929
- 'height': '0',
10930
- 'max-height': '0',
10931
- paddingTop: '0',
10932
- paddingBottom: '0'
10933
- });
10934
- const slideLeftOnEnterDef = style({
10935
- opacity: 0,
10936
- 'width': '0',
10937
- paddingLeft: '0',
10938
- paddingRight: '0'
10939
- });
10940
- const ZERO_WIDTH = {
10941
- opacity: 0,
10942
- width: '0',
10943
- paddingLeft: '0',
10944
- paddingRight: '0',
10945
- };
10946
- const ZERO_HEIGHT = {
10947
- opacity: 0,
10948
- height: '0',
10949
- paddingTop: '0',
10950
- paddingBottom: '0',
10951
- };
10952
- // TODO: params aren't getting customised in the view. Need to figure out the correct approach.
10953
- const slideDownOnEnterAnimation = trigger('slideDownOnEnter', [
10954
- transition(':enter', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10955
- transition(':leave', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
10956
- ]);
10957
- const slideDownWhenOpenAnimation = trigger('slideDownWhenOpen', [
10958
- transition('closed => open', [slideDownOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10959
- transition('open => closed', [animate('{{duration}}', slideDownOnEnterDef)], { params: { duration: '100ms' } })
10960
- ]);
10961
- const slideRightOnEnterAnimation = trigger('slideRightOnEnter', [
10962
- transition(':enter', [slideLeftOnEnterDef, animate('{{duration}}')], { params: { duration: '100ms' } }),
10963
- transition(':leave', [animate('{{duration}}', slideLeftOnEnterDef)], { params: { duration: '100ms' } })
10964
- ]);
10965
- const slideDownAndRightOnEnterAnimation = trigger('slideDownAndRightOnEnter', [
10966
- transition(':enter', [
10967
- style({ overflow: "hidden", whiteSpace: "nowrap", ...ZERO_WIDTH, ...ZERO_HEIGHT }),
10968
- animate('{{duration}}')
10969
- ], { params: { duration: '100ms' } }),
10970
- transition(':leave', [
10971
- style({ overflow: "hidden", whiteSpace: "nowrap" }),
10972
- group([
10973
- animate('{{duration}}', style(ZERO_HEIGHT)),
10974
- // Hack: 100ms is too quick as it animates from * - 0 as we only see it animate the width is greater than the parent.
10975
- // Not sure how to animate from * to natural new width of parent. This hack won't work for text that's just a little
10976
- // bit wider than the parent as it'll fall within the parent bounds very early in the animation cycle.
10977
- animate('300ms', style(ZERO_WIDTH)),
10978
- ])
10979
- ], { params: { duration: '100ms' } })
10980
- ]);
10981
-
10982
- const cssDurationRegex = /(\d+)(m?s)/;
10983
- /**
10984
- * This interaction context remains hidden (height: 0) until it is active.
10985
- * @example
10986
- * <aup-slide-down-interaction-context #inPlaceInteractionContext>
10987
- * </aup-slide-down-interaction-context>
10988
- *
10989
- * in your component
10990
- * @ViewChild(SlideDownInteractionContextComponent)
10991
- * interactionContext: InteractionContext;
10992
- *
10993
- *
10994
- */
10995
- class SlideDownInteractionContextComponent extends DisposableComponent {
10996
- tabConfig;
10997
- activityContainerComponent;
10998
- // NOTE: disabling this as I'm using the initialise callback to release the hacky height clamp.
10999
- // The whole registration thing is a bit naf so I should really clean that up at some point.
11000
- // /**
11001
- // * If true the activity will sync with the router to enable back button support. This is a work around for
11002
- // * deeply nested activities that can't be linked with the root place interactionContext hook for cancelling
11003
- // * active interactions.
11004
- // */
11005
- // @Input()
11006
- // syncWithRoutes = true;
11007
- dynamicHeight = true;
11008
- get active() {
11009
- return this.isActive();
11010
- }
11011
- // Horrible hack to stop the div and activity container bouncing back for a bit in after closing. No idea why it's doing that.
11012
- clampShut = true;
11013
- interactionService = this.inject(InteractionService);
11014
- constructor(tabConfig) {
11015
- super();
11016
- this.tabConfig = tabConfig;
11017
- }
11018
- ngAfterViewInit() {
11019
- // NOTE: this is a temp work around to detach inplace contexts from the router until AUP-88 is implemented.
11020
- // https://coolon.atlassian.net/browse/AUP-88?atlOrigin=eyJpIjoiOTg5YjEzZGUzZjRmNDg0NmExOWU3ZGJmMzJiNTRmNGYiLCJwIjoiaiJ9
11021
- const self = this;
11022
- this.activityContainerComponent.initialise("dont-care", {
11023
- async notifyActive(interactionContext) {
11024
- self.clampShut = false;
11025
- return undefined;
11026
- },
11027
- async notifyFinished(interactionContext) {
11028
- return undefined;
11029
- }
11030
- });
11031
- // if (this.syncWithRoutes) {
11032
- // this.interactionService.registerInplaceInteractionContext(this);
11033
- // }
11034
- }
11035
- getAnimationState() {
11036
- return {
11037
- value: this.isActive() ? "open" : "closed",
11038
- params: { duration: "200ms" }
11039
- };
11040
- }
11041
- // this is a regsitration callback from the interaction service
11042
- // @Trace() // webstorm says no usages... but I'm not sure.
11043
- onInplaceInteractionContextRegistered(id, api) {
11044
- this.activityContainerComponent.initialise(id, api);
11045
- }
11046
- get identifier() {
11047
- return this.activityContainerComponent.identifier;
11048
- }
11049
- alert(alert) {
11050
- return this.activityContainerComponent.alert(alert);
11051
- }
11052
- cancelActiveActivity() {
11053
- return this.activityContainerComponent.cancelActiveActivity();
11054
- }
11055
- confirm(confirm) {
11056
- return this.activityContainerComponent.confirm(confirm);
11057
- }
11058
- confirmOrReject(confirm) {
11059
- return this.activityContainerComponent.confirmOrReject(confirm);
11060
- }
11061
- confirmThen(confirm, activityType, data) {
11062
- return this.activityContainerComponent.confirmThen(confirm, activityType);
11063
- }
11064
- confirmThenExecute(confirm, operation) {
11065
- return this.activityContainerComponent.confirmThenExecute(confirm, operation);
11066
- }
11067
- isActive() {
11068
- return this.activityContainerComponent.isActive();
11069
- }
11070
- startActivity(activityType, data, options) {
11071
- return this.activityContainerComponent.startActivity(activityType, data, options);
11072
- }
11073
- onAnimationDone() {
11074
- if (!this.isActive()) {
11075
- this.clampShut = true;
11076
- }
11077
- }
11078
- 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 });
11079
- 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: [
11080
- { provide: INTERACTION_CONTEXT, useExisting: SlideDownInteractionContextComponent }
11081
- ], 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: [
11082
- slideDownWhenOpenAnimation
11083
- ] });
11084
- }
11085
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SlideDownInteractionContextComponent, decorators: [{
11086
- type: Component,
11087
- args: [{ selector: "aup-slide-down-interaction-context", providers: [
11088
- { provide: INTERACTION_CONTEXT, useExisting: SlideDownInteractionContextComponent }
11089
- ], animations: [
11090
- slideDownWhenOpenAnimation
11091
- ], 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"] }]
11092
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
11093
- type: Inject,
11094
- args: [MAT_TABS_CONFIG]
11095
- }, {
11096
- type: Optional
11097
- }] }]; }, propDecorators: { activityContainerComponent: [{
11098
- type: ViewChild,
11099
- args: ["activityContainer", { static: true }]
11100
- }], dynamicHeight: [{
11101
- type: Input
11102
- }], active: [{
11103
- type: HostBinding,
11104
- args: ["class.active"]
11105
- }] } });
11106
-
11107
10225
  class InteractionContextTriggerForDirective extends GarbageCollector {
11108
10226
  aupInteractionContextTriggerFor;
11109
10227
  activityClass;
@@ -11186,7 +10304,6 @@ class InteractionModule {
11186
10304
  AlertDialogComponent,
11187
10305
  ActivityOutletComponent,
11188
10306
  InPlaceInteractionContextComponent,
11189
- SlideDownInteractionContextComponent,
11190
10307
  AddItemInteractionContextComponent,
11191
10308
  ActivityActionsComponent,
11192
10309
  PopupInteractionContextComponent,
@@ -11213,6 +10330,8 @@ class InteractionModule {
11213
10330
  RouterModule,
11214
10331
  MatIconModule,
11215
10332
  DirectivesModule,
10333
+ FlexModule,
10334
+ GridModule,
11216
10335
  ComponentsModule,
11217
10336
  FormsModule,
11218
10337
  MatInputModule,
@@ -11232,8 +10351,7 @@ class InteractionModule {
11232
10351
  InlineActivityTriggerComponent,
11233
10352
  ModalActivityTriggerComponent,
11234
10353
  AddCardActivityComponent,
11235
- InlineStringEditorComponent,
11236
- SlideDownInteractionContextComponent] });
10354
+ InlineStringEditorComponent] });
11237
10355
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: InteractionModule, providers: [
11238
10356
  InteractionService
11239
10357
  // {
@@ -11247,6 +10365,8 @@ class InteractionModule {
11247
10365
  RouterModule,
11248
10366
  MatIconModule,
11249
10367
  DirectivesModule,
10368
+ FlexModule,
10369
+ GridModule,
11250
10370
  ComponentsModule,
11251
10371
  FormsModule,
11252
10372
  MatInputModule,
@@ -11265,6 +10385,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11265
10385
  RouterModule,
11266
10386
  MatIconModule,
11267
10387
  DirectivesModule,
10388
+ FlexModule,
10389
+ GridModule,
11268
10390
  ComponentsModule,
11269
10391
  FormsModule,
11270
10392
  MatInputModule,
@@ -11279,7 +10401,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11279
10401
  AlertDialogComponent,
11280
10402
  ActivityOutletComponent,
11281
10403
  InPlaceInteractionContextComponent,
11282
- SlideDownInteractionContextComponent,
11283
10404
  AddItemInteractionContextComponent,
11284
10405
  ActivityActionsComponent,
11285
10406
  PopupInteractionContextComponent,
@@ -11317,7 +10438,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11317
10438
  ModalActivityTriggerComponent,
11318
10439
  AddCardActivityComponent,
11319
10440
  InlineStringEditorComponent,
11320
- SlideDownInteractionContextComponent,
11321
10441
  ],
11322
10442
  providers: [
11323
10443
  InteractionService
@@ -11388,6 +10508,7 @@ class PlaceOutletComponent extends DisposableComponent {
11388
10508
  router;
11389
10509
  placeRouter;
11390
10510
  placeConfig;
10511
+ cdr;
11391
10512
  #animate$_accessor_storage = proxify((ValueModel));
11392
10513
  get animate$() { return this.#animate$_accessor_storage; }
11393
10514
  set animate$(value) { this.#animate$_accessor_storage = value; }
@@ -11421,11 +10542,12 @@ class PlaceOutletComponent extends DisposableComponent {
11421
10542
  animationEnabled;
11422
10543
  authorised;
11423
10544
  notAuthorisedNoticePortal;
11424
- constructor(router, placeRouter, placeConfig, unauthorisedPlaceNotice, parentOutlet) {
10545
+ constructor(router, placeRouter, placeConfig, unauthorisedPlaceNotice, parentOutlet, cdr) {
11425
10546
  super();
11426
10547
  this.router = router;
11427
10548
  this.placeRouter = placeRouter;
11428
10549
  this.placeConfig = placeConfig;
10550
+ this.cdr = cdr;
11429
10551
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
11430
10552
  this.parentOutletModel = new MutableValueModel(parentOutlet);
11431
10553
  const defaultPlaceAnimationOrder = chain(this.parentOutletModel)
@@ -11437,7 +10559,7 @@ class PlaceOutletComponent extends DisposableComponent {
11437
10559
  this.placesInAnimationOrder = chain(this.customPlaceAnimationOrder$)
11438
10560
  .otherwise(defaultPlaceAnimationOrder);
11439
10561
  this.activePlaceAnimationPosition = this.placesInAnimationOrder
11440
- .reduceAll((placesInOrder) => {
10562
+ .reduce((placesInOrder) => {
11441
10563
  let placeIndex = 0;
11442
10564
  if (activatePlaceType.value) {
11443
10565
  placeIndex = placesInOrder.indexOf(activatePlaceType.value);
@@ -11591,8 +10713,8 @@ class PlaceOutletComponent extends DisposableComponent {
11591
10713
  this.onAnimationFinishedJob = undefined;
11592
10714
  }
11593
10715
  }
11594
- 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 });
11595
- 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] });
11596
10718
  }
11597
10719
  __decorate([
11598
10720
  Proxify(),
@@ -11613,7 +10735,7 @@ __decorate([
11613
10735
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceOutletComponent, decorators: [{
11614
10736
  type: Component,
11615
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"] }]
11616
- }], 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: [{
11617
10739
  type: Optional
11618
10740
  }, {
11619
10741
  type: Inject,
@@ -11627,7 +10749,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11627
10749
  type: SkipSelf
11628
10750
  }, {
11629
10751
  type: Optional
11630
- }] }]; }, propDecorators: { animate$: [{
10752
+ }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { animate$: [{
11631
10753
  type: Input
11632
10754
  }], animate: [{
11633
10755
  type: Input
@@ -11760,7 +10882,7 @@ class ListPlaceNavComponent extends AbstractPlaceNavigationComponent {
11760
10882
  super(router);
11761
10883
  }
11762
10884
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ListPlaceNavComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11763
- 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"] }] });
11764
10886
  }
11765
10887
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ListPlaceNavComponent, decorators: [{
11766
10888
  type: Component,
@@ -11835,7 +10957,7 @@ class SidePlaceNavigationComponent extends AbstractPlaceNavigationComponent {
11835
10957
  this.expanded = !this.expanded;
11836
10958
  }
11837
10959
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SidePlaceNavigationComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11838
- 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"] }] });
11839
10961
  }
11840
10962
  __decorate([
11841
10963
  Proxify(),
@@ -11847,7 +10969,7 @@ __decorate([
11847
10969
  ], SidePlaceNavigationComponent.prototype, "expanded", null);
11848
10970
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SidePlaceNavigationComponent, decorators: [{
11849
10971
  type: Component,
11850
- 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"] }]
11851
10973
  }], ctorParameters: function () { return [{ type: PlaceRouter }]; }, propDecorators: { expanded$: [{
11852
10974
  type: Input
11853
10975
  }], expanded: [{
@@ -11865,7 +10987,7 @@ class TabbedPlaceNavigationComponent extends AbstractPlaceNavigationComponent {
11865
10987
  super(router);
11866
10988
  }
11867
10989
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TabbedPlaceNavigationComponent, deps: [{ token: PlaceRouter }], target: i0.ɵɵFactoryTarget.Component });
11868
- 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"] }] });
11869
10991
  }
11870
10992
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TabbedPlaceNavigationComponent, decorators: [{
11871
10993
  type: Component,
@@ -11888,6 +11010,7 @@ class PlaceModule {
11888
11010
  MatTooltipModule,
11889
11011
  MatIconModule,
11890
11012
  DirectivesModule,
11013
+ FlexModule,
11891
11014
  ComponentsModule,
11892
11015
  PortalModule,
11893
11016
  MatCardModule], exports: [PlaceOutletComponent,
@@ -11904,6 +11027,7 @@ class PlaceModule {
11904
11027
  MatTooltipModule,
11905
11028
  MatIconModule,
11906
11029
  DirectivesModule,
11030
+ FlexModule,
11907
11031
  ComponentsModule,
11908
11032
  PortalModule,
11909
11033
  MatCardModule] });
@@ -11921,6 +11045,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
11921
11045
  MatTooltipModule,
11922
11046
  MatIconModule,
11923
11047
  DirectivesModule,
11048
+ FlexModule,
11924
11049
  ComponentsModule,
11925
11050
  PortalModule,
11926
11051
  MatCardModule
@@ -12010,44 +11135,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
12010
11135
  }]
12011
11136
  }] });
12012
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
+
12013
11188
  /**
12014
11189
  * @file Automatically generated by barrelsby.
12015
11190
  */
12016
11191
 
12017
- class ResizeObserverDirective extends DisposableComponent {
12018
- aupOnResize = new EventEmitter();
12019
- elementRef = this.inject(ElementRef);
12020
- ngZone = this.inject(NgZone);
12021
- _bounds$ = new MutableValueModel();
12022
- ngAfterViewInit() {
12023
- const element = this.elementRef.nativeElement;
12024
- const ro = new ResizeObserver((entries, observer) => {
12025
- this.ngZone.run(() => this._updateBounds());
12026
- });
12027
- ro.observe(element);
12028
- this.onDispose(() => ro.disconnect());
12029
- setTimeout(() => this._updateBounds());
12030
- }
12031
- get bounds$() {
12032
- return this._bounds$.readonly$;
12033
- }
12034
- _updateBounds() {
12035
- this._bounds$.value = Bounds.ofElement(this.elementRef.nativeElement);
12036
- this.aupOnResize.emit(this._bounds$.value);
12037
- }
12038
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeObserverDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
12039
- 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 });
12040
- }
12041
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ResizeObserverDirective, decorators: [{
12042
- type: Directive,
12043
- args: [{
12044
- selector: "[aupOnResize]",
12045
- standalone: true
12046
- }]
12047
- }], propDecorators: { aupOnResize: [{
12048
- type: Output
12049
- }] } });
12050
-
12051
11192
  /**
12052
11193
  * @file Automatically generated by barrelsby.
12053
11194
  */
@@ -12138,7 +11279,7 @@ class DialogInteractionContextFactory extends ModalInteractionContextFactory {
12138
11279
  };
12139
11280
  return new DialogInteractionContext(identifier, api, this.dialogService, config);
12140
11281
  }
12141
- 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 });
12142
11283
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DialogInteractionContextFactory, providedIn: 'root' });
12143
11284
  }
12144
11285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DialogInteractionContextFactory, decorators: [{
@@ -12146,12 +11287,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
12146
11287
  args: [{
12147
11288
  providedIn: 'root'
12148
11289
  }]
12149
- }], 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: [{
12150
11291
  type: Optional
12151
11292
  }, {
12152
11293
  type: Inject,
12153
11294
  args: [DIALOG_INTERACTION_SERVICE_DEFAULTS]
12154
- }] }, { type: i1$7.MatDialogConfig, decorators: [{
11295
+ }] }, { type: i1$6.MatDialogConfig, decorators: [{
12155
11296
  type: Optional
12156
11297
  }, {
12157
11298
  type: Inject,
@@ -12271,14 +11412,13 @@ class PlaceGuard {
12271
11412
  }
12272
11413
  // @Trace()
12273
11414
  async canActivate(activatedRoute, state) {
12274
- await this.placeRouter.waitUntilRouterReady();
12275
11415
  if (PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) {
12276
11416
  const placeDefinition = PlaceComponent.getDefinition(activatedRoute.component);
12277
11417
  if (placeDefinition.authenticate) {
12278
11418
  await this.placeRouter.authService.waitUntilAuthenticationReady();
12279
11419
  const authenticated = this.authService.isAuthenticated();
12280
11420
  if (!authenticated) {
12281
- const redirect = await this.authService.getAuthenticationFailureRedirect(activatedRoute, state);
11421
+ const redirect = this.authService.getAuthenticationFailureRedirect(activatedRoute, state);
12282
11422
  // const nextPlaceDef = this.getPlaceDefinition(redirect);
12283
11423
  if (redirect.requiresAuthentication()) {
12284
11424
  lang.illegalState(`onAuthenticationFailure hook returned place ${redirect.toDebugString()} that requires authentication.`);
@@ -12287,7 +11427,7 @@ class PlaceGuard {
12287
11427
  }
12288
11428
  await this.authService.waitUntilAuthorisationReadyFor(placeDefinition);
12289
11429
  if (!this.authService.isAuthorised(placeDefinition)) {
12290
- const nextRedirect = await this.findBestAuthenticatedAlternative(placeDefinition, activatedRoute);
11430
+ const nextRedirect = this.findBestAuthenticatedAlternative(placeDefinition, activatedRoute);
12291
11431
  return this.createUrlTree(nextRedirect);
12292
11432
  }
12293
11433
  }
@@ -12331,7 +11471,7 @@ class PlaceGuard {
12331
11471
  return lang.illegalState(`expected component to be an instance of PlaceComponent, got ${activatedRoute.component}`);
12332
11472
  }
12333
11473
  }
12334
- async findBestAuthenticatedAlternative(placeDefinition, activatedRoute) {
11474
+ findBestAuthenticatedAlternative(placeDefinition, activatedRoute) {
12335
11475
  let currentPlace = placeDefinition;
12336
11476
  while (!currentPlace.isRoot()) {
12337
11477
  currentPlace = currentPlace.parent;
@@ -12341,7 +11481,7 @@ class PlaceGuard {
12341
11481
  }
12342
11482
  }
12343
11483
  // Couldn't find an authorised ancestor so we check if there are router level defined alternatives
12344
- const alternativeRoutes = await this.placeRouter.getAuthorisationFailureRedirectOptions(activatedRoute.component);
11484
+ const alternativeRoutes = this.placeRouter.getAuthorisationFailureRedirectOptions(activatedRoute.component);
12345
11485
  if (alternativeRoutes.length < 1) {
12346
11486
  return lang.illegalState(`onAuthorisationFailure hook didn't return any alternate places`);
12347
11487
  }
@@ -12384,13 +11524,13 @@ class PlaceGuard {
12384
11524
  return next();
12385
11525
  }
12386
11526
  }
12387
- 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 });
12388
11528
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceGuard, providedIn: 'root' });
12389
11529
  }
12390
11530
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceGuard, decorators: [{
12391
11531
  type: Injectable,
12392
11532
  args: [{ providedIn: 'root' }]
12393
- }], 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 }]; } });
12394
11534
 
12395
11535
  var Formatter;
12396
11536
  (function (Formatter) {
@@ -12424,74 +11564,69 @@ var Formatter;
12424
11564
  Formatter.BOOLEAN = new BooleanType();
12425
11565
  })(Formatter || (Formatter = {}));
12426
11566
 
12427
- // function installMechanics<M extends HasValue<any>>(parameterDef: ParameterDefinition<any>, prototype: object, propertyKey: string | symbol, tagPrefix: string) {
12428
- //
12429
- // Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12430
- //
12431
- // function getMechanics(instance: M, propertyName: string | symbol) {
12432
- // const key = `__mechanics_${propertyName.toString()}`;
12433
- // if (!instance[key]) {
12434
- // const backingModel = parameterDef.createBackingModel();
12435
- // instance[key] = {
12436
- // backingModel: backingModel,
12437
- // binding: null as Binding<any, any>
12438
- // };
12439
- // const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
12440
- // DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
12441
- // }
12442
- // return instance[key];
12443
- // }
12444
- //
12445
- // Object.defineProperty(prototype, propertyKey, {
12446
- // get: function() {
12447
- // return getMechanics(this, propertyKey).backingModel;
12448
- // },
12449
- // set: function(userModel: M) {
12450
- // const mechanics = getMechanics(this, propertyKey);
12451
- // // This handles the scenario where we want to push an existing value model (such as a form model)
12452
- // // to and from the route.
12453
- // if (mechanics.binding) {
12454
- // mechanics.binding.dispose();
12455
- // }
12456
- // if (userModel) {
12457
- // mechanics.binding = new Binding(mechanics.backingModel, userModel, {
12458
- // toLeft: Functions.identity,
12459
- // toRight: Functions.identity
12460
- // });
12461
- // if (parameterDef.isEmptyValue(userModel.value)) {
12462
- // // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
12463
- // mechanics.binding.writeRight(); // push the visit into the user model;
12464
- // } else {
12465
- // if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
12466
- // console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
12467
- // }
12468
- // mechanics.binding.writeLeft(); // push the user model into the visit
12469
- // }
12470
- // }
12471
- // }
12472
- // });
12473
- // }
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
+ }
12474
11612
  function RouteId(formatter, options) {
12475
11613
  return (prototype, propertyKey) => {
12476
11614
  const parameterDef = new ParameterDefinition.RouteId(propertyKey.toString(), options, formatter);
12477
- // installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
12478
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11615
+ installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
12479
11616
  };
12480
11617
  }
12481
11618
  function VisitParameter(options) {
12482
11619
  const opts = Opts.get(options);
12483
11620
  return (prototype, propertyKey) => {
12484
11621
  const parameterDef = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
12485
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12486
- // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
11622
+ installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
12487
11623
  };
12488
11624
  }
12489
11625
  function VisitParameterList(options) {
12490
11626
  const opts = Opts.get(options);
12491
11627
  return (prototype, propertyKey) => {
12492
11628
  const parameterDef = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
12493
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
12494
- // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
11629
+ installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
12495
11630
  };
12496
11631
  }
12497
11632
 
@@ -12585,5 +11720,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
12585
11720
  * Generated bundle index. Do not edit.
12586
11721
  */
12587
11722
 
12588
- 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 };
12589
11724
  //# sourceMappingURL=coolon-angular-ui-powerups.mjs.map