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

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 (168) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/assets/form.scss +33 -0
  3. package/bundles/coolon-angular-ui-powerups.umd.js +567 -323
  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 +8 -5
  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/interaction/components/activity-container/activity-container.component.js +2 -7
  75. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  76. package/esm2015/lib/interaction/components/activity-container/activity-container.component.metadata.json +1 -1
  77. package/esm2015/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  78. package/esm2015/lib/place/place-component.js +1 -1
  79. package/esm2015/lib/place/place-component.js.map +1 -1
  80. package/esm2015/lib/place/place-router.js +2 -8
  81. package/esm2015/lib/place/place-router.js.map +1 -1
  82. package/esm2015/lib/place/place-router.metadata.json +1 -1
  83. package/esm2015/lib/place/place.module.ngfactory.js.map +1 -1
  84. package/esm2015/lib/place/route/parameter-decorators.js +2 -3
  85. package/esm2015/lib/place/route/parameter-decorators.js.map +1 -1
  86. package/esm2015/lib/place/route/parameter-decorators.metadata.json +1 -1
  87. package/esm5/coolon-angular-ui-powerups.js +53 -52
  88. package/esm5/coolon-angular-ui-powerups.js.map +1 -1
  89. package/esm5/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  90. package/esm5/lib/components/card-container/card-container.component.js +1 -1
  91. package/esm5/lib/components/components.module.js +29 -12
  92. package/esm5/lib/components/components.module.js.map +1 -1
  93. package/esm5/lib/components/components.module.ngfactory.js.map +1 -1
  94. package/esm5/lib/components/forms/abstract-input.component.js +34 -6
  95. package/esm5/lib/components/forms/abstract-input.component.js.map +1 -1
  96. package/esm5/lib/components/forms/abstract-list-input.component.js +56 -6
  97. package/esm5/lib/components/forms/abstract-list-input.component.js.map +1 -1
  98. package/esm5/lib/components/forms/abstract-value-input.component.js +51 -7
  99. package/esm5/lib/components/forms/abstract-value-input.component.js.map +1 -1
  100. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js +73 -0
  101. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -0
  102. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.ngfactory.js.map +1 -0
  103. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.scss.shim.ngstyle.js.map +1 -0
  104. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js +4 -7
  105. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  106. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js +8 -13
  107. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  108. package/esm5/lib/components/forms/number-input/number-input.component.js +4 -7
  109. package/esm5/lib/components/forms/number-input/number-input.component.js.map +1 -1
  110. package/esm5/lib/components/forms/password-input/password-input.component.js +5 -8
  111. package/esm5/lib/components/forms/password-input/password-input.component.js.map +1 -1
  112. package/esm5/lib/components/forms/select-input/select-input.component.js +8 -5
  113. package/esm5/lib/components/forms/select-input/select-input.component.js.map +1 -1
  114. package/esm5/lib/components/forms/string-input/string-input.component.js +4 -8
  115. package/esm5/lib/components/forms/string-input/string-input.component.js.map +1 -1
  116. package/esm5/lib/components/forms/text-input/text-input.component.js +4 -7
  117. package/esm5/lib/components/forms/text-input/text-input.component.js.map +1 -1
  118. package/esm5/lib/components/index.js +2 -1
  119. package/esm5/lib/components/index.js.map +1 -1
  120. package/esm5/lib/components/table/cell-editors.js.map +1 -1
  121. package/esm5/lib/components/table/{cell-protal-ref.js → cell-portal-ref.js} +7 -3
  122. package/esm5/lib/components/table/cell-portal-ref.js.map +1 -0
  123. package/esm5/lib/components/table/column-model.js +67 -11
  124. package/esm5/lib/components/table/column-model.js.map +1 -1
  125. package/esm5/lib/components/table/mutable-cell-renderer.js +1 -0
  126. package/esm5/lib/components/table/mutable-cell-renderer.js.map +1 -0
  127. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js +1 -1
  128. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js.map +1 -1
  129. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js +1 -1
  130. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js.map +1 -1
  131. package/esm5/lib/components/table/table-model.js +8 -5
  132. package/esm5/lib/components/table/table-model.js.map +1 -1
  133. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +2 -7
  134. package/esm5/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  135. package/esm5/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  136. package/esm5/lib/place/place-component.js +1 -1
  137. package/esm5/lib/place/place-component.js.map +1 -1
  138. package/esm5/lib/place/place-router.js +2 -8
  139. package/esm5/lib/place/place-router.js.map +1 -1
  140. package/esm5/lib/place/place.module.ngfactory.js.map +1 -1
  141. package/esm5/lib/place/route/parameter-decorators.js +2 -3
  142. package/esm5/lib/place/route/parameter-decorators.js.map +1 -1
  143. package/fesm2015/coolon-angular-ui-powerups.js +462 -241
  144. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  145. package/fesm5/coolon-angular-ui-powerups.js +499 -256
  146. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  147. package/lib/components/forms/abstract-input.component.d.ts +12 -3
  148. package/lib/components/forms/abstract-list-input.component.d.ts +10 -3
  149. package/lib/components/forms/abstract-value-input.component.d.ts +9 -3
  150. package/lib/components/forms/autocomplete-input/autocomplete-input.component.d.ts +25 -0
  151. package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +0 -2
  152. package/lib/components/forms/multiple-select-input/multiple-select-input.component.d.ts +8 -4
  153. package/lib/components/forms/number-input/number-input.component.d.ts +0 -2
  154. package/lib/components/forms/password-input/password-input.component.d.ts +0 -2
  155. package/lib/components/forms/select-input/select-input.component.d.ts +8 -2
  156. package/lib/components/forms/string-input/string-input.component.d.ts +1 -2
  157. package/lib/components/forms/text-input/text-input.component.d.ts +0 -2
  158. package/lib/components/index.d.ts +3 -1
  159. package/lib/components/table/cell-editors.d.ts +3 -3
  160. package/lib/components/table/{cell-protal-ref.d.ts → cell-portal-ref.d.ts} +4 -4
  161. package/lib/components/table/column-model.d.ts +18 -12
  162. package/lib/components/table/mutable-cell-renderer.d.ts +6 -0
  163. package/lib/components/table/table-cell-renderer/table-cell-renderer.component.d.ts +1 -1
  164. package/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.d.ts +1 -1
  165. package/lib/components/table/table-model.d.ts +14 -3
  166. package/package.json +4 -4
  167. package/esm2015/lib/components/table/cell-protal-ref.js.map +0 -1
  168. 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;
