@coolon/angular-ui-powerups 16.1.0-aplpha.11 → 16.1.0-aplpha.110

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 (174) hide show
  1. package/assets/activities/input-activities.scss +14 -6
  2. package/assets/form.scss +74 -27
  3. package/assets/icons.scss +1 -0
  4. package/assets/table.scss +33 -23
  5. package/assets/tabs.scss +2 -6
  6. package/esm2022/lib/animations/slide-animations.mjs +6 -1
  7. package/esm2022/lib/components/cards/card-container/card-container.component.mjs +4 -4
  8. package/esm2022/lib/components/commands/command/command.component.mjs +24 -10
  9. package/esm2022/lib/components/commands/command-face/command-face.component.mjs +11 -3
  10. package/esm2022/lib/components/commands/command-face.mjs +11 -11
  11. package/esm2022/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +11 -11
  12. package/esm2022/lib/components/commands/group/tool-bar/tool-bar.component.mjs +6 -4
  13. package/esm2022/lib/components/components.module.mjs +27 -8
  14. package/esm2022/lib/components/disposable-component.mjs +19 -37
  15. package/esm2022/lib/components/exports.mjs +8 -2
  16. package/esm2022/lib/components/forms/abstract-input.component.mjs +55 -12
  17. package/esm2022/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +2 -2
  18. package/esm2022/lib/components/forms/checkbox-input/checkbox-input.component.mjs +8 -6
  19. package/esm2022/lib/components/forms/form-field.mjs +2 -0
  20. package/esm2022/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +2 -2
  21. package/esm2022/lib/components/forms/number-input/number-input.component.mjs +49 -10
  22. package/esm2022/lib/components/forms/password-input/password-input.component.mjs +40 -3
  23. package/esm2022/lib/components/forms/search-input/search-input.component.mjs +33 -0
  24. package/esm2022/lib/components/forms/select-input/select-input.component.mjs +11 -10
  25. package/esm2022/lib/components/forms/string-input/string-input.component.mjs +21 -9
  26. package/esm2022/lib/components/icon/icon.component.mjs +7 -4
  27. package/esm2022/lib/components/loadable-component.mjs +49 -0
  28. package/esm2022/lib/components/resize-aware.component.mjs +61 -24
  29. package/esm2022/lib/components/switch-case/switch-case.component.mjs +5 -7
  30. package/esm2022/lib/components/tables/abstract-table-model.mjs +49 -25
  31. package/esm2022/lib/components/tables/abstract-table.component.mjs +19 -5
  32. package/esm2022/lib/components/tables/column/column-manager.mjs +81 -0
  33. package/esm2022/lib/components/tables/column/column-model.mjs +13 -3
  34. package/esm2022/lib/components/tables/column/column-order-manager.mjs +19 -0
  35. package/esm2022/lib/components/tables/column/custom-template-column-model.mjs +3 -3
  36. package/esm2022/lib/components/tables/column/custom-value-column-model.mjs +3 -3
  37. package/esm2022/lib/components/tables/column/editor-controls-column-model.mjs +3 -3
  38. package/esm2022/lib/components/tables/column/list-propery-column-model.mjs +3 -3
  39. package/esm2022/lib/components/tables/column/property-column-model.mjs +3 -3
  40. package/esm2022/lib/components/tables/column/selection-column-model.mjs +3 -3
  41. package/esm2022/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +1 -1
  42. package/esm2022/lib/components/tables/editor/edit-session.mjs +4 -2
  43. package/esm2022/lib/components/tables/filter/table-filter-model.mjs +4 -2
  44. package/esm2022/lib/components/tables/filter/text-search-predicate.mjs +16 -2
  45. package/esm2022/lib/components/tables/footer/footer-row-model.mjs +38 -0
  46. package/esm2022/lib/components/tables/renderer/cell-portal-ref.mjs +19 -1
  47. package/esm2022/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +3 -3
  48. package/esm2022/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +3 -2
  49. package/esm2022/lib/components/tables/renderer/table-body/table-body.component.mjs +150 -40
  50. package/esm2022/lib/components/tables/renderer/table-cell/table-cell.component.mjs +1 -1
  51. package/esm2022/lib/components/tables/renderer/table-footer-row/table-footer-row.component.mjs +30 -0
  52. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu.component.mjs +7 -2
  53. package/esm2022/lib/components/tables/table/table-model.mjs +1 -1
  54. package/esm2022/lib/components/tables/table/table.component.mjs +39 -62
  55. package/esm2022/lib/components/tables/tree-table/decorated-tree-node.mjs +5 -4
  56. package/esm2022/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +1 -1
  57. package/esm2022/lib/components/tables/tree-table/tree-label-column-model.mjs +3 -3
  58. package/esm2022/lib/components/tables/tree-table/tree-table-component.mjs +12 -6
  59. package/esm2022/lib/components/tables/tree-table/tree-table-model.mjs +3 -3
  60. package/esm2022/lib/components/text/markdown/markdown.component.mjs +2 -2
  61. package/esm2022/lib/directives/directives.module.mjs +1 -1
  62. package/esm2022/lib/directives/exports.mjs +2 -1
  63. package/esm2022/lib/directives/highlight.pipe.mjs +2 -2
  64. package/esm2022/lib/directives/resize-observer.directive.mjs +40 -0
  65. package/esm2022/lib/interaction/activity.mjs +3 -4
  66. package/esm2022/lib/interaction/alert.mjs +2 -2
  67. package/esm2022/lib/interaction/components/abstract-confirm-dialog.component.mjs +8 -4
  68. package/esm2022/lib/interaction/components/activity-actions/activity-actions.component.mjs +20 -11
  69. package/esm2022/lib/interaction/components/activity-container/activity-container.component.mjs +28 -11
  70. package/esm2022/lib/interaction/components/activity-title/activity-title.component.mjs +4 -4
  71. package/esm2022/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.mjs +1 -1
  72. package/esm2022/lib/interaction/components/add-card-activity/add-card-activity.component.mjs +1 -1
  73. package/esm2022/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.mjs +1 -1
  74. package/esm2022/lib/interaction/components/alert-dialog/alert-dialog.component.mjs +1 -1
  75. package/esm2022/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.mjs +1 -1
  76. package/esm2022/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.mjs +1 -1
  77. package/esm2022/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.mjs +1 -1
  78. package/esm2022/lib/interaction/components/editors/edit-context.mjs +1 -1
  79. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +3 -3
  80. package/esm2022/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +15 -4
  81. package/esm2022/lib/interaction/components/input-activities/input-activity.mjs +2 -2
  82. package/esm2022/lib/interaction/components/input-activities/select-input-activity.mjs +4 -2
  83. package/esm2022/lib/interaction/components/input-activities/string-input-activity.mjs +8 -4
  84. package/esm2022/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.mjs +129 -0
  85. package/esm2022/lib/interaction/directives/interaction-context-trigger-for.directive.mjs +2 -2
  86. package/esm2022/lib/interaction/exports.mjs +2 -1
  87. package/esm2022/lib/interaction/interaction.module.mjs +7 -9
  88. package/esm2022/lib/place/components/list-place-nav/list-place-nav.component.mjs +3 -4
  89. package/esm2022/lib/place/components/place-outlet/place-outlet.component.mjs +7 -9
  90. package/esm2022/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +2 -2
  91. package/esm2022/lib/place/guards/consolidated-param-map.mjs +4 -4
  92. package/esm2022/lib/place/guards/place.guard.mjs +2 -1
  93. package/esm2022/lib/place/navigation/place-component-deactivation-handler.mjs +2 -2
  94. package/esm2022/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs +3 -6
  95. package/esm2022/lib/place/place-component.mjs +7 -7
  96. package/esm2022/lib/place/place-definition.mjs +3 -3
  97. package/esm2022/lib/place/place-history.mjs +2 -2
  98. package/esm2022/lib/place/place-router.mjs +20 -18
  99. package/esm2022/lib/place/place.decorator.mjs +2 -2
  100. package/esm2022/lib/place/place.module.mjs +1 -5
  101. package/esm2022/lib/place/route/formatter.mjs +2 -2
  102. package/esm2022/lib/place/route/parameter-decorators.mjs +54 -50
  103. package/esm2022/lib/place/route/parameter-definition.mjs +2 -2
  104. package/esm2022/lib/place/url-snapshot.mjs +3 -3
  105. package/esm2022/lib/place/visit-segment.mjs +2 -2
  106. package/esm2022/lib/place/visit.mjs +2 -2
  107. package/fesm2022/coolon-angular-ui-powerups.mjs +1291 -536
  108. package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
  109. package/lib/animations/slide-animations.d.ts +1 -0
  110. package/lib/components/cards/card-container/card-container.component.d.ts +1 -1
  111. package/lib/components/commands/command/command.component.d.ts +2 -1
  112. package/lib/components/commands/command-face/command-face.component.d.ts +2 -0
  113. package/lib/components/commands/command-face.d.ts +5 -7
  114. package/lib/components/commands/group/popup-menu/abstract-popup-menu.component.d.ts +2 -2
  115. package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +1 -1
  116. package/lib/components/components.module.d.ts +56 -53
  117. package/lib/components/disposable-component.d.ts +11 -8
  118. package/lib/components/exports.d.ts +7 -1
  119. package/lib/components/forms/abstract-input.component.d.ts +13 -5
  120. package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +2 -0
  121. package/lib/components/forms/form-field.d.ts +5 -0
  122. package/lib/components/forms/number-input/number-input.component.d.ts +8 -4
  123. package/lib/components/forms/password-input/password-input.component.d.ts +7 -1
  124. package/lib/components/forms/search-input/search-input.component.d.ts +10 -0
  125. package/lib/components/forms/select-input/select-input.component.d.ts +4 -3
  126. package/lib/components/forms/string-input/string-input.component.d.ts +3 -1
  127. package/lib/components/loadable-component.d.ts +17 -0
  128. package/lib/components/resize-aware.component.d.ts +24 -5
  129. package/lib/components/switch-case/switch-case.component.d.ts +2 -3
  130. package/lib/components/tables/abstract-table-model.d.ts +14 -6
  131. package/lib/components/tables/abstract-table.component.d.ts +4 -3
  132. package/lib/components/tables/column/column-manager.d.ts +19 -0
  133. package/lib/components/tables/column/column-model.d.ts +7 -3
  134. package/lib/components/tables/column/column-order-manager.d.ts +20 -0
  135. package/lib/components/tables/column/custom-template-column-model.d.ts +3 -2
  136. package/lib/components/tables/column/custom-value-column-model.d.ts +3 -2
  137. package/lib/components/tables/column/editor-controls-column-model.d.ts +3 -2
  138. package/lib/components/tables/column/list-propery-column-model.d.ts +3 -2
  139. package/lib/components/tables/column/property-column-model.d.ts +3 -2
  140. package/lib/components/tables/column/selection-column-model.d.ts +3 -2
  141. package/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.d.ts +1 -1
  142. package/lib/components/tables/editor/edit-session.d.ts +1 -1
  143. package/lib/components/tables/filter/text-search-predicate.d.ts +9 -0
  144. package/lib/components/tables/footer/footer-row-model.d.ts +22 -0
  145. package/lib/components/tables/renderer/cell-portal-ref.d.ts +14 -6
  146. package/lib/components/tables/renderer/table-body/table-body.component.d.ts +40 -16
  147. package/lib/components/tables/renderer/table-cell/table-cell.component.d.ts +1 -1
  148. package/lib/components/tables/renderer/table-footer-row/table-footer-row.component.d.ts +11 -0
  149. package/lib/components/tables/renderer/table-more-menu/table-more-menu.component.d.ts +2 -1
  150. package/lib/components/tables/table/table-model.d.ts +1 -1
  151. package/lib/components/tables/table/table.component.d.ts +14 -10
  152. package/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +1 -1
  153. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +3 -2
  154. package/lib/components/tables/tree-table/tree-table-component.d.ts +3 -0
  155. package/lib/components/tables/tree-table/tree-table-model.d.ts +1 -1
  156. package/lib/directives/exports.d.ts +1 -0
  157. package/lib/directives/resize-observer.directive.d.ts +16 -0
  158. package/lib/interaction/activity.d.ts +2 -2
  159. package/lib/interaction/components/abstract-confirm-dialog.component.d.ts +1 -0
  160. package/lib/interaction/components/activity-actions/activity-actions.component.d.ts +10 -5
  161. package/lib/interaction/components/activity-container/activity-container.component.d.ts +7 -3
  162. package/lib/interaction/components/activity-title/activity-title.component.d.ts +1 -1
  163. package/lib/interaction/components/editors/edit-context.d.ts +1 -1
  164. package/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.d.ts +5 -3
  165. package/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.d.ts +53 -0
  166. package/lib/interaction/exports.d.ts +1 -0
  167. package/lib/interaction/interaction.module.d.ts +28 -28
  168. package/lib/place/components/place-outlet/place-outlet.component.d.ts +3 -4
  169. package/lib/place/place-component.d.ts +4 -4
  170. package/lib/place/place-router.d.ts +4 -0
  171. package/lib/place/place.module.d.ts +4 -5
  172. package/package.json +6 -4
  173. package/esm2022/lib/components/tables/column/column-list-model.mjs +0 -44
  174. package/lib/components/tables/column/column-list-model.d.ts +0 -13
