@coolon/angular-ui-powerups 2.0.0-alpha.2 → 2.0.0-alpha.21

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 (173) hide show
  1. package/CHANGELOG.md +133 -0
  2. package/assets/form.scss +33 -0
  3. package/bundles/coolon-angular-ui-powerups.umd.js +571 -330
  4. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  5. package/bundles/coolon-angular-ui-powerups.umd.min.js +2 -2
  6. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  7. package/coolon-angular-ui-powerups.d.ts +55 -54
  8. package/coolon-angular-ui-powerups.metadata.json +1 -1
  9. package/esm2015/coolon-angular-ui-powerups.js +53 -52
  10. package/esm2015/coolon-angular-ui-powerups.js.map +1 -1
  11. package/esm2015/coolon-angular-ui-powerups.metadata.json +1 -1
  12. package/esm2015/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  13. package/esm2015/lib/components/card-container/card-container.component.js +1 -1
  14. package/esm2015/lib/components/card-container/card-container.component.metadata.json +1 -1
  15. package/esm2015/lib/components/components.module.js +29 -12
  16. package/esm2015/lib/components/components.module.js.map +1 -1
  17. package/esm2015/lib/components/components.module.metadata.json +1 -1
  18. package/esm2015/lib/components/components.module.ngfactory.js.map +1 -1
  19. package/esm2015/lib/components/forms/abstract-input.component.js +26 -6
  20. package/esm2015/lib/components/forms/abstract-input.component.js.map +1 -1
  21. package/esm2015/lib/components/forms/abstract-input.component.metadata.json +1 -1
  22. package/esm2015/lib/components/forms/abstract-list-input.component.js +51 -6
  23. package/esm2015/lib/components/forms/abstract-list-input.component.js.map +1 -1
  24. package/esm2015/lib/components/forms/abstract-list-input.component.metadata.json +1 -1
  25. package/esm2015/lib/components/forms/abstract-value-input.component.js +46 -7
  26. package/esm2015/lib/components/forms/abstract-value-input.component.js.map +1 -1
  27. package/esm2015/lib/components/forms/abstract-value-input.component.metadata.json +1 -1
  28. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js +70 -0
  29. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -0
  30. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.metadata.json +1 -0
  31. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.ngfactory.js.map +1 -0
  32. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.scss.shim.ngstyle.js.map +1 -0
  33. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js +4 -7
  34. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  35. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.metadata.json +1 -1
  36. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js +8 -13
  37. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  38. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.metadata.json +1 -1
  39. package/esm2015/lib/components/forms/number-input/number-input.component.js +4 -7
  40. package/esm2015/lib/components/forms/number-input/number-input.component.js.map +1 -1
  41. package/esm2015/lib/components/forms/number-input/number-input.component.metadata.json +1 -1
  42. package/esm2015/lib/components/forms/password-input/password-input.component.js +5 -8
  43. package/esm2015/lib/components/forms/password-input/password-input.component.js.map +1 -1
  44. package/esm2015/lib/components/forms/password-input/password-input.component.metadata.json +1 -1
  45. package/esm2015/lib/components/forms/select-input/select-input.component.js +8 -5
  46. package/esm2015/lib/components/forms/select-input/select-input.component.js.map +1 -1
  47. package/esm2015/lib/components/forms/select-input/select-input.component.metadata.json +1 -1
  48. package/esm2015/lib/components/forms/string-input/string-input.component.js +4 -8
  49. package/esm2015/lib/components/forms/string-input/string-input.component.js.map +1 -1
  50. package/esm2015/lib/components/forms/string-input/string-input.component.metadata.json +1 -1
  51. package/esm2015/lib/components/forms/text-input/text-input.component.js +4 -7
  52. package/esm2015/lib/components/forms/text-input/text-input.component.js.map +1 -1
  53. package/esm2015/lib/components/forms/text-input/text-input.component.metadata.json +1 -1
  54. package/esm2015/lib/components/index.js +2 -1
  55. package/esm2015/lib/components/index.js.map +1 -1
  56. package/esm2015/lib/components/index.metadata.json +1 -1
  57. package/esm2015/lib/components/table/cell-editors.js.map +1 -1
  58. package/esm2015/lib/components/table/{cell-protal-ref.js → cell-portal-ref.js} +7 -3
  59. package/esm2015/lib/components/table/cell-portal-ref.js.map +1 -0
  60. package/esm2015/lib/components/table/{cell-protal-ref.metadata.json → cell-portal-ref.metadata.json} +1 -1
  61. package/esm2015/lib/components/table/column-model.js +66 -11
  62. package/esm2015/lib/components/table/column-model.js.map +1 -1
  63. package/esm2015/lib/components/table/column-model.metadata.json +1 -1
  64. package/esm2015/lib/components/table/mutable-cell-renderer.js +1 -0
  65. package/esm2015/lib/components/table/mutable-cell-renderer.js.map +1 -0
  66. package/esm2015/lib/components/table/mutable-cell-renderer.metadata.json +1 -0
  67. package/esm2015/lib/components/table/table-cell-renderer/table-cell-renderer.component.js +1 -1
  68. package/esm2015/lib/components/table/table-cell-renderer/table-cell-renderer.component.js.map +1 -1
  69. package/esm2015/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js +1 -1
  70. package/esm2015/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js.map +1 -1
  71. package/esm2015/lib/components/table/table-model.js +11 -10
  72. package/esm2015/lib/components/table/table-model.js.map +1 -1
  73. package/esm2015/lib/components/table/table-model.metadata.json +1 -1
  74. package/esm2015/lib/components/table/table.component.js +1 -1
  75. package/esm2015/lib/components/table/table.component.js.map +1 -1
  76. package/esm2015/lib/components/table/table.component.metadata.json +1 -1
  77. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +2 -7
  78. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  79. package/esm2015/lib/interaction/components/activity-container/activity-container.component.metadata.json +1 -1
  80. package/esm2015/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  81. package/esm2015/lib/place/place-component.js +1 -1
  82. package/esm2015/lib/place/place-component.js.map +1 -1
  83. package/esm2015/lib/place/place-router.js +2 -8
  84. package/esm2015/lib/place/place-router.js.map +1 -1
  85. package/esm2015/lib/place/place-router.metadata.json +1 -1
  86. package/esm2015/lib/place/place.module.ngfactory.js.map +1 -1
  87. package/esm2015/lib/place/route/parameter-decorators.js +2 -3
  88. package/esm2015/lib/place/route/parameter-decorators.js.map +1 -1
  89. package/esm2015/lib/place/route/parameter-decorators.metadata.json +1 -1
  90. package/esm5/coolon-angular-ui-powerups.js +53 -52
  91. package/esm5/coolon-angular-ui-powerups.js.map +1 -1
  92. package/esm5/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  93. package/esm5/lib/components/card-container/card-container.component.js +1 -1
  94. package/esm5/lib/components/components.module.js +29 -12
  95. package/esm5/lib/components/components.module.js.map +1 -1
  96. package/esm5/lib/components/components.module.ngfactory.js.map +1 -1
  97. package/esm5/lib/components/forms/abstract-input.component.js +34 -6
  98. package/esm5/lib/components/forms/abstract-input.component.js.map +1 -1
  99. package/esm5/lib/components/forms/abstract-list-input.component.js +56 -6
  100. package/esm5/lib/components/forms/abstract-list-input.component.js.map +1 -1
  101. package/esm5/lib/components/forms/abstract-value-input.component.js +51 -7
  102. package/esm5/lib/components/forms/abstract-value-input.component.js.map +1 -1
  103. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js +73 -0
  104. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -0
  105. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.ngfactory.js.map +1 -0
  106. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.scss.shim.ngstyle.js.map +1 -0
  107. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js +4 -7
  108. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  109. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js +8 -13
  110. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  111. package/esm5/lib/components/forms/number-input/number-input.component.js +4 -7
  112. package/esm5/lib/components/forms/number-input/number-input.component.js.map +1 -1
  113. package/esm5/lib/components/forms/password-input/password-input.component.js +5 -8
  114. package/esm5/lib/components/forms/password-input/password-input.component.js.map +1 -1
  115. package/esm5/lib/components/forms/select-input/select-input.component.js +8 -5
  116. package/esm5/lib/components/forms/select-input/select-input.component.js.map +1 -1
  117. package/esm5/lib/components/forms/string-input/string-input.component.js +4 -8
  118. package/esm5/lib/components/forms/string-input/string-input.component.js.map +1 -1
  119. package/esm5/lib/components/forms/text-input/text-input.component.js +4 -7
  120. package/esm5/lib/components/forms/text-input/text-input.component.js.map +1 -1
  121. package/esm5/lib/components/index.js +2 -1
  122. package/esm5/lib/components/index.js.map +1 -1
  123. package/esm5/lib/components/table/cell-editors.js.map +1 -1
  124. package/esm5/lib/components/table/{cell-protal-ref.js → cell-portal-ref.js} +7 -3
  125. package/esm5/lib/components/table/cell-portal-ref.js.map +1 -0
  126. package/esm5/lib/components/table/column-model.js +67 -11
  127. package/esm5/lib/components/table/column-model.js.map +1 -1
  128. package/esm5/lib/components/table/mutable-cell-renderer.js +1 -0
  129. package/esm5/lib/components/table/mutable-cell-renderer.js.map +1 -0
  130. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js +1 -1
  131. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js.map +1 -1
  132. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js +1 -1
  133. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js.map +1 -1
  134. package/esm5/lib/components/table/table-model.js +11 -11
  135. package/esm5/lib/components/table/table-model.js.map +1 -1
  136. package/esm5/lib/components/table/table.component.js +1 -1
  137. package/esm5/lib/components/table/table.component.js.map +1 -1
  138. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +2 -7
  139. package/esm5/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  140. package/esm5/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  141. package/esm5/lib/place/place-component.js +1 -1
  142. package/esm5/lib/place/place-component.js.map +1 -1
  143. package/esm5/lib/place/place-router.js +2 -8
  144. package/esm5/lib/place/place-router.js.map +1 -1
  145. package/esm5/lib/place/place.module.ngfactory.js.map +1 -1
  146. package/esm5/lib/place/route/parameter-decorators.js +2 -3
  147. package/esm5/lib/place/route/parameter-decorators.js.map +1 -1
  148. package/fesm2015/coolon-angular-ui-powerups.js +466 -247
  149. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  150. package/fesm5/coolon-angular-ui-powerups.js +503 -263
  151. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  152. package/lib/components/forms/abstract-input.component.d.ts +12 -3
  153. package/lib/components/forms/abstract-list-input.component.d.ts +10 -3
  154. package/lib/components/forms/abstract-value-input.component.d.ts +9 -3
  155. package/lib/components/forms/autocomplete-input/autocomplete-input.component.d.ts +25 -0
  156. package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +0 -2
  157. package/lib/components/forms/multiple-select-input/multiple-select-input.component.d.ts +8 -4
  158. package/lib/components/forms/number-input/number-input.component.d.ts +0 -2
  159. package/lib/components/forms/password-input/password-input.component.d.ts +0 -2
  160. package/lib/components/forms/select-input/select-input.component.d.ts +8 -2
  161. package/lib/components/forms/string-input/string-input.component.d.ts +1 -2
  162. package/lib/components/forms/text-input/text-input.component.d.ts +0 -2
  163. package/lib/components/index.d.ts +3 -1
  164. package/lib/components/table/cell-editors.d.ts +3 -3
  165. package/lib/components/table/{cell-protal-ref.d.ts → cell-portal-ref.d.ts} +4 -4
  166. package/lib/components/table/column-model.d.ts +18 -12
  167. package/lib/components/table/mutable-cell-renderer.d.ts +6 -0
  168. package/lib/components/table/table-cell-renderer/table-cell-renderer.component.d.ts +1 -1
  169. package/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.d.ts +1 -1
  170. package/lib/components/table/table-model.d.ts +15 -4
  171. package/package.json +4 -4
  172. package/esm2015/lib/components/table/cell-protal-ref.js.map +0 -1
  173. package/esm5/lib/components/table/cell-protal-ref.js.map +0 -1
