@coolon/angular-ui-powerups 1.12.0 → 1.13.1

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 (169) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/assets/table.scss +32 -1
  3. package/bundles/coolon-angular-ui-powerups.umd.js +757 -430
  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 +58 -55
  8. package/coolon-angular-ui-powerups.metadata.json +1 -1
  9. package/esm2015/coolon-angular-ui-powerups.js +56 -53
  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 +9 -2
  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 +6 -15
  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 +27 -0
  23. package/esm2015/lib/components/forms/abstract-list-input.component.js.map +1 -0
  24. package/esm2015/lib/components/forms/abstract-list-input.component.metadata.json +1 -0
  25. package/esm2015/lib/components/forms/abstract-list-input.component.ngfactory.js.map +1 -0
  26. package/esm2015/lib/components/forms/abstract-value-input.component.js +27 -0
  27. package/esm2015/lib/components/forms/abstract-value-input.component.js.map +1 -0
  28. package/esm2015/lib/components/forms/abstract-value-input.component.metadata.json +1 -0
  29. package/esm2015/lib/components/forms/abstract-value-input.component.ngfactory.js.map +1 -0
  30. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js +3 -3
  31. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  32. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.metadata.json +1 -1
  33. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js +54 -0
  34. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -0
  35. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.metadata.json +1 -0
  36. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.ngfactory.js.map +1 -0
  37. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.scss.shim.ngstyle.js.map +1 -0
  38. package/esm2015/lib/components/forms/number-input/number-input.component.js +4 -4
  39. package/esm2015/lib/components/forms/number-input/number-input.component.js.map +1 -1
  40. package/esm2015/lib/components/forms/number-input/number-input.component.metadata.json +1 -1
  41. package/esm2015/lib/components/forms/password-input/password-input.component.js +4 -4
  42. package/esm2015/lib/components/forms/password-input/password-input.component.js.map +1 -1
  43. package/esm2015/lib/components/forms/password-input/password-input.component.metadata.json +1 -1
  44. package/esm2015/lib/components/forms/select-input/select-input.component.js +4 -4
  45. package/esm2015/lib/components/forms/select-input/select-input.component.js.map +1 -1
  46. package/esm2015/lib/components/forms/select-input/select-input.component.metadata.json +1 -1
  47. package/esm2015/lib/components/forms/string-input/string-input.component.js +4 -4
  48. package/esm2015/lib/components/forms/string-input/string-input.component.js.map +1 -1
  49. package/esm2015/lib/components/forms/string-input/string-input.component.metadata.json +1 -1
  50. package/esm2015/lib/components/forms/text-input/text-input.component.js +4 -4
  51. package/esm2015/lib/components/forms/text-input/text-input.component.js.map +1 -1
  52. package/esm2015/lib/components/forms/text-input/text-input.component.metadata.json +1 -1
  53. package/esm2015/lib/components/index.js +3 -0
  54. package/esm2015/lib/components/index.js.map +1 -1
  55. package/esm2015/lib/components/index.metadata.json +1 -1
  56. package/esm2015/lib/components/table/cell-editors.js +1 -0
  57. package/esm2015/lib/components/table/cell-editors.js.map +1 -0
  58. package/esm2015/lib/components/table/cell-editors.metadata.json +1 -0
  59. package/esm2015/lib/components/table/column-model.js +205 -60
  60. package/esm2015/lib/components/table/column-model.js.map +1 -1
  61. package/esm2015/lib/components/table/column-model.metadata.json +1 -1
  62. package/esm2015/lib/components/table/column-template/column-template.directive.js +26 -1
  63. package/esm2015/lib/components/table/column-template/column-template.directive.js.map +1 -1
  64. package/esm2015/lib/components/table/column-template/column-template.directive.metadata.json +1 -1
  65. package/esm2015/lib/components/table/edit-session.js +10 -7
  66. package/esm2015/lib/components/table/edit-session.js.map +1 -1
  67. package/esm2015/lib/components/table/edit-session.metadata.json +1 -1
  68. package/esm2015/lib/components/table/select-cell-renderer/select-cell-renderer.component.js +1 -12
  69. package/esm2015/lib/components/table/select-cell-renderer/select-cell-renderer.component.js.map +1 -1
  70. package/esm2015/lib/components/table/select-cell-renderer/select-cell-renderer.component.metadata.json +1 -1
  71. package/esm2015/lib/components/table/select-header-cell-renderer/select-header-cell-renderer.component.js +6 -8
  72. package/esm2015/lib/components/table/select-header-cell-renderer/select-header-cell-renderer.component.js.map +1 -1
  73. package/esm2015/lib/components/table/select-header-cell-renderer/select-header-cell-renderer.component.metadata.json +1 -1
  74. package/esm2015/lib/components/table/table-cell-renderer/table-cell-renderer.component.js +43 -19
  75. package/esm2015/lib/components/table/table-cell-renderer/table-cell-renderer.component.js.map +1 -1
  76. package/esm2015/lib/components/table/table-cell-renderer/table-cell-renderer.component.metadata.json +1 -1
  77. package/esm2015/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js +12 -8
  78. package/esm2015/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js.map +1 -1
  79. package/esm2015/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.metadata.json +1 -1
  80. package/esm2015/lib/components/table/table-model.js +15 -4
  81. package/esm2015/lib/components/table/table-model.js.map +1 -1
  82. package/esm2015/lib/components/table/table-model.metadata.json +1 -1
  83. package/esm2015/lib/components/table/table.component.js +8 -0
  84. package/esm2015/lib/components/table/table.component.js.map +1 -1
  85. package/esm2015/lib/components/table/table.component.metadata.json +1 -1
  86. package/esm5/coolon-angular-ui-powerups.js +56 -53
  87. package/esm5/coolon-angular-ui-powerups.js.map +1 -1
  88. package/esm5/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  89. package/esm5/lib/components/card-container/card-container.component.js +1 -1
  90. package/esm5/lib/components/components.module.js +9 -2
  91. package/esm5/lib/components/components.module.js.map +1 -1
  92. package/esm5/lib/components/components.module.ngfactory.js.map +1 -1
  93. package/esm5/lib/components/forms/abstract-input.component.js +10 -15
  94. package/esm5/lib/components/forms/abstract-input.component.js.map +1 -1
  95. package/esm5/lib/components/forms/abstract-list-input.component.js +30 -0
  96. package/esm5/lib/components/forms/abstract-list-input.component.js.map +1 -0
  97. package/esm5/lib/components/forms/abstract-list-input.component.ngfactory.js.map +1 -0
  98. package/esm5/lib/components/forms/abstract-value-input.component.js +30 -0
  99. package/esm5/lib/components/forms/abstract-value-input.component.js.map +1 -0
  100. package/esm5/lib/components/forms/abstract-value-input.component.ngfactory.js.map +1 -0
  101. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js +3 -3
  102. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  103. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js +57 -0
  104. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -0
  105. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.ngfactory.js.map +1 -0
  106. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.scss.shim.ngstyle.js.map +1 -0
  107. package/esm5/lib/components/forms/number-input/number-input.component.js +4 -4
  108. package/esm5/lib/components/forms/number-input/number-input.component.js.map +1 -1
  109. package/esm5/lib/components/forms/password-input/password-input.component.js +4 -4
  110. package/esm5/lib/components/forms/password-input/password-input.component.js.map +1 -1
  111. package/esm5/lib/components/forms/select-input/select-input.component.js +4 -4
  112. package/esm5/lib/components/forms/select-input/select-input.component.js.map +1 -1
  113. package/esm5/lib/components/forms/string-input/string-input.component.js +4 -4
  114. package/esm5/lib/components/forms/string-input/string-input.component.js.map +1 -1
  115. package/esm5/lib/components/forms/text-input/text-input.component.js +4 -4
  116. package/esm5/lib/components/forms/text-input/text-input.component.js.map +1 -1
  117. package/esm5/lib/components/index.js +3 -0
  118. package/esm5/lib/components/index.js.map +1 -1
  119. package/esm5/lib/components/table/cell-editors.js +1 -0
  120. package/esm5/lib/components/table/cell-editors.js.map +1 -0
  121. package/esm5/lib/components/table/column-model.js +243 -80
  122. package/esm5/lib/components/table/column-model.js.map +1 -1
  123. package/esm5/lib/components/table/column-template/column-template.directive.js +26 -1
  124. package/esm5/lib/components/table/column-template/column-template.directive.js.map +1 -1
  125. package/esm5/lib/components/table/edit-session.js +10 -7
  126. package/esm5/lib/components/table/edit-session.js.map +1 -1
  127. package/esm5/lib/components/table/select-cell-renderer/select-cell-renderer.component.js +1 -16
  128. package/esm5/lib/components/table/select-cell-renderer/select-cell-renderer.component.js.map +1 -1
  129. package/esm5/lib/components/table/select-header-cell-renderer/select-header-cell-renderer.component.js +6 -8
  130. package/esm5/lib/components/table/select-header-cell-renderer/select-header-cell-renderer.component.js.map +1 -1
  131. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js +43 -19
  132. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js.map +1 -1
  133. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js +12 -8
  134. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js.map +1 -1
  135. package/esm5/lib/components/table/table-model.js +15 -4
  136. package/esm5/lib/components/table/table-model.js.map +1 -1
  137. package/esm5/lib/components/table/table.component.js +8 -0
  138. package/esm5/lib/components/table/table.component.js.map +1 -1
  139. package/fesm2015/coolon-angular-ui-powerups.js +576 -288
  140. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  141. package/fesm5/coolon-angular-ui-powerups.js +670 -362
  142. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  143. package/lib/components/forms/abstract-input.component.d.ts +10 -12
  144. package/lib/components/forms/abstract-list-input.component.d.ts +16 -0
  145. package/lib/components/forms/abstract-value-input.component.d.ts +16 -0
  146. package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +4 -4
  147. package/lib/components/forms/multiple-select-input/multiple-select-input.component.d.ts +15 -0
  148. package/lib/components/forms/number-input/number-input.component.d.ts +4 -4
  149. package/lib/components/forms/password-input/password-input.component.d.ts +4 -4
  150. package/lib/components/forms/select-input/select-input.component.d.ts +4 -4
  151. package/lib/components/forms/string-input/string-input.component.d.ts +4 -4
  152. package/lib/components/forms/text-input/text-input.component.d.ts +4 -4
  153. package/lib/components/index.d.ts +4 -1
  154. package/lib/components/table/cell-editors.d.ts +9 -0
  155. package/lib/components/table/column-model.d.ts +85 -33
  156. package/lib/components/table/column-template/column-template.directive.d.ts +8 -2
  157. package/lib/components/table/edit-session.d.ts +4 -4
  158. package/lib/components/table/select-cell-renderer/select-cell-renderer.component.d.ts +1 -3
  159. package/lib/components/table/table-cell-renderer/table-cell-renderer.component.d.ts +13 -6
  160. package/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.d.ts +8 -4
  161. package/lib/components/table/table-model.d.ts +5 -1
  162. package/lib/components/table/table.component.d.ts +3 -1
  163. package/package.json +1 -1
  164. package/esm2015/lib/components/table/cell-editor.component.js +0 -1
  165. package/esm2015/lib/components/table/cell-editor.component.js.map +0 -1
  166. package/esm2015/lib/components/table/cell-editor.component.metadata.json +0 -1
  167. package/esm5/lib/components/table/cell-editor.component.js +0 -1
  168. package/esm5/lib/components/table/cell-editor.component.js.map +0 -1
  169. package/lib/components/table/cell-editor.component.d.ts +0 -5
@@ -1148,7 +1148,7 @@
1148
1148
  }());
1149
1149
 
1150
1150
  var inplaceMonitorCount = 0;