@@ -0,0 +1,38 @@
1
+ import { ComponentPortal } from "@angular/cdk/portal";
2
+ import { ProxyRegistry } from "@coolon/pectin";
3
+ class RowClass {
4
+ className;
5
+ matches;
6
+ constructor(className, matches) {
7
+ this.className = className;
8
+ this.matches = matches;
9
+ }
10
+ }
11
+ export class FooterRowModel {
12
+ _rowClasses = [];
13
+ noPadding() {
14
+ this.addClass("no-padding");
15
+ }
16
+ addClass(className, condition) {
17
+ this._rowClasses.push(new RowClass(className, condition ?? (() => true)));
18
+ }
19
+ }
20
+ (function (FooterRowModel) {
21
+ class Impl extends FooterRowModel {
22
+ component;
23
+ onInit;
24
+ portal;
25
+ constructor(component, onInit) {
26
+ super();
27
+ this.component = component;
28
+ this.onInit = onInit;
29
+ this.portal = new ComponentPortal(component);
30
+ }
31
+ getActiveRowClasses() {
32
+ return this._rowClasses.filter(c => c.matches()).map(c => c.className).join(" ");
33
+ }
34
+ }
35
+ FooterRowModel.Impl = Impl;
36
+ })(FooterRowModel || (FooterRowModel = {}));
37
+ ProxyRegistry.registerOneTimeBinding(FooterRowModel);
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9vdGVyLXJvdy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL2Zvb3Rlci9mb290ZXItcm93LW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0MsTUFBTSxRQUFRO0lBQ1M7SUFDQTtJQURyQixZQUFxQixTQUFpQixFQUNqQixPQUFzQjtRQUR0QixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWU7SUFDM0MsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFnQixjQUFjO0lBRWYsV0FBVyxHQUFlLEVBQUUsQ0FBQztJQUVoRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQWlCLEVBQUUsU0FBeUI7UUFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0NBQ0Y7QUFFRCxXQUFpQixjQUFjO0lBQzdCLE1BQWEsSUFBUSxTQUFRLGNBQWlCO1FBR2I7UUFBc0M7UUFGNUQsTUFBTSxDQUFxQjtRQUVwQyxZQUErQixTQUEyQixFQUFXLE1BQThCO1lBQ2pHLEtBQUssRUFBRSxDQUFDO1lBRHFCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1lBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBd0I7WUFFakcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM5QyxDQUFDO1FBRUQsbUJBQW1CO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25GLENBQUM7S0FFRjtJQVpZLG1CQUFJLE9BWWhCLENBQUE7QUFDSCxDQUFDLEVBZGdCLGNBQWMsS0FBZCxjQUFjLFFBYzlCO0FBRUQsYUFBYSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7Q29tcG9uZW50UG9ydGFsfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xuaW1wb3J0IHtQcm94eVJlZ2lzdHJ5fSBmcm9tIFwiQGNvb2xvbi9wZWN0aW5cIjtcbmltcG9ydCB7QWJzdHJhY3RUYWJsZU1vZGVsfSBmcm9tIFwiLi4vYWJzdHJhY3QtdGFibGUtbW9kZWxcIjtcblxuY2xhc3MgUm93Q2xhc3Mge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjbGFzc05hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgbWF0Y2hlczogKCkgPT4gYm9vbGVhbikge1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGb290ZXJSb3dNb2RlbDxDPiB7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9yb3dDbGFzc2VzOiBSb3dDbGFzc1tdID0gW107XG5cbiAgbm9QYWRkaW5nKCkge1xuICAgIHRoaXMuYWRkQ2xhc3MoXCJuby1wYWRkaW5nXCIpO1xuICB9XG5cbiAgYWRkQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIGNvbmRpdGlvbj86ICgpID0+IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yb3dDbGFzc2VzLnB1c2gobmV3IFJvd0NsYXNzKGNsYXNzTmFtZSwgY29uZGl0aW9uID8/ICgoKSA9PiB0cnVlKSkpO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRm9vdGVyUm93TW9kZWwge1xuICBleHBvcnQgY2xhc3MgSW1wbDxDPiBleHRlbmRzIEZvb3RlclJvd01vZGVsPEM+IHtcbiAgICByZWFkb25seSBwb3J0YWw6IENvbXBvbmVudFBvcnRhbDxDPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIHJlYWRvbmx5IG9uSW5pdD86IChjb21wb25lbnQ6QykgPT4gdm9pZCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMucG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChjb21wb25lbnQpXG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlUm93Q2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzc2VzLmZpbHRlcihjID0+IGMubWF0Y2hlcygpKS5tYXAoYyA9PiBjLmNsYXNzTmFtZSkuam9pbihcIiBcIik7XG4gICAgfVxuXG4gIH1cbn1cblxuUHJveHlSZWdpc3RyeS5yZWdpc3Rlck9uZVRpbWVCaW5kaW5nKEZvb3RlclJvd01vZGVsKTtcbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
2
2
  import { assert } from '@coolon/typescript-utilities';
3
3
  export const HEADER_CELL_RENDERER_PORTAL = Symbol('aup-cell-header-renderer-component-ref');
4
+ export const FOOTER_CELL_RENDERER_PORTAL = Symbol('aup-cell-footer-renderer-component-ref');
4
5
  export const CELL_RENDERER_PORTAL = Symbol('aup-cell-renderer-component-ref');
5
6
  export const CELL_EDITOR_PORTAL = Symbol('aup-cell-editor-component-ref');
6
7
  export const PORTAL_RENDERER_COMPONENT = Symbol('aup-cell-renderer-portal-component');
@@ -98,4 +99,21 @@ export class TemplateCellRendererPortalRef extends CellRendererPortalRef {
98
99
  return new TemplatePortal(this.templateRef, this.viewContainer, { ...(data), $implicit: data.row });
99
100
  }
