@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
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/forms'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/select'), require('@angular/material/tabs'), require('@angular/platform-browser/animations'), require('@angular/cdk/portal'), require('@angular/cdk/scrolling'), require('@angular/material/button'), require('@angular/material/checkbox'), require('@angular/material/icon'), require('@angular/material/table'), require('@coolon/pectin'), require('@coolon/typescript-utilities'), require('@typescript-plus/fast-memoize-decorator/dist/src'), require('lodash'), require('immer'), require('@fortawesome/angular-fontawesome'), require('@fortawesome/free-solid-svg-icons'), require('@angular/material/tooltip'), require('@angular/flex-layout'), require('@angular/material/dialog'), require('@angular/router'), require('@angular/cdk/overlay'), require('resize-observer-polyfill'), require('@angular/material/progress-spinner'), require('@angular/material/list'), require('@typescript-plus/fast-memoize-decorator'), require('reflect-metadata'), require('@angular/animations'), require('rxjs')) :
3
- typeof define === 'function' && define.amd ? define('@coolon/angular-ui-powerups', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@angular/material/form-field', '@angular/material/input', '@angular/material/select', '@angular/material/tabs', '@angular/platform-browser/animations', '@angular/cdk/portal', '@angular/cdk/scrolling', '@angular/material/button', '@angular/material/checkbox', '@angular/material/icon', '@angular/material/table', '@coolon/pectin', '@coolon/typescript-utilities', '@typescript-plus/fast-memoize-decorator/dist/src', 'lodash', 'immer', '@fortawesome/angular-fontawesome', '@fortawesome/free-solid-svg-icons', '@angular/material/tooltip', '@angular/flex-layout', '@angular/material/dialog', '@angular/router', '@angular/cdk/overlay', 'resize-observer-polyfill', '@angular/material/progress-spinner', '@angular/material/list', '@typescript-plus/fast-memoize-decorator', 'reflect-metadata', '@angular/animations', 'rxjs'], factory) :
4
- (global = global || self, factory((global.coolon = global.coolon || {}, global.coolon['angular-ui-powerups'] = {}), global.ng.common, global.ng.core, global.ng.forms, global.ng.material.formField, global.ng.material.input, global.ng.material.select, global.ng.material.tabs, global.ng.platformBrowser.animations, global.ng.cdk.portal, global.ng.cdk.scrolling, global.ng.material.button, global.ng.material.checkbox, global.ng.material.icon, global.ng.material.table, global.pectin, global.typescriptUtilities, global.src, global.___default, global.produce, global.angularFontawesome, global.freeSolidSvgIcons, global.ng.material.tooltip, global.ng.flexLayout, global.ng.material.dialog, global.ng.router, global.ng.cdk.overlay, global.ResizeObserver, global.ng.material.progressSpinner, global.ng.material.list, global.fastMemoizeDecorator, null, global.ng.animations, global.rxjs));
5
- }(this, (function (exports, common, core, forms, formField, input, select, tabs, animations, portal, scrolling, button, checkbox, icon, table, pectin, typescriptUtilities, src, ___default, produce, angularFontawesome, freeSolidSvgIcons, tooltip, flexLayout, dialog, router, overlay, ResizeObserver, progressSpinner, list, fastMemoizeDecorator, reflectMetadata, animations$1, rxjs) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/forms'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/select'), require('@angular/material/tabs'), require('@angular/platform-browser/animations'), require('@angular/cdk/portal'), require('@angular/cdk/scrolling'), require('@angular/material/autocomplete'), require('@angular/material/button'), require('@angular/material/checkbox'), require('@angular/material/icon'), require('@angular/material/table'), require('@angular/material/tooltip'), require('@fortawesome/angular-fontawesome'), require('@fortawesome/free-solid-svg-icons'), require('@coolon/pectin'), require('lodash'), require('@coolon/typescript-utilities'), require('@typescript-plus/fast-memoize-decorator/dist/src'), require('immer'), require('@angular/flex-layout'), require('@angular/material/dialog'), require('@angular/router'), require('@angular/cdk/overlay'), require('resize-observer-polyfill'), require('@angular/material/progress-spinner'), require('@angular/material/list'), require('@typescript-plus/fast-memoize-decorator'), require('reflect-metadata'), require('@angular/animations'), require('rxjs')) :
3
+ typeof define === 'function' && define.amd ? define('@coolon/angular-ui-powerups', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@angular/material/form-field', '@angular/material/input', '@angular/material/select', '@angular/material/tabs', '@angular/platform-browser/animations', '@angular/cdk/portal', '@angular/cdk/scrolling', '@angular/material/autocomplete', '@angular/material/button', '@angular/material/checkbox', '@angular/material/icon', '@angular/material/table', '@angular/material/tooltip', '@fortawesome/angular-fontawesome', '@fortawesome/free-solid-svg-icons', '@coolon/pectin', 'lodash', '@coolon/typescript-utilities', '@typescript-plus/fast-memoize-decorator/dist/src', 'immer', '@angular/flex-layout', '@angular/material/dialog', '@angular/router', '@angular/cdk/overlay', 'resize-observer-polyfill', '@angular/material/progress-spinner', '@angular/material/list', '@typescript-plus/fast-memoize-decorator', 'reflect-metadata', '@angular/animations', 'rxjs'], factory) :
4
+ (global = global || self, factory((global.coolon = global.coolon || {}, global.coolon['angular-ui-powerups'] = {}), global.ng.common, global.ng.core, global.ng.forms, global.ng.material.formField, global.ng.material.input, global.ng.material.select, global.ng.material.tabs, global.ng.platformBrowser.animations, global.ng.cdk.portal, global.ng.cdk.scrolling, global.ng.material.autocomplete, global.ng.material.button, global.ng.material.checkbox, global.ng.material.icon, global.ng.material.table, global.ng.material.tooltip, global.angularFontawesome, global.freeSolidSvgIcons, global.pectin, global.___default, global.typescriptUtilities, global.src, global.produce, global.ng.flexLayout, global.ng.material.dialog, global.ng.router, global.ng.cdk.overlay, global.ResizeObserver, global.ng.material.progressSpinner, global.ng.material.list, global.fastMemoizeDecorator, null, global.ng.animations, global.rxjs));
5
+ }(this, (function (exports, common, core, forms, formField, input, select, tabs, animations, portal, scrolling, autocomplete, button, checkbox, icon, table, tooltip, angularFontawesome, freeSolidSvgIcons, pectin, ___default, typescriptUtilities, src, produce, flexLayout, dialog, router, overlay, ResizeObserver, progressSpinner, list, fastMemoizeDecorator, reflectMetadata, animations$1, rxjs) { 'use strict';
6
6
 
7
7
  var ___default__default = 'default' in ___default ? ___default['default'] : ___default;
8
8
  produce = produce && Object.prototype.hasOwnProperty.call(produce, 'default') ? produce['default'] : produce;
@@ -578,7 +578,7 @@
578
578
  core.Component({
579
579
  selector: 'aup-card-container',
580
580
  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",
581
- 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}"]
581
+ 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}"]
582
582
  }),
583
583
  __metadata("design:paramtypes", [])
584
584
  ], CardContainerComponent);
@@ -693,6 +693,8 @@
693
693
  __extends(AbstractInputComponent, _super);
694
694
  function AbstractInputComponent() {
695
695
  var _this = _super.call(this) || this;
696
+ _this.onValueEditedListeners = new pectin.EventListenerList();
697
+ _this.dense = false;
696
698
  // TODO: fix this.
697
699
  // tslint:disable-next-line:no-output-native
698
700
  _this.focus = new core.EventEmitter();
@@ -742,7 +744,7 @@
742
744
  };
743
745
  Object.defineProperty(AbstractInputComponent.prototype, "enabled", {
744
746
  get: function () {
745
- return this.inputModel.enabled;
747
+ return this.formValueModel.enabled;
746
748
  },
747
749
  enumerable: true,
748
750
  configurable: true
@@ -752,7 +754,7 @@
752
754
  };
753
755
  Object.defineProperty(AbstractInputComponent.prototype, "errorList", {
754
756
  get: function () {
755
- return this.inputModel.errorList;
757
+ return this.formValueModel.errorList;
756
758
  },
757
759
  enumerable: true,
758
760
  configurable: true
@@ -766,19 +768,40 @@
766
768
  });
767
769
  Object.defineProperty(AbstractInputComponent.prototype, "focusContext", {
768
770
  get: function () {
769
- return this.inputModel.focusContext;
771
+ return this.formValueModel.focusContext;
770
772
  },
771
773
  enumerable: true,
772
774
  configurable: true
773
775
  });
776
+ Object.defineProperty(AbstractInputComponent.prototype, "floatLabel", {
777
+ get: function () {
778
+ return this.dense ? 'never' : this.userFloatLabel;
779
+ },
780
+ enumerable: true,
781
+ configurable: true
782
+ });
783
+ Object.defineProperty(AbstractInputComponent.prototype, "showHint", {
784
+ get: function () {
785
+ return this.dense ? false : !!this.hint;
786
+ },
787
+ enumerable: true,
788
+ configurable: true
789
+ });
790
+ /**
791
+ * Invokes the callback when this components value is changed by a user edit.
792
+ * @param callback
793
+ */
794
+ AbstractInputComponent.prototype.onValueEdited = function (callback) {
795
+ return this.onValueEditedListeners.add(callback);
796
+ };
774
797
  __decorate([
775
798
  core.Input(),
776
799
  __metadata("design:type", String)
777
800
  ], AbstractInputComponent.prototype, "label", void 0);
778
801
  __decorate([
779
- core.Input(),
802
+ core.Input('floatLabel'),
780
803
  __metadata("design:type", String)
781
- ], AbstractInputComponent.prototype, "floatLabel", void 0);
804
+ ], AbstractInputComponent.prototype, "userFloatLabel", void 0);
782
805
  __decorate([
783
806
  core.Input(),
784
807
  __metadata("design:type", String)
@@ -787,6 +810,11 @@
787
810
  core.Input(),
788
811
  __metadata("design:type", String)
789
812
  ], AbstractInputComponent.prototype, "placeholder", void 0);
