@indice/ng-components 0.2.160-beta.0 → 0.2.161

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.md +4 -4
  2. package/_styles.css +3643 -3643
  3. package/{esm2015/indice-ng-components.js → esm2020/indice-ng-components.mjs} +0 -0
  4. package/{esm2015/lib/controls/avatar-initials/avatar-initials.component.js → esm2020/lib/controls/avatar-initials/avatar-initials.component.mjs} +5 -8
  5. package/esm2020/lib/controls/collapsible-panel/collapsible-panel.component.mjs +20 -0
  6. package/esm2020/lib/controls/combobox/combobox.component.mjs +96 -0
  7. package/esm2020/lib/controls/date-picker/date-picker.component.mjs +292 -0
  8. package/esm2020/lib/controls/drop-down-menu/drop-down-menu.component.mjs +68 -0
  9. package/esm2020/lib/controls/kpi-tile/kpi-tile.component.mjs +36 -0
  10. package/esm2020/lib/controls/language-selection/language-selection.component.mjs +31 -0
  11. package/{esm2015/lib/controls/list-view/list-column.component.js → esm2020/lib/controls/list-view/list-column.component.mjs} +4 -4
  12. package/{esm2015/lib/controls/list-view/list-details-section.component.js → esm2020/lib/controls/list-view/list-details-section.component.mjs} +4 -4
  13. package/{esm2015/lib/controls/list-view/list-tile.component.js → esm2020/lib/controls/list-view/list-tile.component.mjs} +4 -4
  14. package/esm2020/lib/controls/list-view/list-view-empty-state.component.mjs +29 -0
  15. package/esm2020/lib/controls/list-view/list-view.component.mjs +192 -0
  16. package/esm2020/lib/controls/nav-links-list/nav-links-list.component.mjs +42 -0
  17. package/esm2020/lib/controls/notifications-indicator/notifications-indicator.component.mjs +73 -0
  18. package/esm2020/lib/controls/pager/pager.component.mjs +130 -0
  19. package/esm2020/lib/controls/side-pane/side-pane.component.mjs +72 -0
  20. package/esm2020/lib/controls/skeleton-loader/skeleton-loader.component.mjs +25 -0
  21. package/{esm2015/lib/controls/stepper/lib-step-info.directive.js → esm2020/lib/controls/stepper/lib-step-info.directive.mjs} +4 -4
  22. package/{esm2015/lib/controls/stepper/lib-step-label.directive.js → esm2020/lib/controls/stepper/lib-step-label.directive.mjs} +4 -4
  23. package/esm2020/lib/controls/stepper/lib-step.component.mjs +81 -0
  24. package/esm2020/lib/controls/stepper/lib-stepper.component.mjs +85 -0
  25. package/esm2020/lib/controls/stepper/types/step-selected-event.mjs +4 -0
  26. package/{esm2015/lib/controls/stepper/types/stepper-type.js → esm2020/lib/controls/stepper/types/stepper-type.mjs} +1 -1
  27. package/esm2020/lib/controls/tabs/lib-tab-group.component.mjs +59 -0
  28. package/esm2020/lib/controls/tabs/lib-tab.component.mjs +57 -0
  29. package/esm2020/lib/controls/toaster/toaster-container.component.mjs +28 -0
  30. package/esm2020/lib/controls/toaster/toaster.component.mjs +31 -0
  31. package/esm2020/lib/controls/toggle/toggle.component.mjs +64 -0
  32. package/esm2020/lib/controls/user-profile-menu/user-profile-menu.component.mjs +71 -0
  33. package/{esm2015/lib/directives/click-outside.directive.js → esm2020/lib/directives/click-outside.directive.mjs} +4 -4
  34. package/{esm2015/lib/directives/dynamic-component-host.directive.js → esm2020/lib/directives/dynamic-component-host.directive.mjs} +4 -4
  35. package/esm2020/lib/helpers/base-list.component.mjs +182 -0
  36. package/{esm2015/lib/icons.js → esm2020/lib/icons.mjs} +1 -1
  37. package/esm2020/lib/layouts/shell/shell-footer/shell-footer.component.mjs +19 -0
  38. package/esm2020/lib/layouts/shell/shell-header/shell-header.component.mjs +131 -0
  39. package/esm2020/lib/layouts/shell/shell-layout/shell-layout.component.mjs +103 -0
  40. package/esm2020/lib/layouts/shell/shell-sidebar/shell-sidebar.component.mjs +47 -0
  41. package/esm2020/lib/layouts/views/form-layout/form-layout.component.mjs +80 -0
  42. package/esm2020/lib/layouts/views/model-view-layout/model-view-layout.component.mjs +49 -0
  43. package/esm2020/lib/layouts/views/side-view-layout/side-view-layout.component.mjs +98 -0
  44. package/esm2020/lib/layouts/views/view-layout/view-layout.component.mjs +104 -0
  45. package/{esm2015/lib/ng-components.module.js → esm2020/lib/ng-components.module.mjs} +7 -9
  46. package/esm2020/lib/pages/auth/auth-callback/auth-callback.component.mjs +31 -0
  47. package/{esm2015/lib/pages/auth/auth-renew/auth-renew.component.js → esm2020/lib/pages/auth/auth-renew/auth-renew.component.mjs} +4 -4
  48. package/esm2020/lib/pages/auth/logged-out/logged-out.component.mjs +28 -0
  49. package/esm2020/lib/pages/http-status/error/error.component.mjs +17 -0
  50. package/esm2020/lib/pages/http-status/page-not-found/page-not-found.component.mjs +15 -0
  51. package/esm2020/lib/pages/http-status/unauthorized/unauthorized.component.mjs +14 -0
  52. package/{esm2015/lib/pipes/address.pipe.js → esm2020/lib/pipes/address.pipe.mjs} +4 -4
  53. package/{esm2015/lib/pipes/duration-format.pipe.js → esm2020/lib/pipes/duration-format.pipe.mjs} +4 -4
  54. package/esm2020/lib/services/component-loader/component-loader-options.class.mjs +8 -0
  55. package/esm2020/lib/services/component-loader/component-loader.class.mjs +188 -0
  56. package/{esm2015/lib/services/component-loader/component-loader.factory.js → esm2020/lib/services/component-loader/component-loader.factory.mjs} +4 -4
  57. package/{esm2015/lib/services/component-loader/content-ref.class.js → esm2020/lib/services/component-loader/content-ref.class.mjs} +1 -1
  58. package/esm2020/lib/services/modal-service/modal-backdrop-component.mjs +44 -0
  59. package/esm2020/lib/services/modal-service/modal-container-component.mjs +126 -0
  60. package/esm2020/lib/services/modal-service/modal-options.class.mjs +35 -0
  61. package/esm2020/lib/services/modal-service/modal-service.mjs +219 -0
  62. package/{esm2015/lib/services/modal-service/modal-styles.class.js → esm2020/lib/services/modal-service/modal-styles.class.mjs} +1 -1
  63. package/esm2020/lib/services/modal-service/modal.class.mjs +27 -0
  64. package/{esm2015/lib/services/toaster.service.js → esm2020/lib/services/toaster.service.mjs} +4 -4
  65. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +1 -1
  66. package/{esm2015/lib/types.js → esm2020/lib/types.mjs} +1 -1
  67. package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
  68. package/fesm2015/indice-ng-components.mjs +3899 -0
  69. package/fesm2015/indice-ng-components.mjs.map +1 -0
  70. package/fesm2020/indice-ng-components.mjs +3834 -0
  71. package/fesm2020/indice-ng-components.mjs.map +1 -0
  72. package/{indice-ng-components.d.ts → index.d.ts} +0 -0
  73. package/lib/controls/avatar-initials/avatar-initials.component.d.ts +1 -1
  74. package/lib/controls/collapsible-panel/collapsible-panel.component.d.ts +1 -1
  75. package/lib/controls/combobox/combobox.component.d.ts +1 -1
  76. package/lib/controls/date-picker/date-picker.component.d.ts +1 -1
  77. package/lib/controls/drop-down-menu/drop-down-menu.component.d.ts +1 -1
  78. package/lib/controls/kpi-tile/kpi-tile.component.d.ts +1 -1
  79. package/lib/controls/language-selection/language-selection.component.d.ts +1 -1
  80. package/lib/controls/list-view/list-column.component.d.ts +1 -1
  81. package/lib/controls/list-view/list-details-section.component.d.ts +1 -1
  82. package/lib/controls/list-view/list-tile.component.d.ts +1 -1
  83. package/lib/controls/list-view/list-view-empty-state.component.d.ts +1 -1
  84. package/lib/controls/list-view/list-view.component.d.ts +1 -1
  85. package/lib/controls/nav-links-list/nav-links-list.component.d.ts +1 -1
  86. package/lib/controls/notifications-indicator/notifications-indicator.component.d.ts +1 -1
  87. package/lib/controls/pager/pager.component.d.ts +1 -1
  88. package/lib/controls/side-pane/side-pane.component.d.ts +1 -1
  89. package/lib/controls/skeleton-loader/skeleton-loader.component.d.ts +1 -1
  90. package/lib/controls/stepper/lib-step-info.directive.d.ts +1 -1
  91. package/lib/controls/stepper/lib-step-label.directive.d.ts +1 -1
  92. package/lib/controls/stepper/lib-step.component.d.ts +1 -1
  93. package/lib/controls/stepper/lib-stepper.component.d.ts +1 -1
  94. package/lib/controls/tabs/lib-tab-group.component.d.ts +1 -1
  95. package/lib/controls/tabs/lib-tab.component.d.ts +1 -1
  96. package/lib/controls/toaster/toaster-container.component.d.ts +1 -1
  97. package/lib/controls/toaster/toaster.component.d.ts +1 -1
  98. package/lib/controls/toggle/toggle.component.d.ts +1 -1
  99. package/lib/controls/user-profile-menu/user-profile-menu.component.d.ts +1 -1
  100. package/lib/directives/click-outside.directive.d.ts +1 -1
  101. package/lib/directives/dynamic-component-host.directive.d.ts +1 -1
  102. package/lib/helpers/base-list.component.d.ts +1 -1
  103. package/lib/layouts/shell/shell-footer/shell-footer.component.d.ts +1 -1
  104. package/lib/layouts/shell/shell-header/shell-header.component.d.ts +1 -1
  105. package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +1 -1
  106. package/lib/layouts/shell/shell-sidebar/shell-sidebar.component.d.ts +1 -1
  107. package/lib/layouts/views/form-layout/form-layout.component.d.ts +1 -1
  108. package/lib/layouts/views/model-view-layout/model-view-layout.component.d.ts +1 -1
  109. package/lib/layouts/views/side-view-layout/side-view-layout.component.d.ts +1 -1
  110. package/lib/layouts/views/view-layout/view-layout.component.d.ts +1 -1
  111. package/lib/pages/auth/auth-callback/auth-callback.component.d.ts +1 -1
  112. package/lib/pages/auth/auth-renew/auth-renew.component.d.ts +1 -1
  113. package/lib/pages/auth/logged-out/logged-out.component.d.ts +1 -1
  114. package/lib/pages/http-status/error/error.component.d.ts +1 -1
  115. package/lib/pages/http-status/page-not-found/page-not-found.component.d.ts +1 -1
  116. package/lib/pages/http-status/unauthorized/unauthorized.component.d.ts +1 -1
  117. package/lib/pipes/address.pipe.d.ts +1 -1
  118. package/lib/pipes/duration-format.pipe.d.ts +1 -1
  119. package/lib/services/modal-service/modal-backdrop-component.d.ts +1 -1
  120. package/lib/services/modal-service/modal-container-component.d.ts +1 -1
  121. package/modal.css +157 -157
  122. package/package.json +21 -8
  123. package/bundles/indice-ng-components.umd.js +0 -4597
  124. package/bundles/indice-ng-components.umd.js.map +0 -1
  125. package/esm2015/lib/controls/collapsible-panel/collapsible-panel.component.js +0 -23
  126. package/esm2015/lib/controls/combobox/combobox.component.js +0 -99
  127. package/esm2015/lib/controls/date-picker/date-picker.component.js +0 -301
  128. package/esm2015/lib/controls/drop-down-menu/drop-down-menu.component.js +0 -72
  129. package/esm2015/lib/controls/kpi-tile/kpi-tile.component.js +0 -39
  130. package/esm2015/lib/controls/language-selection/language-selection.component.js +0 -35
  131. package/esm2015/lib/controls/list-view/list-view-empty-state.component.js +0 -32
  132. package/esm2015/lib/controls/list-view/list-view.component.js +0 -195
  133. package/esm2015/lib/controls/nav-links-list/nav-links-list.component.js +0 -45
  134. package/esm2015/lib/controls/notifications-indicator/notifications-indicator.component.js +0 -76
  135. package/esm2015/lib/controls/pager/pager.component.js +0 -133
  136. package/esm2015/lib/controls/side-pane/side-pane.component.js +0 -76
  137. package/esm2015/lib/controls/skeleton-loader/skeleton-loader.component.js +0 -29
  138. package/esm2015/lib/controls/stepper/lib-step.component.js +0 -84
  139. package/esm2015/lib/controls/stepper/lib-stepper.component.js +0 -90
  140. package/esm2015/lib/controls/stepper/types/step-selected-event.js +0 -4
  141. package/esm2015/lib/controls/tabs/lib-tab-group.component.js +0 -66
  142. package/esm2015/lib/controls/tabs/lib-tab.component.js +0 -58
  143. package/esm2015/lib/controls/toaster/toaster-container.component.js +0 -31
  144. package/esm2015/lib/controls/toaster/toaster.component.js +0 -34
  145. package/esm2015/lib/controls/toggle/toggle.component.js +0 -68
  146. package/esm2015/lib/controls/user-profile-menu/user-profile-menu.component.js +0 -75
  147. package/esm2015/lib/helpers/base-list.component.js +0 -183
  148. package/esm2015/lib/layouts/shell/shell-footer/shell-footer.component.js +0 -22
  149. package/esm2015/lib/layouts/shell/shell-header/shell-header.component.js +0 -136
  150. package/esm2015/lib/layouts/shell/shell-layout/shell-layout.component.js +0 -108
  151. package/esm2015/lib/layouts/shell/shell-sidebar/shell-sidebar.component.js +0 -50
  152. package/esm2015/lib/layouts/views/form-layout/form-layout.component.js +0 -85
  153. package/esm2015/lib/layouts/views/model-view-layout/model-view-layout.component.js +0 -53
  154. package/esm2015/lib/layouts/views/side-view-layout/side-view-layout.component.js +0 -101
  155. package/esm2015/lib/layouts/views/view-layout/view-layout.component.js +0 -110
  156. package/esm2015/lib/pages/auth/auth-callback/auth-callback.component.js +0 -35
  157. package/esm2015/lib/pages/auth/logged-out/logged-out.component.js +0 -32
  158. package/esm2015/lib/pages/http-status/error/error.component.js +0 -20
  159. package/esm2015/lib/pages/http-status/page-not-found/page-not-found.component.js +0 -18
  160. package/esm2015/lib/pages/http-status/unauthorized/unauthorized.component.js +0 -17
  161. package/esm2015/lib/services/component-loader/component-loader-options.class.js +0 -8
  162. package/esm2015/lib/services/component-loader/component-loader.class.js +0 -192
  163. package/esm2015/lib/services/modal-service/modal-backdrop-component.js +0 -44
  164. package/esm2015/lib/services/modal-service/modal-container-component.js +0 -128
  165. package/esm2015/lib/services/modal-service/modal-options.class.js +0 -35
  166. package/esm2015/lib/services/modal-service/modal-service.js +0 -220
  167. package/esm2015/lib/services/modal-service/modal.class.js +0 -27
  168. package/fesm2015/indice-ng-components.js +0 -3977
  169. package/fesm2015/indice-ng-components.js.map +0 -1