100
101
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1wb3J0YWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvY2VsbC1wb3J0YWwtcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFcEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBTXBELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3RGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBR2xGLE1BQU0sT0FBZ0IsYUFBYTtDQUtsQztBQUVELE1BQU0sT0FBTyxtQkFBNEIsU0FBUSxhQUErQztJQUN6RTtJQUEwQztJQUEvRCxZQUFxQixhQUErQixFQUFXLGdCQUF1RTtRQUNwSSxLQUFLLEVBQUUsQ0FBQztRQURXLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUFXLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBdUQ7SUFFdEksQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUE4QixFQUFFLFdBQTZCO1FBQzFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsSUFBSSxlQUFl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UUFDeEUsY0FBYztJQUNoQixDQUFDO0lBRUQsV0FBVztJQUNYLFNBQVMsQ0FBQyxJQUE2QjtRQUNyQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFrQjtRQUNyQyxPQUFPLElBQUksY0FBYyxDQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDekcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge0NvbXBvbmVudFBvcnRhbCwgVGVtcGxhdGVQb3J0YWx9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSAnQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllcyc7XG5pbXBvcnQge0NvbHVtbk1vZGVsLCBSb3dEYXRhfSBmcm9tICcuLi9jb2x1bW4vY29sdW1uLW1vZGVsJztcbmltcG9ydCB7RWRpdFNlc3Npb259IGZyb20gJy4uL2VkaXRvci9lZGl0LXNlc3Npb24nO1xuaW1wb3J0IHtUYWJsZUNlbGxDb21wb25lbnR9IGZyb20gJy4vdGFibGUtY2VsbC90YWJsZS1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlSGVhZGVyQ2VsbENvbXBvbmVudH0gZnJvbSAnLi90YWJsZS1oZWFkZXItY2VsbC90YWJsZS1oZWFkZXItY2VsbC5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgSEVBREVSX0NFTExfUkVOREVSRVJfUE9SVEFMID0gU3ltYm9sKCdhdXAtY2VsbC1oZWFkZXItcmVuZGVyZXItY29tcG9uZW50LXJlZicpO1xuZXhwb3J0IGNvbnN0IENFTExfUkVOREVSRVJfUE9SVEFMID0gU3ltYm9sKCdhdXAtY2VsbC1yZW5kZXJlci1jb21wb25lbnQtcmVmJyk7XG5leHBvcnQgY29uc3QgQ0VMTF9FRElUT1JfUE9SVEFMID0gU3ltYm9sKCdhdXAtY2VsbC1lZGl0b3ItY29tcG9uZW50LXJlZicpO1xuZXhwb3J0IGNvbnN0IFBPUlRBTF9SRU5ERVJFUl9DT01QT05FTlQgPSBTeW1ib2woJ2F1cC1jZWxsLXJlbmRlcmVyLXBvcnRhbC1jb21wb25lbnQnKTtcbmV4cG9ydCBjb25zdCBQT1JUQUxfRURJVE9SX0NPTVBPTkVOVCA9IFN5bWJvbCgnYXVwLWNlbGwtZWRpdG9yLXBvcnRhbC1jb21wb25lbnQnKTtcblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2VsbFBvcnRhbFJlZjxSb3csIEhvc3QsIFBvcnRhbD4ge1xuXG4gIGFic3RyYWN0IGluaXRpYWxpc2VIb3N0KGhvc3Q6IEhvc3QsIGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+KTogdm9pZFxuXG4gIGFic3RyYWN0IG9uUG9ydGFsQXR0YWNoZWQoaG9zdDogSG9zdCwgcG9ydGFsQ29tcG9uZW50OiBQb3J0YWwpOiB2b2lkXG59XG5cbmV4cG9ydCBjbGFzcyBDZWxsSGVhZGVyUG9ydGFsUmVmPFJvdywgQz4gZXh0ZW5kcyBDZWxsUG9ydGFsUmVmPFJvdywgVGFibGVIZWFkZXJDZWxsQ29tcG9uZW50LCBDPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbXBvbmVudFR5cGU6IENvbXBvbmVudFR5cGU8Qz4sIHJlYWRvbmx5IGluaXRpYWxpc2VIZWFkZXI6IChjb21wb25lbnQ6IEMsIGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+KSA9PiB2b2lkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGluaXRpYWxpc2VIb3N0KGhvc3Q6IFRhYmxlSGVhZGVyQ2VsbENvbXBvbmVudCwgY29sdW1uTW9kZWw6IENvbHVtbk1vZGVsPFJvdz4pIHtcbiAgICBhc3NlcnQuaXNUcnV0aHkoaG9zdCk7XG4gICAgaG9zdFtIRUFERVJfQ0VMTF9SRU5ERVJFUl9QT1JUQUxdID0gbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLmNvbXBvbmVudFR5cGUpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Qb3J0YWxBdHRhY2hlZChob3N0OiBUYWJsZUhlYWRlckNlbGxDb21wb25lbnQsIHBvcnRhbENvbXBvbmVudDogQykge1xuICAgIHRoaXMuaW5pdGlhbGlzZUhlYWRlcihwb3J0YWxDb21wb25lbnQsIGhvc3QuY29sdW1uKTtcbiAgfVxuXG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDZWxsUmVuZGVyZXJQb3J0YWxSZWY8Um93LCBQb3J0YWw+IGV4dGVuZHMgQ2VsbFBvcnRhbFJlZjxSb3csIFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCBQb3J0YWw+IHtcbiAgYWJzdHJhY3QgcHVzaFN0YXRlKGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+KTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudENlbGxSZW5kZXJlclBvcnRhbFJlZjxSb3csIFBvcnRhbD4gZXh0ZW5kcyBDZWxsUmVuZGVyZXJQb3J0YWxSZWY8Um93LCBQb3J0YWw+IHtcblxuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbXBvbmVudFR5cGU6IENvbXBvbmVudFR5cGU8UG9ydGFsPiwgcmVhZG9ubHkgdXBkYXRlQ29tcG9uZW50OiAoY29tcG9uZW50OiBQb3J0YWwsIHJvd0RhdGE6IFJvd0RhdGE8Um93PiwgZmlyc3RUaW1lOiBib29sZWFuKSA9PiB2b2lkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGluaXRpYWxpc2VIb3N0KGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCBjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw8Um93Pikge1xuICAgIGhvc3RbQ0VMTF9SRU5ERVJFUl9QT1JUQUxdID0gbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLmNvbXBvbmVudFR5cGUpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Qb3J0YWxBdHRhY2hlZChob3N0OiBUYWJsZUNlbGxDb21wb25lbnQ8Um93PiwgcG9ydGFsQ29tcG9uZW50OiBQb3J0YWwpIHtcbiAgICBob3N0W1BPUlRBTF9SRU5ERVJFUl9DT01QT05FTlRdID0gcG9ydGFsQ29tcG9uZW50O1xuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KHBvcnRhbENvbXBvbmVudCwgaG9zdC5nZXRSb3dEYXRhKCksIHRydWUpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgcHVzaFN0YXRlKGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+KTogdm9pZCB7XG4gICAgaWYgKGhvc3RbUE9SVEFMX1JFTkRFUkVSX0NPTVBPTkVOVF0pIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KGhvc3RbUE9SVEFMX1JFTkRFUkVSX0NPTVBPTkVOVF0sIGhvc3QuZ2V0Um93RGF0YSgpLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIENlbGxFZGl0b3JQb3J0YWxSZWY8Um93LCBQb3J0YWw+IGV4dGVuZHMgQ2VsbFBvcnRhbFJlZjxSb3csIFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCBQb3J0YWw+IHtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb21wb25lbnRUeXBlOiBDb21wb25lbnRUeXBlPFBvcnRhbD4sIHJlYWRvbmx5IGluaXRpYWxpc2VFZGl0b3JTZXNzaW9uOiAoY29tcG9uZW50OiBQb3J0YWwsIGVkaXRTZXNzaW9uOiBFZGl0U2Vzc2lvbjxSb3c+KSA9PiB2b2lkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGluaXRpYWxpc2VIb3N0KGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCBjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw8Um93Pikge1xuICAgIGFzc2VydC5pc1RydXRoeShob3N0KTtcbiAgICBob3N0W0NFTExfRURJVE9SX1BPUlRBTF0gPSBuZXcgQ29tcG9uZW50UG9ydGFsKHRoaXMuY29tcG9uZW50VHlwZSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblBvcnRhbEF0dGFjaGVkKGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCBwb3J0YWxDb21wb25lbnQ6IFBvcnRhbCkge1xuICAgIGhvc3RbUE9SVEFMX0VESVRPUl9DT01QT05FTlRdID0gcG9ydGFsQ29tcG9uZW50O1xuICAgIHRoaXMuaW5pdGlhbGlzZUVkaXRvclNlc3Npb24ocG9ydGFsQ29tcG9uZW50LCBob3N0LmVkaXRTZXNzaW9uKTtcbiAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUNlbGxSZW5kZXJlclBvcnRhbFJlZjxSb3c+IGV4dGVuZHMgQ2VsbFJlbmRlcmVyUG9ydGFsUmVmPFJvdywgdW5kZWZpbmVkPiB7XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICBwcml2YXRlIGZpbGxDZWxsOiBib29sZWFuO1xuICBwcml2YXRlIHBhZENoaWxkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJQb3J0YWwodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIGZpbGxDZWxsOiBib29sZWFuLCBwYWRDaGlsZDogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB0aGlzLnZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyO1xuICAgIHRoaXMuZmlsbENlbGwgPSBmaWxsQ2VsbDtcbiAgICB0aGlzLnBhZENoaWxkID0gcGFkQ2hpbGQ7XG4gIH1cblxuICBpbml0aWFsaXNlSG9zdChob3N0OiBUYWJsZUNlbGxDb21wb25lbnQ8Um93PiwgY29sdW1uTW9kZWw6IENvbHVtbk1vZGVsPFJvdz4pIHtcbiAgICBhc3NlcnQuaXNUcnV0aHkoaG9zdCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblBvcnRhbEF0dGFjaGVkKGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCBwb3J0YWxDb21wb25lbnQ6IHVuZGVmaW5lZCkge1xuICAgIC8vICBkb24ndCBjYXJlXG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBwdXNoU3RhdGUoaG9zdDogVGFibGVDZWxsQ29tcG9uZW50PFJvdz4pOiB2b2lkIHtcbiAgICBob3N0W0NFTExfUkVOREVSRVJfUE9SVEFMXSA9IHRoaXMuY3JlYXRlUG9ydGFsKGhvc3QuZ2V0Um93RGF0YSgpKTtcbiAgICBob3N0LmZpbGxDZWxsID0gdGhpcy5maWxsQ2VsbDtcbiAgICBob3N0LnBhZENoaWxkID0gdGhpcy5wYWRDaGlsZDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUG9ydGFsKGRhdGE6IFJvd0RhdGE8Um93Pikge1xuICAgIHJldHVybiBuZXcgVGVtcGxhdGVQb3J0YWw8YW55Pih0aGlzLnRlbXBsYXRlUmVmLCB0aGlzLnZpZXdDb250YWluZXIsIHsuLi4oZGF0YSksICRpbXBsaWNpdDogZGF0YS5yb3d9KTtcbiAgfVxufVxuIl19
102
+ export class CellFooterPortalRef extends CellPortalRef {
103
+ componentType;
104
+ initialiseHeader;
105
+ constructor(componentType, initialiseHeader) {
106
+ super();
107
+ this.componentType = componentType;
108
+ this.initialiseHeader = initialiseHeader;
109
+ }
110
+ initialiseHost(host, columnModel) {
111
+ assert.isTruthy(host);
112
+ host[HEADER_CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
113
+ }
114
+ // @Trace()
115
+ onPortalAttached(host, portalComponent) {
116
+ this.initialiseHeader(portalComponent, host.column);
117
+ }
118
+ }
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1wb3J0YWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvY2VsbC1wb3J0YWwtcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFcEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBTXBELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3RGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBR2xGLE1BQU0sT0FBZ0IsYUFBYTtDQUtsQztBQUVELE1BQU0sT0FBTyxtQkFBMkMsU0FBUSxhQUErQztJQUN4RjtJQUEwQztJQUEvRCxZQUFxQixhQUErQixFQUFXLGdCQUF1RTtRQUNwSSxLQUFLLEVBQUUsQ0FBQztRQURXLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUFXLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBdUQ7SUFFdEksQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUE4QixFQUFFLFdBQTZCO1FBQzFFLE1BQU0sQ0FBQyxRQUFRLENB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O0lBQ3RELENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtDb21wb25lbnRQb3J0YWwsIFRlbXBsYXRlUG9ydGFsfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7VGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJ0Bjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXMnO1xuaW1wb3J0IHtDb2x1bW5Nb2RlbCwgUm93RGF0YX0gZnJvbSAnLi4vY29sdW1uL2NvbHVtbi1tb2RlbCc7XG5pbXBvcnQge0VkaXRTZXNzaW9ufSBmcm9tICcuLi9lZGl0b3IvZWRpdC1zZXNzaW9uJztcbmltcG9ydCB7VGFibGVDZWxsQ29tcG9uZW50fSBmcm9tICcuL3RhYmxlLWNlbGwvdGFibGUtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHtUYWJsZUhlYWRlckNlbGxDb21wb25lbnR9IGZyb20gJy4vdGFibGUtaGVhZGVyLWNlbGwvdGFibGUtaGVhZGVyLWNlbGwuY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IEhFQURFUl9DRUxMX1JFTkRFUkVSX1BPUlRBTCA9IFN5bWJvbCgnYXVwLWNlbGwtaGVhZGVyLXJlbmRlcmVyLWNvbXBvbmVudC1yZWYnKTtcbmV4cG9ydCBjb25zdCBGT09URVJfQ0VMTF9SRU5ERVJFUl9QT1JUQUwgPSBTeW1ib2woJ2F1cC1jZWxsLWZvb3Rlci1yZW5kZXJlci1jb21wb25lbnQtcmVmJyk7XG5leHBvcnQgY29uc3QgQ0VMTF9SRU5ERVJFUl9QT1JUQUwgPSBTeW1ib2woJ2F1cC1jZWxsLXJlbmRlcmVyLWNvbXBvbmVudC1yZWYnKTtcbmV4cG9ydCBjb25zdCBDRUxMX0VESVRPUl9QT1JUQUwgPSBTeW1ib2woJ2F1cC1jZWxsLWVkaXRvci1jb21wb25lbnQtcmVmJyk7XG5leHBvcnQgY29uc3QgUE9SVEFMX1JFTkRFUkVSX0NPTVBPTkVOVCA9IFN5bWJvbCgnYXVwLWNlbGwtcmVuZGVyZXItcG9ydGFsLWNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IFBPUlRBTF9FRElUT1JfQ09NUE9ORU5UID0gU3ltYm9sKCdhdXAtY2VsbC1lZGl0b3ItcG9ydGFsLWNvbXBvbmVudCcpO1xuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDZWxsUG9ydGFsUmVmPFJvdyBleHRlbmRzIG9iamVjdCwgSG9zdCwgUG9ydGFsPiB7XG5cbiAgYWJzdHJhY3QgaW5pdGlhbGlzZUhvc3QoaG9zdDogSG9zdCwgY29sdW1uTW9kZWw6IENvbHVtbk1vZGVsPFJvdz4pOiB2b2lkXG5cbiAgYWJzdHJhY3Qgb25Qb3J0YWxBdHRhY2hlZChob3N0OiBIb3N0LCBwb3J0YWxDb21wb25lbnQ6IFBvcnRhbCk6IHZvaWRcbn1cblxuZXhwb3J0IGNsYXNzIENlbGxIZWFkZXJQb3J0YWxSZWY8Um93IGV4dGVuZHMgb2JqZWN0LCBDPiBleHRlbmRzIENlbGxQb3J0YWxSZWY8Um93LCBUYWJsZUhlYWRlckNlbGxDb21wb25lbnQsIEM+IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgY29tcG9uZW50VHlwZTogQ29tcG9uZW50VHlwZTxDPiwgcmVhZG9ubHkgaW5pdGlhbGlzZUhlYWRlcjogKGNvbXBvbmVudDogQywgY29sdW1uTW9kZWw6IENvbHVtbk1vZGVsPFJvdz4pID0+IHZvaWQpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaW5pdGlhbGlzZUhvc3QoaG9zdDogVGFibGVIZWFkZXJDZWxsQ29tcG9uZW50LCBjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw8Um93Pikge1xuICAgIGFzc2VydC5pc1RydXRoeShob3N0KTtcbiAgICBob3N0W0hFQURFUl9DRUxMX1JFTkRFUkVSX1BPUlRBTF0gPSBuZXcgQ29tcG9uZW50UG9ydGFsKHRoaXMuY29tcG9uZW50VHlwZSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblBvcnRhbEF0dGFjaGVkKGhvc3Q6IFRhYmxlSGVhZGVyQ2VsbENvbXBvbmVudCwgcG9ydGFsQ29tcG9uZW50OiBDKSB7XG4gICAgdGhpcy5pbml0aWFsaXNlSGVhZGVyKHBvcnRhbENvbXBvbmVudCwgaG9zdC5jb2x1bW4pO1xuICB9XG5cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENlbGxSZW5kZXJlclBvcnRhbFJlZjxSb3cgZXh0ZW5kcyBvYmplY3QsIFBvcnRhbD4gZXh0ZW5kcyBDZWxsUG9ydGFsUmVmPFJvdywgVGFibGVDZWxsQ29tcG9uZW50PFJvdz4sIFBvcnRhbD4ge1xuICBhYnN0cmFjdCBwdXNoU3RhdGUoaG9zdDogVGFibGVDZWxsQ29tcG9uZW50PFJvdz4pOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50Q2VsbFJlbmRlcmVyUG9ydGFsUmVmPFJvdyBleHRlbmRzIG9iamVjdCwgUG9ydGFsPiBleHRlbmRzIENlbGxSZW5kZXJlclBvcnRhbFJlZjxSb3csIFBvcnRhbD4ge1xuXG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgY29tcG9uZW50VHlwZTogQ29tcG9uZW50VHlwZTxQb3J0YWw+LCByZWFkb25seSB1cGRhdGVDb21wb25lbnQ6IChjb21wb25lbnQ6IFBvcnRhbCwgcm93RGF0YTogUm93RGF0YTxSb3c+LCBmaXJzdFRpbWU6IGJvb2xlYW4pID0+IHZvaWQpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaW5pdGlhbGlzZUhvc3QoaG9zdDogVGFibGVDZWxsQ29tcG9uZW50PFJvdz4sIGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+KSB7XG4gICAgaG9zdFtDRUxMX1JFTkRFUkVSX1BPUlRBTF0gPSBuZXcgQ29tcG9uZW50UG9ydGFsKHRoaXMuY29tcG9uZW50VHlwZSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblBvcnRhbEF0dGFjaGVkKGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCBwb3J0YWxDb21wb25lbnQ6IFBvcnRhbCkge1xuICAgIGhvc3RbUE9SVEFMX1JFTkRFUkVSX0NPTVBPTkVOVF0gPSBwb3J0YWxDb21wb25lbnQ7XG4gICAgdGhpcy51cGRhdGVDb21wb25lbnQocG9ydGFsQ29tcG9uZW50LCBob3N0LmdldFJvd0RhdGEoKSwgdHJ1ZSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBwdXNoU3RhdGUoaG9zdDogVGFibGVDZWxsQ29tcG9uZW50PFJvdz4pOiB2b2lkIHtcbiAgICBpZiAoaG9zdFtQT1JUQUxfUkVOREVSRVJfQ09NUE9ORU5UXSkge1xuICAgICAgdGhpcy51cGRhdGVDb21wb25lbnQoaG9zdFtQT1JUQUxfUkVOREVSRVJfQ09NUE9ORU5UXSwgaG9zdC5nZXRSb3dEYXRhKCksIGZhbHNlKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnQgY2xhc3MgQ2VsbEVkaXRvclBvcnRhbFJlZjxSb3cgZXh0ZW5kcyBvYmplY3QsIFBvcnRhbD4gZXh0ZW5kcyBDZWxsUG9ydGFsUmVmPFJvdywgVGFibGVDZWxsQ29tcG9uZW50PFJvdz4sIFBvcnRhbD4ge1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbXBvbmVudFR5cGU6IENvbXBvbmVudFR5cGU8UG9ydGFsPiwgcmVhZG9ubHkgaW5pdGlhbGlzZUVkaXRvclNlc3Npb246IChjb21wb25lbnQ6IFBvcnRhbCwgZWRpdFNlc3Npb246IEVkaXRTZXNzaW9uPFJvdz4pID0+IHZvaWQpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaW5pdGlhbGlzZUhvc3QoaG9zdDogVGFibGVDZWxsQ29tcG9uZW50PFJvdz4sIGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+KSB7XG4gICAgYXNzZXJ0LmlzVHJ1dGh5KGhvc3QpO1xuICAgIGhvc3RbQ0VMTF9FRElUT1JfUE9SVEFMXSA9IG5ldyBDb21wb25lbnRQb3J0YWwodGhpcy5jb21wb25lbnRUeXBlKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUG9ydGFsQXR0YWNoZWQoaG9zdDogVGFibGVDZWxsQ29tcG9uZW50PFJvdz4sIHBvcnRhbENvbXBvbmVudDogUG9ydGFsKSB7XG4gICAgaG9zdFtQT1JUQUxfRURJVE9SX0NPTVBPTkVOVF0gPSBwb3J0YWxDb21wb25lbnQ7XG4gICAgdGhpcy5pbml0aWFsaXNlRWRpdG9yU2Vzc2lvbihwb3J0YWxDb21wb25lbnQsIGhvc3QuZWRpdFNlc3Npb24pO1xuICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQ2VsbFJlbmRlcmVyUG9ydGFsUmVmPFJvdyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBDZWxsUmVuZGVyZXJQb3J0YWxSZWY8Um93LCB1bmRlZmluZWQ+IHtcblxuICBwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIHByaXZhdGUgZmlsbENlbGw6IGJvb2xlYW47XG4gIHByaXZhdGUgcGFkQ2hpbGQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclBvcnRhbCh0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgZmlsbENlbGw6IGJvb2xlYW4sIHBhZENoaWxkOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHZpZXdDb250YWluZXI7XG4gICAgdGhpcy5maWxsQ2VsbCA9IGZpbGxDZWxsO1xuICAgIHRoaXMucGFkQ2hpbGQgPSBwYWRDaGlsZDtcbiAgfVxuXG4gIGluaXRpYWxpc2VIb3N0KGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCBjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw8Um93Pikge1xuICAgIGFzc2VydC5pc1RydXRoeShob3N0KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUG9ydGFsQXR0YWNoZWQoaG9zdDogVGFibGVDZWxsQ29tcG9uZW50PFJvdz4sIHBvcnRhbENvbXBvbmVudDogdW5kZWZpbmVkKSB7XG4gICAgLy8gIGRvbid0IGNhcmVcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIHB1c2hTdGF0ZShob3N0OiBUYWJsZUNlbGxDb21wb25lbnQ8Um93Pik6IHZvaWQge1xuICAgIGhvc3RbQ0VMTF9SRU5ERVJFUl9QT1JUQUxdID0gdGhpcy5jcmVhdGVQb3J0YWwoaG9zdC5nZXRSb3dEYXRhKCkpO1xuICAgIGhvc3QuZmlsbENlbGwgPSB0aGlzLmZpbGxDZWxsO1xuICAgIGhvc3QucGFkQ2hpbGQgPSB0aGlzLnBhZENoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQb3J0YWwoZGF0YTogUm93RGF0YTxSb3c+KSB7XG4gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZVBvcnRhbDxhbnk+KHRoaXMudGVtcGxhdGVSZWYsIHRoaXMudmlld0NvbnRhaW5lciwgey4uLihkYXRhKSwgJGltcGxpY2l0OiBkYXRhLnJvd30pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDZWxsRm9vdGVyUG9ydGFsUmVmPFJvdyBleHRlbmRzIG9iamVjdCwgQz4gZXh0ZW5kcyBDZWxsUG9ydGFsUmVmPFJvdywgVGFibGVIZWFkZXJDZWxsQ29tcG9uZW50LCBDPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbXBvbmVudFR5cGU6IENvbXBvbmVudFR5cGU8Qz4sIHJlYWRvbmx5IGluaXRpYWxpc2VIZWFkZXI6IChjb21wb25lbnQ6IEMsIGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+KSA9PiB2b2lkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGluaXRpYWxpc2VIb3N0KGhvc3Q6IFRhYmxlSGVhZGVyQ2VsbENvbXBvbmVudCwgY29sdW1uTW9kZWw6IENvbHVtbk1vZGVsPFJvdz4pIHtcbiAgICBhc3NlcnQuaXNUcnV0aHkoaG9zdCk7XG4gICAgaG9zdFtIRUFERVJfQ0VMTF9SRU5ERVJFUl9QT1JUQUxdID0gbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLmNvbXBvbmVudFR5cGUpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Qb3J0YWxBdHRhY2hlZChob3N0OiBUYWJsZUhlYWRlckNlbGxDb21wb25lbnQsIHBvcnRhbENvbXBvbmVudDogQykge1xuICAgIHRoaXMuaW5pdGlhbGlzZUhlYWRlcihwb3J0YWxDb21wb25lbnQsIGhvc3QuY29sdW1uKTtcbiAgfVxuXG59XG5cbiJdfQ==
@@ -10,12 +10,12 @@ export class DefaultCellRendererComponent {
10
10
  return this._value;
11
11
  }
12
12
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: DefaultCellRendererComponent, selector: "aup-default-cell-renderer", inputs: { value: "value" }, ngImport: i0, template: "<span [innerHTML]=\"value| aupHighlight\"></span>\n", styles: [""], dependencies: [{ kind: "pipe", type: i1.HighlightPipe, name: "aupHighlight" }] });
13
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: DefaultCellRendererComponent, selector: "aup-default-cell-renderer", inputs: { value: "value" }, ngImport: i0, template: "<span [innerHTML]=\"value?.toString()| aupHighlight\"></span>\n", styles: [""], dependencies: [{ kind: "pipe", type: i1.HighlightPipe, name: "aupHighlight" }] });
14
14
  }