601
+ },
602
+ enumerable: true,
603
+ configurable: true
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;
598
615
  },
599
616
  enumerable: true,
600
617
  configurable: true
601
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
+ }
1807
+ }));
1808
+ return this;
1809
+ };
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
+ }
1519
1836
  }));
1520
1837
  return this;
1521
1838
  };
1522
- PropertyColumnModel.prototype.cellEditor = function (editor, validatorsOrInitialiser, initialiseComponent) {
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
  };
@@ -1782,7 +2112,7 @@ var TableModel = /** @class */ (function () {
1782
2112
  this.dataSource = chain(this.sourceOfTruth).replaceAll(this.rowsBeingEdited);
1783
2113
  this.firstEditableColumn = chain(this.columns).select(function (c) { return c.hasEditorPortal(); }).first();
1784
2114
  this.hasColumnsWithRowSelectionExplicitlyEnabled = chain(this._columns).findIndex(function (column) { return column.isRowSelectionExplicitlyEnabled(); }).isGreaterThanOrEqualTo(0);
1785
- this.addRowClass("enable-hover", function () { return _this.isRowSelectionEnabled(); });
2115
+ this.addRowClass('enable-hover', function () { return _this.isRowSelectionEnabled(); });
1786
2116
  }
1787
2117
  TableModel_1 = TableModel;
1788
2118
  TableModel.fromList = function (sourceOfTruth, builder) {
@@ -1810,11 +2140,11 @@ var TableModel = /** @class */ (function () {
1810
2140
  enumerable: true,
1811
2141
  configurable: true
1812
2142
  });
1813
- TableModel.prototype.pluck = function (property) {
1814
- return this.addColumn(new PropertyColumnModel(property, this));
2143
+ TableModel.prototype.pluck = function (property, options) {
2144
+ return this.addColumn(new PropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1815
2145
  };
1816
- TableModel.prototype.pluckList = function (property) {
1817
- return this.addColumn(new ListPropertyColumnModel(property, this));
2146
+ TableModel.prototype.pluckList = function (property, options) {
2147
+ return this.addColumn(new ListPropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1818
2148
  };
1819
2149
  TableModel.prototype.addSelectionColumn = function (selectionModel) {
1820
2150
  assert.isNil(this.selectionColumnModel);
@@ -1828,6 +2158,9 @@ var TableModel = /** @class */ (function () {
1828
2158
  TableModel.prototype.addCustomColumn = function (columnId, dataAccessor) {
1829
2159
  return this.addColumn(new CustomValueColumnModel(columnId, this, dataAccessor));
1830
2160
  };
2161
+ TableModel.prototype.addComponentColumn = function (columnId, component, onComponentInitOrOptions) {
2162
+ return this.addColumn(new CustomValueColumnModel(columnId, this, function (row) { return row; })).cellRenderer(component, onComponentInitOrOptions);
2163
+ };
1831
2164
  TableModel.prototype.addTemplateColumn = function (columnId) {
1832
2165
  return this.addColumn(new CustomTemplateColumnModel(columnId, this));
1833
2166
  };
@@ -2247,100 +2580,6 @@ var VerticalFocusContainerComponent = /** @class */ (function (_super) {
2247
2580
  return VerticalFocusContainerComponent;
2248
2581
  }(FocusContainerComponent));
2249
2582
 
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
2583
  var ComponentsModule = /** @class */ (function () {
2345
2584
  function ComponentsModule(faIconLibrary) {
2346
2585
  faIconLibrary.addIconPacks(fas);
@@ -2359,6 +2598,8 @@ var ComponentsModule = /** @class */ (function () {
2359
2598
  TextInputComponent,
2360
2599
  PasswordInputComponent,
2361
2600
  SelectInputComponent,
2601
+ MultipleSelectInputComponent,
2602
+ AutocompleteInputComponent,
2362
2603
  CheckboxInputComponent,
2363
2604
  ScrollContainerComponent,
2364
2605
  NoopComponent,
@@ -2378,7 +2619,6 @@ var ComponentsModule = /** @class */ (function () {
2378
2619
  SelectHeaderCellRendererComponent,
2379
2620
  DefaultHeaderCellRendererComponent,
2380
2621
  TableHeaderCellRendererComponent,
2381
- MultipleSelectInputComponent,
2382
2622
  IconComponent,
2383
2623
  SectionHeaderComponent
2384
2624
  ],
@@ -2398,7 +2638,8 @@ var ComponentsModule = /** @class */ (function () {
2398
2638
  PortalModule,
2399
2639
  CdkScrollableModule,
2400
2640
  FontAwesomeModule,
2401
- MatTooltipModule
2641
+ MatTooltipModule,
2642
+ MatAutocompleteModule
2402
2643
  ],
2403
2644
  exports: [
2404
2645
  NumberInputComponent,
@@ -2407,6 +2648,8 @@ var ComponentsModule = /** @class */ (function () {
2407
2648
  PasswordInputComponent,
2408
2649
  CheckboxInputComponent,
2409
2650
  SelectInputComponent,
2651
+ MultipleSelectInputComponent,
2652
+ AutocompleteInputComponent,
2410
2653
  ScrollContainerComponent,
2411
2654
  NoopComponent,
2412
2655
  SwitchCaseComponent,
@@ -2419,12 +2662,23 @@ var ComponentsModule = /** @class */ (function () {
2419
2662
  TableComponent,
2420
2663
  EditRowControls,
2421
2664
  ColumnTemplateDirective,
2422
- MultipleSelectInputComponent,
2423
2665
  IconComponent,
2424
2666
  SectionHeaderComponent
2425
2667
  ],
2426
2668
  providers: [
2427
- FocusBindingFactory,
2669
+ FocusBindingFactory
2670
+ // {
2671
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
2672
+ // type: 'string',
2673
+ // editorClass: StringInputComponent
2674
+ // }, multi: true
2675
+ // },
2676
+ // {
2677
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
2678
+ // type: 'number',
2679
+ // editorClass: NumberInputComponent
2680
+ // }, multi: true
2681
+ // }
2428
2682
  ]
2429
2683
  }),
2430
2684
  __metadata("design:paramtypes", [FaIconLibrary])
@@ -2863,6 +3117,7 @@ var ActivityContainerComponent = /** @class */ (function (_super) {
2863
3117
  ActivityContainerComponent.prototype.registerDisposable = function (disposable) {
2864
3118
  return this.garbage.registerDisposable(disposable);
2865
3119
  };
3120
+ // @Trace()
2866
3121
  ActivityContainerComponent.prototype.dispose = function () {
2867
3122
  // TODO: think about auto cancelling any outstanding activity on dispose.
2868
3123
  // See NavigationState.Navigating for a use-case.
@@ -3011,12 +3266,6 @@ var ActivityContainerComponent = /** @class */ (function (_super) {
3011
3266
  ViewChildren(ActivityOutletComponent),
3012
3267
  __metadata("design:type", QueryList)
3013
3268
  ], 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
3269
  ActivityContainerComponent = __decorate([
3021
3270
  Component({
3022
3271
  selector: 'aup-activity-container',
@@ -4100,7 +4349,7 @@ var PlaceComponent = /** @class */ (function (_super) {
4100
4349
  assert.isNil(this.visitModel.value);
4101
4350
  var when = Dsl.disposeWith(this).when;
4102
4351
  this.visitModel.value = visit;
4103
- DebugContext.get(this.visitModel).tag(this.placeDefinition.component.name + ".visitModel");
4352
+ DebugContext.getOrCreate(this.visitModel).tag(this.placeDefinition.component.name + ".visitModel");
4104
4353
  this.placeDefinition.getVisitParameterDefs().forEach(function (parameterDef) { return _this.installBinding(parameterDef); });
4105
4354
  when.valueOf(this.visitModel).changes(function (current, previous) {
4106
4355
  notifyVisitChanged(current, previous);
@@ -5248,75 +5497,6 @@ var UrlService = /** @class */ (function () {
5248
5497
  return UrlService;
5249
5498
  }());
5250
5499
 
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
5500
  var PlaceRouter = /** @class */ (function (_super) {
5321
5501
  __extends(PlaceRouter, _super);
5322
5502
  function PlaceRouter(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
@@ -5512,6 +5692,7 @@ var PlaceRouter = /** @class */ (function (_super) {
5512
5692
  enumerable: true,
5513
5693
  configurable: true
5514
5694
  });
5695
+ // @Trace()
5515
5696
  PlaceRouter.prototype.pushVisitChangesToRoute = function (previous, next) {
5516
5697
  return __awaiter(this, void 0, void 0, function () {
5517
5698
  var _this = this;
@@ -5612,12 +5793,6 @@ var PlaceRouter = /** @class */ (function (_super) {
5612
5793
  { type: PlaceHistory }
5613
5794
  ]; };
5614
5795
  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
5796
  PlaceRouter = __decorate([
5622
5797
  Injectable({
5623
5798
  providedIn: 'root'
@@ -5631,6 +5806,75 @@ var PlaceRouter = /** @class */ (function (_super) {
5631
5806
  return PlaceRouter;
5632
5807
  }(GarbageCollector));
5633
5808
 
5809
+ var Visit = /** @class */ (function () {
5810
+ function Visit(placeDefinition, visitParameters) {
5811
+ if (visitParameters === void 0) { visitParameters = {}; }
5812
+ this.placeDefinition = placeDefinition;
5813
+ this.visitParameters = visitParameters;
5814
+ }
5815
+ // @Trace()
5816
+ Visit.prototype.getRouteId = function () {
5817
+ return this.placeDefinition.getRouteIdFrom(this);
5818
+ };
5819
+ // @Trace()
5820
+ Visit.prototype.hasRouteId = function () {
5821
+ return !isNil(this.getRouteId());
5822
+ };
5823
+ /**
5824
+ * Returns the value of the place parameter with the specified name. The parameter
5825
+ * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
5826
+ * same as the the ValueModel property name.
5827
+ * @param parameterName the field name of the property model or the `as` option if specified.
5828
+ */
5829
+ Visit.prototype.getParameter = function (parameterName) {
5830
+ return this.visitParameters[parameterName];
5831
+ };
5832
+ // @Trace()
5833
+ Visit.prototype.hasParameter = function (parameterName) {
5834
+ return Object.keys(this.visitParameters).includes(parameterName);
5835
+ };
5836
+ Visit.prototype.replace = function (parameter, value) {
5837
+ var _a;
5838
+ return new Visit(this.placeDefinition, __assign(__assign({}, this.visitParameters), (_a = {}, _a[parameter.name] = value, _a)));
5839
+ };
5840
+ Visit.prototype.mergeRouteParameters = function (routeParams) {
5841
+ var _this = this;
5842
+ // todo: whitelist parameters.
5843
+ var routeParameterKeys = Object.keys(routeParams);
5844
+ var params = {};
5845
+ this.placeDefinition.getVisitParameterDefs().forEach(function (def) {
5846
+ if (def.isRouteId || def.isRouteParameter) {
5847
+ if (routeParameterKeys.includes(def.name)) {
5848
+ params[def.name] = routeParams[def.name];
5849
+ }
5850
+ }
5851
+ else {
5852
+ // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
5853
+ // defaults and remember sanitisation process.
5854
+ var value = _this.getParameter(def.name);
5855
+ if (_this.hasParameter(def.name)) {
5856
+ params[def.name] = value;
5857
+ }
5858
+ }
5859
+ });
5860
+ return new Visit(this.placeDefinition, params);
5861
+ };
5862
+ Visit.prototype.hasRoutingChangedFrom = function (other) {
5863
+ var samePlace = other.placeDefinition === this.placeDefinition;
5864
+ var sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
5865
+ return !samePlace || !sameRouteParameters;
5866
+ };
5867
+ Visit.prototype.hasChangedFrom = function (other) {
5868
+ var sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
5869
+ return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
5870
+ };
5871
+ Visit.prototype.toDebugString = function () {
5872
+ var _this = this;
5873
+ return Object.keys(this.visitParameters).map(function (k) { return k + "=" + _this.visitParameters[k]; }).join(",");
5874
+ };
5875
+ return Visit;
5876
+ }());
5877
+
5634
5878
  var AUP_PLACE_CONFIG = new InjectionToken('AUP_PLACE_CONFIG');
5635
5879
 
5636
5880
  // Freezes the state of the components at the start of the animation.
@@ -6645,8 +6889,7 @@ function installMechanics(prototype, propertyKey, backingModel, tagPrefix, isEmp
6645
6889
  binding: null
6646
6890
  };
6647
6891
  var tag = tagPrefix + "(" + prototype.constructor.name + "." + propertyKey.toString() + ")";
6648
- DebugContext.get(mechanics.backingModel).tag(tag);
6649
- Logger.get(mechanics.backingModel).tag(tag);
6892
+ DebugContext.getOrCreate(mechanics.backingModel).tag(tag);
6650
6893
  Object.defineProperty(prototype, propertyKey, {
6651
6894
  get: function () {
6652
6895
  return mechanics.backingModel;
@@ -6708,5 +6951,5 @@ function VisitParameterList(options) {
6708
6951
  * Generated bundle index. Do not edit.
6709
6952
  */
6710
6953
 
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 };
6954
+ 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
6955
  //# sourceMappingURL=coolon-angular-ui-powerups.js.map