@unipin/angular-applet 18.9.5 → 18.9.6

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 (484) hide show
  1. package/README.md +8 -11
  2. package/esm2022/graphql/generated.mjs +938 -0
  3. package/esm2022/lib/components/approval/detail/approval-detail.component.mjs +78 -0
  4. package/esm2022/lib/components/approval/form/approval-form.component.mjs +128 -0
  5. package/esm2022/lib/components/approval/index.mjs +5 -0
  6. package/esm2022/lib/components/approval/list/approval-list.component.mjs +114 -0
  7. package/esm2022/lib/components/approval/list/provide-approval-entities.util.mjs +9 -0
  8. package/esm2022/lib/components/approval/services/approval.service.mjs +46 -0
  9. package/esm2022/lib/components/audit/detail/audit-detail.component.mjs +123 -0
  10. package/esm2022/lib/components/audit/index.mjs +3 -0
  11. package/esm2022/lib/components/audit/list/audit-list.component.mjs +81 -0
  12. package/esm2022/lib/components/audit/service/audit.service.mjs +49 -0
  13. package/esm2022/lib/components/audit/types/audit-detail-form.type.mjs +2 -0
  14. package/esm2022/lib/components/buttons/group/btn-group.component.mjs +43 -0
  15. package/esm2022/lib/components/buttons/group/interfaces/btn-group-config.interface.mjs +2 -0
  16. package/esm2022/lib/components/buttons/index.mjs +3 -0
  17. package/esm2022/lib/components/buttons/loading/btn-loading.component.mjs +48 -0
  18. package/esm2022/lib/components/containers/applet-container/applet-container.component.mjs +55 -0
  19. package/esm2022/lib/components/containers/applet-container/provide-applet-config.util.mjs +9 -0
  20. package/esm2022/lib/components/containers/colum-header-container/column-header-container.component.mjs +23 -0
  21. package/esm2022/lib/components/containers/column-container/column-container.component.mjs +79 -0
  22. package/esm2022/lib/components/containers/column-container/directives/lazy-route.directive.mjs +57 -0
  23. package/esm2022/lib/components/containers/index.mjs +7 -0
  24. package/esm2022/lib/components/containers/list-container/index.mjs +3 -0
  25. package/esm2022/lib/components/containers/list-container/interfaces/list-container-config.interface.mjs +2 -0
  26. package/esm2022/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.mjs +58 -0
  27. package/esm2022/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.mjs +57 -0
  28. package/esm2022/lib/components/containers/modal-container/modal-container.component.mjs +40 -0
  29. package/esm2022/lib/components/filter/filter.component.mjs +222 -0
  30. package/esm2022/lib/components/filter/index.mjs +2 -0
  31. package/esm2022/lib/components/filter/interfaces/filter-config.interface.mjs +2 -0
  32. package/esm2022/lib/components/filter/interfaces/filter-field.interface.mjs +2 -0
  33. package/esm2022/lib/components/filter/interfaces/filter-search-event.interface.mjs +2 -0
  34. package/esm2022/lib/components/forms/country-input/form-country-input.component.mjs +122 -0
  35. package/esm2022/lib/components/forms/currency-input/form-currency-input.component.mjs +157 -0
  36. package/esm2022/lib/components/forms/date/form-date.component.mjs +117 -0
  37. package/esm2022/lib/components/forms/image-picker/directives/drag-n-drop.directive.mjs +49 -0
  38. package/esm2022/lib/components/forms/image-picker/form-image-picker.component.mjs +68 -0
  39. package/esm2022/lib/components/forms/index.mjs +12 -0
  40. package/esm2022/lib/components/forms/input/form-input.component.mjs +98 -0
  41. package/esm2022/lib/components/forms/number/form-number.component.mjs +97 -0
  42. package/esm2022/lib/components/forms/number/pipes/locale-number.pipe.mjs +33 -0
  43. package/esm2022/lib/components/forms/password/form-password.component.mjs +100 -0
  44. package/esm2022/lib/components/forms/rate-group-code-input/form-rate-group-code-input.component.mjs +135 -0
  45. package/esm2022/lib/components/forms/searchable-select/form-searchable-select.component.mjs +138 -0
  46. package/esm2022/lib/components/forms/select/form-select.component.mjs +119 -0
  47. package/esm2022/lib/components/forms/textarea/form-textarea.component.mjs +88 -0
  48. package/esm2022/lib/components/grids/grid-pagination/grid-pagination.component.mjs +111 -0
  49. package/esm2022/lib/components/grids/grid-snapshot/grid-snapshot.component.mjs +109 -0
  50. package/esm2022/lib/components/grids/index.mjs +4 -0
  51. package/esm2022/lib/components/grids/interfaces/grid-config.interface.mjs +2 -0
  52. package/esm2022/lib/components/grids/services/grid.service.mjs +25 -0
  53. package/esm2022/lib/components/index.mjs +9 -0
  54. package/esm2022/lib/components/infinite-scroll/directive/infinite-scroll.directive.mjs +43 -0
  55. package/esm2022/lib/components/infinite-scroll/index.mjs +3 -0
  56. package/esm2022/lib/components/infinite-scroll/infinite-scroll.component.mjs +36 -0
  57. package/esm2022/lib/components/tabs/index.mjs +3 -0
  58. package/esm2022/lib/components/tabs/tab-content/tab-content.component.mjs +37 -0
  59. package/esm2022/lib/components/tabs/tab-group/tab-group.component.mjs +47 -0
  60. package/esm2022/lib/guards/auth/auth.guard.mjs +10 -0
  61. package/esm2022/lib/guards/index.mjs +2 -0
  62. package/esm2022/lib/interceptors/header/header.interceptor.mjs +29 -0
  63. package/esm2022/lib/interceptors/index.mjs +3 -0
  64. package/esm2022/lib/interceptors/refresh-token/refresh-token.interceptor.mjs +83 -0
  65. package/esm2022/lib/interfaces/index.mjs +2 -0
  66. package/esm2022/lib/interfaces/user/user.interface.mjs +2 -0
  67. package/esm2022/lib/modules/index.mjs +3 -0
  68. package/esm2022/lib/modules/micro-frontend/index.mjs +2 -0
  69. package/esm2022/lib/modules/micro-frontend/utils/mf-bootstrap.util.mjs +55 -0
  70. package/esm2022/lib/modules/micro-frontend/utils/mf-global-state.util.mjs +14 -0
  71. package/esm2022/lib/modules/permission/directive/permission.directive.mjs +41 -0
  72. package/esm2022/lib/modules/permission/guards/permission.guard.mjs +26 -0
  73. package/esm2022/lib/modules/permission/index.mjs +7 -0
  74. package/esm2022/lib/modules/permission/pages/401/unauthorized.page.mjs +15 -0
  75. package/esm2022/lib/modules/permission/pages/loading/loading.page.mjs +65 -0
  76. package/esm2022/lib/modules/permission/pages/loading/provide-loading-config.util.mjs +9 -0
  77. package/esm2022/lib/modules/permission/services/permission.service.mjs +50 -0
  78. package/esm2022/lib/resolvers/auth/auth.resolver.mjs +87 -0
  79. package/esm2022/lib/resolvers/index.mjs +2 -0
  80. package/esm2022/lib/services/auth/auth.service.mjs +171 -0
  81. package/esm2022/lib/services/country/country.service.mjs +43 -0
  82. package/esm2022/lib/services/currency/currency.service.mjs +40 -0
  83. package/esm2022/lib/services/index.mjs +6 -0
  84. package/esm2022/lib/services/profile/profile.service.mjs +82 -0
  85. package/esm2022/lib/services/rate-group-code/rate-group-code.service.mjs +31 -0
  86. package/esm2022/lib/utils/contrast-color-generator/contrast-color-generator.util.mjs +16 -0
  87. package/esm2022/lib/utils/form-error-message/form-error-message.util.mjs +21 -0
  88. package/esm2022/lib/utils/format-capitalize/format-capitalize.util.mjs +18 -0
  89. package/esm2022/lib/utils/index.mjs +5 -0
  90. package/esm2022/lib/utils/redirect-to-first-menu/redirect-to-first-menu.util.mjs +9 -0
  91. package/esm2022/public-api.mjs +10 -0
  92. package/esm2022/unipin-angular-applet.mjs +2 -0
  93. package/fesm2022/unipin-angular-applet.mjs +4620 -0
  94. package/fesm2022/unipin-angular-applet.mjs.map +1 -0
  95. package/graphql/generated.d.ts +16225 -0
  96. package/index.d.ts +2 -0
  97. package/lib/components/approval/detail/approval-detail.component.d.ts +26 -0
  98. package/lib/components/approval/form/approval-form.component.d.ts +33 -0
  99. package/{projects/unipin-angular/src/lib/components/approval/index.ts → lib/components/approval/index.d.ts} +0 -1
  100. package/lib/components/approval/list/approval-list.component.d.ts +33 -0
  101. package/lib/components/approval/list/provide-approval-entities.util.d.ts +3 -0
  102. package/lib/components/approval/services/approval.service.d.ts +18 -0
  103. package/lib/components/audit/detail/audit-detail.component.d.ts +33 -0
  104. package/lib/components/audit/list/audit-list.component.d.ts +31 -0
  105. package/lib/components/audit/service/audit.service.d.ts +15 -0
  106. package/lib/components/audit/types/audit-detail-form.type.d.ts +12 -0
  107. package/lib/components/buttons/group/btn-group.component.d.ts +18 -0
  108. package/lib/components/buttons/group/interfaces/btn-group-config.interface.d.ts +11 -0
  109. package/lib/components/buttons/loading/btn-loading.component.d.ts +19 -0
  110. package/lib/components/containers/applet-container/applet-container.component.d.ts +22 -0
  111. package/lib/components/containers/applet-container/provide-applet-config.util.d.ts +15 -0
  112. package/lib/components/containers/colum-header-container/column-header-container.component.d.ts +7 -0
  113. package/lib/components/containers/column-container/column-container.component.d.ts +26 -0
  114. package/lib/components/containers/column-container/directives/lazy-route.directive.d.ts +17 -0
  115. package/{projects/unipin-angular/src/lib/components/containers/index.ts → lib/components/containers/index.d.ts} +0 -1
  116. package/{projects/unipin-angular/src/lib/components/containers/list-container/interfaces/list-container-config.interface.ts → lib/components/containers/list-container/interfaces/list-container-config.interface.d.ts} +4 -5
  117. package/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.d.ts +23 -0
  118. package/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.d.ts +23 -0
  119. package/lib/components/containers/modal-container/modal-container.component.d.ts +16 -0
  120. package/lib/components/filter/filter.component.d.ts +44 -0
  121. package/{projects/unipin-angular/src/lib/components/filter/index.ts → lib/components/filter/index.d.ts} +1 -1
  122. package/lib/components/filter/interfaces/filter-config.interface.d.ts +5 -0
  123. package/lib/components/filter/interfaces/filter-field.interface.d.ts +24 -0
  124. package/lib/components/filter/interfaces/filter-search-event.interface.d.ts +4 -0
  125. package/lib/components/forms/country-input/form-country-input.component.d.ts +41 -0
  126. package/lib/components/forms/currency-input/form-currency-input.component.d.ts +52 -0
  127. package/lib/components/forms/date/form-date.component.d.ts +33 -0
  128. package/lib/components/forms/image-picker/directives/drag-n-drop.directive.d.ts +10 -0
  129. package/lib/components/forms/image-picker/form-image-picker.component.d.ts +21 -0
  130. package/lib/components/forms/input/form-input.component.d.ts +31 -0
  131. package/lib/components/forms/number/form-number.component.d.ts +27 -0
  132. package/lib/components/forms/number/pipes/locale-number.pipe.d.ts +8 -0
  133. package/lib/components/forms/password/form-password.component.d.ts +27 -0
  134. package/lib/components/forms/rate-group-code-input/form-rate-group-code-input.component.d.ts +41 -0
  135. package/lib/components/forms/searchable-select/form-searchable-select.component.d.ts +42 -0
  136. package/lib/components/forms/select/form-select.component.d.ts +34 -0
  137. package/lib/components/forms/textarea/form-textarea.component.d.ts +26 -0
  138. package/lib/components/grids/grid-pagination/grid-pagination.component.d.ts +33 -0
  139. package/lib/components/grids/grid-snapshot/grid-snapshot.component.d.ts +36 -0
  140. package/lib/components/grids/interfaces/grid-config.interface.d.ts +16 -0
  141. package/lib/components/grids/services/grid.service.d.ts +12 -0
  142. package/{projects/unipin-angular/src/lib/components/index.ts → lib/components/index.d.ts} +2 -14
  143. package/lib/components/infinite-scroll/directive/infinite-scroll.directive.d.ts +15 -0
  144. package/lib/components/infinite-scroll/infinite-scroll.component.d.ts +12 -0
  145. package/{projects/unipin-angular/src/lib/components/tabs/index.ts → lib/components/tabs/index.d.ts} +2 -3
  146. package/lib/components/tabs/tab-content/tab-content.component.d.ts +14 -0
  147. package/lib/components/tabs/tab-group/tab-group.component.d.ts +18 -0
  148. package/lib/guards/auth/auth.guard.d.ts +1 -0
  149. package/lib/interceptors/header/header.interceptor.d.ts +9 -0
  150. package/lib/interceptors/refresh-token/refresh-token.interceptor.d.ts +14 -0
  151. package/lib/interfaces/user/user.interface.d.ts +27 -0
  152. package/lib/modules/index.d.ts +2 -0
  153. package/lib/modules/micro-frontend/utils/mf-bootstrap.util.d.ts +9 -0
  154. package/lib/modules/micro-frontend/utils/mf-global-state.util.d.ts +4 -0
  155. package/lib/modules/permission/directive/permission.directive.d.ts +16 -0
  156. package/lib/modules/permission/guards/permission.guard.d.ts +2 -0
  157. package/{projects/unipin-angular/src/lib/modules/permission/index.ts → lib/modules/permission/index.d.ts} +0 -1
  158. package/lib/modules/permission/pages/401/unauthorized.page.d.ts +5 -0
  159. package/lib/modules/permission/pages/loading/loading.page.d.ts +18 -0
  160. package/lib/modules/permission/pages/loading/provide-loading-config.util.d.ts +10 -0
  161. package/lib/modules/permission/services/permission.service.d.ts +21 -0
  162. package/lib/resolvers/auth/auth.resolver.d.ts +14 -0
  163. package/lib/services/auth/auth.service.d.ts +39 -0
  164. package/lib/services/country/country.service.d.ts +16 -0
  165. package/lib/services/currency/currency.service.d.ts +16 -0
  166. package/lib/services/profile/profile.service.d.ts +12 -0
  167. package/lib/services/rate-group-code/rate-group-code.service.d.ts +14 -0
  168. package/lib/utils/contrast-color-generator/contrast-color-generator.util.d.ts +4 -0
  169. package/lib/utils/form-error-message/form-error-message.util.d.ts +2 -0
  170. package/lib/utils/format-capitalize/format-capitalize.util.d.ts +1 -0
  171. package/lib/utils/redirect-to-first-menu/redirect-to-first-menu.util.d.ts +2 -0
  172. package/package.json +38 -86
  173. package/public-api.d.ts +11 -0
  174. package/.editorconfig +0 -16
  175. package/.eslintrc.json +0 -72
  176. package/.github/ISSUE_TEMPLATE/bug_fix.yml +0 -60
  177. package/.github/ISSUE_TEMPLATE/dependency_update.yml +0 -20
  178. package/.github/ISSUE_TEMPLATE/documentation.yml +0 -13
  179. package/.github/ISSUE_TEMPLATE/engineering.yml +0 -22
  180. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -38
  181. package/.github/ISSUE_TEMPLATE/testing.yml +0 -38
  182. package/.github/dependabot.yml +0 -11
  183. package/.github/pull_request_template.md +0 -77
  184. package/.github/workflows/npm_publish.yml +0 -52
  185. package/.storybook/main.ts +0 -28
  186. package/.storybook/preview.ts +0 -19
  187. package/.storybook/test-runner.ts +0 -29
  188. package/.storybook/tsconfig.json +0 -14
  189. package/.storybook/typings.d.ts +0 -4
  190. package/.vscode/extensions.json +0 -7
  191. package/.vscode/launch.json +0 -20
  192. package/.vscode/settings.json +0 -16
  193. package/.vscode/tasks.json +0 -42
  194. package/angular.json +0 -102
  195. package/codegen.yml +0 -8
  196. package/projects/unipin-angular/README.md +0 -24
  197. package/projects/unipin-angular/documentation.json +0 -116258
  198. package/projects/unipin-angular/ng-package.json +0 -19
  199. package/projects/unipin-angular/package-lock.json +0 -23
  200. package/projects/unipin-angular/package.json +0 -32
  201. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_accordion.scss +0 -149
  202. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_alert.scss +0 -71
  203. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_badge.scss +0 -38
  204. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_breadcrumb.scss +0 -40
  205. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_button-group.scss +0 -142
  206. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_buttons.scss +0 -209
  207. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_card.scss +0 -234
  208. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_carousel.scss +0 -226
  209. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_close.scss +0 -40
  210. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_containers.scss +0 -41
  211. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_dropdown.scss +0 -249
  212. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_forms.scss +0 -9
  213. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_functions.scss +0 -302
  214. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_grid.scss +0 -33
  215. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_helpers.scss +0 -10
  216. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_images.scss +0 -42
  217. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_list-group.scss +0 -192
  218. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_maps.scss +0 -54
  219. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_mixins.scss +0 -43
  220. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_modal.scss +0 -237
  221. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_nav.scss +0 -172
  222. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_navbar.scss +0 -278
  223. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_offcanvas.scss +0 -144
  224. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_pagination.scss +0 -109
  225. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_placeholders.scss +0 -51
  226. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_popover.scss +0 -196
  227. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_progress.scss +0 -59
  228. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_reboot.scss +0 -610
  229. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_root.scss +0 -73
  230. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_spinners.scss +0 -85
  231. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_tables.scss +0 -164
  232. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_toasts.scss +0 -73
  233. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_tooltip.scss +0 -120
  234. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_transitions.scss +0 -27
  235. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_type.scss +0 -106
  236. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_utilities.scss +0 -647
  237. package/projects/unipin-angular/src/assets/private/scss/bootstrap/_variables.scss +0 -1634
  238. package/projects/unipin-angular/src/assets/private/scss/bootstrap/bootstrap-grid.scss +0 -64
  239. package/projects/unipin-angular/src/assets/private/scss/bootstrap/bootstrap-reboot.scss +0 -9
  240. package/projects/unipin-angular/src/assets/private/scss/bootstrap/bootstrap-utilities.scss +0 -18
  241. package/projects/unipin-angular/src/assets/private/scss/bootstrap/bootstrap.scss +0 -24
  242. package/projects/unipin-angular/src/assets/private/scss/bootstrap/forms/_floating-labels.scss +0 -75
  243. package/projects/unipin-angular/src/assets/private/scss/bootstrap/forms/_form-check.scss +0 -175
  244. package/projects/unipin-angular/src/assets/private/scss/bootstrap/forms/_form-control.scss +0 -195
  245. package/projects/unipin-angular/src/assets/private/scss/bootstrap/forms/_form-range.scss +0 -91
  246. package/projects/unipin-angular/src/assets/private/scss/bootstrap/forms/_form-select.scss +0 -71
  247. package/projects/unipin-angular/src/assets/private/scss/bootstrap/forms/_form-text.scss +0 -11
  248. package/projects/unipin-angular/src/assets/private/scss/bootstrap/forms/_input-group.scss +0 -132
  249. package/projects/unipin-angular/src/assets/private/scss/bootstrap/forms/_labels.scss +0 -36
  250. package/projects/unipin-angular/src/assets/private/scss/bootstrap/forms/_validation.scss +0 -12
  251. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_clearfix.scss +0 -3
  252. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_color-bg.scss +0 -10
  253. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_colored-links.scss +0 -12
  254. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_position.scss +0 -36
  255. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_ratio.scss +0 -26
  256. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_stacks.scss +0 -15
  257. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_stretched-link.scss +0 -15
  258. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_text-truncation.scss +0 -7
  259. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_visually-hidden.scss +0 -8
  260. package/projects/unipin-angular/src/assets/private/scss/bootstrap/helpers/_vr.scss +0 -8
  261. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_alert.scss +0 -15
  262. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_backdrop.scss +0 -14
  263. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_banner.scss +0 -9
  264. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_border-radius.scss +0 -78
  265. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_box-shadow.scss +0 -18
  266. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_breakpoints.scss +0 -127
  267. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_buttons.scss +0 -70
  268. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_caret.scss +0 -64
  269. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_clearfix.scss +0 -9
  270. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_color-scheme.scss +0 -7
  271. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_container.scss +0 -11
  272. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_deprecate.scss +0 -10
  273. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_forms.scss +0 -152
  274. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_gradients.scss +0 -47
  275. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_grid.scss +0 -151
  276. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_image.scss +0 -16
  277. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_list-group.scss +0 -24
  278. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_lists.scss +0 -7
  279. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_pagination.scss +0 -10
  280. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_reset-text.scss +0 -17
  281. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_resize.scss +0 -6
  282. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_table-variants.scss +0 -24
  283. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_text-truncate.scss +0 -8
  284. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_transition.scss +0 -26
  285. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_utilities.scss +0 -97
  286. package/projects/unipin-angular/src/assets/private/scss/bootstrap/mixins/_visually-hidden.scss +0 -29
  287. package/projects/unipin-angular/src/assets/private/scss/bootstrap/utilities/_api.scss +0 -47
  288. package/projects/unipin-angular/src/assets/private/scss/bootstrap/vendor/_rfs.scss +0 -354
  289. package/projects/unipin-angular/src/assets/private/scss/theme/variables.scss +0 -59
  290. package/projects/unipin-angular/src/graphql/generated.d.ts +0 -715
  291. package/projects/unipin-angular/src/graphql/generated.mjs +0 -49
  292. package/projects/unipin-angular/src/graphql/generated.ts +0 -19998
  293. package/projects/unipin-angular/src/lib/components/approval/detail/approval-detail.component.html +0 -14
  294. package/projects/unipin-angular/src/lib/components/approval/detail/approval-detail.component.scss +0 -0
  295. package/projects/unipin-angular/src/lib/components/approval/detail/approval-detail.component.ts +0 -90
  296. package/projects/unipin-angular/src/lib/components/approval/detail/approval-detail.stories.ts +0 -61
  297. package/projects/unipin-angular/src/lib/components/approval/form/approval-form.component.html +0 -41
  298. package/projects/unipin-angular/src/lib/components/approval/form/approval-form.component.scss +0 -0
  299. package/projects/unipin-angular/src/lib/components/approval/form/approval-form.component.ts +0 -152
  300. package/projects/unipin-angular/src/lib/components/approval/form/approval-form.stories.ts +0 -111
  301. package/projects/unipin-angular/src/lib/components/approval/list/approval-list.component.html +0 -15
  302. package/projects/unipin-angular/src/lib/components/approval/list/approval-list.component.scss +0 -0
  303. package/projects/unipin-angular/src/lib/components/approval/list/approval-list.component.ts +0 -136
  304. package/projects/unipin-angular/src/lib/components/approval/list/approval-list.stories.ts +0 -141
  305. package/projects/unipin-angular/src/lib/components/approval/list/provide-approval-entities.util.ts +0 -10
  306. package/projects/unipin-angular/src/lib/components/approval/services/approval.service.ts +0 -46
  307. package/projects/unipin-angular/src/lib/components/audit/detail/audit-detail.component.html +0 -50
  308. package/projects/unipin-angular/src/lib/components/audit/detail/audit-detail.component.scss +0 -4
  309. package/projects/unipin-angular/src/lib/components/audit/detail/audit-detail.component.spec.ts +0 -51
  310. package/projects/unipin-angular/src/lib/components/audit/detail/audit-detail.component.ts +0 -141
  311. package/projects/unipin-angular/src/lib/components/audit/detail/audit-detail.stories.ts +0 -126
  312. package/projects/unipin-angular/src/lib/components/audit/list/audit-list.component.html +0 -5
  313. package/projects/unipin-angular/src/lib/components/audit/list/audit-list.component.scss +0 -0
  314. package/projects/unipin-angular/src/lib/components/audit/list/audit-list.component.ts +0 -85
  315. package/projects/unipin-angular/src/lib/components/audit/list/audit-list.stories.ts +0 -170
  316. package/projects/unipin-angular/src/lib/components/audit/service/audit.service.ts +0 -48
  317. package/projects/unipin-angular/src/lib/components/audit/types/audit-detail-form.type.ts +0 -13
  318. package/projects/unipin-angular/src/lib/components/buttons/group/btn-group.component.html +0 -42
  319. package/projects/unipin-angular/src/lib/components/buttons/group/btn-group.component.scss +0 -19
  320. package/projects/unipin-angular/src/lib/components/buttons/group/btn-group.component.ts +0 -72
  321. package/projects/unipin-angular/src/lib/components/buttons/group/btn-group.stories.ts +0 -132
  322. package/projects/unipin-angular/src/lib/components/buttons/group/interfaces/btn-group-config.interface.ts +0 -63
  323. package/projects/unipin-angular/src/lib/components/buttons/loading/btn-loading.component.html +0 -9
  324. package/projects/unipin-angular/src/lib/components/buttons/loading/btn-loading.component.scss +0 -8
  325. package/projects/unipin-angular/src/lib/components/buttons/loading/btn-loading.component.ts +0 -87
  326. package/projects/unipin-angular/src/lib/components/buttons/loading/btn-loading.stories.ts +0 -188
  327. package/projects/unipin-angular/src/lib/components/containers/applet-container/applet-container.component.html +0 -39
  328. package/projects/unipin-angular/src/lib/components/containers/applet-container/applet-container.component.scss +0 -68
  329. package/projects/unipin-angular/src/lib/components/containers/applet-container/applet-container.component.ts +0 -98
  330. package/projects/unipin-angular/src/lib/components/containers/applet-container/provide-applet-config.util.ts +0 -23
  331. package/projects/unipin-angular/src/lib/components/containers/colum-header-container/column-header-container.component.html +0 -17
  332. package/projects/unipin-angular/src/lib/components/containers/colum-header-container/column-header-container.component.scss +0 -4
  333. package/projects/unipin-angular/src/lib/components/containers/colum-header-container/column-header-container.component.ts +0 -32
  334. package/projects/unipin-angular/src/lib/components/containers/colum-header-container/column-header.stories.ts +0 -77
  335. package/projects/unipin-angular/src/lib/components/containers/column-container/column-container.component.html +0 -17
  336. package/projects/unipin-angular/src/lib/components/containers/column-container/column-container.component.scss +0 -0
  337. package/projects/unipin-angular/src/lib/components/containers/column-container/column-container.component.ts +0 -139
  338. package/projects/unipin-angular/src/lib/components/containers/column-container/directives/lazy-route.directive.ts +0 -86
  339. package/projects/unipin-angular/src/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.html +0 -19
  340. package/projects/unipin-angular/src/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.scss +0 -7
  341. package/projects/unipin-angular/src/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.ts +0 -113
  342. package/projects/unipin-angular/src/lib/components/containers/list-container/list-pagination-container/list-pagination-container.stories.ts +0 -207
  343. package/projects/unipin-angular/src/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.html +0 -19
  344. package/projects/unipin-angular/src/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.scss +0 -7
  345. package/projects/unipin-angular/src/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.ts +0 -114
  346. package/projects/unipin-angular/src/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.stories.ts +0 -212
  347. package/projects/unipin-angular/src/lib/components/containers/modal-container/modal-container.component.html +0 -15
  348. package/projects/unipin-angular/src/lib/components/containers/modal-container/modal-container.component.scss +0 -2
  349. package/projects/unipin-angular/src/lib/components/containers/modal-container/modal-container.component.ts +0 -88
  350. package/projects/unipin-angular/src/lib/components/containers/modal-container/modal-container.stories.ts +0 -66
  351. package/projects/unipin-angular/src/lib/components/filter/filter.component.html +0 -113
  352. package/projects/unipin-angular/src/lib/components/filter/filter.component.scss +0 -28
  353. package/projects/unipin-angular/src/lib/components/filter/filter.component.ts +0 -329
  354. package/projects/unipin-angular/src/lib/components/filter/filter.stories.ts +0 -176
  355. package/projects/unipin-angular/src/lib/components/filter/interfaces/filter-config.interface.ts +0 -17
  356. package/projects/unipin-angular/src/lib/components/filter/interfaces/filter-field.interface.ts +0 -80
  357. package/projects/unipin-angular/src/lib/components/filter/interfaces/filter-search-event.interface.ts +0 -15
  358. package/projects/unipin-angular/src/lib/components/forms/country-input/form-country-input.component.html +0 -19
  359. package/projects/unipin-angular/src/lib/components/forms/country-input/form-country-input.component.scss +0 -0
  360. package/projects/unipin-angular/src/lib/components/forms/country-input/form-country-input.component.ts +0 -210
  361. package/projects/unipin-angular/src/lib/components/forms/country-input/form-country-input.stories.ts +0 -175
  362. package/projects/unipin-angular/src/lib/components/forms/currency-input/form-currency-input.component.html +0 -42
  363. package/projects/unipin-angular/src/lib/components/forms/currency-input/form-currency-input.component.scss +0 -4
  364. package/projects/unipin-angular/src/lib/components/forms/currency-input/form-currency-input.component.ts +0 -285
  365. package/projects/unipin-angular/src/lib/components/forms/currency-input/form-currency-input.spec.ts +0 -119
  366. package/projects/unipin-angular/src/lib/components/forms/currency-input/form-currency-input.stories.ts +0 -243
  367. package/projects/unipin-angular/src/lib/components/forms/date/form-date.component.html +0 -27
  368. package/projects/unipin-angular/src/lib/components/forms/date/form-date.component.scss +0 -7
  369. package/projects/unipin-angular/src/lib/components/forms/date/form-date.component.ts +0 -225
  370. package/projects/unipin-angular/src/lib/components/forms/date/form-date.stories.ts +0 -201
  371. package/projects/unipin-angular/src/lib/components/forms/image-picker/directives/drag-n-drop.directive.ts +0 -40
  372. package/projects/unipin-angular/src/lib/components/forms/image-picker/form-image-picker.component.html +0 -29
  373. package/projects/unipin-angular/src/lib/components/forms/image-picker/form-image-picker.component.scss +0 -40
  374. package/projects/unipin-angular/src/lib/components/forms/image-picker/form-image-picker.component.ts +0 -109
  375. package/projects/unipin-angular/src/lib/components/forms/image-picker/form-image-picker.stories.ts +0 -133
  376. package/projects/unipin-angular/src/lib/components/forms/input/form-input.component.html +0 -22
  377. package/projects/unipin-angular/src/lib/components/forms/input/form-input.component.scss +0 -0
  378. package/projects/unipin-angular/src/lib/components/forms/input/form-input.component.ts +0 -177
  379. package/projects/unipin-angular/src/lib/components/forms/input/form-input.stories.ts +0 -185
  380. package/projects/unipin-angular/src/lib/components/forms/number/form-number.component.html +0 -6
  381. package/projects/unipin-angular/src/lib/components/forms/number/form-number.component.scss +0 -0
  382. package/projects/unipin-angular/src/lib/components/forms/number/form-number.component.ts +0 -176
  383. package/projects/unipin-angular/src/lib/components/forms/number/form-number.spec.ts +0 -62
  384. package/projects/unipin-angular/src/lib/components/forms/number/form-number.stories.ts +0 -150
  385. package/projects/unipin-angular/src/lib/components/forms/number/pipes/locale-number.pipe.ts +0 -32
  386. package/projects/unipin-angular/src/lib/components/forms/password/form-password.component.html +0 -11
  387. package/projects/unipin-angular/src/lib/components/forms/password/form-password.component.scss +0 -5
  388. package/projects/unipin-angular/src/lib/components/forms/password/form-password.component.ts +0 -177
  389. package/projects/unipin-angular/src/lib/components/forms/password/form-password.stories.ts +0 -151
  390. package/projects/unipin-angular/src/lib/components/forms/rate-group-code-input/form-rate-group-code-input.component.html +0 -30
  391. package/projects/unipin-angular/src/lib/components/forms/rate-group-code-input/form-rate-group-code-input.component.scss +0 -0
  392. package/projects/unipin-angular/src/lib/components/forms/rate-group-code-input/form-rate-group-code-input.component.ts +0 -271
  393. package/projects/unipin-angular/src/lib/components/forms/rate-group-code-input/form-rate-group-code-input.stories.ts +0 -248
  394. package/projects/unipin-angular/src/lib/components/forms/searchable-select/form-searchable-select.component.html +0 -28
  395. package/projects/unipin-angular/src/lib/components/forms/searchable-select/form-searchable-select.component.scss +0 -0
  396. package/projects/unipin-angular/src/lib/components/forms/searchable-select/form-searchable-select.component.ts +0 -281
  397. package/projects/unipin-angular/src/lib/components/forms/searchable-select/form-searchable-select.stories.ts +0 -267
  398. package/projects/unipin-angular/src/lib/components/forms/select/form-select.component.html +0 -25
  399. package/projects/unipin-angular/src/lib/components/forms/select/form-select.component.scss +0 -1
  400. package/projects/unipin-angular/src/lib/components/forms/select/form-select.component.ts +0 -223
  401. package/projects/unipin-angular/src/lib/components/forms/select/form-select.stories.ts +0 -220
  402. package/projects/unipin-angular/src/lib/components/forms/textarea/form-textarea.component.html +0 -9
  403. package/projects/unipin-angular/src/lib/components/forms/textarea/form-textarea.component.scss +0 -0
  404. package/projects/unipin-angular/src/lib/components/forms/textarea/form-textarea.component.ts +0 -146
  405. package/projects/unipin-angular/src/lib/components/forms/textarea/form-textarea.stories.ts +0 -163
  406. package/projects/unipin-angular/src/lib/components/grids/grid-pagination/grid-pagination.component.html +0 -17
  407. package/projects/unipin-angular/src/lib/components/grids/grid-pagination/grid-pagination.component.scss +0 -8
  408. package/projects/unipin-angular/src/lib/components/grids/grid-pagination/grid-pagination.component.ts +0 -224
  409. package/projects/unipin-angular/src/lib/components/grids/grid-pagination/grid-pagination.stories.ts +0 -219
  410. package/projects/unipin-angular/src/lib/components/grids/grid-snapshot/grid-snapshot.component.html +0 -17
  411. package/projects/unipin-angular/src/lib/components/grids/grid-snapshot/grid-snapshot.component.scss +0 -8
  412. package/projects/unipin-angular/src/lib/components/grids/grid-snapshot/grid-snapshot.component.ts +0 -229
  413. package/projects/unipin-angular/src/lib/components/grids/grid-snapshot/grid-snapshot.stories.ts +0 -173
  414. package/projects/unipin-angular/src/lib/components/grids/interfaces/grid-config.interface.ts +0 -44
  415. package/projects/unipin-angular/src/lib/components/grids/services/grid.service.ts +0 -23
  416. package/projects/unipin-angular/src/lib/components/infinite-scroll/directive/infinite-scroll.directive.ts +0 -72
  417. package/projects/unipin-angular/src/lib/components/infinite-scroll/infinite-scroll.component.html +0 -13
  418. package/projects/unipin-angular/src/lib/components/infinite-scroll/infinite-scroll.component.scss +0 -10
  419. package/projects/unipin-angular/src/lib/components/infinite-scroll/infinite-scroll.component.ts +0 -61
  420. package/projects/unipin-angular/src/lib/components/infinite-scroll/infinite-scroll.stories.ts +0 -80
  421. package/projects/unipin-angular/src/lib/components/tabs/tab-content/tab-content.component.html +0 -3
  422. package/projects/unipin-angular/src/lib/components/tabs/tab-content/tab-content.component.scss +0 -6
  423. package/projects/unipin-angular/src/lib/components/tabs/tab-content/tab-content.component.ts +0 -56
  424. package/projects/unipin-angular/src/lib/components/tabs/tab-group/tab-group.component.html +0 -24
  425. package/projects/unipin-angular/src/lib/components/tabs/tab-group/tab-group.component.scss +0 -39
  426. package/projects/unipin-angular/src/lib/components/tabs/tab-group/tab-group.component.ts +0 -92
  427. package/projects/unipin-angular/src/lib/components/tabs/tab.stories.ts +0 -117
  428. package/projects/unipin-angular/src/lib/guards/auth/auth.guard.ts +0 -11
  429. package/projects/unipin-angular/src/lib/interceptors/header/header.interceptor.ts +0 -36
  430. package/projects/unipin-angular/src/lib/interceptors/refresh-token/refresh-token.interceptor.ts +0 -123
  431. package/projects/unipin-angular/src/lib/interfaces/user/user.interface.ts +0 -27
  432. package/projects/unipin-angular/src/lib/modules/index.ts +0 -11
  433. package/projects/unipin-angular/src/lib/modules/micro-frontend/utils/mf-bootstrap.util.ts +0 -74
  434. package/projects/unipin-angular/src/lib/modules/micro-frontend/utils/mf-global-state.util.ts +0 -20
  435. package/projects/unipin-angular/src/lib/modules/permission/directive/permission.directive.spec.ts +0 -50
  436. package/projects/unipin-angular/src/lib/modules/permission/directive/permission.directive.ts +0 -68
  437. package/projects/unipin-angular/src/lib/modules/permission/guards/permission.guard.spec.ts +0 -76
  438. package/projects/unipin-angular/src/lib/modules/permission/guards/permission.guard.ts +0 -30
  439. package/projects/unipin-angular/src/lib/modules/permission/pages/401/unauthorized.page.html +0 -3
  440. package/projects/unipin-angular/src/lib/modules/permission/pages/401/unauthorized.page.scss +0 -3
  441. package/projects/unipin-angular/src/lib/modules/permission/pages/401/unauthorized.page.ts +0 -14
  442. package/projects/unipin-angular/src/lib/modules/permission/pages/loading/loading.page.html +0 -2
  443. package/projects/unipin-angular/src/lib/modules/permission/pages/loading/loading.page.scss +0 -4
  444. package/projects/unipin-angular/src/lib/modules/permission/pages/loading/loading.page.ts +0 -76
  445. package/projects/unipin-angular/src/lib/modules/permission/pages/loading/provide-loading-config.util.ts +0 -18
  446. package/projects/unipin-angular/src/lib/modules/permission/services/permission.service.spec.ts +0 -62
  447. package/projects/unipin-angular/src/lib/modules/permission/services/permission.service.ts +0 -78
  448. package/projects/unipin-angular/src/lib/resolvers/auth/auth.resolver.spec.ts +0 -46
  449. package/projects/unipin-angular/src/lib/resolvers/auth/auth.resolver.ts +0 -144
  450. package/projects/unipin-angular/src/lib/services/auth/auth.service.ts +0 -243
  451. package/projects/unipin-angular/src/lib/services/country/country.service.ts +0 -47
  452. package/projects/unipin-angular/src/lib/services/currency/currency.service.ts +0 -44
  453. package/projects/unipin-angular/src/lib/services/profile/profile.service.ts +0 -86
  454. package/projects/unipin-angular/src/lib/services/rate-group-code/rate-group-code.service.ts +0 -29
  455. package/projects/unipin-angular/src/lib/utils/contrast-color-generator/contrast-color-generator.util.spec.ts +0 -19
  456. package/projects/unipin-angular/src/lib/utils/contrast-color-generator/contrast-color-generator.util.ts +0 -28
  457. package/projects/unipin-angular/src/lib/utils/form-error-message/form-error-message.util.spec.ts +0 -58
  458. package/projects/unipin-angular/src/lib/utils/form-error-message/form-error-message.util.ts +0 -30
  459. package/projects/unipin-angular/src/lib/utils/format-capitalize/format-capitalize.util.spec.ts +0 -30
  460. package/projects/unipin-angular/src/lib/utils/format-capitalize/format-capitalize.util.ts +0 -22
  461. package/projects/unipin-angular/src/lib/utils/redirect-to-first-menu/redirect-to-first-menu.util.ts +0 -15
  462. package/projects/unipin-angular/src/public-api.ts +0 -126
  463. package/projects/unipin-angular/tsconfig.lib.json +0 -14
  464. package/projects/unipin-angular/tsconfig.lib.prod.json +0 -10
  465. package/projects/unipin-angular/tsconfig.spec.json +0 -14
  466. package/snapshot-serializer.js +0 -12
  467. package/test-runner-jest.config.js +0 -13
  468. package/tsconfig.json +0 -51
  469. /package/{projects/unipin-angular/src/lib/components/audit/index.ts → lib/components/audit/index.d.ts} +0 -0
  470. /package/{projects/unipin-angular/src/lib/components/buttons/index.ts → lib/components/buttons/index.d.ts} +0 -0
  471. /package/{projects/unipin-angular/src/lib/components/containers/list-container/index.ts → lib/components/containers/list-container/index.d.ts} +0 -0
  472. /package/{projects/unipin-angular/src/lib/components/forms/index.ts → lib/components/forms/index.d.ts} +0 -0
  473. /package/{projects/unipin-angular/src/lib/components/grids/index.ts → lib/components/grids/index.d.ts} +0 -0
  474. /package/{projects/unipin-angular/src/lib/components/infinite-scroll/index.ts → lib/components/infinite-scroll/index.d.ts} +0 -0
  475. /package/{projects/unipin-angular/src/lib/guards/index.ts → lib/guards/index.d.ts} +0 -0
  476. /package/{projects/unipin-angular/src/lib/interceptors/index.ts → lib/interceptors/index.d.ts} +0 -0
  477. /package/{projects/unipin-angular/src/lib/interfaces/index.ts → lib/interfaces/index.d.ts} +0 -0
  478. /package/{projects/unipin-angular/src/lib/modules/micro-frontend/index.ts → lib/modules/micro-frontend/index.d.ts} +0 -0
  479. /package/{projects/unipin-angular/src/lib/resolvers/index.ts → lib/resolvers/index.d.ts} +0 -0
  480. /package/{projects/unipin-angular/src/lib/services/index.ts → lib/services/index.d.ts} +0 -0
  481. /package/{projects/unipin-angular/src/lib/utils/index.ts → lib/utils/index.d.ts} +0 -0
  482. /package/{projects/unipin-angular/src → src}/assets/scss/forms.scss +0 -0
  483. /package/{projects/unipin-angular/src → src}/assets/scss/grid.scss +0 -0
  484. /package/{projects/unipin-angular/src → src}/assets/scss/select.scss +0 -0