15
15
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: DefaultCellRendererComponent, decorators: [{
16
16
  type: Component,
17
- args: [{ selector: "aup-default-cell-renderer", template: "<span [innerHTML]=\"value| aupHighlight\"></span>\n" }]
17
+ args: [{ selector: "aup-default-cell-renderer", template: "<span [innerHTML]=\"value?.toString()| aupHighlight\"></span>\n" }]
18
18
  }], propDecorators: { value: [{
19
19
  type: Input
20
20
  }] } });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL3JlbmRlcmVyL2RlZmF1bHQtY2VsbC1yZW5kZXJlci9kZWZhdWx0LWNlbGwtcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvZGVmYXVsdC1jZWxsLXJlbmRlcmVyL2RlZmF1bHQtY2VsbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQzs7O0FBUy9DLE1BQU0sT0FBTyw0QkFBNEI7SUFDL0IsTUFBTSxDQUFJO0lBRWxCLElBQ0ksS0FBSyxDQUFDLEtBQVE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO3VHQVZVLDRCQUE0QjsyRkFBNUIsNEJBQTRCLDZGQ1R6QyxxREFDQTs7MkZEUWEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDJCQUEyQjs4QkFRakMsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtDZWxsUmVuZGVyZXJ9IGZyb20gXCIuLi9jZWxsLXJlbmRlcmVyXCI7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImF1cC1kZWZhdWx0LWNlbGwtcmVuZGVyZXJcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9kZWZhdWx0LWNlbGwtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2RlZmF1bHQtY2VsbC1yZW5kZXJlci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0Q2VsbFJlbmRlcmVyQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgQ2VsbFJlbmRlcmVyPFQ+IHtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbn1cbiIsIjxzcGFuIFtpbm5lckhUTUxdPVwidmFsdWV8IGF1cEhpZ2hsaWdodFwiPjwvc3Bhbj5cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL3JlbmRlcmVyL2RlZmF1bHQtY2VsbC1yZW5kZXJlci9kZWZhdWx0LWNlbGwtcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvZGVmYXVsdC1jZWxsLXJlbmRlcmVyL2RlZmF1bHQtY2VsbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQzs7O0FBUy9DLE1BQU0sT0FBTyw0QkFBNEI7SUFDL0IsTUFBTSxDQUFJO0lBRWxCLElBQ0ksS0FBSyxDQUFDLEtBQVE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO3VHQVZVLDRCQUE0QjsyRkFBNUIsNEJBQTRCLDZGQ1R6QyxpRUFDQTs7MkZEUWEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDJCQUEyQjs4QkFRakMsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtDZWxsUmVuZGVyZXJ9IGZyb20gXCIuLi9jZWxsLXJlbmRlcmVyXCI7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImF1cC1kZWZhdWx0LWNlbGwtcmVuZGVyZXJcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9kZWZhdWx0LWNlbGwtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2RlZmF1bHQtY2VsbC1yZW5kZXJlci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0Q2VsbFJlbmRlcmVyQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgQ2VsbFJlbmRlcmVyPFQ+IHtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbn1cbiIsIjxzcGFuIFtpbm5lckhUTUxdPVwidmFsdWU/LnRvU3RyaW5nKCl8IGF1cEhpZ2hsaWdodFwiPjwvc3Bhbj5cbiJdfQ==
@@ -17,7 +17,8 @@ export class SelectionHeaderCellComponent extends DisposableComponent {
17
17
  super();
18
18
  this.selectCommand = Command.create(() => {
19
19
  this.selectionModel.toggleAllCommand.execute();
20
- });
20
+ }).visibleWhile(this.selectionModel.toggleAllCommand.visible$)
21
+ .enableWhile(this.selectionModel.toggleAllCommand.enabled$);
21
22
  }
22
23
  isSelected() {
23
24
  return this.ifMultiSelectionModel(m => m.allSelected$.value, false);
@@ -57,4 +58,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
57
58
  { provide: MAT_CHECKBOX_DEFAULT_OPTIONS, useValue: { clickAction: 'noop' } }
58
59
  ], template: "<mat-checkbox *ngIf=\"isVisible()\"\n (click)=\"handleClick($event)\"\n [checked]=\"isSelected()\"\n [indeterminate]=\"this.isIntermediate()\"\n [color]=\"color\"\n></mat-checkbox>\n" }]
59
60
  }], ctorParameters: function () { return []; }, propDecorators: { selectionModel: [] } });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWhlYWRlci1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL3JlbmRlcmVyL3NlbGVjdC1oZWFkZXItY2VsbC9zZWxlY3Rpb24taGVhZGVyLWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvc2VsZWN0LWhlYWRlci1jZWxsL3NlbGVjdGlvbi1oZWFkZXItY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsNEJBQTRCLEVBQTRCLE1BQU0sNEJBQTRCLENBQUM7QUFHbkcsT0FBTyxFQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQVVsRSxNQUFNLE9BQU8sNEJBQWtDLFNBQVEsbUJBQW1CO0lBRS9ELGFBQWEsQ0FBZ0I7SUFHN0IsbUNBQWlCLE9BQU8sQ0FBQyxDQUFBLGNBQW1CLENBQUEsQ0FBQyxDQUFDO0lBQTlDLElBQUEsY0FBYyxvREFBZ0M7SUFBOUMsSUFBQSxjQUFjLDBEQUFnQztJQUV2RCxLQUFLLENBQWU7SUFDcEIsb0JBQW9CLENBQVU7SUFFOUI7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtJQUNsRSxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksc0JBQXNCLENBQUE7SUFDakYsQ0FBQztJQUVELHFCQUFxQixDQUFJLFFBQXlELEVBQUUsU0FBYTtRQUMvRixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFO1lBQ2hDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxjQUE2RCxDQUFDLENBQUM7U0FDckY7YUFBTTtZQUNMLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFhO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQzt1R0EzQ1UsNEJBQTRCOzJGQUE1Qiw0QkFBNEIsb0RBSjdCO1lBQ1IsRUFBQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBK0IsRUFBQztTQUN4RyxpRENiSCw0T0FNQTs7QURjVztJQURSLE9BQU8sRUFBRTs7a0VBQzZDOzJGQUw1Qyw0QkFBNEI7a0JBUnhDLFNBQVM7K0JBQ0UsMkJBQTJCLGFBRzNCO3dCQUNSLEVBQUMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQStCLEVBQUM7cUJBQ3hHOzBFQU9RLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9DSEVDS0JPWF9ERUZBVUxUX09QVElPTlMsIE1hdENoZWNrYm94RGVmYXVsdE9wdGlvbnN9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveFwiO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XG5cbmltcG9ydCB7Q2FuUHJveHksIENvbW1hbmQsIE11bHRpcGxlU2VsZWN0aW9uTW9kZWwsIFByb3hpZnksIHByb3hpZnksIFNlbGVjdGlvbk1vZGVsfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQge0Rpc3Bvc2FibGVDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2Rpc3Bvc2FibGUtY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVwLXNlbGVjdGlvbi1oZWFkZXItY2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3Rpb24taGVhZGVyLWNlbGwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3Rpb24taGVhZGVyLWNlbGwuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOltcbiAgICB7cHJvdmlkZTogTUFUX0NIRUNLQk9YX0RFRkFVTFRfT1BUSU9OUywgdXNlVmFsdWU6IHsgY2xpY2tBY3Rpb246ICdub29wJyB9IGFzIE1hdENoZWNrYm94RGVmYXVsdE9wdGlvbnN9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uSGVhZGVyQ2VsbENvbXBvbmVudDxSb3c+IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCB7XG5cbiAgcmVhZG9ubHkgc2VsZWN0Q29tbWFuZDogQ29tbWFuZDx2b2lkPjtcblxuICBAUHJveGlmeSgpXG4gIGFjY2Vzc29yIHNlbGVjdGlvbk1vZGVsID0gcHJveGlmeShTZWxlY3Rpb25Nb2RlbDxSb3c+KTtcblxuICBjb2xvcjogVGhlbWVQYWxldHRlO1xuICBlbmFibGVIZWFkZXJDb250cm9sczogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2VsZWN0Q29tbWFuZCA9IENvbW1hbmQuY3JlYXRlKCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwudG9nZ2xlQWxsQ29tbWFuZC5leGVjdXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlmTXVsdGlTZWxlY3Rpb25Nb2RlbChtID0+IG0uYWxsU2VsZWN0ZWQkLnZhbHVlLCBmYWxzZSk7XG4gIH1cblxuICBpc0ludGVybWVkaWF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pZk11bHRpU2VsZWN0aW9uTW9kZWwobSA9PiBtLnNvbWVTZWxlY3RlZCQudmFsdWUsIGZhbHNlKTtcbiAgfVxuXG4gIGlzVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVIZWFkZXJDb250cm9scyAmJiB0aGlzLmlzTXVsdGlTZWxlY3Rpb25Nb2RlbCgpXG4gIH1cblxuICBpc011bHRpU2VsZWN0aW9uTW9kZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENhblByb3h5LmZpbmRSb290KHRoaXMuc2VsZWN0aW9uTW9kZWwpIGluc3RhbmNlb2YgTXVsdGlwbGVTZWxlY3Rpb25Nb2RlbFxuICB9XG5cbiAgaWZNdWx0aVNlbGVjdGlvbk1vZGVsPFQ+KHJ1bm5hYmxlOiAobW9kZWwkOiBNdWx0aXBsZVNlbGVjdGlvbk1vZGVsPFJvdywgYW55PikgPT4gVCwgb3RoZXJ3aXNlPzogVCk6IFQge1xuICAgIGlmICh0aGlzLmlzTXVsdGlTZWxlY3Rpb25Nb2RlbCgpKSB7XG4gICAgICByZXR1cm4gcnVubmFibGUodGhpcy5zZWxlY3Rpb25Nb2RlbCBhcyB1bmtub3duIGFzIE11bHRpcGxlU2VsZWN0aW9uTW9kZWw8Um93LCBhbnk+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG90aGVyd2lzZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbGljayhldmVudCQ6IEV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RDb21tYW5kLmV4ZWN1dGUoKTtcbiAgfVxufVxuIiwiPG1hdC1jaGVja2JveCAqbmdJZj1cImlzVmlzaWJsZSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0aGlzLmlzSW50ZXJtZWRpYXRlKClcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuPjwvbWF0LWNoZWNrYm94PlxuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWhlYWRlci1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL3JlbmRlcmVyL3NlbGVjdC1oZWFkZXItY2VsbC9zZWxlY3Rpb24taGVhZGVyLWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvc2VsZWN0LWhlYWRlci1jZWxsL3NlbGVjdGlvbi1oZWFkZXItY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsNEJBQTRCLEVBQTRCLE1BQU0sNEJBQTRCLENBQUM7QUFHbkcsT0FBTyxFQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQVVsRSxNQUFNLE9BQU8sNEJBQWtDLFNBQVEsbUJBQW1CO0lBRS9ELGFBQWEsQ0FBZ0I7SUFHN0IsbUNBQWlCLE9BQU8sQ0FBQyxDQUFBLGNBQW1CLENBQUEsQ0FBQyxDQUFDO0lBQTlDLElBQUEsY0FBYyxvREFBZ0M7SUFBOUMsSUFBQSxjQUFjLDBEQUFnQztJQUV2RCxLQUFLLENBQWU7SUFDcEIsb0JBQW9CLENBQVU7SUFFOUI7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7YUFDM0QsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO0lBQ2xFLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxzQkFBc0IsQ0FBQTtJQUNqRixDQUFDO0lBRUQscUJBQXFCLENBQUksUUFBeUQsRUFBRSxTQUFhO1FBQy9GLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUU7WUFDaEMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQTZELENBQUMsQ0FBQztTQUNyRjthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWE7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO3VHQTVDVSw0QkFBNEI7MkZBQTVCLDRCQUE0QixvREFKN0I7WUFDUixFQUFDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUErQixFQUFDO1NBQ3hHLGlEQ2JILDRPQU1BOztBRGNXO0lBRFIsT0FBTyxFQUFFOztrRUFDNkM7MkZBTDVDLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSwyQkFBMkIsYUFHM0I7d0JBQ1IsRUFBQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBK0IsRUFBQztxQkFDeEc7MEVBT1EsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TUFUX0NIRUNLQk9YX0RFRkFVTFRfT1BUSU9OUywgTWF0Q2hlY2tib3hEZWZhdWx0T3B0aW9uc30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94XCI7XG5pbXBvcnQge1RoZW1lUGFsZXR0ZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NvcmVcIjtcblxuaW1wb3J0IHtDYW5Qcm94eSwgQ29tbWFuZCwgTXVsdGlwbGVTZWxlY3Rpb25Nb2RlbCwgUHJveGlmeSwgcHJveGlmeSwgU2VsZWN0aW9uTW9kZWx9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vZGlzcG9zYWJsZS1jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdXAtc2VsZWN0aW9uLWhlYWRlci1jZWxsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdGlvbi1oZWFkZXItY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdGlvbi1oZWFkZXItY2VsbC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6W1xuICAgIHtwcm92aWRlOiBNQVRfQ0hFQ0tCT1hfREVGQVVMVF9PUFRJT05TLCB1c2VWYWx1ZTogeyBjbGlja0FjdGlvbjogJ25vb3AnIH0gYXMgTWF0Q2hlY2tib3hEZWZhdWx0T3B0aW9uc31cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcG9uZW50PFJvdz4gZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IHtcblxuICByZWFkb25seSBzZWxlY3RDb21tYW5kOiBDb21tYW5kPHZvaWQ+O1xuXG4gIEBQcm94aWZ5KClcbiAgYWNjZXNzb3Igc2VsZWN0aW9uTW9kZWwgPSBwcm94aWZ5KFNlbGVjdGlvbk1vZGVsPFJvdz4pO1xuXG4gIGNvbG9yOiBUaGVtZVBhbGV0dGU7XG4gIGVuYWJsZUhlYWRlckNvbnRyb2xzOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zZWxlY3RDb21tYW5kID0gQ29tbWFuZC5jcmVhdGUoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC50b2dnbGVBbGxDb21tYW5kLmV4ZWN1dGUoKTtcbiAgICB9KS52aXNpYmxlV2hpbGUodGhpcy5zZWxlY3Rpb25Nb2RlbC50b2dnbGVBbGxDb21tYW5kLnZpc2libGUkKVxuICAgICAgLmVuYWJsZVdoaWxlKHRoaXMuc2VsZWN0aW9uTW9kZWwudG9nZ2xlQWxsQ29tbWFuZC5lbmFibGVkJCk7XG4gIH1cblxuICBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlmTXVsdGlTZWxlY3Rpb25Nb2RlbChtID0+IG0uYWxsU2VsZWN0ZWQkLnZhbHVlLCBmYWxzZSk7XG4gIH1cblxuICBpc0ludGVybWVkaWF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pZk11bHRpU2VsZWN0aW9uTW9kZWwobSA9PiBtLnNvbWVTZWxlY3RlZCQudmFsdWUsIGZhbHNlKTtcbiAgfVxuXG4gIGlzVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVIZWFkZXJDb250cm9scyAmJiB0aGlzLmlzTXVsdGlTZWxlY3Rpb25Nb2RlbCgpXG4gIH1cblxuICBpc011bHRpU2VsZWN0aW9uTW9kZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENhblByb3h5LmZpbmRSb290KHRoaXMuc2VsZWN0aW9uTW9kZWwpIGluc3RhbmNlb2YgTXVsdGlwbGVTZWxlY3Rpb25Nb2RlbFxuICB9XG5cbiAgaWZNdWx0aVNlbGVjdGlvbk1vZGVsPFQ+KHJ1bm5hYmxlOiAobW9kZWwkOiBNdWx0aXBsZVNlbGVjdGlvbk1vZGVsPFJvdywgYW55PikgPT4gVCwgb3RoZXJ3aXNlPzogVCk6IFQge1xuICAgIGlmICh0aGlzLmlzTXVsdGlTZWxlY3Rpb25Nb2RlbCgpKSB7XG4gICAgICByZXR1cm4gcnVubmFibGUodGhpcy5zZWxlY3Rpb25Nb2RlbCBhcyB1bmtub3duIGFzIE11bHRpcGxlU2VsZWN0aW9uTW9kZWw8Um93LCBhbnk+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG90aGVyd2lzZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbGljayhldmVudCQ6IEV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RDb21tYW5kLmV4ZWN1dGUoKTtcbiAgfVxufVxuIiwiPG1hdC1jaGVja2JveCAqbmdJZj1cImlzVmlzaWJsZSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0aGlzLmlzSW50ZXJtZWRpYXRlKClcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuPjwvbWF0LWNoZWNrYm94PlxuIl19