1151
- exports.ɵbw = /** @class */ (function () {
1151
+ exports.ɵbz = /** @class */ (function () {
1152
1152
  function InteractionService(modelInteractionContextFactory) {
1153
1153
  this.modelInteractionContextFactory = modelInteractionContextFactory;
1154
1154
  this.garbage = new pectin.GarbageCollector();
@@ -1293,7 +1293,7 @@
1293
1293
  return ApiAdapter;
1294
1294
  }());
1295
1295
  InteractionService.ApiAdapter = ApiAdapter;
1296
- })(exports.ɵbw || (exports.ɵbw = {}));
1296
+ })(exports.ɵbz || (exports.ɵbz = {}));
1297
1297
 
1298
1298
  var InPlaceInteractionContextComponent = /** @class */ (function (_super) {
1299
1299
  __extends(InPlaceInteractionContextComponent, _super);
@@ -1351,7 +1351,7 @@
1351
1351
  return this.activityContainerComponent.startActivity(activityType, data);
1352
1352
  };
1353
1353
  InPlaceInteractionContextComponent.ctorParameters = function () { return [
1354
- { type: exports.ɵbw },
1354
+ { type: exports.ɵbz },
1355
1355
  { type: undefined, decorators: [{ type: core.Inject, args: [tabs.MAT_TABS_CONFIG,] }, { type: core.Optional }] }
1356
1356
  ]; };
1357
1357
  __decorate([
@@ -1369,7 +1369,7 @@
1369
1369
  styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}"]
1370
1370
  }),
1371
1371
  __param(1, core.Inject(tabs.MAT_TABS_CONFIG)), __param(1, core.Optional()),
1372
- __metadata("design:paramtypes", [exports.ɵbw, Object])
1372
+ __metadata("design:paramtypes", [exports.ɵbz, Object])
1373
1373
  ], InPlaceInteractionContextComponent);
1374
1374
  return InPlaceInteractionContextComponent;
1375
1375
  }(DisposableComponent));
@@ -1662,7 +1662,7 @@
1662
1662
  AlertDialogComponent
1663
1663
  ],
1664
1664
  providers: [
1665
- exports.ɵbw
1665
+ exports.ɵbz
1666
1666
  // {
1667
1667
  // provide: MAT_TABS_CONFIG, useValue: { animationDuration: "2s" }
1668
1668
  // }
@@ -1710,7 +1710,7 @@
1710
1710
  core.Component({
1711
1711
  selector: 'aup-card-container',
1712
1712
  template: "<div class=\"card-container\">\n <ng-content></ng-content>\n\n <div class=\"add-card-container\" *ngIf=\"addCardCommand.enabled.value\" [pectinCommand]=\"addCardCommand\">\n <mat-icon>add</mat-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",
1713
- 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)}aup-table aup-table-cell-renderer:not(.first-column),aup-table aup-table-header-cell-renderer:not(.first-column){padding-left:var(--default-column-gap)}: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}"]
1713
+ 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)}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 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}"]
1714
1714
  }),
1715
1715
  __metadata("design:paramtypes", [])
1716
1716
  ], CardContainerComponent);
@@ -1966,18 +1966,6 @@
1966
1966
  __extends(AbstractInputComponent, _super);
1967
1967
  function AbstractInputComponent() {
1968
1968
  var _this = _super.call(this) || this;
1969
- /**
1970
- * A backing model for all our @Input() valueModel properties which should be defined as follows.
1971
- *
1972
- * @Input() @TrackExternal({useExisting: "delegatingFormValueModel"})
1973
- * valueModel: FormValueModel<string> | MutableValueModel<string>;
1974
- *
1975
- * This approach allows the input to accept plain or form models but all backed by a form
1976
- * friendly delegate. We have to use an existing delegate for union types as pectin just
1977
- * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
1978
- */
1979
- // We have to register it as a disposable so it ditches any listeners when we're disposed.
1980
- _this.delegatingFormValueModel = _this.registerDisposable(new pectin.DelegatingFormValueModel());
1981
1969
  // TODO: fix this.
1982
1970
  // tslint:disable-next-line:no-output-native
1983
1971
  _this.focus = new core.EventEmitter();
@@ -2027,7 +2015,7 @@
2027
2015
  };
2028
2016
  Object.defineProperty(AbstractInputComponent.prototype, "enabled", {
2029
2017
  get: function () {
2030
- return this.delegatingFormValueModel.enabled;
2018
+ return this.inputModel.enabled;
2031
2019
  },
2032
2020
  enumerable: true,
2033
2021
  configurable: true
@@ -2037,7 +2025,7 @@
2037
2025
  };
2038
2026
  Object.defineProperty(AbstractInputComponent.prototype, "errorList", {
2039
2027
  get: function () {
2040
- return this.delegatingFormValueModel.errorList;
2028
+ return this.inputModel.errorList;
2041
2029
  },
2042
2030
  enumerable: true,
2043
2031
  configurable: true
@@ -2049,6 +2037,13 @@
2049
2037
  enumerable: true,
2050
2038
  configurable: true
2051
2039
  });
2040
+ Object.defineProperty(AbstractInputComponent.prototype, "focusContext", {
2041
+ get: function () {
2042
+ return this.inputModel.focusContext;
2043
+ },
2044
+ enumerable: true,
2045
+ configurable: true
2046
+ });
2052
2047
  __decorate([
2053
2048
  core.Input(),
2054
2049
  __metadata("design:type", String)
@@ -2130,6 +2125,54 @@
2130
2125
  return AbstractInputComponent;
2131
2126
  }(DisposableComponent));
2132
2127
 
2128
+ var AbstractListInputComponent = /** @class */ (function (_super) {
2129
+ __extends(AbstractListInputComponent, _super);
2130
+ function AbstractListInputComponent() {
2131
+ var _this = _super !== null && _super.apply(this, arguments) || this;
2132
+ /**
2133
+ * A backing model for all our @Input() valueModel properties which should be defined as follows.
2134
+ *
2135
+ * @Input() @TrackExternal({useExisting: "inputModel"})
2136
+ * valueModel: FormListModel<string> | IMutableListModel<string>;
2137
+ *
2138
+ * This approach allows the input to accept plain or form models but all backed by a form
2139
+ * friendly delegate. We have to use an existing delegate for union types as pectin just
2140
+ * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
2141
+ */
2142
+ // We have to register it as a disposable so it ditches any listeners when we're disposed.
2143
+ _this.inputModel = _this.registerDisposable(new pectin.DelegatingFormListModel());
2144
+ return _this;
2145
+ }
2146
+ AbstractListInputComponent = __decorate([
2147
+ core.Component({ template: '' })
2148
+ ], AbstractListInputComponent);
2149
+ return AbstractListInputComponent;
2150
+ }(AbstractInputComponent));
2151
+
2152
+ var AbstractValueInputComponent = /** @class */ (function (_super) {
2153
+ __extends(AbstractValueInputComponent, _super);
2154
+ function AbstractValueInputComponent() {
2155
+ var _this = _super !== null && _super.apply(this, arguments) || this;
2156
+ /**
2157
+ * A backing model for all our @Input() valueModel properties which should be defined as follows.
2158
+ *
2159
+ * @Input() @TrackExternal({useExisting: "inputModel"})
2160
+ * valueModel: FormValueModel<string> | IMutableValueModel<string>;
2161
+ *
2162
+ * This approach allows the input to accept plain or form models but all backed by a form
2163
+ * friendly delegate. We have to use an existing delegate for union types as pectin just
2164
+ * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
2165
+ */
2166
+ // We have to register it as a disposable so it ditches any listeners when we're disposed.
2167
+ _this.inputModel = _this.registerDisposable(new pectin.DelegatingFormValueModel());
2168
+ return _this;
2169
+ }
2170
+ AbstractValueInputComponent = __decorate([
2171
+ core.Component({ template: '' })
2172
+ ], AbstractValueInputComponent);
2173
+ return AbstractValueInputComponent;
2174
+ }(AbstractInputComponent));
2175
+
2133
2176
  var CheckboxInputComponent = /** @class */ (function (_super) {
2134
2177
  __extends(CheckboxInputComponent, _super);
2135
2178
  function CheckboxInputComponent() {
@@ -2141,7 +2184,7 @@
2141
2184
  CheckboxInputComponent.prototype.ngOnInit = function () {
2142
2185
  };
2143
2186
  __decorate([
2144
- core.Input(), pectin.TrackExternal({ delegateTo: 'delegatingFormValueModel' }),
2187
+ core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
2145
2188
  __metadata("design:type", Object)
2146
2189
  ], CheckboxInputComponent.prototype, "valueModel", void 0);
2147
2190
  __decorate([
@@ -2161,7 +2204,7 @@
2161
2204
  __metadata("design:paramtypes", [])
2162
2205
  ], CheckboxInputComponent);
2163
2206
  return CheckboxInputComponent;
2164
- }(AbstractInputComponent));
2207
+ }(AbstractValueInputComponent));
2165
2208
 
2166
2209
  var NumberInputComponent = /** @class */ (function (_super) {
2167
2210
  __extends(NumberInputComponent, _super);
@@ -2174,7 +2217,7 @@
2174
2217
  NumberInputComponent.prototype.ngOnInit = function () {
2175
2218
  };
2176
2219
  __decorate([
2177
- core.Input(), pectin.TrackExternal({ delegateTo: 'delegatingFormValueModel' }),
2220
+ core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
2178
2221
  __metadata("design:type", Object)
2179
2222
  ], NumberInputComponent.prototype, "valueModel", void 0);
2180
2223
  __decorate([
@@ -2188,13 +2231,13 @@
2188
2231
  NumberInputComponent = __decorate([
2189
2232
  core.Component({
2190
2233
  selector: 'aup-number-input',
2191
- 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]=\"delegatingFormValueModel?.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",
2234
+ 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",
2192
2235
  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}"]
2193
2236
  }),
2194
2237
  __metadata("design:paramtypes", [])
2195
2238
  ], NumberInputComponent);
2196
2239
  return NumberInputComponent;
2197
- }(AbstractInputComponent));
2240
+ }(AbstractValueInputComponent));
2198
2241
 
2199
2242
  var PasswordInputComponent = /** @class */ (function (_super) {
2200
2243
  __extends(PasswordInputComponent, _super);
@@ -2204,19 +2247,19 @@
2204
2247
  PasswordInputComponent.prototype.ngOnInit = function () {
2205
2248
  };
2206
2249
  __decorate([
2207
- core.Input(), pectin.TrackExternal({ delegateTo: "delegatingFormValueModel" }),
2250
+ core.Input(), pectin.TrackExternal({ delegateTo: "inputModel" }),
2208
2251
  __metadata("design:type", Object)
2209
2252
  ], PasswordInputComponent.prototype, "valueModel", void 0);
2210
2253
  PasswordInputComponent = __decorate([
2211
2254
  core.Component({
2212
2255
  selector: 'aup-password-input',
2213
- 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]=\"delegatingFormValueModel.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",
2256
+ 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",
2214
2257
  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}"]
2215
2258
  }),
2216
2259
  __metadata("design:paramtypes", [])
2217
2260
  ], PasswordInputComponent);
2218
2261
  return PasswordInputComponent;
2219
- }(AbstractInputComponent));
2262
+ }(AbstractValueInputComponent));
2220
2263
 
2221
2264
  var SelectInputComponent = /** @class */ (function (_super) {
2222
2265
  __extends(SelectInputComponent, _super);
@@ -2228,7 +2271,7 @@
2228
2271
  SelectInputComponent.prototype.ngOnInit = function () {
2229
2272
  };
2230
2273
  __decorate([
2231
- core.Input(), pectin.TrackExternal({ delegateTo: "delegatingFormValueModel" }),
2274
+ core.Input(), pectin.TrackExternal({ delegateTo: "inputModel" }),
2232
2275
  __metadata("design:type", Object)
2233
2276
  ], SelectInputComponent.prototype, "valueModel", void 0);
2234
2277
  __decorate([
@@ -2262,13 +2305,13 @@
2262
2305
  SelectInputComponent = __decorate([
2263
2306
  core.Component({
2264
2307
  selector: 'aup-select-input',
2265
- 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]=\"delegatingFormValueModel.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",
2308
+ 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",
2266
2309
  styles: [":host{display:inline-block}mat-form-field{width:100%}"]
2267
2310
  }),
2268
2311
  __metadata("design:paramtypes", [])
2269
2312
  ], SelectInputComponent);
2270
2313
  return SelectInputComponent;
2271
- }(AbstractInputComponent));
2314
+ }(AbstractValueInputComponent));
2272
2315
 