@@ -1,23 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- export class CollapsiblePanelComponent {
5
- constructor() {
6
- this.title = null;
7
- this.visible = false;
8
- }
9
- ngOnInit() {
10
- }
11
- }
12
- CollapsiblePanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CollapsiblePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
- CollapsiblePanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CollapsiblePanelComponent, selector: "lib-collapsible-panel", inputs: { title: "title" }, ngImport: i0, template: "<div class=\"collapsible-panel-container\">\r\n <div class=\"collapsible-panel-container-shadow\">\r\n <div class=\"collapsible-panel-container-inner\">\r\n <button type=\"button\" class=\"collapsible-panel-button\" (click)=\"visible = !visible\">\r\n <div class=\"collapsible-panel-button-content-container\">\r\n <span>{{ title }} </span>\r\n <span class=\"ico-plus\"></span>\r\n </div>\r\n </button>\r\n <div class=\"collapsible-panel-content-container\" *ngIf=\"visible\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CollapsiblePanelComponent, decorators: [{
15
- type: Component,
16
- args: [{
17
- selector: 'lib-collapsible-panel',
18
- templateUrl: './collapsible-panel.component.html'
19
- }]
20
- }], ctorParameters: function () { return []; }, propDecorators: { title: [{
21
- type: Input
22
- }] } });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2libGUtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2NvbGxhcHNpYmxlLXBhbmVsL2NvbGxhcHNpYmxlLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9jb2xsYXBzaWJsZS1wYW5lbC9jb2xsYXBzaWJsZS1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBTXpELE1BQU0sT0FBTyx5QkFBeUI7SUFJcEM7UUFIUyxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM5QixZQUFPLEdBQUcsS0FBSyxDQUFDO0lBRVAsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzs7dUhBUFUseUJBQXlCOzJHQUF6Qix5QkFBeUIseUZDTnRDLDhtQkFlQTs0RkRUYSx5QkFBeUI7a0JBSnJDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsV0FBVyxFQUFFLG9DQUFvQztpQkFDbEQ7MEVBRVUsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jb2xsYXBzaWJsZS1wYW5lbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbGxhcHNpYmxlLXBhbmVsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sbGFwc2libGVQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyB2aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbGxhcHNpYmxlLXBhbmVsLWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2xsYXBzaWJsZS1wYW5lbC1jb250YWluZXItc2hhZG93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtY29udGFpbmVyLWlubmVyXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtYnV0dG9uXCIgKGNsaWNrKT1cInZpc2libGUgPSAhdmlzaWJsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzaWJsZS1wYW5lbC1idXR0b24tY29udGVudC1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxzcGFuPnt7IHRpdGxlIH19IDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvLXBsdXNcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtY29udGVudC1jb250YWluZXJcIiAqbmdJZj1cInZpc2libGVcIj5cclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,99 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../directives/click-outside.directive";
6
- import * as i2 from "@angular/common";
7
- export class ComboboxComponent {
8
- constructor() {
9
- this._debouncer = new Subject();
10
- this._items = [];
11
- this._defaultItemsFilter = (item) => {
12
- const selectedItem = this.selectedItems.find(x => x == item);
13
- return selectedItem == null || selectedItem == undefined;
14
- };
15
- this.id = 'combobox';
16
- this.itemTemplate = null;
17
- this.selectedItemsFilter = () => true;
18
- this.selectedItemTemplate = null;
19
- this.busy = false;
20
- this.debounceMs = 1000;
21
- this.onSearch = new EventEmitter();
22
- this.onItemSelected = new EventEmitter();
23
- this.showOptions = false;
24
- this.selectedItems = [];
25
- }
26
- set items(items) {
27
- if (!this.itemTemplate) {
28
- this._items = items.filter(this._defaultItemsFilter);
29
- }
30
- else {
31
- this._items = items.filter(this.selectedItemsFilter);
32
- }
33
- }
34
- get items() {
35
- if (!this.itemTemplate) {
36
- return this._items.filter(this._defaultItemsFilter);
37
- }
38
- else {
39
- return this._items.filter(this.selectedItemsFilter);
40
- }
41
- }
42
- ngOnInit() {
43
- this.emitSearchEvent();
44
- this._debouncer
45
- .pipe(debounceTime(this.debounceMs), distinctUntilChanged())
46
- .subscribe((value) => this.emitSearchEvent(value));
47
- }
48
- onInputClick() {
49
- this.showOptions = true;
50
- }
51
- onInputClickOutside() {
52
- this.showOptions = false;
53
- }
54
- onInputKeyUp(event) {
55
- this._debouncer.next(event.currentTarget.value);
56
- }
57
- onListItemSelected(item) {
58
- this.onItemSelected.emit(item);
59
- this.selectedItems.push(item);
60
- }
61
- removeSelectedItem(item) {
62
- const index = this.selectedItems.indexOf(item);
63
- if (index > -1) {
64
- this.selectedItems.splice(index, 1);
65
- }
66
- }
67
- emitSearchEvent(searchTerm = undefined) {
68
- this.onSearch.emit(searchTerm);
69
- }
70
- }
71
- ComboboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ComboboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
72
- ComboboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ComboboxComponent, selector: "lib-combobox", inputs: { id: "id", items: "items", itemTemplate: "itemTemplate", selectedItemsFilter: "selectedItemsFilter", selectedItemTemplate: "selectedItemTemplate", busy: "busy", debounceMs: "debounceMs" }, outputs: { onSearch: "onSearch", onItemSelected: "onItemSelected" }, ngImport: i0, template: "<div class=\"relative mt-1\">\r\n <form autocomplete=\"off\" [id]=\"id + '-form'\">\r\n <input [id]=\"id + '-input'\" type=\"text\" (click)=\"onInputClick()\" (clickOutside)=\"onInputClickOutside()\" (keyup)=\"onInputKeyUp($event)\"\r\n class=\"w-full rounded-md border border-gray-300 bg-white py-2 pl-3 pr-12 shadow-sm focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500 sm:text-sm\" role=\"combobox\" aria-controls=\"options\"\r\n aria-expanded=\"false\" autocomplete=\"off\" list=\"autocomplete\">\r\n </form>\r\n <div class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\">\r\n <svg *ngIf=\"!busy\" xmlns=\"http://www.w3.org/2000/svg\" class=\"h-6 w-6 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\r\n </svg>\r\n <svg *ngIf=\"busy\" class=\"animate-spin h-6 w-6 text-gray-400\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\r\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\r\n </svg>\r\n </div>\r\n <ul [id]=\"id + '-options'\" *ngIf=\"showOptions\" class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\" role=\"listbox\">\r\n <li *ngFor=\"let item of items; let i = index;\" [id]=\"'option-'+ i\" (click)=\"onListItemSelected(item)\" role=\"option\" tabindex=\"-1\">\r\n <ng-container [ngTemplateOutlet]=\"itemTemplate || defaultItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n </li>\r\n </ul>\r\n</div>\r\n<ul *ngIf=\"selectedItems.length > 0\" role=\"list\" class=\"grid grid-cols-1\">\r\n <li *ngFor=\"let item of selectedItems; let i = index;\" class=\"mt-3\">\r\n <ng-container [ngTemplateOutlet]=\"selectedItemTemplate || defaultSelectedItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n </li>\r\n</ul>\r\n<ng-template #defaultItemTemplate let-item>\r\n <span class=\"hover:bg-gray-100 relative cursor-pointer select-none py-2 pl-3 pr-3 block truncate\">{{ item }}</span>\r\n</ng-template>\r\n<ng-template #defaultSelectedItemTemplate let-item>\r\n <div class=\"grid grid-cols-1\">\r\n <div class=\"relative rounded-lg border border-gray-300 bg-white px-6 py-5 shadow-sm flex items-center space-x-3 hover:border-gray-400\">\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"focus:outline-none\">\r\n <span class=\"absolute\" aria-hidden=\"true\"></span>\r\n <p class=\"text-sm font-medium text-gray-900\">{{ item }}</p>\r\n </div>\r\n </div>\r\n <div class=\"ml-4 flex-shrink-0 flex\">\r\n <button type=\"button\" (click)=\"removeSelectedItem(item)\" class=\"cursor-pointer bg-white rounded-md inline-flex text-gray-400 hover:text-gray-500\">\r\n <span class=\"sr-only\">Close</span>\r\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", directives: [{ type: i1.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ComboboxComponent, decorators: [{
74
- type: Component,
75
- args: [{
76
- selector: 'lib-combobox',
77
- templateUrl: './combobox.component.html'
78
- }]
79
- }], ctorParameters: function () { return []; }, propDecorators: { id: [{
80
- type: Input
81
- }], items: [{
82
- type: Input,
83
- args: ['items']
84
- }], itemTemplate: [{
85
- type: Input
86
- }], selectedItemsFilter: [{
87
- type: Input
88
- }], selectedItemTemplate: [{
89
- type: Input
90
- }], busy: [{
91
- type: Input
92
- }], debounceMs: [{
93
- type: Input
94
- }], onSearch: [{
95
- type: Output
96
- }], onItemSelected: [{
97
- type: Output
98
- }] } });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBRTVGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBT3BFLE1BQU0sT0FBTyxpQkFBaUI7SUFTMUI7UUFSUSxlQUFVLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFDcEQsV0FBTSxHQUFVLEVBQUUsQ0FBQztRQUVuQix3QkFBbUIsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdELE9BQU8sWUFBWSxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksU0FBUyxDQUFDO1FBQzdELENBQUMsQ0FBQztRQUljLE9BQUUsR0FBVyxVQUFVLENBQUM7UUFrQnhCLGlCQUFZLEdBQW9DLElBQUksQ0FBQztRQUNyRCx3QkFBbUIsR0FBa0MsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ2hFLHlCQUFvQixHQUFvQyxJQUFJLENBQUM7UUFDN0QsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUN0Qixl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QUNVLGNBQWM7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItY29tYm9ib3gnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VyOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9kZWZhdWx0SXRlbXNGaWx0ZXIgPSAoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbmQoeCA9PiB4ID09IGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW0gPT0gbnVsbCB8fCBzZWxlY3RlZEl0ZW0gPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpZDogc3RyaW5nID0gJ2NvbWJvYm94JztcclxuXHJcbiAgICBASW5wdXQoJ2l0ZW1zJykgcHVibGljIHNldCBpdGVtcyhpdGVtczogYW55W10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gaXRlbXMuZmlsdGVyKHRoaXMuX2RlZmF1bHRJdGVtc0ZpbHRlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSBpdGVtcy5maWx0ZXIodGhpcy5zZWxlY3RlZEl0ZW1zRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpdGVtcygpOiBhbnlbXSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXRlbXMuZmlsdGVyKHRoaXMuX2RlZmF1bHRJdGVtc0ZpbHRlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmZpbHRlcih0aGlzLnNlbGVjdGVkSXRlbXNGaWx0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4gfCBudWxsID0gbnVsbDtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zRmlsdGVyOiAoaXRlbTogYW55KSA9PiBib29sZWFuIHwgbnVsbCA9ICgpID0+IHRydWU7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PiB8IG51bGwgPSBudWxsO1xyXG4gICAgQElucHV0KCkgcHVibGljIGJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkZWJvdW5jZU1zOiBudW1iZXIgPSAxMDAwO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNlYXJjaDogRXZlbnRFbWl0dGVyPHN0cmluZyB8IHVuZGVmaW5lZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uSXRlbVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIHB1YmxpYyBzaG93T3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZW1pdFNlYXJjaEV2ZW50KCk7XHJcbiAgICAgICAgdGhpcy5fZGVib3VuY2VyXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VNcyksXHJcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4gdGhpcy5lbWl0U2VhcmNoRXZlbnQodmFsdWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25JbnB1dENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd09wdGlvbnMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbklucHV0Q2xpY2tPdXRzaWRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd09wdGlvbnMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25JbnB1dEtleVVwKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZWJvdW5jZXIubmV4dChldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25MaXN0SXRlbVNlbGVjdGVkKGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25JdGVtU2VsZWN0ZWQuZW1pdChpdGVtKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmluZGV4T2YoaXRlbSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZW1pdFNlYXJjaEV2ZW50KHNlYXJjaFRlcm06IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdChzZWFyY2hUZXJtKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbXQtMVwiPlxyXG4gICAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2lkXT1cImlkICsgJy1mb3JtJ1wiPlxyXG4gICAgICAgIDxpbnB1dCBbaWRdPVwiaWQgKyAnLWlucHV0J1wiIHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cIm9uSW5wdXRDbGljaygpXCIgKGNsaWNrT3V0c2lkZSk9XCJvbklucHV0Q2xpY2tPdXRzaWRlKClcIiAoa2V5dXApPVwib25JbnB1dEtleVVwKCRldmVudClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItZ3JheS0zMDAgYmctd2hpdGUgcHktMiBwbC0zIHByLTEyIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTUwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctaW5kaWdvLTUwMCBzbTp0ZXh0LXNtXCIgcm9sZT1cImNvbWJvYm94XCIgYXJpYS1jb250cm9scz1cIm9wdGlvbnNcIlxyXG4gICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBsaXN0PVwiYXV0b2NvbXBsZXRlXCI+XHJcbiAgICA8L2Zvcm0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQteS0wIHJpZ2h0LTAgZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1yLW1kIHB4LTIgZm9jdXM6b3V0bGluZS1ub25lXCI+XHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cIiFidXN5XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiaC02IHctNiB0ZXh0LWdyYXktNDAwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiPlxyXG4gICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTIxIDIxbC02LTZtMi01YTcgNyAwIDExLTE0IDAgNyA3IDAgMDExNCAwelwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cImJ1c3lcIiBjbGFzcz1cImFuaW1hdGUtc3BpbiBoLTYgdy02IHRleHQtZ3JheS00MDBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJvcGFjaXR5LTI1XCIgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCI0XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwib3BhY2l0eS03NVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTQgMTJhOCA4IDAgMDE4LThWMEM1LjM3MyAwIDAgNS4zNzMgMCAxMmg0em0yIDUuMjkxQTcuOTYyIDcuOTYyIDAgMDE0IDEySDBjMCAzLjA0MiAxLjEzNSA1LjgyNCAzIDcuOTM4bDMtMi42NDd6XCI+PC9wYXRoPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dWwgW2lkXT1cImlkICsgJy1vcHRpb25zJ1wiICpuZ0lmPVwic2hvd09wdGlvbnNcIiBjbGFzcz1cImFic29sdXRlIHotMTAgbXQtMSBtYXgtaC02MCB3LWZ1bGwgb3ZlcmZsb3ctYXV0byByb3VuZGVkLW1kIGJnLXdoaXRlIHB5LTEgdGV4dC1iYXNlIHNoYWRvdy1sZyByaW5nLTEgcmluZy1ibGFjayByaW5nLW9wYWNpdHktNSBmb2N1czpvdXRsaW5lLW5vbmUgc206dGV4dC1zbVwiIHJvbGU9XCJsaXN0Ym94XCI+XHJcbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4O1wiIFtpZF09XCInb3B0aW9uLScrIGlcIiAoY2xpY2spPVwib25MaXN0SXRlbVNlbGVjdGVkKGl0ZW0pXCIgcm9sZT1cIm9wdGlvblwiIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGUgfHwgZGVmYXVsdEl0ZW1UZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbjwvZGl2PlxyXG48dWwgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDBcIiByb2xlPVwibGlzdFwiIGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMVwiPlxyXG4gICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXM7IGxldCBpID0gaW5kZXg7XCIgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3RlZEl0ZW1UZW1wbGF0ZSB8fCBkZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9saT5cclxuPC91bD5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SXRlbVRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJob3ZlcjpiZy1ncmF5LTEwMCByZWxhdGl2ZSBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBweS0yIHBsLTMgcHItMyBibG9jayB0cnVuY2F0ZVwiPnt7IGl0ZW0gfX08L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGJnLXdoaXRlIHB4LTYgcHktNSBzaGFkb3ctc20gZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIGhvdmVyOmJvcmRlci1ncmF5LTQwMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIG1pbi13LTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb2N1czpvdXRsaW5lLW5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFic29sdXRlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwXCI+e3sgaXRlbSB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTQgZmxleC1zaHJpbmstMCBmbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVtb3ZlU2VsZWN0ZWRJdGVtKGl0ZW0pXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBiZy13aGl0ZSByb3VuZGVkLW1kIGlubGluZS1mbGV4IHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTUgdy01XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjI5MyA0LjI5M2ExIDEgMCAwMTEuNDE0IDBMMTAgOC41ODZsNC4yOTMtNC4yOTNhMSAxIDAgMTExLjQxNCAxLjQxNEwxMS40MTQgMTBsNC4yOTMgNC4yOTNhMSAxIDAgMDEtMS40MTQgMS40MTRMMTAgMTEuNDE0bC00LjI5MyA0LjI5M2ExIDEgMCAwMS0xLjQxNC0xLjQxNEw4LjU4NiAxMCA0LjI5MyA1LjcwN2ExIDEgMCAwMTAtMS40MTR6XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
@@ -1,301 +0,0 @@
1
- import { getLocaleMonthNames, FormStyle, TranslationWidth, getLocaleDayNames } from '@angular/common';
2
- import { Component, EventEmitter, forwardRef, Inject, Input, LOCALE_ID, Output, ViewChild } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "../../directives/click-outside.directive";
7
- // freaksly simple date picker : https://tailwind-elements.com/docs/standard/forms/datepicker/
8
- export class DatepickerComponent {
9
- constructor(locale) {
10
- this.locale = locale;
11
- this.readonly = false;
12
- this.disabled = false;
13
- this.inline = false;
14
- this.displayFormat = 'dd/MM/yyyy';
15
- this.placeholder = '';
16
- this.value = null;
17
- this.valueChange = new EventEmitter();
18
- this.minDate = undefined;
19
- this.maxDate = undefined;
20
- this.showCalendar = false;
21
- this.showYears = false;
22
- this.monthNames = getLocaleMonthNames(this.locale, FormStyle.Standalone, TranslationWidth.Wide);
23
- this.dayNames = getLocaleDayNames(this.locale, FormStyle.Standalone, TranslationWidth.Abbreviated);
24
- this.month = -1;
25
- this.year = -1;
26
- this.calendarDates = [];
27
- this.calendarYears = [];
28
- this.showCalendarYears = [];
29
- this.blankDays = [];
30
- this.calendarYearPage = 1;
31
- this.yearsPerPage = 30;
32
- this.onChange$ = undefined;
33
- this.onTouched$ = undefined;
34
- }
35
- ngOnInit() {
36
- var _a, _b;
37
- let today = new Date();
38
- this.month = today.getMonth();
39
- this.year = today.getFullYear();
40
- this.calendarDates = [{ day: this.value, today: this.value, selected: this.value }];
41
- this.calendarYears = [{ year: (_a = this.value) === null || _a === void 0 ? void 0 : _a.getFullYear(), today: this.value, selected: this.value }];
42
- const yearsArray = [];
43
- for (let i = 1950; i <= today.getFullYear() + 2; i++) {
44
- yearsArray.push({ year: i, today: this.compareDates(today, null, i), selected: i == ((_b = this.value) === null || _b === void 0 ? void 0 : _b.getFullYear()) });
45
- }
46
- this.calendarYears = yearsArray;
47
- this.showCalendarYears = this.paginate(this.calendarYears, 1);
48
- this.calcDays();
49
- }
50
- writeValue(obj) {
51
- if (obj) {
52
- this.value = new Date(obj);
53
- this.month = this.value.getMonth();
54
- this.year = this.value.getFullYear();
55
- }
56
- }
57
- registerOnChange(fn) {
58
- this.onChange$ = fn;
59
- }
60
- registerOnTouched(fn) {
61
- this.onTouched$ = fn;
62
- }
63
- onBlur(event) {
64
- if (this.onTouched$) {
65
- this.onTouched$();
66
- }
67
- this.getDateFromInput();
68
- }
69
- selectDateValue(date) {
70
- // This should be in UTC
71
- if (!this.outOfRangeDate(date.day)) {
72
- let selectedDate = new Date(this.year, this.month, date.day, 3, 0, 0, 0);
73
- this.value = selectedDate;
74
- this.valueChange.emit(this.value);
75
- if (this.onChange$) {
76
- this.onChange$(this.value);
77
- }
78
- this.updateDays();
79
- if (this.onTouched$) {
80
- this.onTouched$();
81
- }
82
- this.calcDays();
83
- this.showCalendar = false;
84
- }
85
- }
86
- selectYearValue(year) {
87
- var _a, _b, _c, _d, _e;
88
- // This should be in UTC
89
- const tempYear = this.year;
90
- this.year = year.year;
91
- if (!this.outOfRangeDate((_b = (_a = this.calendarDates) === null || _a === void 0 ? void 0 : _a.find(x => x.selected == true)) !== null && _b !== void 0 ? _b : { day: 1 })) {
92
- let selectedDate = new Date(year.year, (_c = this.month) !== null && _c !== void 0 ? _c : 1, (_e = (_d = this.calendarDates) === null || _d === void 0 ? void 0 : _d.find(x => x.selected == true).day) !== null && _e !== void 0 ? _e : 1, 3, 0, 0, 0);
93
- this.value = selectedDate;
94
- this.valueChange.emit(this.value);
95
- if (this.onChange$) {
96
- this.onChange$(this.value);
97
- }
98
- this.updateDays();
99
- if (this.onTouched$) {
100
- this.onTouched$();
101
- }
102
- this.showYears = false;
103
- this.showCalendar = true;
104
- this.calcDays();
105
- }
106
- else {
107
- this.year = tempYear;
108
- this.showYears = false;
109
- this.showCalendar = true;
110
- }
111
- }
112
- previousMonth() {
113
- if (this.month !== 0) {
114
- this.month = this.month - 1;
115
- this.calcDays();
116
- }
117
- else {
118
- this.month = 11;
119
- this.year = this.year - 1;
120
- this.calcDays();
121
- }
122
- if (this.onTouched$) {
123
- this.onTouched$();
124
- }
125
- }
126
- nextMonth() {
127
- if (this.month !== 11) {
128
- this.month = this.month + 1;
129
- this.calcDays();
130
- }
131
- else {
132
- this.month = 0;
133
- this.year = this.year + 1;
134
- this.calcDays();
135
- }
136
- if (this.onTouched$) {
137
- this.onTouched$();
138
- }
139
- }
140
- previousYear() {
141
- this.showCalendarYears = this.paginate(this.calendarYears, this.calendarYearPage > 1 ? --this.calendarYearPage : 1);
142
- this.calcDays();
143
- if (this.onTouched$) {
144
- this.onTouched$();
145
- }
146
- }
147
- nextYear() {
148
- this.showCalendarYears = this.paginate(this.calendarYears, this.calendarYearPage <= this.calendarYears.length / this.yearsPerPage
149
- ? ++this.calendarYearPage
150
- : this.calendarYearPage);
151
- this.calcDays();
152
- if (this.onTouched$) {
153
- this.onTouched$();
154
- }
155
- }
156
- compareDates(date1, day, year) {
157
- var _a;
158
- if (!date1) {
159
- return false;
160
- }
161
- const d = new Date(year !== null && year !== void 0 ? year : this.year, this.month, day !== null && day !== void 0 ? day : (_a = this.value) === null || _a === void 0 ? void 0 : _a.getDay());
162
- return date1.toDateString() === d.toDateString();
163
- }
164
- ;
165
- calcDays() {
166
- var _a;
167
- const daysInMonth = new Date(this.year, this.month + 1, 0).getDate();
168
- // find where to start calendar day of week
169
- const dayOfWeek = new Date(this.year, this.month).getDay();
170
- const blankdaysArray = new Array();
171
- for (var i = 1; i <= dayOfWeek; i++) {
172
- // check if month is February
173
- blankdaysArray.push(this.month != 2 ? (32 - i) : (29 - i));
174
- blankdaysArray.reverse().sort();
175
- }
176
- const daysArray = [];
177
- const today = new Date();
178
- for (var i = 1; i <= daysInMonth; i++) {
179
- daysArray.push({ day: i, today: this.compareDates(today, i, null), selected: this.compareDates((_a = this.value) !== null && _a !== void 0 ? _a : today, i, null) });
180
- }
181
- const yearsArray = [];
182
- for (let i = 1950; i <= today.getFullYear() + 2; i++) {
183
- yearsArray.push({ year: i, today: this.compareDates(today, null, i), selected: i == this.year });
184
- }
185
- this.calendarYears = yearsArray;
186
- this.blankDays = blankdaysArray;
187
- this.calendarDates = daysArray;
188
- }
189
- updateDays() {
190
- const today = new Date();
191
- this.calendarDates.forEach(d => {
192
- d.today = this.compareDates(today, d, this.year);
193
- d.selected = this.compareDates(this.value, d, this.year);
194
- });
195
- }
196
- paginate(array, page_number) {
197
- return array.slice((page_number - 1) * this.yearsPerPage, page_number * this.yearsPerPage);
198
- }
199
- getDateFromInput() {
200
- var _a, _b;
201
- if (((_a = this.dateInput) === null || _a === void 0 ? void 0 : _a.nativeElement.value) !== '' && !this.inline) {
202
- var dateParts = (_b = this.dateInput) === null || _b === void 0 ? void 0 : _b.nativeElement.value.split("/");
203
- let dateInGrFormat = new Date(+dateParts[2], dateParts[1] - 1, +dateParts[0], 3, 0, 0);
204
- if (dateInGrFormat.toString() !== 'Invalid Date') {
205
- this.writeValue(dateInGrFormat);
206
- this.calcDays();
207
- this.valueChange.emit(dateInGrFormat);
208
- }
209
- if (this.onChange$) {
210
- this.onChange$(this.value);
211
- }
212
- this.updateDays();
213
- if (this.onTouched$) {
214
- this.onTouched$();
215
- }
216
- }
217
- this.showCalendar = false;
218
- }
219
- openYears() {
220
- this.showYears = !this.showYears;
221
- this.calendarYearPage = Math.ceil(this.calendarYears.map(x => x.year).indexOf(this.year) / this.yearsPerPage);
222
- this.showCalendarYears = this.paginate(this.calendarYears, this.calendarYearPage !== 0 ? this.calendarYearPage : 1);
223
- this.calcDays();
224
- }
225
- openCalendar() {
226
- this.showCalendar = !this.showCalendar;
227
- this.calcDays();
228
- }
229
- closeCalendar() {
230
- this.showCalendar = false;
231
- this.getDateFromInput();
232
- }
233
- outOfRangeDate(date) {
234
- let outOfRange = false;
235
- if (this.minDate || this.maxDate) {
236
- const d = new Date(this.year, this.month, date.day);
237
- const dateInMillis = d.getTime();
238
- if (this.minDate) {
239
- let minDate = this.minDate.getTime();
240
- if (dateInMillis < minDate && this.minDate.toDateString() !== d.toDateString()) {
241
- outOfRange = true;
242
- }
243
- }
244
- if (this.maxDate) {
245
- let maxDate = this.maxDate.getTime();
246
- if (dateInMillis > maxDate && this.maxDate.toDateString() !== d.toDateString()) {
247
- outOfRange = true;
248
- }
249
- }
250
- }
251
- return outOfRange;
252
- }
253
- }
254
- DatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DatepickerComponent, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });
255
- DatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DatepickerComponent, selector: "lib-date-picker", inputs: { readonly: "readonly", disabled: "disabled", inline: "inline", displayFormat: ["display-format", "displayFormat"], placeholder: "placeholder", value: "value", minDate: "minDate", maxDate: "maxDate" }, outputs: { valueChange: "valueChange" }, providers: [
256
- {
257
- provide: NG_VALUE_ACCESSOR,
258
- useExisting: forwardRef(() => DatepickerComponent),
259
- multi: true
260
- }
261
- ], viewQueries: [{ propertyName: "dateInput", first: true, predicate: ["dateInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex\"\r\n [ngClass]=\"{'relative': !inline}\"\r\n (clickOutside)=\"closeCalendar()\">\r\n\r\n <input type=\"text\"\r\n *ngIf=\"!inline\"\r\n #dateInput\r\n [readonly]=\"readonly\"\r\n name=\"dateInput\"\r\n (blur)=\"onBlur($event)\"\r\n id=\"dateInput\"\r\n (focus)=\"showCalendar = false\"\r\n [value]=\"value | date: displayFormat\"\r\n class=\"detapicker-input\"\r\n [ngClass]=\"{'cursor-not-allowed': disabled}\"\r\n [placeholder]=\"disabled ? '' : placeholder\">\r\n\r\n <button type=\"button\"\r\n *ngIf=\"!inline\"\r\n class=\"datepicker-button\"\r\n [disabled]=\"disabled\"\r\n (click)=\"openCalendar()\"\r\n [ngClass]=\"{'cursor-not-allowed': disabled}\">\r\n <i class=\"ms-Icon ms-Icon--DateTime2\"></i>\r\n </button>\r\n\r\n <div *ngIf=\"showCalendar || inline\"\r\n [ngClass]=\"{'absolute': !inline}\"\r\n class=\"datepicker-background\"\r\n style=\"height:18rem;min-width:16rem;\"\r\n name=\"calendar\">\r\n <div class=\"datepicker-btn-wrapper\">\r\n <div>\r\n <button type=\"button\"\r\n (click)=\"openYears()\">\r\n <span class=\"datepicker-selected-month\">\r\n {{monthNames[month]}}\r\n </span>\r\n <span class=\"datepicker-selected-year\">\r\n {{year}}</span>\r\n </button>\r\n </div>\r\n <div *ngIf=\"!showYears; else showYearsPickerTmpl\">\r\n <button type=\"button\"\r\n class=\"datepicker-nav-btn\"\r\n (click)=\"previousMonth();\">\r\n <svg fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M15 19l-7-7 7-7\" />\r\n </svg>\r\n </button>\r\n <button type=\"button\"\r\n class=\"datepicker-nav-btn\"\r\n (click)=\"nextMonth()\">\r\n <svg fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <ng-template #showYearsPickerTmpl>\r\n <div>\r\n <button type=\"button\"\r\n class=\"datepicker-nav-btn\"\r\n (click)=\"previousYear();\">\r\n <svg fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M15 19l-7-7 7-7\" />\r\n </svg>\r\n </button>\r\n <button type=\"button\"\r\n class=\"datepicker-nav-btn\"\r\n (click)=\"nextYear()\">\r\n <svg fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"datepicker-wrapper\"\r\n *ngIf=\"!showYears; else showCalYearsTmpl\">\r\n <div *ngFor=\"let day of dayNames\"\r\n class=\"datepicker-day-name\"\r\n style=\"width: 14.28%\">{{day}}</div>\r\n </div>\r\n\r\n <ng-template #showCalYearsTmpl>\r\n <div class=\"datepicker-content-wrapper\">\r\n <div *ngFor=\"let year of showCalendarYears\"\r\n style=\"width: 18.28%\"\r\n class=\"px-1 mb-1\">\r\n <div (click)=\"selectYearValue(year)\"\r\n class=\"datepicker-year\"\r\n [class]=\"year.selected ? 'selected' : 'not-selected'\">\r\n {{year.year}}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <div class=\"datepicker-content-wrapper\"\r\n *ngIf=\"!showYears\">\r\n <div *ngFor=\"let blankday of blankDays\"\r\n style=\"width: 14.28%\"\r\n class=\"datepicker-blank-days\">{{blankday}}</div>\r\n <div *ngFor=\"let date of calendarDates;\"\r\n style=\"width: 14.28%\"\r\n class=\"px-1 mb-1\">\r\n <div (click)=\"selectDateValue(date)\"\r\n class=\"datepicker-days\"\r\n [ngClass]=\"{'out-of-range': outOfRangeDate(date),'selected': date.selected, 'not-selected':!date.selected }\">\r\n {{date.day}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>", directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "date": i1.DatePipe } });
262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DatepickerComponent, decorators: [{
263
- type: Component,
264
- args: [{
265
- selector: 'lib-date-picker',
266
- templateUrl: './date-picker.component.html',
267
- providers: [
268
- {
269
- provide: NG_VALUE_ACCESSOR,
270
- useExisting: forwardRef(() => DatepickerComponent),
271
- multi: true
272
- }
273
- ]
274
- }]
275
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
276
- type: Inject,
277
- args: [LOCALE_ID]
278
- }] }]; }, propDecorators: { readonly: [{
279
- type: Input
280
- }], disabled: [{
281
- type: Input
282
- }], inline: [{
283
- type: Input
284
- }], displayFormat: [{
285
- type: Input,
286
- args: ['display-format']
287
- }], placeholder: [{
288
- type: Input
289
- }], value: [{
290
- type: Input
291
- }], valueChange: [{
292
- type: Output
293
- }], dateInput: [{
294
- type: ViewChild,
295
- args: ['dateInput']
296
- }], minDate: [{
297
- type: Input
298
- }], maxDate: [{
299
- type: Input
300
- }] } });
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRXpFLDhGQUE4RjtBQVk5RixNQUFNLE9BQU8sbUJBQW1CO0lBMkM5QixZQUFzQyxNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQTFDM0MsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDUixrQkFBYSxHQUF1QixZQUFZLENBQUM7UUFDakUsZ0JBQVcsR0FBdUIsRUFBRSxDQUFDO1FBQ3JDLFVBQUssR0FBNEIsSUFBSSxDQUFDO1FBQ3JDLGdCQUFXLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFNUQsWUFBTyxHQUFxQixTQUFTLENBQUM7UUFDdEMsWUFBTyxHQUFxQixTQUFTLENBQUM7UUFDeEMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixlQUFVLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNGLGFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFOUYsVUFBSyxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ25CLFNBQUksR0FBVyxDQUFDLENBQUMsQ0FBQztRQUNsQixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQUMxQixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQUMxQixzQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFDOUIsY0FBUyxHQUFVLEVBQUUsQ0FBQztRQUN0QixxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDcEIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFbEIsY0FBUyxHQUFvQixTQUFTLENBQUM7UUFDdkMsZUFBVSxHQUFvQixTQUFTLENBQUM7SUFpQlEsQ0FBQztJQWZ6RCxRQUFROztRQUNOLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFJLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsV0FBVyxFQUFFLENBQUEsRUFBRSxDQUFDLENBQUM7U0FDbEg7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBSUQsVUFBVSxDQUFDLEdBQVE7UUFDakIsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBb0I7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFVO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sZUFBZSxDQUFDLElBQVM7UUFDOUIsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNsQyxJQUFJLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1QjtZQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNuQjtZQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFTSxlQUFlLENBQUMsSUFBUzs7UUFDOUIsd0JBQXdCO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxtQ0FBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3pGLElBQUksWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBQSxJQUFJLENBQUMsS0FBSyxtQ0FBSSxDQUFDLEVBQUUsTUFBQSxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFLEdBQUcsbUNBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hJLElBQUksQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFTSxhQUFhO1FBQ2xCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDcEMsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDcEMsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZO1lBQ3BFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUE4QixFQUFFLEdBQThCLEVBQUUsSUFBK0I7O1FBQ2xILElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxhQUFKLElBQUksY0FBSixJQUFJLEdBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsYUFBSCxHQUFHLGNBQUgsR0FBRyxHQUFJLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMvRSxPQUFPLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUFBLENBQUM7SUFFTSxRQUFROztRQUNkLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckUsMkNBQTJDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNELE1BQU0sY0FBYyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyw2QkFBNkI7WUFDN0IsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2pDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQUEsSUFBSSxDQUFDLEtBQUssbUNBQUksS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakk7UUFDRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2xHO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxRQUFRLENBQUMsS0FBWSxFQUFFLFdBQW1CO1FBQ2hELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVPLGdCQUFnQjs7UUFDdEIsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLFNBQVMsMENBQUUsYUFBYSxDQUFDLEtBQUssTUFBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzlELElBQUksU0FBUyxHQUFHLE1BQUEsSUFBSSxDQUFDLFNBQVMsMENBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLGNBQWMsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtnQkFDL0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN2QztZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUI7WUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDbkI7U0FDRjtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFTO1FBQ3RCLElBQUksVUFBVSxHQUFZLEtBQUssQ0FBQztRQUNoQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksT0FBTyxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdDLElBQUksWUFBWSxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtvQkFDOUUsVUFBVSxHQUFHLElBQUksQ0FBQztpQkFDbkI7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxZQUFZLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO29CQUM5RSxVQUFVLEdBQUcsSUFBSSxDQUFDO2lCQUNuQjthQUNGO1NBQ0Y7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOztpSEFyUVUsbUJBQW1CLGtCQTJDVixTQUFTO3FHQTNDbEIsbUJBQW1CLHFTQVJuQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixrSUNkSCxxNEpBc0lNOzRGRHRITyxtQkFBbUI7a0JBWC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRjs7MEJBNENjLE1BQU07MkJBQUMsU0FBUzs0Q0ExQ3BCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ21CLGFBQWE7c0JBQXJDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUNkLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ2lCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9jYWxlTW9udGhOYW1lcywgRm9ybVN0eWxlLCBUcmFuc2xhdGlvbldpZHRoLCBnZXRMb2NhbGVEYXlOYW1lcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3QsIElucHV0LCBMT0NBTEVfSUQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLy8gZnJlYWtzbHkgc2ltcGxlIGRhdGUgcGlja2VyIDogaHR0cHM6Ly90YWlsd2luZC1lbGVtZW50cy5jb20vZG9jcy9zdGFuZGFyZC9mb3Jtcy9kYXRlcGlja2VyL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1kYXRlLXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVwaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5saW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCdkaXNwbGF5LWZvcm1hdCcpIGRpc3BsYXlGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdkZC9NTS95eXl5JztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XHJcbiAgQElucHV0KCkgdmFsdWU6IERhdGUgfCB1bmRlZmluZWQgfCBudWxsID0gbnVsbDtcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcclxuICBAVmlld0NoaWxkKCdkYXRlSW5wdXQnKSBkYXRlSW5wdXQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBzaG93Q2FsZW5kYXIgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1llYXJzID0gZmFsc2U7XHJcbiAgcHVibGljIG1vbnRoTmFtZXMgPSBnZXRMb2NhbGVNb250aE5hbWVzKHRoaXMubG9jYWxlLCBGb3JtU3R5bGUuU3RhbmRhbG9uZSwgVHJhbnNsYXRpb25XaWR0aC5XaWRlKTtcclxuICBwdWJsaWMgZGF5TmFtZXMgPSBnZXRMb2NhbGVEYXlOYW1lcyh0aGlzLmxvY2FsZSwgRm9ybVN0eWxlLlN0YW5kYWxvbmUsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpO1xyXG5cclxuICBwdWJsaWMgbW9udGg6IG51bWJlciA9IC0xO1xyXG4gIHB1YmxpYyB5ZWFyOiBudW1iZXIgPSAtMTtcclxuICBwdWJsaWMgY2FsZW5kYXJEYXRlczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgY2FsZW5kYXJZZWFyczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2hvd0NhbGVuZGFyWWVhcnM6IGFueVtdID0gW107XHJcbiAgcHVibGljIGJsYW5rRGF5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgY2FsZW5kYXJZZWFyUGFnZSA9IDE7XHJcbiAgcHJpdmF0ZSB5ZWFyc1BlclBhZ2UgPSAzMDtcclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZSQ6IGFueSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIG9uVG91Y2hlZCQ6IGFueSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy5tb250aCA9IHRvZGF5LmdldE1vbnRoKCk7XHJcbiAgICB0aGlzLnllYXIgPSB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG4gICAgdGhpcy5jYWxlbmRhckRhdGVzID0gW3sgZGF5OiB0aGlzLnZhbHVlLCB0b2RheTogdGhpcy52YWx1ZSwgc2VsZWN0ZWQ6IHRoaXMudmFsdWUgfV07XHJcbiAgICB0aGlzLmNhbGVuZGFyWWVhcnMgPSBbeyB5ZWFyOiB0aGlzLnZhbHVlPy5nZXRGdWxsWWVhcigpLCB0b2RheTogdGhpcy52YWx1ZSwgc2VsZWN0ZWQ6IHRoaXMudmFsdWUgfV07XHJcbiAgICBjb25zdCB5ZWFyc0FycmF5ID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMTk1MDsgaSA8PSB0b2RheS5nZXRGdWxsWWVhcigpICsgMjsgaSsrKSB7XHJcbiAgICAgIHllYXJzQXJyYXkucHVzaCh7IHllYXI6IGksIHRvZGF5OiB0aGlzLmNvbXBhcmVEYXRlcyh0b2RheSwgbnVsbCwgaSksIHNlbGVjdGVkOiBpID09IHRoaXMudmFsdWU/LmdldEZ1bGxZZWFyKCkgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbGVuZGFyWWVhcnMgPSB5ZWFyc0FycmF5O1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kYXJZZWFycyA9IHRoaXMucGFnaW5hdGUodGhpcy5jYWxlbmRhclllYXJzLCAxKTtcclxuICAgIHRoaXMuY2FsY0RheXMoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTE9DQUxFX0lEKSBwdWJsaWMgbG9jYWxlOiBzdHJpbmcpIHsgfVxyXG5cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBuZXcgRGF0ZShvYmopO1xyXG4gICAgICB0aGlzLm1vbnRoID0gdGhpcy52YWx1ZS5nZXRNb250aCgpO1xyXG4gICAgICB0aGlzLnllYXIgPSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlJCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQkID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CbHVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm9uVG91Y2hlZCQpIHtcclxuICAgICAgdGhpcy5vblRvdWNoZWQkKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldERhdGVGcm9tSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3REYXRlVmFsdWUoZGF0ZTogYW55KTogdm9pZCB7XHJcbiAgICAvLyBUaGlzIHNob3VsZCBiZSBpbiBVVENcclxuICAgIGlmICghdGhpcy5vdXRPZlJhbmdlRGF0ZShkYXRlLmRheSkpIHtcclxuICAgICAgbGV0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMueWVhciwgdGhpcy5tb250aCwgZGF0ZS5kYXksIDMsIDAsIDAsIDApO1xyXG4gICAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWREYXRlO1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLm9uQ2hhbmdlJCkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UkKHRoaXMudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlRGF5cygpO1xyXG4gICAgICBpZiAodGhpcy5vblRvdWNoZWQkKSB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQkKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jYWxjRGF5cygpO1xyXG4gICAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFllYXJWYWx1ZSh5ZWFyOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGluIFVUQ1xyXG4gICAgY29uc3QgdGVtcFllYXIgPSB0aGlzLnllYXI7XHJcbiAgICB0aGlzLnllYXIgPSB5ZWFyLnllYXI7XHJcbiAgICBpZiAoIXRoaXMub3V0T2ZSYW5nZURhdGUodGhpcy5jYWxlbmRhckRhdGVzPy5maW5kKHggPT4geC5zZWxlY3RlZCA9PSB0cnVlKSA/PyB7IGRheTogMSB9KSkge1xyXG4gICAgICBsZXQgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUoeWVhci55ZWFyLCB0aGlzLm1vbnRoID8/IDEsIHRoaXMuY2FsZW5kYXJEYXRlcz8uZmluZCh4ID0+IHguc2VsZWN0ZWQgPT0gdHJ1ZSkuZGF5ID8/IDEsIDMsIDAsIDAsIDApO1xyXG4gICAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWREYXRlO1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLm9uQ2hhbmdlJCkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UkKHRoaXMudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlRGF5cygpO1xyXG4gICAgICBpZiAodGhpcy5vblRvdWNoZWQkKSB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQkKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zaG93WWVhcnMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93Q2FsZW5kYXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNhbGNEYXlzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnllYXIgPSB0ZW1wWWVhcjtcclxuICAgICAgdGhpcy5zaG93WWVhcnMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93Q2FsZW5kYXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHByZXZpb3VzTW9udGgoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb250aCAhPT0gMCkge1xyXG4gICAgICB0aGlzLm1vbnRoID0gdGhpcy5tb250aCAtIDE7XHJcbiAgICAgIHRoaXMuY2FsY0RheXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9udGggPSAxMTtcclxuICAgICAgdGhpcy55ZWFyID0gdGhpcy55ZWFyIC0gMTtcclxuICAgICAgdGhpcy5jYWxjRGF5cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub25Ub3VjaGVkJCkge1xyXG4gICAgICB0aGlzLm9uVG91Y2hlZCQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZXh0TW9udGgoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb250aCAhPT0gMTEpIHtcclxuICAgICAgdGhpcy5tb250aCA9IHRoaXMubW9udGggKyAxO1xyXG4gICAgICB0aGlzLmNhbGNEYXlzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vbnRoID0gMDtcclxuICAgICAgdGhpcy55ZWFyID0gdGhpcy55ZWFyICsgMTtcclxuICAgICAgdGhpcy5jYWxjRGF5cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub25Ub3VjaGVkJCkge1xyXG4gICAgICB0aGlzLm9uVG91Y2hlZCQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmV2aW91c1llYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRhclllYXJzID0gdGhpcy5wYWdpbmF0ZShcclxuICAgICAgdGhpcy5jYWxlbmRhclllYXJzLFxyXG4gICAgICB0aGlzLmNhbGVuZGFyWWVhclBhZ2UgPiAxID8gLS10aGlzLmNhbGVuZGFyWWVhclBhZ2UgOiAxKTtcclxuICAgIHRoaXMuY2FsY0RheXMoKTtcclxuICAgIGlmICh0aGlzLm9uVG91Y2hlZCQpIHtcclxuICAgICAgdGhpcy5vblRvdWNoZWQkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmV4dFllYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRhclllYXJzID0gdGhpcy5wYWdpbmF0ZShcclxuICAgICAgdGhpcy5jYWxlbmRhclllYXJzLFxyXG4gICAgICB0aGlzLmNhbGVuZGFyWWVhclBhZ2UgPD0gdGhpcy5jYWxlbmRhclllYXJzLmxlbmd0aCAvIHRoaXMueWVhcnNQZXJQYWdlXHJcbiAgICAgICAgPyArK3RoaXMuY2FsZW5kYXJZZWFyUGFnZVxyXG4gICAgICAgIDogdGhpcy5jYWxlbmRhclllYXJQYWdlKTtcclxuICAgIHRoaXMuY2FsY0RheXMoKTtcclxuICAgIGlmICh0aGlzLm9uVG91Y2hlZCQpIHtcclxuICAgICAgdGhpcy5vblRvdWNoZWQkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmVEYXRlcyhkYXRlMTogRGF0ZSB8IHVuZGVmaW5lZCB8IG51bGwsIGRheTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgeWVhcjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFkYXRlMSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkID0gbmV3IERhdGUoeWVhciA/PyB0aGlzLnllYXIsIHRoaXMubW9udGgsIGRheSA/PyB0aGlzLnZhbHVlPy5nZXREYXkoKSk7XHJcbiAgICByZXR1cm4gZGF0ZTEudG9EYXRlU3RyaW5nKCkgPT09IGQudG9EYXRlU3RyaW5nKCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBjYWxjRGF5cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xyXG4gICAgLy8gZmluZCB3aGVyZSB0byBzdGFydCBjYWxlbmRhciBkYXkgb2Ygd2Vla1xyXG4gICAgY29uc3QgZGF5T2ZXZWVrID0gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoKS5nZXREYXkoKTtcclxuICAgIGNvbnN0IGJsYW5rZGF5c0FycmF5ID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IGRheU9mV2VlazsgaSsrKSB7XHJcbiAgICAgIC8vIGNoZWNrIGlmIG1vbnRoIGlzIEZlYnJ1YXJ5XHJcbiAgICAgIGJsYW5rZGF5c0FycmF5LnB1c2godGhpcy5tb250aCAhPSAyID8gKDMyIC0gaSkgOiAoMjkgLSBpKSk7XHJcbiAgICAgIGJsYW5rZGF5c0FycmF5LnJldmVyc2UoKS5zb3J0KCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXlzQXJyYXkgPSBbXTtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IGRheXNJbk1vbnRoOyBpKyspIHtcclxuICAgICAgZGF5c0FycmF5LnB1c2goeyBkYXk6IGksIHRvZGF5OiB0aGlzLmNvbXBhcmVEYXRlcyh0b2RheSwgaSwgbnVsbCksIHNlbGVjdGVkOiB0aGlzLmNvbXBhcmVEYXRlcyh0aGlzLnZhbHVlID8/IHRvZGF5LCBpLCBudWxsKSB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHllYXJzQXJyYXkgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAxOTUwOyBpIDw9IHRvZGF5LmdldEZ1bGxZZWFyKCkgKyAyOyBpKyspIHtcclxuICAgICAgeWVhcnNBcnJheS5wdXNoKHsgeWVhcjogaSwgdG9kYXk6IHRoaXMuY29tcGFyZURhdGVzKHRvZGF5LCBudWxsLCBpKSwgc2VsZWN0ZWQ6IGkgPT0gdGhpcy55ZWFyIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYWxlbmRhclllYXJzID0geWVhcnNBcnJheTtcclxuICAgIHRoaXMuYmxhbmtEYXlzID0gYmxhbmtkYXlzQXJyYXk7XHJcbiAgICB0aGlzLmNhbGVuZGFyRGF0ZXMgPSBkYXlzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURheXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmNhbGVuZGFyRGF0ZXMuZm9yRWFjaChkID0+IHtcclxuICAgICAgZC50b2RheSA9IHRoaXMuY29tcGFyZURhdGVzKHRvZGF5LCBkLCB0aGlzLnllYXIpO1xyXG4gICAgICBkLnNlbGVjdGVkID0gdGhpcy5jb21wYXJlRGF0ZXModGhpcy52YWx1ZSwgZCwgdGhpcy55ZWFyKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYWdpbmF0ZShhcnJheTogYW55W10sIHBhZ2VfbnVtYmVyOiBudW1iZXIpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gYXJyYXkuc2xpY2UoKHBhZ2VfbnVtYmVyIC0gMSkgKiB0aGlzLnllYXJzUGVyUGFnZSwgcGFnZV9udW1iZXIgKiB0aGlzLnllYXJzUGVyUGFnZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERhdGVGcm9tSW5wdXQoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgIT09ICcnICYmICF0aGlzLmlubGluZSkge1xyXG4gICAgICB2YXIgZGF0ZVBhcnRzID0gdGhpcy5kYXRlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUuc3BsaXQoXCIvXCIpO1xyXG4gICAgICBsZXQgZGF0ZUluR3JGb3JtYXQgPSBuZXcgRGF0ZSgrZGF0ZVBhcnRzWzJdLCBkYXRlUGFydHNbMV0gLSAxLCArZGF0ZVBhcnRzWzBdLCAzLCAwLCAwKTtcclxuICAgICAgaWYgKGRhdGVJbkdyRm9ybWF0LnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKGRhdGVJbkdyRm9ybWF0KVxyXG4gICAgICAgIHRoaXMuY2FsY0RheXMoKTtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZGF0ZUluR3JGb3JtYXQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm9uQ2hhbmdlJCkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UkKHRoaXMudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlRGF5cygpO1xyXG4gICAgICBpZiAodGhpcy5vblRvdWNoZWQkKSB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlblllYXJzKCkge1xyXG4gICAgdGhpcy5zaG93WWVhcnMgPSAhdGhpcy5zaG93WWVhcnM7XHJcbiAgICB0aGlzLmNhbGVuZGFyWWVhclBhZ2UgPSBNYXRoLmNlaWwodGhpcy5jYWxlbmRhclllYXJzLm1hcCh4ID0+IHgueWVhcikuaW5kZXhPZih0aGlzLnllYXIpIC8gdGhpcy55ZWFyc1BlclBhZ2UpO1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kYXJZZWFycyA9IHRoaXMucGFnaW5hdGUodGhpcy5jYWxlbmRhclllYXJzLCB0aGlzLmNhbGVuZGFyWWVhclBhZ2UgIT09IDAgPyB0aGlzLmNhbGVuZGFyWWVhclBhZ2UgOiAxKTtcclxuICAgIHRoaXMuY2FsY0RheXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuQ2FsZW5kYXIoKSB7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9ICF0aGlzLnNob3dDYWxlbmRhcjtcclxuICAgIHRoaXMuY2FsY0RheXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZUNhbGVuZGFyKCkge1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuZ2V0RGF0ZUZyb21JbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgb3V0T2ZSYW5nZURhdGUoZGF0ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgb3V0T2ZSYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMubWluRGF0ZSB8fCB0aGlzLm1heERhdGUpIHtcclxuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHRoaXMueWVhciwgdGhpcy5tb250aCwgZGF0ZS5kYXkpO1xyXG4gICAgICBjb25zdCBkYXRlSW5NaWxsaXMgPSBkLmdldFRpbWUoKTtcclxuICAgICAgaWYgKHRoaXMubWluRGF0ZSkge1xyXG4gICAgICAgIGxldCBtaW5EYXRlOiBudW1iZXIgPSB0aGlzLm1pbkRhdGUuZ2V0VGltZSgpO1xyXG4gICAgICAgIGlmIChkYXRlSW5NaWxsaXMgPCBtaW5EYXRlICYmIHRoaXMubWluRGF0ZS50b0RhdGVTdHJpbmcoKSAhPT0gZC50b0RhdGVTdHJpbmcoKSkge1xyXG4gICAgICAgICAgb3V0T2ZSYW5nZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1heERhdGUpIHtcclxuICAgICAgICBsZXQgbWF4RGF0ZTogbnVtYmVyID0gdGhpcy5tYXhEYXRlLmdldFRpbWUoKTtcclxuICAgICAgICBpZiAoZGF0ZUluTWlsbGlzID4gbWF4RGF0ZSAmJiB0aGlzLm1heERhdGUudG9EYXRlU3RyaW5nKCkgIT09IGQudG9EYXRlU3RyaW5nKCkpIHtcclxuICAgICAgICAgIG91dE9mUmFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dE9mUmFuZ2U7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImZsZXhcIlxyXG4gICAgIFtuZ0NsYXNzXT1cInsncmVsYXRpdmUnOiAhaW5saW5lfVwiXHJcbiAgICAgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZUNhbGVuZGFyKClcIj5cclxuXHJcbiAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgKm5nSWY9XCIhaW5saW5lXCJcclxuICAgICAgICAgI2RhdGVJbnB1dFxyXG4gICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICBuYW1lPVwiZGF0ZUlucHV0XCJcclxuICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxyXG4gICAgICAgICBpZD1cImRhdGVJbnB1dFwiXHJcbiAgICAgICAgIChmb2N1cyk9XCJzaG93Q2FsZW5kYXIgPSBmYWxzZVwiXHJcbiAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZSB8IGRhdGU6IGRpc3BsYXlGb3JtYXRcIlxyXG4gICAgICAgICBjbGFzcz1cImRldGFwaWNrZXItaW5wdXRcIlxyXG4gICAgICAgICBbbmdDbGFzc109XCJ7J2N1cnNvci1ub3QtYWxsb3dlZCc6IGRpc2FibGVkfVwiXHJcbiAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkaXNhYmxlZCA/ICcnIDogcGxhY2Vob2xkZXJcIj5cclxuXHJcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICpuZ0lmPVwiIWlubGluZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImRhdGVwaWNrZXItYnV0dG9uXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkNhbGVuZGFyKClcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydjdXJzb3Itbm90LWFsbG93ZWQnOiBkaXNhYmxlZH1cIj5cclxuICAgIDxpIGNsYXNzPVwibXMtSWNvbiBtcy1JY29uLS1EYXRlVGltZTJcIj48L2k+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJzaG93Q2FsZW5kYXIgfHwgaW5saW5lXCJcclxuICAgICAgIFtuZ0NsYXNzXT1cInsnYWJzb2x1dGUnOiAhaW5saW5lfVwiXHJcbiAgICAgICBjbGFzcz1cImRhdGVwaWNrZXItYmFja2dyb3VuZFwiXHJcbiAgICAgICBzdHlsZT1cImhlaWdodDoxOHJlbTttaW4td2lkdGg6MTZyZW07XCJcclxuICAgICAgIG5hbWU9XCJjYWxlbmRhclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItYnRuLXdyYXBwZXJcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5ZZWFycygpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGVwaWNrZXItc2VsZWN0ZWQtbW9udGhcIj5cclxuICAgICAgICAgICAge3ttb250aE5hbWVzW21vbnRoXX19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGVwaWNrZXItc2VsZWN0ZWQteWVhclwiPlxyXG4gICAgICAgICAgICB7e3llYXJ9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1llYXJzOyBlbHNlIHNob3dZZWFyc1BpY2tlclRtcGxcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLW5hdi1idG5cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKTtcIj5cclxuICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTE1IDE5bC03LTcgNy03XCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGVwaWNrZXItbmF2LWJ0blwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dE1vbnRoKClcIj5cclxuICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTkgNWw3IDctNyA3XCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNzaG93WWVhcnNQaWNrZXJUbXBsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGVwaWNrZXItbmF2LWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2aW91c1llYXIoKTtcIj5cclxuICAgICAgICAgICAgPHN2ZyBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUgMTlsLTctNyA3LTdcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLW5hdi1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFllYXIoKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk05IDVsNyA3LTcgN1wiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci13cmFwcGVyXCJcclxuICAgICAgICAgKm5nSWY9XCIhc2hvd1llYXJzOyBlbHNlIHNob3dDYWxZZWFyc1RtcGxcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheU5hbWVzXCJcclxuICAgICAgICAgICBjbGFzcz1cImRhdGVwaWNrZXItZGF5LW5hbWVcIlxyXG4gICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE0LjI4JVwiPnt7ZGF5fX08L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0NhbFllYXJzVG1wbD5cclxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGVudC13cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgeWVhciBvZiBzaG93Q2FsZW5kYXJZZWFyc1wiXHJcbiAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxOC4yOCVcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJweC0xIG1iLTFcIj5cclxuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInNlbGVjdFllYXJWYWx1ZSh5ZWFyKVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci15ZWFyXCJcclxuICAgICAgICAgICAgICAgW2NsYXNzXT1cInllYXIuc2VsZWN0ZWQgID8gJ3NlbGVjdGVkJyA6ICdub3Qtc2VsZWN0ZWQnXCI+XHJcbiAgICAgICAgICAgIHt7eWVhci55ZWFyfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRlbnQtd3JhcHBlclwiXHJcbiAgICAgICAgICpuZ0lmPVwiIXNob3dZZWFyc1wiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBibGFua2RheSBvZiBibGFua0RheXNcIlxyXG4gICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE0LjI4JVwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLWJsYW5rLWRheXNcIj57e2JsYW5rZGF5fX08L2Rpdj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0ZSBvZiBjYWxlbmRhckRhdGVzO1wiXHJcbiAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTQuMjglXCJcclxuICAgICAgICAgICBjbGFzcz1cInB4LTEgbWItMVwiPlxyXG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInNlbGVjdERhdGVWYWx1ZShkYXRlKVwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cImRhdGVwaWNrZXItZGF5c1wiXHJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J291dC1vZi1yYW5nZSc6IG91dE9mUmFuZ2VEYXRlKGRhdGUpLCdzZWxlY3RlZCc6IGRhdGUuc2VsZWN0ZWQsICdub3Qtc2VsZWN0ZWQnOiFkYXRlLnNlbGVjdGVkIH1cIj5cclxuICAgICAgICAgIHt7ZGF0ZS5kYXl9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+Il19