@@ -9,18 +9,19 @@ import { MatTabsModule, MatTabGroup, MAT_TABS_CONFIG } from '@angular/material/t
9
9
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
10
10
  import { ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';
11
11
  import { CdkScrollableModule } from '@angular/cdk/scrolling';
12
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
12
13
  import { MatButtonModule } from '@angular/material/button';
13
14
  import { MatCheckboxModule } from '@angular/material/checkbox';
14
15
  import { MatIconModule } from '@angular/material/icon';
15
16
  import { MatTableModule } from '@angular/material/table';
16
- import { DelegatingValueModel, assert, UnaryCommand, lang, Dsl, GarbageCollector, Logger, TrackExternal, Command, FocusManager, Form, ListModel, StoreInListModel, ValueModel, StoreInValueModel, MutableValueModel, MultipleSelectionModel, MutableListModel, DirtyTrackingForm, DelegatingCommand, Deferred, Trace, Guard, DebugContext, Binding, Functions } from '@coolon/pectin';
17
+ import { MatTooltipModule } from '@angular/material/tooltip';
18
+ import { FaIconLibrary, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
19
+ import { fas } from '@fortawesome/free-solid-svg-icons';
20
+ import { DelegatingValueModel, assert, UnaryCommand, lang, Dsl, GarbageCollector, Logger, TrackExternal, Command, FocusManager, EventListenerList, Form, MutableListModel, Guard, Binding, DebugContext, MutableValueModel, ListModel, StoreInListModel, ValueModel, StoreInValueModel, MultipleSelectionModel, DirtyTrackingForm, DelegatingCommand, Deferred, Functions } from '@coolon/pectin';
21
+ import ___default, { isEqual, isNil } from 'lodash';
17
22
  import { assert as assert$1, Opts, lang as lang$1, Klass } from '@coolon/typescript-utilities';
18
23
  import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
19
- import ___default, { isEqual, isNil } from 'lodash';
20
24
  import produce from 'immer';
21
- import { FaIconLibrary, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
22
- import { fas } from '@fortawesome/free-solid-svg-icons';
23
- import { MatTooltipModule } from '@angular/material/tooltip';
24
25
  import { FlexModule, GridModule } from '@angular/flex-layout';
25
26
  import { MatDialogModule, MatDialog, MatDialogConfig, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';
26
27
  import { RouterModule, UrlSegment, Router, UrlSerializer, NavigationStart, NavigationEnd, NavigationError, NavigationCancel, RouterOutlet } from '@angular/router';
@@ -406,7 +407,7 @@ var CardContainerComponent = /** @class */ (function (_super) {
406
407
  Component({
407
408
  selector: 'aup-card-container',
408
409
  template: "<div class=\"card-container\">\n <ng-content></ng-content>\n\n <div class=\"add-card-container\" *ngIf=\"addCardCommand.enabled.value\" [pectinCommand]=\"addCardCommand\">\n <aup-icon 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\n</div>\n",
409
- styles: [":root{--aup-default-padding:var(--default-padding, 18px);--aup-default-background:white}.router-outlet-container>*{position:absolute;top:0;left:0;bottom:0;right:0}[no-tab-header]>mat-tab-header{display:none}[full-height-tabs] .mat-tab-body-wrapper,mat-tab-group.full-height-tabs .mat-tab-body-wrapper{flex:1}[full-height-tabs] .mat-tab-body-wrapper .mat-tab-body-content,[full-height-tabs] .mat-tab-body-wrapper mat-tab-body,mat-tab-group.full-height-tabs .mat-tab-body-wrapper .mat-tab-body-content,mat-tab-group.full-height-tabs .mat-tab-body-wrapper mat-tab-body{display:flex;flex-direction:column;justify-content:stretch}.dialog-interaction-context{max-width:95vw!important;max-height:95vh!important}.dialog-interaction-context mat-dialog-container{max-width:95vw!important;max-height:95vh!important;padding:0}.aup-popup-interaction-panel{background:var(--aup-default-background,#fff);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(.4,0,.2,1)}.aup-input-activity{padding:calc(var(--aup-default-padding)/2)}.aup-input-component{display:block}.aup-input-component input,.aup-input-component mat-form-field{width:100%}.aup-input-component input mat-hint.faux-error,.aup-input-component mat-form-field mat-hint.faux-error{color:#f44336}aup-table-cell-renderer>.aup-input-component .mat-form-field-flex{padding-top:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-infix{width:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-label-wrapper{display:none}aup-table{--default-column-gap:var(--column-gap, 24px);--resolved-row-hover-background-color:var(--row-hover-background-color, rgba(0, 0, 0, 0.05))}aup-table .mat-table td.mat-cell:first-of-type,aup-table .mat-table td.mat-footer-cell:first-of-type,aup-table .mat-table th.mat-header-cell:first-of-type{padding-left:0}aup-table .mat-table tr.enable-hover:hover{background-color:var(--resolved-row-hover-background-color)}aup-table .mat-table td.enable-cursor{cursor:pointer}aup-table aup-table-cell-renderer,aup-table aup-table-header-cell-renderer{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%;min-height:47px}aup-table aup-table-cell-renderer.first-column,aup-table aup-table-cell-renderer:not(.first-column),aup-table aup-table-header-cell-renderer.first-column,aup-table aup-table-header-cell-renderer:not(.first-column){padding-left:var(--default-column-gap)}aup-table aup-table-cell-renderer.fillCell{justify-content:stretch;padding-left:0!important}aup-table aup-table-cell-renderer.padChild>:first-child{padding-left:var(--default-column-gap);flex:1}:host{--resolved-card-gap:var(--card-gap, 16px);--resolved-card-width:var(--card-width, 300px);--resolved-card-height:var(--card-height, auto);--resolved-card-min-height:var(--card-min-height, auto);--resolved-card-background:var(--card-background, #fcfcfb);flex:1;display:block;background:var(--resolved-card-background)}.card-container{display:-ms-grid;display:grid;grid-template-columns:repeat(auto-fill,var(--resolved-card-width));grid-template-rows:repeat(auto-fit,minmax(0,var(--resolved-card-height)));grid-gap:var(--resolved-card-gap);box-sizing:border-box;padding:var(--resolved-card-gap);min-height:calc(var(--resolved-card-height) + 2 * var(--resolved-card-gap));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));max-width:100%}.add-card-container{width:var(--resolved-card-width);height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;border:2px dashed rgba(0,0,0,.1);border-radius:6px;font-weight:300;cursor:pointer;color:rgba(0,0,0,.54);background-color:rgba(255,255,255,.8);transition:280ms cubic-bezier(.4,0,.2,1)}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{transition:280ms cubic-bezier(.4,0,.2,1);border-color:transparent;background-color:#fff;color:rgba(0,0,0,.54)}.add-card-container:hover:hover{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.add-card-template-container{width:var(--resolved-card-width);height:var(--resolved-card-height);display:flex;flex-direction:column;align-items:stretch;justify-content:stretch}"]
410
+ styles: [":root{--aup-default-padding:var(--default-padding, 18px);--aup-default-background:white}.router-outlet-container>*{position:absolute;top:0;left:0;bottom:0;right:0}[no-tab-header]>mat-tab-header{display:none}[full-height-tabs] .mat-tab-body-wrapper,mat-tab-group.full-height-tabs .mat-tab-body-wrapper{flex:1}[full-height-tabs] .mat-tab-body-wrapper .mat-tab-body-content,[full-height-tabs] .mat-tab-body-wrapper mat-tab-body,mat-tab-group.full-height-tabs .mat-tab-body-wrapper .mat-tab-body-content,mat-tab-group.full-height-tabs .mat-tab-body-wrapper mat-tab-body{display:flex;flex-direction:column;justify-content:stretch}.dialog-interaction-context{max-width:95vw!important;max-height:95vh!important}.dialog-interaction-context mat-dialog-container{max-width:95vw!important;max-height:95vh!important;padding:0}.aup-popup-interaction-panel{background:var(--aup-default-background,#fff);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(.4,0,.2,1)}.aup-input-activity{padding:calc(var(--aup-default-padding)/2)}.aup-input-component{display:block}.aup-input-component input,.aup-input-component mat-form-field{width:100%}.aup-input-component input mat-hint.faux-error,.aup-input-component mat-form-field mat-hint.faux-error{color:#f44336}.aup-input-component.dense mat-form-field .mat-form-field-infix{border-top:none}.aup-input-component.dense mat-form-field .mat-form-field-flex{padding-top:0}.aup-input-component.dense mat-form-field .mat-form-field-wrapper{padding-bottom:0;border-bottom:0}.aup-input-component.dense mat-form-field .mat-form-field-underline{bottom:0}.aup-input-component.dense mat-form-field.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label-wrapper{display:none}.aup-input-component.dense mat-form-field.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(0)}aup-table-cell-renderer>.aup-input-component .mat-form-field-flex{padding-top:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-infix{width:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-label-wrapper{display:none}aup-table{--default-column-gap:var(--column-gap, 24px);--resolved-row-hover-background-color:var(--row-hover-background-color, rgba(0, 0, 0, 0.05))}aup-table .mat-table td.mat-cell:first-of-type,aup-table .mat-table td.mat-footer-cell:first-of-type,aup-table .mat-table th.mat-header-cell:first-of-type{padding-left:0}aup-table .mat-table tr.enable-hover:hover{background-color:var(--resolved-row-hover-background-color)}aup-table .mat-table td.enable-cursor{cursor:pointer}aup-table aup-table-cell-renderer,aup-table aup-table-header-cell-renderer{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%;min-height:47px}aup-table aup-table-cell-renderer.first-column,aup-table aup-table-cell-renderer:not(.first-column),aup-table aup-table-header-cell-renderer.first-column,aup-table aup-table-header-cell-renderer:not(.first-column){padding-left:var(--default-column-gap)}aup-table aup-table-cell-renderer.fillCell{justify-content:stretch;padding-left:0!important}aup-table aup-table-cell-renderer.padChild>:first-child{padding-left:var(--default-column-gap);flex:1}:host{--resolved-card-gap:var(--card-gap, 16px);--resolved-card-width:var(--card-width, 300px);--resolved-card-height:var(--card-height, auto);--resolved-card-min-height:var(--card-min-height, auto);--resolved-card-background:var(--card-background, #fcfcfb);flex:1;display:block;background:var(--resolved-card-background)}.card-container{display:-ms-grid;display:grid;grid-template-columns:repeat(auto-fill,var(--resolved-card-width));grid-template-rows:repeat(auto-fit,minmax(0,var(--resolved-card-height)));grid-gap:var(--resolved-card-gap);box-sizing:border-box;padding:var(--resolved-card-gap);min-height:calc(var(--resolved-card-height) + 2 * var(--resolved-card-gap));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));max-width:100%}.add-card-container{width:var(--resolved-card-width);height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;border:2px dashed rgba(0,0,0,.1);border-radius:6px;font-weight:300;cursor:pointer;color:rgba(0,0,0,.54);background-color:rgba(255,255,255,.8);transition:280ms cubic-bezier(.4,0,.2,1)}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{transition:280ms cubic-bezier(.4,0,.2,1);border-color:transparent;background-color:#fff;color:rgba(0,0,0,.54)}.add-card-container:hover:hover{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.add-card-template-container{width:var(--resolved-card-width);height:var(--resolved-card-height);display:flex;flex-direction:column;align-items:stretch;justify-content:stretch}"]
410
411
  }),
411
412
  __metadata("design:paramtypes", [])
412
413
  ], CardContainerComponent);
@@ -521,6 +522,8 @@ var AbstractInputComponent = /** @class */ (function (_super) {
521
522
  __extends(AbstractInputComponent, _super);
522
523
  function AbstractInputComponent() {
523
524
  var _this = _super.call(this) || this;
525
+ _this.onValueEditedListeners = new EventListenerList();
526
+ _this.dense = false;
524
527
  // TODO: fix this.
525
528
  // tslint:disable-next-line:no-output-native
526
529
  _this.focus = new EventEmitter();
@@ -570,7 +573,7 @@ var AbstractInputComponent = /** @class */ (function (_super) {
570
573
  };
571
574
  Object.defineProperty(AbstractInputComponent.prototype, "enabled", {
572
575
  get: function () {
573
- return this.inputModel.enabled;
576
+ return this.formValueModel.enabled;
574
577
  },
575
578
  enumerable: true,
576
579
  configurable: true
@@ -580,7 +583,7 @@ var AbstractInputComponent = /** @class */ (function (_super) {
580
583
  };
581
584
  Object.defineProperty(AbstractInputComponent.prototype, "errorList", {
582
585
  get: function () {
583
- return this.inputModel.errorList;
586
+ return this.formValueModel.errorList;
584
587
  },
585
588
  enumerable: true,
586
589
  configurable: true
@@ -594,19 +597,40 @@ var AbstractInputComponent = /** @class */ (function (_super) {
594
597
  });
595
598
  Object.defineProperty(AbstractInputComponent.prototype, "focusContext", {
596
599
  get: function () {
597
- return this.inputModel.focusContext;
600
+ return this.formValueModel.focusContext;
598
601
  },
599
602
  enumerable: true,
600
603
  configurable: true
601
604
  });
605
+ Object.defineProperty(AbstractInputComponent.prototype, "floatLabel", {
606
+ get: function () {
607
+ return this.dense ? 'never' : this.userFloatLabel;
608
+ },
609
+ enumerable: true,
610
+ configurable: true
611
+ });
612
+ Object.defineProperty(AbstractInputComponent.prototype, "showHint", {
613
+ get: function () {
614
+ return this.dense ? false : !!this.hint;
615
+ },
616
+ enumerable: true,
617
+ configurable: true
618
+ });
619
+ /**
620
+ * Invokes the callback when this components value is changed by a user edit.
621
+ * @param callback
622
+ */
623
+ AbstractInputComponent.prototype.onValueEdited = function (callback) {
624
+ return this.onValueEditedListeners.add(callback);
625
+ };
602
626
  __decorate([
603
627
  Input(),
604
628
  __metadata("design:type", String)
605
629
  ], AbstractInputComponent.prototype, "label", void 0);
606
630
  __decorate([
607
- Input(),
631
+ Input('floatLabel'),
608
632
  __metadata("design:type", String)
609
- ], AbstractInputComponent.prototype, "floatLabel", void 0);
633
+ ], AbstractInputComponent.prototype, "userFloatLabel", void 0);
610
634
  __decorate([
611
635
  Input(),
612
636
  __metadata("design:type", String)
@@ -615,6 +639,11 @@ var AbstractInputComponent = /** @class */ (function (_super) {
615
639
  Input(),
616
640
  __metadata("design:type", String)
617
641
  ], AbstractInputComponent.prototype, "placeholder", void 0);
642
+ __decorate([
643
+ HostBinding('class.dense'),
644
+ Input(),
645
+ __metadata("design:type", Object)
646
+ ], AbstractInputComponent.prototype, "dense", void 0);
618
647
  __decorate([
619
648
  Input('command.focus'),
620
649
  __metadata("design:type", Command)
@@ -683,7 +712,7 @@ var AbstractInputComponent = /** @class */ (function (_super) {
683
712
  var AbstractListInputComponent = /** @class */ (function (_super) {
684
713
  __extends(AbstractListInputComponent, _super);
685
714
  function AbstractListInputComponent() {
686
- var _this = _super !== null && _super.apply(this, arguments) || this;
715
+ var _this = _super.call(this) || this;
687
716
  /**
688
717
  * A backing model for all our @Input() valueModel properties which should be defined as follows.
689
718
  *
@@ -695,11 +724,61 @@ var AbstractListInputComponent = /** @class */ (function (_super) {
695
724
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
696
725
  */
697
726
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
698
- _this.inputModel = _this.registerDisposable(new Form.DelegatingListModel());
727
+ _this.formValueModel = _this.registerDisposable(new Form.DelegatingListModel());
728
+ _this.componentListModel = new MutableListModel();
729
+ _this.setValueIsInProgress = new Guard();
730
+ _this.valueChange = new EventEmitter();
731
+ var _a = Dsl.disposeWith(_this), when = _a.when, valueOf = _a.valueOf, chain = _a.chain;
732
+ var binding = new Binding.Identity(_this.formValueModel, _this.componentListModel);
733
+ var inExternalChange = valueOf.any(_this.setValueIsInProgress, chain(binding.direction).equals(Binding.Direction.RIGHT)).areTruthy();
734
+ when(_this.componentListModel).changes(function (is, was) {
735
+ _this.valueChange.emit(is);
736
+ _this.onValueEditedListeners.fire(function (l) { return l(is, was); });
737
+ }, {
738
+ initialValue: 'ignore',
739
+ // we never fire events during an external changes to the value. This allows
740
+ // the component to behave when used in the conventional angular
741
+ // fashion, i.e. [(value)]="..."
742
+ unless: inExternalChange
743
+ });
744
+ DebugContext.tag(_this.formValueModel, _this.constructor.name + ".formValueModel");
699
745
  return _this;
700
746
  }
747
+ Object.defineProperty(AbstractListInputComponent.prototype, "value", {
748
+ // We add support for simple direct display of values by allowing components to be used
749
+ // by `component.value = ...` This use of the component without a value model in tables
750
+ // and the like.
751
+ set: function (value) {
752
+ var _this = this;
753
+ this.setValueIsInProgress.whileTrue(function () {
754
+ if (!_this.listHolder) {
755
+ _this.listHolder = new MutableListModel(value);
756
+ _this.listModel = _this.listHolder;
757
+ }
758
+ else {
759
+ _this.listHolder.value = value;
760
+ }
761
+ });
762
+ },
763
+ enumerable: true,
764
+ configurable: true
765
+ });
766
+ __decorate([
767
+ Input(), TrackExternal({ delegateTo: 'formValueModel' }),
768
+ __metadata("design:type", Object)
769
+ ], AbstractListInputComponent.prototype, "listModel", void 0);
770
+ __decorate([
771
+ Input(),
772
+ __metadata("design:type", Array),
773
+ __metadata("design:paramtypes", [Array])
774
+ ], AbstractListInputComponent.prototype, "value", null);
775
+ __decorate([
776
+ Output(),
777
+ __metadata("design:type", Object)
778
+ ], AbstractListInputComponent.prototype, "valueChange", void 0);
701
779
  AbstractListInputComponent = __decorate([
702
- Component({ template: '' })
780
+ Component({ template: '' }),
781
+ __metadata("design:paramtypes", [])
703
782
  ], AbstractListInputComponent);
704
783
  return AbstractListInputComponent;
705
784
  }(AbstractInputComponent));
@@ -719,14 +798,58 @@ var AbstractValueInputComponent = /** @class */ (function (_super) {
719
798
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
720
799
  */
721
800
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
722
- _this.inputModel = _this.registerDisposable(new Form.DelegatingValueModel());
723
- _this.inputModel.onTransactionStart(function (tx) {
724
- tx.onRootTransactionFinalised(function () {
725
- console.log({ changed: tx.hasChanged() });
726
- });
801
+ _this.formValueModel = _this.registerDisposable(new Form.DelegatingValueModel());
802
+ _this.setValueInProgress = new Guard();
803
+ _this.componentValueModel = new MutableValueModel();
804
+ _this.valueChange = new EventEmitter();
805
+ var _a = Dsl.disposeWith(_this), when = _a.when, chain = _a.chain, valueOf = _a.valueOf;
806
+ var binding = new Binding.Identity(_this.formValueModel, _this.componentValueModel);
807
+ var inExternalChange = valueOf.any(_this.setValueInProgress, chain(binding.direction).equals(Binding.Direction.RIGHT)).areTruthy();
808
+ when(_this.componentValueModel).changes(function (is, was) {
809
+ _this.valueChange.emit(is);
810
+ _this.onValueEditedListeners.fire(function (l) { return l(is, was); });
811
+ }, {
812
+ initialValue: 'ignore',
813
+ // we never fire events during an external set value operation. This allows
814
+ // the component to behave when used in the conventional angular
815
+ // fashion, i.e. [(value)]="..."
816
+ unless: inExternalChange
727
817
  });
818
+ DebugContext.tag(_this.formValueModel, _this.constructor.name + ".formValueModel");
728
819
  return _this;
729
820
  }
821
+ Object.defineProperty(AbstractValueInputComponent.prototype, "value", {
822
+ // We add support for simple direct display of values by allowing components to be used
823
+ // by `component.value = ...` This use of the component without a value model in tables
824
+ // and the like.
825
+ set: function (value) {
826
+ var _this = this;
827
+ this.setValueInProgress.whileTrue(function () {
828
+ if (!_this.plainValueHolder) {
829
+ _this.plainValueHolder = new MutableValueModel(value);
830
+ _this.valueModel = _this.plainValueHolder;
831
+ }
832
+ else {
833
+ _this.plainValueHolder.value = value;
834
+ }
835
+ });
836
+ },
837
+ enumerable: true,
838
+ configurable: true
839
+ });
840
+ __decorate([
841
+ Input(), TrackExternal({ delegateTo: 'formValueModel' }),
842
+ __metadata("design:type", Object)
843
+ ], AbstractValueInputComponent.prototype, "valueModel", void 0);
844
+ __decorate([
845
+ Input(),
846
+ __metadata("design:type", Object),
847
+ __metadata("design:paramtypes", [Object])
848
+ ], AbstractValueInputComponent.prototype, "value", null);
849
+ __decorate([
850
+ Output(),
851
+ __metadata("design:type", Object)
852
+ ], AbstractValueInputComponent.prototype, "valueChange", void 0);
730
853
  AbstractValueInputComponent = __decorate([
731
854
  Component({ template: '' }),
732
855
  __metadata("design:paramtypes", [])
@@ -734,20 +857,85 @@ var AbstractValueInputComponent = /** @class */ (function (_super) {
734
857
  return AbstractValueInputComponent;
735
858
  }(AbstractInputComponent));
736
859
 
860
+ /**
861
+ * Using templates (not only supported for nil values:
862
+ * <aup-autocomplete-input [valueModel]="myModel" [options]="myOptions">
863
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
864
+ * </aup-autocomplete-input>
865
+ */
866
+ var AutocompleteInputComponent = /** @class */ (function (_super) {
867
+ __extends(AutocompleteInputComponent, _super);
868
+ function AutocompleteInputComponent() {
869
+ var _this = _super.call(this) || this;
870
+ _this.filterValue = new MutableValueModel();
871
+ _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
872
+ var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
873
+ var lowerCaseFilterValue = chain(_this.filterValue)
874
+ .map(function (v) { return ___default.isString(v) ? v.toLowerCase() : ''; });
875
+ _this.filteredOptions = chain(_this.optionsModel)
876
+ .select(function (option) {
877
+ return ___default.isEmpty(_this.filterValue.value) || _this.optionLabelFormat(option).toString().toLowerCase().includes(lowerCaseFilterValue.value);
878
+ }, { dependsOn: lowerCaseFilterValue });
879
+ return _this;
880
+ }
881
+ AutocompleteInputComponent.prototype.ngOnInit = function () {
882
+ };
883
+ AutocompleteInputComponent.prototype.formatOption = function (option) {
884
+ return this.optionLabelFormat(option);
885
+ };
886
+ AutocompleteInputComponent.prototype.updateFilter = function ($event) {
887
+ this.filterValue.value = $event;
888
+ };
889
+ AutocompleteInputComponent.prototype.onSelect = function ($event) {
890
+ this.valueModel.value = $event.option.value;
891
+ };
892
+ __decorate([
893
+ Input(), TrackExternal(),
894
+ __metadata("design:type", ListModel)
895
+ ], AutocompleteInputComponent.prototype, "optionsModel", void 0);
896
+ __decorate([
897
+ Input(), StoreInListModel('optionsModel'),
898
+ __metadata("design:type", Array)
899
+ ], AutocompleteInputComponent.prototype, "options", void 0);
900
+ __decorate([
901
+ Input(),
902
+ __metadata("design:type", Object)
903
+ ], AutocompleteInputComponent.prototype, "optionLabel", void 0);
904
+ __decorate([
905
+ Input(),
906
+ __metadata("design:type", Boolean)
907
+ ], AutocompleteInputComponent.prototype, "allowNil", void 0);
908
+ __decorate([
909
+ ContentChild('nilOptionTemplate'),
910
+ __metadata("design:type", TemplateRef)
911
+ ], AutocompleteInputComponent.prototype, "nilOptionTemplateRef", void 0);
912
+ __decorate([
913
+ Input(),
914
+ __metadata("design:type", Function)
915
+ ], AutocompleteInputComponent.prototype, "optionLabelFormat", void 0);
916
+ AutocompleteInputComponent = __decorate([
917
+ Component({
918
+ selector: 'aup-autocomplete-input',
919
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"string\"\n matInput\n [matAutocomplete]=\"autocomplete\"\n placeholder=\"{{placeholder}}\"\n [ngModel]=\"componentValueModel.value\"\n (ngModelChange)=\"updateFilter($event)\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-autocomplete #autocomplete [displayWith]=\"optionLabelFormat\" [autoActiveFirstOption]=\"true\" (optionSelected)=\"onSelect($event)\">\n <mat-option *ngFor=\"let option of filteredOptions.value; let i = index\"\n [value]=\"option\"\n >{{formatOption(option)}}</mat-option>\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n </mat-autocomplete>\n\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
920
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
921
+ }),
922
+ __metadata("design:paramtypes", [])
923
+ ], AutocompleteInputComponent);
924
+ return AutocompleteInputComponent;
925
+ }(AbstractValueInputComponent));
926
+
737
927
  var CheckboxInputComponent = /** @class */ (function (_super) {
738
928
  __extends(CheckboxInputComponent, _super);
739
929
  function CheckboxInputComponent() {
740
930
  var _this = _super.call(this) || this;
931
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
932
+ // valueModel: Form.ValueModelBase<boolean> | IMutableValueModel<boolean>;
741
933
  _this.color = 'accent';
742
934
  _this.labelPosition = 'after';
743
935
  return _this;
744
936
  }
745
937
  CheckboxInputComponent.prototype.ngOnInit = function () {
746
938
  };
747
- __decorate([
748
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
749
- __metadata("design:type", Object)
750
- ], CheckboxInputComponent.prototype, "valueModel", void 0);
751
939
  __decorate([
752
940
  Input(),
753
941
  __metadata("design:type", String)
@@ -759,28 +947,73 @@ var CheckboxInputComponent = /** @class */ (function (_super) {
759
947
  CheckboxInputComponent = __decorate([
760
948
  Component({
761
949
  selector: 'aup-checkbox-input',
762
- template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"valueModel.value\"\n [color]=\"color\"\n [labelPosition]=\"labelPosition\"\n [disabled]=\"!isEnabled()\"\n>{{label}}</mat-checkbox>\n<mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n<mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n",
763
- styles: [":host{display:inline-flex;flex-direction:column;margin-top:24px;margin-bottom:16px}mat-error,mat-hint{margin-top:4px;margin-left:24px;font-size:12px;font-weight:400;line-height:13.5px}"]
950
+ template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"componentValueModel.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",
951
+ styles: [":host{display:inline-flex;flex-direction:column;padding:24px 0 16px}:host.dense{padding:6px 0 2px}mat-error,mat-hint{margin-top:4px;margin-left:24px;font-size:12px;font-weight:400;line-height:13.5px}"]
764
952
  }),
765
953
  __metadata("design:paramtypes", [])
766
954
  ], CheckboxInputComponent);
767
955
  return CheckboxInputComponent;
768
956
  }(AbstractValueInputComponent));
769
957
 
958
+ /**
959
+ * Using templates:
960
+ * <aup-multiple-select-input [valueModel]="myModel" [options]="myOptions">
961
+ * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
962
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
963
+ * </aup-multiple-select_input>
964
+ */
965
+ var MultipleSelectInputComponent = /** @class */ (function (_super) {
966
+ __extends(MultipleSelectInputComponent, _super);
967
+ function MultipleSelectInputComponent() {
968
+ var _this = _super.call(this) || this;
969
+ _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
970
+ return _this;
971
+ }
972
+ MultipleSelectInputComponent.prototype.ngOnInit = function () {
973
+ };
974
+ __decorate([
975
+ Input(), TrackExternal(),
976
+ __metadata("design:type", ListModel)
977
+ ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
978
+ __decorate([
979
+ Input(), StoreInListModel('optionsModel'),
980
+ __metadata("design:type", Array)
981
+ ], MultipleSelectInputComponent.prototype, "options", void 0);
982
+ __decorate([
983
+ Input(),
984
+ __metadata("design:type", Object)
985
+ ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
986
+ __decorate([
987
+ ContentChild('optionTemplate'),
988
+ __metadata("design:type", TemplateRef)
989
+ ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
990
+ __decorate([
991
+ Input(),
992
+ __metadata("design:type", Function)
993
+ ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
994
+ MultipleSelectInputComponent = __decorate([
995
+ Component({
996
+ selector: 'aup-multiple-select-input',
997
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n multiple\n [(ngModel)]=\"componentListModel.value\"\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 optionsModel.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",
998
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
999
+ }),
1000
+ __metadata("design:paramtypes", [])
1001
+ ], MultipleSelectInputComponent);
1002
+ return MultipleSelectInputComponent;
1003
+ }(AbstractListInputComponent));
1004
+
770
1005
  var NumberInputComponent = /** @class */ (function (_super) {
771
1006
  __extends(NumberInputComponent, _super);
772
1007
  function NumberInputComponent() {
773
1008
  var _this = _super.call(this) || this;
1009
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1010
+ // valueModel: Form.ValueModelBase<number> | IMutableValueModel<number>;
774
1011
  _this.min = Number.MIN_SAFE_INTEGER;
775
1012
  _this.max = Number.MAX_SAFE_INTEGER;
776
1013
  return _this;
777
1014
  }
778
1015
  NumberInputComponent.prototype.ngOnInit = function () {
779
1016
  };
780
- __decorate([
781
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
782
- __metadata("design:type", Object)
783
- ], NumberInputComponent.prototype, "valueModel", void 0);
784
1017
  __decorate([
785
1018
  Input(),
786
1019
  __metadata("design:type", Object)
@@ -792,8 +1025,8 @@ var NumberInputComponent = /** @class */ (function (_super) {
792
1025
  NumberInputComponent = __decorate([
793
1026
  Component({
794
1027
  selector: 'aup-number-input',
795
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"number\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.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\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
796
- styles: [":host{display:block}input,mat-form-field{width:100%}input mat-hint.faux-error,mat-form-field mat-hint.faux-error{color:#f44336}:host-context(aup-table-cell-renderer) mat-form-field div.mat-form-field-infix{width:auto}"]
1028
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"number\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"componentValueModel.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</mat-form-field>\n",
1029
+ styles: [""]
797
1030
  }),
798
1031
  __metadata("design:paramtypes", [])
799
1032
  ], NumberInputComponent);
@@ -802,26 +1035,31 @@ var NumberInputComponent = /** @class */ (function (_super) {
802
1035
 
803
1036
  var PasswordInputComponent = /** @class */ (function (_super) {
804
1037
  __extends(PasswordInputComponent, _super);
1038
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1039
+ // valueModel: Form.ValueModelBase<string> | IMutableValueModel<string>;
805
1040
  function PasswordInputComponent() {
806
1041
  return _super.call(this) || this;
807
1042
  }
808
1043
  PasswordInputComponent.prototype.ngOnInit = function () {
809
1044
  };
810
- __decorate([
811
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
812
- __metadata("design:type", Object)
813
- ], PasswordInputComponent.prototype, "valueModel", void 0);
814
1045
  PasswordInputComponent = __decorate([
815
1046
  Component({
816
1047
  selector: 'aup-password-input',
817
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"password\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n",
818
- styles: [":host{display:block}input,mat-form-field{width:100%}input mat-hint.faux-error,mat-form-field mat-hint.faux-error{color:#f44336}:host-context(aup-table-cell-renderer) mat-form-field div.mat-form-field-infix{width:auto}"]
1048
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"password\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"componentValueModel.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",
1049
+ styles: [""]
819
1050
  }),
820
1051
  __metadata("design:paramtypes", [])
821
1052
  ], PasswordInputComponent);
822
1053
  return PasswordInputComponent;
823
1054
  }(AbstractValueInputComponent));
824
1055
 
1056
+ /**
1057
+ * Using templates:
1058
+ * <aup-select-input [valueModel]="myModel" [options]="myOptions">
1059
+ * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1060
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1061
+ * </aup-select_input>
1062
+ */
825
1063
  var SelectInputComponent = /** @class */ (function (_super) {
826
1064
  __extends(SelectInputComponent, _super);
827
1065
  function SelectInputComponent() {
@@ -831,10 +1069,6 @@ var SelectInputComponent = /** @class */ (function (_super) {
831
1069
  }
832
1070
  SelectInputComponent.prototype.ngOnInit = function () {
833
1071
  };
834
- __decorate([
835
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
836
- __metadata("design:type", Object)
837
- ], SelectInputComponent.prototype, "valueModel", void 0);
838
1072
  __decorate([
839
1073
  Input(), TrackExternal(),
840
1074
  __metadata("design:type", ListModel)
@@ -866,7 +1100,7 @@ var SelectInputComponent = /** @class */ (function (_super) {
866
1100
  SelectInputComponent = __decorate([
867
1101
  Component({
868
1102
  selector: 'aup-select-input',
869
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n <mat-option *ngFor=\"let option of optionsModel.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=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
1103
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"componentValueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\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 optionsModel.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",
870
1104
  styles: [":host{display:inline-block}mat-form-field{width:100%}"]
871
1105
  }),
872
1106
  __metadata("design:paramtypes", [])
@@ -880,17 +1114,13 @@ var StringInputComponent = /** @class */ (function (_super) {
880
1114
  var _this = _super.call(this) || this;
881
1115
  var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
882
1116
  _this.clearCommand = Command.create(function () {
883
- _this.valueModel.value = null;
1117
+ _this.componentValueModel.value = null;
884
1118
  });
885
- _this.clearCommand.disableWhile(chain.stringValue(_this.valueModel).isBlank());
1119
+ _this.clearCommand.disableWhile(chain.stringValue(_this.componentValueModel).isBlank());
886
1120
  return _this;
887
1121
  }
888
1122
  StringInputComponent.prototype.ngOnInit = function () {
889
1123
  };
890
- __decorate([
891
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
892
- __metadata("design:type", Object)
893
- ], StringInputComponent.prototype, "valueModel", void 0);
894
1124
  __decorate([
895
1125
  Input(), TrackExternal({ defaultValue: false }),
896
1126
  __metadata("design:type", ValueModel)
@@ -902,8 +1132,8 @@ var StringInputComponent = /** @class */ (function (_super) {
902
1132
  StringInputComponent = __decorate([
903
1133
  Component({
904
1134
  selector: 'aup-string-input',
905
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <button mat-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",
906
- styles: [":host{display:block}input,mat-form-field{width:100%}input mat-hint.faux-error,mat-form-field mat-hint.faux-error{color:#f44336}:host-context(aup-table-cell-renderer) mat-form-field div.mat-form-field-infix{width:auto}button[disabled]{visibility:hidden}"]
1135
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"componentValueModel.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 <button mat-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",
1136
+ styles: ["button[disabled]{visibility:hidden}"]
907
1137
  }),
908
1138
  __metadata("design:paramtypes", [])
909
1139
  ], StringInputComponent);
@@ -914,16 +1144,14 @@ var TextInputComponent = /** @class */ (function (_super) {
914
1144
  __extends(TextInputComponent, _super);
915
1145
  function TextInputComponent() {
916
1146
  var _this = _super.call(this) || this;
1147
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1148
+ // valueModel: Form.ValueModelBase<string> | IMutableValueModel<string>;
917
1149
  _this.rows = 2;
918
1150
  return _this;
919
1151
  // const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
920
1152
  }
921
1153
  TextInputComponent.prototype.ngOnInit = function () {
922
1154
  };
923
- __decorate([
924
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
925
- __metadata("design:type", Object)
926
- ], TextInputComponent.prototype, "valueModel", void 0);
927
1155
  __decorate([
928
1156
  Input(),
929
1157
  __metadata("design:type", Object)
@@ -935,14 +1163,56 @@ var TextInputComponent = /** @class */ (function (_super) {
935
1163
  TextInputComponent = __decorate([
936
1164
  Component({
937
1165
  selector: 'aup-text-input',
938
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <textarea matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.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=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n",
939
- styles: [":host{display:block}input,mat-form-field{width:100%}input mat-hint.faux-error,mat-form-field mat-hint.faux-error{color:#f44336}:host-context(aup-table-cell-renderer) mat-form-field div.mat-form-field-infix{width:auto}button[disabled]{visibility:hidden}textarea{overflow:auto}"]
1166
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <textarea matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"componentValueModel.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",
1167
+ styles: ["button[disabled]{visibility:hidden}textarea{overflow:auto}"]
940
1168
  }),
941
1169
  __metadata("design:paramtypes", [])
942
1170
  ], TextInputComponent);
943
1171
  return TextInputComponent;
944
1172
  }(AbstractValueInputComponent));
945
1173
 
1174
+ var IconComponent = /** @class */ (function () {
1175
+ function IconComponent() {
1176
+ }
1177
+ Object.defineProperty(IconComponent.prototype, "icon", {
1178
+ get: function () {
1179
+ return this._icon;
1180
+ },
1181
+ set: function (iconName) {
1182
+ this._icon = iconName;
1183
+ if (!iconName) {
1184
+ this.errorMessage = 'icon is nil';
1185
+ this.prefix = undefined;
1186
+ return;
1187
+ }
1188
+ var colonIndex = iconName.indexOf(':');
1189
+ if (colonIndex > 0) {
1190
+ this.prefix = this.icon.slice(0, colonIndex);
1191
+ this.suffix = this.icon.slice(colonIndex + 1);
1192
+ }
1193
+ if (this.prefix) {
1194
+ this.errorMessage = "Unknown icon \"" + iconName + "\"";
1195
+ }
1196
+ this.errorMessage = "Unknown icon prefix \"" + this.prefix + "\"";
1197
+ },
1198
+ enumerable: true,
1199
+ configurable: true
1200
+ });
1201
+ __decorate([
1202
+ Input(),
1203
+ __metadata("design:type", String),
1204
+ __metadata("design:paramtypes", [String])
1205
+ ], IconComponent.prototype, "icon", null);
1206
+ IconComponent = __decorate([
1207
+ Component({
1208
+ selector: 'aup-icon',
1209
+ template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"'svg'\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"'mat'\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"'fab'\"\n class=\"faIconWrapper\">\n <fa-icon [icon]=\"suffix\">\n </fa-icon>\n </div>\n\n <mat-icon *ngSwitchDefault\n [matTooltip]=\"errorMessage\">\n bug_report\n </mat-icon>\n\n</ng-container>\n\n",
1210
+ styles: [":host{display:inline-flex;width:24px}fa-icon{vertical-align:middle}.faIconWrapper{text-align:center;width:24px;height:24px}.svgIcon{width:24px;height:24px}:host(.mat-chip-remove) mat-icon{font-size:18px}mat-icon{width:inherit;height:inherit}"]
1211
+ })
1212
+ ], IconComponent);
1213
+ return IconComponent;
1214
+ }());
1215
+
946
1216
  var NoopComponent = /** @class */ (function () {
947
1217
  function NoopComponent() {
948
1218
  }
@@ -1153,6 +1423,7 @@ var CellHeaderPortalRef = /** @class */ (function (_super) {
1153
1423
  assert$1.isTruthy(host);
1154
1424
  host[HEADER_CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
1155
1425
  };
1426
+ // @Trace()
1156
1427
  CellHeaderPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
1157
1428
  this.initialiseHeader(portalComponent, host.column);
1158
1429
  };
@@ -1176,13 +1447,15 @@ var ComponentCellRendererPortalRef = /** @class */ (function (_super) {
1176
1447
  ComponentCellRendererPortalRef.prototype.initialiseHost = function (host, columnModel) {
1177
1448
  host[CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
1178
1449
  };
1450
+ // @Trace()
1179
1451
  ComponentCellRendererPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
1180
1452
  host[PORTAL_RENDERER_COMPONENT] = portalComponent;
1181
- this.updateComponent(portalComponent, host.getRowData());
1453
+ this.updateComponent(portalComponent, host.getRowData(), true);
1182
1454
  };
1455
+ // @Trace()
1183
1456
  ComponentCellRendererPortalRef.prototype.pushState = function (host) {
1184
1457
  if (host[PORTAL_RENDERER_COMPONENT]) {
1185
- this.updateComponent(host[PORTAL_RENDERER_COMPONENT], host.getRowData());
1458
+ this.updateComponent(host[PORTAL_RENDERER_COMPONENT], host.getRowData(), false);
1186
1459
  }
1187
1460
  };
1188
1461
  return ComponentCellRendererPortalRef;
@@ -1224,6 +1497,7 @@ var TemplateCellRendererPortalRef = /** @class */ (function (_super) {
1224
1497
  TemplateCellRendererPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
1225
1498
  // don't care
1226
1499
  };
1500
+ // @Trace()
1227
1501
  TemplateCellRendererPortalRef.prototype.pushState = function (host) {
1228
1502
  host[CELL_RENDERER_PORTAL] = this.createPortal(host.getRowData());
1229
1503
  host.fillCell = this.fillCell;
@@ -1415,6 +1689,7 @@ var SelectHeaderCellRendererComponent = /** @class */ (function (_super) {
1415
1689
  var noop = function () {
1416
1690
  };
1417
1691
  var ɵ0 = noop;
1692
+ var CELL_RENDERER_COMPONENT_ROW_CACHE = Symbol("aup-cell-renderer:row-data-cache");
1418
1693
  var ColumnModel = /** @class */ (function () {
1419
1694
  function ColumnModel(columnId, defaults) {
1420
1695
  this.columnId = columnId;
@@ -1505,24 +1780,66 @@ var ColumnModel = /** @class */ (function () {
1505
1780
  }());
1506
1781
  var PropertyColumnModel = /** @class */ (function (_super) {
1507
1782
  __extends(PropertyColumnModel, _super);
1508
- function PropertyColumnModel(property, defaults) {
1509
- var _this = _super.call(this, property.toString(), defaults) || this;
1783
+ function PropertyColumnModel(id, property, defaults) {
1784
+ var _this = _super.call(this, id, defaults) || this;
1510
1785
  _this.property = property;
1511
1786
  _this._format = function (value) { return value; };
1512
1787
  _this.cellRenderer(DefaultCellRendererComponent);
1513
1788
  return _this;
1514
1789
  }
1515
- PropertyColumnModel.prototype.cellRenderer = function (componentType) {
1790
+ PropertyColumnModel.prototype.cellRenderer = function (componentType, onComponentInitOrOptions) {
1516
1791
  var _this = this;
1517
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
1792
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData, firstTime) {
1793
+ if (firstTime) {
1794
+ if (___default.isFunction(onComponentInitOrOptions)) {
1795
+ onComponentInitOrOptions(component);
1796
+ }
1797
+ else {
1798
+ if (___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onComponentInit)) {
1799
+ onComponentInitOrOptions.onComponentInit(component);
1800
+ }
1801
+ }
1802
+ }
1518
1803
  component.value = _this._format(rowData.row[_this.property]);
1804
+ if (!___default.isFunction(onComponentInitOrOptions) && ___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onRowUpdate)) {
1805
+ onComponentInitOrOptions.onRowUpdate(component, rowData.row);
1806
+ }
1519
1807
  }));
1520
1808
  return this;
1521
1809
  };
1522
- PropertyColumnModel.prototype.cellEditor = function (editor, validatorsOrInitialiser, initialiseComponent) {
1810
+ PropertyColumnModel.prototype.mutableCellRenderer = function (componentType, options) {
1811
+ var _this = this;
1812
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData, firstTime) {
1813
+ // keep a local copy most recent row value so it's available to teh
1814
+ // edit callback without having to add/remove subscribers all the time.
1815
+ component[CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
1816
+ var disableEditCallback = false;
1817
+ if (firstTime) {
1818
+ if (___default.isFunction(options === null || options === void 0 ? void 0 : options.onComponentInit)) {
1819
+ options.onComponentInit(component);
1820
+ }
1821
+ // install our edit callback
1822
+ component.onValueEdited(function (is, was) {
1823
+ if (!disableEditCallback) {
1824
+ options.onValueEdit(component[CELL_RENDERER_COMPONENT_ROW_CACHE], is, was);
1825
+ }
1826
+ });
1827
+ }
1828
+ // now push the value the component and disable the callback just incase the component misbehaves
1829
+ // and fires a value change during the operation.
1830
+ disableEditCallback = true;
1831
+ component.value = rowData.row[_this.property];
1832
+ disableEditCallback = false;
1833
+ if (!___default.isFunction(options) && ___default.isFunction(options === null || options === void 0 ? void 0 : options.onRowUpdate)) {
1834
+ options.onRowUpdate(component, rowData.row);
1835
+ }
1836
+ }));
1837
+ return this;
1838
+ };
1839
+ PropertyColumnModel.prototype.cellEditor = function (editor, validatorsOrInitialiser, onComponentInit) {
1523
1840
  var _this = this;
1524
1841
  var validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
1525
- var initialiser = ___default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
1842
+ var initialiser = ___default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
1526
1843
  this.configureCellEditor(new CellEditorPortalRef(editor, function (component, editSession) {
1527
1844
  var formValueModel = editSession.form.pluck(_this.property);
1528
1845
  if (validators) {
@@ -1547,8 +1864,8 @@ var PropertyColumnModel = /** @class */ (function (_super) {
1547
1864
  }(ColumnModel));
1548
1865
  var ListPropertyColumnModel = /** @class */ (function (_super) {
1549
1866
  __extends(ListPropertyColumnModel, _super);
1550
- function ListPropertyColumnModel(property, defaults) {
1551
- var _this = _super.call(this, property.toString(), defaults) || this;
1867
+ function ListPropertyColumnModel(id, property, defaults) {
1868
+ var _this = _super.call(this, id, defaults) || this;
1552
1869
  _this.property = property;
1553
1870
  _this._format = function (value) { return value.map(function (v) { return v === null || v === void 0 ? void 0 : v.toString(); }).join(', '); };
1554
1871
  _this.cellRenderer(DefaultCellRendererComponent);
@@ -1595,10 +1912,23 @@ var CustomValueColumnModel = /** @class */ (function (_super) {
1595
1912
  _this.cellRenderer(DefaultCellRendererComponent);
1596
1913
  return _this;
1597
1914
  }
1598
- CustomValueColumnModel.prototype.cellRenderer = function (componentType) {
1915
+ CustomValueColumnModel.prototype.cellRenderer = function (componentType, onComponentInitOrOptions) {
1599
1916
  var _this = this;
1600
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
1917
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData, firstTime) {
1918
+ if (firstTime) {
1919
+ if (___default.isFunction(onComponentInitOrOptions)) {
1920
+ onComponentInitOrOptions(component);
1921
+ }
1922
+ else {
1923
+ if (___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onComponentInit)) {
1924
+ onComponentInitOrOptions.onComponentInit(component);
1925
+ }
1926
+ }
1927
+ }
1601
1928
  component.value = _this.getValue(rowData.row);
1929
+ if (!___default.isFunction(onComponentInitOrOptions) && ___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onRowUpdate)) {
1930
+ onComponentInitOrOptions.onRowUpdate(component, rowData.row);
1931
+ }
1602
1932
  }));
1603
1933
  return this;
1604
1934
  };
@@ -1771,6 +2101,9 @@ var TableModel = /** @class */ (function () {
1771
2101
  this._editorSessions = new MutableListModel();
1772
2102
  this.rowClassNamePredicates = [];
1773
2103
  this._createForm = function (row) { return new DirtyTrackingForm(); };
2104
+ this.trackBy = function (index, item) {
2105
+ return _this.identityOf ? _this.identityOf(item) : index;
2106
+ };
1774
2107
  this.identityOf = sourceOfTruth.identityOf;
1775
2108
  var _a = Dsl.disposeWith(this._garbage), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
1776
2109
  this._columnsById = chain(this._columns).indexBy('columnId');
@@ -1782,7 +2115,7 @@ var TableModel = /** @class */ (function () {
1782
2115
  this.dataSource = chain(this.sourceOfTruth).replaceAll(this.rowsBeingEdited);
1783
2116
  this.firstEditableColumn = chain(this.columns).select(function (c) { return c.hasEditorPortal(); }).first();
1784
2117
  this.hasColumnsWithRowSelectionExplicitlyEnabled = chain(this._columns).findIndex(function (column) { return column.isRowSelectionExplicitlyEnabled(); }).isGreaterThanOrEqualTo(0);
1785
- this.addRowClass("enable-hover", function () { return _this.isRowSelectionEnabled(); });
2118
+ this.addRowClass('enable-hover', function () { return _this.isRowSelectionEnabled(); });
1786
2119
  }
1787
2120
  TableModel_1 = TableModel;
1788
2121
  TableModel.fromList = function (sourceOfTruth, builder) {
@@ -1797,12 +2130,6 @@ var TableModel = /** @class */ (function () {
1797
2130
  enumerable: true,
1798
2131
  configurable: true
1799
2132
  });
1800
- TableModel.prototype.getTrackByFunction = function () {
1801
- var _this = this;
1802
- return function (index, item) {
1803
- return _this.identityOf ? _this.identityOf(item) : index;
1804
- };
1805
- };
1806
2133
  Object.defineProperty(TableModel.prototype, "columns", {
1807
2134
  get: function () {
1808
2135
  return this._columns.readonly;
@@ -1810,11 +2137,11 @@ var TableModel = /** @class */ (function () {
1810
2137
  enumerable: true,
1811
2138
  configurable: true
1812
2139
  });
1813
- TableModel.prototype.pluck = function (property) {
1814
- return this.addColumn(new PropertyColumnModel(property, this));
2140
+ TableModel.prototype.pluck = function (property, options) {
2141
+ return this.addColumn(new PropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1815
2142
  };
1816
- TableModel.prototype.pluckList = function (property) {
1817
- return this.addColumn(new ListPropertyColumnModel(property, this));
2143
+ TableModel.prototype.pluckList = function (property, options) {
2144
+ return this.addColumn(new ListPropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1818
2145
  };
1819
2146
  TableModel.prototype.addSelectionColumn = function (selectionModel) {
1820
2147
  assert.isNil(this.selectionColumnModel);
@@ -1828,6 +2155,9 @@ var TableModel = /** @class */ (function () {
1828
2155
  TableModel.prototype.addCustomColumn = function (columnId, dataAccessor) {
1829
2156
  return this.addColumn(new CustomValueColumnModel(columnId, this, dataAccessor));
1830
2157
  };
2158
+ TableModel.prototype.addComponentColumn = function (columnId, component, onComponentInitOrOptions) {
2159
+ return this.addColumn(new CustomValueColumnModel(columnId, this, function (row) { return row; })).cellRenderer(component, onComponentInitOrOptions);
2160
+ };
1831
2161
  TableModel.prototype.addTemplateColumn = function (columnId) {
1832
2162
  return this.addColumn(new CustomTemplateColumnModel(columnId, this));
1833
2163
  };
@@ -1979,7 +2309,7 @@ var TableComponent = /** @class */ (function (_super) {
1979
2309
  TableComponent = __decorate([
1980
2310
  Component({
1981
2311
  selector: 'aup-table',
1982
- template: "<table mat-table [dataSource]=\"tableModel.dataSource.value\" [trackBy]=\"tableModel.getTrackByFunction()\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\" matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef>\n <aup-table-header-cell-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-column]=\"first\"\n [class.last-column]=\"last\"\n ></aup-table-header-cell-renderer>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"onCellClicked(column, row)\" [class.enable-cursor]=\"tableModel.isRowSelectionEnabledFor(column)\">\n <aup-table-cell-renderer [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.first-column]=\"first\"\n [class.last-column]=\"last\"\n ></aup-table-cell-renderer>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value;\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n ></tr>\n\n</table>\n",
2312
+ template: "<table mat-table [dataSource]=\"tableModel.dataSource.value\" [trackBy]=\"tableModel.trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\" matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef>\n <aup-table-header-cell-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-column]=\"first\"\n [class.last-column]=\"last\"\n ></aup-table-header-cell-renderer>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"onCellClicked(column, row)\" [class.enable-cursor]=\"tableModel.isRowSelectionEnabledFor(column)\">\n <aup-table-cell-renderer [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.first-column]=\"first\"\n [class.last-column]=\"last\"\n ></aup-table-cell-renderer>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\" [attr.trackBy]=\"tableModel.trackBy(i, row)\"\n ></tr>\n\n</table>\n",
1983
2313
  styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{flex:1}"]
1984
2314
  }),
1985
2315
  __metadata("design:paramtypes", [])
@@ -2247,100 +2577,6 @@ var VerticalFocusContainerComponent = /** @class */ (function (_super) {
2247
2577
  return VerticalFocusContainerComponent;
2248
2578
  }(FocusContainerComponent));
2249
2579
 
2250
- var MultipleSelectInputComponent = /** @class */ (function (_super) {
2251
- __extends(MultipleSelectInputComponent, _super);
2252
- function MultipleSelectInputComponent() {
2253
- var _this = _super.call(this) || this;
2254
- _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
2255
- return _this;
2256
- }
2257
- MultipleSelectInputComponent.prototype.ngOnInit = function () {
2258
- };
2259
- __decorate([
2260
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
2261
- __metadata("design:type", Object)
2262
- ], MultipleSelectInputComponent.prototype, "listModel", void 0);
2263
- __decorate([
2264
- Input(), TrackExternal(),
2265
- __metadata("design:type", ListModel)
2266
- ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
2267
- __decorate([
2268
- Input(), StoreInListModel('optionsModel'),
2269
- __metadata("design:type", Array)
2270
- ], MultipleSelectInputComponent.prototype, "options", void 0);
2271
- __decorate([
2272
- Input(),
2273
- __metadata("design:type", Object)
2274
- ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
2275
- __decorate([
2276
- Input(),
2277
- __metadata("design:type", Boolean)
2278
- ], MultipleSelectInputComponent.prototype, "allowNil", void 0);
2279
- __decorate([
2280
- ContentChild('optionTemplate'),
2281
- __metadata("design:type", TemplateRef)
2282
- ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
2283
- __decorate([
2284
- ContentChild('nilOptionTemplate'),
2285
- __metadata("design:type", TemplateRef)
2286
- ], MultipleSelectInputComponent.prototype, "nilOptionTemplateRef", void 0);
2287
- __decorate([
2288
- Input(),
2289
- __metadata("design:type", Function)
2290
- ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
2291
- MultipleSelectInputComponent = __decorate([
2292
- Component({
2293
- selector: 'aup-multiple-select-input',
2294
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n multiple\n [(ngModel)]=\"listModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n <mat-option *ngFor=\"let option of optionsModel.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=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
2295
- styles: [":host{display:inline-block}mat-form-field{width:100%}"]
2296
- }),
2297
- __metadata("design:paramtypes", [])
2298
- ], MultipleSelectInputComponent);
2299
- return MultipleSelectInputComponent;
2300
- }(AbstractListInputComponent));
2301
-
2302
- var IconComponent = /** @class */ (function () {
2303
- function IconComponent() {
2304
- }
2305
- Object.defineProperty(IconComponent.prototype, "icon", {
2306
- get: function () {
2307
- return this._icon;
2308
- },
2309
- set: function (iconName) {
2310
- this._icon = iconName;
2311
- if (!iconName) {
2312
- this.errorMessage = 'icon is nil';
2313
- this.prefix = undefined;
2314
- return;
2315
- }
2316
- var colonIndex = iconName.indexOf(':');
2317
- if (colonIndex > 0) {
2318
- this.prefix = this.icon.slice(0, colonIndex);
2319
- this.suffix = this.icon.slice(colonIndex + 1);
2320
- }
2321
- if (this.prefix) {
2322
- this.errorMessage = "Unknown icon \"" + iconName + "\"";
2323
- }
2324
- this.errorMessage = "Unknown icon prefix \"" + this.prefix + "\"";
2325
- },
2326
- enumerable: true,
2327
- configurable: true
2328
- });
2329
- __decorate([
2330
- Input(),
2331
- __metadata("design:type", String),
2332
- __metadata("design:paramtypes", [String])
2333
- ], IconComponent.prototype, "icon", null);
2334
- IconComponent = __decorate([
2335
- Component({
2336
- selector: 'aup-icon',
2337
- template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"'svg'\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"'mat'\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"'fab'\"\n class=\"faIconWrapper\">\n <fa-icon [icon]=\"suffix\">\n </fa-icon>\n </div>\n\n <mat-icon *ngSwitchDefault\n [matTooltip]=\"errorMessage\">\n bug_report\n </mat-icon>\n\n</ng-container>\n\n",
2338
- styles: [":host{display:inline-flex;width:24px}fa-icon{vertical-align:middle}.faIconWrapper{text-align:center;width:24px;height:24px}.svgIcon{width:24px;height:24px}:host(.mat-chip-remove) mat-icon{font-size:18px}mat-icon{width:inherit;height:inherit}"]
2339
- })
2340
- ], IconComponent);
2341
- return IconComponent;
2342
- }());
2343
-
2344
2580
  var ComponentsModule = /** @class */ (function () {
2345
2581
  function ComponentsModule(faIconLibrary) {
2346
2582
  faIconLibrary.addIconPacks(fas);
@@ -2359,6 +2595,8 @@ var ComponentsModule = /** @class */ (function () {
2359
2595
  TextInputComponent,
2360
2596
  PasswordInputComponent,
2361
2597
  SelectInputComponent,
2598
+ MultipleSelectInputComponent,
2599
+ AutocompleteInputComponent,
2362
2600
  CheckboxInputComponent,
2363
2601
  ScrollContainerComponent,
2364
2602
  NoopComponent,
@@ -2378,7 +2616,6 @@ var ComponentsModule = /** @class */ (function () {
2378
2616
  SelectHeaderCellRendererComponent,
2379
2617
  DefaultHeaderCellRendererComponent,
2380
2618
  TableHeaderCellRendererComponent,
2381
- MultipleSelectInputComponent,
2382
2619
  IconComponent,
2383
2620
  SectionHeaderComponent
2384
2621
  ],
@@ -2398,7 +2635,8 @@ var ComponentsModule = /** @class */ (function () {
2398
2635
  PortalModule,
2399
2636
  CdkScrollableModule,
2400
2637
  FontAwesomeModule,
2401
- MatTooltipModule
2638
+ MatTooltipModule,
2639
+ MatAutocompleteModule
2402
2640
  ],
2403
2641
  exports: [
2404
2642
  NumberInputComponent,
@@ -2407,6 +2645,8 @@ var ComponentsModule = /** @class */ (function () {
2407
2645
  PasswordInputComponent,
2408
2646
  CheckboxInputComponent,
2409
2647
  SelectInputComponent,
2648
+ MultipleSelectInputComponent,
2649
+ AutocompleteInputComponent,
2410
2650
  ScrollContainerComponent,
2411
2651
  NoopComponent,
2412
2652
  SwitchCaseComponent,
@@ -2419,12 +2659,23 @@ var ComponentsModule = /** @class */ (function () {
2419
2659
  TableComponent,
2420
2660
  EditRowControls,
2421
2661
  ColumnTemplateDirective,
2422
- MultipleSelectInputComponent,
2423
2662
  IconComponent,
2424
2663
  SectionHeaderComponent
2425
2664
  ],
2426
2665
  providers: [
2427
- FocusBindingFactory,
2666
+ FocusBindingFactory
2667
+ // {
2668
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
2669
+ // type: 'string',
2670
+ // editorClass: StringInputComponent
2671
+ // }, multi: true
2672
+ // },
2673
+ // {
2674
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
2675
+ // type: 'number',
2676
+ // editorClass: NumberInputComponent
2677
+ // }, multi: true
2678
+ // }
2428
2679
  ]
2429
2680
  }),
2430
2681
  __metadata("design:paramtypes", [FaIconLibrary])
@@ -2863,6 +3114,7 @@ var ActivityContainerComponent = /** @class */ (function (_super) {
2863
3114
  ActivityContainerComponent.prototype.registerDisposable = function (disposable) {
2864
3115
  return this.garbage.registerDisposable(disposable);
2865
3116
  };
3117
+ // @Trace()
2866
3118
  ActivityContainerComponent.prototype.dispose = function () {
2867
3119
  // TODO: think about auto cancelling any outstanding activity on dispose.
2868
3120
  // See NavigationState.Navigating for a use-case.
@@ -3011,12 +3263,6 @@ var ActivityContainerComponent = /** @class */ (function (_super) {
3011
3263
  ViewChildren(ActivityOutletComponent),
3012
3264
  __metadata("design:type", QueryList)
3013
3265
  ], ActivityContainerComponent.prototype, "activityOutlets", void 0);
3014
- __decorate([
3015
- Trace(),
3016
- __metadata("design:type", Function),
3017
- __metadata("design:paramtypes", []),
3018
- __metadata("design:returntype", void 0)
3019
- ], ActivityContainerComponent.prototype, "dispose", null);
3020
3266
  ActivityContainerComponent = __decorate([
3021
3267
  Component({
3022
3268
  selector: 'aup-activity-container',
@@ -4100,7 +4346,7 @@ var PlaceComponent = /** @class */ (function (_super) {
4100
4346
  assert.isNil(this.visitModel.value);
4101
4347
  var when = Dsl.disposeWith(this).when;
4102
4348
  this.visitModel.value = visit;
4103
- DebugContext.get(this.visitModel).tag(this.placeDefinition.component.name + ".visitModel");
4349
+ DebugContext.getOrCreate(this.visitModel).tag(this.placeDefinition.component.name + ".visitModel");
4104
4350
  this.placeDefinition.getVisitParameterDefs().forEach(function (parameterDef) { return _this.installBinding(parameterDef); });
4105
4351
  when.valueOf(this.visitModel).changes(function (current, previous) {
4106
4352
  notifyVisitChanged(current, previous);
@@ -5248,75 +5494,6 @@ var UrlService = /** @class */ (function () {
5248
5494
  return UrlService;
5249
5495
  }());
5250
5496
 
5251
- var Visit = /** @class */ (function () {
5252
- function Visit(placeDefinition, visitParameters) {
5253
- if (visitParameters === void 0) { visitParameters = {}; }
5254
- this.placeDefinition = placeDefinition;
5255
- this.visitParameters = visitParameters;
5256
- }
5257
- // @Trace()
5258
- Visit.prototype.getRouteId = function () {
5259
- return this.placeDefinition.getRouteIdFrom(this);
5260
- };
5261
- // @Trace()
5262
- Visit.prototype.hasRouteId = function () {
5263
- return !isNil(this.getRouteId());
5264
- };
5265
- /**
5266
- * Returns the value of the place parameter with the specified name. The parameter
5267
- * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
5268
- * same as the the ValueModel property name.
5269
- * @param parameterName the field name of the property model or the `as` option if specified.
5270
- */
5271
- Visit.prototype.getParameter = function (parameterName) {
5272
- return this.visitParameters[parameterName];
5273
- };
5274
- // @Trace()
5275
- Visit.prototype.hasParameter = function (parameterName) {
5276
- return Object.keys(this.visitParameters).includes(parameterName);
5277
- };
5278
- Visit.prototype.replace = function (parameter, value) {
5279
- var _a;
5280
- return new Visit(this.placeDefinition, __assign(__assign({}, this.visitParameters), (_a = {}, _a[parameter.name] = value, _a)));
5281
- };
5282
- Visit.prototype.mergeRouteParameters = function (routeParams) {
5283
- var _this = this;
5284
- // todo: whitelist parameters.
5285
- var routeParameterKeys = Object.keys(routeParams);
5286
- var params = {};
5287
- this.placeDefinition.getVisitParameterDefs().forEach(function (def) {
5288
- if (def.isRouteId || def.isRouteParameter) {
5289
- if (routeParameterKeys.includes(def.name)) {
5290
- params[def.name] = routeParams[def.name];
5291
- }
5292
- }
5293
- else {
5294
- // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
5295
- // defaults and remember sanitisation process.
5296
- var value = _this.getParameter(def.name);
5297
- if (_this.hasParameter(def.name)) {
5298
- params[def.name] = value;
5299
- }
5300
- }
5301
- });
5302
- return new Visit(this.placeDefinition, params);
5303
- };
5304
- Visit.prototype.hasRoutingChangedFrom = function (other) {
5305
- var samePlace = other.placeDefinition === this.placeDefinition;
5306
- var sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
5307
- return !samePlace || !sameRouteParameters;
5308
- };
5309
- Visit.prototype.hasChangedFrom = function (other) {
5310
- var sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
5311
- return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
5312
- };
5313
- Visit.prototype.toDebugString = function () {
5314
- var _this = this;
5315
- return Object.keys(this.visitParameters).map(function (k) { return k + "=" + _this.visitParameters[k]; }).join(",");
5316
- };
5317
- return Visit;
5318
- }());
5319
-
5320
5497
  var PlaceRouter = /** @class */ (function (_super) {
5321
5498
  __extends(PlaceRouter, _super);
5322
5499
  function PlaceRouter(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
@@ -5512,6 +5689,7 @@ var PlaceRouter = /** @class */ (function (_super) {
5512
5689
  enumerable: true,
5513
5690
  configurable: true
5514
5691
  });
5692
+ // @Trace()
5515
5693
  PlaceRouter.prototype.pushVisitChangesToRoute = function (previous, next) {
5516
5694
  return __awaiter(this, void 0, void 0, function () {
5517
5695
  var _this = this;
@@ -5612,12 +5790,6 @@ var PlaceRouter = /** @class */ (function (_super) {
5612
5790
  { type: PlaceHistory }
5613
5791
  ]; };
5614
5792
  PlaceRouter.ɵprov = ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(ɵɵinject(Router), ɵɵinject(Location), ɵɵinject(InteractionService), ɵɵinject(UrlService), ɵɵinject(PlaceHistory)); }, token: PlaceRouter, providedIn: "root" });
5615
- __decorate([
5616
- Trace(),
5617
- __metadata("design:type", Function),
5618
- __metadata("design:paramtypes", [Visit, Visit]),
5619
- __metadata("design:returntype", Promise)
5620
- ], PlaceRouter.prototype, "pushVisitChangesToRoute", null);
5621
5793
  PlaceRouter = __decorate([
5622
5794
  Injectable({
5623
5795
  providedIn: 'root'
@@ -5631,6 +5803,75 @@ var PlaceRouter = /** @class */ (function (_super) {
5631
5803
  return PlaceRouter;
5632
5804
  }(GarbageCollector));
5633
5805
 
5806
+ var Visit = /** @class */ (function () {
5807
+ function Visit(placeDefinition, visitParameters) {
5808
+ if (visitParameters === void 0) { visitParameters = {}; }
5809
+ this.placeDefinition = placeDefinition;
5810
+ this.visitParameters = visitParameters;
5811
+ }
5812
+ // @Trace()
5813
+ Visit.prototype.getRouteId = function () {
5814
+ return this.placeDefinition.getRouteIdFrom(this);
5815
+ };
5816
+ // @Trace()
5817
+ Visit.prototype.hasRouteId = function () {
5818
+ return !isNil(this.getRouteId());
5819
+ };
5820
+ /**
5821
+ * Returns the value of the place parameter with the specified name. The parameter
5822
+ * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
5823
+ * same as the the ValueModel property name.
5824
+ * @param parameterName the field name of the property model or the `as` option if specified.
5825
+ */
5826
+ Visit.prototype.getParameter = function (parameterName) {
5827
+ return this.visitParameters[parameterName];
5828
+ };
5829
+ // @Trace()
5830
+ Visit.prototype.hasParameter = function (parameterName) {
5831
+ return Object.keys(this.visitParameters).includes(parameterName);
5832
+ };
5833
+ Visit.prototype.replace = function (parameter, value) {
5834
+ var _a;
5835
+ return new Visit(this.placeDefinition, __assign(__assign({}, this.visitParameters), (_a = {}, _a[parameter.name] = value, _a)));
5836
+ };
5837
+ Visit.prototype.mergeRouteParameters = function (routeParams) {
5838
+ var _this = this;
5839
+ // todo: whitelist parameters.
5840
+ var routeParameterKeys = Object.keys(routeParams);
5841
+ var params = {};
5842
+ this.placeDefinition.getVisitParameterDefs().forEach(function (def) {
5843
+ if (def.isRouteId || def.isRouteParameter) {
5844
+ if (routeParameterKeys.includes(def.name)) {
5845
+ params[def.name] = routeParams[def.name];
5846
+ }
5847
+ }
5848
+ else {
5849
+ // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
5850
+ // defaults and remember sanitisation process.
5851
+ var value = _this.getParameter(def.name);
5852
+ if (_this.hasParameter(def.name)) {
5853
+ params[def.name] = value;
5854
+ }
5855
+ }
5856
+ });
5857
+ return new Visit(this.placeDefinition, params);
5858
+ };
5859
+ Visit.prototype.hasRoutingChangedFrom = function (other) {
5860
+ var samePlace = other.placeDefinition === this.placeDefinition;
5861
+ var sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
5862
+ return !samePlace || !sameRouteParameters;
5863
+ };
5864
+ Visit.prototype.hasChangedFrom = function (other) {
5865
+ var sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
5866
+ return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
5867
+ };
5868
+ Visit.prototype.toDebugString = function () {
5869
+ var _this = this;
5870
+ return Object.keys(this.visitParameters).map(function (k) { return k + "=" + _this.visitParameters[k]; }).join(",");
5871
+ };
5872
+ return Visit;
5873
+ }());
5874
+
5634
5875
  var AUP_PLACE_CONFIG = new InjectionToken('AUP_PLACE_CONFIG');
5635
5876
 
5636
5877
  // Freezes the state of the components at the start of the animation.
@@ -6645,8 +6886,7 @@ function installMechanics(prototype, propertyKey, backingModel, tagPrefix, isEmp
6645
6886
  binding: null
6646
6887
  };
6647
6888
  var tag = tagPrefix + "(" + prototype.constructor.name + "." + propertyKey.toString() + ")";
6648
- DebugContext.get(mechanics.backingModel).tag(tag);
6649
- Logger.get(mechanics.backingModel).tag(tag);
6889
+ DebugContext.getOrCreate(mechanics.backingModel).tag(tag);
6650
6890
  Object.defineProperty(prototype, propertyKey, {
6651
6891
  get: function () {
6652
6892
  return mechanics.backingModel;
@@ -6708,5 +6948,5 @@ function VisitParameterList(options) {
6708
6948
  * Generated bundle index. Do not edit.
6709
6949
  */
6710
6950
 
6711
- export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputActivity, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractValueInputComponent, Activity, ActivityActionsComponent, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, AddItemInteractionContextComponent, AlertDialogComponent, AngularUiPowerupsModule, Bounds, BusyOverlayComponent, CELL_EDITOR_PORTAL, CELL_RENDERER_PORTAL, CardContainerComponent, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnModel, ColumnTemplateDirective, CommandDirective, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControls, EditSession, EditorControlColumnModel, EmptyStateComponent, EventCleanUpSession, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, HEADER_CELL_RENDERER_PORTAL, IconComponent, InPlaceInteractionContextComponent, InteractionContextTriggerFor, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, LEFT_RIGHT_PLACE_ANIMATION, ListPlaceNavComponent, ListPropertyColumnModel, ModalInteractionContextFactory, MultipleSelectInputComponent, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NumberInputComponent, PORTAL_EDITOR_COMPONENT, PORTAL_RENDERER_COMPONENT, ParameterDefinition, PasswordInputComponent, Place, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupInteractionContextComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectCellRendererComponent, SelectHeaderCellRendererComponent, SelectInputActivity, SelectInputComponent, SelectionColumnModel, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableCellRendererComponent, TableComponent, TableHeaderCellRendererComponent, TableModel, TemplateCellRendererPortalRef, TextInputComponent, UrlService, UrlSnapshot, VerticalFocusContainerComponent, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, slideDownOnEnterAnimation, slideRightOnEnterAnimation, ɵ0, DirectivesModule as ɵa, CommandDirective as ɵb, EditRowControls as ɵba, ColumnTemplateDirective as ɵbb, DefaultCellRendererComponent as ɵbc, TableCellRendererComponent as ɵbd, SelectCellRendererComponent as ɵbe, SelectHeaderCellRendererComponent as ɵbf, DefaultHeaderCellRendererComponent as ɵbg, TableHeaderCellRendererComponent as ɵbh, MultipleSelectInputComponent as ɵbi, IconComponent as ɵbj, SectionHeaderComponent as ɵbk, PlaceModule as ɵbl, ComponentsModule as ɵbm, EmptyStateComponent as ɵbn, BusyOverlayComponent as ɵbo, PlaceOutletComponent as ɵbp, leftRightPlaceAnimation as ɵbq, LEFT_RIGHT_PLACE_ANIMATION as ɵbr, AUP_PLACE_CONFIG as ɵbs, PlaceRouter as ɵbu, InteractionService as ɵbv, ModalInteractionContextFactory as ɵbw, UrlService as ɵbx, PlaceHistory as ɵby, TabbedPlaceNavigationComponent as ɵbz, FocusBindingDirective as ɵc, AbstractPlaceNavigationComponent as ɵca, ListPlaceNavComponent as ɵcb, SidePlaceNavigationComponent as ɵcc, InteractionModule as ɵcd, ActivityContainerComponent as ɵce, AbstractInteractionContext as ɵcf, ActivityOutletComponent as ɵcg, ConfirmationDialogComponent as ɵch, ACTIVITY_DATA as ɵci, Activity as ɵcj, ConfirmThenDialogComponent as ɵcl, AlertDialogComponent as ɵcm, InPlaceInteractionContextComponent as ɵco, AddItemInteractionContextComponent as ɵcp, ActivityActionsComponent as ɵcq, PopupInteractionContextComponent as ɵcr, StringInputActivity as ɵcs, AbstractInputActivity as ɵct, SelectInputActivity as ɵcu, InteractionContextTriggerFor as ɵcv, DisposableComponent as ɵd, FocusBindingFactory as ɵe, ComponentsModule as ɵf, AbstractInputComponent as ɵg, AbstractValueInputComponent as ɵh, AbstractListInputComponent as ɵi, NumberInputComponent as ɵj, StringInputComponent as ɵk, TextInputComponent as ɵl, PasswordInputComponent as ɵm, SelectInputComponent as ɵn, CheckboxInputComponent as ɵo, ScrollContainerComponent as ɵp, NoopComponent as ɵq, SwitchCaseOption as ɵr, SwitchCaseWhenDirective as ɵs, SwitchCaseDefaultDirective as ɵt, SwitchCaseComponent as ɵu, FocusContainerComponent as ɵv, VerticalFocusContainerComponent as ɵw, FocusableComponent as ɵx, CardContainerComponent as ɵy, TableComponent as ɵz };
6951
+ export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputActivity, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractValueInputComponent, Activity, ActivityActionsComponent, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, AddItemInteractionContextComponent, AlertDialogComponent, AngularUiPowerupsModule, AutocompleteInputComponent, Bounds, BusyOverlayComponent, CELL_EDITOR_PORTAL, CELL_RENDERER_PORTAL, CardContainerComponent, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnModel, ColumnTemplateDirective, CommandDirective, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControls, EditSession, EditorControlColumnModel, EmptyStateComponent, EventCleanUpSession, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, HEADER_CELL_RENDERER_PORTAL, IconComponent, InPlaceInteractionContextComponent, InteractionContextTriggerFor, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, LEFT_RIGHT_PLACE_ANIMATION, ListPlaceNavComponent, ListPropertyColumnModel, ModalInteractionContextFactory, MultipleSelectInputComponent, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NumberInputComponent, PORTAL_EDITOR_COMPONENT, PORTAL_RENDERER_COMPONENT, ParameterDefinition, PasswordInputComponent, Place, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupInteractionContextComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectCellRendererComponent, SelectHeaderCellRendererComponent, SelectInputActivity, SelectInputComponent, SelectionColumnModel, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableCellRendererComponent, TableComponent, TableHeaderCellRendererComponent, TableModel, TemplateCellRendererPortalRef, TextInputComponent, UrlService, UrlSnapshot, VerticalFocusContainerComponent, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, slideDownOnEnterAnimation, slideRightOnEnterAnimation, ɵ0, DirectivesModule as ɵa, CommandDirective as ɵb, CardContainerComponent as ɵba, TableComponent as ɵbb, EditRowControls as ɵbc, ColumnTemplateDirective as ɵbd, DefaultCellRendererComponent as ɵbe, TableCellRendererComponent as ɵbf, SelectCellRendererComponent as ɵbg, SelectHeaderCellRendererComponent as ɵbh, DefaultHeaderCellRendererComponent as ɵbi, TableHeaderCellRendererComponent as ɵbj, IconComponent as ɵbk, SectionHeaderComponent as ɵbl, PlaceModule as ɵbm, ComponentsModule as ɵbn, EmptyStateComponent as ɵbo, BusyOverlayComponent as ɵbp, PlaceOutletComponent as ɵbq, leftRightPlaceAnimation as ɵbr, LEFT_RIGHT_PLACE_ANIMATION as ɵbs, AUP_PLACE_CONFIG as ɵbt, PlaceRouter as ɵbv, InteractionService as ɵbw, ModalInteractionContextFactory as ɵbx, UrlService as ɵby, PlaceHistory as ɵbz, FocusBindingDirective as ɵc, TabbedPlaceNavigationComponent as ɵca, AbstractPlaceNavigationComponent as ɵcb, ListPlaceNavComponent as ɵcc, SidePlaceNavigationComponent as ɵcd, InteractionModule as ɵce, ActivityContainerComponent as ɵcf, AbstractInteractionContext as ɵcg, ActivityOutletComponent as ɵch, ConfirmationDialogComponent as ɵci, ACTIVITY_DATA as ɵcj, Activity as ɵck, ConfirmThenDialogComponent as ɵcm, AlertDialogComponent as ɵcn, InPlaceInteractionContextComponent as ɵcp, AddItemInteractionContextComponent as ɵcq, ActivityActionsComponent as ɵcr, PopupInteractionContextComponent as ɵcs, StringInputActivity as ɵct, AbstractInputActivity as ɵcu, SelectInputActivity as ɵcv, InteractionContextTriggerFor as ɵcw, DisposableComponent as ɵd, FocusBindingFactory as ɵe, ComponentsModule as ɵf, AbstractInputComponent as ɵg, AbstractValueInputComponent as ɵh, AbstractListInputComponent as ɵi, NumberInputComponent as ɵj, StringInputComponent as ɵk, TextInputComponent as ɵl, PasswordInputComponent as ɵm, SelectInputComponent as ɵn, MultipleSelectInputComponent as ɵo, AutocompleteInputComponent as ɵp, CheckboxInputComponent as ɵq, ScrollContainerComponent as ɵr, NoopComponent as ɵs, SwitchCaseOption as ɵt, SwitchCaseWhenDirective as ɵu, SwitchCaseDefaultDirective as ɵv, SwitchCaseComponent as ɵw, FocusContainerComponent as ɵx, VerticalFocusContainerComponent as ɵy, FocusableComponent as ɵz };
6712
6952
  //# sourceMappingURL=coolon-angular-ui-powerups.js.map