813
+ __decorate([
814
+ core.HostBinding('class.dense'),
815
+ core.Input(),
816
+ __metadata("design:type", Object)
817
+ ], AbstractInputComponent.prototype, "dense", void 0);
790
818
  __decorate([
791
819
  core.Input('command.focus'),
792
820
  __metadata("design:type", pectin.Command)
@@ -855,7 +883,7 @@
855
883
  var AbstractListInputComponent = /** @class */ (function (_super) {
856
884
  __extends(AbstractListInputComponent, _super);
857
885
  function AbstractListInputComponent() {
858
- var _this = _super !== null && _super.apply(this, arguments) || this;
886
+ var _this = _super.call(this) || this;
859
887
  /**
860
888
  * A backing model for all our @Input() valueModel properties which should be defined as follows.
861
889
  *
@@ -867,11 +895,61 @@
867
895
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
868
896
  */
869
897
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
870
- _this.inputModel = _this.registerDisposable(new pectin.Form.DelegatingListModel());
898
+ _this.formValueModel = _this.registerDisposable(new pectin.Form.DelegatingListModel());
899
+ _this.componentListModel = new pectin.MutableListModel();
900
+ _this.setValueIsInProgress = new pectin.Guard();
901
+ _this.valueChange = new core.EventEmitter();
902
+ var _a = pectin.Dsl.disposeWith(_this), when = _a.when, valueOf = _a.valueOf, chain = _a.chain;
903
+ var binding = new pectin.Binding.Identity(_this.formValueModel, _this.componentListModel);
904
+ var inExternalChange = valueOf.any(_this.setValueIsInProgress, chain(binding.direction).equals(pectin.Binding.Direction.RIGHT)).areTruthy();
905
+ when(_this.componentListModel).changes(function (is, was) {
906
+ _this.valueChange.emit(is);
907
+ _this.onValueEditedListeners.fire(function (l) { return l(is, was); });
908
+ }, {
909
+ initialValue: 'ignore',
910
+ // we never fire events during an external changes to the value. This allows
911
+ // the component to behave when used in the conventional angular
912
+ // fashion, i.e. [(value)]="..."
913
+ unless: inExternalChange
914
+ });
915
+ pectin.DebugContext.tag(_this.formValueModel, _this.constructor.name + ".formValueModel");
871
916
  return _this;
872
917
  }
918
+ Object.defineProperty(AbstractListInputComponent.prototype, "value", {
919
+ // We add support for simple direct display of values by allowing components to be used
920
+ // by `component.value = ...` This use of the component without a value model in tables
921
+ // and the like.
922
+ set: function (value) {
923
+ var _this = this;
924
+ this.setValueIsInProgress.whileTrue(function () {
925
+ if (!_this.listHolder) {
926
+ _this.listHolder = new pectin.MutableListModel(value);
927
+ _this.listModel = _this.listHolder;
928
+ }
929
+ else {
930
+ _this.listHolder.value = value;
931
+ }
932
+ });
933
+ },
934
+ enumerable: true,
935
+ configurable: true
936
+ });
937
+ __decorate([
938
+ core.Input(), pectin.TrackExternal({ delegateTo: 'formValueModel' }),
939
+ __metadata("design:type", Object)
940
+ ], AbstractListInputComponent.prototype, "listModel", void 0);
941
+ __decorate([
942
+ core.Input(),
943
+ __metadata("design:type", Array),
944
+ __metadata("design:paramtypes", [Array])
945
+ ], AbstractListInputComponent.prototype, "value", null);
946
+ __decorate([
947
+ core.Output(),
948
+ __metadata("design:type", Object)
949
+ ], AbstractListInputComponent.prototype, "valueChange", void 0);
873
950
  AbstractListInputComponent = __decorate([
874
- core.Component({ template: '' })
951
+ core.Component({ template: '' }),
952
+ __metadata("design:paramtypes", [])
875
953
  ], AbstractListInputComponent);
876
954
  return AbstractListInputComponent;
877
955
  }(AbstractInputComponent));
@@ -891,14 +969,58 @@
891
969
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
892
970
  */
893
971
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
894
- _this.inputModel = _this.registerDisposable(new pectin.Form.DelegatingValueModel());
895
- _this.inputModel.onTransactionStart(function (tx) {
896
- tx.onRootTransactionFinalised(function () {
897
- console.log({ changed: tx.hasChanged() });
898
- });
972
+ _this.formValueModel = _this.registerDisposable(new pectin.Form.DelegatingValueModel());
973
+ _this.setValueInProgress = new pectin.Guard();
974
+ _this.componentValueModel = new pectin.MutableValueModel();
975
+ _this.valueChange = new core.EventEmitter();
976
+ var _a = pectin.Dsl.disposeWith(_this), when = _a.when, chain = _a.chain, valueOf = _a.valueOf;
977
+ var binding = new pectin.Binding.Identity(_this.formValueModel, _this.componentValueModel);
978
+ var inExternalChange = valueOf.any(_this.setValueInProgress, chain(binding.direction).equals(pectin.Binding.Direction.RIGHT)).areTruthy();
979
+ when(_this.componentValueModel).changes(function (is, was) {
980
+ _this.valueChange.emit(is);
981
+ _this.onValueEditedListeners.fire(function (l) { return l(is, was); });
982
+ }, {
983
+ initialValue: 'ignore',
984
+ // we never fire events during an external set value operation. This allows
985
+ // the component to behave when used in the conventional angular
986
+ // fashion, i.e. [(value)]="..."
987
+ unless: inExternalChange
899
988
  });
989
+ pectin.DebugContext.tag(_this.formValueModel, _this.constructor.name + ".formValueModel");
900
990
  return _this;
901
991
  }
992
+ Object.defineProperty(AbstractValueInputComponent.prototype, "value", {
993
+ // We add support for simple direct display of values by allowing components to be used
994
+ // by `component.value = ...` This use of the component without a value model in tables
995
+ // and the like.
996
+ set: function (value) {
997
+ var _this = this;
998
+ this.setValueInProgress.whileTrue(function () {
999
+ if (!_this.plainValueHolder) {
1000
+ _this.plainValueHolder = new pectin.MutableValueModel(value);
1001
+ _this.valueModel = _this.plainValueHolder;
1002
+ }
1003
+ else {
1004
+ _this.plainValueHolder.value = value;
1005
+ }
1006
+ });
1007
+ },
1008
+ enumerable: true,
1009
+ configurable: true
1010
+ });
1011
+ __decorate([
1012
+ core.Input(), pectin.TrackExternal({ delegateTo: 'formValueModel' }),
1013
+ __metadata("design:type", Object)
1014
+ ], AbstractValueInputComponent.prototype, "valueModel", void 0);
1015
+ __decorate([
1016
+ core.Input(),
1017
+ __metadata("design:type", Object),
1018
+ __metadata("design:paramtypes", [Object])
1019
+ ], AbstractValueInputComponent.prototype, "value", null);
1020
+ __decorate([
1021
+ core.Output(),
1022
+ __metadata("design:type", Object)
1023
+ ], AbstractValueInputComponent.prototype, "valueChange", void 0);
902
1024
  AbstractValueInputComponent = __decorate([
903
1025
  core.Component({ template: '' }),
904
1026
  __metadata("design:paramtypes", [])
@@ -906,20 +1028,85 @@
906
1028
  return AbstractValueInputComponent;
907
1029
  }(AbstractInputComponent));
908
1030
 
1031
+ /**
1032
+ * Using templates (not only supported for nil values:
1033
+ * <aup-autocomplete-input [valueModel]="myModel" [options]="myOptions">
1034
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1035
+ * </aup-autocomplete-input>
1036
+ */
1037
+ var AutocompleteInputComponent = /** @class */ (function (_super) {
1038
+ __extends(AutocompleteInputComponent, _super);
1039
+ function AutocompleteInputComponent() {
1040
+ var _this = _super.call(this) || this;
1041
+ _this.filterValue = new pectin.MutableValueModel();
1042
+ _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
1043
+ var _a = pectin.Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
1044
+ var lowerCaseFilterValue = chain(_this.filterValue)
1045
+ .map(function (v) { return ___default__default.isString(v) ? v.toLowerCase() : ''; });
1046
+ _this.filteredOptions = chain(_this.optionsModel)
1047
+ .select(function (option) {
1048
+ return ___default__default.isEmpty(_this.filterValue.value) || _this.optionLabelFormat(option).toString().toLowerCase().includes(lowerCaseFilterValue.value);
1049
+ }, { dependsOn: lowerCaseFilterValue });
1050
+ return _this;
1051
+ }
1052
+ AutocompleteInputComponent.prototype.ngOnInit = function () {
1053
+ };
1054
+ AutocompleteInputComponent.prototype.formatOption = function (option) {
1055
+ return this.optionLabelFormat(option);
1056
+ };
1057
+ AutocompleteInputComponent.prototype.updateFilter = function ($event) {
1058
+ this.filterValue.value = $event;
1059
+ };
1060
+ AutocompleteInputComponent.prototype.onSelect = function ($event) {
1061
+ this.valueModel.value = $event.option.value;
1062
+ };
1063
+ __decorate([
1064
+ core.Input(), pectin.TrackExternal(),
1065
+ __metadata("design:type", pectin.ListModel)
1066
+ ], AutocompleteInputComponent.prototype, "optionsModel", void 0);
1067
+ __decorate([
1068
+ core.Input(), pectin.StoreInListModel('optionsModel'),
1069
+ __metadata("design:type", Array)
1070
+ ], AutocompleteInputComponent.prototype, "options", void 0);
1071
+ __decorate([
1072
+ core.Input(),
1073
+ __metadata("design:type", Object)
1074
+ ], AutocompleteInputComponent.prototype, "optionLabel", void 0);
1075
+ __decorate([
1076
+ core.Input(),
1077
+ __metadata("design:type", Boolean)
1078
+ ], AutocompleteInputComponent.prototype, "allowNil", void 0);
1079
+ __decorate([
1080
+ core.ContentChild('nilOptionTemplate'),
1081
+ __metadata("design:type", core.TemplateRef)
1082
+ ], AutocompleteInputComponent.prototype, "nilOptionTemplateRef", void 0);
1083
+ __decorate([
1084
+ core.Input(),
1085
+ __metadata("design:type", Function)
1086
+ ], AutocompleteInputComponent.prototype, "optionLabelFormat", void 0);
1087
+ AutocompleteInputComponent = __decorate([
1088
+ core.Component({
1089
+ selector: 'aup-autocomplete-input',
1090
+ 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",
1091
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
1092
+ }),
1093
+ __metadata("design:paramtypes", [])
1094
+ ], AutocompleteInputComponent);
1095
+ return AutocompleteInputComponent;
1096
+ }(AbstractValueInputComponent));
1097
+
909
1098
  var CheckboxInputComponent = /** @class */ (function (_super) {
910
1099
  __extends(CheckboxInputComponent, _super);
911
1100
  function CheckboxInputComponent() {
912
1101
  var _this = _super.call(this) || this;
1102
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1103
+ // valueModel: Form.ValueModelBase<boolean> | IMutableValueModel<boolean>;
913
1104
  _this.color = 'accent';
914
1105
  _this.labelPosition = 'after';
915
1106
  return _this;
916
1107
  }
917
1108
  CheckboxInputComponent.prototype.ngOnInit = function () {
918
1109
  };
919
- __decorate([
920
- core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
921
- __metadata("design:type", Object)
922
- ], CheckboxInputComponent.prototype, "valueModel", void 0);
923
1110
  __decorate([
924
1111
  core.Input(),
925
1112
  __metadata("design:type", String)
@@ -931,28 +1118,73 @@
931
1118
  CheckboxInputComponent = __decorate([
932
1119
  core.Component({
933
1120
  selector: 'aup-checkbox-input',
934
- 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",
935
- 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}"]
1121
+ 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",
1122
+ 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}"]
936
1123
  }),
937
1124
  __metadata("design:paramtypes", [])
938
1125
  ], CheckboxInputComponent);
939
1126
  return CheckboxInputComponent;
940
1127
  }(AbstractValueInputComponent));
941
1128
 
1129
+ /**
1130
+ * Using templates:
1131
+ * <aup-multiple-select-input [valueModel]="myModel" [options]="myOptions">
1132
+ * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1133
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1134
+ * </aup-multiple-select_input>
1135
+ */
1136
+ var MultipleSelectInputComponent = /** @class */ (function (_super) {
1137
+ __extends(MultipleSelectInputComponent, _super);
1138
+ function MultipleSelectInputComponent() {
1139
+ var _this = _super.call(this) || this;
1140
+ _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
1141
+ return _this;
1142
+ }
1143
+ MultipleSelectInputComponent.prototype.ngOnInit = function () {
1144
+ };
1145
+ __decorate([
1146
+ core.Input(), pectin.TrackExternal(),
1147
+ __metadata("design:type", pectin.ListModel)
1148
+ ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
1149
+ __decorate([
1150
+ core.Input(), pectin.StoreInListModel('optionsModel'),
1151
+ __metadata("design:type", Array)
1152
+ ], MultipleSelectInputComponent.prototype, "options", void 0);
1153
+ __decorate([
1154
+ core.Input(),
1155
+ __metadata("design:type", Object)
1156
+ ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
1157
+ __decorate([
1158
+ core.ContentChild('optionTemplate'),
1159
+ __metadata("design:type", core.TemplateRef)
1160
+ ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
1161
+ __decorate([
1162
+ core.Input(),
1163
+ __metadata("design:type", Function)
1164
+ ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
1165
+ MultipleSelectInputComponent = __decorate([
1166
+ core.Component({
1167
+ selector: 'aup-multiple-select-input',
1168
+ 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",
1169
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
1170
+ }),
1171
+ __metadata("design:paramtypes", [])
1172
+ ], MultipleSelectInputComponent);
1173
+ return MultipleSelectInputComponent;
1174
+ }(AbstractListInputComponent));
1175
+
942
1176
  var NumberInputComponent = /** @class */ (function (_super) {
943
1177
  __extends(NumberInputComponent, _super);
944
1178
  function NumberInputComponent() {
945
1179
  var _this = _super.call(this) || this;
1180
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1181
+ // valueModel: Form.ValueModelBase<number> | IMutableValueModel<number>;
946
1182
  _this.min = Number.MIN_SAFE_INTEGER;
947
1183
  _this.max = Number.MAX_SAFE_INTEGER;
948
1184
  return _this;
949
1185
  }
950
1186
  NumberInputComponent.prototype.ngOnInit = function () {
951
1187
  };
952
- __decorate([
953
- core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
954
- __metadata("design:type", Object)
955
- ], NumberInputComponent.prototype, "valueModel", void 0);
956
1188
  __decorate([
957
1189
  core.Input(),
958
1190
  __metadata("design:type", Object)
@@ -964,8 +1196,8 @@
964
1196
  NumberInputComponent = __decorate([
965
1197
  core.Component({
966
1198
  selector: 'aup-number-input',
967
- 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",
968
- 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}"]
1199
+ 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",
1200
+ styles: [""]
969
1201
  }),
970
1202
  __metadata("design:paramtypes", [])
971
1203
  ], NumberInputComponent);
@@ -974,26 +1206,31 @@
974
1206
 
975
1207
  var PasswordInputComponent = /** @class */ (function (_super) {
976
1208
  __extends(PasswordInputComponent, _super);
1209
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1210
+ // valueModel: Form.ValueModelBase<string> | IMutableValueModel<string>;
977
1211
  function PasswordInputComponent() {
978
1212
  return _super.call(this) || this;
979
1213
  }
980
1214
  PasswordInputComponent.prototype.ngOnInit = function () {
981
1215
  };
982
- __decorate([
983
- core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
984
- __metadata("design:type", Object)
985
- ], PasswordInputComponent.prototype, "valueModel", void 0);
986
1216
  PasswordInputComponent = __decorate([
987
1217
  core.Component({
988
1218
  selector: 'aup-password-input',
989
- 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",
990
- 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}"]
1219
+ 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",
1220
+ styles: [""]
991
1221
  }),
992
1222
  __metadata("design:paramtypes", [])
993
1223
  ], PasswordInputComponent);
994
1224
  return PasswordInputComponent;
995
1225
  }(AbstractValueInputComponent));
996
1226
 
1227
+ /**
1228
+ * Using templates:
1229
+ * <aup-select-input [valueModel]="myModel" [options]="myOptions">
1230
+ * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1231
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1232
+ * </aup-select_input>
1233
+ */
997
1234
  var SelectInputComponent = /** @class */ (function (_super) {
998
1235
  __extends(SelectInputComponent, _super);
999
1236
  function SelectInputComponent() {
@@ -1003,10 +1240,6 @@
1003
1240
  }
1004
1241
  SelectInputComponent.prototype.ngOnInit = function () {
1005
1242
  };
1006
- __decorate([
1007
- core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
1008
- __metadata("design:type", Object)
1009
- ], SelectInputComponent.prototype, "valueModel", void 0);
1010
1243
  __decorate([
1011
1244
  core.Input(), pectin.TrackExternal(),
1012
1245
  __metadata("design:type", pectin.ListModel)
@@ -1038,7 +1271,7 @@
1038
1271
  SelectInputComponent = __decorate([
1039
1272
  core.Component({
1040
1273
  selector: 'aup-select-input',
1041
- 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",
1274
+ 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",
1042
1275
  styles: [":host{display:inline-block}mat-form-field{width:100%}"]
1043
1276
  }),
1044
1277
  __metadata("design:paramtypes", [])
@@ -1052,17 +1285,13 @@
1052
1285
  var _this = _super.call(this) || this;
1053
1286
  var _a = pectin.Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
1054
1287
  _this.clearCommand = pectin.Command.create(function () {
1055
- _this.valueModel.value = null;
1288
+ _this.componentValueModel.value = null;
1056
1289
  });
1057
- _this.clearCommand.disableWhile(chain.stringValue(_this.valueModel).isBlank());
1290
+ _this.clearCommand.disableWhile(chain.stringValue(_this.componentValueModel).isBlank());
1058
1291
  return _this;
1059
1292
  }
1060
1293
  StringInputComponent.prototype.ngOnInit = function () {
1061
1294
  };
1062
- __decorate([
1063
- core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
1064
- __metadata("design:type", Object)
1065
- ], StringInputComponent.prototype, "valueModel", void 0);
1066
1295
  __decorate([
1067
1296
  core.Input(), pectin.TrackExternal({ defaultValue: false }),
1068
1297
  __metadata("design:type", pectin.ValueModel)
@@ -1074,8 +1303,8 @@
1074
1303
  StringInputComponent = __decorate([
1075
1304
  core.Component({
1076
1305
  selector: 'aup-string-input',
1077
- 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",
1078
- 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}"]
1306
+ 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",
1307
+ styles: ["button[disabled]{visibility:hidden}"]
1079
1308
  }),
1080
1309
  __metadata("design:paramtypes", [])
1081
1310
  ], StringInputComponent);
@@ -1086,16 +1315,14 @@
1086
1315
  __extends(TextInputComponent, _super);
1087
1316
  function TextInputComponent() {
1088
1317
  var _this = _super.call(this) || this;
1318
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1319
+ // valueModel: Form.ValueModelBase<string> | IMutableValueModel<string>;
1089
1320
  _this.rows = 2;
1090
1321
  return _this;
1091
1322
  // const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
1092
1323
  }
1093
1324
  TextInputComponent.prototype.ngOnInit = function () {
1094
1325
  };
1095
- __decorate([
1096
- core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
1097
- __metadata("design:type", Object)
1098
- ], TextInputComponent.prototype, "valueModel", void 0);
1099
1326
  __decorate([
1100
1327
  core.Input(),
1101
1328
  __metadata("design:type", Object)
@@ -1107,14 +1334,56 @@
1107
1334
  TextInputComponent = __decorate([
1108
1335
  core.Component({
1109
1336
  selector: 'aup-text-input',
1110
- 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",
1111
- 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}"]
1337
+ 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",
1338
+ styles: ["button[disabled]{visibility:hidden}textarea{overflow:auto}"]
1112
1339
  }),
1113
1340
  __metadata("design:paramtypes", [])
1114
1341
  ], TextInputComponent);
1115
1342
  return TextInputComponent;
1116
1343
  }(AbstractValueInputComponent));
1117
1344
 
1345
+ var IconComponent = /** @class */ (function () {
1346
+ function IconComponent() {
1347
+ }
1348
+ Object.defineProperty(IconComponent.prototype, "icon", {
1349
+ get: function () {
1350
+ return this._icon;
1351
+ },
1352
+ set: function (iconName) {
1353
+ this._icon = iconName;
1354
+ if (!iconName) {
1355
+ this.errorMessage = 'icon is nil';
1356
+ this.prefix = undefined;
1357
+ return;
1358
+ }
1359
+ var colonIndex = iconName.indexOf(':');
1360
+ if (colonIndex > 0) {
1361
+ this.prefix = this.icon.slice(0, colonIndex);
1362
+ this.suffix = this.icon.slice(colonIndex + 1);
1363
+ }
1364
+ if (this.prefix) {
1365
+ this.errorMessage = "Unknown icon \"" + iconName + "\"";
1366
+ }
1367
+ this.errorMessage = "Unknown icon prefix \"" + this.prefix + "\"";
1368
+ },
1369
+ enumerable: true,
1370
+ configurable: true
1371
+ });
1372
+ __decorate([
1373
+ core.Input(),
1374
+ __metadata("design:type", String),
1375
+ __metadata("design:paramtypes", [String])
1376
+ ], IconComponent.prototype, "icon", null);
1377
+ IconComponent = __decorate([
1378
+ core.Component({
1379
+ selector: 'aup-icon',
1380
+ 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",
1381
+ 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}"]
1382
+ })
1383
+ ], IconComponent);
1384
+ return IconComponent;
1385
+ }());
1386
+
1118
1387
  var NoopComponent = /** @class */ (function () {
1119
1388
  function NoopComponent() {
1120
1389
  }
@@ -1325,6 +1594,7 @@
1325
1594
  typescriptUtilities.assert.isTruthy(host);
1326
1595
  host[HEADER_CELL_RENDERER_PORTAL] = new portal.ComponentPortal(this.componentType);
1327
1596
  };
1597
+ // @Trace()
1328
1598
  CellHeaderPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
1329
1599
  this.initialiseHeader(portalComponent, host.column);
1330
1600
  };
@@ -1348,13 +1618,15 @@
1348
1618
  ComponentCellRendererPortalRef.prototype.initialiseHost = function (host, columnModel) {
1349
1619
  host[CELL_RENDERER_PORTAL] = new portal.ComponentPortal(this.componentType);
1350
1620
  };
1621
+ // @Trace()
1351
1622
  ComponentCellRendererPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
1352
1623
  host[PORTAL_RENDERER_COMPONENT] = portalComponent;
1353
- this.updateComponent(portalComponent, host.getRowData());
1624
+ this.updateComponent(portalComponent, host.getRowData(), true);
1354
1625
  };
1626
+ // @Trace()
1355
1627
  ComponentCellRendererPortalRef.prototype.pushState = function (host) {
1356
1628
  if (host[PORTAL_RENDERER_COMPONENT]) {
1357
- this.updateComponent(host[PORTAL_RENDERER_COMPONENT], host.getRowData());
1629
+ this.updateComponent(host[PORTAL_RENDERER_COMPONENT], host.getRowData(), false);
1358
1630
  }
1359
1631
  };
1360
1632
  return ComponentCellRendererPortalRef;
@@ -1396,6 +1668,7 @@
1396
1668
  TemplateCellRendererPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
1397
1669
  // don't care
1398
1670
  };
1671
+ // @Trace()
1399
1672
  TemplateCellRendererPortalRef.prototype.pushState = function (host) {
1400
1673
  host[CELL_RENDERER_PORTAL] = this.createPortal(host.getRowData());
1401
1674
  host.fillCell = this.fillCell;
@@ -1587,6 +1860,7 @@
1587
1860
  var noop = function () {
1588
1861
  };
1589
1862
  var ɵ0 = noop;
1863
+ var CELL_RENDERER_COMPONENT_ROW_CACHE = Symbol("aup-cell-renderer:row-data-cache");
1590
1864
  var ColumnModel = /** @class */ (function () {
1591
1865
  function ColumnModel(columnId, defaults) {
1592
1866
  this.columnId = columnId;
@@ -1677,24 +1951,66 @@
1677
1951
  }());
1678
1952
  var PropertyColumnModel = /** @class */ (function (_super) {
1679
1953
  __extends(PropertyColumnModel, _super);
1680
- function PropertyColumnModel(property, defaults) {
1681
- var _this = _super.call(this, property.toString(), defaults) || this;
1954
+ function PropertyColumnModel(id, property, defaults) {
1955
+ var _this = _super.call(this, id, defaults) || this;
1682
1956
  _this.property = property;
1683
1957
  _this._format = function (value) { return value; };
1684
1958
  _this.cellRenderer(DefaultCellRendererComponent);
1685
1959
  return _this;
1686
1960
  }
1687
- PropertyColumnModel.prototype.cellRenderer = function (componentType) {
1961
+ PropertyColumnModel.prototype.cellRenderer = function (componentType, onComponentInitOrOptions) {
1688
1962
  var _this = this;
1689
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
1963
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData, firstTime) {
1964
+ if (firstTime) {
1965
+ if (___default__default.isFunction(onComponentInitOrOptions)) {
1966
+ onComponentInitOrOptions(component);
1967
+ }
1968
+ else {
1969
+ if (___default__default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onComponentInit)) {
1970
+ onComponentInitOrOptions.onComponentInit(component);
1971
+ }
1972
+ }
1973
+ }
1690
1974
  component.value = _this._format(rowData.row[_this.property]);
1975
+ if (!___default__default.isFunction(onComponentInitOrOptions) && ___default__default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onRowUpdate)) {
1976
+ onComponentInitOrOptions.onRowUpdate(component, rowData.row);
1977
+ }
1691
1978
  }));
1692
1979
  return this;
1693
1980
  };
1694
- PropertyColumnModel.prototype.cellEditor = function (editor, validatorsOrInitialiser, initialiseComponent) {
1981
+ PropertyColumnModel.prototype.mutableCellRenderer = function (componentType, options) {
1982
+ var _this = this;
1983
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData, firstTime) {
1984
+ // keep a local copy most recent row value so it's available to teh
1985
+ // edit callback without having to add/remove subscribers all the time.
1986
+ component[CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
1987
+ var disableEditCallback = false;
1988
+ if (firstTime) {
1989
+ if (___default__default.isFunction(options === null || options === void 0 ? void 0 : options.onComponentInit)) {
1990
+ options.onComponentInit(component);
1991
+ }
1992
+ // install our edit callback
1993
+ component.onValueEdited(function (is, was) {
1994
+ if (!disableEditCallback) {
1995
+ options.onValueEdit(component[CELL_RENDERER_COMPONENT_ROW_CACHE], is, was);
1996
+ }
1997
+ });
1998
+ }
1999
+ // now push the value the component and disable the callback just incase the component misbehaves
2000
+ // and fires a value change during the operation.
2001
+ disableEditCallback = true;
2002
+ component.value = rowData.row[_this.property];
2003
+ disableEditCallback = false;
2004
+ if (!___default__default.isFunction(options) && ___default__default.isFunction(options === null || options === void 0 ? void 0 : options.onRowUpdate)) {
2005
+ options.onRowUpdate(component, rowData.row);
2006
+ }
2007
+ }));
2008
+ return this;
2009
+ };
2010
+ PropertyColumnModel.prototype.cellEditor = function (editor, validatorsOrInitialiser, onComponentInit) {
1695
2011
  var _this = this;
1696
2012
  var validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
1697
- var initialiser = ___default__default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
2013
+ var initialiser = ___default__default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
1698
2014
  this.configureCellEditor(new CellEditorPortalRef(editor, function (component, editSession) {
1699
2015
  var formValueModel = editSession.form.pluck(_this.property);
1700
2016
  if (validators) {
@@ -1719,8 +2035,8 @@
1719
2035
  }(ColumnModel));
1720
2036
  var ListPropertyColumnModel = /** @class */ (function (_super) {
1721
2037
  __extends(ListPropertyColumnModel, _super);
1722
- function ListPropertyColumnModel(property, defaults) {
1723
- var _this = _super.call(this, property.toString(), defaults) || this;
2038
+ function ListPropertyColumnModel(id, property, defaults) {
2039
+ var _this = _super.call(this, id, defaults) || this;
1724
2040
  _this.property = property;
1725
2041
  _this._format = function (value) { return value.map(function (v) { return v === null || v === void 0 ? void 0 : v.toString(); }).join(', '); };
1726
2042
  _this.cellRenderer(DefaultCellRendererComponent);
@@ -1767,10 +2083,23 @@
1767
2083
  _this.cellRenderer(DefaultCellRendererComponent);
1768
2084
  return _this;
1769
2085
  }
1770
- CustomValueColumnModel.prototype.cellRenderer = function (componentType) {
2086
+ CustomValueColumnModel.prototype.cellRenderer = function (componentType, onComponentInitOrOptions) {
1771
2087
  var _this = this;
1772
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
2088
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData, firstTime) {
2089
+ if (firstTime) {
2090
+ if (___default__default.isFunction(onComponentInitOrOptions)) {
2091
+ onComponentInitOrOptions(component);
2092
+ }
2093
+ else {
2094
+ if (___default__default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onComponentInit)) {
2095
+ onComponentInitOrOptions.onComponentInit(component);
2096
+ }
2097
+ }
2098
+ }
1773
2099
  component.value = _this.getValue(rowData.row);
2100
+ if (!___default__default.isFunction(onComponentInitOrOptions) && ___default__default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onRowUpdate)) {
2101
+ onComponentInitOrOptions.onRowUpdate(component, rowData.row);
2102
+ }
1774
2103
  }));
1775
2104
  return this;
1776
2105
  };
@@ -1954,7 +2283,7 @@
1954
2283
  this.dataSource = chain(this.sourceOfTruth).replaceAll(this.rowsBeingEdited);
1955
2284
  this.firstEditableColumn = chain(this.columns).select(function (c) { return c.hasEditorPortal(); }).first();
1956
2285
  this.hasColumnsWithRowSelectionExplicitlyEnabled = chain(this._columns).findIndex(function (column) { return column.isRowSelectionExplicitlyEnabled(); }).isGreaterThanOrEqualTo(0);
1957
- this.addRowClass("enable-hover", function () { return _this.isRowSelectionEnabled(); });
2286
+ this.addRowClass('enable-hover', function () { return _this.isRowSelectionEnabled(); });
1958
2287
  }
1959
2288
  TableModel_1 = TableModel;
1960
2289
  TableModel.fromList = function (sourceOfTruth, builder) {
@@ -1982,11 +2311,11 @@
1982
2311
  enumerable: true,
1983
2312
  configurable: true
1984
2313
  });
1985
- TableModel.prototype.pluck = function (property) {
1986
- return this.addColumn(new PropertyColumnModel(property, this));
2314
+ TableModel.prototype.pluck = function (property, options) {
2315
+ return this.addColumn(new PropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1987
2316
  };
1988
- TableModel.prototype.pluckList = function (property) {
1989
- return this.addColumn(new ListPropertyColumnModel(property, this));
2317
+ TableModel.prototype.pluckList = function (property, options) {
2318
+ return this.addColumn(new ListPropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1990
2319
  };
1991
2320
  TableModel.prototype.addSelectionColumn = function (selectionModel) {
1992
2321
  pectin.assert.isNil(this.selectionColumnModel);
@@ -2000,6 +2329,9 @@
2000
2329
  TableModel.prototype.addCustomColumn = function (columnId, dataAccessor) {
2001
2330
  return this.addColumn(new CustomValueColumnModel(columnId, this, dataAccessor));
2002
2331
  };
2332
+ TableModel.prototype.addComponentColumn = function (columnId, component, onComponentInitOrOptions) {
2333
+ return this.addColumn(new CustomValueColumnModel(columnId, this, function (row) { return row; })).cellRenderer(component, onComponentInitOrOptions);
2334
+ };
2003
2335
  TableModel.prototype.addTemplateColumn = function (columnId) {
2004
2336
  return this.addColumn(new CustomTemplateColumnModel(columnId, this));
2005
2337
  };
@@ -2419,100 +2751,6 @@
2419
2751
  return VerticalFocusContainerComponent;
2420
2752
  }(FocusContainerComponent));
2421
2753
 
2422
- var MultipleSelectInputComponent = /** @class */ (function (_super) {
2423
- __extends(MultipleSelectInputComponent, _super);
2424
- function MultipleSelectInputComponent() {
2425
- var _this = _super.call(this) || this;
2426
- _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
2427
- return _this;
2428
- }
2429
- MultipleSelectInputComponent.prototype.ngOnInit = function () {
2430
- };
2431
- __decorate([
2432
- core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
2433
- __metadata("design:type", Object)
2434
- ], MultipleSelectInputComponent.prototype, "listModel", void 0);
2435
- __decorate([
2436
- core.Input(), pectin.TrackExternal(),
2437
- __metadata("design:type", pectin.ListModel)
2438
- ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
2439
- __decorate([
2440
- core.Input(), pectin.StoreInListModel('optionsModel'),
2441
- __metadata("design:type", Array)
2442
- ], MultipleSelectInputComponent.prototype, "options", void 0);
2443
- __decorate([
2444
- core.Input(),
2445
- __metadata("design:type", Object)
2446
- ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
2447
- __decorate([
2448
- core.Input(),
2449
- __metadata("design:type", Boolean)
2450
- ], MultipleSelectInputComponent.prototype, "allowNil", void 0);
2451
- __decorate([
2452
- core.ContentChild('optionTemplate'),
2453
- __metadata("design:type", core.TemplateRef)
2454
- ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
2455
- __decorate([
2456
- core.ContentChild('nilOptionTemplate'),
2457
- __metadata("design:type", core.TemplateRef)
2458
- ], MultipleSelectInputComponent.prototype, "nilOptionTemplateRef", void 0);
2459
- __decorate([
2460
- core.Input(),
2461
- __metadata("design:type", Function)
2462
- ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
2463
- MultipleSelectInputComponent = __decorate([
2464
- core.Component({
2465
- selector: 'aup-multiple-select-input',
2466
- 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",
2467
- styles: [":host{display:inline-block}mat-form-field{width:100%}"]
2468
- }),
2469
- __metadata("design:paramtypes", [])
2470
- ], MultipleSelectInputComponent);
2471
- return MultipleSelectInputComponent;
2472
- }(AbstractListInputComponent));
2473
-
2474
- var IconComponent = /** @class */ (function () {
2475
- function IconComponent() {
2476
- }
2477
- Object.defineProperty(IconComponent.prototype, "icon", {
2478
- get: function () {
2479
- return this._icon;
2480
- },
2481
- set: function (iconName) {
2482
- this._icon = iconName;
2483
- if (!iconName) {
2484
- this.errorMessage = 'icon is nil';
2485
- this.prefix = undefined;
2486
- return;
2487
- }
2488
- var colonIndex = iconName.indexOf(':');
2489
- if (colonIndex > 0) {
2490
- this.prefix = this.icon.slice(0, colonIndex);
2491
- this.suffix = this.icon.slice(colonIndex + 1);
2492
- }
2493
- if (this.prefix) {
2494
- this.errorMessage = "Unknown icon \"" + iconName + "\"";
2495
- }
2496
- this.errorMessage = "Unknown icon prefix \"" + this.prefix + "\"";
2497
- },
2498
- enumerable: true,
2499
- configurable: true
2500
- });
2501
- __decorate([
2502
- core.Input(),
2503
- __metadata("design:type", String),
2504
- __metadata("design:paramtypes", [String])
2505
- ], IconComponent.prototype, "icon", null);
2506
- IconComponent = __decorate([
2507
- core.Component({
2508
- selector: 'aup-icon',
2509
- 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",
2510
- 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}"]
2511
- })
2512
- ], IconComponent);
2513
- return IconComponent;
2514
- }());
2515
-
2516
2754
  var ComponentsModule = /** @class */ (function () {
2517
2755
  function ComponentsModule(faIconLibrary) {
2518
2756
  faIconLibrary.addIconPacks(freeSolidSvgIcons.fas);
@@ -2531,6 +2769,8 @@
2531
2769
  TextInputComponent,
2532
2770
  PasswordInputComponent,
2533
2771
  SelectInputComponent,
2772
+ MultipleSelectInputComponent,
2773
+ AutocompleteInputComponent,
2534
2774
  CheckboxInputComponent,
2535
2775
  ScrollContainerComponent,
2536
2776
  NoopComponent,
@@ -2550,7 +2790,6 @@
2550
2790
  SelectHeaderCellRendererComponent,
2551
2791
  DefaultHeaderCellRendererComponent,
2552
2792
  TableHeaderCellRendererComponent,
2553
- MultipleSelectInputComponent,
2554
2793
  IconComponent,
2555
2794
  SectionHeaderComponent
2556
2795
  ],
@@ -2570,7 +2809,8 @@
2570
2809
  portal.PortalModule,
2571
2810
  scrolling.CdkScrollableModule,
2572
2811
  angularFontawesome.FontAwesomeModule,
2573
- tooltip.MatTooltipModule
2812
+ tooltip.MatTooltipModule,
2813
+ autocomplete.MatAutocompleteModule
2574
2814
  ],
2575
2815
  exports: [
2576
2816
  NumberInputComponent,
@@ -2579,6 +2819,8 @@
2579
2819
  PasswordInputComponent,
2580
2820
  CheckboxInputComponent,
2581
2821
  SelectInputComponent,
2822
+ MultipleSelectInputComponent,
2823
+ AutocompleteInputComponent,
2582
2824
  ScrollContainerComponent,
2583
2825
  NoopComponent,
2584
2826
  SwitchCaseComponent,
@@ -2591,12 +2833,23 @@
2591
2833
  TableComponent,
2592
2834
  EditRowControls,
2593
2835
  ColumnTemplateDirective,
2594
- MultipleSelectInputComponent,
2595
2836
  IconComponent,
2596
2837
  SectionHeaderComponent
2597
2838
  ],
2598
2839
  providers: [
2599
- FocusBindingFactory,
2840
+ FocusBindingFactory
2841
+ // {
2842
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
2843
+ // type: 'string',
2844
+ // editorClass: StringInputComponent
2845
+ // }, multi: true
2846
+ // },
2847
+ // {
2848
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
2849
+ // type: 'number',
2850
+ // editorClass: NumberInputComponent
2851
+ // }, multi: true
2852
+ // }
2600
2853
  ]
2601
2854
  }),
2602
2855
  __metadata("design:paramtypes", [angularFontawesome.FaIconLibrary])
@@ -3035,6 +3288,7 @@
3035
3288
  ActivityContainerComponent.prototype.registerDisposable = function (disposable) {
3036
3289
  return this.garbage.registerDisposable(disposable);
3037
3290
  };
3291
+ // @Trace()
3038
3292
  ActivityContainerComponent.prototype.dispose = function () {
3039
3293
  // TODO: think about auto cancelling any outstanding activity on dispose.
3040
3294
  // See NavigationState.Navigating for a use-case.
@@ -3183,12 +3437,6 @@
3183
3437
  core.ViewChildren(ActivityOutletComponent),
3184
3438
  __metadata("design:type", core.QueryList)
3185
3439
  ], ActivityContainerComponent.prototype, "activityOutlets", void 0);
3186
- __decorate([
3187
- pectin.Trace(),
3188
- __metadata("design:type", Function),
3189
- __metadata("design:paramtypes", []),
3190
- __metadata("design:returntype", void 0)
3191
- ], ActivityContainerComponent.prototype, "dispose", null);
3192
3440
  ActivityContainerComponent = __decorate([
3193
3441
  core.Component({
3194
3442
  selector: 'aup-activity-container',
@@ -3237,7 +3485,7 @@
3237
3485
  }());
3238
3486
 
3239
3487
  var inplaceMonitorCount = 0;
3240
- exports.ɵbv = /** @class */ (function () {
3488
+ exports.ɵbw = /** @class */ (function () {
3241
3489
  function InteractionService(modelInteractionContextFactory) {
3242
3490
  this.modelInteractionContextFactory = modelInteractionContextFactory;
3243
3491
  this.garbage = new pectin.GarbageCollector();
@@ -3382,7 +3630,7 @@
3382
3630
  return ApiAdapter;
3383
3631
  }());
3384
3632
  InteractionService.ApiAdapter = ApiAdapter;
3385
- })(exports.ɵbv || (exports.ɵbv = {}));
3633
+ })(exports.ɵbw || (exports.ɵbw = {}));
3386
3634
 
3387
3635
  var InPlaceInteractionContextComponent = /** @class */ (function (_super) {
3388
3636
  __extends(InPlaceInteractionContextComponent, _super);
@@ -3440,7 +3688,7 @@
3440
3688
  return this.activityContainerComponent.startActivity(activityType, data, options);
3441
3689
  };
3442
3690
  InPlaceInteractionContextComponent.ctorParameters = function () { return [
3443
- { type: exports.ɵbv },
3691
+ { type: exports.ɵbw },
3444
3692
  { type: undefined, decorators: [{ type: core.Inject, args: [tabs.MAT_TABS_CONFIG,] }, { type: core.Optional }] }
3445
3693
  ]; };
3446
3694
  __decorate([
@@ -3458,7 +3706,7 @@
3458
3706
  styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}"]
3459
3707
  }),
3460
3708
  __param(1, core.Inject(tabs.MAT_TABS_CONFIG)), __param(1, core.Optional()),
3461
- __metadata("design:paramtypes", [exports.ɵbv, Object])
3709
+ __metadata("design:paramtypes", [exports.ɵbw, Object])
3462
3710
  ], InPlaceInteractionContextComponent);
3463
3711
  return InPlaceInteractionContextComponent;
3464
3712
  }(DisposableComponent));
@@ -3997,7 +4245,7 @@
3997
4245
  AlertDialogComponent
3998
4246
  ],
3999
4247
  providers: [
4000
- exports.ɵbv
4248
+ exports.ɵbw
4001
4249
  // {
4002
4250
  // provide: MAT_TABS_CONFIG, useValue: { animationDuration: "2s" }
4003
4251
  // }
@@ -4272,7 +4520,7 @@
4272
4520
  pectin.assert.isNil(this.visitModel.value);
4273
4521
  var when = pectin.Dsl.disposeWith(this).when;
4274
4522
  this.visitModel.value = visit;
4275
- pectin.DebugContext.get(this.visitModel).tag(this.placeDefinition.component.name + ".visitModel");
4523
+ pectin.DebugContext.getOrCreate(this.visitModel).tag(this.placeDefinition.component.name + ".visitModel");
4276
4524
  this.placeDefinition.getVisitParameterDefs().forEach(function (parameterDef) { return _this.installBinding(parameterDef); });
4277
4525
  when.valueOf(this.visitModel).changes(function (current, previous) {
4278
4526
  notifyVisitChanged(current, previous);
@@ -5119,7 +5367,7 @@
5119
5367
  return PopStateNavigation;
5120
5368
  }(AbstractPopStateNavigation));
5121
5369
 
5122
- exports.ɵby = /** @class */ (function () {
5370
+ exports.ɵbz = /** @class */ (function () {
5123
5371
  function PlaceHistory() {
5124
5372
  this._archive = new Map();
5125
5373
  this.placeHistoryDepth = 4;
@@ -5256,7 +5504,7 @@
5256
5504
  // }
5257
5505
  //
5258
5506
  // }
5259
- })(exports.ɵby || (exports.ɵby = {}));
5507
+ })(exports.ɵbz || (exports.ɵbz = {}));
5260
5508
 
5261
5509
  exports.UrlSnapshot = /** @class */ (function () {
5262
5510
  // TODO: Update this accept a url Parser so it can be immutable and generate new trees on mutation using toString() are parseUrl.
@@ -5420,75 +5668,6 @@
5420
5668
  return UrlService;
5421
5669
  }());
5422
5670
 
5423
- var Visit = /** @class */ (function () {
5424
- function Visit(placeDefinition, visitParameters) {
5425
- if (visitParameters === void 0) { visitParameters = {}; }
5426
- this.placeDefinition = placeDefinition;
5427
- this.visitParameters = visitParameters;
5428
- }
5429
- // @Trace()
5430
- Visit.prototype.getRouteId = function () {
5431
- return this.placeDefinition.getRouteIdFrom(this);
5432
- };
5433
- // @Trace()
5434
- Visit.prototype.hasRouteId = function () {
5435
- return !___default.isNil(this.getRouteId());
5436
- };
5437
- /**
5438
- * Returns the value of the place parameter with the specified name. The parameter
5439
- * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
5440
- * same as the the ValueModel property name.
5441
- * @param parameterName the field name of the property model or the `as` option if specified.
5442
- */
5443
- Visit.prototype.getParameter = function (parameterName) {
5444
- return this.visitParameters[parameterName];
5445
- };
5446
- // @Trace()
5447
- Visit.prototype.hasParameter = function (parameterName) {
5448
- return Object.keys(this.visitParameters).includes(parameterName);
5449
- };
5450
- Visit.prototype.replace = function (parameter, value) {
5451
- var _a;
5452
- return new Visit(this.placeDefinition, __assign(__assign({}, this.visitParameters), (_a = {}, _a[parameter.name] = value, _a)));
5453
- };
5454
- Visit.prototype.mergeRouteParameters = function (routeParams) {
5455
- var _this = this;
5456
- // todo: whitelist parameters.
5457
- var routeParameterKeys = Object.keys(routeParams);
5458
- var params = {};
5459
- this.placeDefinition.getVisitParameterDefs().forEach(function (def) {
5460
- if (def.isRouteId || def.isRouteParameter) {
5461
- if (routeParameterKeys.includes(def.name)) {
5462
- params[def.name] = routeParams[def.name];
5463
- }
5464
- }
5465
- else {
5466
- // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
5467
- // defaults and remember sanitisation process.
5468
- var value = _this.getParameter(def.name);
5469
- if (_this.hasParameter(def.name)) {
5470
- params[def.name] = value;
5471
- }
5472
- }
5473
- });
5474
- return new Visit(this.placeDefinition, params);
5475
- };
5476
- Visit.prototype.hasRoutingChangedFrom = function (other) {
5477
- var samePlace = other.placeDefinition === this.placeDefinition;
5478
- var sameRouteParameters = ___default.isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
5479
- return !samePlace || !sameRouteParameters;
5480
- };
5481
- Visit.prototype.hasChangedFrom = function (other) {
5482
- var sameNonRouteParameters = ___default.isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
5483
- return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
5484
- };
5485
- Visit.prototype.toDebugString = function () {
5486
- var _this = this;
5487
- return Object.keys(this.visitParameters).map(function (k) { return k + "=" + _this.visitParameters[k]; }).join(",");
5488
- };
5489
- return Visit;
5490
- }());
5491
-
5492
5671
  var PlaceRouter = /** @class */ (function (_super) {
5493
5672
  __extends(PlaceRouter, _super);
5494
5673
  function PlaceRouter(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
@@ -5684,6 +5863,7 @@
5684
5863
  enumerable: true,
5685
5864
  configurable: true
5686
5865
  });
5866
+ // @Trace()
5687
5867
  PlaceRouter.prototype.pushVisitChangesToRoute = function (previous, next) {
5688
5868
  return __awaiter(this, void 0, void 0, function () {
5689
5869
  var _this = this;
@@ -5779,30 +5959,93 @@
5779
5959
  PlaceRouter.ctorParameters = function () { return [
5780
5960
  { type: router.Router },
5781
5961
  { type: common.Location },
5782
- { type: exports.ɵbv },
5962
+ { type: exports.ɵbw },
5783
5963
  { type: UrlService },
5784
- { type: exports.ɵby }
5964
+ { type: exports.ɵbz }
5785
5965
  ]; };
5786
- PlaceRouter.ɵprov = core.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(core.ɵɵinject(router.Router), core.ɵɵinject(common.Location), core.ɵɵinject(exports.ɵbv), core.ɵɵinject(UrlService), core.ɵɵinject(exports.ɵby)); }, token: PlaceRouter, providedIn: "root" });
5787
- __decorate([
5788
- pectin.Trace(),
5789
- __metadata("design:type", Function),
5790
- __metadata("design:paramtypes", [Visit, Visit]),
5791
- __metadata("design:returntype", Promise)
5792
- ], PlaceRouter.prototype, "pushVisitChangesToRoute", null);
5966
+ PlaceRouter.ɵprov = core.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(core.ɵɵinject(router.Router), core.ɵɵinject(common.Location), core.ɵɵinject(exports.ɵbw), core.ɵɵinject(UrlService), core.ɵɵinject(exports.ɵbz)); }, token: PlaceRouter, providedIn: "root" });
5793
5967
  PlaceRouter = __decorate([
5794
5968
  core.Injectable({
5795
5969
  providedIn: 'root'
5796
5970
  }),
5797
5971
  __metadata("design:paramtypes", [router.Router,
5798
5972
  common.Location,
5799
- exports.ɵbv,
5973
+ exports.ɵbw,
5800
5974
  UrlService,
5801
- exports.ɵby])
5975
+ exports.ɵbz])
5802
5976
  ], PlaceRouter);
5803
5977
  return PlaceRouter;
5804
5978
  }(pectin.GarbageCollector));
5805
5979
 
5980
+ var Visit = /** @class */ (function () {
5981
+ function Visit(placeDefinition, visitParameters) {
5982
+ if (visitParameters === void 0) { visitParameters = {}; }
5983
+ this.placeDefinition = placeDefinition;
5984
+ this.visitParameters = visitParameters;
5985
+ }
5986
+ // @Trace()
5987
+ Visit.prototype.getRouteId = function () {
5988
+ return this.placeDefinition.getRouteIdFrom(this);
5989
+ };
5990
+ // @Trace()
5991
+ Visit.prototype.hasRouteId = function () {
5992
+ return !___default.isNil(this.getRouteId());
5993
+ };
5994
+ /**
5995
+ * Returns the value of the place parameter with the specified name. The parameter
5996
+ * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
5997
+ * same as the the ValueModel property name.
5998
+ * @param parameterName the field name of the property model or the `as` option if specified.
5999
+ */
6000
+ Visit.prototype.getParameter = function (parameterName) {
6001
+ return this.visitParameters[parameterName];
6002
+ };
6003
+ // @Trace()
6004
+ Visit.prototype.hasParameter = function (parameterName) {
6005
+ return Object.keys(this.visitParameters).includes(parameterName);
6006
+ };
6007
+ Visit.prototype.replace = function (parameter, value) {
6008
+ var _a;
6009
+ return new Visit(this.placeDefinition, __assign(__assign({}, this.visitParameters), (_a = {}, _a[parameter.name] = value, _a)));
6010
+ };
6011
+ Visit.prototype.mergeRouteParameters = function (routeParams) {
6012
+ var _this = this;
6013
+ // todo: whitelist parameters.
6014
+ var routeParameterKeys = Object.keys(routeParams);
6015
+ var params = {};
6016
+ this.placeDefinition.getVisitParameterDefs().forEach(function (def) {
6017
+ if (def.isRouteId || def.isRouteParameter) {
6018
+ if (routeParameterKeys.includes(def.name)) {
6019
+ params[def.name] = routeParams[def.name];
6020
+ }
6021
+ }
6022
+ else {
6023
+ // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
6024
+ // defaults and remember sanitisation process.
6025
+ var value = _this.getParameter(def.name);
6026
+ if (_this.hasParameter(def.name)) {
6027
+ params[def.name] = value;
6028
+ }
6029
+ }
6030
+ });
6031
+ return new Visit(this.placeDefinition, params);
6032
+ };
6033
+ Visit.prototype.hasRoutingChangedFrom = function (other) {
6034
+ var samePlace = other.placeDefinition === this.placeDefinition;
6035
+ var sameRouteParameters = ___default.isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
6036
+ return !samePlace || !sameRouteParameters;
6037
+ };
6038
+ Visit.prototype.hasChangedFrom = function (other) {
6039
+ var sameNonRouteParameters = ___default.isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
6040
+ return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
6041
+ };
6042
+ Visit.prototype.toDebugString = function () {
6043
+ var _this = this;
6044
+ return Object.keys(this.visitParameters).map(function (k) { return k + "=" + _this.visitParameters[k]; }).join(",");
6045
+ };
6046
+ return Visit;
6047
+ }());
6048
+
5806
6049
  var AUP_PLACE_CONFIG = new core.InjectionToken('AUP_PLACE_CONFIG');
5807
6050
 
5808
6051
  // Freezes the state of the components at the start of the animation.
@@ -6817,8 +7060,7 @@
6817
7060
  binding: null
6818
7061
  };
6819
7062
  var tag = tagPrefix + "(" + prototype.constructor.name + "." + propertyKey.toString() + ")";
6820
- pectin.DebugContext.get(mechanics.backingModel).tag(tag);
6821
- pectin.Logger.get(mechanics.backingModel).tag(tag);
7063
+ pectin.DebugContext.getOrCreate(mechanics.backingModel).tag(tag);
6822
7064
  Object.defineProperty(prototype, propertyKey, {
6823
7065
  get: function () {
6824
7066
  return mechanics.backingModel;
@@ -6889,6 +7131,7 @@
6889
7131
  exports.AddItemInteractionContextComponent = AddItemInteractionContextComponent;
6890
7132
  exports.AlertDialogComponent = AlertDialogComponent;
6891
7133
  exports.AngularUiPowerupsModule = AngularUiPowerupsModule;
7134
+ exports.AutocompleteInputComponent = AutocompleteInputComponent;
6892
7135
  exports.BusyOverlayComponent = BusyOverlayComponent;
6893
7136
  exports.CELL_EDITOR_PORTAL = CELL_EDITOR_PORTAL;
6894
7137
  exports.CELL_RENDERER_PORTAL = CELL_RENDERER_PORTAL;
@@ -6932,7 +7175,7 @@
6932
7175
  exports.InPlaceInteractionContextComponent = InPlaceInteractionContextComponent;
6933
7176
  exports.InteractionContextTriggerFor = InteractionContextTriggerFor;
6934
7177
  exports.InteractionModule = InteractionModule;
6935
- exports.InteractionService = exports.ɵbv;
7178
+ exports.InteractionService = exports.ɵbw;
6936
7179
  exports.InteractionServiceRoutingAdapter = InteractionServiceRoutingAdapter;
6937
7180
  exports.LEFT_RIGHT_PLACE_ANIMATION = LEFT_RIGHT_PLACE_ANIMATION;
6938
7181
  exports.ListPlaceNavComponent = ListPlaceNavComponent;
@@ -6952,7 +7195,7 @@
6952
7195
  exports.PlaceComponentDeactivationHandler = PlaceComponentDeactivationHandler;
6953
7196
  exports.PlaceDefinition = PlaceDefinition;
6954
7197
  exports.PlaceGuard = PlaceGuard;
6955
- exports.PlaceHistory = exports.ɵby;
7198
+ exports.PlaceHistory = exports.ɵbz;
6956
7199
  exports.PlaceModule = PlaceModule;
6957
7200
  exports.PlaceOutletComponent = PlaceOutletComponent;
6958
7201
  exports.PlaceRouter = PlaceRouter;
@@ -7002,50 +7245,51 @@
7002
7245
  exports.ɵ0 = ɵ0;
7003
7246
  exports.ɵa = DirectivesModule;
7004
7247
  exports.ɵb = CommandDirective;
7005
- exports.ɵba = EditRowControls;
7006
- exports.ɵbb = ColumnTemplateDirective;
7007
- exports.ɵbc = DefaultCellRendererComponent;
7008
- exports.ɵbd = TableCellRendererComponent;
7009
- exports.ɵbe = SelectCellRendererComponent;
7010
- exports.ɵbf = SelectHeaderCellRendererComponent;
7011
- exports.ɵbg = DefaultHeaderCellRendererComponent;
7012
- exports.ɵbh = TableHeaderCellRendererComponent;
7013
- exports.ɵbi = MultipleSelectInputComponent;
7014
- exports.ɵbj = IconComponent;
7015
- exports.ɵbk = SectionHeaderComponent;
7016
- exports.ɵbl = PlaceModule;
7017
- exports.ɵbm = ComponentsModule;
7018
- exports.ɵbn = EmptyStateComponent;
7019
- exports.ɵbo = BusyOverlayComponent;
7020
- exports.ɵbp = PlaceOutletComponent;
7021
- exports.ɵbq = leftRightPlaceAnimation;
7022
- exports.ɵbr = LEFT_RIGHT_PLACE_ANIMATION;
7023
- exports.ɵbs = AUP_PLACE_CONFIG;
7024
- exports.ɵbu = PlaceRouter;
7025
- exports.ɵbw = ModalInteractionContextFactory;
7026
- exports.ɵbx = UrlService;
7027
- exports.ɵbz = TabbedPlaceNavigationComponent;
7248
+ exports.ɵba = CardContainerComponent;
7249
+ exports.ɵbb = TableComponent;
7250
+ exports.ɵbc = EditRowControls;
7251
+ exports.ɵbd = ColumnTemplateDirective;
7252
+ exports.ɵbe = DefaultCellRendererComponent;
7253
+ exports.ɵbf = TableCellRendererComponent;
7254
+ exports.ɵbg = SelectCellRendererComponent;
7255
+ exports.ɵbh = SelectHeaderCellRendererComponent;
7256
+ exports.ɵbi = DefaultHeaderCellRendererComponent;
7257
+ exports.ɵbj = TableHeaderCellRendererComponent;
7258
+ exports.ɵbk = IconComponent;
7259
+ exports.ɵbl = SectionHeaderComponent;
7260
+ exports.ɵbm = PlaceModule;
7261
+ exports.ɵbn = ComponentsModule;
7262
+ exports.ɵbo = EmptyStateComponent;
7263
+ exports.ɵbp = BusyOverlayComponent;
7264
+ exports.ɵbq = PlaceOutletComponent;
7265
+ exports.ɵbr = leftRightPlaceAnimation;
7266
+ exports.ɵbs = LEFT_RIGHT_PLACE_ANIMATION;
7267
+ exports.ɵbt = AUP_PLACE_CONFIG;
7268
+ exports.ɵbv = PlaceRouter;
7269
+ exports.ɵbx = ModalInteractionContextFactory;
7270
+ exports.ɵby = UrlService;
7028
7271
  exports.ɵc = FocusBindingDirective;
7029
- exports.ɵca = AbstractPlaceNavigationComponent;
7030
- exports.ɵcb = ListPlaceNavComponent;
7031
- exports.ɵcc = SidePlaceNavigationComponent;
7032
- exports.ɵcd = InteractionModule;
7033
- exports.ɵce = ActivityContainerComponent;
7034
- exports.ɵcf = AbstractInteractionContext;
7035
- exports.ɵcg = ActivityOutletComponent;
7036
- exports.ɵch = ConfirmationDialogComponent;
7037
- exports.ɵci = ACTIVITY_DATA;
7038
- exports.ɵcj = Activity;
7039
- exports.ɵcl = ConfirmThenDialogComponent;
7040
- exports.ɵcm = AlertDialogComponent;
7041
- exports.ɵco = InPlaceInteractionContextComponent;
7042
- exports.ɵcp = AddItemInteractionContextComponent;
7043
- exports.ɵcq = ActivityActionsComponent;
7044
- exports.ɵcr = PopupInteractionContextComponent;
7045
- exports.ɵcs = StringInputActivity;
7046
- exports.ɵct = AbstractInputActivity;
7047
- exports.ɵcu = SelectInputActivity;
7048
- exports.ɵcv = InteractionContextTriggerFor;
7272
+ exports.ɵca = TabbedPlaceNavigationComponent;
7273
+ exports.ɵcb = AbstractPlaceNavigationComponent;
7274
+ exports.ɵcc = ListPlaceNavComponent;
7275
+ exports.ɵcd = SidePlaceNavigationComponent;
7276
+ exports.ɵce = InteractionModule;
7277
+ exports.ɵcf = ActivityContainerComponent;
7278
+ exports.ɵcg = AbstractInteractionContext;
7279
+ exports.ɵch = ActivityOutletComponent;
7280
+ exports.ɵci = ConfirmationDialogComponent;
7281
+ exports.ɵcj = ACTIVITY_DATA;
7282
+ exports.ɵck = Activity;
7283
+ exports.ɵcm = ConfirmThenDialogComponent;
7284
+ exports.ɵcn = AlertDialogComponent;
7285
+ exports.ɵcp = InPlaceInteractionContextComponent;
7286
+ exports.ɵcq = AddItemInteractionContextComponent;
7287
+ exports.ɵcr = ActivityActionsComponent;
7288
+ exports.ɵcs = PopupInteractionContextComponent;
7289
+ exports.ɵct = StringInputActivity;
7290
+ exports.ɵcu = AbstractInputActivity;
7291
+ exports.ɵcv = SelectInputActivity;
7292
+ exports.ɵcw = InteractionContextTriggerFor;
7049
7293
  exports.ɵd = DisposableComponent;
7050
7294
  exports.ɵe = FocusBindingFactory;
7051
7295
  exports.ɵf = ComponentsModule;
@@ -7057,18 +7301,18 @@
7057
7301
  exports.ɵl = TextInputComponent;
7058
7302
  exports.ɵm = PasswordInputComponent;
7059
7303
  exports.ɵn = SelectInputComponent;
7060
- exports.ɵo = CheckboxInputComponent;
7061
- exports.ɵp = ScrollContainerComponent;
7062
- exports.ɵq = NoopComponent;
7063
- exports.ɵr = SwitchCaseOption;
7064
- exports.ɵs = SwitchCaseWhenDirective;
7065
- exports.ɵt = SwitchCaseDefaultDirective;
7066
- exports.ɵu = SwitchCaseComponent;
7067
- exports.ɵv = FocusContainerComponent;
7068
- exports.ɵw = VerticalFocusContainerComponent;
7069
- exports.ɵx = FocusableComponent;
7070
- exports.ɵy = CardContainerComponent;
7071
- exports.ɵz = TableComponent;
7304
+ exports.ɵo = MultipleSelectInputComponent;
7305
+ exports.ɵp = AutocompleteInputComponent;
7306
+ exports.ɵq = CheckboxInputComponent;
7307
+ exports.ɵr = ScrollContainerComponent;
7308
+ exports.ɵs = NoopComponent;
7309
+ exports.ɵt = SwitchCaseOption;
7310
+ exports.ɵu = SwitchCaseWhenDirective;
7311
+ exports.ɵv = SwitchCaseDefaultDirective;
7312
+ exports.ɵw = SwitchCaseComponent;
7313
+ exports.ɵx = FocusContainerComponent;
7314
+ exports.ɵy = VerticalFocusContainerComponent;
7315
+ exports.ɵz = FocusableComponent;
7072
7316
 
7073
7317
  Object.defineProperty(exports, '__esModule', { value: true });
7074
7318