2273
2316
  var StringInputActivity = /** @class */ (function (_super) {
2274
2317
  __extends(StringInputActivity, _super);
@@ -2298,7 +2341,7 @@
2298
2341
  StringInputComponent.prototype.ngOnInit = function () {
2299
2342
  };
2300
2343
  __decorate([
2301
- core.Input(), pectin.TrackExternal({ delegateTo: 'delegatingFormValueModel' }),
2344
+ core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
2302
2345
  __metadata("design:type", Object)
2303
2346
  ], StringInputComponent.prototype, "valueModel", void 0);
2304
2347
  __decorate([
@@ -2312,13 +2355,13 @@
2312
2355
  StringInputComponent = __decorate([
2313
2356
  core.Component({
2314
2357
  selector: 'aup-string-input',
2315
- 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]=\"delegatingFormValueModel.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 <mat-icon>close</mat-icon>\n </button>\n</mat-form-field>\n\n",
2358
+ 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 <mat-icon>close</mat-icon>\n </button>\n</mat-form-field>\n\n",
2316
2359
  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}"]
2317
2360
  }),
2318
2361
  __metadata("design:paramtypes", [])
2319
2362
  ], StringInputComponent);
2320
2363
  return StringInputComponent;
2321
- }(AbstractInputComponent));
2364
+ }(AbstractValueInputComponent));
2322
2365
 
2323
2366
  var TextInputComponent = /** @class */ (function (_super) {
2324
2367
  __extends(TextInputComponent, _super);
@@ -2331,7 +2374,7 @@
2331
2374
  TextInputComponent.prototype.ngOnInit = function () {
2332
2375
  };
2333
2376
  __decorate([
2334
- core.Input(), pectin.TrackExternal({ delegateTo: 'delegatingFormValueModel' }),
2377
+ core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
2335
2378
  __metadata("design:type", Object)
2336
2379
  ], TextInputComponent.prototype, "valueModel", void 0);
2337
2380
  __decorate([
@@ -2345,13 +2388,13 @@
2345
2388
  TextInputComponent = __decorate([
2346
2389
  core.Component({
2347
2390
  selector: 'aup-text-input',
2348
- 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]=\"delegatingFormValueModel.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",
2391
+ 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",
2349
2392
  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}"]
2350
2393
  }),
2351
2394
  __metadata("design:paramtypes", [])
2352
2395
  ], TextInputComponent);
2353
2396
  return TextInputComponent;
2354
- }(AbstractInputComponent));
2397
+ }(AbstractValueInputComponent));
2355
2398
 