@@ -1,68 +1,119 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { Component, ElementRef, EventEmitter, HostBinding, Input, NgZone, Output } from "@angular/core";
2
+ import { CdkVirtualScrollViewport } from "@angular/cdk/scrolling";
3
+ import { Component, Directive, ElementRef, HostBinding, Inject, InjectionToken, Input, Optional, ViewChild } from "@angular/core";
3
4
  import { Dsl, ListModel, MutableValueModel, Proxify, proxify, StoreInValueModel, ValueModel } from "@coolon/pectin";
5
+ import { TableVirtualScrollDataSource } from "ng-table-virtual-scroll";
4
6
  import { ResizeAwareComponent } from "../../../resize-aware.component";
5
7
  import { AbstractTableModel } from "../../abstract-table-model";
8
+ import { FooterRowModel } from "../../footer/footer-row-model";
6
9
  import * as i0 from "@angular/core";
7
10
  import * as i1 from "@angular/common";
8
11
  import * as i2 from "@angular/material/table";
9
- import * as i3 from "../table-cell/table-cell.component";
10
- import * as i4 from "../table-header-cell/table-header-cell.component";
12
+ import * as i3 from "@angular/cdk/scrolling";
13
+ import * as i4 from "ng-table-virtual-scroll";
14
+ import * as i5 from "../table-cell/table-cell.component";
15
+ import * as i6 from "../table-header-cell/table-header-cell.component";
16
+ import * as i7 from "../table-footer-row/table-footer-row.component";
17
+ export const AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER = new InjectionToken("AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER");
18
+ export class TableRowAttributesDirective {
19
+ elementRef;
20
+ aupTableRowAttributes;
21
+ constructor(elementRef) {
22
+ this.elementRef = elementRef;
23
+ }
24
+ ngOnInit() {
25
+ for (const attr in this.aupTableRowAttributes) {
26
+ this.elementRef.nativeElement.setAttribute(attr, this.aupTableRowAttributes[attr]);
27
+ }
28
+ }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
30
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: TableRowAttributesDirective, selector: "[aupTableRowAttributes]", inputs: { aupTableRowAttributes: "aupTableRowAttributes" }, ngImport: i0 });
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableRowAttributesDirective, decorators: [{
33
+ type: Directive,
34
+ args: [{
35
+ selector: "[aupTableRowAttributes]",
36
+ }]
37
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { aupTableRowAttributes: [{
38
+ type: Input
39
+ }] } });
11
40
  export class TableBodyComponent extends ResizeAwareComponent {
41
+ bufferMultiplier;
12
42
  #data$_accessor_storage = proxify((ListModel));
13
43
  get data$() { return this.#data$_accessor_storage; }
14
44
  set data$(value) { this.#data$_accessor_storage = value; }
15
45
  #tableModel_accessor_storage = proxify((AbstractTableModel));
16
46
  get tableModel() { return this.#tableModel_accessor_storage; }
17
47
  set tableModel(value) { this.#tableModel_accessor_storage = value; }
48
+ #footerRow_accessor_storage = proxify((FooterRowModel.Impl));
49
+ get footerRow() { return this.#footerRow_accessor_storage; }
50
+ set footerRow(value) { this.#footerRow_accessor_storage = value; }
18
51
  #showHeader$_accessor_storage = proxify((ValueModel));
19
52
  get showHeader$() { return this.#showHeader$_accessor_storage; }
20
53
  set showHeader$(value) { this.#showHeader$_accessor_storage = value; }
21
54
  #showHeader_accessor_storage = true;
22
55
  get showHeader() { return this.#showHeader_accessor_storage; }
23
56
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
24
- visibleRowCount = new EventEmitter();
25
57
  trackBy;
26
- /**
27
- * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
28
- * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
29
- * containment area.
30
- */
31
- enableScrolling = false;
58
+ #scrollMode$_accessor_storage = proxify((ValueModel));
59
+ get scrollMode$() { return this.#scrollMode$_accessor_storage; }
60
+ set scrollMode$(value) { this.#scrollMode$_accessor_storage = value; }
61
+ #scrollMode_accessor_storage = "none";
62
+ get scrollMode() { return this.#scrollMode_accessor_storage; }
63
+ set scrollMode(value) { this.#scrollMode_accessor_storage = value; }
64
+ scrollViewport;
32
65
  columns$;
33
66
  columnIds$;
34
67
  columnsById$;
35
- _visibleRowCount$;
36
68
  // TODO: support user defined header and row heights via css vars.
37
- headerHeight$ = new MutableValueModel(29);
38
- rowHeight$ = new MutableValueModel(40);
69
+ headerHeight$ = new MutableValueModel(48);
70
+ rowHeight$ = new MutableValueModel(44);
39
71
  baseCssClass = "aup-table-component";
40
- constructor(elementRef, ngZone) {
41
- super(elementRef, ngZone);
42
- const { chain, when } = Dsl.disposeWith(this);
72
+ virtualScrollDataSource = new TableVirtualScrollDataSource();
73
+ virtualScrollActive$ = new MutableValueModel(false);
74
+ scrollTimeout;
75
+ constructor(bufferMultiplier = 1) {
76
+ super();
77
+ this.bufferMultiplier = bufferMultiplier;
78
+ const { chain, when, observe } = Dsl.disposeWith(this);
43
79
  const actualHeaderHeight$ = chain(this.showHeader$).map(show => {
44
80
  return show ? this.headerHeight$.value : 0;
45
81
  }, { dependsOn: this.headerHeight$ });
46
- this._visibleRowCount$ = chain(this.bounds$).map(bounds => {
47
- // TODO: this doesn't take into account any css styling adjustments etc. Will investigate if it's an issue.
48
- const rawRowCount = (bounds.height - actualHeaderHeight$.value) / this.rowHeight$.value;
49
- return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
50
- }, {
51
- dependsOn: [actualHeaderHeight$, this.rowHeight$],
52
- postponeWhile: chain(this.bounds$).pluckNumeric("height").isLessThan(1)
53
- });
54
- when(this._visibleRowCount$).changes(visibleRows => {
55
- this.visibleRowCount.emit(visibleRows);
56
- }, { initialValue: "triggerChangeUnlessNil" });
82
+ // performance is terrible if the data changes while we're scrolling, so we postpone updates until
83
+ // scrolling stops.
84
+ const delayedDatea$ = chain(this.data$).postponeWhile(this.virtualScrollActive$);
85
+ when(delayedDatea$).changes(delatedData => {
86
+ this.virtualScrollDataSource.data = delatedData;
87
+ this.scheduleTableHeightCheck();
88
+ }, { initialValue: "evaluate" });
57
89
  this.onInit(() => {
58
- this.columns$ = chain(this.tableModel.columns);
90
+ this.columns$ = chain(this.tableModel.visibleColumns$);
59
91
  this.columnIds$ = chain(this.columns$).pluck("columnId");
60
92
  this.columnsById$ = chain(this.columns$).indexBy('columnId');
61
93
  });
94
+ // const txo = new TransactionObserver({verbose: false}).onEvent(e => console.log(e.name, e.payload));
95
+ // txo.observe('this.virtualScrollRowRange$', this.virtualScrollRowRange$);
96
+ // txo.observe('this.virtualScrollSpacerSize$', this.virtualScrollSpacerSize$);
97
+ // txo.observe('this.virtualRows$', this.virtualRows$);
98
+ // txo.observe('this.tableBodyHeight$', this.tableBodyHeight$);
99
+ // txo.observe('this.virtualScrollActive$', this.virtualScrollActive$);
100
+ }
101
+ ngAfterViewInit() {
102
+ super.ngAfterViewInit();
103
+ if (this.scrollViewport) {
104
+ const { observe } = Dsl.disposeWith(this);
105
+ this.scrollViewport.elementScrolled().subscribe(() => this.notifyScrolled());
106
+ }
62
107
  }
63
108
  get hideHeader() {
64
109
  return !this.showHeader;
65
110
  }
111
+ get headerHeightCssVar() {
112
+ return `${this.headerHeight$.value}px`;
113
+ }
114
+ get rowHeightCssVar() {
115
+ return `${this.rowHeight$.value}px`;
116
+ }
66
117
  isEditing(row) {
67
118
  return !!this.tableModel.getEditSessionFor(row);
68
119
  }
@@ -87,50 +138,109 @@ export class TableBodyComponent extends ResizeAwareComponent {
87
138
  }
88
139
  return classes;
89
140
  }
90
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
91
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableBodyComponent, selector: "aup-table-body", inputs: { data$: "data$", tableModel: "tableModel", showHeader$: "showHeader$", showHeader: "showHeader", trackBy: "trackBy", enableScrolling: "enableScrolling" }, outputs: { visibleRowCount: "visibleRowCount" }, host: { properties: { "class.enable-scrolling": "this.enableScrolling", "class": "this.baseCssClass", "class.hide-header": "this.hideHeader" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.TableCellComponent, selector: "aup-table-cell", inputs: ["row", "column", "editSession", "tableModel"] }, { kind: "component", type: i4.TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: ["column"] }] });
141
+ scheduleTableHeightCheck(waitMillis = 50) {
142
+ setTimeout(() => {
143
+ const tbody = this.elementRef.nativeElement.querySelector("tbody");
144
+ const bodyHeight = tbody.offsetHeight;
145
+ if (this.data$.length > 0 && bodyHeight < this.rowHeight$.value) {
146
+ // Hacks to get our virtual scroll to repaint
147
+ // Logger.get(this).log(`rowCount=${this.data$.length}, bodyHeight=${bodyHeight} -> virtual table not rendering, triggering resize to force repaint`)
148
+ window.dispatchEvent(new Event('resize'));
149
+ if (waitMillis < 500) {
150
+ this.scheduleTableHeightCheck(waitMillis + 50);
151
+ }
152
+ }
153
+ }, waitMillis);
154
+ }
155
+ notifyScrolled() {
156
+ this.virtualScrollActive$.value = true;
157
+ this.clearScrollTimeout();
158
+ this.scrollTimeout = setTimeout(() => {
159
+ return this.virtualScrollActive$.value = false;
160
+ }, 200);
161
+ }
162
+ clearScrollTimeout() {
163
+ if (this.scrollTimeout) {
164
+ clearTimeout(this.scrollTimeout);
165
+ }
166
+ }
167
+ initialiseFooter($event) {
168
+ const portalRef = $event;
169
+ this.footerRow.onInit(portalRef.instance);
170
+ }
171
+ Proxify = Proxify;
172
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, deps: [{ token: AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
173
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableBodyComponent, selector: "aup-table-body", inputs: { data$: "data$", tableModel: "tableModel", footerRow: "footerRow", showHeader$: "showHeader$", showHeader: "showHeader", trackBy: "trackBy", scrollMode$: "scrollMode$", scrollMode: "scrollMode" }, host: { properties: { "attr.scrollMode": "this.scrollMode", "class": "this.baseCssClass", "class.hide-header": "this.hideHeader", "style.--aup-table-header-height": "this.headerHeightCssVar", "style.--aup-table-row-height": "this.rowHeightCssVar" } }, viewQueries: [{ propertyName: "scrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "\n<div class=\"classic-scroll-container\" *ngIf=\"scrollMode$.value !== 'virtual'\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\" [multiTemplateDataRows]>\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"$any(column)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [aupTableRowAttributes]=\"tableModel.getRowAttributes(row)\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n <ng-container matColumnDef=\"sticky-footer\" *ngIf=\"Proxify.hasTarget(footerRow)\">\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"columns$.length\" [ngClass]=\"'footer-cell'\">\n <aup-table-footer-row [row]=\"$any(footerRow)\"></aup-table-footer-row>\n </td>\n <tr mat-footer-row *matFooterRowDef=\"['sticky-footer']; sticky: true\"></tr>\n </ng-container>\n\n </table>\n</div>\n\n<cdk-virtual-scroll-viewport *ngIf=\"scrollMode$.value === 'virtual'\"\n [tvsItemSize]=\"rowHeight$.value\"\n [headerHeight]=\"headerHeight$.value\"\n [bufferMultiplier]=\"bufferMultiplier\"\n>\n <table mat-table [dataSource]=\"virtualScrollDataSource\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [aupTableRowAttributes]=\"tableModel.getRowAttributes(row)\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n<!-- Layout doesn't work yet - probably needs fixed footer row height -->\n<!-- <ng-container matColumnDef=\"sticky-footer\" *ngIf=\"tableModel.footerRowPortalRef\">-->\n<!-- <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"columns$.length\">-->\n<!-- <ng-container [cdkPortalOutlet]=\"tableModel.footerRowPortalRef.portal\" (attached)=\"initialiseFooter($event)\"></ng-container>-->\n<!-- </td>-->\n<!-- <tr mat-footer-row *matFooterRowDef=\"['sticky-footer']; sticky: true\"></tr>-->\n<!-- </ng-container>-->\n\n\n </table>\n</cdk-virtual-scroll-viewport>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host[scrollMode=virtual] cdk-virtual-scroll-viewport{flex:1}:host[scrollMode=virtual] table th{height:var(--aup-table-header-height);max-height:var(--aup-table-header-height);min-height:var(--aup-table-header-height)}:host[scrollMode=virtual] table td{height:var(--aup-table-row-height);max-height:var(--aup-table-row-height);min-height:var(--aup-table-row-height)}:host[scrollMode=classic]{min-height:0}:host[scrollMode=classic] .classic-scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i2.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i2.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i4.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "directive", type: TableRowAttributesDirective, selector: "[aupTableRowAttributes]", inputs: ["aupTableRowAttributes"] }, { kind: "component", type: i5.TableCellComponent, selector: "aup-table-cell", inputs: ["row", "column", "editSession", "tableModel"] }, { kind: "component", type: i6.TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: ["column"] }, { kind: "component", type: i7.TableFooterRow, selector: "aup-table-footer-row", inputs: ["row"] }] });
92
174
  }
93
175
  __decorate([
94
176
  Proxify(),
95
- __metadata("design:type", Object)
177
+ __metadata("design:type", ListModel)
96
178
  ], TableBodyComponent.prototype, "data$", null);
97
179
  __decorate([
98
180
  Proxify(),
99
- __metadata("design:type", Object)
181
+ __metadata("design:type", AbstractTableModel)
100
182
  ], TableBodyComponent.prototype, "tableModel", null);
101
183
  __decorate([
102
184
  Proxify(),
103
- __metadata("design:type", Object)
185
+ __metadata("design:type", FooterRowModel.Impl)
186
+ ], TableBodyComponent.prototype, "footerRow", null);
187
+ __decorate([
188
+ Proxify(),
189
+ __metadata("design:type", ValueModel)
104
190
  ], TableBodyComponent.prototype, "showHeader$", null);
105
191
  __decorate([
106
192
  StoreInValueModel(),
107
193
  __metadata("design:type", Object)
108
194
  ], TableBodyComponent.prototype, "showHeader", null);
195
+ __decorate([
196
+ Proxify(),
197
+ __metadata("design:type", ValueModel)
198
+ ], TableBodyComponent.prototype, "scrollMode$", null);
199
+ __decorate([
200
+ StoreInValueModel(),
201
+ __metadata("design:type", String)
202
+ ], TableBodyComponent.prototype, "scrollMode", null);
109
203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, decorators: [{
110
204
  type: Component,
111
- args: [{ selector: "aup-table-body", template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"] }]
112
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { data$: [{
205
+ args: [{ selector: "aup-table-body", template: "\n<div class=\"classic-scroll-container\" *ngIf=\"scrollMode$.value !== 'virtual'\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\" [multiTemplateDataRows]>\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"$any(column)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [aupTableRowAttributes]=\"tableModel.getRowAttributes(row)\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n <ng-container matColumnDef=\"sticky-footer\" *ngIf=\"Proxify.hasTarget(footerRow)\">\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"columns$.length\" [ngClass]=\"'footer-cell'\">\n <aup-table-footer-row [row]=\"$any(footerRow)\"></aup-table-footer-row>\n </td>\n <tr mat-footer-row *matFooterRowDef=\"['sticky-footer']; sticky: true\"></tr>\n </ng-container>\n\n </table>\n</div>\n\n<cdk-virtual-scroll-viewport *ngIf=\"scrollMode$.value === 'virtual'\"\n [tvsItemSize]=\"rowHeight$.value\"\n [headerHeight]=\"headerHeight$.value\"\n [bufferMultiplier]=\"bufferMultiplier\"\n>\n <table mat-table [dataSource]=\"virtualScrollDataSource\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [aupTableRowAttributes]=\"tableModel.getRowAttributes(row)\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n<!-- Layout doesn't work yet - probably needs fixed footer row height -->\n<!-- <ng-container matColumnDef=\"sticky-footer\" *ngIf=\"tableModel.footerRowPortalRef\">-->\n<!-- <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"columns$.length\">-->\n<!-- <ng-container [cdkPortalOutlet]=\"tableModel.footerRowPortalRef.portal\" (attached)=\"initialiseFooter($event)\"></ng-container>-->\n<!-- </td>-->\n<!-- <tr mat-footer-row *matFooterRowDef=\"['sticky-footer']; sticky: true\"></tr>-->\n<!-- </ng-container>-->\n\n\n </table>\n</cdk-virtual-scroll-viewport>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host[scrollMode=virtual] cdk-virtual-scroll-viewport{flex:1}:host[scrollMode=virtual] table th{height:var(--aup-table-header-height);max-height:var(--aup-table-header-height);min-height:var(--aup-table-header-height)}:host[scrollMode=virtual] table td{height:var(--aup-table-row-height);max-height:var(--aup-table-row-height);min-height:var(--aup-table-row-height)}:host[scrollMode=classic]{min-height:0}:host[scrollMode=classic] .classic-scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"] }]
206
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
207
+ type: Inject,
208
+ args: [AUP_TABLE_VIRTUAL_SCROLL_BUFFER_MULTIPLIER]
209
+ }, {
210
+ type: Optional
211
+ }] }]; }, propDecorators: { data$: [{
113
212
  type: Input
114
213
  }], tableModel: [{
115
214
  type: Input
215
+ }], footerRow: [{
216
+ type: Input
116
217
  }], showHeader$: [{
117
218
  type: Input
118
219
  }], showHeader: [{
119
220
  type: Input
120
- }], visibleRowCount: [{
121
- type: Output
122
221
  }], trackBy: [{
123
222
  type: Input
124
- }], enableScrolling: [{
223
+ }], scrollMode$: [{
224
+ type: Input
225
+ }], scrollMode: [{
125
226
  type: Input
126
227
  }, {
127
228
  type: HostBinding,
128
- args: ["class.enable-scrolling"]
229
+ args: ["attr.scrollMode"]
230
+ }], scrollViewport: [{
231
+ type: ViewChild,
232
+ args: [CdkVirtualScrollViewport]
129
233
  }], baseCssClass: [{
130
234
  type: HostBinding,
131
235
  args: ["class"]
132
236
  }], hideHeader: [{
133
237
  type: HostBinding,
134
238
  args: ["class.hide-header"]
239
+ }], headerHeightCssVar: [{
240
+ type: HostBinding,
241
+ args: ["style.--aup-table-header-height"]
242
+ }], rowHeightCssVar: [{
243
+ type: HostBinding,
244
+ args: ["style.--aup-table-row-height"]
135
245
  }] } });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9yZW5kZXJlci90YWJsZS1ib2R5L3RhYmxlLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvdGFibGUtYm9keS90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFDTCxHQUFHLEVBQ0gsU0FBUyxFQUdULGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsT0FBTyxFQUNQLGlCQUFpQixFQUVqQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0FBUTlELE1BQU0sT0FBTyxrQkFBd0IsU0FBUSxvQkFBb0I7SUFHdEQsMEJBQVEsT0FBTyxDQUFDLENBQUEsU0FBYyxDQUFBLENBQUMsQ0FBQztJQUFoQyxJQUFBLEtBQUssMkNBQTJCO0lBQWhDLElBQUEsS0FBSyxpREFBMkI7SUFHaEMsK0JBQWEsT0FBTyxDQUFDLENBQUEsa0JBQXVCLENBQUEsQ0FBQyxDQUFDO0lBQTlDLElBQUEsVUFBVSxnREFBb0M7SUFBOUMsSUFBQSxVQUFVLHNEQUFvQztJQUc5QyxnQ0FBYyxPQUFPLENBQUMsQ0FBQSxVQUFtQixDQUFBLENBQUMsQ0FBQztJQUEzQyxJQUFBLFdBQVcsaURBQWdDO0lBQTNDLElBQUEsV0FBVyx1REFBZ0M7SUFHM0MsK0JBQWEsSUFBSSxDQUFDO0lBQWxCLElBQUEsVUFBVSxnREFBUTtJQUFsQixJQUFBLFVBQVUsc0RBQVE7SUFHbEIsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFHdEQsT0FBTyxDQUFtQztJQUUxQzs7OztPQUlHO0lBR0gsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUV4QixRQUFRLENBQW1DO0lBQzNDLFVBQVUsQ0FBeUI7SUFDM0IsWUFBWSxDQUEwQztJQUVyRCxpQkFBaUIsQ0FBcUI7SUFHL0Msa0VBQWtFO0lBQ2pELGFBQWEsR0FBRyxJQUFJLGlCQUFpQixDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFVBQVUsR0FBRyxJQUFJLGlCQUFpQixDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBR2hFLFlBQVksR0FBRyxxQkFBcUIsQ0FBQztJQUVyQyxZQUFZLFVBQXNCLEVBQUUsTUFBYztRQUNoRCxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzdELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEQsNEdBQTRHO1lBQzVHLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUN4RixPQUFPLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxDQUFDLEVBQUU7WUFDRCxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2pELGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ3hFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekMsQ0FBQyxFQUFFLEVBQUMsWUFBWSxFQUFFLHdCQUF3QixFQUFDLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQ0ksVUFBVTtRQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzFCLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBUTtRQUNoQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxXQUE2QixFQUFFLEdBQVE7UUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFdBQVc7SUFDWCxvQkFBb0IsQ0FBQyxRQUFnQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxRQUFRLENBQUM7SUFDbEYsQ0FBQztJQUVELFdBQVc7SUFDWCxtQkFBbUIsQ0FBQyxRQUFnQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxRQUFRLENBQUM7SUFDakYsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLE1BQU0sT0FBTyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDbEYsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzt1R0F2R1Usa0JBQWtCOzJGQUFsQixrQkFBa0Isb2JDdEIvQix5dkRBc0NBOztBRGJXO0lBREMsT0FBTyxFQUFFOzsrQ0FDc0I7QUFHaEM7SUFEQyxPQUFPLEVBQUU7O29EQUNvQztBQUc5QztJQURDLE9BQU8sRUFBRTs7cURBQ2lDO0FBRzNDO0lBREMsaUJBQWlCLEVBQUU7O29EQUNGOzJGQVpoQixrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCO3NIQU9qQixLQUFLO3NCQURiLEtBQUs7Z0JBSUcsVUFBVTtzQkFEbEIsS0FBSztnQkFJRyxXQUFXO3NCQURuQixLQUFLO2dCQUlHLFVBQVU7c0JBRGxCLEtBQUs7Z0JBSUcsZUFBZTtzQkFEdkIsTUFBTTtnQkFJUCxPQUFPO3NCQUROLEtBQUs7Z0JBVU4sZUFBZTtzQkFGZCxLQUFLOztzQkFDTCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFlckMsWUFBWTtzQkFEWCxXQUFXO3VCQUFDLE9BQU87Z0JBZ0NoQixVQUFVO3NCQURiLFdBQVc7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBOZ1pvbmUsIE9uSW5pdCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgRHNsLFxuICBMaXN0TW9kZWwsXG4gIExpc3RNb2RlbENoYWluLFxuICBNYXBNb2RlbENoYWluLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgUHJveGlmeSxcbiAgcHJveGlmeSxcbiAgU3RvcmVJblZhbHVlTW9kZWwsXG4gIFRyYW5zYWN0aW9uT2JzZXJ2ZXIsXG4gIFZhbHVlTW9kZWxcbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQge1Jlc2l6ZUF3YXJlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vcmVzaXplLWF3YXJlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtBYnN0cmFjdFRhYmxlTW9kZWx9IGZyb20gXCIuLi8uLi9hYnN0cmFjdC10YWJsZS1tb2RlbFwiO1xuaW1wb3J0IHtDb2x1bW5Nb2RlbH0gZnJvbSBcIi4uLy4uL2NvbHVtbi9jb2x1bW4tbW9kZWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImF1cC10YWJsZS1ib2R5XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGFibGUtYm9keS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdGFibGUtYm9keS5jb21wb25lbnQuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVCb2R5Q29tcG9uZW50PFJvdz4gZXh0ZW5kcyBSZXNpemVBd2FyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgQFByb3hpZnkoKVxuICBhY2Nlc3NvciBkYXRhJCA9IHByb3hpZnkoTGlzdE1vZGVsPFJvdz4pO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgdGFibGVNb2RlbCA9IHByb3hpZnkoQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4pO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3Igc2hvd0hlYWRlciQgPSBwcm94aWZ5KFZhbHVlTW9kZWw8Ym9vbGVhbj4pO1xuXG4gIEBJbnB1dCgpIEBTdG9yZUluVmFsdWVNb2RlbCgpXG4gIGFjY2Vzc29yIHNob3dIZWFkZXIgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSB2aXNpYmxlUm93Q291bnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBASW5wdXQoKVxuICB0cmFja0J5OiAoaW5kZXg6IG51bWJlciwgaXRlbTogUm93KSA9PiBhbnlcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHNjcm9sbGluZy4gIE9uY2UgZW5hYmxlZCB0aGUgdGFibGUgd2lsbCBoYXZlIDAgaW1wbGljaXQgaGVpZ2h0LiAgWW91IHdpbGwgZWl0aGVyXG4gICAqIG5lZWQgdG8gc2V0IGl0IGV4cGxpY2l0bHkgZS5nLiBoZWlnaHQ6IDQwMHB4OyBvciBieSB1c2luZyBmbGV4IG9yIGdyaWQgbGF5b3V0IHRvIG1ha2UgaXQgZmlsbCBpdCdzXG4gICAqIGNvbnRhaW5tZW50IGFyZWEuXG4gICAqL1xuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5lbmFibGUtc2Nyb2xsaW5nXCIpXG4gIGVuYWJsZVNjcm9sbGluZyA9IGZhbHNlO1xuXG4gIGNvbHVtbnMkOiBMaXN0TW9kZWxDaGFpbjxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgY29sdW1uSWRzJDogTGlzdE1vZGVsQ2hhaW48c3RyaW5nPjtcbiAgcHJpdmF0ZSBjb2x1bW5zQnlJZCQ6IE1hcE1vZGVsQ2hhaW48c3RyaW5nLCBDb2x1bW5Nb2RlbDxSb3c+PjtcblxuICByZWFkb25seSBfdmlzaWJsZVJvd0NvdW50JDogVmFsdWVNb2RlbDxudW1iZXI+O1xuXG5cbiAgLy8gVE9ETzogc3VwcG9ydCB1c2VyIGRlZmluZWQgaGVhZGVyIGFuZCByb3cgaGVpZ2h0cyB2aWEgY3NzIHZhcnMuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySGVpZ2h0JCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxudW1iZXI+KDI5KTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3dIZWlnaHQkID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPG51bWJlcj4oNDApO1xuXG4gIEBIb3N0QmluZGluZyhcImNsYXNzXCIpXG4gIGJhc2VDc3NDbGFzcyA9IFwiYXVwLXRhYmxlLWNvbXBvbmVudFwiO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5nWm9uZTogTmdab25lKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgbmdab25lKTtcbiAgICBjb25zdCB7Y2hhaW4sIHdoZW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuXG4gICAgY29uc3QgYWN0dWFsSGVhZGVySGVpZ2h0JCA9IGNoYWluKHRoaXMuc2hvd0hlYWRlciQpLm1hcChzaG93ID0+IHtcbiAgICAgIHJldHVybiBzaG93ID8gdGhpcy5oZWFkZXJIZWlnaHQkLnZhbHVlIDogMDtcbiAgICB9LCB7ZGVwZW5kc09uOiB0aGlzLmhlYWRlckhlaWdodCR9KTtcblxuICAgIHRoaXMuX3Zpc2libGVSb3dDb3VudCQgPSBjaGFpbih0aGlzLmJvdW5kcyQpLm1hcChib3VuZHMgPT4ge1xuICAgICAgLy8gVE9ETzogdGhpcyBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IGFueSBjc3Mgc3R5bGluZyBhZGp1c3RtZW50cyBldGMuICBXaWxsIGludmVzdGlnYXRlIGlmIGl0J3MgYW4gaXNzdWUuXG4gICAgICBjb25zdCByYXdSb3dDb3VudCA9IChib3VuZHMuaGVpZ2h0IC0gYWN0dWFsSGVhZGVySGVpZ2h0JC52YWx1ZSkgLyB0aGlzLnJvd0hlaWdodCQudmFsdWU7XG4gICAgICByZXR1cm4gcmF3Um93Q291bnQgPCAxID8gMCA6IE1hdGguZmxvb3IocmF3Um93Q291bnQpO1xuICAgIH0sIHtcbiAgICAgIGRlcGVuZHNPbjogW2FjdHVhbEhlYWRlckhlaWdodCQsIHRoaXMucm93SGVpZ2h0JF0sXG4gICAgICBwb3N0cG9uZVdoaWxlOiBjaGFpbih0aGlzLmJvdW5kcyQpLnBsdWNrTnVtZXJpYyhcImhlaWdodFwiKS5pc0xlc3NUaGFuKDEpXG4gICAgfSk7XG5cbiAgICB3aGVuKHRoaXMuX3Zpc2libGVSb3dDb3VudCQpLmNoYW5nZXModmlzaWJsZVJvd3MgPT4ge1xuICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQuZW1pdCh2aXNpYmxlUm93cyk7XG4gICAgfSwge2luaXRpYWxWYWx1ZTogXCJ0cmlnZ2VyQ2hhbmdlVW5sZXNzTmlsXCJ9KTtcblxuICAgIHRoaXMub25Jbml0KCgpID0+IHtcbiAgICAgIHRoaXMuY29sdW1ucyQgPSBjaGFpbih0aGlzLnRhYmxlTW9kZWwuY29sdW1ucyk7XG4gICAgICB0aGlzLmNvbHVtbklkcyQgPSBjaGFpbih0aGlzLmNvbHVtbnMkKS5wbHVjayhcImNvbHVtbklkXCIpO1xuICAgICAgdGhpcy5jb2x1bW5zQnlJZCQgPSBjaGFpbih0aGlzLmNvbHVtbnMkKS5pbmRleEJ5KCdjb2x1bW5JZCcpO1xuICAgIH0pXG4gIH1cblxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5oaWRlLWhlYWRlclwiKVxuICBnZXQgaGlkZUhlYWRlcigpIHtcbiAgICByZXR1cm4gIXRoaXMuc2hvd0hlYWRlcjtcbiAgfVxuXG4gIGlzRWRpdGluZyhyb3c6IFJvdyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudGFibGVNb2RlbC5nZXRFZGl0U2Vzc2lvbkZvcihyb3cpO1xuICB9XG5cbiAgbm90aWZ5Q2VsbENsaWNrZWQoY29sdW1uTW9kZWw6IENvbHVtbk1vZGVsPFJvdz4sIHJvdzogUm93KSB7XG4gICAgdGhpcy50YWJsZU1vZGVsLl9ub3RpZnlDZWxsQ2xpY2tlZChjb2x1bW5Nb2RlbCwgcm93KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGlzRmlyc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZU1vZGVsLmZpcnN0VmlzaWJsZUNvbHVtbiQucXVlcnkoKS52YWx1ZT8uY29sdW1uSWQgPT09IGNvbHVtbklkO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgaXNMYXN0VmlzaWJsZUNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVNb2RlbC5sYXN0VmlzaWJsZUNvbHVtbiQucXVlcnkoKS52YWx1ZT8uY29sdW1uSWQgPT09IGNvbHVtbklkO1xuICB9XG5cbiAgZ2V0Q29sdW1uQ2xhc3Nlcyhjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtgYXVwLWNvbC0ke3RoaXMuY29sdW1uc0J5SWQkLmdldChjb2x1bW5JZCkuZGFzaGVyaXNlZENvbHVtbklkfWBdO1xuICAgIGlmICh0aGlzLmlzRmlyc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkKSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwiZmlyc3QtdmlzaWJsZS1jb2x1bW5cIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTGFzdFZpc2libGVDb2x1bW4oY29sdW1uSWQpKSB7XG4gICAgICBjbGFzc2VzLnB1c2goXCJsYXN0LXZpc2libGUtY29sdW1uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNjcm9sbC1jb250YWluZXJcIj5cbiAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhJC52YWx1ZVwiIFt0cmFja0J5XT1cInRyYWNrQnlcIj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zJC52YWx1ZTsgaW5kZXggYXMgaW5kZXg7IGZpcnN0IGFzIGZpcnN0OyBsYXN0IGFzIGxhc3RcIlxuICAgICAgICAgICAgICAgICAgbWF0Q29sdW1uRGVmPVwie3tjb2x1bW4uY29sdW1uSWR9fVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MuZmxleF09XCJjb2x1bW4uaXNGbGV4KClcIiBbY2xhc3MuaGlkZV09XCIhY29sdW1uLmlzVmlzaWJsZSgpXCI+XG4gICAgICAgIDxhdXAtdGFibGUtaGVhZGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHVtbi1pbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sdW1uLWlkXT1cImNvbHVtbi5jb2x1bW5JZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldENvbHVtbkNsYXNzZXMoY29sdW1uLmNvbHVtbklkKVwiXG4gICAgICAgID48L2F1cC10YWJsZS1oZWFkZXItY2VsbD5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgKGNsaWNrKT1cIm5vdGlmeUNlbGxDbGlja2VkKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgW2NsYXNzLmVuYWJsZS1jdXJzb3JdPVwidGFibGVNb2RlbC5pc0N1cnNvckVuYWJsZWQoY29sdW1uKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiY29sdW1uLmlzRmxleCgpXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZV09XCIhY29sdW1uLmlzVmlzaWJsZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGF1cC10YWJsZS1jZWxsIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZU1vZGVsXT1cInRhYmxlTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRTZXNzaW9uXT1cInRhYmxlTW9kZWwuZ2V0RWRpdFNlc3Npb25Gb3Iocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4taW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sdW1uLWlkXT1cImNvbHVtbi5jb2x1bW5JZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0Q29sdW1uQ2xhc3Nlcyhjb2x1bW4uY29sdW1uSWQpXCJcbiAgICAgICAgPjwvYXVwLXRhYmxlLWNlbGw+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJjb2x1bW5JZHMkLnZhbHVlOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb2x1bW5JZHMkLnZhbHVlOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwidGFibGVNb2RlbC5nZXRSb3dDbGFzc2VzKHJvdylcIlxuICAgICAgICBbY2xhc3MuZW5hYmxlLWhvdmVyXT1cInRhYmxlTW9kZWwuaXNIb3ZlckVuYWJsZWQoKVwiXG4gICAgICAgIFthdHRyLmF1cC1yb3ctaWRdPVwidHJhY2tCeShpLCByb3cpXCJcbiAgICA+PC90cj5cblxuICA8L3RhYmxlPlxuPC9kaXY+XG5cbiJdfQ==
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9yZW5kZXJlci90YWJsZS1ib2R5L3RhYmxlLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvdGFibGUtYm9keS90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBRUwsU0FBUyxFQUVULFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUVMLFFBQVEsRUFDUixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEdBQUcsRUFDSCxTQUFTLEVBR1QsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7O0FBRTdELE1BQU0sQ0FBQyxNQUFNLDBDQUEwQyxHQUFHLElBQUksY0FBYyxDQUFTLDRDQUE0QyxDQUFDLENBQUE7QUFNbEksTUFBTSxPQUFPLDJCQUEyQjtJQUtQ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O3VCQUFDLE9BQU87Z0JBa0RoQixVQUFVO3NCQURiLFdBQVc7dUJBQUMsbUJBQW1CO2dCQU01QixrQkFBa0I7c0JBRHJCLFdBQVc7dUJBQUMsaUNBQWlDO2dCQU0xQyxlQUFlO3NCQURsQixXQUFXO3VCQUFDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2RrUG9ydGFsT3V0bGV0QXR0YWNoZWRSZWZ9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XG5pbXBvcnQge0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9zY3JvbGxpbmdcIjtcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgVmlld0NoaWxkXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBEc2wsXG4gIExpc3RNb2RlbCxcbiAgTGlzdE1vZGVsQ2hhaW4sXG4gIE1hcE1vZGVsQ2hhaW4sXG4gIE11dGFibGVWYWx1ZU1vZGVsLFxuICBQcm94aWZ5LFxuICBwcm94aWZ5LFxuICBTdG9yZUluVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbFxufSBmcm9tIFwiQGNvb2xvbi9wZWN0aW5cIjtcbmltcG9ydCB7VGFibGVWaXJ0dWFsU2Nyb2xsRGF0YVNvdXJjZX0gZnJvbSBcIm5nLXRhYmxlLXZpcnR1YWwtc2Nyb2xsXCI7XG5pbXBvcnQge1Jlc2l6ZUF3YXJlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vcmVzaXplLWF3YXJlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtBYnN0cmFjdFRhYmxlTW9kZWx9IGZyb20gXCIuLi8uLi9hYnN0cmFjdC10YWJsZS1tb2RlbFwiO1xuaW1wb3J0IHtDb2x1bW5Nb2RlbH0gZnJvbSBcIi4uLy4uL2NvbHVtbi9jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7Rm9vdGVyUm93TW9kZWx9IGZyb20gXCIuLi8uLi9mb290ZXIvZm9vdGVyLXJvdy1tb2RlbFwiO1xuXG5leHBvcnQgY29uc3QgQVVQX1RBQkxFX1ZJUlRVQUxfU0NST0xMX0JVRkZFUl9NVUxUSVBMSUVSID0gbmV3IEluamVjdGlvblRva2VuPG51bWJlcj4oXCJBVVBfVEFCTEVfVklSVFVBTF9TQ1JPTExfQlVGRkVSX01VTFRJUExJRVJcIilcblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2F1cFRhYmxlUm93QXR0cmlidXRlc11cIixcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVSb3dBdHRyaWJ1dGVzRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKVxuICBhdXBUYWJsZVJvd0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYXR0ciBpbiB0aGlzLmF1cFRhYmxlUm93QXR0cmlidXRlcykge1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHIsIHRoaXMuYXVwVGFibGVSb3dBdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICB9XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImF1cC10YWJsZS1ib2R5XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGFibGUtYm9keS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdGFibGUtYm9keS5jb21wb25lbnQuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVCb2R5Q29tcG9uZW50PFJvdyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBSZXNpemVBd2FyZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgZGF0YSQ6IExpc3RNb2RlbDxSb3c+ID0gcHJveGlmeShMaXN0TW9kZWw8Um93Pik7XG5cbiAgQElucHV0KCkgQFByb3hpZnkoKVxuICBhY2Nlc3NvciB0YWJsZU1vZGVsOiBBYnN0cmFjdFRhYmxlTW9kZWw8Um93PiA9IHByb3hpZnkoQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4pO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgZm9vdGVyUm93OiBGb290ZXJSb3dNb2RlbC5JbXBsPGFueT4gPSBwcm94aWZ5KEZvb3RlclJvd01vZGVsLkltcGw8YW55Pik7XG5cbiAgQElucHV0KCkgQFByb3hpZnkoKVxuICBhY2Nlc3NvciBzaG93SGVhZGVyJDogVmFsdWVNb2RlbDxib29sZWFuPiA9IHByb3hpZnkoVmFsdWVNb2RlbDxib29sZWFuPik7XG5cbiAgQElucHV0KCkgQFN0b3JlSW5WYWx1ZU1vZGVsKClcbiAgYWNjZXNzb3Igc2hvd0hlYWRlciA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgdHJhY2tCeTogKGluZGV4OiBudW1iZXIsIGl0ZW06IFJvdykgPT4gYW55XG5cbiAgQElucHV0KCkgQFByb3hpZnkoKVxuICBhY2Nlc3NvciBzY3JvbGxNb2RlJDogVmFsdWVNb2RlbDxUYWJsZUJvZHlDb21wb25lbnQuU2Nyb2xsTW9kZT4gPSBwcm94aWZ5KFZhbHVlTW9kZWw8VGFibGVCb2R5Q29tcG9uZW50LlNjcm9sbE1vZGU+KTtcblxuICBASW5wdXQoKSBAU3RvcmVJblZhbHVlTW9kZWwoKVxuICBASG9zdEJpbmRpbmcoXCJhdHRyLnNjcm9sbE1vZGVcIilcbiAgYWNjZXNzb3Igc2Nyb2xsTW9kZTogVGFibGVCb2R5Q29tcG9uZW50LlNjcm9sbE1vZGUgPSBcIm5vbmVcIjtcblxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydClcbiAgc2Nyb2xsVmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydFxuXG4gIGNvbHVtbnMkOiBMaXN0TW9kZWxDaGFpbjxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgY29sdW1uSWRzJDogTGlzdE1vZGVsQ2hhaW48c3RyaW5nPjtcblxuICBwcml2YXRlIGNvbHVtbnNCeUlkJDogTWFwTW9kZWxDaGFpbjxzdHJpbmcsIENvbHVtbk1vZGVsPFJvdz4+O1xuXG5cbiAgLy8gVE9ETzogc3VwcG9ydCB1c2VyIGRlZmluZWQgaGVhZGVyIGFuZCByb3cgaGVpZ2h0cyB2aWEgY3NzIHZhcnMuXG4gIHByb3RlY3RlZCByZWFkb25seSBoZWFkZXJIZWlnaHQkID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPG51bWJlcj4oNDgpO1xuICBwcm90ZWN0ZWQgcm93SGVpZ2h0JCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxudW1iZXI+KDQ0KTtcblxuICBASG9zdEJpbmRpbmcoXCJjbGFzc1wiKVxuICBiYXNlQ3NzQ2xhc3MgPSBcImF1cC10YWJsZS1jb21wb25lbnRcIjtcblxuICBwcm90ZWN0ZWQgdmlydHVhbFNjcm9sbERhdGFTb3VyY2UgPSBuZXcgVGFibGVWaXJ0dWFsU2Nyb2xsRGF0YVNvdXJjZTxSb3c+KCk7XG4gIHByaXZhdGUgdmlydHVhbFNjcm9sbEFjdGl2ZSQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWwoZmFsc2UpO1xuICBwcml2YXRlIHNjcm9sbFRpbWVvdXQ6IGFueTtcblxuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQVVQX1RBQkxFX1ZJUlRVQUxfU0NST0xMX0JVRkZFUl9NVUxUSVBMSUVSKSBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgYnVmZmVyTXVsdGlwbGllcjogbnVtYmVyID0gMSkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3Qge2NoYWluLCB3aGVuLCBvYnNlcnZlfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcblxuICAgIGNvbnN0IGFjdHVhbEhlYWRlckhlaWdodCQgPSBjaGFpbih0aGlzLnNob3dIZWFkZXIkKS5tYXAoc2hvdyA9PiB7XG4gICAgICByZXR1cm4gc2hvdyA/IHRoaXMuaGVhZGVySGVpZ2h0JC52YWx1ZSA6IDA7XG4gICAgfSwge2RlcGVuZHNPbjogdGhpcy5oZWFkZXJIZWlnaHQkfSk7XG5cblxuICAgIC8vIHBlcmZvcm1hbmNlIGlzIHRlcnJpYmxlIGlmIHRoZSBkYXRhIGNoYW5nZXMgd2hpbGUgd2UncmUgc2Nyb2xsaW5nLCBzbyB3ZSBwb3N0cG9uZSB1cGRhdGVzIHVudGlsXG4gICAgLy8gc2Nyb2xsaW5nIHN0b3BzLlxuICAgIGNvbnN0IGRlbGF5ZWREYXRlYSQgPSBjaGFpbih0aGlzLmRhdGEkKS5wb3N0cG9uZVdoaWxlKHRoaXMudmlydHVhbFNjcm9sbEFjdGl2ZSQpXG4gICAgd2hlbihkZWxheWVkRGF0ZWEkKS5jaGFuZ2VzKGRlbGF0ZWREYXRhID0+IHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbERhdGFTb3VyY2UuZGF0YSA9IGRlbGF0ZWREYXRhO1xuICAgICAgdGhpcy5zY2hlZHVsZVRhYmxlSGVpZ2h0Q2hlY2soKTtcbiAgICB9LCB7aW5pdGlhbFZhbHVlOiBcImV2YWx1YXRlXCJ9KVxuXG5cbiAgICB0aGlzLm9uSW5pdCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMkID0gY2hhaW4odGhpcy50YWJsZU1vZGVsLnZpc2libGVDb2x1bW5zJCk7XG4gICAgICB0aGlzLmNvbHVtbklkcyQgPSBjaGFpbih0aGlzLmNvbHVtbnMkKS5wbHVjayhcImNvbHVtbklkXCIpO1xuICAgICAgdGhpcy5jb2x1bW5zQnlJZCQgPSBjaGFpbih0aGlzLmNvbHVtbnMkKS5pbmRleEJ5KCdjb2x1bW5JZCcpO1xuICAgIH0pO1xuXG4gICAgLy8gY29uc3QgdHhvID0gbmV3IFRyYW5zYWN0aW9uT2JzZXJ2ZXIoe3ZlcmJvc2U6IGZhbHNlfSkub25FdmVudChlID0+IGNvbnNvbGUubG9nKGUubmFtZSwgZS5wYXlsb2FkKSk7XG4gICAgLy8gdHhvLm9ic2VydmUoJ3RoaXMudmlydHVhbFNjcm9sbFJvd1JhbmdlJCcsIHRoaXMudmlydHVhbFNjcm9sbFJvd1JhbmdlJCk7XG4gICAgLy8gdHhvLm9ic2VydmUoJ3RoaXMudmlydHVhbFNjcm9sbFNwYWNlclNpemUkJywgdGhpcy52aXJ0dWFsU2Nyb2xsU3BhY2VyU2l6ZSQpO1xuICAgIC8vIHR4by5vYnNlcnZlKCd0aGlzLnZpcnR1YWxSb3dzJCcsIHRoaXMudmlydHVhbFJvd3MkKTtcbiAgICAvLyB0eG8ub2JzZXJ2ZSgndGhpcy50YWJsZUJvZHlIZWlnaHQkJywgdGhpcy50YWJsZUJvZHlIZWlnaHQkKTtcbiAgICAvLyB0eG8ub2JzZXJ2ZSgndGhpcy52aXJ0dWFsU2Nyb2xsQWN0aXZlJCcsIHRoaXMudmlydHVhbFNjcm9sbEFjdGl2ZSQpO1xuXG4gIH1cblxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgaWYgKHRoaXMuc2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIGNvbnN0IHtvYnNlcnZlfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMubm90aWZ5U2Nyb2xsZWQoKSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuaGlkZS1oZWFkZXJcIilcbiAgZ2V0IGhpZGVIZWFkZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLnNob3dIZWFkZXI7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoXCJzdHlsZS4tLWF1cC10YWJsZS1oZWFkZXItaGVpZ2h0XCIpXG4gIGdldCBoZWFkZXJIZWlnaHRDc3NWYXIoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuaGVhZGVySGVpZ2h0JC52YWx1ZX1weGBcbiAgfVxuXG4gIEBIb3N0QmluZGluZyhcInN0eWxlLi0tYXVwLXRhYmxlLXJvdy1oZWlnaHRcIilcbiAgZ2V0IHJvd0hlaWdodENzc1ZhcigpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5yb3dIZWlnaHQkLnZhbHVlfXB4YFxuICB9XG5cbiAgaXNFZGl0aW5nKHJvdzogUm93KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50YWJsZU1vZGVsLmdldEVkaXRTZXNzaW9uRm9yKHJvdyk7XG4gIH1cblxuICBub3RpZnlDZWxsQ2xpY2tlZChjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw8Um93Piwgcm93OiBSb3cpIHtcbiAgICB0aGlzLnRhYmxlTW9kZWwuX25vdGlmeUNlbGxDbGlja2VkKGNvbHVtbk1vZGVsLCByb3cpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcblxuICBpc0ZpcnN0VmlzaWJsZUNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVNb2RlbC5maXJzdFZpc2libGVDb2x1bW4kLnF1ZXJ5KCkudmFsdWU/LmNvbHVtbklkID09PSBjb2x1bW5JZDtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG5cbiAgaXNMYXN0VmlzaWJsZUNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVNb2RlbC5sYXN0VmlzaWJsZUNvbHVtbiQucXVlcnkoKS52YWx1ZT8uY29sdW1uSWQgPT09IGNvbHVtbklkO1xuICB9XG5cbiAgZ2V0Q29sdW1uQ2xhc3Nlcyhjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtgYXVwLWNvbC0ke3RoaXMuY29sdW1uc0J5SWQkLmdldChjb2x1bW5JZCkuZGFzaGVyaXNlZENvbHVtbklkfWBdO1xuICAgIGlmICh0aGlzLmlzRmlyc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkKSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwiZmlyc3QtdmlzaWJsZS1jb2x1bW5cIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTGFzdFZpc2libGVDb2x1bW4oY29sdW1uSWQpKSB7XG4gICAgICBjbGFzc2VzLnB1c2goXCJsYXN0LXZpc2libGUtY29sdW1uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVUYWJsZUhlaWdodENoZWNrKHdhaXRNaWxsaXMgPSA1MCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGJvZHkgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidGJvZHlcIikgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBib2R5SGVpZ2h0ID0gdGJvZHkub2Zmc2V0SGVpZ2h0O1xuICAgICAgaWYgKHRoaXMuZGF0YSQubGVuZ3RoID4gMCAmJiBib2R5SGVpZ2h0IDwgdGhpcy5yb3dIZWlnaHQkLnZhbHVlKSB7XG4gICAgICAgIC8vIEhhY2tzIHRvIGdldCBvdXIgdmlydHVhbCBzY3JvbGwgdG8gcmVwYWludFxuICAgICAgICAvLyBMb2dnZXIuZ2V0KHRoaXMpLmxvZyhgcm93Q291bnQ9JHt0aGlzLmRhdGEkLmxlbmd0aH0sIGJvZHlIZWlnaHQ9JHtib2R5SGVpZ2h0fSAtPiB2aXJ0dWFsIHRhYmxlIG5vdCByZW5kZXJpbmcsIHRyaWdnZXJpbmcgcmVzaXplIHRvIGZvcmNlIHJlcGFpbnRgKVxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTtcbiAgICAgICAgaWYgKHdhaXRNaWxsaXMgPCA1MDApIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlVGFibGVIZWlnaHRDaGVjayh3YWl0TWlsbGlzICsgNTApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgd2FpdE1pbGxpcylcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5U2Nyb2xsZWQoKSB7XG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsQWN0aXZlJC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5jbGVhclNjcm9sbFRpbWVvdXQoKTtcbiAgICB0aGlzLnNjcm9sbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZpcnR1YWxTY3JvbGxBY3RpdmUkLnZhbHVlID0gZmFsc2U7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTY3JvbGxUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnNjcm9sbFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRpbWVvdXQpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpc2VGb290ZXIoJGV2ZW50OiBDZGtQb3J0YWxPdXRsZXRBdHRhY2hlZFJlZikge1xuICAgIGNvbnN0IHBvcnRhbFJlZiA9ICRldmVudCBhcyBDb21wb25lbnRSZWY8YW55PjtcbiAgICB0aGlzLmZvb3RlclJvdy5vbkluaXQocG9ydGFsUmVmLmluc3RhbmNlKVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IFByb3hpZnkgPSBQcm94aWZ5O1xufVxuXG5cbmV4cG9ydCBuYW1lc3BhY2UgVGFibGVCb2R5Q29tcG9uZW50IHtcbiAgZXhwb3J0IHR5cGUgU2Nyb2xsTW9kZSA9IFwibm9uZVwiIHwgXCJjbGFzc2ljXCIgfCBcInZpcnR1YWxcIjtcbn1cbiIsIlxuPGRpdiBjbGFzcz1cImNsYXNzaWMtc2Nyb2xsLWNvbnRhaW5lclwiICpuZ0lmPVwic2Nyb2xsTW9kZSQudmFsdWUgIT09ICd2aXJ0dWFsJ1wiPlxuICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImRhdGEkLnZhbHVlXCIgW3RyYWNrQnldPVwidHJhY2tCeVwiIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnMkLnZhbHVlOyBpbmRleCBhcyBpbmRleDsgZmlyc3QgYXMgZmlyc3Q7IGxhc3QgYXMgbGFzdFwiXG4gICAgICAgICAgICAgICAgICBtYXRDb2x1bW5EZWY9XCJ7e2NvbHVtbi5jb2x1bW5JZH19XCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzcy5mbGV4XT1cImNvbHVtbi5pc0ZsZXgoKVwiIFtjbGFzcy5oaWRlXT1cIiFjb2x1bW4uaXNWaXNpYmxlKClcIj5cbiAgICAgICAgPGF1cC10YWJsZS1oZWFkZXItY2VsbCBbY29sdW1uXT1cIiRhbnkoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sdW1uLWluZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4taWRdPVwiY29sdW1uLmNvbHVtbklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0Q29sdW1uQ2xhc3Nlcyhjb2x1bW4uY29sdW1uSWQpXCJcbiAgICAgICAgPjwvYXVwLXRhYmxlLWhlYWRlci1jZWxsPlxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwibm90aWZ5Q2VsbENsaWNrZWQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICBbY2xhc3MuZW5hYmxlLWN1cnNvcl09XCJ0YWJsZU1vZGVsLmlzQ3Vyc29yRW5hYmxlZChjb2x1bW4pXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJjb2x1bW4uaXNGbGV4KClcIlxuICAgICAgICAgIFtjbGFzcy5oaWRlXT1cIiFjb2x1bW4uaXNWaXNpYmxlKClcIlxuICAgICAgPlxuICAgICAgICA8YXVwLXRhYmxlLWNlbGwgW2NvbHVtbl09XCIkYW55KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlTW9kZWxdPVwiJGFueSh0YWJsZU1vZGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZWRpdFNlc3Npb25dPVwiJGFueSh0YWJsZU1vZGVsLmdldEVkaXRTZXNzaW9uRm9yKHJvdykpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHVtbi1pbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4taWRdPVwiY29sdW1uLmNvbHVtbklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRDb2x1bW5DbGFzc2VzKGNvbHVtbi5jb2x1bW5JZClcIlxuICAgICAgICA+PC9hdXAtdGFibGUtY2VsbD5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbklkcyQudmFsdWU7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtbklkcyQudmFsdWU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJ0YWJsZU1vZGVsLmdldFJvd0NsYXNzZXMocm93KVwiXG4gICAgICAgIFtjbGFzcy5lbmFibGUtaG92ZXJdPVwidGFibGVNb2RlbC5pc0hvdmVyRW5hYmxlZCgpXCJcbiAgICAgICAgW2F1cFRhYmxlUm93QXR0cmlidXRlc109XCJ0YWJsZU1vZGVsLmdldFJvd0F0dHJpYnV0ZXMocm93KVwiXG4gICAgICAgIFthdHRyLmF1cC1yb3ctaWRdPVwidHJhY2tCeShpLCByb3cpXCJcbiAgICA+PC90cj5cblxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RpY2t5LWZvb3RlclwiICpuZ0lmPVwiUHJveGlmeS5oYXNUYXJnZXQoZm9vdGVyUm93KVwiPlxuICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZiBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMkLmxlbmd0aFwiIFtuZ0NsYXNzXT1cIidmb290ZXItY2VsbCdcIj5cbiAgICAgICAgPGF1cC10YWJsZS1mb290ZXItcm93IFtyb3ddPVwiJGFueShmb290ZXJSb3cpXCI+PC9hdXAtdGFibGUtZm9vdGVyLXJvdz5cbiAgICAgIDwvdGQ+XG4gICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIlsnc3RpY2t5LWZvb3RlciddOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gIDwvdGFibGU+XG48L2Rpdj5cblxuPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCAgKm5nSWY9XCJzY3JvbGxNb2RlJC52YWx1ZSA9PT0gJ3ZpcnR1YWwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0dnNJdGVtU2l6ZV09XCJyb3dIZWlnaHQkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiaGVhZGVySGVpZ2h0JC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnVmZmVyTXVsdGlwbGllcl09XCJidWZmZXJNdWx0aXBsaWVyXCJcbj5cbiAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJ2aXJ0dWFsU2Nyb2xsRGF0YVNvdXJjZVwiIFt0cmFja0J5XT1cInRyYWNrQnlcIj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zJC52YWx1ZTsgaW5kZXggYXMgaW5kZXg7IGZpcnN0IGFzIGZpcnN0OyBsYXN0IGFzIGxhc3RcIlxuICAgICAgICAgICAgICAgICAgbWF0Q29sdW1uRGVmPVwie3tjb2x1bW4uY29sdW1uSWR9fVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MuZmxleF09XCJjb2x1bW4uaXNGbGV4KClcIiBbY2xhc3MuaGlkZV09XCIhY29sdW1uLmlzVmlzaWJsZSgpXCI+XG4gICAgICAgIDxhdXAtdGFibGUtaGVhZGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHVtbi1pbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sdW1uLWlkXT1cImNvbHVtbi5jb2x1bW5JZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldENvbHVtbkNsYXNzZXMoY29sdW1uLmNvbHVtbklkKVwiXG4gICAgICAgID48L2F1cC10YWJsZS1oZWFkZXItY2VsbD5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgKGNsaWNrKT1cIm5vdGlmeUNlbGxDbGlja2VkKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgW2NsYXNzLmVuYWJsZS1jdXJzb3JdPVwidGFibGVNb2RlbC5pc0N1cnNvckVuYWJsZWQoY29sdW1uKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiY29sdW1uLmlzRmxleCgpXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZV09XCIhY29sdW1uLmlzVmlzaWJsZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGF1cC10YWJsZS1jZWxsIFtjb2x1bW5dPVwiJGFueShjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZU1vZGVsXT1cIiRhbnkodGFibGVNb2RlbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRTZXNzaW9uXT1cIiRhbnkodGFibGVNb2RlbC5nZXRFZGl0U2Vzc2lvbkZvcihyb3cpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4taW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sdW1uLWlkXT1cImNvbHVtbi5jb2x1bW5JZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0Q29sdW1uQ2xhc3Nlcyhjb2x1bW4uY29sdW1uSWQpXCJcbiAgICAgICAgPjwvYXVwLXRhYmxlLWNlbGw+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJjb2x1bW5JZHMkLnZhbHVlOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb2x1bW5JZHMkLnZhbHVlOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwidGFibGVNb2RlbC5nZXRSb3dDbGFzc2VzKHJvdylcIlxuICAgICAgICBbY2xhc3MuZW5hYmxlLWhvdmVyXT1cInRhYmxlTW9kZWwuaXNIb3ZlckVuYWJsZWQoKVwiXG4gICAgICAgIFthdXBUYWJsZVJvd0F0dHJpYnV0ZXNdPVwidGFibGVNb2RlbC5nZXRSb3dBdHRyaWJ1dGVzKHJvdylcIlxuICAgICAgICBbYXR0ci5hdXAtcm93LWlkXT1cInRyYWNrQnkoaSwgcm93KVwiXG4gICAgPjwvdHI+XG5cbjwhLS0gICAgTGF5b3V0IGRvZXNuJ3Qgd29yayB5ZXQgLSBwcm9iYWJseSBuZWVkcyBmaXhlZCBmb290ZXIgcm93IGhlaWdodCAtLT5cbjwhLS0gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdGlja3ktZm9vdGVyXCIgKm5nSWY9XCJ0YWJsZU1vZGVsLmZvb3RlclJvd1BvcnRhbFJlZlwiPi0tPlxuPCEtLSAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zJC5sZW5ndGhcIj4tLT5cbjwhLS0gICAgICAgIDxuZy1jb250YWluZXIgW2Nka1BvcnRhbE91dGxldF09XCJ0YWJsZU1vZGVsLmZvb3RlclJvd1BvcnRhbFJlZi5wb3J0YWxcIiAoYXR0YWNoZWQpPVwiaW5pdGlhbGlzZUZvb3RlcigkZXZlbnQpXCI+PC9uZy1jb250YWluZXI+LS0+XG48IS0tICAgICAgPC90ZD4tLT5cbjwhLS0gICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIlsnc3RpY2t5LWZvb3RlciddOyBzdGlja3k6IHRydWVcIj48L3RyPi0tPlxuPCEtLSAgICA8L25nLWNvbnRhaW5lcj4tLT5cblxuXG4gIDwvdGFibGU+XG48L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuIl19