@indice/ng-components 0.2.175 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/README.md +4 -4
  2. package/_styles.scss +4323 -4275
  3. package/{esm2020 → esm2022}/indice-ng-components.mjs +4 -4
  4. package/esm2022/lib/controls/advanced-search/advanced-search.component.mjs +156 -0
  5. package/esm2022/lib/controls/advanced-search/models.mjs +109 -0
  6. package/esm2022/lib/controls/avatar-initials/avatar-initials.component.mjs +48 -0
  7. package/{esm2020 → esm2022}/lib/controls/breadcrumb/breadcrumb-item.mjs +14 -14
  8. package/esm2022/lib/controls/breadcrumb/breadcrumb.component.mjs +26 -0
  9. package/esm2022/lib/controls/collapsible-panel/collapsible-panel.component.mjs +20 -0
  10. package/esm2022/lib/controls/combobox/combobox.component.mjs +121 -0
  11. package/esm2022/lib/controls/content-tile/content-tile-header/content-tile-header.component.mjs +17 -0
  12. package/esm2022/lib/controls/content-tile/content-tile-item/content-tile-item.component.mjs +19 -0
  13. package/esm2022/lib/controls/content-tile/content-tile.component.mjs +63 -0
  14. package/esm2022/lib/controls/date-picker/date-picker.component.mjs +300 -0
  15. package/esm2022/lib/controls/drop-down-menu/drop-down-menu.component.mjs +72 -0
  16. package/esm2022/lib/controls/kpi-tile/kpi-tile.component.mjs +43 -0
  17. package/esm2022/lib/controls/language-selection/language-selection.component.mjs +31 -0
  18. package/{esm2020 → esm2022}/lib/controls/list-view/list-column.component.mjs +25 -25
  19. package/esm2022/lib/controls/list-view/list-details-section.component.mjs +17 -0
  20. package/{esm2020 → esm2022}/lib/controls/list-view/list-tile.component.mjs +17 -17
  21. package/esm2022/lib/controls/list-view/list-view-empty-state.component.mjs +29 -0
  22. package/esm2022/lib/controls/list-view/list-view.component.mjs +210 -0
  23. package/esm2022/lib/controls/nav-links-list/nav-links-list.component.mjs +54 -0
  24. package/esm2022/lib/controls/notifications-indicator/notifications-indicator.component.mjs +79 -0
  25. package/esm2022/lib/controls/pager/pager.component.mjs +130 -0
  26. package/esm2022/lib/controls/progress-bar/progress-bar.component.mjs +46 -0
  27. package/esm2022/lib/controls/side-pane/side-pane.component.mjs +87 -0
  28. package/esm2022/lib/controls/skeleton-loader/skeleton-loader.component.mjs +29 -0
  29. package/esm2022/lib/controls/stats-grid/stats-grid.component.mjs +49 -0
  30. package/{esm2020 → esm2022}/lib/controls/stepper/lib-step-info.directive.mjs +16 -16
  31. package/{esm2020 → esm2022}/lib/controls/stepper/lib-step-label.directive.mjs +16 -16
  32. package/esm2022/lib/controls/stepper/lib-step.component.mjs +81 -0
  33. package/esm2022/lib/controls/stepper/lib-stepper.component.mjs +108 -0
  34. package/esm2022/lib/controls/stepper/types/step-selected-event.mjs +4 -0
  35. package/{esm2020 → esm2022}/lib/controls/stepper/types/stepper-type.mjs +12 -12
  36. package/esm2022/lib/controls/tabs/lib-tab-group.component.mjs +66 -0
  37. package/{esm2020 → esm2022}/lib/controls/tabs/lib-tab-label.directive.mjs +16 -16
  38. package/{esm2020 → esm2022}/lib/controls/tabs/lib-tab.component.mjs +64 -64
  39. package/esm2022/lib/controls/toaster/toaster-container.component.mjs +28 -0
  40. package/esm2022/lib/controls/toaster/toaster.component.mjs +31 -0
  41. package/esm2022/lib/controls/toggle/toggle.component.mjs +64 -0
  42. package/esm2022/lib/controls/toggle-button/toggle-button.component.mjs +87 -0
  43. package/esm2022/lib/controls/toggle-buttons-list/toggle-buttons-list.component.mjs +34 -0
  44. package/esm2022/lib/controls/user-profile-menu/user-profile-menu.component.mjs +71 -0
  45. package/esm2022/lib/directives/click-outside.directive.mjs +189 -0
  46. package/esm2022/lib/directives/dynamic-component-host.directive.mjs +17 -0
  47. package/esm2022/lib/helpers/base-list.component.mjs +230 -0
  48. package/esm2022/lib/icons.mjs +36 -0
  49. package/esm2022/lib/layouts/shell/shell-footer/shell-footer.component.mjs +19 -0
  50. package/esm2022/lib/layouts/shell/shell-header/shell-header.component.mjs +130 -0
  51. package/esm2022/lib/layouts/shell/shell-layout/shell-layout.component.mjs +90 -0
  52. package/esm2022/lib/layouts/shell/shell-sidebar/shell-sidebar.component.mjs +54 -0
  53. package/esm2022/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.mjs +45 -0
  54. package/esm2022/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.mjs +30 -0
  55. package/esm2022/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.mjs +20 -0
  56. package/esm2022/lib/layouts/views/form-layout/form-layout.component.mjs +86 -0
  57. package/esm2022/lib/layouts/views/model-view-layout/model-view-layout.component.mjs +101 -0
  58. package/esm2022/lib/layouts/views/side-view-layout/side-view-layout.component.mjs +106 -0
  59. package/esm2022/lib/layouts/views/view-layout/view-layout.component.mjs +104 -0
  60. package/esm2022/lib/ng-components.module.mjs +320 -0
  61. package/esm2022/lib/pages/auth/auth-callback/auth-callback.component.mjs +30 -0
  62. package/esm2022/lib/pages/auth/auth-renew/auth-renew.component.mjs +31 -0
  63. package/esm2022/lib/pages/auth/logged-out/logged-out.component.mjs +28 -0
  64. package/esm2022/lib/pages/http-status/error/error.component.mjs +17 -0
  65. package/esm2022/lib/pages/http-status/page-not-found/page-not-found.component.mjs +15 -0
  66. package/esm2022/lib/pages/http-status/unauthorized/unauthorized.component.mjs +14 -0
  67. package/esm2022/lib/pipes/address.pipe.mjs +21 -0
  68. package/esm2022/lib/pipes/duration-format.pipe.mjs +64 -0
  69. package/esm2022/lib/pipes/short-number.pipe.mjs +43 -0
  70. package/esm2022/lib/services/breadcrumb.service.mjs +174 -0
  71. package/esm2022/lib/services/component-loader/component-loader-options.class.mjs +8 -0
  72. package/esm2022/lib/services/component-loader/component-loader.class.mjs +188 -0
  73. package/esm2022/lib/services/component-loader/component-loader.factory.mjs +32 -0
  74. package/{esm2020 → esm2022}/lib/services/component-loader/content-ref.class.mjs +13 -13
  75. package/esm2022/lib/services/modal-service/modal-backdrop-component.mjs +44 -0
  76. package/esm2022/lib/services/modal-service/modal-container-component.mjs +126 -0
  77. package/esm2022/lib/services/modal-service/modal-options.class.mjs +35 -0
  78. package/esm2022/lib/services/modal-service/modal-service.mjs +220 -0
  79. package/{esm2020 → esm2022}/lib/services/modal-service/modal-styles.class.mjs +11 -11
  80. package/esm2022/lib/services/modal-service/modal.class.mjs +27 -0
  81. package/{esm2020 → esm2022}/lib/services/toaster.service.mjs +26 -26
  82. package/esm2022/lib/services/user-settings.service.mjs +35 -0
  83. package/esm2022/lib/services/utilities.service.mjs +47 -0
  84. package/{esm2020 → esm2022}/lib/tokens.mjs +8 -8
  85. package/esm2022/lib/types.mjs +133 -0
  86. package/esm2022/public-api.mjs +78 -0
  87. package/fesm2022/indice-ng-components.mjs +5069 -0
  88. package/fesm2022/indice-ng-components.mjs.map +1 -0
  89. package/index.d.ts +5 -5
  90. package/lib/controls/advanced-search/advanced-search.component.d.ts +40 -40
  91. package/lib/controls/advanced-search/models.d.ts +91 -91
  92. package/lib/controls/avatar-initials/avatar-initials.component.d.ts +14 -14
  93. package/lib/controls/breadcrumb/breadcrumb-item.d.ts +7 -7
  94. package/lib/controls/breadcrumb/breadcrumb.component.d.ts +12 -12
  95. package/lib/controls/collapsible-panel/collapsible-panel.component.d.ts +10 -10
  96. package/lib/controls/combobox/combobox.component.d.ts +35 -34
  97. package/lib/controls/content-tile/content-tile-header/content-tile-header.component.d.ts +7 -0
  98. package/lib/controls/content-tile/content-tile-item/content-tile-item.component.d.ts +8 -0
  99. package/lib/controls/content-tile/content-tile.component.d.ts +23 -0
  100. package/lib/controls/date-picker/date-picker.component.d.ts +53 -53
  101. package/lib/controls/drop-down-menu/drop-down-menu.component.d.ts +26 -26
  102. package/lib/controls/kpi-tile/kpi-tile.component.d.ts +15 -15
  103. package/lib/controls/language-selection/language-selection.component.d.ts +14 -14
  104. package/lib/controls/list-view/list-column.component.d.ts +9 -9
  105. package/lib/controls/list-view/list-details-section.component.d.ts +7 -7
  106. package/lib/controls/list-view/list-tile.component.d.ts +7 -7
  107. package/lib/controls/list-view/list-view-empty-state.component.d.ts +11 -11
  108. package/lib/controls/list-view/list-view.component.d.ts +62 -61
  109. package/lib/controls/nav-links-list/nav-links-list.component.d.ts +21 -21
  110. package/lib/controls/notifications-indicator/notifications-indicator.component.d.ts +22 -22
  111. package/lib/controls/pager/pager.component.d.ts +36 -36
  112. package/lib/controls/progress-bar/progress-bar.component.d.ts +16 -0
  113. package/lib/controls/side-pane/side-pane.component.d.ts +22 -18
  114. package/lib/controls/skeleton-loader/skeleton-loader.component.d.ts +12 -11
  115. package/lib/controls/stats-grid/stats-grid.component.d.ts +16 -0
  116. package/lib/controls/stepper/lib-step-info.directive.d.ts +8 -8
  117. package/lib/controls/stepper/lib-step-label.directive.d.ts +8 -8
  118. package/lib/controls/stepper/lib-step.component.d.ts +34 -34
  119. package/lib/controls/stepper/lib-stepper.component.d.ts +43 -43
  120. package/lib/controls/stepper/types/step-selected-event.d.ts +12 -12
  121. package/lib/controls/stepper/types/stepper-type.d.ts +10 -10
  122. package/lib/controls/tabs/lib-tab-group.component.d.ts +21 -21
  123. package/lib/controls/tabs/lib-tab-label.directive.d.ts +8 -8
  124. package/lib/controls/tabs/lib-tab.component.d.ts +24 -24
  125. package/lib/controls/toaster/toaster-container.component.d.ts +13 -13
  126. package/lib/controls/toaster/toaster.component.d.ts +15 -15
  127. package/lib/controls/toggle/toggle.component.d.ts +19 -19
  128. package/lib/controls/toggle-button/toggle-button.component.d.ts +25 -25
  129. package/lib/controls/toggle-buttons-list/toggle-buttons-list.component.d.ts +15 -14
  130. package/lib/controls/user-profile-menu/user-profile-menu.component.d.ts +24 -24
  131. package/lib/directives/click-outside.directive.d.ts +40 -40
  132. package/lib/directives/dynamic-component-host.directive.d.ts +9 -9
  133. package/lib/helpers/base-list.component.d.ts +54 -53
  134. package/lib/icons.d.ts +34 -34
  135. package/lib/layouts/shell/shell-footer/shell-footer.component.d.ts +8 -8
  136. package/lib/layouts/shell/shell-header/shell-header.component.d.ts +39 -39
  137. package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +26 -26
  138. package/lib/layouts/shell/shell-sidebar/shell-sidebar.component.d.ts +20 -20
  139. package/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.d.ts +14 -14
  140. package/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.d.ts +15 -15
  141. package/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.d.ts +10 -10
  142. package/lib/layouts/views/form-layout/form-layout.component.d.ts +26 -24
  143. package/lib/layouts/views/model-view-layout/model-view-layout.component.d.ts +42 -42
  144. package/lib/layouts/views/side-view-layout/side-view-layout.component.d.ts +29 -28
  145. package/lib/layouts/views/view-layout/view-layout.component.d.ts +31 -31
  146. package/lib/ng-components.module.d.ts +71 -65
  147. package/lib/pages/auth/auth-callback/auth-callback.component.d.ts +13 -13
  148. package/lib/pages/auth/auth-renew/auth-renew.component.d.ts +12 -12
  149. package/lib/pages/auth/logged-out/logged-out.component.d.ts +12 -12
  150. package/lib/pages/http-status/error/error.component.d.ts +8 -8
  151. package/lib/pages/http-status/page-not-found/page-not-found.component.d.ts +8 -8
  152. package/lib/pages/http-status/unauthorized/unauthorized.component.d.ts +8 -8
  153. package/lib/pipes/address.pipe.d.ts +8 -8
  154. package/lib/pipes/duration-format.pipe.d.ts +8 -8
  155. package/lib/pipes/short-number.pipe.d.ts +7 -0
  156. package/lib/services/breadcrumb.service.d.ts +29 -29
  157. package/lib/services/component-loader/component-loader-options.class.d.ts +30 -30
  158. package/lib/services/component-loader/component-loader.class.d.ts +92 -92
  159. package/lib/services/component-loader/component-loader.factory.d.ts +24 -24
  160. package/lib/services/component-loader/content-ref.class.d.ts +12 -12
  161. package/lib/services/modal-service/modal-backdrop-component.d.ts +20 -20
  162. package/lib/services/modal-service/modal-container-component.d.ts +33 -33
  163. package/lib/services/modal-service/modal-options.class.d.ts +81 -81
  164. package/lib/services/modal-service/modal-service.d.ts +58 -58
  165. package/lib/services/modal-service/modal-styles.class.d.ts +10 -10
  166. package/lib/services/modal-service/modal.class.d.ts +43 -43
  167. package/lib/services/toaster.service.d.ts +11 -11
  168. package/lib/services/user-settings.service.d.ts +13 -13
  169. package/lib/services/utilities.service.d.ts +11 -11
  170. package/lib/tokens.d.ts +10 -10
  171. package/lib/types.d.ts +179 -177
  172. package/modal.css +157 -157
  173. package/package.json +13 -19
  174. package/public-api.d.ts +68 -60
  175. package/esm2020/lib/controls/advanced-search/advanced-search.component.mjs +0 -156
  176. package/esm2020/lib/controls/advanced-search/models.mjs +0 -109
  177. package/esm2020/lib/controls/avatar-initials/avatar-initials.component.mjs +0 -48
  178. package/esm2020/lib/controls/breadcrumb/breadcrumb.component.mjs +0 -26
  179. package/esm2020/lib/controls/collapsible-panel/collapsible-panel.component.mjs +0 -20
  180. package/esm2020/lib/controls/combobox/combobox.component.mjs +0 -117
  181. package/esm2020/lib/controls/date-picker/date-picker.component.mjs +0 -292
  182. package/esm2020/lib/controls/drop-down-menu/drop-down-menu.component.mjs +0 -72
  183. package/esm2020/lib/controls/kpi-tile/kpi-tile.component.mjs +0 -43
  184. package/esm2020/lib/controls/language-selection/language-selection.component.mjs +0 -31
  185. package/esm2020/lib/controls/list-view/list-details-section.component.mjs +0 -17
  186. package/esm2020/lib/controls/list-view/list-view-empty-state.component.mjs +0 -29
  187. package/esm2020/lib/controls/list-view/list-view.component.mjs +0 -206
  188. package/esm2020/lib/controls/nav-links-list/nav-links-list.component.mjs +0 -54
  189. package/esm2020/lib/controls/notifications-indicator/notifications-indicator.component.mjs +0 -79
  190. package/esm2020/lib/controls/pager/pager.component.mjs +0 -130
  191. package/esm2020/lib/controls/side-pane/side-pane.component.mjs +0 -72
  192. package/esm2020/lib/controls/skeleton-loader/skeleton-loader.component.mjs +0 -25
  193. package/esm2020/lib/controls/stepper/lib-step.component.mjs +0 -81
  194. package/esm2020/lib/controls/stepper/lib-stepper.component.mjs +0 -108
  195. package/esm2020/lib/controls/stepper/types/step-selected-event.mjs +0 -4
  196. package/esm2020/lib/controls/tabs/lib-tab-group.component.mjs +0 -66
  197. package/esm2020/lib/controls/toaster/toaster-container.component.mjs +0 -28
  198. package/esm2020/lib/controls/toaster/toaster.component.mjs +0 -31
  199. package/esm2020/lib/controls/toggle/toggle.component.mjs +0 -64
  200. package/esm2020/lib/controls/toggle-button/toggle-button.component.mjs +0 -87
  201. package/esm2020/lib/controls/toggle-buttons-list/toggle-buttons-list.component.mjs +0 -31
  202. package/esm2020/lib/controls/user-profile-menu/user-profile-menu.component.mjs +0 -71
  203. package/esm2020/lib/directives/click-outside.directive.mjs +0 -189
  204. package/esm2020/lib/directives/dynamic-component-host.directive.mjs +0 -17
  205. package/esm2020/lib/helpers/base-list.component.mjs +0 -226
  206. package/esm2020/lib/icons.mjs +0 -36
  207. package/esm2020/lib/layouts/shell/shell-footer/shell-footer.component.mjs +0 -19
  208. package/esm2020/lib/layouts/shell/shell-header/shell-header.component.mjs +0 -130
  209. package/esm2020/lib/layouts/shell/shell-layout/shell-layout.component.mjs +0 -90
  210. package/esm2020/lib/layouts/shell/shell-sidebar/shell-sidebar.component.mjs +0 -54
  211. package/esm2020/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.mjs +0 -45
  212. package/esm2020/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.mjs +0 -30
  213. package/esm2020/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.mjs +0 -20
  214. package/esm2020/lib/layouts/views/form-layout/form-layout.component.mjs +0 -80
  215. package/esm2020/lib/layouts/views/model-view-layout/model-view-layout.component.mjs +0 -101
  216. package/esm2020/lib/layouts/views/side-view-layout/side-view-layout.component.mjs +0 -98
  217. package/esm2020/lib/layouts/views/view-layout/view-layout.component.mjs +0 -104
  218. package/esm2020/lib/ng-components.module.mjs +0 -288
  219. package/esm2020/lib/pages/auth/auth-callback/auth-callback.component.mjs +0 -30
  220. package/esm2020/lib/pages/auth/auth-renew/auth-renew.component.mjs +0 -31
  221. package/esm2020/lib/pages/auth/logged-out/logged-out.component.mjs +0 -28
  222. package/esm2020/lib/pages/http-status/error/error.component.mjs +0 -17
  223. package/esm2020/lib/pages/http-status/page-not-found/page-not-found.component.mjs +0 -15
  224. package/esm2020/lib/pages/http-status/unauthorized/unauthorized.component.mjs +0 -14
  225. package/esm2020/lib/pipes/address.pipe.mjs +0 -21
  226. package/esm2020/lib/pipes/duration-format.pipe.mjs +0 -64
  227. package/esm2020/lib/services/breadcrumb.service.mjs +0 -174
  228. package/esm2020/lib/services/component-loader/component-loader-options.class.mjs +0 -8
  229. package/esm2020/lib/services/component-loader/component-loader.class.mjs +0 -188
  230. package/esm2020/lib/services/component-loader/component-loader.factory.mjs +0 -32
  231. package/esm2020/lib/services/modal-service/modal-backdrop-component.mjs +0 -44
  232. package/esm2020/lib/services/modal-service/modal-container-component.mjs +0 -126
  233. package/esm2020/lib/services/modal-service/modal-options.class.mjs +0 -35
  234. package/esm2020/lib/services/modal-service/modal-service.mjs +0 -220
  235. package/esm2020/lib/services/modal-service/modal.class.mjs +0 -27
  236. package/esm2020/lib/services/user-settings.service.mjs +0 -35
  237. package/esm2020/lib/services/utilities.service.mjs +0 -47
  238. package/esm2020/lib/types.mjs +0 -132
  239. package/esm2020/public-api.mjs +0 -70
  240. package/fesm2015/indice-ng-components.mjs +0 -4852
  241. package/fesm2015/indice-ng-components.mjs.map +0 -1
  242. package/fesm2020/indice-ng-components.mjs +0 -4763
  243. package/fesm2020/indice-ng-components.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kaWNlLW5nLWNvbXBvbmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9uZy1jb21wb25lbnRzL3NyYy9pbmRpY2UtbmctY29tcG9uZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,156 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { FilterClause, Operators, OperatorOptions } from './models';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "../date-picker/date-picker.component";