2356
2399
  var NoopComponent = /** @class */ (function () {
2357
2400
  function NoopComponent() {
@@ -2568,17 +2611,20 @@
2568
2611
 
2569
2612
  var EditSession = /** @class */ (function (_super) {
2570
2613
  __extends(EditSession, _super);
2571
- function EditSession(rowId, row, saveCommand) {
2614
+ function EditSession(rowId, row, form, saveCommand) {
2572
2615
  var _this = _super.call(this) || this;
2573
2616
  _this.rowId = rowId;
2617
+ _this.form = form;
2574
2618
  _this.saveCommand = saveCommand;
2575
- _this._editorValue = new pectin.MutableValueModel();
2576
- _this.rowValueModel = _this._editorValue.readonly;
2577
- _this.form = new pectin.Form();
2619
+ _this._liveRowValue = new pectin.MutableValueModel();
2620
+ _this.liveRowValue = _this._liveRowValue.readonly;
2578
2621
  _this.form.load(row);
2579
- _this._editorValue.value = row;
2622
+ _this._liveRowValue.value = row;
2580
2623
  _this.form.onEdit(function () {
2581
- _this._editorValue.value = produce(_this._editorValue.value, function (draft) {
2624
+ // if (!this._liveRowValue.value[immerable]) {
2625
+ // console.warn()
2626
+ // }
2627
+ _this._liveRowValue.value = produce(_this._liveRowValue.value, function (draft) {
2582
2628
  _this.form.writeDirtyStateTo(draft);
2583
2629
  });
2584
2630
  });
@@ -2647,28 +2693,13 @@
2647
2693
  });
2648
2694
  return _this;
2649
2695
  }
2650
- Object.defineProperty(SelectCellRendererComponent.prototype, "row", {
2651
- get: function () {
2652
- return this._row;
2653
- },
2654
- set: function (value) {
2655
- this._row = value;
2656
- },
2657
- enumerable: true,
2658
- configurable: true
2659
- });
2660
2696
  SelectCellRendererComponent.prototype.isSelected = function () {
2661
2697
  return this.selectionModel.isSelected(this.row);
2662
2698
  };
2663
- __decorate([
2664
- core.Input(),
2665
- __metadata("design:type", Object),
2666
- __metadata("design:paramtypes", [Object])
2667
- ], SelectCellRendererComponent.prototype, "row", null);
2668
2699
  __decorate([
2669
2700
  core.Input(),
2670
2701
  __metadata("design:type", Object)
2671
- ], SelectCellRendererComponent.prototype, "selectionModel", void 0);
2702
+ ], SelectCellRendererComponent.prototype, "row", void 0);
2672
2703
  SelectCellRendererComponent = __decorate([
2673
2704
  core.Component({
2674
2705
  selector: 'aup-select-cell-renderer',
@@ -2690,15 +2721,13 @@
2690
2721
  return _this;
2691
2722
  }
2692
2723
  SelectHeaderCellRendererComponent.prototype.isSelected = function () {
2693
- return this.selectionModel.allSelected.value;
2724
+ var _a;
2725
+ return ((_a = this.selectionModel) === null || _a === void 0 ? void 0 : _a.allSelected.value) || false;
2694
2726
  };
2695
2727
  SelectHeaderCellRendererComponent.prototype.isIntermediate = function () {
2696
- return this.selectionModel.someSelected.value;
2728
+ var _a;
2729
+ return ((_a = this.selectionModel) === null || _a === void 0 ? void 0 : _a.someSelected.value) || false;
2697
2730
  };
2698
- __decorate([
2699
- core.Input(),
2700
- __metadata("design:type", pectin.MultipleSelectionModel)
2701
- ], SelectHeaderCellRendererComponent.prototype, "selectionModel", void 0);
2702
2731
  SelectHeaderCellRendererComponent = __decorate([
2703
2732
  core.Component({
2704
2733
  selector: 'aup-select-header-cell-renderer',
@@ -2710,197 +2739,6 @@
2710
2739
  return SelectHeaderCellRendererComponent;
2711
2740
  }(DisposableComponent));
2712
2741
 
2713
- var ColumnModel = /** @class */ (function () {
2714
- function ColumnModel(columnId, defaults) {
2715
- this.columnId = columnId;
2716
- this.defaults = defaults;
2717
- this.cellHeaderRenderer(DefaultHeaderCellRendererComponent, function (component, column) {
2718
- component.headerText = column.getHeaderText();
2719
- });
2720
- }
2721
- ColumnModel.prototype.getHeaderText = function () {
2722
- var _a;
2723
- return ((_a = this.getColumnTextProperties()) === null || _a === void 0 ? void 0 : _a.headerText()) || this.getDefaultHeaderText();
2724
- };
2725
- ColumnModel.prototype.getDefaultHeaderText = function () {
2726
- return this.columnId;
2727
- };
2728
- ColumnModel.prototype.getColumnTextProperties = function () {
2729
- return this._columnTextProperties || this.defaults.getColumnTextProperties(this);
2730
- };
2731
- ColumnModel.prototype.textProperties = function (columnTextProperties) {
2732
- this._columnTextProperties = columnTextProperties;
2733
- return this;
2734
- };
2735
- ColumnModel.prototype.setCellRenderer = function (cellRenderer, initialiser) {
2736
- this._cellRendererConfig = {
2737
- portal: new portal.ComponentPortal(cellRenderer),
2738
- pushState: initialiser
2739
- };
2740
- };
2741
- ColumnModel.prototype.cellHeaderRenderer = function (cellRenderer, initialiser) {
2742
- this._columnHeaderConfig = {
2743
- portal: new portal.ComponentPortal(cellRenderer),
2744
- initialiseComponent: initialiser
2745
- };
2746
- return this;
2747
- };
2748
- ColumnModel.prototype.setCellEditor = function (cellEditor) {
2749
- this._cellEditorConfig = cellEditor;
2750
- };
2751
- Object.defineProperty(ColumnModel.prototype, "cellRendererPortal", {
2752
- get: function () {
2753
- return this._cellRendererConfig.portal;
2754
- },
2755
- enumerable: true,
2756
- configurable: true
2757
- });
2758
- Object.defineProperty(ColumnModel.prototype, "columnHeaderCellRendererPortal", {
2759
- get: function () {
2760
- return this._columnHeaderConfig.portal;
2761
- },
2762
- enumerable: true,
2763
- configurable: true
2764
- });
2765
- Object.defineProperty(ColumnModel.prototype, "cellEditorPortal", {
2766
- get: function () {
2767
- var _a;
2768
- return (_a = this._cellEditorConfig) === null || _a === void 0 ? void 0 : _a.portal;
2769
- },
2770
- enumerable: true,
2771
- configurable: true
2772
- });
2773
- ColumnModel.prototype.hasEditor = function () {
2774
- return !!this._cellEditorConfig;
2775
- };
2776
- ColumnModel.prototype.updateCellRenderer = function (component, row, editRowCommand, editSession) {
2777
- this._cellRendererConfig.pushState(component, row, editRowCommand, editSession);
2778
- };
2779
- ColumnModel.prototype.initialiseHeader = function (component) {
2780
- this._columnHeaderConfig.initialiseComponent(component, this);
2781
- };
2782
- ColumnModel.prototype.initialiseEditor = function (component, editSession) {
2783
- this._cellEditorConfig.initialiseComponent(component, editSession);
2784
- };
2785
- __decorate([
2786
- src.Memoize(),
2787
- __metadata("design:type", Function),
2788
- __metadata("design:paramtypes", []),
2789
- __metadata("design:returntype", String)
2790
- ], ColumnModel.prototype, "getHeaderText", null);
2791
- __decorate([
2792
- src.Memoize(),
2793
- __metadata("design:type", Function),
2794
- __metadata("design:paramtypes", []),
2795
- __metadata("design:returntype", Object)
2796
- ], ColumnModel.prototype, "getColumnTextProperties", null);
2797
- return ColumnModel;
2798
- }());
2799
- var PropertyColumnModel = /** @class */ (function (_super) {
2800
- __extends(PropertyColumnModel, _super);
2801
- function PropertyColumnModel(property, defaults) {
2802
- var _this = _super.call(this, property.toString(), defaults) || this;
2803
- _this.property = property;
2804
- _this._format = function (value) { return value; };
2805
- _this.cellRenderer(DefaultCellRendererComponent);
2806
- return _this;
2807
- }
2808
- PropertyColumnModel.prototype.cellRenderer = function (componentType) {
2809
- var _this = this;
2810
- this.setCellRenderer(componentType, function (component, row) {
2811
- component.value = _this._format(row[_this.property]);
2812
- });
2813
- return this;
2814
- };
2815
- PropertyColumnModel.prototype.cellEditor = function (editor, options) {
2816
- var _this = this;
2817
- this.setCellEditor({
2818
- portal: new portal.ComponentPortal(editor),
2819
- initialiseComponent: function (component, editSession) {
2820
- var formValueModel = editSession.form.pluck(_this.property);
2821
- if (options === null || options === void 0 ? void 0 : options.validators) {
2822
- formValueModel.validateUsing(options.validators);
2823
- }
2824
- component.valueModel = formValueModel;
2825
- if (options === null || options === void 0 ? void 0 : options.initialiseComponent) {
2826
- options.initialiseComponent(component);
2827
- }
2828
- }
2829
- });
2830
- return this;
2831
- };
2832
- PropertyColumnModel.prototype.format = function (formatter) {
2833
- typescriptUtilities.assert.isFunction(formatter);
2834
- this._format = formatter;
2835
- return this;
2836
- };
2837
- return PropertyColumnModel;
2838
- }(ColumnModel));
2839
- var CustomValueColumnModel = /** @class */ (function (_super) {
2840
- __extends(CustomValueColumnModel, _super);
2841
- function CustomValueColumnModel(columnId, defaults, getValue) {
2842
- var _this = _super.call(this, columnId, defaults) || this;
2843
- _this.getValue = getValue;
2844
- _this.cellRenderer(DefaultCellRendererComponent);
2845
- return _this;
2846
- }
2847
- CustomValueColumnModel.prototype.cellRenderer = function (componentType) {
2848
- var _this = this;
2849
- this.setCellRenderer(componentType, function (component, row) {
2850
- component.value = _this.getValue(row);
2851
- });
2852
- return this;
2853
- };
2854
- return CustomValueColumnModel;
2855
- }(ColumnModel));
2856
- var EditorControlColumnModel = /** @class */ (function (_super) {
2857
- __extends(EditorControlColumnModel, _super);
2858
- function EditorControlColumnModel(columnId, saveCommand, defaults) {
2859
- var _this = _super.call(this, columnId, defaults) || this;
2860
- _this.cellRenderer(EditRowControls);
2861
- return _this;
2862
- }
2863
- EditorControlColumnModel.prototype.cellRenderer = function (componentType) {
2864
- this.setCellRenderer(componentType, function (component, row, editRowCommand, editSession) {
2865
- component.row = row;
2866
- component.editSession = editSession;
2867
- component.editRowCommand = editRowCommand;
2868
- });
2869
- return this;
2870
- };
2871
- EditorControlColumnModel.prototype.getDefaultHeaderText = function () {
2872
- return '';
2873
- };
2874
- return EditorControlColumnModel;
2875
- }(ColumnModel));
2876
- var CustomTemplateColumnModel = /** @class */ (function (_super) {
2877
- __extends(CustomTemplateColumnModel, _super);
2878
- function CustomTemplateColumnModel(columnId, defaults, component) {
2879
- return _super.call(this, columnId, defaults) || this;
2880
- }
2881
- return CustomTemplateColumnModel;
2882
- }(ColumnModel));
2883
- var SelectionColumnModel = /** @class */ (function (_super) {
2884
- __extends(SelectionColumnModel, _super);
2885
- function SelectionColumnModel(columnId, defaults, selectionModel) {
2886
- var _this = _super.call(this, columnId, defaults) || this;
2887
- if (selectionModel instanceof pectin.MultipleSelectionModel) {
2888
- _this.cellHeaderRenderer(SelectHeaderCellRendererComponent, function (component) {
2889
- component.selectionModel = selectionModel;
2890
- });
2891
- }
2892
- _this.setCellRenderer(SelectCellRendererComponent, function (component, row, editRowCommand, editSession) {
2893
- component.row = row;
2894
- component.selectionModel = selectionModel;
2895
- });
2896
- return _this;
2897
- }
2898
- SelectionColumnModel.prototype.getDefaultHeaderText = function () {
2899
- return '';
2900
- };
2901
- return SelectionColumnModel;
2902
- }(ColumnModel));
2903
-
2904
2742
  // export type StringPropertiesOf<T> = { [K in keyof T]: T[K] extends string ? K : never }[keyof T];
2905
2743
  // export type NumberPropertiesOf<T> = { [K in keyof T]: T[K] extends number ? K : never }[keyof T];
2906
2744
  /**
@@ -2979,6 +2817,7 @@
2979
2817
  this._garbage = new pectin.GarbageCollector();
2980
2818
  this._columns = new pectin.MutableListModel();
2981
2819
  this._editorSessions = new pectin.MutableListModel();
2820
+ this._createForm = function (row) { return new pectin.Form(); };
2982
2821
  this.identityOf = sourceOfTruth.identityOf;
2983
2822
  var _a = pectin.Dsl.disposeWith(this._garbage), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
2984
2823
  this._columnsById = chain(this._columns).indexBy('columnId');
@@ -3018,6 +2857,9 @@
3018
2857
  TableModel.prototype.pluck = function (property) {
3019
2858
  return this.addColumn(new PropertyColumnModel(property, this));
3020
2859
  };
2860
+ TableModel.prototype.pluckList = function (property) {
2861
+ return this.addColumn(new ListPropertyColumnModel(property, this));
2862
+ };
3021
2863
  TableModel.prototype.addSelectionColumn = function (selectionModel) {
3022
2864
  return this.addColumn(new SelectionColumnModel('selection', this, selectionModel));
3023
2865
  };
@@ -3028,6 +2870,13 @@
3028
2870
  TableModel.prototype.addCustomColumn = function (columnId, dataAccessor) {
3029
2871
  return this.addColumn(new CustomValueColumnModel(columnId, this, dataAccessor));
3030
2872
  };
2873
+ TableModel.prototype.addTemplateColumn = function (columnId) {
2874
+ return this.addColumn(new CustomTemplateColumnModel(columnId, this));
2875
+ };
2876
+ TableModel.prototype.useFormFactory = function (factory) {
2877
+ this._createForm = factory;
2878
+ return this;
2879
+ };
3031
2880
  TableModel.prototype.addColumn = function (column) {
3032
2881
  if (this._columnsById.get(column.columnId)) {
3033
2882
  pectin.lang.illegalState("Column with id=" + column.columnId + " already exists");
@@ -3051,14 +2900,14 @@
3051
2900
  return pectin.lang.illegalState("Row with id=" + rowId + " already being edited");
3052
2901
  }
3053
2902
  else {
3054
- var editSession_1 = new EditSession(rowId, row, this.saveCommand);
2903
+ var editSession_1 = new EditSession(rowId, row, this._createForm(row), this.saveCommand);
3055
2904
  var when = pectin.Dsl.disposeWith(editSession_1).when;
3056
- when.valueOf(editSession_1.rowValueModel).changes(function (editedValue) {
2905
+ when.valueOf(editSession_1.liveRowValue).changes(function (editedValue) {
3057
2906
  _this._rowsBeingEdited.replaceOrPush(editedValue);
3058
2907
  }, { initialValue: 'triggerChangeUnlessNil' });
3059
2908
  this._editorSessions.push(editSession_1);
3060
2909
  editSession_1.onDispose(function () {
3061
- _this._rowsBeingEdited.remove(editSession_1.rowValueModel.value);
2910
+ _this._rowsBeingEdited.remove(editSession_1.liveRowValue.value);
3062
2911
  _this._editorSessions.remove(editSession_1);
3063
2912
  });
3064
2913
  return editSession_1;
@@ -3086,45 +2935,480 @@
3086
2935
  return TableModel;
3087
2936
  }());
3088
2937
 
3089
- /**
3090
- * Create your model:
3091
- * @example
3092
- * this.heroTableModel = TableModel.fromList(heroList, table => {
3093
- * table.pluck("firstName");
3094
- * table.pluck("lastName");
3095
- * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
3096
- * });
3097
- *
3098
- * Create your table
3099
- * @example
3100
- * <aup-table [tableModel]="heroTableModel"></aup-table>
3101
- *
3102
- * Styling
3103
- * @example
3104
- * aup-table {
3105
- * --column-gap: 10px; // defaults to 24px
3106
- * aup-table-cell-renderer {
3107
- * &:first-column {
3108
- * // do stuff
3109
- * }
3110
- * &:last-column {
3111
- * // do stuff
3112
- * }
3113
- * }
3114
- * }
3115
- */
3116
- var TableComponent = /** @class */ (function (_super) {
3117
- __extends(TableComponent, _super);
3118
- function TableComponent() {
3119
- return _super.call(this) || this;
2938
+ var TableCellRendererComponent = /** @class */ (function () {
2939
+ function TableCellRendererComponent() {
2940
+ var _this = this;
2941
+ this.defaultClassNames = 'aup-cell-renderer';
2942
+ this.fillCell = false;
2943
+ this.padChild = false;
2944
+ this.editRowCommand = pectin.Command.create(function () {
2945
+ _this.tableModel.startEditSession(_this.row);
2946
+ });
3120
2947
  }
3121
- TableComponent.prototype.ngOnInit = function () {
3122
- 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;
3123
- this.columns = chain(this.tableModel.columns);
3124
- this.columnIds = chain(this.columns).pluck('columnId');
2948
+ TableCellRendererComponent.prototype.ngOnInit = function () {
2949
+ this.column.attachCell(this);
3125
2950
  };
3126
- TableComponent.prototype.isEditing = function (row) {
3127
- return !!this.tableModel.getEditSessionFor(row);
2951
+ TableCellRendererComponent.prototype.hasActiveEditor = function () {
2952
+ return !!this.editSession && !!this.column.hasEditorPortal();
2953
+ };
2954
+ TableCellRendererComponent.prototype.initialiseRenderer = function (instance) {
2955
+ this.column.onRendererAttached(this, instance);
2956
+ };
2957
+ TableCellRendererComponent.prototype.initialiseEditor = function (instance) {
2958
+ this.column.onEditorAttached(this, instance);
2959
+ };
2960
+ // @Trace()
2961
+ TableCellRendererComponent.prototype.ngOnChanges = function (changes) {
2962
+ this.column.updatePortalContent(this);
2963
+ };
2964
+ TableCellRendererComponent.prototype.getRendererPortal = function () {
2965
+ return this[CELL_RENDERER_PORTAL];
2966
+ };
2967
+ TableCellRendererComponent.prototype.getEditorPortal = function () {
2968
+ return this[CELL_EDITOR_PORTAL];
2969
+ };
2970
+ TableCellRendererComponent.prototype.getRowData = function () {
2971
+ return {
2972
+ row: this.row,
2973
+ editSession: this.editSession,
2974
+ editRowCommand: this.editRowCommand
2975
+ };
2976
+ };
2977
+ __decorate([
2978
+ core.Input(),
2979
+ __metadata("design:type", Object)
2980
+ ], TableCellRendererComponent.prototype, "row", void 0);
2981
+ __decorate([
2982
+ core.Input(),
2983
+ __metadata("design:type", ColumnModel)
2984
+ ], TableCellRendererComponent.prototype, "column", void 0);
2985
+ __decorate([
2986
+ core.Input(),
2987
+ __metadata("design:type", EditSession)
2988
+ ], TableCellRendererComponent.prototype, "editSession", void 0);
2989
+ __decorate([
2990
+ core.Input(),
2991
+ __metadata("design:type", TableModel)
2992
+ ], TableCellRendererComponent.prototype, "tableModel", void 0);
2993
+ __decorate([
2994
+ core.HostBinding('class'),
2995
+ __metadata("design:type", Object)
2996
+ ], TableCellRendererComponent.prototype, "defaultClassNames", void 0);
2997
+ __decorate([
2998
+ core.HostBinding('class.fillCell'),
2999
+ __metadata("design:type", Object)
3000
+ ], TableCellRendererComponent.prototype, "fillCell", void 0);
3001
+ __decorate([
3002
+ core.HostBinding('class.padChild'),
3003
+ __metadata("design:type", Object)
3004
+ ], TableCellRendererComponent.prototype, "padChild", void 0);
3005
+ __decorate([
3006
+ pectin.Trace(),
3007
+ __metadata("design:type", Function),
3008
+ __metadata("design:paramtypes", [Object]),
3009
+ __metadata("design:returntype", void 0)
3010
+ ], TableCellRendererComponent.prototype, "initialiseEditor", null);
3011
+ TableCellRendererComponent = __decorate([
3012
+ core.Component({
3013
+ selector: 'aup-table-cell-renderer',
3014
+ template: "<ng-container *ngIf=\"!hasActiveEditor()\" [cdkPortalOutlet]=\"getRendererPortal()\" (attached)=\"initialiseRenderer($event.instance)\"></ng-container>\n<ng-container *ngIf=\"hasActiveEditor()\" [cdkPortalOutlet]=\"getEditorPortal()\" (attached)=\"initialiseEditor($event.instance)\"></ng-container>\n",
3015
+ styles: [""]
3016
+ }),
3017
+ __metadata("design:paramtypes", [])
3018
+ ], TableCellRendererComponent);
3019
+ return TableCellRendererComponent;
3020
+ }());
3021
+
3022
+ var HEADER_CELL_RENDERER_PORTAL = Symbol('aup-cell-header-renderer-component-ref');
3023
+ var CELL_RENDERER_PORTAL = Symbol('aup-cell-renderer-component-ref');
3024
+ var CELL_EDITOR_PORTAL = Symbol('aup-cell-editor-component-ref');
3025
+ var PORTAL_RENDERER_COMPONENT = Symbol('aup-cell-renderer-portal-component');
3026
+ var PORTAL_EDITOR_COMPONENT = Symbol('aup-cell-editor-portal-component');
3027
+ var noop = function () {
3028
+ };
3029
+ var ɵ0 = noop;
3030
+ var CellPortalRef = /** @class */ (function () {
3031
+ function CellPortalRef() {
3032
+ }
3033
+ return CellPortalRef;
3034
+ }());
3035
+ var CellHeaderPortalRef = /** @class */ (function (_super) {
3036
+ __extends(CellHeaderPortalRef, _super);
3037
+ function CellHeaderPortalRef(componentType, initialiseHeader) {
3038
+ var _this = _super.call(this) || this;
3039
+ _this.componentType = componentType;
3040
+ _this.initialiseHeader = initialiseHeader;
3041
+ return _this;
3042
+ }
3043
+ CellHeaderPortalRef.prototype.initialiseHost = function (host, columnModel) {
3044
+ typescriptUtilities.assert.isTruthy(host);
3045
+ host[HEADER_CELL_RENDERER_PORTAL] = new portal.ComponentPortal(this.componentType);
3046
+ };
3047
+ CellHeaderPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
3048
+ this.initialiseHeader(portalComponent, host.column);
3049
+ };
3050
+ return CellHeaderPortalRef;
3051
+ }(CellPortalRef));
3052
+ var CellRendererPortalRef = /** @class */ (function (_super) {
3053
+ __extends(CellRendererPortalRef, _super);
3054
+ function CellRendererPortalRef() {
3055
+ return _super !== null && _super.apply(this, arguments) || this;
3056
+ }
3057
+ return CellRendererPortalRef;
3058
+ }(CellPortalRef));
3059
+ var ComponentCellRendererPortalRef = /** @class */ (function (_super) {
3060
+ __extends(ComponentCellRendererPortalRef, _super);
3061
+ function ComponentCellRendererPortalRef(componentType, updateComponent) {
3062
+ var _this = _super.call(this) || this;
3063
+ _this.componentType = componentType;
3064
+ _this.updateComponent = updateComponent;
3065
+ return _this;
3066
+ }
3067
+ ComponentCellRendererPortalRef.prototype.initialiseHost = function (host, columnModel) {
3068
+ host[CELL_RENDERER_PORTAL] = new portal.ComponentPortal(this.componentType);
3069
+ };
3070
+ ComponentCellRendererPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
3071
+ host[PORTAL_RENDERER_COMPONENT] = portalComponent;
3072
+ this.updateComponent(portalComponent, host.getRowData());
3073
+ };
3074
+ ComponentCellRendererPortalRef.prototype.pushState = function (host) {
3075
+ if (host[PORTAL_RENDERER_COMPONENT]) {
3076
+ this.updateComponent(host[PORTAL_RENDERER_COMPONENT], host.getRowData());
3077
+ }
3078
+ };
3079
+ return ComponentCellRendererPortalRef;
3080
+ }(CellRendererPortalRef));
3081
+ var CellEditorPortalRef = /** @class */ (function (_super) {
3082
+ __extends(CellEditorPortalRef, _super);
3083
+ function CellEditorPortalRef(componentType, initialiseEditorSession) {
3084
+ var _this = _super.call(this) || this;
3085
+ _this.componentType = componentType;
3086
+ _this.initialiseEditorSession = initialiseEditorSession;
3087
+ return _this;
3088
+ }
3089
+ CellEditorPortalRef.prototype.initialiseHost = function (host, columnModel) {
3090
+ typescriptUtilities.assert.isTruthy(host);
3091
+ host[CELL_EDITOR_PORTAL] = new portal.ComponentPortal(this.componentType);
3092
+ };
3093
+ CellEditorPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
3094
+ host[PORTAL_EDITOR_COMPONENT] = portalComponent;
3095
+ this.initialiseEditorSession(portalComponent, host.editSession);
3096
+ };
3097
+ __decorate([
3098
+ pectin.Trace(),
3099
+ __metadata("design:type", Function),
3100
+ __metadata("design:paramtypes", [TableCellRendererComponent, Object]),
3101
+ __metadata("design:returntype", void 0)
3102
+ ], CellEditorPortalRef.prototype, "onPortalAttached", null);
3103
+ return CellEditorPortalRef;
3104
+ }(CellPortalRef));
3105
+ var TemplateCellRendererPortalRef = /** @class */ (function (_super) {
3106
+ __extends(TemplateCellRendererPortalRef, _super);
3107
+ function TemplateCellRendererPortalRef() {
3108
+ return _super.call(this) || this;
3109
+ }
3110
+ TemplateCellRendererPortalRef.prototype.registerPortal = function (templateRef, viewContainer, fillCell, padChild) {
3111
+ this.templateRef = templateRef;
3112
+ this.viewContainer = viewContainer;
3113
+ this.fillCell = fillCell;
3114
+ this.padChild = padChild;
3115
+ };
3116
+ TemplateCellRendererPortalRef.prototype.initialiseHost = function (host, columnModel) {
3117
+ typescriptUtilities.assert.isTruthy(host);
3118
+ };
3119
+ TemplateCellRendererPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
3120
+ // don't care
3121
+ };
3122
+ TemplateCellRendererPortalRef.prototype.pushState = function (host) {
3123
+ host[CELL_RENDERER_PORTAL] = this.createPortal(host.getRowData());
3124
+ host.fillCell = this.fillCell;
3125
+ host.padChild = this.padChild;
3126
+ };
3127
+ TemplateCellRendererPortalRef.prototype.createPortal = function (data) {
3128
+ return new portal.TemplatePortal(this.templateRef, this.viewContainer, __assign(__assign({}, (data)), { $implicit: data.row }));
3129
+ };
3130
+ __decorate([
3131
+ pectin.Trace(),
3132
+ __metadata("design:type", Function),
3133
+ __metadata("design:paramtypes", [TableCellRendererComponent, void 0]),
3134
+ __metadata("design:returntype", void 0)
3135
+ ], TemplateCellRendererPortalRef.prototype, "onPortalAttached", null);
3136
+ return TemplateCellRendererPortalRef;
3137
+ }(CellRendererPortalRef));
3138
+ var ColumnModel = /** @class */ (function () {
3139
+ function ColumnModel(columnId, defaults) {
3140
+ this.columnId = columnId;
3141
+ this.defaults = defaults;
3142
+ this.cellHeaderRenderer(DefaultHeaderCellRendererComponent, function (component, column) {
3143
+ component.headerText = column.getHeaderText();
3144
+ });
3145
+ }
3146
+ ColumnModel.prototype.getHeaderText = function () {
3147
+ var _a;
3148
+ return ((_a = this.getColumnTextProperties()) === null || _a === void 0 ? void 0 : _a.headerText()) || this.getDefaultHeaderText();
3149
+ };
3150
+ ColumnModel.prototype.getDefaultHeaderText = function () {
3151
+ return this.columnId;
3152
+ };
3153
+ ColumnModel.prototype.getColumnTextProperties = function () {
3154
+ return this._columnTextProperties || this.defaults.getColumnTextProperties(this);
3155
+ };
3156
+ ColumnModel.prototype.textProperties = function (columnTextProperties) {
3157
+ this._columnTextProperties = columnTextProperties;
3158
+ return this;
3159
+ };
3160
+ ColumnModel.prototype.configureHeaderRenderer = function (config) {
3161
+ this._columnHeaderPortalRef = config;
3162
+ };
3163
+ ColumnModel.prototype.configureCellRenderer = function (config) {
3164
+ this._cellRendererPortalRef = config;
3165
+ };
3166
+ ColumnModel.prototype.configureCellEditor = function (cellEditor) {
3167
+ this._cellEditorPortalRef = cellEditor;
3168
+ };
3169
+ ColumnModel.prototype.cellHeaderRenderer = function (componentType, initialiser) {
3170
+ this.configureHeaderRenderer(new CellHeaderPortalRef(componentType, initialiser));
3171
+ return this;
3172
+ };
3173
+ ColumnModel.prototype.hasEditorPortal = function () {
3174
+ return !!this._cellEditorPortalRef;
3175
+ };
3176
+ ColumnModel.prototype.attachHeaderCell = function (host) {
3177
+ this._columnHeaderPortalRef.initialiseHost(host, this);
3178
+ };
3179
+ ColumnModel.prototype.attachCell = function (host) {
3180
+ this._cellRendererPortalRef.initialiseHost(host, this);
3181
+ if (this.hasEditorPortal()) {
3182
+ this._cellEditorPortalRef.initialiseHost(host, this);
3183
+ }
3184
+ };
3185
+ ColumnModel.prototype.onHeaderAttached = function (host, component) {
3186
+ this._columnHeaderPortalRef.onPortalAttached(host, component);
3187
+ };
3188
+ ColumnModel.prototype.onRendererAttached = function (host, component) {
3189
+ this._cellRendererPortalRef.onPortalAttached(host, component);
3190
+ };
3191
+ ColumnModel.prototype.onEditorAttached = function (host, component) {
3192
+ this._cellEditorPortalRef.onPortalAttached(host, component);
3193
+ };
3194
+ ColumnModel.prototype.updatePortalContent = function (host) {
3195
+ this._cellRendererPortalRef.pushState(host);
3196
+ };
3197
+ __decorate([
3198
+ src.Memoize(),
3199
+ __metadata("design:type", Function),
3200
+ __metadata("design:paramtypes", []),
3201
+ __metadata("design:returntype", String)
3202
+ ], ColumnModel.prototype, "getHeaderText", null);
3203
+ __decorate([
3204
+ src.Memoize(),
3205
+ __metadata("design:type", Function),
3206
+ __metadata("design:paramtypes", []),
3207
+ __metadata("design:returntype", Object)
3208
+ ], ColumnModel.prototype, "getColumnTextProperties", null);
3209
+ __decorate([
3210
+ pectin.Trace(),
3211
+ __metadata("design:type", Function),
3212
+ __metadata("design:paramtypes", [TableCellRendererComponent, Object]),
3213
+ __metadata("design:returntype", void 0)
3214
+ ], ColumnModel.prototype, "onEditorAttached", null);
3215
+ return ColumnModel;
3216
+ }());
3217
+ var PropertyColumnModel = /** @class */ (function (_super) {
3218
+ __extends(PropertyColumnModel, _super);
3219
+ function PropertyColumnModel(property, defaults) {
3220
+ var _this = _super.call(this, property.toString(), defaults) || this;
3221
+ _this.property = property;
3222
+ _this._format = function (value) { return value; };
3223
+ _this.cellRenderer(DefaultCellRendererComponent);
3224
+ return _this;
3225
+ }
3226
+ PropertyColumnModel.prototype.cellRenderer = function (componentType) {
3227
+ var _this = this;
3228
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
3229
+ component.value = _this._format(rowData.row[_this.property]);
3230
+ }));
3231
+ return this;
3232
+ };
3233
+ PropertyColumnModel.prototype.cellEditor = function (editor, validatorsOrInitialiser, initialiseComponent) {
3234
+ var _this = this;
3235
+ var validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3236
+ var initialiser = ___default__default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3237
+ this.configureCellEditor(new CellEditorPortalRef(editor, function (component, editSession) {
3238
+ var formValueModel = editSession.form.pluck(_this.property);
3239
+ if (validators) {
3240
+ formValueModel.validateUsing(validators);
3241
+ }
3242
+ component.valueModel = formValueModel;
3243
+ if (initialiser) {
3244
+ initialiser(component);
3245
+ }
3246
+ }));
3247
+ return this;
3248
+ };
3249
+ PropertyColumnModel.prototype.format = function (formatter) {
3250
+ typescriptUtilities.assert.isFunction(formatter);
3251
+ this._format = formatter;
3252
+ return this;
3253
+ };
3254
+ return PropertyColumnModel;
3255
+ }(ColumnModel));
3256
+ var ListPropertyColumnModel = /** @class */ (function (_super) {
3257
+ __extends(ListPropertyColumnModel, _super);
3258
+ function ListPropertyColumnModel(property, defaults) {
3259
+ var _this = _super.call(this, property.toString(), defaults) || this;
3260
+ _this.property = property;
3261
+ _this._format = function (value) { return value.map(function (v) { return v === null || v === void 0 ? void 0 : v.toString(); }).join(', '); };
3262
+ _this.cellRenderer(DefaultCellRendererComponent);
3263
+ return _this;
3264
+ }
3265
+ ListPropertyColumnModel.prototype.cellRenderer = function (componentType) {
3266
+ var _this = this;
3267
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
3268
+ component.value = _this._format(rowData.row[_this.property]);
3269
+ }));
3270
+ return this;
3271
+ };
3272
+ ListPropertyColumnModel.prototype.cellEditor = function (editor, validatorsOrInitialiser, initialiseComponent) {
3273
+ var _this = this;
3274
+ var validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
3275
+ var initialiser = ___default__default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
3276
+ this.configureCellEditor(new CellEditorPortalRef(editor, function (component, editSession) {
3277
+ var formListModel = editSession.form.pluckList(_this.property);
3278
+ if (validators) {
3279
+ formListModel.validateUsing(validators);
3280
+ }
3281
+ component.listModel = formListModel;
3282
+ if (initialiser) {
3283
+ initialiser(component);
3284
+ }
3285
+ }));
3286
+ return this;
3287
+ };
3288
+ ListPropertyColumnModel.prototype.format = function (formatter) {
3289
+ typescriptUtilities.assert.isFunction(formatter);
3290
+ this._format = formatter;
3291
+ return this;
3292
+ };
3293
+ return ListPropertyColumnModel;
3294
+ }(ColumnModel));
3295
+ var CustomValueColumnModel = /** @class */ (function (_super) {
3296
+ __extends(CustomValueColumnModel, _super);
3297
+ function CustomValueColumnModel(columnId, defaults, getValue) {
3298
+ var _this = _super.call(this, columnId, defaults) || this;
3299
+ _this.getValue = getValue;
3300
+ _this.cellRenderer(DefaultCellRendererComponent);
3301
+ return _this;
3302
+ }
3303
+ CustomValueColumnModel.prototype.cellRenderer = function (componentType) {
3304
+ var _this = this;
3305
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
3306
+ component.value = _this.getValue(rowData.row);
3307
+ }));
3308
+ return this;
3309
+ };
3310
+ return CustomValueColumnModel;
3311
+ }(ColumnModel));
3312
+ var EditorControlColumnModel = /** @class */ (function (_super) {
3313
+ __extends(EditorControlColumnModel, _super);
3314
+ function EditorControlColumnModel(columnId, saveCommand, defaults) {
3315
+ var _this = _super.call(this, columnId, defaults) || this;
3316
+ _this.cellRenderer(EditRowControls);
3317
+ return _this;
3318
+ }
3319
+ EditorControlColumnModel.prototype.cellRenderer = function (componentType) {
3320
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
3321
+ component.row = rowData.row;
3322
+ component.editSession = rowData.editSession;
3323
+ component.editRowCommand = rowData.editRowCommand;
3324
+ }));
3325
+ return this;
3326
+ };
3327
+ EditorControlColumnModel.prototype.getDefaultHeaderText = function () {
3328
+ return '';
3329
+ };
3330
+ return EditorControlColumnModel;
3331
+ }(ColumnModel));
3332
+ var CustomTemplateColumnModel = /** @class */ (function (_super) {
3333
+ __extends(CustomTemplateColumnModel, _super);
3334
+ function CustomTemplateColumnModel(columnId, defaults) {
3335
+ var _this = _super.call(this, columnId, defaults) || this;
3336
+ _this.config = new TemplateCellRendererPortalRef();
3337
+ _this.configureCellRenderer(_this.config);
3338
+ return _this;
3339
+ }
3340
+ CustomTemplateColumnModel.prototype.setTemplate = function (templateRef, viewContainer, fillCell, padChild) {
3341
+ this.config.registerPortal(templateRef, viewContainer, fillCell, padChild);
3342
+ };
3343
+ return CustomTemplateColumnModel;
3344
+ }(ColumnModel));
3345
+ var SelectionColumnModel = /** @class */ (function (_super) {
3346
+ __extends(SelectionColumnModel, _super);
3347
+ function SelectionColumnModel(columnId, defaults, selectionModel) {
3348
+ var _this = _super.call(this, columnId, defaults) || this;
3349
+ if (selectionModel instanceof pectin.MultipleSelectionModel) {
3350
+ _this.cellHeaderRenderer(SelectHeaderCellRendererComponent, function (component) {
3351
+ component.selectionModel = selectionModel;
3352
+ });
3353
+ }
3354
+ _this.configureCellRenderer(new ComponentCellRendererPortalRef(SelectCellRendererComponent, function (component, rowData) {
3355
+ component.row = rowData.row;
3356
+ component.selectionModel = selectionModel;
3357
+ }));
3358
+ return _this;
3359
+ }
3360
+ SelectionColumnModel.prototype.getDefaultHeaderText = function () {
3361
+ return '';
3362
+ };
3363
+ return SelectionColumnModel;
3364
+ }(ColumnModel));
3365
+
3366
+ /**
3367
+ * Create your model:
3368
+ * @example
3369
+ * this.heroTableModel = TableModel.fromList(heroList, table => {
3370
+ * table.pluck("firstName");
3371
+ * table.pluck("lastName");
3372
+ * table.addCustomColumn("fullName", hero => `${hero.firstName} ${hero.lastName}`);
3373
+ * });
3374
+ *
3375
+ * Create your table
3376
+ * @example
3377
+ * <aup-table [tableModel]="heroTableModel"></aup-table>
3378
+ *
3379
+ * Styling
3380
+ * @example
3381
+ * aup-table {
3382
+ * --column-gap: 10px; // defaults to 24px
3383
+ * aup-table-cell-renderer {
3384
+ * &:first-column {
3385
+ * // do stuff
3386
+ * }
3387
+ * &:last-column {
3388
+ * // do stuff
3389
+ * }
3390
+ * }
3391
+ * }
3392
+ */
3393
+ var TableComponent = /** @class */ (function (_super) {
3394
+ __extends(TableComponent, _super);
3395
+ function TableComponent() {
3396
+ return _super.call(this) || this;
3397
+ }
3398
+ TableComponent.prototype.ngOnInit = function () {
3399
+ 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;
3400
+ this.columns = chain(this.tableModel.columns);
3401
+ this.columnIds = chain(this.columns).pluck('columnId');
3402
+ this.columnsById = chain(this.columns).indexBy('columnId');
3403
+ };
3404
+ TableComponent.prototype.isEditing = function (row) {
3405
+ return !!this.tableModel.getEditSessionFor(row);
3406
+ };
3407
+ TableComponent.prototype.registerColumnTemplate = function (columnId, templateRef, viewContainer, fillCell, padChild) {
3408
+ var column = this.columnsById.get(columnId);
3409
+ if (column instanceof CustomTemplateColumnModel) {
3410
+ column.setTemplate(templateRef, viewContainer, fillCell, padChild);
3411
+ }
3128
3412
  };
3129
3413
  __decorate([
3130
3414
  core.Input(),
@@ -3144,94 +3428,62 @@
3144
3428
 
3145
3429
  var ColumnTemplateDirective = /** @class */ (function () {
3146
3430
  function ColumnTemplateDirective(host, templateRef, viewContainer) {
3431
+ this.host = host;
3147
3432
  this.templateRef = templateRef;
3148
3433
  this.viewContainer = viewContainer;
3434
+ this.aupColumnTemplateFillCell = false;
3435
+ this.aupColumnTemplateAutoPadChild = undefined;
3149
3436
  }
3437
+ ColumnTemplateDirective.prototype.ngOnInit = function () {
3438
+ var _a;
3439
+ pectin.assert.isTruthy(this.aupColumnTemplateColumnId);
3440
+ this.host.registerColumnTemplate(this.aupColumnTemplateColumnId, this.templateRef, this.viewContainer, this.aupColumnTemplateFillCell, (_a = this.aupColumnTemplateAutoPadChild) !== null && _a !== void 0 ? _a : this.aupColumnTemplateFillCell);
3441
+ };
3150
3442
  ColumnTemplateDirective.ctorParameters = function () { return [
3151
3443
  { type: TableComponent },
3152
3444
  { type: core.TemplateRef },
3153
3445
  { type: core.ViewContainerRef }
3154
3446
  ]; };
3155
- ColumnTemplateDirective = __decorate([
3156
- core.Directive({
3157
- selector: '[aupColumnTemplate]'
3158
- }),
3159
- __metadata("design:paramtypes", [TableComponent,
3160
- core.TemplateRef,
3161
- core.ViewContainerRef])
3162
- ], ColumnTemplateDirective);
3163
- return ColumnTemplateDirective;
3164
- }());
3165
-
3166
- var TableCellRendererComponent = /** @class */ (function () {
3167
- function TableCellRendererComponent() {
3168
- var _this = this;
3169
- this.defaultClassNames = "aup-header-cell-renderer";
3170
- this.editRowCommand = pectin.Command.create(function () {
3171
- _this.tableModel.startEditSession(_this.row);
3172
- });
3173
- }
3174
- TableCellRendererComponent.prototype.initialiseRenderer = function (instance) {
3175
- if (this.renderer !== instance) {
3176
- this.renderer = instance;
3177
- this.column.updateCellRenderer(this.renderer, this.row, this.editRowCommand, this.editSession);
3178
- }
3179
- };
3180
- TableCellRendererComponent.prototype.initialiseEditor = function (instance) {
3181
- if (this.editor !== instance) {
3182
- this.editor = instance;
3183
- this.column.initialiseEditor(this.editor, this.editSession);
3184
- }
3185
- };
3186
- TableCellRendererComponent.prototype.ngOnChanges = function (changes) {
3187
- if (this.renderer) {
3188
- this.column.updateCellRenderer(this.renderer, this.row, this.editRowCommand, this.editSession);
3189
- this.renderer.editSession = this.editSession;
3190
- }
3191
- };
3192
- TableCellRendererComponent.prototype.hasActiveEditor = function () {
3193
- return this.editSession && this.column.hasEditor();
3194
- };
3195
3447
  __decorate([
3196
3448
  core.Input(),
3197
- __metadata("design:type", Object)
3198
- ], TableCellRendererComponent.prototype, "row", void 0);
3449
+ __metadata("design:type", String)
3450
+ ], ColumnTemplateDirective.prototype, "aupColumnTemplate", void 0);
3199
3451
  __decorate([
3200
3452
  core.Input(),
3201
- __metadata("design:type", ColumnModel)
3202
- ], TableCellRendererComponent.prototype, "column", void 0);
3453
+ __metadata("design:type", String)
3454
+ ], ColumnTemplateDirective.prototype, "aupColumnTemplateColumnId", void 0);
3203
3455
  __decorate([
3204
3456
  core.Input(),
3205
- __metadata("design:type", EditSession)
3206
- ], TableCellRendererComponent.prototype, "editSession", void 0);
3457
+ __metadata("design:type", Object)
3458
+ ], ColumnTemplateDirective.prototype, "aupColumnTemplateFillCell", void 0);
3207
3459
  __decorate([
3208
3460
  core.Input(),
3209
- __metadata("design:type", TableModel)
3210
- ], TableCellRendererComponent.prototype, "tableModel", void 0);
3211
- __decorate([
3212
- core.HostBinding('class'),
3213
3461
  __metadata("design:type", Object)
3214
- ], TableCellRendererComponent.prototype, "defaultClassNames", void 0);
3215
- TableCellRendererComponent = __decorate([
3216
- core.Component({
3217
- selector: 'aup-table-cell-renderer',
3218
- template: "<ng-container *ngIf=\"!hasActiveEditor()\" [cdkPortalOutlet]=\"column.cellRendererPortal\" (attached)=\"initialiseRenderer($event.instance)\"></ng-container>\n<ng-container *ngIf=\"hasActiveEditor()\" [cdkPortalOutlet]=\"column.cellEditorPortal\" (attached)=\"initialiseEditor($event.instance)\"></ng-container>\n",
3219
- styles: [":host{display:flex;flex-direction:column;align-items:stretch}"]
3462
+ ], ColumnTemplateDirective.prototype, "aupColumnTemplateAutoPadChild", void 0);
3463
+ ColumnTemplateDirective = __decorate([
3464
+ core.Directive({
3465
+ selector: '[aupColumnTemplate]'
3220
3466
  }),
3221
- __metadata("design:paramtypes", [])
3222
- ], TableCellRendererComponent);
3223
- return TableCellRendererComponent;
3467
+ __metadata("design:paramtypes", [TableComponent,
3468
+ core.TemplateRef,
3469
+ core.ViewContainerRef])
3470
+ ], ColumnTemplateDirective);
3471
+ return ColumnTemplateDirective;
3224
3472
  }());