@@ -0,0 +1,222 @@
1
+ import { Attribute, ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { formatDate } from '@angular/common';
3
+ import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
4
+ import { IonicModule } from '@ionic/angular';
5
+ import { FormInputComponent, FormSelectComponent, FormDateComponent, FormSearchableSelectComponent } from '../forms';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ionic/angular";
8
+ import * as i2 from "@angular/forms";
9
+ export class FilterComponent {
10
+ constructor(placeholder, ch, popoverCtrl) {
11
+ this.placeholder = placeholder;
12
+ this.ch = ch;
13
+ this.popoverCtrl = popoverCtrl;
14
+ this.onSearch = new EventEmitter();
15
+ this.form = new FormGroup({});
16
+ this.activeFilter = [];
17
+ this.initialItems = new Map();
18
+ }
19
+ ngOnInit() {
20
+ const irresoluteKeys = new Set();
21
+ const irresoluteValue = new Map();
22
+ this.config.fields.forEach(({ key, initialValue, initialItems, isIrresolute }) => {
23
+ if (typeof key !== 'string') {
24
+ key.forEach((k, i) => {
25
+ this.createFormControl(k, initialValue?.at(i), isIrresolute);
26
+ if (isIrresolute) {
27
+ irresoluteKeys.add(k);
28
+ if (initialValue)
29
+ irresoluteValue.set(k, initialValue?.at(i));
30
+ }
31
+ });
32
+ }
33
+ else {
34
+ if (initialItems) {
35
+ this.initialItems.set(key, initialItems);
36
+ }
37
+ this.createFormControl(key, initialValue, isIrresolute);
38
+ if (isIrresolute) {
39
+ irresoluteKeys.add(key);
40
+ if (initialValue)
41
+ irresoluteValue.set(key, initialValue);
42
+ }
43
+ }
44
+ });
45
+ const savedState = localStorage.getItem(`${this.id}`);
46
+ if (!savedState) {
47
+ this.emitValue();
48
+ return;
49
+ }
50
+ const state = JSON.parse(savedState);
51
+ if (state.initialItems) {
52
+ this.initialItems = new Map(Object.entries(state.initialItems));
53
+ }
54
+ const formValues = state.formValues || {};
55
+ const combValues = {};
56
+ Object.keys(formValues).forEach(key => {
57
+ if (!irresoluteKeys.has(key))
58
+ combValues[key] = formValues[key];
59
+ else {
60
+ combValues[key] = irresoluteValue.get(key);
61
+ }
62
+ });
63
+ this.form.patchValue(combValues);
64
+ this.activeFilter = [];
65
+ const currentValues = this.form.getRawValue();
66
+ Object.keys(currentValues).forEach(key => {
67
+ if (currentValues[key])
68
+ this.processFilter(key, currentValues[key]);
69
+ });
70
+ this.emitValue();
71
+ }
72
+ close() {
73
+ this.popoverCtrl.dismiss();
74
+ }
75
+ clear() {
76
+ this.resetValue();
77
+ this.form.reset();
78
+ localStorage.removeItem(`${this.id}`);
79
+ this.initialItems.clear();
80
+ this.onSearch.emit({ mode: this.config.mode, data: null });
81
+ }
82
+ removeFilter(i) {
83
+ this.form.controls[this.activeFilter[i].key].setValue('');
84
+ this.activeFilter.splice(i, 1);
85
+ if (this.activeFilter.length === 0) {
86
+ this.clear();
87
+ return;
88
+ }
89
+ this.emitValue();
90
+ }
91
+ search() {
92
+ this.resetValue();
93
+ this.emitValue((k, v) => {
94
+ this.processFilter(k, v);
95
+ });
96
+ if (this.activeFilter.length === 0) {
97
+ this.initialItems.clear();
98
+ localStorage.removeItem(`${this.id}`);
99
+ }
100
+ this.close();
101
+ }
102
+ processFilter(key, value) {
103
+ let values;
104
+ if (Array.isArray(value)) {
105
+ values = value;
106
+ }
107
+ else {
108
+ values = [value];
109
+ }
110
+ values = values.filter(v => v !== undefined && v !== null && v !== '');
111
+ if (values.length === 0) {
112
+ this.activeFilter = this.activeFilter.filter(item => item.key !== key);
113
+ return;
114
+ }
115
+ const labels = values.map(v => {
116
+ const initialItem = this.initialItems.get(key)?.find(item => item.value === v);
117
+ return initialItem
118
+ ? initialItem.label
119
+ : key.toLowerCase().includes('date') ? formatDate(v, 'dd MMM yyyy', 'en-US') : v;
120
+ });
121
+ const label = `${key}: ${labels.join(', ')}`;
122
+ const valueString = values.join(',');
123
+ this.activeFilter = this.activeFilter.filter(item => item.key !== key);
124
+ this.activeFilter.push({ key, value: valueString, label });
125
+ }
126
+ add() {
127
+ const { key, value } = this.getValue(this.searchBox.nativeElement.value);
128
+ if (this.config.fields.findIndex(({ key: k }) => k === key) === -1) {
129
+ this.searchBox.nativeElement.value = '';
130
+ return;
131
+ }
132
+ const i = this.activeFilter.findIndex(({ key: k }) => k === key);
133
+ if (i === -1)
134
+ this.activeFilter.unshift({ label: `${key}:${value}`, key, value });
135
+ else {
136
+ this.activeFilter[i].key = key;
137
+ this.activeFilter[i].value = value;
138
+ this.activeFilter[i].label = `${key}:${value}`;
139
+ }
140
+ this.form.patchValue({ [key]: value });
141
+ this.searchBox.nativeElement.value = '';
142
+ this.emitValue();
143
+ }
144
+ applyInitialItems(item, key) {
145
+ if (!Array.isArray(item)) {
146
+ this.initialItems = this.initialItems.set(key, [item]);
147
+ return;
148
+ }
149
+ this.initialItems = this.initialItems.set(key, item);
150
+ }
151
+ resetValue() {
152
+ this.activeFilter.length = 0;
153
+ this.searchBox.nativeElement.value = '';
154
+ }
155
+ getValue(value) {
156
+ const values = value.split(':');
157
+ if (values.length === 1)
158
+ return { key: (Array.isArray(this.config.fields[0].key) ? this.config.fields[0].key[0] : this.config.fields[0].key), value: values[0] };
159
+ return { key: values[0], value: values[1] };
160
+ }
161
+ emitValue(extraAction) {
162
+ let flag = false;
163
+ const f = this.form.getRawValue();
164
+ const data = {};
165
+ Object.keys(f).forEach((k) => {
166
+ if (!f[k] || (Array.isArray(f[k]) && f[k].length === 0))
167
+ return;
168
+ flag = true;
169
+ data[k] = f[k];
170
+ extraAction?.(k, f[k]);
171
+ });
172
+ this.onSearch.emit({ mode: this.config.mode, data: flag ? data : null });
173
+ this.saveState();
174
+ }
175
+ createFormControl(key, val, isIrresolute) {
176
+ this.form.addControl(key, new FormControl(''));
177
+ if (val) {
178
+ this.form.controls[key].setValue(val);
179
+ this.processFilter(key, val);
180
+ if (!isIrresolute) {
181
+ this.saveState();
182
+ }
183
+ }
184
+ }
185
+ saveState() {
186
+ localStorage.setItem(`${this.id}`, JSON.stringify({
187
+ activeFilter: this.activeFilter,
188
+ initialItems: Object.fromEntries(this.initialItems),
189
+ formValues: this.form.getRawValue()
190
+ }));
191
+ }
192
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
193
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date \n class=\"flex-grow-1\"\n label=\"{{ c.label[0] }}\" \n name=\"{{ c.key[0] }}-filter-from\" \n formControlName=\"{{ c.key[0] }}\" \n />\n\n <up-date \n class=\"flex-grow-1\"\n label=\"{{ c.label[1] }}\" \n name=\"{{ c.key[1] }}-filter-to\" \n formControlName=\"{{ c.key[1] }}\" \n />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [searchable]=\"true\"\n [items]=\"c.options!\"\n [multiple]=\"c.multiple || false\"\n [groupBy]=\"c.groupBy || ''\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options! || initialItems.get(c.key.toString())!\"\n [multiple]=\"c.multiple || false\"\n (onChange)=\"applyInitialItems($event, c.key.toString())\"\n /> \n }\n\n @case ('number-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-input type=\"number\" autocomplete=\"off\" class=\"flex-grow-1\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" [min]=\"c.min\" [max]=\"c.max\"/>\n <up-input type=\"number\" autocomplete=\"off\" class=\"flex-grow-1\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" [min]=\"c.min\" [max]=\"c.max\"/>\n </div>\n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["name", "label", "required", "disabled", "presentation", "minDate", "maxDate", "clearButton", "dateFormat"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled", "min", "max"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo", "groupBy"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
194
+ }
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, decorators: [{
196
+ type: Component,
197
+ args: [{ standalone: true, selector: 'up-filter', changeDetection: ChangeDetectionStrategy.OnPush, host: {
198
+ class: 'd-block position-relative'
199
+ }, imports: [
200
+ IonicModule,
201
+ FormDateComponent,
202
+ FormInputComponent,
203
+ ReactiveFormsModule,
204
+ FormSelectComponent,
205
+ FormSearchableSelectComponent
206
+ ], template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date \n class=\"flex-grow-1\"\n label=\"{{ c.label[0] }}\" \n name=\"{{ c.key[0] }}-filter-from\" \n formControlName=\"{{ c.key[0] }}\" \n />\n\n <up-date \n class=\"flex-grow-1\"\n label=\"{{ c.label[1] }}\" \n name=\"{{ c.key[1] }}-filter-to\" \n formControlName=\"{{ c.key[1] }}\" \n />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [searchable]=\"true\"\n [items]=\"c.options!\"\n [multiple]=\"c.multiple || false\"\n [groupBy]=\"c.groupBy || ''\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options! || initialItems.get(c.key.toString())!\"\n [multiple]=\"c.multiple || false\"\n (onChange)=\"applyInitialItems($event, c.key.toString())\"\n /> \n }\n\n @case ('number-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-input type=\"number\" autocomplete=\"off\" class=\"flex-grow-1\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" [min]=\"c.min\" [max]=\"c.max\"/>\n <up-input type=\"number\" autocomplete=\"off\" class=\"flex-grow-1\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" [min]=\"c.min\" [max]=\"c.max\"/>\n </div>\n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"] }]
207
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
208
+ type: Attribute,
209
+ args: ['placeholder']
210
+ }] }, { type: i0.ChangeDetectorRef }, { type: i1.PopoverController }], propDecorators: { id: [{
211
+ type: Input,
212
+ args: [{ required: true }]
213
+ }], config: [{
214
+ type: Input,
215
+ args: [{ required: true }]
216
+ }], onSearch: [{
217
+ type: Output
218
+ }], searchBox: [{
219
+ type: ViewChild,
220
+ args: ['searchBox']
221
+ }] } });
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0osT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUloRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFvQnJILE1BQU0sT0FBTyxlQUFlO0lBK0MxQixZQUNtQyxXQUFtQixFQUNqQyxFQUFxQixFQUNyQixXQUE4QjtRQUZoQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUE3QnpCLGFBQVEsR0FBb0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVl6RSxTQUFJLEdBQW1CLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBTWxELGlCQUFZLEdBQW9ELEVBQUUsQ0FBQztRQU1uRSxpQkFBWSxHQUFvRCxJQUFJLEdBQUcs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akMsTUFBTTtnQkFNb0MsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUsIFBvcG92ZXJDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlckZpZWxkIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1maWVsZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VhcmNoRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyLXNlYXJjaC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRm9ybUlucHV0Q29tcG9uZW50LCBGb3JtU2VsZWN0Q29tcG9uZW50LCBGb3JtRGF0ZUNvbXBvbmVudCwgRm9ybVNlYXJjaGFibGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3VwLWZpbHRlcicsXG4gIHN0eWxlVXJsOiAgJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IFxuICAgIGNsYXNzOiAnZC1ibG9jayBwb3NpdGlvbi1yZWxhdGl2ZScgXG4gIH0sXG4gIGltcG9ydHM6IFsgIFxuICAgIElvbmljTW9kdWxlLFxuICAgIEZvcm1EYXRlQ29tcG9uZW50LFxuICAgIEZvcm1JbnB1dENvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1TZWxlY3RDb21wb25lbnQsXG4gICAgRm9ybVNlYXJjaGFibGVTZWxlY3RDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBmaWx0ZXIuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGlkITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHNwZWNpZnlpbmcgZmlsdGVyIGZpZWxkcyBhbmQgbW9kZS5cbiAgICogQHR5cGUge0ZpbHRlckNvbmZpZ31cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgY29uZmlnITogRmlsdGVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgZXZlbnQgZW1pdHRlciB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBhIHNlYXJjaC5cbiAgICogRW1pdHMgYSBgRmlsdGVyU2VhcmNoRXZlbnRgIG9iamVjdCB3aXRoIHNlYXJjaCBtb2RlIGFuZCBjcml0ZXJpYSBkYXRhLlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPEZpbHRlclNlYXJjaEV2ZW50Pn1cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgb25TZWFyY2g6IEV2ZW50RW1pdHRlcjxGaWx0ZXJTZWFyY2hFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFZpZXdDaGlsZCBkZWNvcmF0b3IgdG8gcmVmZXJlbmNlIHRoZSBzZWFyY2hCb3ggZWxlbWVudCBpbiB0aGUgdGVtcGxhdGUuXG4gICAqIEB0eXBlIHtFbGVtZW50UmVmfVxuICAgKi9cbiAgQFZpZXdDaGlsZCgnc2VhcmNoQm94JykgcHJvdGVjdGVkIHJlYWRvbmx5IHNlYXJjaEJveCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEZvcm0gZ3JvdXAgZm9yIG1hbmFnaW5nIGZvcm0gY29udHJvbHMuXG4gICAqIEB0eXBlIHtGb3JtR3JvdXA8YW55Pn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmb3JtOiBGb3JtR3JvdXA8YW55PiA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIC8qKlxuICAgKiBBcnJheSB0byBzdG9yZSBhY3RpdmUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKiBAdHlwZSB7eyBsYWJlbDogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W119XG4gICAqL1xuICBwdWJsaWMgYWN0aXZlRmlsdGVyOiB7IGxhYmVsOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBNYXAgdG8gc3RvcmUgaW5pdGlhbCBpdGVtcyBmb3IgZWFjaCBmaWx0ZXIga2V5LlxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgeyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXT59XG4gICAqL1xuICBwdWJsaWMgaW5pdGlhbEl0ZW1zOiBNYXA8c3RyaW5nLCB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdPiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAQXR0cmlidXRlKCdwbGFjZWhvbGRlcicpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjaDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBvcG92ZXJDdHJsOiBQb3BvdmVyQ29udHJvbGxlclxuICApIHsgfSBcblxuICAvKipcbiAgICogTGlmZWN5Y2xlIGhvb2sgdG8gaW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50LlxuICAgKiBDcmVhdGVzIGZvcm0gY29udHJvbHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gYW5kIHJlc3RvcmVzIHNhdmVkIGZpbHRlciBzdGF0ZS5cbiAgICovXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lke1xuICAgIGNvbnN0IGlycmVzb2x1dGVLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgaXJyZXNvbHV0ZVZhbHVlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICAgIHRoaXMuY29uZmlnLmZpZWxkcy5mb3JFYWNoKCh7IGtleSwgaW5pdGlhbFZhbHVlLCBpbml0aWFsSXRlbXMsIGlzSXJyZXNvbHV0ZSB9OiBGaWx0ZXJGaWVsZCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGtleS5mb3JFYWNoKChrOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woaywgaW5pdGlhbFZhbHVlPy5hdChpKSwgaXNJcnJlc29sdXRlKTtcblxuICAgICAgICAgIGlmIChpc0lycmVzb2x1dGUpIHtcbiAgICAgICAgICAgIGlycmVzb2x1dGVLZXlzLmFkZChrKTtcbiAgICAgICAgICAgIGlmIChpbml0aWFsVmFsdWUpIGlycmVzb2x1dGVWYWx1ZS5zZXQoaywgaW5pdGlhbFZhbHVlPy5hdChpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbml0aWFsSXRlbXMpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxJdGVtcy5zZXQoa2V5LCBpbml0aWFsSXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChrZXksIGluaXRpYWxWYWx1ZSwgaXNJcnJlc29sdXRlKTtcbiAgICAgICAgaWYgKGlzSXJyZXNvbHV0ZSkge1xuICAgICAgICAgIGlycmVzb2x1dGVLZXlzLmFkZChrZXkpO1xuICAgICAgICAgIGlmIChpbml0aWFsVmFsdWUpIGlycmVzb2x1dGVWYWx1ZS5zZXQoa2V5LCBpbml0aWFsVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzYXZlZFN0YXRlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7IHRoaXMuaWQgfWApO1xuICAgIGlmICghc2F2ZWRTdGF0ZSkge1xuICAgICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IEpTT04ucGFyc2Uoc2F2ZWRTdGF0ZSk7XG4gICAgaWYgKHN0YXRlLmluaXRpYWxJdGVtcykge1xuICAgICAgdGhpcy5pbml0aWFsSXRlbXMgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHN0YXRlLmluaXRpYWxJdGVtcykpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSBzdGF0ZS5mb3JtVmFsdWVzIHx8IHt9O1xuICAgIGNvbnN0IGNvbWJWYWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBPYmplY3Qua2V5cyhmb3JtVmFsdWVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIWlycmVzb2x1dGVLZXlzLmhhcyhrZXkpKSBjb21iVmFsdWVzW2tleV0gPSBmb3JtVmFsdWVzW2tleV07XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29tYlZhbHVlc1trZXldID0gaXJyZXNvbHV0ZVZhbHVlLmdldChrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoY29tYlZhbHVlcyk7XG4gICAgXG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIgPSBbXTtcbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgT2JqZWN0LmtleXMoY3VycmVudFZhbHVlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZXNba2V5XSkgdGhpcy5wcm9jZXNzRmlsdGVyKGtleSwgY3VycmVudFZhbHVlc1trZXldKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBmaWx0ZXIgcG9wb3Zlci5cbiAgICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkeyBcbiAgICB0aGlzLnBvcG92ZXJDdHJsLmRpc21pc3MoKTsgXG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBmaWx0ZXIgY3JpdGVyaWEsIGxvY2FsU3RvcmFnZSwgYW5kIHRyaWdnZXJzIGEgc2VhcmNoIGV2ZW50IHdpdGggbnVsbCBkYXRhLlxuICAgKi9cbiAgcHVibGljIGNsZWFyKCk6IHZvaWR7XG4gICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgdGhpcy5mb3JtLnJlc2V0KCk7XG5cbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHsgdGhpcy5pZCB9YCk7XG4gICAgdGhpcy5pbml0aWFsSXRlbXMuY2xlYXIoKTtcbiAgICB0aGlzLm9uU2VhcmNoLmVtaXQoeyBtb2RlOiB0aGlzLmNvbmZpZy5tb2RlLCBkYXRhOiBudWxsIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzcGVjaWZpYyBmaWx0ZXIgY3JpdGVyaWEgYmFzZWQgb24gaXRzIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gaSAtIEluZGV4IG9mIHRoZSBmaWx0ZXIgY3JpdGVyaWEgdG8gYmUgcmVtb3ZlZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWx0ZXIoaTogbnVtYmVyKTogdm9pZHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5hY3RpdmVGaWx0ZXJbaV0ua2V5XS5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIuc3BsaWNlKGksIDEpO1xuICAgXG4gICAgaWYgKHRoaXMuYWN0aXZlRmlsdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgYSBzZWFyY2ggYmFzZWQgb24gdGhlIGFjdGl2ZSBmaWx0ZXIgY3JpdGVyaWEgYW5kIGNsZWFycyB0aGUgc2F2ZWQgZmlsdGVyIHN0YXRlIGlmIHRoZXJlIGFyZSBubyBhY3RpdmUgZmlsdGVycy5cbiAgICovXG4gIHB1YmxpYyBzZWFyY2goKTogdm9pZHtcbiAgICB0aGlzLnJlc2V0VmFsdWUoKTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgoazogc3RyaW5nLCB2OiBhbnkpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlcihrLCB2KTtcbiAgICB9KTtcbiAgXG4gICAgaWYgKHRoaXMuYWN0aXZlRmlsdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pbml0aWFsSXRlbXMuY2xlYXIoKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMuaWR9YCk7XG4gICAgfVxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzRmlsdGVyKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZHtcbiAgICBsZXQgdmFsdWVzOiBzdHJpbmdbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlcyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZXMgPSBbdmFsdWVdO1xuICAgIH1cbiAgXG4gICAgdmFsdWVzID0gdmFsdWVzLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnKTtcbiAgXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyID0gdGhpcy5hY3RpdmVGaWx0ZXIuZmlsdGVyKGl0ZW0gPT4gaXRlbS5rZXkgIT09IGtleSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICBcbiAgICBjb25zdCBsYWJlbHMgPSB2YWx1ZXMubWFwKHYgPT4ge1xuICAgICAgY29uc3QgaW5pdGlhbEl0ZW0gPSB0aGlzLmluaXRpYWxJdGVtcy5nZXQoa2V5KT8uZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHYpO1xuICAgICAgcmV0dXJuIGluaXRpYWxJdGVtXG4gICAgICAgID8gaW5pdGlhbEl0ZW0ubGFiZWxcbiAgICAgICAgOiBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGF0ZScpPyBmb3JtYXREYXRlKHYsICdkZCBNTU0geXl5eScsICdlbi1VUycpIDogdjtcbiAgICB9KTtcbiAgXG4gICAgY29uc3QgbGFiZWwgPSBgJHsga2V5IH06ICR7IGxhYmVscy5qb2luKCcsICcpIH1gO1xuICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdmFsdWVzLmpvaW4oJywnKTtcblxuICAgIHRoaXMuYWN0aXZlRmlsdGVyID0gdGhpcy5hY3RpdmVGaWx0ZXIuZmlsdGVyKGl0ZW0gPT4gaXRlbS5rZXkgIT09IGtleSk7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIucHVzaCh7IGtleSwgdmFsdWU6IHZhbHVlU3RyaW5nLCBsYWJlbCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGZpbHRlciBjcml0ZXJpYSBiYXNlZCBvbiB0aGUgdXNlciBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBhZGQoKTogdm9pZHtcbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IHRoaXMuZ2V0VmFsdWUodGhpcy5zZWFyY2hCb3gubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLmZpZWxkcy5maW5kSW5kZXgoKHsga2V5OiBrIH0pID0+IGsgPT09IGtleSkgPT09IC0xKSB7XG4gICAgICB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaSA9IHRoaXMuYWN0aXZlRmlsdGVyLmZpbmRJbmRleCgoeyBrZXk6IGsgfSkgPT4gayA9PT0ga2V5KTtcbiAgICBpZiAoaSA9PT0gLTEpIHRoaXMuYWN0aXZlRmlsdGVyLnVuc2hpZnQoeyBsYWJlbDogYCR7IGtleSB9OiR7IHZhbHVlIH1gLCBrZXksIHZhbHVlIH0pO1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJbaV0ua2V5ID0ga2V5O1xuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJbaV0udmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyW2ldLmxhYmVsID0gYCR7IGtleSB9OiR7IHZhbHVlIH1gO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgW2tleV06IHZhbHVlIH0pO1xuICAgIHRoaXMuc2VhcmNoQm94Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY2VpdmUgdGhlIGluaXRpYWxJdGVtcyBmb3JtIHNlYXJjaGFibGUgb3Igc2VsZWN0IGNvbXBvbmVudCBhbmQgYXBwbHkgdGhlbSB0byB0aGUgaW5pdGlhbEl0ZW1zIG1hcCB0byBiZSB1c2VkIGFnYWluIGJ5IHNlYXJjaGFibGUgb3Igc2VsZWN0IGNvbXBvbmVudFxuICAgKiB3aGVuIGl0IGluaXRpYWxpemVkIGFnYWluLlxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIFRoZSBpbml0aWFsIGl0ZW1zIHJlY2VpdmVkIGZyb20gdGhlIHNlYXJjYWJsZSBvciBzZWxlY3QgY29tcG9uZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGluaXRpYWwgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgYXBwbHlJbml0aWFsSXRlbXMoaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IHZvaWR7IFxuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgdGhpcy5pbml0aWFsSXRlbXMgPSB0aGlzLmluaXRpYWxJdGVtcy5zZXQoa2V5LCBbIGl0ZW0gXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsSXRlbXMgPSB0aGlzLmluaXRpYWxJdGVtcy5zZXQoa2V5LCBpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGFjdGl2ZSBmaWx0ZXIgYW5kIGNsZWFycyB0aGUgc2VhcmNoIGJveC5cbiAgICovXG4gIHByb3RlY3RlZCByZXNldFZhbHVlKCk6IHZvaWR7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIubGVuZ3RoID0gMDtcbiAgICB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBpbnB1dCB2YWx1ZSBhbmQgcmV0dXJucyBhIGtleS12YWx1ZSBwYWlyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBJbnB1dCB2YWx1ZSB0byBiZSBwYXJzZWQuXG4gICAqIEByZXR1cm5zIHt7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH19IC0gS2V5LXZhbHVlIHBhaXIgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH17XG4gICAgY29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHsga2V5OiA8c3RyaW5nPiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbmZpZy5maWVsZHNbMF0ua2V5KT8gdGhpcy5jb25maWcuZmllbGRzWzBdLmtleVswXSA6IHRoaXMuY29uZmlnLmZpZWxkc1swXS5rZXkpLCB2YWx1ZTogdmFsdWVzWzBdIH07XG4gICAgcmV0dXJuIHsga2V5OiB2YWx1ZXNbMF0sIHZhbHVlOiB2YWx1ZXNbMV0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc2VhcmNoIGV2ZW50IGJhc2VkIG9uIHRoZSBmb3JtIHZhbHVlcy5cbiAgICogSW52b2tlcyBhbiBleHRyYSBhY3Rpb24gaWYgcHJvdmlkZWQgYW5kIHNhdmVzIHRoZSBzdGF0ZSB0byBsb2NhbFN0b3JhZ2UuXG4gICAqIEBwYXJhbSB7KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkfSBbZXh0cmFBY3Rpb25dIC0gT3B0aW9uYWwgZXh0cmEgYWN0aW9uIHRvIGJlIGludm9rZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZW1pdFZhbHVlKGV4dHJhQWN0aW9uPzogKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZHtcbiAgICBsZXQgZmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0IGYgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBkYXRhOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIFxuICAgIE9iamVjdC5rZXlzKGYpLmZvckVhY2goKGs6IGFueSkgPT4ge1xuICAgICAgaWYgKCFmW2tdIHx8IChBcnJheS5pc0FycmF5KGZba10pICYmIGZba10ubGVuZ3RoID09PSAwKSkgcmV0dXJuO1xuXG4gICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgIGRhdGFba10gPSBmW2tdO1xuICAgICAgZXh0cmFBY3Rpb24/LihrLCBmW2tdKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uU2VhcmNoLmVtaXQoeyBtb2RlOiB0aGlzLmNvbmZpZy5tb2RlLCBkYXRhOiBmbGFnPyBkYXRhIDogbnVsbCB9KTtcbiAgICBcbiAgICB0aGlzLnNhdmVTdGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtIGNvbnRyb2wgZm9yIGEgZ2l2ZW4ga2V5IGFuZCBzZXRzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gS2V5IGZvciB0aGUgZm9ybSBjb250cm9sLlxuICAgKiBAcGFyYW0geyp9IFt2YWxdIC0gSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVGb3JtQ29udHJvbChrZXk6IHN0cmluZywgdmFsPzogYW55LCBpc0lycmVzb2x1dGU/OiBib29sZWFuKTogdm9pZHtcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChrZXksIG5ldyBGb3JtQ29udHJvbCgnJykpO1xuXG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsKTtcbiAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlcihrZXksIHZhbCk7XG5cbiAgICAgIGlmICghaXNJcnJlc29sdXRlKSB7XG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVTdGF0ZSgpOiB2b2lke1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgYCR7IHRoaXMuaWQgfWAsIFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBhY3RpdmVGaWx0ZXI6IHRoaXMuYWN0aXZlRmlsdGVyLFxuICAgICAgICBpbml0aWFsSXRlbXM6IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmluaXRpYWxJdGVtcyksXG4gICAgICAgIGZvcm1WYWx1ZXM6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsIjxpb24taWNvbiBuYW1lPVwic2VhcmNoXCIgY2xhc3M9XCJmcy00IHBvc2l0aW9uLWFic29sdXRlXCIgLz5cblxuPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZm9ybS1jb250cm9sIHBzLTUgcHktMCBwZS0wIGdhcC0zXCI+XG4gICAgQGlmIChhY3RpdmVGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIGZsZXgtc2hyaW5rLTAgdGFnLWNvbnRhaW5lciBnYXAtMiB0ZXh0LW5vd3JhcCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGFjdGl2ZUZpbHRlcjsgdHJhY2sgaXRlbS5rZXk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZy1pdGVtIHAtMSByb3VuZGVkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdXNlci1zZWxlY3Qtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgY2xhc3M9XCJwZS0xIG1lLTEgY3Vyc29yLXBvaW50ZXIgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpKTtcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxpbnB1dCAjc2VhcmNoQm94IHR5cGU9XCJzZWFyY2hcIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCIgY2xhc3M9XCJmbGV4LXNocmluay0xIGJvcmRlci0wIGZvcm0tY29udHJvbCBwcy0wIHB5LTJcIiBbY2xhc3MuYWR2XT1cImNvbmZpZy5tb2RlID09PSAnYWR2YW5jZWQnXCIgKGtleXVwLmVudGVyKT1cImFkZCgpO1wiIC8+XG48L2Rpdj5cblxuQGlmIChjb25maWcubW9kZSA9PT0gJ2FkdmFuY2VkJykge1xuICAgIDxpb24taWNvbiBuYW1lPVwiZmlsdGVyXCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBmcy00IGN1cnNvci1wb2ludGVyXCIgaWQ9XCJmaWx0ZXIte3sgaWQgfX1cIiAvPlxuICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZzLTQgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xlYXIoKTtcIiAvPlxuICAgIFxuICAgIDxpb24tcG9wb3ZlciB0cmlnZ2VyPVwiZmlsdGVyLXt7IGlkIH19XCIgdHJpZ2dlckFjdGlvbj1cImNsaWNrXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmlsdGVyIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBib3JkZXItYm90dG9tIHAtMSBwZS00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b25zPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b24gc2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjbG9zZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNSBmdy1tZWRpdW1cIj5BZHZhbmNlZCBGaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmbGV4LWdyb3ctMSBvdmVyZmxvdy1hdXRvIHB4LTRcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBjb25maWcuZmllbGRzOyB0cmFjayBjLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAoYy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1pbnB1dCB0eXBlPVwibnVtYmVyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveCBsYWJlbFBsYWNlbWVudD1cImVuZFwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5IH19XCI+e3sgYy5sYWJlbCB9fTwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2RhdGUtcmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWRhdGUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eyBjLmxhYmVsWzBdIH19XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7IGMua2V5WzBdIH19LWZpbHRlci1mcm9tXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXlbMF0gfX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1kYXRlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3sgYy5sYWJlbFsxXSB9fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7eyBjLmtleVsxXSB9fS1maWx0ZXItdG9cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7eyBjLmtleVsxXSB9fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdzZWxlY3QnKSB7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXAtc2VsZWN0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7eyBjLmtleSB9fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiYy5vcHRpb25zIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiYy5tdWx0aXBsZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBCeV09XCJjLmdyb3VwQnkgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3NlYXJjaGFibGUtc2VsZWN0JykgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLXNlYXJjaGFibGUtc2VsZWN0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS00XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3sgYy5sYWJlbCB9fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVyeUZ1bmNdPVwiYy5nZXRPcHRpb25zIVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luaXRpYWxJdGVtc109XCJjLm9wdGlvbnMhIHx8IGluaXRpYWxJdGVtcy5nZXQoYy5rZXkudG9TdHJpbmcoKSkhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJjLm11bHRpcGxlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJhcHBseUluaXRpYWxJdGVtcygkZXZlbnQsIGMua2V5LnRvU3RyaW5nKCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdudW1iZXItcmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWlucHV0IHR5cGU9XCJudW1iZXJcIiAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJmbGV4LWdyb3ctMVwiIGxhYmVsPVwie3sgYy5sYWJlbFswXSB9fVwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5WzBdIH19XCIgW21pbl09XCJjLm1pblwiIFttYXhdPVwiYy5tYXhcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXAtaW5wdXQgdHlwZT1cIm51bWJlclwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwiZmxleC1ncm93LTFcIiBsYWJlbD1cInt7IGMubGFiZWxbMV0gfX1cIiBmb3JtQ29udHJvbE5hbWU9XCJ7eyBjLmtleVsxXSB9fVwiIFttaW5dPVwiYy5taW5cIiBbbWF4XT1cImMubWF4XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWlucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHB5LTMgcHgtNCBib3JkZXItdG9wIGQtZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwiZm9ybS5yZXNldCgpO1wiPlJlc2V0PC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpO1wiPlNlYXJjaDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICA8L2lvbi1wb3BvdmVyPiAgICBcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { FilterComponent } from './filter.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZpbHRlclNlYXJjaEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1zZWFyY2gtZXZlbnQuaW50ZXJmYWNlJztcbmV4cG9ydCB7IEZpbHRlckNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9maWx0ZXItY29uZmlnLmludGVyZmFjZSc7XG5leHBvcnQgeyBGaWx0ZXJGaWVsZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9maWx0ZXItZmllbGQuaW50ZXJmYWNlJztcbmV4cG9ydCB7IEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vZmlsdGVyLmNvbXBvbmVudCc7IFxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ludGVyZmFjZXMvZmlsdGVyLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpbHRlckZpZWxkIH0gZnJvbSAnLi9maWx0ZXItZmllbGQuaW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25maWcge1xuXG4gIC8qKlxuICAgKiBNb2RlIG9mIHRoZSBmaWx0ZXIsIGVpdGhlciAnc2ltcGxlJyBvciAnYWR2YW5jZWQnLlxuICAgKiBAdHlwZSB7KCdzaW1wbGUnIHwgJ2FkdmFuY2VkJyl9XG4gICAqL1xuICBtb2RlOiAnc2ltcGxlJyB8ICdhZHZhbmNlZCc7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGZpbHRlciBmaWVsZCBjb25maWd1cmF0aW9ucy5cbiAgICogRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyBhIGBGaWx0ZXJGaWVsZGAgb2JqZWN0IGRlZmluaW5nIHRoZSBrZXkgYW5kIGluaXRpYWwgdmFsdWUgb2YgYSBmaWx0ZXIgZmllbGQuXG4gICAqIEB0eXBlIHtGaWx0ZXJGaWVsZFtdfVxuICAgKi9cbiAgZmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZpZWxkLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvaW50ZXJmYWNlcy9maWx0ZXItZmllbGQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyRmllbGQge1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byByZXRyaWV2ZSBvcHRpb25zIGFzeW5jaHJvbm91c2x5IGJhc2VkIG9uIGEga2V5d29yZC5cbiAgICogSXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIGFuIGFycmF5IG9mIHsgbGFiZWwsIHZhbHVlIH0gb2JqZWN0cy5cbiAgICogQHR5cGUgeyhrZXl3b3JkOiBzdHJpbmcpID0+IE9ic2VydmFibGU8eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXT59XG4gICAqL1xuICBnZXRPcHRpb25zPzogKGtleXdvcmQ6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdPjtcblxuICAvKipcbiAgICogSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpbHRlciBmaWVsZC4gSXQgY2FuIGJlIGEgc2luZ2xlIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICAgKiBAdHlwZSB7KHN0cmluZyB8IHN0cmluZ1tdKX1cbiAgICovXG4gIGluaXRpYWxWYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgZmlsdGVyIGZpZWxkLiBVc2VkIGFzIGludGlhbCBpdGVtcyBmb3Igc2VsZWN0IGZvcm0gZmlsdGVyLlxuICAgKiBAdHlwZSB7eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXX1cbiAgICovXG4gIGluaXRpYWxJdGVtcz86IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W107XG5cbiAgLyoqXG4gICAqIEtleSBvciBhcnJheSBvZiBrZXlzIHJlcHJlc2VudGluZyB0aGUgZmllbGQgaW4gdGhlIGRhdGEgbW9kZWwuXG4gICAqIEB0eXBlIHsoc3RyaW5nIHwgc3RyaW5nW10pfVxuICAgKi9cbiAga2V5OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGFiZWwgb3IgYXJyYXkgb2YgbGFiZWxzIGZvciBkaXNwbGF5aW5nIHRoZSBmaWVsZCBpbiB0aGUgVUkuXG4gICAqIEB0eXBlIHsoc3RyaW5nIHwgc3RyaW5nW10pfVxuICAgKi9cbiAgbGFiZWw6IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBzZWxlY3QtbGlrZSBmaWVsZHMgKHNlbGVjdCwgc2VhcmNoYWJsZS1zZWxlY3QsIGNoZWNrYm94KS5cbiAgICogQW4gYXJyYXkgb2YgeyBsYWJlbCwgdmFsdWUgfSBvYmplY3RzLlxuICAgKiBAdHlwZSB7eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXX1cbiAgICovXG4gIG9wdGlvbnM/OiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBmaWx0ZXIgZmllbGQuIEl0IGNhbiBiZSAndGV4dCcsICdudW1iZXInLCAnZGF0ZS1yYW5nZScsICdzZWxlY3QnLCAnc2VhcmNoYWJsZS1zZWxlY3QnLCAnY2hlY2tib3gnLCBvciAnbnVtYmVyLXJhbmdlJy5cbiAgICogQHR5cGUgeygndGV4dCcgfCAnbnVtYmVyJyB8ICdkYXRlLXJhbmdlJyB8ICdzZWxlY3QnIHwgJ3NlYXJjaGFibGUtc2VsZWN0JyB8ICdjaGVja2JveCcgfCAnbnVtYmVyLXJhbmdlJyl9XG4gICAqL1xuICB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdkYXRlLXJhbmdlJyB8ICdzZWxlY3QnIHwgJ3NlYXJjaGFibGUtc2VsZWN0JyB8ICdjaGVja2JveCcgfCAnbnVtYmVyLXJhbmdlJztcblxuICAvKipcbiAgICogVG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNlbGVjdCB0eXBlZCBmaWVsZCBjYW4gaGFzIG11bHRpcGxlIHZhbHVlcyBvciBub3QuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgZmllbGQgc2hvdWxkIHNraXAgc2F2aW5nIGl0cyB2YWx1ZSB0byBsb2NhbFN0b3JhZ2UuXG4gICAqIElmIHNldCB0byB0cnVlLCB0aGUgZmllbGQgd2lsbCBhbHdheXMgdXNlIHRoZSBkZWZpbmVkIGluaXRpYWxWYWx1ZSBpbnN0ZWFkIG9mIGFueSBzYXZlZCB2YWx1ZS5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBpc0lycmVzb2x1dGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHZhbHVlIGZvciBudW1iZXIgZmllbGRzIChudW1iZXIsIG51bWJlci1yYW5nZSkuIFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgbWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHZhbHVlIGZvciBudW1iZXIgZmllbGRzIChudW1iZXIsIG51bWJlci1yYW5nZSkuIFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgbWF4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0eSB0byBncm91cCBvcHRpb25zIGZvciBzZWxlY3QtbGlrZSBmaWVsZHMgKHNlbGVjdCwgc2VhcmNoYWJsZS1zZWxlY3QsIGNoZWNrYm94KS5cbiAgICogSXQgYWxsb3dzIHRvIGdyb3VwIG9wdGlvbnMgYnkgYSBzcGVjaWZpZWQgZmllbGQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBncm91cEJ5Pzogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXNlYXJjaC1ldmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ludGVyZmFjZXMvZmlsdGVyLXNlYXJjaC1ldmVudC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyU2VhcmNoRXZlbnQgeyBcblxuICAvKipcbiAgICogRGF0YSByZXByZXNlbnRpbmcgdGhlIHNlYXJjaCBjcml0ZXJpYS4gSXQgY2FuIGJlIG9mIGFueSB0eXBlLlxuICAgKiBAdHlwZSB7YW55fVxuICAgKi9cbiAgZGF0YTogYW55O1xuXG4gIC8qKlxuICAgKiBNb2RlIG9mIHRoZSBmaWx0ZXIgYXQgdGhlIHRpbWUgb2YgdGhlIHNlYXJjaCBldmVudC5cbiAgICogSXQgY2FuIGJlICdzaW1wbGUnIG9yICdhZHZhbmNlZCcuXG4gICAqIEB0eXBlIHsoJ3NpbXBsZScgfCAnYWR2YW5jZWQnKX1cbiAgICovXG4gIG1vZGU6ICdzaW1wbGUnIHwgJ2FkdmFuY2VkJzsgXG59XG4iXX0=
@@ -0,0 +1,122 @@
1
+ import { Attribute, ChangeDetectionStrategy, Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { NgSelectModule } from '@ng-select/ng-select';
4
+ import { getFormErrorMessage } from '../../../utils';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../../services";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "@ng-select/ng-select";
9
+ export class FormCountryInputComponent {
10
+ constructor(placeholder, ch, countryService) {
11
+ this.placeholder = placeholder;
12
+ this.ch = ch;
13
+ this.countryService = countryService;
14
+ this.clearable = true;
15
+ this.required = false;
16
+ this.multiple = false;
17
+ this.disabled = false;
18
+ this.onChange = new EventEmitter();
19
+ this.items = [];
20
+ this.isLoading = true;
21
+ this.isTouched = false;
22
+ this.value = null;
23
+ this.changed = (_val) => { };
24
+ this.onTouched = () => { };
25
+ }
26
+ ngOnInit() {
27
+ this.sub = this.countryService.query().subscribe({
28
+ error: () => {
29
+ this.items = [];
30
+ this.setIsLoading(false);
31
+ },
32
+ next: ({ data: { webConfigMsCountry: { data } } }) => {
33
+ this.items = data.map((d) => ({ label: d.name, value: d.code, data: d }));
34
+ this.setIsLoading(false);
35
+ }
36
+ });
37
+ }
38
+ ngOnDestroy() {
39
+ this.sub?.unsubscribe();
40
+ }
41
+ registerOnChange(fn) { this.changed = fn; }
42
+ registerOnTouched(fn) { this.onTouched = fn; }
43
+ writeValue(val) {
44
+ this.value = val;
45
+ this.ch.markForCheck();
46
+ }
47
+ setDisabledState(d) {
48
+ this.disabled = d;
49
+ this.ch.markForCheck();
50
+ }
51
+ validate(control) {
52
+ this.formControl = control;
53
+ return null;
54
+ }
55
+ change(e) {
56
+ if (!this.isTouched) {
57
+ this.onTouched();
58
+ this.isTouched = true;
59
+ }
60
+ if (!this.disabled) {
61
+ if (!e)
62
+ this.value = null;
63
+ else {
64
+ this.value = !this.multiple ? e.value : e.map((o) => o.value);
65
+ }
66
+ this.changed(this.value);
67
+ this.onChange.emit(e.data);
68
+ this.errorMsg = getFormErrorMessage(this.formControl.errors, 'Country');
69
+ }
70
+ }
71
+ setIsLoading(b) {
72
+ this.isLoading = b;
73
+ this.ch.markForCheck();
74
+ }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormCountryInputComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.CountryService }], target: i0.ɵɵFactoryTarget.Component }); }
76
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormCountryInputComponent, isStandalone: true, selector: "up-country-input", inputs: { clearable: "clearable", required: "required", multiple: "multiple", disabled: "disabled" }, outputs: { onChange: "onChange" }, host: { classAttribute: "d-block" }, providers: [
77
+ {
78
+ multi: true,
79
+ provide: NG_VALUE_ACCESSOR,
80
+ useExisting: FormCountryInputComponent
81
+ },
82
+ {
83
+ multi: true,
84
+ provide: NG_VALIDATORS,
85
+ useExisting: FormCountryInputComponent
86
+ }
87
+ ], ngImport: i0, template: "<label class=\"form-label\" [class.required]=\"required\">Country</label>\n<ng-select \n class=\"flex-shrink-0\"\n appendTo=\"body\"\n bindValue=\"value\"\n placeholder=\"{{ placeholder }}\"\n [virtualScroll]=\"true\"\n [items]=\"items\"\n [ngModel]=\"value\"\n [multiple]=\"multiple\"\n [readonly]=\"disabled\" \n [loading]=\"isLoading\"\n [clearable]=\"clearable\"\n (change)=\"change($event);\"\n/>\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick", "keyDownFn"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
88
+ }
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormCountryInputComponent, decorators: [{
90
+ type: Component,
91
+ args: [{ standalone: true, selector: 'up-country-input', changeDetection: ChangeDetectionStrategy.OnPush, host: {
92
+ class: 'd-block'
93
+ }, imports: [
94
+ FormsModule,
95
+ NgSelectModule
96
+ ], providers: [
97
+ {
98
+ multi: true,
99
+ provide: NG_VALUE_ACCESSOR,
100
+ useExisting: FormCountryInputComponent
101
+ },
102
+ {
103
+ multi: true,
104
+ provide: NG_VALIDATORS,
105
+ useExisting: FormCountryInputComponent
106
+ }
107
+ ], template: "<label class=\"form-label\" [class.required]=\"required\">Country</label>\n<ng-select \n class=\"flex-shrink-0\"\n appendTo=\"body\"\n bindValue=\"value\"\n placeholder=\"{{ placeholder }}\"\n [virtualScroll]=\"true\"\n [items]=\"items\"\n [ngModel]=\"value\"\n [multiple]=\"multiple\"\n [readonly]=\"disabled\" \n [loading]=\"isLoading\"\n [clearable]=\"clearable\"\n (change)=\"change($event);\"\n/>\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n\n" }]
108
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
109
+ type: Attribute,
110
+ args: ['placeholder']
111
+ }] }, { type: i0.ChangeDetectorRef }, { type: i1.CountryService }], propDecorators: { clearable: [{
112
+ type: Input
113
+ }], required: [{
114
+ type: Input
115
+ }], multiple: [{
116
+ type: Input
117
+ }], disabled: [{
118
+ type: Input
119
+ }], onChange: [{
120
+ type: Output
121
+ }] } });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb3VudHJ5LWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9jb3VudHJ5LWlucHV0L2Zvcm0tY291bnRyeS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY291bnRyeS1pbnB1dC9mb3JtLWNvdW50cnktaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQXlDLFdBQVcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkosT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQTRCckQsTUFBTSxPQUFPLHlCQUF5QjtJQTBGcEMsWUFDbUMsV0FBbUIsRUFDakMsRUFBcUIsRUFDckIsY0FBOEI7UUFGaEIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDakMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBdEZuQyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBTzFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFPMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU8xQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBTXpCLGFBQVEsR0FBNkMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU1sRixVQUFLLEdB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cmlidXRlLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5nU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xuaW1wb3J0IHsgQ291bnRyeSB9IGZyb20gJy4uLy4uLy4uLy4uL2dyYXBocWwvZ2VuZXJhdGVkJztcbmltcG9ydCB7IENvdW50cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZ2V0Rm9ybUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndXAtY291bnRyeS1pbnB1dCcsXG4gIHN0eWxlVXJsOiAnLi9mb3JtLWNvdW50cnktaW5wdXQuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1jb3VudHJ5LWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgXG4gICAgY2xhc3M6ICdkLWJsb2NrJyBcbiAgfSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nU2VsZWN0TW9kdWxlXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUNvdW50cnlJbnB1dENvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IEZvcm1Db3VudHJ5SW5wdXRDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvdW50cnlJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY291bnRyeSBpbnB1dCBpcyBjbGVhcmFibGUuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB7dHJ1ZX1cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY291bnRyeSBpbnB1dCBpcyByZXF1aXJlZC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2VsZWN0IGlucHV0IGFsbG93cyBtdWx0aXBsZSBzZWxlY3Rpb25zLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY291bnRyeSBpbnB1dCBpcyBkaXNhYmxlZC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgdmFyaWFibGUgdG8gZW1pdCBjaGFuZ2VzIHdoZW4gdGhlIGNvdW50cnkgaW5wdXQgdmFsdWUgY2hhbmdlcy5cbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxhbnk+fVxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPENvdW50cnkgfCB1bmRlZmluZWQgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBmb3IgZGlzcGxheWluZyBpdGVtcyBpbiB0aGUgY291bnRyeSBpbnB1dC5cbiAgICogQHR5cGUge09ic2VydmFibGU8YW55W10+fVxuICAgKi9cbiAgcHVibGljIGl0ZW1zOiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRhdGE6IENvdW50cnkgfVtdID0gW107XG5cbiAgLyoqXG4gICAqIEJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvdW50cnkgaW5wdXQgaXMgbG9hZGluZy5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBCb29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb3VudHJ5IGlucHV0IGhhcyBiZWVuIHRvdWNoZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBwdWJsaWMgaXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY291bnRyeSBpbnB1dC5cbiAgICogQHR5cGUge2FueSB8IG51bGx9XG4gICAqIEBkZWZhdWx0IHtudWxsfVxuICAgKi9cbiAgcHVibGljIHZhbHVlOiBhbnkgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvdW50cnkgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHt1bmRlZmluZWR9XG4gICAqL1xuICBwdWJsaWMgZXJyb3JNc2chOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3VudHJ5IGlucHV0LlxuICAgKiBAdHlwZSB7QWJzdHJhY3RDb250cm9sfVxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1Db250cm9sITogQWJzdHJhY3RDb250cm9sO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdmFsdWUgY2hhbmdlcyBpbiB0aGUgY291bnRyeSBpbnB1dC5cbiAgICogQHR5cGUgeyhfdmFsOiBhbnkpID0+IHZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgY2hhbmdlZDogKF92YWw6IGFueSkgPT4gdm9pZCA9IChfdmFsOiBhbnkpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdG91Y2ggZXZlbnRzIGluIHRoZSBjb3VudHJ5IGlucHV0LlxuICAgKiBAdHlwZSB7KCkgPT4gdm9pZH1cbiAgICovXG4gIHByb3RlY3RlZCBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBwcm90ZWN0ZWQgc3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY291bnRyeVNlcnZpY2U6IENvdW50cnlTZXJ2aWNlLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWR7XG4gICAgdGhpcy5zdWIgPSB0aGlzLmNvdW50cnlTZXJ2aWNlLnF1ZXJ5KCkuc3Vic2NyaWJlKHtcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG5leHQ6ICh7IGRhdGE6IHsgd2ViQ29uZmlnTXNDb3VudHJ5OiB7IGRhdGEgfX19KSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLm1hcCgoZCkgPT4gKHsgbGFiZWw6IGQubmFtZSEsIHZhbHVlOiBkLmNvZGUhLCBkYXRhOiBkIH0pKTtcbiAgICAgICAgdGhpcy5zZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWR7XG4gICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2VsZWN0IGlucHV0IHZhbHVlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB7KF92YWw6IGFueSkgPT4gdm9pZH0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkeyB0aGlzLmNoYW5nZWQgPSBmbjsgfVxuICBcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzZWxlY3QgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0b3VjaCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWR7IHRoaXMub25Ub3VjaGVkID0gZm47IH0gXG4gIFxuICAvKipcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEBwYXJhbSB7Kn0gdmFsIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSBzZXQuXG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWw6IGFueSk6IHZvaWR7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB0aGlzLmNoLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICAgLyoqXG4gICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZCAtIFRoZSBuZXcgZGlzYWJsZWQgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZT8oZDogYm9vbGVhbik6IHZvaWR7IFxuICAgIHRoaXMuZGlzYWJsZWQgPSBkOyBcbiAgICB0aGlzLmNoLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBhYnN0cmFjdCBjb250cm9sIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAcmV0dXJucyB7KFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKX0gLSBWYWxpZGF0aW9uIGVycm9ycyBpZiBhbnksIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxseyAgICBcbiAgICB0aGlzLmZvcm1Db250cm9sID0gY29udHJvbDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2UoZT86IGFueSk6IHZvaWR7XG4gICAgaWYgKCF0aGlzLmlzVG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICBpZiAoIWUpIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy5tdWx0aXBsZT8gZS52YWx1ZSA6IGUubWFwKChvOiBhbnkpID0+IG8udmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNoYW5nZWQodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZS5kYXRhKTtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSBnZXRGb3JtRXJyb3JNZXNzYWdlKHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzLCAnQ291bnRyeScpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRJc0xvYWRpbmcoYjogYm9vbGVhbik6IHZvaWR7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBiO1xuICAgIHRoaXMuY2gubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBbY2xhc3MucmVxdWlyZWRdPVwicmVxdWlyZWRcIj5Db3VudHJ5PC9sYWJlbD5cbjxuZy1zZWxlY3QgXG4gICAgY2xhc3M9XCJmbGV4LXNocmluay0wXCJcbiAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCJcbiAgICBbdmlydHVhbFNjcm9sbF09XCJ0cnVlXCJcbiAgICBbaXRlbXNdPVwiaXRlbXNcIlxuICAgIFtuZ01vZGVsXT1cInZhbHVlXCJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgIFtyZWFkb25seV09XCJkaXNhYmxlZFwiIFxuICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXG4gICAgW2NsZWFyYWJsZV09XCJjbGVhcmFibGVcIlxuICAgIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudCk7XCJcbi8+XG5AaWYgKGVycm9yTXNnKSB7XG4gICAgPGxhYmVsIGNsYXNzPVwiaXMtaW52YWxpZFwiPnt7IGVycm9yTXNnIH19PC9sYWJlbD5cbn1cblxuIl19