7
+ import * as i4 from "../drop-down-menu/drop-down-menu.component";
8
+ export class AdvancedSearchComponent {
9
+ constructor() {
10
+ this.advancedSearchChanged = new EventEmitter();
11
+ this.searchOptions = [];
12
+ this.operatorsDisabled = false;
13
+ this.filters = [];
14
+ this.menuOptions = [];
15
+ this.operatorMenuOptions = [];
16
+ this.operatorOptions = OperatorOptions;
17
+ this.operators = {};
18
+ this.menuOptionsDictionary = {};
19
+ }
20
+ ngOnInit() {
21
+ this.searchOptions.forEach((searchOption) => {
22
+ this.menuOptions.push({
23
+ text: searchOption.name,
24
+ value: searchOption.field,
25
+ data: searchOption.dataType,
26
+ description: searchOption.placeholder,
27
+ icon: undefined
28
+ });
29
+ if (searchOption.dataType === 'array') {
30
+ let menuOpts = [];
31
+ searchOption.options?.forEach((selectInputOption) => {
32
+ menuOpts.push({
33
+ text: selectInputOption.label,
34
+ value: selectInputOption.value,
35
+ data: undefined,
36
+ description: selectInputOption.description,
37
+ icon: undefined
38
+ });
39
+ });
40
+ this.menuOptionsDictionary[searchOption.field] = menuOpts;
41
+ }
42
+ });
43
+ }
44
+ selectedFieldChanged(field) {
45
+ this.selectedField = this.searchOptions.find((searchOption) => searchOption.field === field);
46
+ this.selectedOperator = undefined;
47
+ // Since we have special UI handling for the daterange, we don't need to fill the operatorMenuOptions in that case.
48
+ if (this.selectedField?.dataType != 'daterange') {
49
+ let operatorMenuOpts = [];
50
+ // based on the data type that we are filtering, fill the operator dropdown with the correct operators. The default is the string with equals/not-equals/contains
51
+ this.operatorOptions[this.selectedField?.dataType ?? 'string'].forEach(x => {
52
+ operatorMenuOpts.push({
53
+ text: x.description ?? x.label,
54
+ value: x.value,
55
+ data: undefined,
56
+ description: x.description,
57
+ icon: undefined
58
+ });
59
+ });
60
+ this.operatorMenuOptions = operatorMenuOpts;
61
+ // Preselect the first option from the operators menu so there will always be a default value, which is the 'equals' operator for all data types for now.
62
+ this.selectedOperator = this.operatorMenuOptions[0].value;
63
+ }
64
+ this.fieldValue = undefined;
65
+ }
66
+ selectedOperatorChanged(operator) {
67
+ this.selectedOperator = operator;
68
+ }
69
+ selectedFieldValueChanged(fieldValue) {
70
+ this.fieldValue = fieldValue;
71
+ }
72
+ search() {
73
+ if (!this.selectedField || !this.selectedField.dataType) {
74
+ return;
75
+ }
76
+ // the filter is of type 'daterange'
77
+ if (this.selectedField.dataType === 'daterange') {
78
+ if (!this.selectedField.multiTerm) {
79
+ this.filters = this.filters.filter((f) => {
80
+ return f.dataType !== 'datetime';
81
+ });
82
+ }
83
+ if (this.fieldValueDateFrom) {
84
+ const filterClauseFrom = new FilterClause(this.selectedField.field, this.fieldValueDateFrom, Operators.GREATER_THAN_EQUAL.value, 'datetime', this.searchOptions);
85
+ this.filters.push(filterClauseFrom);
86
+ }
87
+ if (this.fieldValueDateTo) {
88
+ const filterClauseTo = new FilterClause(this.selectedField.field, this.fieldValueDateTo, Operators.LESS_THAN_EQUAL.value, 'datetime', this.searchOptions);
89
+ this.filters.push(filterClauseTo);
90
+ }
91
+ }
92
+ // the filter isn't of type 'daterange' (everything else)
93
+ else {
94
+ if (this.fieldValue === undefined) { // handle empty field value
95
+ return;
96
+ }
97
+ // if no operator was provided, it falls back to the default 'equals' operator
98
+ this.selectedOperator = this.selectedOperator ?? Operators.EQUALS.value;
99
+ // create the filterClause
100
+ const filterClause = new FilterClause(this.selectedField.field, this.fieldValue, this.selectedOperator, this.selectedField.dataType, this.searchOptions);
101
+ if (!this.selectedField.multiTerm) { // multiTerm means that we can have multiple filter values of the SAME filter clause (eg "filter case types that are Phone OR Address")
102
+ this.filters = this.filters.filter((f) => {
103
+ return f.member !== this.selectedField.field;
104
+ });
105
+ }
106
+ else { // selectedField is multiTerm: just checking if we already have the newly selected filterClause in filters
107
+ const isDuplicate = this.filters.some(f => f.toString() === filterClause.toString());
108
+ if (isDuplicate) {
109
+ return;
110
+ }
111
+ }
112
+ this.filters.push(filterClause);
113
+ this.fieldValue = undefined;
114
+ }
115
+ this.advancedSearchChanged.emit(this.filters);
116
+ }
117
+ removeFilter(index) {
118
+ if (this.filters && this.filters.length >= index) {
119
+ this.filters.splice(index, 1);
120
+ this.advancedSearchChanged.emit(this.filters);
121
+ }
122
+ }
123
+ isDateValueUnpicked() {
124
+ return this.fieldValueDateFrom === undefined && this.fieldValueDateTo === undefined;
125
+ }
126
+ isFieldAndOperatorUnpicked() {
127
+ // if the operators are enabled we need to check for both the field value and the operator value
128
+ return this.operatorsDisabled ? this.fieldValue === undefined : (this.fieldValue === undefined || this.selectedOperator === undefined);
129
+ }
130
+ clear() {
131
+ this.fieldValueDateFrom = undefined;
132
+ this.fieldValueDateTo = undefined;
133
+ this.selectedField = undefined;
134
+ this.fieldValue = undefined;
135
+ this.selectedOperator = undefined;
136
+ this.filters = [];
137
+ this.advancedSearchChanged.emit(this.filters);
138
+ }
139
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: AdvancedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
140
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: AdvancedSearchComponent, selector: "lib-advanced-search", inputs: { searchOptions: ["search-options", "searchOptions"], operatorsDisabled: ["operators-disabled", "operatorsDisabled"], filters: "filters" }, outputs: { advancedSearchChanged: "advancedSearchChanged" }, ngImport: i0, template: "<div class=\"advanced-search-container\">\n <div class=\"advanced-search-filter\">\n <!--SEARCH FIELDS-->\n <div class=\"advanced-search-filter-field-container\">\n <label class=\"advanced-search-filter-field-label\"\n for=\"selectedField\">\n \u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03BD\u03AC:\n </label>\n <lib-drop-down-menu [options]=\"menuOptions\"\n (selectedChanged)=\"selectedFieldChanged($event)\"></lib-drop-down-menu>\n </div>\n <!--SEARCH FIELDS OPERATOR MENU-->\n <div *ngIf=\"!operatorsDisabled && selectedField\"\n class=\"advanced-search-filter-operator-container\">\n <div *ngIf=\"selectedField.dataType === 'array' || selectedField.dataType === 'string'\">\n <label class=\"advanced-search-filter-operator-label\"\n for=\"selectedOperator\">\n &nbsp;\n </label>\n <lib-drop-down-menu [options]=\"operatorMenuOptions\"\n [selected]=\"selectedOperator\"\n (selectedChanged)=\"selectedOperatorChanged($event)\"></lib-drop-down-menu>\n </div>\n </div>\n <!--SEARCH FIELDS INPUT-->\n <div *ngIf=\"selectedField\"\n class=\"advanced-search-filter-value-container\">\n <div *ngIf=\"selectedField.dataType === 'array'\">\n <label class=\"advanced-search-filter-value-label\"\n for=\"fieldValue\">\n &nbsp;\n </label>\n <lib-drop-down-menu [options]=\"menuOptionsDictionary[selectedField.field]\"\n [selected]=\"fieldValue\"\n (selectedChanged)=\"selectedFieldValueChanged($event)\"></lib-drop-down-menu>\n </div>\n <div *ngIf=\"selectedField.dataType === 'string'\">\n <label class=\"advanced-search-filter-value-label\"\n for=\"fieldValue\">\n &nbsp;\n </label>\n <input (keyup.enter)=\"search()\"\n [(ngModel)]=\"fieldValue\"\n name=\"fieldValue\"\n type=\"text\"\n placeholder=\"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\"\n maxlength=\"300\"\n class=\"advanced-search-filter-value-input\">\n </div>\n <ng-container *ngIf=\"selectedField.dataType === 'daterange'\">\n <div>\n <span class=\"advanced-search-filter-value-input-daterange-from\">\n \u0391\u03C0\u03CC:\n </span>\n <lib-date-picker [maxDate]=\"fieldValueDateTo\"\n [(ngModel)]=\"fieldValueDateFrom\"\n [placeholder]=\"'01/01/2022'\"></lib-date-picker>\n </div>\n <div *ngIf=\"selectedField.dataType === 'daterange'\">\n <span class=\"advanced-search-filter-value-input-daterange-to\">\n \u0388\u03C9\u03C2:\n </span>\n <lib-date-picker [minDate]=\"fieldValueDateFrom\"\n [(ngModel)]=\"fieldValueDateTo\"\n [placeholder]=\"'01/01/2022'\"></lib-date-picker>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf=\"selectedField\">\n <!--DO SEARCH-->\n <button type=\"button\"\n [ngClass]=\"{'opacity-50 cursor-not-allowed': isDateValueUnpicked() && isFieldAndOperatorUnpicked()}\"\n [disabled]=\"isDateValueUnpicked() && isFieldAndOperatorUnpicked()\"\n (click)=\"search()\">\n <i [class]=\"'ms-Icon ms-Icon--Search'\"></i>\n </button>\n <!--CLEAR-->\n <button type=\"button\"\n (click)=\"clear()\">\n <i [class]=\"'ms-Icon ms-Icon--Cancel'\"></i>\n </button>\n </ng-container>\n </div>\n <!--FILTER CHIPS-->\n <!-- This example requires Tailwind CSS v2.0+ -->\n <ng-container *ngFor=\"let filter of filters; let i = index\">\n <span *ngIf=\"filter && filter.member\"\n class=\"advanced-search-chips\">\n {{ filter.uiName }} {{ filter.uiOperator }} '{{ filter.uiValue }}'\n <button (click)=\"removeFilter(i)\"\n type=\"button\"\n class=\"advanced-search-chips-remove-filter\">\n <span class=\"sr-only\">Remove large option</span>\n <svg class=\"h-2 w-2\"\n stroke=\"currentColor\"\n fill=\"none\"\n viewBox=\"0 0 8 8\">\n <path stroke-linecap=\"round\"\n stroke-width=\"1.5\"\n d=\"M1 1l6 6m0-6L1 7\" />\n </svg>\n </button>\n </span>\n </ng-container>\n</div>", 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: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.DatepickerComponent, selector: "lib-date-picker", inputs: ["readonly", "disabled", "inline", "display-format", "placeholder", "value", "minDate", "maxDate"], outputs: ["valueChange"] }, { kind: "component", type: i4.DropDownMenuComponent, selector: "lib-drop-down-menu", inputs: ["options", "selected", "multiple", "placeholder", "show-icons"], outputs: ["selectedChange", "selectedChanged"] }] }); }
141
+ }
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: AdvancedSearchComponent, decorators: [{
143
+ type: Component,
144
+ args: [{ selector: 'lib-advanced-search', template: "<div class=\"advanced-search-container\">\n <div class=\"advanced-search-filter\">\n <!--SEARCH FIELDS-->\n <div class=\"advanced-search-filter-field-container\">\n <label class=\"advanced-search-filter-field-label\"\n for=\"selectedField\">\n \u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03BD\u03AC:\n </label>\n <lib-drop-down-menu [options]=\"menuOptions\"\n (selectedChanged)=\"selectedFieldChanged($event)\"></lib-drop-down-menu>\n </div>\n <!--SEARCH FIELDS OPERATOR MENU-->\n <div *ngIf=\"!operatorsDisabled && selectedField\"\n class=\"advanced-search-filter-operator-container\">\n <div *ngIf=\"selectedField.dataType === 'array' || selectedField.dataType === 'string'\">\n <label class=\"advanced-search-filter-operator-label\"\n for=\"selectedOperator\">\n &nbsp;\n </label>\n <lib-drop-down-menu [options]=\"operatorMenuOptions\"\n [selected]=\"selectedOperator\"\n (selectedChanged)=\"selectedOperatorChanged($event)\"></lib-drop-down-menu>\n </div>\n </div>\n <!--SEARCH FIELDS INPUT-->\n <div *ngIf=\"selectedField\"\n class=\"advanced-search-filter-value-container\">\n <div *ngIf=\"selectedField.dataType === 'array'\">\n <label class=\"advanced-search-filter-value-label\"\n for=\"fieldValue\">\n &nbsp;\n </label>\n <lib-drop-down-menu [options]=\"menuOptionsDictionary[selectedField.field]\"\n [selected]=\"fieldValue\"\n (selectedChanged)=\"selectedFieldValueChanged($event)\"></lib-drop-down-menu>\n </div>\n <div *ngIf=\"selectedField.dataType === 'string'\">\n <label class=\"advanced-search-filter-value-label\"\n for=\"fieldValue\">\n &nbsp;\n </label>\n <input (keyup.enter)=\"search()\"\n [(ngModel)]=\"fieldValue\"\n name=\"fieldValue\"\n type=\"text\"\n placeholder=\"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\"\n maxlength=\"300\"\n class=\"advanced-search-filter-value-input\">\n </div>\n <ng-container *ngIf=\"selectedField.dataType === 'daterange'\">\n <div>\n <span class=\"advanced-search-filter-value-input-daterange-from\">\n \u0391\u03C0\u03CC:\n </span>\n <lib-date-picker [maxDate]=\"fieldValueDateTo\"\n [(ngModel)]=\"fieldValueDateFrom\"\n [placeholder]=\"'01/01/2022'\"></lib-date-picker>\n </div>\n <div *ngIf=\"selectedField.dataType === 'daterange'\">\n <span class=\"advanced-search-filter-value-input-daterange-to\">\n \u0388\u03C9\u03C2:\n </span>\n <lib-date-picker [minDate]=\"fieldValueDateFrom\"\n [(ngModel)]=\"fieldValueDateTo\"\n [placeholder]=\"'01/01/2022'\"></lib-date-picker>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf=\"selectedField\">\n <!--DO SEARCH-->\n <button type=\"button\"\n [ngClass]=\"{'opacity-50 cursor-not-allowed': isDateValueUnpicked() && isFieldAndOperatorUnpicked()}\"\n [disabled]=\"isDateValueUnpicked() && isFieldAndOperatorUnpicked()\"\n (click)=\"search()\">\n <i [class]=\"'ms-Icon ms-Icon--Search'\"></i>\n </button>\n <!--CLEAR-->\n <button type=\"button\"\n (click)=\"clear()\">\n <i [class]=\"'ms-Icon ms-Icon--Cancel'\"></i>\n </button>\n </ng-container>\n </div>\n <!--FILTER CHIPS-->\n <!-- This example requires Tailwind CSS v2.0+ -->\n <ng-container *ngFor=\"let filter of filters; let i = index\">\n <span *ngIf=\"filter && filter.member\"\n class=\"advanced-search-chips\">\n {{ filter.uiName }} {{ filter.uiOperator }} '{{ filter.uiValue }}'\n <button (click)=\"removeFilter(i)\"\n type=\"button\"\n class=\"advanced-search-chips-remove-filter\">\n <span class=\"sr-only\">Remove large option</span>\n <svg class=\"h-2 w-2\"\n stroke=\"currentColor\"\n fill=\"none\"\n viewBox=\"0 0 8 8\">\n <path stroke-linecap=\"round\"\n stroke-width=\"1.5\"\n d=\"M1 1l6 6m0-6L1 7\" />\n </svg>\n </button>\n </span>\n </ng-container>\n</div>" }]
145
+ }], ctorParameters: () => [], propDecorators: { advancedSearchChanged: [{
146
+ type: Output
147
+ }], searchOptions: [{
148
+ type: Input,
149
+ args: ['search-options']
150
+ }], operatorsDisabled: [{
151
+ type: Input,
152
+ args: ['operators-disabled']
153
+ }], filters: [{
154
+ type: Input
155
+ }] } });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9hZHZhbmNlZC1zZWFyY2gvYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9hZHZhbmNlZC1zZWFyY2gvYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFnQixZQUFZLEVBQW1CLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7OztBQU1uRyxNQUFNLE9BQU8sdUJBQXVCO0lBZ0JsQztRQWZVLDBCQUFxQixHQUFpQyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUMxRSxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDL0Isc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQ3ZELFlBQU8sR0FBbUIsRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUMvQix3QkFBbUIsR0FBaUIsRUFBRSxDQUFDO1FBQ3ZDLG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ2xDLGNBQVMsR0FBb0MsRUFBRSxDQUFDO1FBTWhELDBCQUFxQixHQUFvQyxFQUFFLENBQUM7SUFFbkQsQ0FBQztJQUVWLFFBQVE7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNwQixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7Z0JBQ3ZCLEtBQUss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SW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW51T3B0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgU2VhcmNoT3B0aW9uLCBGaWx0ZXJDbGF1c2UsIFF1ZXJ5UGFyYW1ldGVycywgT3BlcmF0b3JzLCBPcGVyYXRvck9wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hZHZhbmNlZC1zZWFyY2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBhZHZhbmNlZFNlYXJjaENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxGaWx0ZXJDbGF1c2VbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckNsYXVzZVtdPigpO1xuICBASW5wdXQoJ3NlYXJjaC1vcHRpb25zJykgc2VhcmNoT3B0aW9uczogU2VhcmNoT3B0aW9uW10gPSBbXTtcbiAgQElucHV0KCdvcGVyYXRvcnMtZGlzYWJsZWQnKSBvcGVyYXRvcnNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBmaWx0ZXJzOiBGaWx0ZXJDbGF1c2VbXSA9IFtdO1xuICBwdWJsaWMgbWVudU9wdGlvbnM6IE1lbnVPcHRpb25bXSA9IFtdO1xuICBwdWJsaWMgb3BlcmF0b3JNZW51T3B0aW9uczogTWVudU9wdGlvbltdID0gW107XG4gIHB1YmxpYyBvcGVyYXRvck9wdGlvbnMgPSBPcGVyYXRvck9wdGlvbnM7XG4gIHB1YmxpYyBvcGVyYXRvcnM6IHsgW2tleTogc3RyaW5nXTogTWVudU9wdGlvbltdIH0gPSB7fTtcbiAgcHVibGljIHNlbGVjdGVkT3BlcmF0b3I/OiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZEZpZWxkPzogU2VhcmNoT3B0aW9uO1xuICBwdWJsaWMgZmllbGRWYWx1ZT86IHN0cmluZztcbiAgcHVibGljIGZpZWxkVmFsdWVEYXRlRnJvbTogYW55O1xuICBwdWJsaWMgZmllbGRWYWx1ZURhdGVUbzogYW55O1xuICBwdWJsaWMgbWVudU9wdGlvbnNEaWN0aW9uYXJ5OiB7IFtrZXk6IHN0cmluZ106IE1lbnVPcHRpb25bXSB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hPcHRpb25zLmZvckVhY2goKHNlYXJjaE9wdGlvbikgPT4ge1xuICAgICAgdGhpcy5tZW51T3B0aW9ucy5wdXNoKHtcbiAgICAgICAgdGV4dDogc2VhcmNoT3B0aW9uLm5hbWUsXG4gICAgICAgIHZhbHVlOiBzZWFyY2hPcHRpb24uZmllbGQsXG4gICAgICAgIGRhdGE6IHNlYXJjaE9wdGlvbi5kYXRhVHlwZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHNlYXJjaE9wdGlvbi5wbGFjZWhvbGRlcixcbiAgICAgICAgaWNvbjogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIGlmIChzZWFyY2hPcHRpb24uZGF0YVR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgbGV0IG1lbnVPcHRzOiBNZW51T3B0aW9uW10gPSBbXTtcbiAgICAgICAgc2VhcmNoT3B0aW9uLm9wdGlvbnM/LmZvckVhY2goKHNlbGVjdElucHV0T3B0aW9uKSA9PiB7XG4gICAgICAgICAgbWVudU9wdHMucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBzZWxlY3RJbnB1dE9wdGlvbi5sYWJlbCxcbiAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RJbnB1dE9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3RJbnB1dE9wdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGljb246IHVuZGVmaW5lZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLm1lbnVPcHRpb25zRGljdGlvbmFyeVtzZWFyY2hPcHRpb24uZmllbGRdID0gbWVudU9wdHM7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ZWRGaWVsZENoYW5nZWQoZmllbGQ6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IHRoaXMuc2VhcmNoT3B0aW9ucy5maW5kKChzZWFyY2hPcHRpb24pID0+IHNlYXJjaE9wdGlvbi5maWVsZCA9PT0gZmllbGQpO1xuICAgIHRoaXMuc2VsZWN0ZWRPcGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICAvLyBTaW5jZSB3ZSBoYXZlIHNwZWNpYWwgVUkgaGFuZGxpbmcgZm9yIHRoZSBkYXRlcmFuZ2UsIHdlIGRvbid0IG5lZWQgdG8gZmlsbCB0aGUgb3BlcmF0b3JNZW51T3B0aW9ucyBpbiB0aGF0IGNhc2UuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWVsZD8uZGF0YVR5cGUgIT0gJ2RhdGVyYW5nZScpIHtcbiAgICAgIGxldCBvcGVyYXRvck1lbnVPcHRzOiBNZW51T3B0aW9uW10gPSBbXTtcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSBkYXRhIHR5cGUgdGhhdCB3ZSBhcmUgZmlsdGVyaW5nLCBmaWxsIHRoZSBvcGVyYXRvciBkcm9wZG93biB3aXRoIHRoZSBjb3JyZWN0IG9wZXJhdG9ycy4gVGhlIGRlZmF1bHQgaXMgdGhlIHN0cmluZyB3aXRoIGVxdWFscy9ub3QtZXF1YWxzL2NvbnRhaW5zXG4gICAgICB0aGlzLm9wZXJhdG9yT3B0aW9uc1t0aGlzLnNlbGVjdGVkRmllbGQ/LmRhdGFUeXBlID8/ICdzdHJpbmcnXS5mb3JFYWNoKHggPT4ge1xuICAgICAgICBvcGVyYXRvck1lbnVPcHRzLnB1c2goe1xuICAgICAgICAgIHRleHQ6IHguZGVzY3JpcHRpb24gPz8geC5sYWJlbCxcbiAgICAgICAgICB2YWx1ZTogeC52YWx1ZSxcbiAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHguZGVzY3JpcHRpb24sXG4gICAgICAgICAgaWNvbjogdW5kZWZpbmVkXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgdGhpcy5vcGVyYXRvck1lbnVPcHRpb25zID0gb3BlcmF0b3JNZW51T3B0cztcbiAgICAgIC8vIFByZXNlbGVjdCB0aGUgZmlyc3Qgb3B0aW9uIGZyb20gdGhlIG9wZXJhdG9ycyBtZW51IHNvIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgZGVmYXVsdCB2YWx1ZSwgd2hpY2ggaXMgdGhlICdlcXVhbHMnIG9wZXJhdG9yIGZvciBhbGwgZGF0YSB0eXBlcyBmb3Igbm93LlxuICAgICAgdGhpcy5zZWxlY3RlZE9wZXJhdG9yID0gdGhpcy5vcGVyYXRvck1lbnVPcHRpb25zWzBdLnZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmZpZWxkVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ZWRPcGVyYXRvckNoYW5nZWQob3BlcmF0b3I6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRPcGVyYXRvciA9IG9wZXJhdG9yO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdGVkRmllbGRWYWx1ZUNoYW5nZWQoZmllbGRWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5maWVsZFZhbHVlID0gZmllbGRWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2goKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRmllbGQgfHwgIXRoaXMuc2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyB0aGUgZmlsdGVyIGlzIG9mIHR5cGUgJ2RhdGVyYW5nZSdcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZXJhbmdlJykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmllbGQubXVsdGlUZXJtKSB7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuZmlsdGVycy5maWx0ZXIoKGYpID0+IHtcbiAgICAgICAgICByZXR1cm4gZi5kYXRhVHlwZSAhPT0gJ2RhdGV0aW1lJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWVsZFZhbHVlRGF0ZUZyb20pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyQ2xhdXNlRnJvbSA9IG5ldyBGaWx0ZXJDbGF1c2UodGhpcy5zZWxlY3RlZEZpZWxkLmZpZWxkLCB0aGlzLmZpZWxkVmFsdWVEYXRlRnJvbSwgT3BlcmF0b3JzLkdSRUFURVJfVEhBTl9FUVVBTC52YWx1ZSBhcyBGaWx0ZXJDbGF1c2UuT3AsICdkYXRldGltZScsIHRoaXMuc2VhcmNoT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlckNsYXVzZUZyb20pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maWVsZFZhbHVlRGF0ZVRvKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlckNsYXVzZVRvID0gbmV3IEZpbHRlckNsYXVzZSh0aGlzLnNlbGVjdGVkRmllbGQuZmllbGQsIHRoaXMuZmllbGRWYWx1ZURhdGVUbywgT3BlcmF0b3JzLkxFU1NfVEhBTl9FUVVBTC52YWx1ZSBhcyBGaWx0ZXJDbGF1c2UuT3AsICdkYXRldGltZScsIHRoaXMuc2VhcmNoT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlckNsYXVzZVRvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlIGZpbHRlciBpc24ndCBvZiB0eXBlICdkYXRlcmFuZ2UnIChldmVyeXRoaW5nIGVsc2UpXG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5maWVsZFZhbHVlID09PSB1bmRlZmluZWQpIHsgLy8gaGFuZGxlIGVtcHR5IGZpZWxkIHZhbHVlXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGlmIG5vIG9wZXJhdG9yIHdhcyBwcm92aWRlZCwgaXQgZmFsbHMgYmFjayB0byB0aGUgZGVmYXVsdCAnZXF1YWxzJyBvcGVyYXRvclxuICAgICAgdGhpcy5zZWxlY3RlZE9wZXJhdG9yID0gdGhpcy5zZWxlY3RlZE9wZXJhdG9yID8/IE9wZXJhdG9ycy5FUVVBTFMudmFsdWU7XG4gICAgICAvLyBjcmVhdGUgdGhlIGZpbHRlckNsYXVzZVxuICAgICAgY29uc3QgZmlsdGVyQ2xhdXNlID0gbmV3IEZpbHRlckNsYXVzZSh0aGlzLnNlbGVjdGVkRmllbGQuZmllbGQsIHRoaXMuZmllbGRWYWx1ZSwgdGhpcy5zZWxlY3RlZE9wZXJhdG9yIGFzIEZpbHRlckNsYXVzZS5PcCwgdGhpcy5zZWxlY3RlZEZpZWxkLmRhdGFUeXBlLCB0aGlzLnNlYXJjaE9wdGlvbnMpO1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmllbGQubXVsdGlUZXJtKSB7IC8vIG11bHRpVGVybSBtZWFucyB0aGF0IHdlIGNhbiBoYXZlIG11bHRpcGxlIGZpbHRlciB2YWx1ZXMgb2YgdGhlIFNBTUUgZmlsdGVyIGNsYXVzZSAoZWcgXCJmaWx0ZXIgY2FzZSB0eXBlcyB0aGF0IGFyZSBQaG9uZSBPUiBBZGRyZXNzXCIpXG4gICAgICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuZmlsdGVycy5maWx0ZXIoKGYpID0+IHtcbiAgICAgICAgICByZXR1cm4gZi5tZW1iZXIgIT09IHRoaXMuc2VsZWN0ZWRGaWVsZCEuZmllbGQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHsgLy8gc2VsZWN0ZWRGaWVsZCBpcyBtdWx0aVRlcm06IGp1c3QgY2hlY2tpbmcgaWYgd2UgYWxyZWFkeSBoYXZlIHRoZSBuZXdseSBzZWxlY3RlZCBmaWx0ZXJDbGF1c2UgaW4gZmlsdGVyc1xuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHRoaXMuZmlsdGVycy5zb21lKGYgPT4gZi50b1N0cmluZygpID09PSBmaWx0ZXJDbGF1c2UudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChpc0R1cGxpY2F0ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbHRlcnMucHVzaChmaWx0ZXJDbGF1c2UpO1xuICAgICAgdGhpcy5maWVsZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoQ2hhbmdlZC5lbWl0KHRoaXMuZmlsdGVycyk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJzICYmIHRoaXMuZmlsdGVycy5sZW5ndGggPj0gaW5kZXgpIHtcbiAgICAgIHRoaXMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaENoYW5nZWQuZW1pdCh0aGlzLmZpbHRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0RhdGVWYWx1ZVVucGlja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkVmFsdWVEYXRlRnJvbSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuZmllbGRWYWx1ZURhdGVUbyA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGlzRmllbGRBbmRPcGVyYXRvclVucGlja2VkKCk6IGJvb2xlYW4ge1xuICAgIC8vIGlmIHRoZSBvcGVyYXRvcnMgYXJlIGVuYWJsZWQgd2UgbmVlZCB0byBjaGVjayBmb3IgYm90aCB0aGUgZmllbGQgdmFsdWUgYW5kIHRoZSBvcGVyYXRvciB2YWx1ZVxuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yc0Rpc2FibGVkID8gdGhpcy5maWVsZFZhbHVlID09PSB1bmRlZmluZWQgOiAodGhpcy5maWVsZFZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy5zZWxlY3RlZE9wZXJhdG9yID09PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMuZmllbGRWYWx1ZURhdGVGcm9tID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZmllbGRWYWx1ZURhdGVUbyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWVsZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VsZWN0ZWRPcGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoQ2hhbmdlZC5lbWl0KHRoaXMuZmlsdGVycyk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoLWZpbHRlclwiPlxuICAgICAgICA8IS0tU0VBUkNIIEZJRUxEUy0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoLWZpbHRlci1maWVsZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1maWx0ZXItZmllbGQtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgIGZvcj1cInNlbGVjdGVkRmllbGRcIj5cbiAgICAgICAgICAgICAgICDOkc69zrHOts6uz4TOt8+DzrcgzrHOvc6sOlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsaWItZHJvcC1kb3duLW1lbnUgW29wdGlvbnNdPVwibWVudU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2VkKT1cInNlbGVjdGVkRmllbGRDaGFuZ2VkKCRldmVudClcIj48L2xpYi1kcm9wLWRvd24tbWVudT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS1TRUFSQ0ggRklFTERTIE9QRVJBVE9SIE1FTlUtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFvcGVyYXRvcnNEaXNhYmxlZCAmJiBzZWxlY3RlZEZpZWxkXCJcbiAgICAgICAgICAgICBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1maWx0ZXItb3BlcmF0b3ItY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSA9PT0gJ2FycmF5JyB8fCBzZWxlY3RlZEZpZWxkLmRhdGFUeXBlID09PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1maWx0ZXItb3BlcmF0b3ItbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJzZWxlY3RlZE9wZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGxpYi1kcm9wLWRvd24tbWVudSBbb3B0aW9uc109XCJvcGVyYXRvck1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZE9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZWQpPVwic2VsZWN0ZWRPcGVyYXRvckNoYW5nZWQoJGV2ZW50KVwiPjwvbGliLWRyb3AtZG93bi1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tU0VBUkNIIEZJRUxEUyBJTlBVVC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRGaWVsZFwiXG4gICAgICAgICAgICAgY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtZmlsdGVyLXZhbHVlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkRmllbGQuZGF0YVR5cGUgPT09ICdhcnJheSdcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtZmlsdGVyLXZhbHVlLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiZmllbGRWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsaWItZHJvcC1kb3duLW1lbnUgW29wdGlvbnNdPVwibWVudU9wdGlvbnNEaWN0aW9uYXJ5W3NlbGVjdGVkRmllbGQuZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJmaWVsZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZWQpPVwic2VsZWN0ZWRGaWVsZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCI+PC9saWItZHJvcC1kb3duLW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEZpZWxkLmRhdGFUeXBlID09PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1maWx0ZXItdmFsdWUtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJmaWVsZFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWVsZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIs6Rzr3Osc62zq7PhM63z4POt1wiXG4gICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoLWZpbHRlci12YWx1ZS1pbnB1dFwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGVyYW5nZSdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1maWx0ZXItdmFsdWUtaW5wdXQtZGF0ZXJhbmdlLWZyb21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIM6Rz4DPjDpcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWRhdGUtcGlja2VyIFttYXhEYXRlXT1cImZpZWxkVmFsdWVEYXRlVG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGRWYWx1ZURhdGVGcm9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJzAxLzAxLzIwMjInXCI+PC9saWItZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkRmllbGQuZGF0YVR5cGUgPT09ICdkYXRlcmFuZ2UnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoLWZpbHRlci12YWx1ZS1pbnB1dC1kYXRlcmFuZ2UtdG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIM6Iz4nPgjpcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWRhdGUtcGlja2VyIFttaW5EYXRlXT1cImZpZWxkVmFsdWVEYXRlRnJvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZFZhbHVlRGF0ZVRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJzAxLzAxLzIwMjInXCI+PC9saWItZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZEZpZWxkXCI+XG4gICAgICAgICAgICA8IS0tRE8gU0VBUkNILS0+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJzogaXNEYXRlVmFsdWVVbnBpY2tlZCgpICYmIGlzRmllbGRBbmRPcGVyYXRvclVucGlja2VkKCl9XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGF0ZVZhbHVlVW5waWNrZWQoKSAmJiBpc0ZpZWxkQW5kT3BlcmF0b3JVbnBpY2tlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCI+XG4gICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIidtcy1JY29uIG1zLUljb24tLVNlYXJjaCdcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwhLS1DTEVBUi0tPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKClcIj5cbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ21zLUljb24gbXMtSWNvbi0tQ2FuY2VsJ1wiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tRklMVEVSIENISVBTLS0+XG4gICAgPCEtLSBUaGlzIGV4YW1wbGUgcmVxdWlyZXMgVGFpbHdpbmQgQ1NTIHYyLjArIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyICYmIGZpbHRlci5tZW1iZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1jaGlwc1wiPlxuICAgICAgICAgICAge3sgZmlsdGVyLnVpTmFtZSB9fSB7eyBmaWx0ZXIudWlPcGVyYXRvciB9fSAne3sgZmlsdGVyLnVpVmFsdWUgfX0nXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtY2hpcHMtcmVtb3ZlLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlJlbW92ZSBsYXJnZSBvcHRpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtMiB3LTJcIlxuICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgOCA4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEgMWw2IDZtMC02TDEgN1wiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+Il19
@@ -0,0 +1,109 @@
1
+ import { formatDate } from "@angular/common";
2
+ export var Operators;
3
+ (function (Operators) {
4
+ Operators.EQUALS = { label: '=', value: 'eq', description: 'Ίσο με' };
5
+ Operators.NOT_EQUALS = { label: '≠', value: 'neq', description: 'Διάφορο του' };
6
+ Operators.GREATER_THAN = { label: '>', value: 'gt', description: 'Μεγαλύτερο από' };
7
+ Operators.LESS_THAN = { label: '<', value: 'lt', description: 'Μικρότερο από' };
8
+ Operators.GREATER_THAN_EQUAL = { label: '≥', value: 'gte', description: 'Μεγαλύτερο ή ίσο με' };
9
+ Operators.LESS_THAN_EQUAL = { label: '≤', value: 'lte', description: 'Μικρότερο ή ίσο με' };
10
+ Operators.CONTAINS = { label: '∋', value: 'contains', description: 'Περιέχει' };
11
+ Operators.IN = { label: '1..n', value: 'in', description: 'Μέσα σε' };
12
+ })(Operators || (Operators = {}));
13
+ export var QueryParameters;
14
+ (function (QueryParameters) {
15
+ QueryParameters["VIEW"] = "view";
16
+ QueryParameters["PAGE_SIZE"] = "pagesize";
17
+ QueryParameters["PAGE"] = "page";
18
+ QueryParameters["SEARCH"] = "search";
19
+ QueryParameters["SORT_FIELD"] = "sort";
20
+ QueryParameters["SORT_DIRECTION"] = "dir";
21
+ QueryParameters["FILTER"] = "filter";
22
+ QueryParameters["FILTER_FROM"] = "from";
23
+ QueryParameters["FILTER_TO"] = "to";
24
+ })(QueryParameters || (QueryParameters = {}));
25
+ export const OperatorOptions = {
26
+ 'string': [Operators.EQUALS, Operators.NOT_EQUALS, Operators.CONTAINS],
27
+ 'array': [Operators.EQUALS, Operators.NOT_EQUALS]
28
+ };
29
+ export class FilterClause {
30
+ constructor(member, value, operator, dataType, searchOptions) {
31
+ this.member = member;
32
+ this.value = value;
33
+ this.operator = operator || Operators.EQUALS.value;
34
+ this.dataType = dataType === undefined ? 'string' : dataType;
35
+ // uiName
36
+ if (this.dataType === 'datetime') { // special treatment for dates
37
+ this.uiName = this.member === QueryParameters.FILTER_FROM ? 'Από' : 'Έως';
38
+ }
39
+ else {
40
+ this.uiName = this.member;
41
+ let fo = {};
42
+ if (searchOptions && searchOptions.length > 0) {
43
+ fo = searchOptions.find((f) => {
44
+ return f.field === this.member;
45
+ });
46
+ }
47
+ if (fo) {
48
+ this.uiName = fo.name;
49
+ }
50
+ }
51
+ // We don't want a uiOperator for the datetime dataType. For strings and arrays we have the equals/not-equals/contains operators. The switch case can be expanded for more data types/operators when needed.
52
+ if (this.dataType === 'datetime') {
53
+ this.uiOperator = '';
54
+ }
55
+ else {
56
+ switch (this.operator) {
57
+ case (Operators.EQUALS.value):
58
+ this.uiOperator = Operators.EQUALS.label;
59
+ break;
60
+ case (Operators.NOT_EQUALS.value):
61
+ this.uiOperator = Operators.NOT_EQUALS.label;
62
+ break;
63
+ case (Operators.CONTAINS.value):
64
+ this.uiOperator = Operators.CONTAINS.label;
65
+ break;
66
+ }
67
+ }
68
+ // uiValue
69
+ this.uiValue = this.value;
70
+ if ((this.dataType === 'datetime')) {
71
+ this.uiValue = formatDate(new Date(this.value), 'dd/MM/yyyy', 'en-US');
72
+ }
73
+ let fo;
74
+ if (searchOptions && searchOptions.length > 0) {
75
+ fo = searchOptions.find((f) => {
76
+ return f.field === this.member;
77
+ });
78
+ }
79
+ if (fo && fo.options) { // special treatment for arrays, if there is an options property then it is an array
80
+ this.dataType = 'array';
81
+ this.uiValue = fo.options.find((option) => {
82
+ return option.value === this.value;
83
+ })?.label;
84
+ }
85
+ }
86
+ static parse(text) {
87
+ const pattern = /^\s*([A-Za-z_][A-Za-z0-9_\.]+)::(eq|neq|gt|lt|gte|lte|contains|in)::(\((string|integer|number|boolean|datetime)\))?(.+)\s*$/gi;
88
+ if (text != null) {
89
+ const matches = pattern.exec(text);
90
+ if (matches != null) {
91
+ const path = matches[1];
92
+ const op = matches[2];
93
+ const dt = matches[4];
94
+ const v = matches[5];
95
+ return new FilterClause(path, v, op, dt);
96
+ }
97
+ }
98
+ return undefined;
99
+ }
100
+ toString() {
101
+ if (this.dataType !== 'string' && this.dataType !== 'array') {
102
+ return `${this.member}::${this.operator}::(${this.dataType})${this.value}`;
103
+ }
104
+ else {
105
+ return `${this.member}::${this.operator}::${this.value}`;
106
+ }
107
+ }
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2FkdmFuY2VkLXNlYXJjaC9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE1BQU0sS0FBVyxTQUFTLENBU3pCO0FBVEQsV0FBaUIsU0FBUztJQUNYLGdCQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzVELG9CQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3RFLHNCQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUM7SUFDMUUsbUJBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDdEUsNEJBQWtCLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLENBQUM7SUFDdEYseUJBQWUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNsRixrQkFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN0RSxZQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUs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QUFDO1lBQ2pCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxFQUFFLEdBQW9CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxFQUFFLEdBQW9CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVyQixPQUFPLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDNUQsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsTUFBTSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIE9wZXJhdG9ycyB7XG4gIGV4cG9ydCBjb25zdCBFUVVBTFMgPSB7IGxhYmVsOiAnPScsIHZhbHVlOiAnZXEnLCBkZXNjcmlwdGlvbjogJ86Kz4POvyDOvM61JyB9O1xuICBleHBvcnQgY29uc3QgTk9UX0VRVUFMUyA9IHsgbGFiZWw6ICfiiaAnLCB2YWx1ZTogJ25lcScsIGRlc2NyaXB0aW9uOiAnzpTOuc6sz4bOv8+Bzr8gz4TOv8+FJyB9O1xuICBleHBvcnQgY29uc3QgR1JFQVRFUl9USEFOID0geyBsYWJlbDogJz4nLCB2YWx1ZTogJ2d0JywgZGVzY3JpcHRpb246ICfOnM61zrPOsc67z43PhM61z4HOvyDOsc+Az4wnIH07XG4gIGV4cG9ydCBjb25zdCBMRVNTX1RIQU4gPSB7IGxhYmVsOiAnPCcsIHZhbHVlOiAnbHQnLCBkZXNjcmlwdGlvbjogJ86czrnOus+Bz4zPhM61z4HOvyDOsc+Az4wnIH07XG4gIGV4cG9ydCBjb25zdCBHUkVBVEVSX1RIQU5fRVFVQUwgPSB7IGxhYmVsOiAn4omlJywgdmFsdWU6ICdndGUnLCBkZXNjcmlwdGlvbjogJ86czrXOs86xzrvPjc+EzrXPgc6/IM6uIM6vz4POvyDOvM61JyB9O1xuICBleHBvcnQgY29uc3QgTEVTU19USEFOX0VRVUFMID0geyBsYWJlbDogJ+KJpCcsIHZhbHVlOiAnbHRlJywgZGVzY3JpcHRpb246ICfOnM65zrrPgc+Mz4TOtc+Bzr8gzq4gzq/Pg86/IM68zrUnIH07XG4gIGV4cG9ydCBjb25zdCBDT05UQUlOUyA9IHsgbGFiZWw6ICfiiIsnLCB2YWx1ZTogJ2NvbnRhaW5zJywgZGVzY3JpcHRpb246ICfOoM61z4HOuc6tz4fOtc65JyB9O1xuICBleHBvcnQgY29uc3QgSU4gPSB7IGxhYmVsOiAnMS4ubicsIHZhbHVlOiAnaW4nLCBkZXNjcmlwdGlvbjogJ86czq3Pg86xIM+DzrUnIH07XG59XG5cbmV4cG9ydCBlbnVtIFF1ZXJ5UGFyYW1ldGVycyB7XG4gIFZJRVcgPSAndmlldycsXG4gIFBBR0VfU0laRSA9ICdwYWdlc2l6ZScsXG4gIFBBR0UgPSAncGFnZScsXG4gIFNFQVJDSCA9ICdzZWFyY2gnLFxuICBTT1JUX0ZJRUxEID0gJ3NvcnQnLFxuICBTT1JUX0RJUkVDVElPTiA9ICdkaXInLFxuICBGSUxURVIgPSAnZmlsdGVyJyxcbiAgRklMVEVSX0ZST00gPSAnZnJvbScsXG4gIEZJTFRFUl9UTyA9ICd0bydcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hPcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIGRhdGFUeXBlOiBGaWx0ZXJDbGF1c2UuRHQ7XG4gIGFycmF5PzogYm9vbGVhbjtcbiAgbXVsdGlUZXJtPzogYm9vbGVhbjtcbiAgb3B0aW9ucz86IFNlbGVjdElucHV0T3B0aW9uW107XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdElucHV0T3B0aW9uIHtcbiAgdmFsdWU6IGFueTtcbiAgbGFiZWw6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmlsdGVyQ2xhdXNlIHtcbiAgZXhwb3J0IHR5cGUgT3AgPSAnZXEnIHwgJ25lcScgfCAnZ3QnIHwgJ2x0JyB8ICdndGUnIHwgJ2x0ZScgfCAnY29udGFpbnMnIHwgJ2luJztcbiAgZXhwb3J0IHR5cGUgRHQgPSAnc3RyaW5nJyB8ICdpbnRlZ2VyJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2RhdGV0aW1lJyB8ICdhcnJheScgfCAnZGF0ZXJhbmdlJyB8IHVuZGVmaW5lZDtcbn1cblxuLy8gRGljdGlvbmFyeSB3aXRoIHRoZSBEYXRhVHlwZSBhcyBhIGtleSBhbmQgdGhlIHZhbHVlIGFuIGFycmF5IG9mIGF2YWlsYWJsZSBvcGVyYXRvcnMuXG5leHBvcnQgaW50ZXJmYWNlIElEaWN0aW9uYXJ5PFQ+IHtcbiAgW2tleTogc3RyaW5nXTogVDtcbn1cblxuZXhwb3J0IGNvbnN0IE9wZXJhdG9yT3B0aW9uczogSURpY3Rpb25hcnk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9W10+ID0ge1xuICAnc3RyaW5nJzogW09wZXJhdG9ycy5FUVVBTFMsIE9wZXJhdG9ycy5OT1RfRVFVQUxTLCBPcGVyYXRvcnMuQ09OVEFJTlNdLFxuICAnYXJyYXknOiBbT3BlcmF0b3JzLkVRVUFMUywgT3BlcmF0b3JzLk5PVF9FUVVBTFNdXG59O1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyQ2xhdXNlIHtcbiAgLy8gTWVtYmVyIHBhdGggdG8gY29tcGFyZVxuICBwdWJsaWMgbWVtYmVyOiBzdHJpbmc7XG4gIC8vIFZhbHVlIHRvIGNvbXBhcmUgYWdhaW5zdFxuICBwdWJsaWMgdmFsdWU6IGFueTtcbiAgLy8gVGhlIG9wZXJhdG9yIHRvIGFwcGx5IGJldHdlZW4gdGhlIEluZGljZS5UeXBlcy5GaWx0ZXJDbGF1c2UuTWVtYmVyIGFuZCBJbmRpY2UuVHlwZXMuRmlsdGVyQ2xhdXNlLlZhbHVlXG4gIHB1YmxpYyBvcGVyYXRvcjogRmlsdGVyQ2xhdXNlLk9wO1xuICAvLyBUaGUgSW5kaWNlLlR5cGVzLkpzb25EYXRhVHlwZSBvZiB0aGUgZGF0YSBJbmRpY2UuVHlwZXMuRmlsdGVyQ2xhdXNlLk1lbWJlclxuICBwdWJsaWMgZGF0YVR5cGU6IEZpbHRlckNsYXVzZS5EdDtcblxuICBwdWJsaWMgdWlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyB1aU9wZXJhdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyB1aVZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lbWJlcjogc3RyaW5nLCB2YWx1ZTogYW55LCBvcGVyYXRvcj86IEZpbHRlckNsYXVzZS5PcCwgZGF0YVR5cGU/OiBGaWx0ZXJDbGF1c2UuRHQsIHNlYXJjaE9wdGlvbnM/OiBTZWFyY2hPcHRpb25bXSkgeyAvLyB5ZWFwLCB3ZSBkbyBuZWVkIHNlYXJjaE9wdGlvbnMgZm9yIHRoZSB1aSB2aWV3IG1vZGVsXG4gICAgdGhpcy5tZW1iZXIgPSBtZW1iZXI7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvciB8fCBPcGVyYXRvcnMuRVFVQUxTLnZhbHVlIGFzIEZpbHRlckNsYXVzZS5PcDtcbiAgICB0aGlzLmRhdGFUeXBlID0gZGF0YVR5cGUgPT09IHVuZGVmaW5lZCA/ICdzdHJpbmcnIDogZGF0YVR5cGU7XG4gICAgLy8gdWlOYW1lXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09ICdkYXRldGltZScpIHsgLy8gc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGRhdGVzXG4gICAgICB0aGlzLnVpTmFtZSA9IHRoaXMubWVtYmVyID09PSBRdWVyeVBhcmFtZXRlcnMuRklMVEVSX0ZST00gPyAnzpHPgM+MJyA6ICfOiM+Jz4InO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVpTmFtZSA9IHRoaXMubWVtYmVyO1xuICAgICAgbGV0IGZvID0gPGFueT57fTtcbiAgICAgIGlmIChzZWFyY2hPcHRpb25zICYmIHNlYXJjaE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmbyA9IHNlYXJjaE9wdGlvbnMuZmluZCgoZikgPT4ge1xuICAgICAgICAgIHJldHVybiBmLmZpZWxkID09PSB0aGlzLm1lbWJlcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmbykge1xuICAgICAgICB0aGlzLnVpTmFtZSA9IGZvLm5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlIGRvbid0IHdhbnQgYSB1aU9wZXJhdG9yIGZvciB0aGUgZGF0ZXRpbWUgZGF0YVR5cGUuIEZvciBzdHJpbmdzIGFuZCBhcnJheXMgd2UgaGF2ZSB0aGUgZXF1YWxzL25vdC1lcXVhbHMvY29udGFpbnMgb3BlcmF0b3JzLiBUaGUgc3dpdGNoIGNhc2UgY2FuIGJlIGV4cGFuZGVkIGZvciBtb3JlIGRhdGEgdHlwZXMvb3BlcmF0b3JzIHdoZW4gbmVlZGVkLlxuICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICB0aGlzLnVpT3BlcmF0b3IgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0aGlzLm9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgKE9wZXJhdG9ycy5FUVVBTFMudmFsdWUpOlxuICAgICAgICAgIHRoaXMudWlPcGVyYXRvciA9IE9wZXJhdG9ycy5FUVVBTFMubGFiZWw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgKE9wZXJhdG9ycy5OT1RfRVFVQUxTLnZhbHVlKTpcbiAgICAgICAgICB0aGlzLnVpT3BlcmF0b3IgPSBPcGVyYXRvcnMuTk9UX0VRVUFMUy5sYWJlbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAoT3BlcmF0b3JzLkNPTlRBSU5TLnZhbHVlKTpcbiAgICAgICAgICB0aGlzLnVpT3BlcmF0b3IgPSBPcGVyYXRvcnMuQ09OVEFJTlMubGFiZWw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVpVmFsdWVcbiAgICB0aGlzLnVpVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmICgodGhpcy5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJykpIHtcbiAgICAgIHRoaXMudWlWYWx1ZSA9IGZvcm1hdERhdGUobmV3IERhdGUodGhpcy52YWx1ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyk7XG4gICAgfVxuICAgIGxldCBmbzogU2VhcmNoT3B0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmIChzZWFyY2hPcHRpb25zICYmIHNlYXJjaE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm8gPSBzZWFyY2hPcHRpb25zLmZpbmQoKGYpID0+IHtcbiAgICAgICAgcmV0dXJuIGYuZmllbGQgPT09IHRoaXMubWVtYmVyO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChmbyAmJiBmby5vcHRpb25zKSB7IC8vIHNwZWNpYWwgdHJlYXRtZW50IGZvciBhcnJheXMsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbnMgcHJvcGVydHkgdGhlbiBpdCBpcyBhbiBhcnJheVxuICAgICAgdGhpcy5kYXRhVHlwZSA9ICdhcnJheSc7XG4gICAgICB0aGlzLnVpVmFsdWUgPSBmbyEub3B0aW9ucyEuZmluZCgob3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBvcHRpb24udmFsdWUgPT09IHRoaXMudmFsdWU7XG4gICAgICB9KT8ubGFiZWw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwYXJzZSh0ZXh0OiBzdHJpbmcpOiBGaWx0ZXJDbGF1c2UgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBhdHRlcm4gPSAvXlxccyooW0EtWmEtel9dW0EtWmEtejAtOV9cXC5dKyk6OihlcXxuZXF8Z3R8bHR8Z3RlfGx0ZXxjb250YWluc3xpbik6OihcXCgoc3RyaW5nfGludGVnZXJ8bnVtYmVyfGJvb2xlYW58ZGF0ZXRpbWUpXFwpKT8oLispXFxzKiQvZ2k7XG4gICAgaWYgKHRleHQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyh0ZXh0KTtcbiAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IG1hdGNoZXNbMV07XG4gICAgICAgIGNvbnN0IG9wID0gPEZpbHRlckNsYXVzZS5PcD5tYXRjaGVzWzJdO1xuICAgICAgICBjb25zdCBkdCA9IDxGaWx0ZXJDbGF1c2UuRHQ+bWF0Y2hlc1s0XTtcbiAgICAgICAgY29uc3QgdiA9IG1hdGNoZXNbNV07XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJDbGF1c2UocGF0aCwgdiwgb3AsIGR0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlICE9PSAnc3RyaW5nJyAmJiB0aGlzLmRhdGFUeXBlICE9PSAnYXJyYXknKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5tZW1iZXJ9Ojoke3RoaXMub3BlcmF0b3J9OjooJHt0aGlzLmRhdGFUeXBlfSkke3RoaXMudmFsdWV9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3RoaXMubWVtYmVyfTo6JHt0aGlzLm9wZXJhdG9yfTo6JHt0aGlzLnZhbHVlfWA7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,48 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class AvatarInitialsComponent {
5
+ constructor() {
6
+ this.large = false;
7
+ this.colors = [
8
+ '#EB7181', // red
9
+ '#468547', // green
10
+ '#FFD558', // yellow
11
+ '#3670B2', // blue
12
+ ];
13
+ }
14
+ ngOnInit() {
15
+ this.createInititals();
16
+ const randomIndex = Math.floor(Math.random() * Math.floor(this.colors.length));
17
+ // assign this to a class if you want to randomly change background colors of the circle.
18
+ this.circleColor = this.colors[randomIndex];
19
+ }
20
+ createInititals() {
21
+ if (this.name) {
22
+ let initials = '';
23
+ for (let i = 0; i < this.name.length; i++) {
24
+ if (this.name.charAt(i) === ' ') {
25
+ continue;
26
+ }
27
+ if (this.name.charAt(i) === this.name.charAt(i).toUpperCase()) {
28
+ initials += this.name.charAt(i);
29
+ if (initials.length === 2) {
30
+ break;
31
+ }
32
+ }
33
+ }
34
+ this.initials = initials;
35
+ }
36
+ }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: AvatarInitialsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: AvatarInitialsComponent, selector: "lib-avatar-initials", inputs: { name: "name", large: "large" }, ngImport: i0, template: "<div [ngClass]=\"large ? 'avatar-container-large': 'avatar-container'\">\n <span [ngClass]=\"large ? 'avatar-text-large': 'avatar-text'\">{{ initials }}</span>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: AvatarInitialsComponent, decorators: [{
41
+ type: Component,
42
+ args: [{ selector: 'lib-avatar-initials', template: "<div [ngClass]=\"large ? 'avatar-container-large': 'avatar-container'\">\n <span [ngClass]=\"large ? 'avatar-text-large': 'avatar-text'\">{{ initials }}</span>\n</div>\n" }]
43
+ }], ctorParameters: () => [], propDecorators: { name: [{
44
+ type: Input
45
+ }], large: [{
46
+ type: Input
47
+ }] } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLWluaXRpYWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9hdmF0YXItaW5pdGlhbHMvYXZhdGFyLWluaXRpYWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9hdmF0YXItaW5pdGlhbHMvYXZhdGFyLWluaXRpYWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFNekQsTUFBTSxPQUFPLHVCQUF1QjtJQWNsQztRQVZPLFVBQUssR0FBRyxLQUFLLENBQUM7UUFHYixXQUFNLEdBQUc7WUFDZixTQUFTLEVBQUUsTUFBTTtZQUNqQixTQUFTLEVBQUUsUUFBUTtZQUNuQixTQUFTLEVBQUUsU0FBUztZQUNwQixTQUFTLEVBQUUsT0FBTztTQUNuQixDQUFDO0lBRWMsQ0FBQztJQUVqQixRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9FLHlGQUF5RjtRQUN6RixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ2hDLFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQzlELFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUMxQixNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQzs4R0F2Q1UsdUJBQXVCO2tHQUF2Qix1QkFBdUIscUdDTnBDLDhLQUdBOzsyRkRHYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0UscUJBQXFCO3dEQUt4QixJQUFJO3NCQURWLEtBQUs7Z0JBR0MsS0FBSztzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hdmF0YXItaW5pdGlhbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXZhdGFyLWluaXRpYWxzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBdmF0YXJJbml0aWFsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbGFyZ2UgPSBmYWxzZTtcbiAgcHVibGljIGluaXRpYWxzPzogc3RyaW5nO1xuICBwdWJsaWMgY2lyY2xlQ29sb3IhOiBzdHJpbmc7XG4gIHByaXZhdGUgY29sb3JzID0gW1xuICAgICcjRUI3MTgxJywgLy8gcmVkXG4gICAgJyM0Njg1NDcnLCAvLyBncmVlblxuICAgICcjRkZENTU4JywgLy8geWVsbG93XG4gICAgJyMzNjcwQjInLCAvLyBibHVlXG4gIF07XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUluaXRpdGFscygpO1xuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTWF0aC5mbG9vcih0aGlzLmNvbG9ycy5sZW5ndGgpKTtcbiAgICAvLyBhc3NpZ24gdGhpcyB0byBhIGNsYXNzIGlmIHlvdSB3YW50IHRvIHJhbmRvbWx5IGNoYW5nZSBiYWNrZ3JvdW5kIGNvbG9ycyBvZiB0aGUgY2lyY2xlLlxuICAgIHRoaXMuY2lyY2xlQ29sb3IgPSB0aGlzLmNvbG9yc1tyYW5kb21JbmRleF07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUluaXRpdGFscygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uYW1lKSB7XG4gICAgICBsZXQgaW5pdGlhbHMgPSAnJztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLm5hbWUuY2hhckF0KGkpID09PSAnICcpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYW1lLmNoYXJBdChpKSA9PT0gdGhpcy5uYW1lLmNoYXJBdChpKS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgaW5pdGlhbHMgKz0gdGhpcy5uYW1lLmNoYXJBdChpKTtcbiAgICAgICAgICBpZiAoaW5pdGlhbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaW5pdGlhbHMgPSBpbml0aWFscztcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwibGFyZ2UgPyAnYXZhdGFyLWNvbnRhaW5lci1sYXJnZSc6ICdhdmF0YXItY29udGFpbmVyJ1wiPlxuICAgIDxzcGFuIFtuZ0NsYXNzXT1cImxhcmdlID8gJ2F2YXRhci10ZXh0LWxhcmdlJzogJ2F2YXRhci10ZXh0J1wiPnt7IGluaXRpYWxzIH19PC9zcGFuPlxuPC9kaXY+XG4iXX0=
@@ -1,14 +1,14 @@
1
- export class BreadcrumbItem {
2
- constructor(title, url) {
3
- this.title = title;
4
- this.url = url;
5
- this.level = 0;
6
- }
7
- get urlSegments() {
8
- if (this.url) {
9
- return this.url?.split('/').filter(x => x !== '');
10
- }
11
- return undefined;
12
- }
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLFlBQW1CLEtBQWMsRUFBUyxHQUFZO1FBQW5DLFVBQUssR0FBTCxLQUFLLENBQVM7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFTO1FBQ2xELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFJRCxJQUFXLFdBQVc7UUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDckQ7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQnJlYWRjcnVtYkl0ZW0ge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHRpdGxlPzogc3RyaW5nLCBwdWJsaWMgdXJsPzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sZXZlbCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxldmVsOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGdldCB1cmxTZWdtZW50cygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVybD8uc3BsaXQoJy8nKS5maWx0ZXIoeCA9PiB4ICE9PSAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbn0iXX0=
1
+ export class BreadcrumbItem {
2
+ constructor(title, url) {
3
+ this.title = title;
4
+ this.url = url;
5
+ this.level = 0;
6
+ }
7
+ get urlSegments() {
8
+ if (this.url) {
9
+ return this.url?.split('/').filter(x => x !== '');
10
+ }
11
+ return undefined;
12
+ }
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLFlBQW1CLEtBQWMsRUFBUyxHQUFZO1FBQW5DLFVBQUssR0FBTCxLQUFLLENBQVM7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFTO1FBQ2xELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFJRCxJQUFXLFdBQVc7UUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJJdGVtIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGl0bGU/OiBzdHJpbmcsIHB1YmxpYyB1cmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sZXZlbCA9IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGxldmVsOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgZ2V0IHVybFNlZ21lbnRzKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHRoaXMudXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cmw/LnNwbGl0KCcvJykuZmlsdGVyKHggPT4geCAhPT0gJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufSJdfQ==
@@ -0,0 +1,26 @@
1
+ import { Component } from '@angular/core';
2
+ import { BreadcrumbItem } from './breadcrumb-item';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/breadcrumb.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/router";
7
+ export class BreadcrumbComponent {
8
+ constructor(_breadcrumbService) {
9
+ this._breadcrumbService = _breadcrumbService;
10
+ this.breadcrumb = [];
11
+ }
12
+ ngOnInit() {
13
+ this._breadcrumbService
14
+ .breadcrumb
15
+ .subscribe((breadcrumb) => {
16
+ this.breadcrumb = [...breadcrumb, new BreadcrumbItem('', '')];
17
+ });
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1.BreadcrumbService }], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: BreadcrumbComponent, selector: "lib-breadcrumb", ngImport: i0, template: "<nav class=\"bg-white border-b border-gray-200 flex\"\n aria-label=\"Breadcrumb\">\n <ol role=\"list\"\n class=\"w-full mx-auto px-4 flex space-x-4 sm:px-6 lg:px-8\">\n <li class=\"flex\"\n *ngFor=\"let item of breadcrumb; let i = index\">\n <div class=\"flex items-center\">\n <ng-container *ngTemplateOutlet=\"i === 0 ? homeTemplate : linkTemplate; context: { value: item }\"></ng-container>\n </div>\n </li>\n </ol>\n</nav>\n<ng-template let-value=\"value\"\n #homeTemplate>\n <a [routerLink]=\"value.urlSegments\"\n [title]=\"value.title\"\n class=\"text-gray-400 hover:text-gray-500\">\n <svg class=\"flex-shrink-0 h-5 w-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path d=\"M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z\" />\n </svg>\n <span class=\"sr-only\">{{ value.title }}</span>\n </a>\n</ng-template>\n<ng-template let-value=\"value\"\n #linkTemplate>\n <svg class=\"flex-shrink-0 w-6 h-full text-gray-200\"\n viewBox=\"0 0 24 44\"\n preserveAspectRatio=\"none\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\">\n <path d=\"M.293 0l22 22-22 22h1.414l22-22-22-22H.293z\" />\n </svg>\n <a [routerLink]=\"value.urlSegments\"\n class=\"ml-4 text-sm font-medium text-gray-500 hover:text-gray-700\">\n {{ value.title }}\n </a>\n</ng-template>", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: BreadcrumbComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'lib-breadcrumb', template: "<nav class=\"bg-white border-b border-gray-200 flex\"\n aria-label=\"Breadcrumb\">\n <ol role=\"list\"\n class=\"w-full mx-auto px-4 flex space-x-4 sm:px-6 lg:px-8\">\n <li class=\"flex\"\n *ngFor=\"let item of breadcrumb; let i = index\">\n <div class=\"flex items-center\">\n <ng-container *ngTemplateOutlet=\"i === 0 ? homeTemplate : linkTemplate; context: { value: item }\"></ng-container>\n </div>\n </li>\n </ol>\n</nav>\n<ng-template let-value=\"value\"\n #homeTemplate>\n <a [routerLink]=\"value.urlSegments\"\n [title]=\"value.title\"\n class=\"text-gray-400 hover:text-gray-500\">\n <svg class=\"flex-shrink-0 h-5 w-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path d=\"M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z\" />\n </svg>\n <span class=\"sr-only\">{{ value.title }}</span>\n </a>\n</ng-template>\n<ng-template let-value=\"value\"\n #linkTemplate>\n <svg class=\"flex-shrink-0 w-6 h-full text-gray-200\"\n viewBox=\"0 0 24 44\"\n preserveAspectRatio=\"none\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\">\n <path d=\"M.293 0l22 22-22 22h1.414l22-22-22-22H.293z\" />\n </svg>\n <a [routerLink]=\"value.urlSegments\"\n class=\"ml-4 text-sm font-medium text-gray-500 hover:text-gray-700\">\n {{ value.title }}\n </a>\n</ng-template>" }]
25
+ }], ctorParameters: () => [{ type: i1.BreadcrumbService }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUdsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBTW5ELE1BQU0sT0FBTyxtQkFBbUI7SUFDNUIsWUFDWSxrQkFBcUM7UUFBckMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQVcxQyxlQUFVLEdBQXFCLEVBQUUsQ0FBQztJQVZyQyxDQUFDO0lBRUUsUUFBUTtRQUNYLElBQUksQ0FBQyxrQkFBa0I7YUFDbEIsVUFBVTthQUNWLFNBQVMsQ0FBQyxDQUFDLFVBQTRCLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOzhHQVhRLG1CQUFtQjtrR0FBbkIsbUJBQW1CLHNEQ1RoQywwb0RBeUNjOzsyRkRoQ0QsbUJBQW1CO2tCQUovQixTQUFTOytCQUNJLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJyZWFkY3J1bWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnJlYWRjcnVtYi5zZXJ2aWNlJztcbmltcG9ydCB7IEJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi9icmVhZGNydW1iLWl0ZW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1icmVhZGNydW1iJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2JyZWFkY3J1bWJTZXJ2aWNlOiBCcmVhZGNydW1iU2VydmljZVxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JyZWFkY3J1bWJTZXJ2aWNlXG4gICAgICAgICAgICAuYnJlYWRjcnVtYlxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYnJlYWRjcnVtYjogQnJlYWRjcnVtYkl0ZW1bXSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYiA9IFsuLi5icmVhZGNydW1iLCBuZXcgQnJlYWRjcnVtYkl0ZW0oJycsICcnKV07XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnJlYWRjcnVtYjogQnJlYWRjcnVtYkl0ZW1bXSA9IFtdO1xufVxuIiwiPG5hdiBjbGFzcz1cImJnLXdoaXRlIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBmbGV4XCJcbiAgICAgYXJpYS1sYWJlbD1cIkJyZWFkY3J1bWJcIj5cbiAgPG9sIHJvbGU9XCJsaXN0XCJcbiAgICAgIGNsYXNzPVwidy1mdWxsIG14LWF1dG8gcHgtNCBmbGV4IHNwYWNlLXgtNCBzbTpweC02IGxnOnB4LThcIj5cbiAgICA8bGkgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYnJlYWRjcnVtYjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpID09PSAwID8gaG9tZVRlbXBsYXRlIDogbGlua1RlbXBsYXRlOyBjb250ZXh0OiB7IHZhbHVlOiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gIDwvb2w+XG48L25hdj5cbjxuZy10ZW1wbGF0ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgI2hvbWVUZW1wbGF0ZT5cbiAgPGEgW3JvdXRlckxpbmtdPVwidmFsdWUudXJsU2VnbWVudHNcIlxuICAgICBbdGl0bGVdPVwidmFsdWUudGl0bGVcIlxuICAgICBjbGFzcz1cInRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1ncmF5LTUwMFwiPlxuICAgIDxzdmcgY2xhc3M9XCJmbGV4LXNocmluay0wIGgtNSB3LTVcIlxuICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICA8cGF0aCBkPVwiTTEwLjcwNyAyLjI5M2ExIDEgMCAwMC0xLjQxNCAwbC03IDdhMSAxIDAgMDAxLjQxNCAxLjQxNEw0IDEwLjQxNFYxN2ExIDEgMCAwMDEgMWgyYTEgMSAwIDAwMS0xdi0yYTEgMSAwIDAxMS0xaDJhMSAxIDAgMDExIDF2MmExIDEgMCAwMDEgMWgyYTEgMSAwIDAwMS0xdi02LjU4NmwuMjkzLjI5M2ExIDEgMCAwMDEuNDE0LTEuNDE0bC03LTd6XCIgLz5cbiAgICA8L3N2Zz5cbiAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyB2YWx1ZS50aXRsZSB9fTwvc3Bhbj5cbiAgPC9hPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgI2xpbmtUZW1wbGF0ZT5cbiAgPHN2ZyBjbGFzcz1cImZsZXgtc2hyaW5rLTAgdy02IGgtZnVsbCB0ZXh0LWdyYXktMjAwXCJcbiAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDQ0XCJcbiAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiXG4gICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPHBhdGggZD1cIk0uMjkzIDBsMjIgMjItMjIgMjJoMS40MTRsMjItMjItMjItMjJILjI5M3pcIiAvPlxuICA8L3N2Zz5cbiAgPGEgW3JvdXRlckxpbmtdPVwidmFsdWUudXJsU2VnbWVudHNcIlxuICAgICBjbGFzcz1cIm1sLTQgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGhvdmVyOnRleHQtZ3JheS03MDBcIj5cbiAgICB7eyB2YWx1ZS50aXRsZSB9fVxuICA8L2E+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -0,0 +1,20 @@
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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: CollapsiblePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: CollapsiblePanelComponent, selector: "lib-collapsible-panel", inputs: { title: "title" }, ngImport: i0, template: "<div class=\"collapsible-panel-container\">\n <div class=\"collapsible-panel-container-shadow\">\n <div class=\"collapsible-panel-container-inner\">\n <button type=\"button\" class=\"collapsible-panel-button\" (click)=\"visible = !visible\">\n <div class=\"collapsible-panel-button-content-container\">\n <span>{{ title }} </span>\n <span class=\"ico-plus\"></span>\n </div>\n </button>\n <div class=\"collapsible-panel-content-container\" *ngIf=\"visible\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: CollapsiblePanelComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'lib-collapsible-panel', template: "<div class=\"collapsible-panel-container\">\n <div class=\"collapsible-panel-container-shadow\">\n <div class=\"collapsible-panel-container-inner\">\n <button type=\"button\" class=\"collapsible-panel-button\" (click)=\"visible = !visible\">\n <div class=\"collapsible-panel-button-content-container\">\n <span>{{ title }} </span>\n <span class=\"ico-plus\"></span>\n </div>\n </button>\n <div class=\"collapsible-panel-content-container\" *ngIf=\"visible\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n" }]
17
+ }], ctorParameters: () => [], propDecorators: { title: [{
18
+ type: Input
19
+ }] } });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2libGUtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2NvbGxhcHNpYmxlLXBhbmVsL2NvbGxhcHNpYmxlLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9jb2xsYXBzaWJsZS1wYW5lbC9jb2xsYXBzaWJsZS1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBTXpELE1BQU0sT0FBTyx5QkFBeUI7SUFJcEM7UUFIUyxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM5QixZQUFPLEdBQUcsS0FBSyxDQUFDO0lBRVAsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzs4R0FQVSx5QkFBeUI7a0dBQXpCLHlCQUF5Qix5RkNOdEMsZ2xCQWVBOzsyRkRUYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0UsdUJBQXVCO3dEQUl4QixLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNvbGxhcHNpYmxlLXBhbmVsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbGxhcHNpYmxlLXBhbmVsLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDb2xsYXBzaWJsZVBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdmlzaWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImNvbGxhcHNpYmxlLXBhbmVsLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtY29udGFpbmVyLXNoYWRvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzaWJsZS1wYW5lbC1jb250YWluZXItaW5uZXJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtYnV0dG9uXCIgKGNsaWNrKT1cInZpc2libGUgPSAhdmlzaWJsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtYnV0dG9uLWNvbnRlbnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgPHNwYW4+e3sgdGl0bGUgfX0gPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvLXBsdXNcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtY29udGVudC1jb250YWluZXJcIiAqbmdJZj1cInZpc2libGVcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=