3225
3473
 
3226
3474
  var TableHeaderCellRendererComponent = /** @class */ (function () {
3227
3475
  function TableHeaderCellRendererComponent() {
3228
- this.defaultClassNames = "aup-header-cell-renderer";
3476
+ this.defaultClassNames = 'aup-header-cell-renderer';
3229
3477
  }
3478
+ TableHeaderCellRendererComponent.prototype.ngOnInit = function () {
3479
+ this.column.attachHeaderCell(this);
3480
+ };
3481
+ // @Trace()
3230
3482
  TableHeaderCellRendererComponent.prototype.initialiseHeader = function (instance) {
3231
- if (this.renderer !== instance) {
3232
- this.renderer = instance;
3233
- this.column.initialiseHeader(this.renderer);
3234
- }
3483
+ this.column.onHeaderAttached(this, instance);
3484
+ };
3485
+ TableHeaderCellRendererComponent.prototype.getPortal = function () {
3486
+ return this[HEADER_CELL_RENDERER_PORTAL];
3235
3487
  };
3236
3488
  __decorate([
3237
3489
  core.Input(),
@@ -3244,8 +3496,8 @@
3244
3496
  TableHeaderCellRendererComponent = __decorate([
3245
3497
  core.Component({
3246
3498
  selector: 'aup-table-header-cell-renderer',
3247
- template: "<ng-container [cdkPortalOutlet]=\"column.columnHeaderCellRendererPortal\" (attached)=\"initialiseHeader($event.instance)\"></ng-container>\n",
3248
- styles: [":host{display:flex;flex-direction:column;align-items:stretch}"]
3499
+ template: "<ng-container [cdkPortalOutlet]=\"getPortal()\" (attached)=\"initialiseHeader($event.instance)\"></ng-container>\n",
3500
+ styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%}"]
3249
3501
  }),
3250
3502
  __metadata("design:paramtypes", [])
3251
3503
  ], TableHeaderCellRendererComponent);
@@ -3337,6 +3589,58 @@
3337
3589
  return VerticalFocusContainerComponent;
3338
3590
  }(FocusContainerComponent));
3339
3591
 
3592
+ var MultipleSelectInputComponent = /** @class */ (function (_super) {
3593
+ __extends(MultipleSelectInputComponent, _super);
3594
+ function MultipleSelectInputComponent() {
3595
+ var _this = _super.call(this) || this;
3596
+ _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
3597
+ return _this;
3598
+ }
3599
+ MultipleSelectInputComponent.prototype.ngOnInit = function () {
3600
+ };
3601
+ __decorate([
3602
+ core.Input(), pectin.TrackExternal({ delegateTo: 'inputModel' }),
3603
+ __metadata("design:type", Object)
3604
+ ], MultipleSelectInputComponent.prototype, "listModel", void 0);
3605
+ __decorate([
3606
+ core.Input(), pectin.TrackExternal(),
3607
+ __metadata("design:type", pectin.ListModel)
3608
+ ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
3609
+ __decorate([
3610
+ core.Input(), pectin.StoreInListModel('optionsModel'),
3611
+ __metadata("design:type", Array)
3612
+ ], MultipleSelectInputComponent.prototype, "options", void 0);
3613
+ __decorate([
3614
+ core.Input(),
3615
+ __metadata("design:type", Object)
3616
+ ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
3617
+ __decorate([
3618
+ core.Input(),
3619
+ __metadata("design:type", Boolean)
3620
+ ], MultipleSelectInputComponent.prototype, "allowNil", void 0);
3621
+ __decorate([
3622
+ core.ContentChild('optionTemplate'),
3623
+ __metadata("design:type", core.TemplateRef)
3624
+ ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
3625
+ __decorate([
3626
+ core.ContentChild('nilOptionTemplate'),
3627
+ __metadata("design:type", core.TemplateRef)
3628
+ ], MultipleSelectInputComponent.prototype, "nilOptionTemplateRef", void 0);
3629
+ __decorate([
3630
+ core.Input(),
3631
+ __metadata("design:type", Function)
3632
+ ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
3633
+ MultipleSelectInputComponent = __decorate([
3634
+ core.Component({
3635
+ selector: 'aup-multiple-select-input',
3636
+ 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",
3637
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
3638
+ }),
3639
+ __metadata("design:paramtypes", [])
3640
+ ], MultipleSelectInputComponent);
3641
+ return MultipleSelectInputComponent;
3642
+ }(AbstractListInputComponent));
3643
+
3340
3644
  var ComponentsModule = /** @class */ (function () {
3341
3645
  function ComponentsModule() {
3342
3646
  }
@@ -3344,6 +3648,8 @@
3344
3648
  core.NgModule({
3345
3649
  declarations: [
3346
3650
  AbstractInputComponent,
3651
+ AbstractValueInputComponent,
3652
+ AbstractListInputComponent,
3347
3653
  AbstractInputActivity,
3348
3654
  NumberInputComponent,
3349
3655
  StringInputComponent,
@@ -3369,7 +3675,8 @@
3369
3675
  SelectCellRendererComponent,
3370
3676
  SelectHeaderCellRendererComponent,
3371
3677
  DefaultHeaderCellRendererComponent,
3372
- TableHeaderCellRendererComponent
3678
+ TableHeaderCellRendererComponent,
3679
+ MultipleSelectInputComponent
3373
3680
  ],
3374
3681
  imports: [
3375
3682
  common.CommonModule,
@@ -3405,7 +3712,8 @@
3405
3712
  CardContainerComponent,
3406
3713
  TableComponent,
3407
3714
  EditRowControls,
3408
- ColumnTemplateDirective
3715
+ ColumnTemplateDirective,
3716
+ MultipleSelectInputComponent
3409
3717
  ],
3410
3718
  providers: [
3411
3719
  FocusBindingFactory,
@@ -4527,7 +4835,7 @@
4527
4835
  return PopStateNavigation;
4528
4836
  }(AbstractPopStateNavigation));
4529
4837
 
4530
- exports.ɵcm = /** @class */ (function () {
4838
+ exports.ɵcp = /** @class */ (function () {
4531
4839
  function PlaceHistory() {
4532
4840
  this._archive = new Map();
4533
4841
  this.placeHistoryDepth = 4;
@@ -4664,7 +4972,7 @@
4664
4972
  // }
4665
4973
  //
4666
4974
  // }
4667
- })(exports.ɵcm || (exports.ɵcm = {}));
4975
+ })(exports.ɵcp || (exports.ɵcp = {}));
4668
4976
 
4669
4977
  exports.UrlSnapshot = /** @class */ (function () {
4670
4978
  // TODO: Update this accept a url Parser so it can be immutable and generate new trees on mutation using toString() are parseUrl.
@@ -5187,11 +5495,11 @@
5187
5495
  PlaceRouter.ctorParameters = function () { return [
5188
5496
  { type: router.Router },
5189
5497
  { type: common.Location },
5190
- { type: exports.ɵbw },
5498
+ { type: exports.ɵbz },
5191
5499
  { type: UrlService },
5192
- { type: exports.ɵcm }
5500
+ { type: exports.ɵcp }
5193
5501
  ]; };
5194
- 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.ɵcm)); }, token: PlaceRouter, providedIn: "root" });
5502
+ PlaceRouter.ɵprov = core.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(core.ɵɵinject(router.Router), core.ɵɵinject(common.Location), core.ɵɵinject(exports.ɵbz), core.ɵɵinject(UrlService), core.ɵɵinject(exports.ɵcp)); }, token: PlaceRouter, providedIn: "root" });
5195
5503
  __decorate([
5196
5504
  pectin.Trace(),
5197
5505
  __metadata("design:type", Function),
@@ -5204,9 +5512,9 @@
5204
5512
  }),
5205
5513
  __metadata("design:paramtypes", [router.Router,
5206
5514
  common.Location,
5207
- exports.ɵbw,
5515
+ exports.ɵbz,
5208
5516
  UrlService,
5209
- exports.ɵcm])
5517
+ exports.ɵcp])
5210
5518
  ], PlaceRouter);
5211
5519
  return PlaceRouter;
5212
5520
  }(pectin.GarbageCollector));
@@ -6300,8 +6608,10 @@
6300
6608
  exports.AbstractInputActivity = AbstractInputActivity;
6301
6609
  exports.AbstractInputComponent = AbstractInputComponent;
6302
6610
  exports.AbstractInteractionContext = AbstractInteractionContext;
6611
+ exports.AbstractListInputComponent = AbstractListInputComponent;
6303
6612
  exports.AbstractPlaceNavigationComponent = AbstractPlaceNavigationComponent;
6304
6613
  exports.AbstractPopStateNavigation = AbstractPopStateNavigation;
6614
+ exports.AbstractValueInputComponent = AbstractValueInputComponent;
6305
6615
  exports.Activity = Activity;
6306
6616
  exports.ActivityActionsComponent = ActivityActionsComponent;
6307
6617
  exports.ActivityContainerComponent = ActivityContainerComponent;
@@ -6311,11 +6621,18 @@
6311
6621
  exports.AlertDialogComponent = AlertDialogComponent;
6312
6622
  exports.AngularUiPowerupsModule = AngularUiPowerupsModule;
6313
6623
  exports.BusyOverlayComponent = BusyOverlayComponent;
6624
+ exports.CELL_EDITOR_PORTAL = CELL_EDITOR_PORTAL;
6625
+ exports.CELL_RENDERER_PORTAL = CELL_RENDERER_PORTAL;
6314
6626
  exports.CardContainerComponent = CardContainerComponent;
6627
+ exports.CellEditorPortalRef = CellEditorPortalRef;
6628
+ exports.CellHeaderPortalRef = CellHeaderPortalRef;
6629
+ exports.CellPortalRef = CellPortalRef;
6630
+ exports.CellRendererPortalRef = CellRendererPortalRef;
6315
6631
  exports.CheckboxInputComponent = CheckboxInputComponent;
6316
6632
  exports.ColumnModel = ColumnModel;
6317
6633
  exports.ColumnTemplateDirective = ColumnTemplateDirective;
6318
6634
  exports.CommandDirective = CommandDirective;
6635
+ exports.ComponentCellRendererPortalRef = ComponentCellRendererPortalRef;
6319
6636
  exports.ComponentsModule = ComponentsModule;
6320
6637
  exports.ConfirmThenDialogComponent = ConfirmThenDialogComponent;
6321
6638
  exports.ConfirmationDialogComponent = ConfirmationDialogComponent;
@@ -6341,26 +6658,31 @@
6341
6658
  exports.FocusBindingFactory = FocusBindingFactory;
6342
6659
  exports.FocusContainerComponent = FocusContainerComponent;
6343
6660
  exports.FocusableComponent = FocusableComponent;
6661
+ exports.HEADER_CELL_RENDERER_PORTAL = HEADER_CELL_RENDERER_PORTAL;
6344
6662
  exports.InPlaceInteractionContextComponent = InPlaceInteractionContextComponent;
6345
6663
  exports.InteractionContextTriggerFor = InteractionContextTriggerFor;
6346
6664
  exports.InteractionModule = InteractionModule;
6347
- exports.InteractionService = exports.ɵbw;
6665
+ exports.InteractionService = exports.ɵbz;
6348
6666
  exports.InteractionServiceRoutingAdapter = InteractionServiceRoutingAdapter;
6349
6667
  exports.LEFT_RIGHT_PLACE_ANIMATION = LEFT_RIGHT_PLACE_ANIMATION;
6350
6668
  exports.ListPlaceNavComponent = ListPlaceNavComponent;
6669
+ exports.ListPropertyColumnModel = ListPropertyColumnModel;
6351
6670
  exports.ModalInteractionContextFactory = ModalInteractionContextFactory;
6671
+ exports.MultipleSelectInputComponent = MultipleSelectInputComponent;
6352
6672
  exports.Navigating = Navigating;
6353
6673
  exports.NavigatingDuringInteraction = NavigatingDuringInteraction;
6354
6674
  exports.NavigationSession = NavigationSession;
6355
6675
  exports.NoopAuthGuard = NoopAuthGuard;
6356
6676
  exports.NoopComponent = NoopComponent;
6357
6677
  exports.NumberInputComponent = NumberInputComponent;
6678
+ exports.PORTAL_EDITOR_COMPONENT = PORTAL_EDITOR_COMPONENT;
6679
+ exports.PORTAL_RENDERER_COMPONENT = PORTAL_RENDERER_COMPONENT;
6358
6680
  exports.PasswordInputComponent = PasswordInputComponent;
6359
6681
  exports.Place = Place;
6360
6682
  exports.PlaceComponentDeactivationHandler = PlaceComponentDeactivationHandler;
6361
6683
  exports.PlaceDefinition = PlaceDefinition;
6362
6684
  exports.PlaceGuard = PlaceGuard;
6363
- exports.PlaceHistory = exports.ɵcm;
6685
+ exports.PlaceHistory = exports.ɵcp;
6364
6686
  exports.PlaceModule = PlaceModule;
6365
6687
  exports.PlaceOutletComponent = PlaceOutletComponent;
6366
6688
  exports.PlaceRouter = PlaceRouter;
@@ -6391,6 +6713,7 @@
6391
6713
  exports.TableComponent = TableComponent;
6392
6714
  exports.TableHeaderCellRendererComponent = TableHeaderCellRendererComponent;
6393
6715
  exports.TableModel = TableModel;
6716
+ exports.TemplateCellRendererPortalRef = TemplateCellRendererPortalRef;
6394
6717
  exports.TextInputComponent = TextInputComponent;
6395
6718
  exports.UrlService = UrlService;
6396
6719
  exports.VerticalFocusContainerComponent = VerticalFocusContainerComponent;
@@ -6404,70 +6727,74 @@
6404
6727
  exports.leftRightPlaceAnimation = leftRightPlaceAnimation;
6405
6728
  exports.slideDownOnEnterAnimation = slideDownOnEnterAnimation;
6406
6729
  exports.slideRightOnEnterAnimation = slideRightOnEnterAnimation;
6730
+ exports.ɵ0 = ɵ0;
6407
6731
  exports.ɵa = DirectivesModule;
6408
6732
  exports.ɵb = CommandDirective;
6409
- exports.ɵba = CardContainerComponent;
6410
- exports.ɵbb = TableComponent;
6411
- exports.ɵbc = EditRowControls;
6412
- exports.ɵbd = ColumnTemplateDirective;
6413
- exports.ɵbe = DefaultCellRendererComponent;
6414
- exports.ɵbf = TableCellRendererComponent;
6415
- exports.ɵbg = SelectCellRendererComponent;
6416
- exports.ɵbh = SelectHeaderCellRendererComponent;
6417
- exports.ɵbi = DefaultHeaderCellRendererComponent;
6418
- exports.ɵbj = TableHeaderCellRendererComponent;
6419
- exports.ɵbk = InteractionModule;
6420
- exports.ɵbl = ActivityContainerComponent;
6421
- exports.ɵbm = AbstractInteractionContext;
6422
- exports.ɵbn = ActivityOutletComponent;
6423
- exports.ɵbo = ConfirmationDialogComponent;
6424
- exports.ɵbp = ACTIVITY_DATA;
6425
- exports.ɵbq = Activity;
6426
- exports.ɵbs = ConfirmThenDialogComponent;
6427
- exports.ɵbt = AlertDialogComponent;
6428
- exports.ɵbv = InPlaceInteractionContextComponent;
6429
- exports.ɵbx = ModalInteractionContextFactory;
6430
- exports.ɵby = AddItemInteractionContextComponent;
6431
- exports.ɵbz = ActivityActionsComponent;
6733
+ exports.ɵba = VerticalFocusContainerComponent;
6734
+ exports.ɵbb = FocusableComponent;
6735
+ exports.ɵbc = CardContainerComponent;
6736
+ exports.ɵbd = TableComponent;
6737
+ exports.ɵbe = EditRowControls;
6738
+ exports.ɵbf = ColumnTemplateDirective;
6739
+ exports.ɵbg = DefaultCellRendererComponent;
6740
+ exports.ɵbh = TableCellRendererComponent;
6741
+ exports.ɵbi = SelectCellRendererComponent;
6742
+ exports.ɵbj = SelectHeaderCellRendererComponent;
6743
+ exports.ɵbk = DefaultHeaderCellRendererComponent;
6744
+ exports.ɵbl = TableHeaderCellRendererComponent;
6745
+ exports.ɵbm = MultipleSelectInputComponent;
6746
+ exports.ɵbn = InteractionModule;
6747
+ exports.ɵbo = ActivityContainerComponent;
6748
+ exports.ɵbp = AbstractInteractionContext;
6749
+ exports.ɵbq = ActivityOutletComponent;
6750
+ exports.ɵbr = ConfirmationDialogComponent;
6751
+ exports.ɵbs = ACTIVITY_DATA;
6752
+ exports.ɵbt = Activity;
6753
+ exports.ɵbv = ConfirmThenDialogComponent;
6754
+ exports.ɵbw = AlertDialogComponent;
6755
+ exports.ɵby = InPlaceInteractionContextComponent;
6432
6756
  exports.ɵc = FocusBindingDirective;
6433
- exports.ɵca = PopupInteractionContextComponent;
6434
- exports.ɵcb = InteractionContextTriggerFor;
6435
- exports.ɵcc = PlaceModule;
6436
- exports.ɵcd = EmptyStateComponent;
6437
- exports.ɵce = BusyOverlayComponent;
6438
- exports.ɵcf = PlaceOutletComponent;
6439
- exports.ɵcg = leftRightPlaceAnimation;
6440
- exports.ɵch = LEFT_RIGHT_PLACE_ANIMATION;
6441
- exports.ɵci = AUP_PLACE_CONFIG;
6442
- exports.ɵck = PlaceRouter;
6443
- exports.ɵcl = UrlService;
6444
- exports.ɵcn = TabbedPlaceNavigationComponent;
6445
- exports.ɵco = AbstractPlaceNavigationComponent;
6446
- exports.ɵcp = ListPlaceNavComponent;
6447
- exports.ɵcq = SidePlaceNavigationComponent;
6757
+ exports.ɵca = ModalInteractionContextFactory;
6758
+ exports.ɵcb = AddItemInteractionContextComponent;
6759
+ exports.ɵcc = ActivityActionsComponent;
6760
+ exports.ɵcd = PopupInteractionContextComponent;
6761
+ exports.ɵce = InteractionContextTriggerFor;
6762
+ exports.ɵcf = PlaceModule;
6763
+ exports.ɵcg = EmptyStateComponent;
6764
+ exports.ɵch = BusyOverlayComponent;
6765
+ exports.ɵci = PlaceOutletComponent;
6766
+ exports.ɵcj = leftRightPlaceAnimation;
6767
+ exports.ɵck = LEFT_RIGHT_PLACE_ANIMATION;
6768
+ exports.ɵcl = AUP_PLACE_CONFIG;
6769
+ exports.ɵcn = PlaceRouter;
6770
+ exports.ɵco = UrlService;
6771
+ exports.ɵcq = TabbedPlaceNavigationComponent;
6772
+ exports.ɵcr = AbstractPlaceNavigationComponent;
6773
+ exports.ɵcs = ListPlaceNavComponent;
6774
+ exports.ɵct = SidePlaceNavigationComponent;
6448
6775
  exports.ɵd = DisposableComponent;
6449
6776
  exports.ɵe = FocusBindingFactory;
6450
6777
  exports.ɵf = ComponentsModule;
6451
6778
  exports.ɵg = AbstractInputComponent;
6452
- exports.ɵh = AbstractInputActivity;
6453
- exports.ɵi = Activity;
6454
- exports.ɵj = ACTIVITY_DATA;
6455
- exports.ɵk = NumberInputComponent;
6456
- exports.ɵl = StringInputComponent;
6457
- exports.ɵm = StringInputActivity;
6458
- exports.ɵn = TextInputComponent;
6459
- exports.ɵo = PasswordInputComponent;
6460
- exports.ɵp = SelectInputComponent;
6461
- exports.ɵq = CheckboxInputComponent;
6462
- exports.ɵr = ScrollContainerComponent;
6463
- exports.ɵs = NoopComponent;
6464
- exports.ɵt = SwitchCaseOption;
6465
- exports.ɵu = SwitchCaseWhenDirective;
6466
- exports.ɵv = SwitchCaseDefaultDirective;
6467
- exports.ɵw = SwitchCaseComponent;
6468
- exports.ɵx = FocusContainerComponent;
6469
- exports.ɵy = VerticalFocusContainerComponent;
6470
- exports.ɵz = FocusableComponent;
6779
+ exports.ɵh = AbstractValueInputComponent;
6780
+ exports.ɵi = AbstractListInputComponent;
6781
+ exports.ɵj = AbstractInputActivity;
6782
+ exports.ɵk = Activity;
6783
+ exports.ɵl = ACTIVITY_DATA;
6784
+ exports.ɵm = NumberInputComponent;
6785
+ exports.ɵn = StringInputComponent;
6786
+ exports.ɵo = StringInputActivity;
6787
+ exports.ɵp = TextInputComponent;
6788
+ exports.ɵq = PasswordInputComponent;
6789
+ exports.ɵr = SelectInputComponent;
6790
+ exports.ɵs = CheckboxInputComponent;
6791
+ exports.ɵt = ScrollContainerComponent;
6792
+ exports.ɵu = NoopComponent;
6793
+ exports.ɵv = SwitchCaseOption;
6794
+ exports.ɵw = SwitchCaseWhenDirective;
6795
+ exports.ɵx = SwitchCaseDefaultDirective;
6796
+ exports.ɵy = SwitchCaseComponent;
6797
+ exports.ɵz = FocusContainerComponent;
6471
6798
 
6472
6799
  Object.defineProperty(exports, '__esModule', { value: true });
6473
6800