@wizishop/angular-components 15.1.112 → 18.2.0

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 (344) hide show
  1. package/README.md +87 -87
  2. package/angular-components.scss +1717 -1719
  3. package/assets/images/upload/icon_picture.svg +11 -11
  4. package/{esm2020 → esm2022}/lib/animations/in-out/in-out-x.animation.mjs +1 -1
  5. package/{esm2020 → esm2022}/lib/animations/in-out/in-out-y.animation.mjs +1 -1
  6. package/{esm2020 → esm2022}/lib/animations/list/animate-list-from-bottom.animation.mjs +1 -1
  7. package/{esm2020 → esm2022}/lib/animations/list/animate-list-from-left.animation.mjs +1 -1
  8. package/{esm2020 → esm2022}/lib/animations/list/animate-list-from-right.animation.mjs +1 -1
  9. package/{esm2020 → esm2022}/lib/animations/list/animate-list-from-top.animation.mjs +1 -1
  10. package/{esm2020 → esm2022}/lib/animations/show/show-from-bottom.animation.mjs +1 -1
  11. package/{esm2020 → esm2022}/lib/animations/show/show-from-left.animation.mjs +1 -1
  12. package/{esm2020 → esm2022}/lib/animations/show/show-from-right.animation.mjs +1 -1
  13. package/{esm2020 → esm2022}/lib/animations/show/show-from-top.animation.mjs +1 -1
  14. package/{esm2020 → esm2022}/lib/animations/switch/switch-in-out.animation.mjs +1 -1
  15. package/esm2022/lib/components/ai-express/ai-express.component.mjs +83 -0
  16. package/{esm2020 → esm2022}/lib/components/alert/alert.component.mjs +5 -5
  17. package/esm2022/lib/components/alert-popup/alert-popup-module.mjs +20 -0
  18. package/esm2022/lib/components/alert-popup/alert-popup.component.mjs +41 -0
  19. package/{esm2020 → esm2022}/lib/components/alert-popup/alert-popup.service.mjs +5 -5
  20. package/esm2022/lib/components/back/back.component.mjs +12 -0
  21. package/{esm2020 → esm2022}/lib/components/block/block-title-legacy/block-title-legacy.component.mjs +5 -5
  22. package/esm2022/lib/components/block/block.component.mjs +124 -0
  23. package/{esm2020 → esm2022}/lib/components/block/separator/block-separator.component.mjs +5 -5
  24. package/esm2022/lib/components/block-with-checkbox/block-with-checkbox.component.mjs +46 -0
  25. package/{esm2020 → esm2022}/lib/components/breadcrumbs/breadcrumbs.component.mjs +5 -5
  26. package/esm2022/lib/components/button/button.component.mjs +200 -0
  27. package/esm2022/lib/components/calendar/calendar.component.mjs +237 -0
  28. package/{esm2020 → esm2022}/lib/components/card-price/card-price.component.mjs +5 -5
  29. package/{esm2020 → esm2022}/lib/components/charging-bar/charging-bar.component.mjs +5 -5
  30. package/{esm2020 → esm2022}/lib/components/checkbox/checkbox.component.mjs +5 -5
  31. package/{esm2020 → esm2022}/lib/components/checkbox/checkbox.module.mjs +7 -7
  32. package/{esm2020 → esm2022}/lib/components/column/column.component.mjs +4 -4
  33. package/{esm2020 → esm2022}/lib/components/common/label/label.component.mjs +5 -5
  34. package/{esm2020 → esm2022}/lib/components/common/placeholder/placeholder.component.mjs +5 -5
  35. package/esm2022/lib/components/confirm-delete/confirm-delete.component.mjs +64 -0
  36. package/{esm2020 → esm2022}/lib/components/content-with-buttons/content-with-buttons.component.mjs +4 -4
  37. package/esm2022/lib/components/delete/delete.component.mjs +12 -0
  38. package/esm2022/lib/components/draganddrop-list/draganddrop-list.component.mjs +61 -0
  39. package/esm2022/lib/components/dropdown/dropdown.component.mjs +26 -0
  40. package/esm2022/lib/components/edit-in-place/edit-in-place.component.mjs +202 -0
  41. package/{esm2020 → esm2022}/lib/components/expanded-panel/expanded-panel.component.mjs +5 -5
  42. package/esm2022/lib/components/expansion/accordion/accordion.component.mjs +74 -0
  43. package/{esm2020 → esm2022}/lib/components/expansion/expansion-panel/expansion-panel.component.mjs +5 -5
  44. package/esm2022/lib/components/expansion/expansion-panel/expansion-panel.directive.mjs +88 -0
  45. package/{esm2020 → esm2022}/lib/components/expansion/expansion-panel-header/expansion-panel-header.component.mjs +5 -5
  46. package/esm2022/lib/components/expansion/expansion-panel-header/expansion-panel-header.directive.mjs +49 -0
  47. package/{esm2020 → esm2022}/lib/components/expansion/expansion.module.mjs +11 -11
  48. package/{esm2020 → esm2022}/lib/components/filters/filter-item.dto.mjs +1 -1
  49. package/esm2022/lib/components/filters/filters.component.mjs +41 -0
  50. package/esm2022/lib/components/free-popin/free-popin.component.mjs +66 -0
  51. package/{esm2020 → esm2022}/lib/components/google-preview/google-preview.component.mjs +5 -5
  52. package/esm2022/lib/components/header-page/header-page.component.mjs +42 -0
  53. package/{esm2020 → esm2022}/lib/components/hn/h1/h1.component.mjs +5 -5
  54. package/esm2022/lib/components/hn/h2/h2.component.mjs +13 -0
  55. package/esm2022/lib/components/hn/h3/h3.component.mjs +18 -0
  56. package/esm2022/lib/components/hn/h4/h4.component.mjs +18 -0
  57. package/esm2022/lib/components/image/image.component.mjs +17 -0
  58. package/esm2022/lib/components/info/info.component.mjs +12 -0
  59. package/esm2022/lib/components/inputs/input/input.component.mjs +184 -0
  60. package/esm2022/lib/components/inputs/input-search/input-search.component.mjs +65 -0
  61. package/{esm2020 → esm2022}/lib/components/inputs/input-with-select/input-with-select.component.mjs +4 -4
  62. package/esm2022/lib/components/link/link.component.mjs +57 -0
  63. package/{esm2020 → esm2022}/lib/components/loader/loader.component.mjs +4 -4
  64. package/esm2022/lib/components/logo/logo.component.mjs +20 -0
  65. package/esm2022/lib/components/mosaic/mosaic.component.mjs +81 -0
  66. package/esm2022/lib/components/multiple-search/multiple-search.component.mjs +115 -0
  67. package/esm2022/lib/components/multiple-search-plus/multiple-search-plus.component.mjs +97 -0
  68. package/{esm2020 → esm2022}/lib/components/multiple-search-plus/shared/multiple-search-plus-option.model.mjs +1 -1
  69. package/{esm2020 → esm2022}/lib/components/multiple-search-plus/shared/multiple-search-plus-results.model.mjs +1 -1
  70. package/{esm2020 → esm2022}/lib/components/optional-disable-container/optional-disable-container.component.mjs +5 -5
  71. package/esm2022/lib/components/pagination/pagination.component.mjs +50 -0
  72. package/esm2022/lib/components/pagination/pagination.module.mjs +33 -0
  73. package/esm2022/lib/components/pagination/pipes/array-pages.pipe.mjs +28 -0
  74. package/esm2022/lib/components/pagination/pipes/custom-text.pipe.mjs +34 -0
  75. package/esm2022/lib/components/pagination/pipes/is-last-page.pipe.mjs +25 -0
  76. package/esm2022/lib/components/popin/popin.component.mjs +73 -0
  77. package/esm2022/lib/components/progress-bar/progress-bar.component.mjs +75 -0
  78. package/{esm2020 → esm2022}/lib/components/radio/option/option.component.mjs +5 -5
  79. package/{esm2020 → esm2022}/lib/components/radio/radio-group.directive.mjs +8 -8
  80. package/esm2022/lib/components/radio/radio.component.mjs +38 -0
  81. package/{esm2020 → esm2022}/lib/components/radio-legacy/radio-directive.mjs +5 -5
  82. package/{esm2020 → esm2022}/lib/components/radio-legacy/radio-group.directive.mjs +8 -8
  83. package/esm2022/lib/components/radio-legacy/radio.component.mjs +58 -0
  84. package/esm2022/lib/components/row/row.component.mjs +144 -0
  85. package/esm2022/lib/components/search/search.component.mjs +86 -0
  86. package/{esm2020 → esm2022}/lib/components/search/shared/search-option.model.mjs +1 -1
  87. package/{esm2020 → esm2022}/lib/components/select/option/option.component.mjs +5 -5
  88. package/esm2022/lib/components/select/option/select-option.directive.mjs +98 -0
  89. package/{esm2020 → esm2022}/lib/components/select/option-call-to-action/option-call-to-action.component.mjs +5 -5
  90. package/esm2022/lib/components/select/select/select.component.mjs +198 -0
  91. package/esm2022/lib/components/select/select/select.directive.mjs +175 -0
  92. package/esm2022/lib/components/select/select/value-change.service.mjs +190 -0
  93. package/{esm2020 → esm2022}/lib/components/select/select-search-trigger/select-search-trigger.component.mjs +5 -5
  94. package/esm2022/lib/components/select-in-text/select-in-text.component.mjs +103 -0
  95. package/esm2022/lib/components/selected-list/selected-list.component.mjs +62 -0
  96. package/{esm2020 → esm2022}/lib/components/selected-list/shared/selected-list-option.model.mjs +1 -1
  97. package/esm2022/lib/components/separator/separator.component.mjs +17 -0
  98. package/esm2022/lib/components/settings/settings.component.mjs +12 -0
  99. package/esm2022/lib/components/shared-components.module.mjs +444 -0
  100. package/esm2022/lib/components/snackbar/snackbar.component.mjs +85 -0
  101. package/esm2022/lib/components/state/state.component.mjs +16 -0
  102. package/esm2022/lib/components/summary/summary.component.mjs +41 -0
  103. package/esm2022/lib/components/switch/switch.component.mjs +89 -0
  104. package/esm2022/lib/components/table/directives/checkBoxRow.directive.mjs +92 -0
  105. package/esm2022/lib/components/table/directives/column.directive.mjs +42 -0
  106. package/esm2022/lib/components/table/directives/columnHeader.directive.mjs +199 -0
  107. package/{esm2020 → esm2022}/lib/components/table/directives/raw.directive.mjs +6 -6
  108. package/esm2022/lib/components/table/shared/filters-table.service.mjs +68 -0
  109. package/esm2022/lib/components/table/shared/table-checkbox-id.service.mjs +20 -0
  110. package/{esm2020 → esm2022}/lib/components/table/shared/table-filters-group.model.mjs +1 -1
  111. package/{esm2020 → esm2022}/lib/components/table/shared/table-filters.model.mjs +1 -1
  112. package/esm2022/lib/components/table/table.component.mjs +146 -0
  113. package/{esm2020 → esm2022}/lib/components/table/table.module.mjs +15 -15
  114. package/{esm2020 → esm2022}/lib/components/tabs/tab/tab.component.mjs +5 -5
  115. package/{esm2020 → esm2022}/lib/components/tabs/tab-body/tab-body.component.mjs +4 -4
  116. package/{esm2020 → esm2022}/lib/components/tabs/tab-body/tab-body.directive.mjs +6 -6
  117. package/esm2022/lib/components/tabs/tabs.component.mjs +99 -0
  118. package/{esm2020 → esm2022}/lib/components/tag/tag.component.mjs +5 -5
  119. package/{esm2020 → esm2022}/lib/components/tag-dropdown/tag-dropdown.component.mjs +5 -5
  120. package/{esm2020 → esm2022}/lib/components/tag-label/tag-label.component.mjs +5 -5
  121. package/{esm2020 → esm2022}/lib/components/text/text.component.mjs +5 -5
  122. package/{esm2020 → esm2022}/lib/components/text-area/text-area.component.mjs +4 -4
  123. package/{esm2020 → esm2022}/lib/components/token-check/token-check.component.mjs +5 -5
  124. package/esm2022/lib/components/tooltip/tooltip.component.mjs +30 -0
  125. package/{esm2020 → esm2022}/lib/components/tooltip/tooltip.module.mjs +7 -7
  126. package/{esm2020 → esm2022}/lib/components/tree/tree.component.mjs +5 -5
  127. package/{esm2020 → esm2022}/lib/components/tree/tree.module.mjs +9 -9
  128. package/esm2022/lib/components/upload/upload.component.mjs +36 -0
  129. package/esm2022/lib/components/wrapper/wrapper.component.mjs +18 -0
  130. package/esm2022/lib/components/wrapper-blocs/wrapper-blocs.component.mjs +19 -0
  131. package/{esm2020 → esm2022}/lib/components/wrapper-multiple-block/wrapper-multiple-block.component.mjs +5 -5
  132. package/{esm2020 → esm2022}/lib/components/wrapper-sidebar/wrapper-sidebar.component.mjs +5 -5
  133. package/{esm2020 → esm2022}/lib/directives/abstract-debounce/abstract-debounce.directive.mjs +5 -5
  134. package/{esm2020 → esm2022}/lib/directives/abstract-debounce/debounce-keyup.directive.mjs +5 -5
  135. package/esm2022/lib/directives/auto-hide/auto-hide.directive.mjs +50 -0
  136. package/{esm2020 → esm2022}/lib/directives/copy-to-clipboard/copy-to-clipboard.directive.mjs +5 -5
  137. package/esm2022/lib/directives/keyboard-events/keypress-enter.directive.mjs +25 -0
  138. package/esm2022/lib/directives/keyboard-events/only-numbers.directive.mjs +45 -0
  139. package/esm2022/lib/directives/keyboard-events/two-digital-decimal-number.directive.mjs +36 -0
  140. package/esm2022/lib/directives/ng-var.directive.mjs +32 -0
  141. package/{esm2020 → esm2022}/lib/directives/scroll-to/scroll-to.directive.mjs +4 -4
  142. package/{esm2020 → esm2022}/lib/directives/shared-directives.module.mjs +27 -27
  143. package/{esm2020 → esm2022}/lib/directives/watch-dom-tree/watch-dom-tree.directive.mjs +5 -5
  144. package/esm2022/lib/directives/zindex-toggle/zindex-toggle.directive.mjs +44 -0
  145. package/{esm2020 → esm2022}/lib/pipes/call-component-function.pipe.mjs +4 -4
  146. package/esm2022/lib/pipes/find-option-selected-field.pipe.mjs +29 -0
  147. package/{esm2020 → esm2022}/lib/pipes/select/filter-options.pipe.mjs +4 -4
  148. package/{esm2020 → esm2022}/lib/pipes/select/select-filters.pipe.mjs +4 -4
  149. package/{esm2020 → esm2022}/lib/pipes/selected-list/are-all-options-selected.pipe.mjs +4 -4
  150. package/{esm2020 → esm2022}/lib/pipes/shared-pipes.module.mjs +13 -13
  151. package/esm2022/lib/pipes/tree/format-object-to-recursif-tree.pipe.mjs +41 -0
  152. package/esm2022/lib/pipes/tree/format-object-to-simple-tree.pipe.mjs +49 -0
  153. package/esm2022/lib/services/dom.service.mjs +59 -0
  154. package/esm2022/lib/services/history.service.mjs +53 -0
  155. package/esm2022/lib/services/multiple-selection.service.mjs +62 -0
  156. package/esm2022/lib/utils/html-container.class.mjs +30 -0
  157. package/{esm2020 → esm2022}/lib/utils/slection-item.interface.mjs +1 -1
  158. package/esm2022/lib/utils/uuid.mjs +8 -0
  159. package/esm2022/lib/wizi-components.module.mjs +34 -0
  160. package/{fesm2020 → fesm2022}/wizishop-angular-components.mjs +888 -884
  161. package/fesm2022/wizishop-angular-components.mjs.map +1 -0
  162. package/lib/components/ai-express/ai-express.component.d.ts +1 -1
  163. package/lib/components/alert/alert.component.d.ts +1 -1
  164. package/lib/components/block/block-title-legacy/block-title-legacy.component.d.ts +1 -1
  165. package/lib/components/block/block.component.d.ts +1 -1
  166. package/lib/components/block-with-checkbox/block-with-checkbox.component.d.ts +1 -1
  167. package/lib/components/breadcrumbs/breadcrumbs.component.d.ts +1 -1
  168. package/lib/components/button/button.component.d.ts +1 -1
  169. package/lib/components/calendar/calendar.component.d.ts +1 -1
  170. package/lib/components/card-price/card-price.component.d.ts +1 -1
  171. package/lib/components/charging-bar/charging-bar.component.d.ts +1 -1
  172. package/lib/components/checkbox/checkbox.component.d.ts +1 -1
  173. package/lib/components/confirm-delete/confirm-delete.component.d.ts +1 -1
  174. package/lib/components/content-with-buttons/content-with-buttons.component.d.ts +1 -1
  175. package/lib/components/draganddrop-list/draganddrop-list.component.d.ts +1 -1
  176. package/lib/components/dropdown/dropdown.component.d.ts +1 -1
  177. package/lib/components/edit-in-place/edit-in-place.component.d.ts +1 -1
  178. package/lib/components/expanded-panel/expanded-panel.component.d.ts +1 -1
  179. package/lib/components/expansion/accordion/accordion.component.d.ts +1 -1
  180. package/lib/components/expansion/expansion-panel/expansion-panel.directive.d.ts +1 -1
  181. package/lib/components/expansion/expansion-panel-header/expansion-panel-header.directive.d.ts +1 -1
  182. package/lib/components/filters/filters.component.d.ts +1 -1
  183. package/lib/components/free-popin/free-popin.component.d.ts +1 -1
  184. package/lib/components/google-preview/google-preview.component.d.ts +1 -1
  185. package/lib/components/header-page/header-page.component.d.ts +1 -1
  186. package/lib/components/hn/h1/h1.component.d.ts +1 -1
  187. package/lib/components/hn/h3/h3.component.d.ts +1 -1
  188. package/lib/components/hn/h4/h4.component.d.ts +1 -1
  189. package/lib/components/image/image.component.d.ts +1 -1
  190. package/lib/components/inputs/input/input.component.d.ts +1 -1
  191. package/lib/components/inputs/input-search/input-search.component.d.ts +1 -1
  192. package/lib/components/link/link.component.d.ts +1 -1
  193. package/lib/components/loader/loader.component.d.ts +1 -1
  194. package/lib/components/logo/logo.component.d.ts +1 -1
  195. package/lib/components/mosaic/mosaic.component.d.ts +1 -1
  196. package/lib/components/multiple-search/multiple-search.component.d.ts +1 -1
  197. package/lib/components/multiple-search-plus/multiple-search-plus.component.d.ts +1 -1
  198. package/lib/components/optional-disable-container/optional-disable-container.component.d.ts +1 -1
  199. package/lib/components/pagination/pagination.component.d.ts +1 -1
  200. package/lib/components/popin/popin.component.d.ts +1 -1
  201. package/lib/components/progress-bar/progress-bar.component.d.ts +1 -1
  202. package/lib/components/radio-legacy/radio.component.d.ts +1 -1
  203. package/lib/components/row/row.component.d.ts +1 -1
  204. package/lib/components/search/search.component.d.ts +1 -1
  205. package/lib/components/select/option/select-option.directive.d.ts +1 -1
  206. package/lib/components/select/select/select.component.d.ts +1 -1
  207. package/lib/components/select/select/select.directive.d.ts +1 -1
  208. package/lib/components/select/select-search-trigger/select-search-trigger.component.d.ts +1 -1
  209. package/lib/components/select-in-text/select-in-text.component.d.ts +1 -1
  210. package/lib/components/selected-list/selected-list.component.d.ts +1 -1
  211. package/lib/components/separator/separator.component.d.ts +1 -1
  212. package/lib/components/shared-components.module.d.ts +34 -35
  213. package/lib/components/snackbar/snackbar.component.d.ts +1 -1
  214. package/lib/components/state/state.component.d.ts +1 -1
  215. package/lib/components/summary/summary.component.d.ts +1 -1
  216. package/lib/components/switch/switch.component.d.ts +1 -1
  217. package/lib/components/table/directives/checkBoxRow.directive.d.ts +1 -1
  218. package/lib/components/table/directives/column.directive.d.ts +1 -1
  219. package/lib/components/table/directives/columnHeader.directive.d.ts +1 -1
  220. package/lib/components/table/table.component.d.ts +1 -1
  221. package/lib/components/tabs/tab/tab.component.d.ts +1 -1
  222. package/lib/components/tabs/tab-body/tab-body.component.d.ts +1 -1
  223. package/lib/components/tabs/tabs.component.d.ts +1 -1
  224. package/lib/components/tag/tag.component.d.ts +1 -1
  225. package/lib/components/tag-dropdown/tag-dropdown.component.d.ts +1 -1
  226. package/lib/components/tag-label/tag-label.component.d.ts +1 -1
  227. package/lib/components/text/text.component.d.ts +1 -1
  228. package/lib/components/text-area/text-area.component.d.ts +1 -1
  229. package/lib/components/token-check/token-check.component.d.ts +1 -1
  230. package/lib/components/tooltip/tooltip.component.d.ts +1 -1
  231. package/lib/components/tree/tree.component.d.ts +1 -1
  232. package/lib/components/upload/upload.component.d.ts +1 -1
  233. package/lib/components/wrapper/wrapper.component.d.ts +1 -1
  234. package/lib/components/wrapper-blocs/wrapper-blocs.component.d.ts +1 -1
  235. package/lib/components/wrapper-sidebar/wrapper-sidebar.component.d.ts +1 -1
  236. package/lib/directives/abstract-debounce/abstract-debounce.directive.d.ts +1 -1
  237. package/lib/directives/auto-hide/auto-hide.directive.d.ts +1 -1
  238. package/lib/directives/keyboard-events/only-numbers.directive.d.ts +1 -1
  239. package/lib/directives/keyboard-events/two-digital-decimal-number.directive.d.ts +1 -1
  240. package/lib/directives/ng-var.directive.d.ts +1 -1
  241. package/lib/directives/scroll-to/scroll-to.directive.d.ts +1 -1
  242. package/lib/directives/zindex-toggle/zindex-toggle.directive.d.ts +1 -1
  243. package/package.json +26 -32
  244. package/esm2020/lib/components/ai-express/ai-express.component.mjs +0 -83
  245. package/esm2020/lib/components/alert-popup/alert-popup-module.mjs +0 -21
  246. package/esm2020/lib/components/alert-popup/alert-popup.component.mjs +0 -41
  247. package/esm2020/lib/components/back/back.component.mjs +0 -12
  248. package/esm2020/lib/components/block/block.component.mjs +0 -124
  249. package/esm2020/lib/components/block-with-checkbox/block-with-checkbox.component.mjs +0 -46
  250. package/esm2020/lib/components/button/button.component.mjs +0 -200
  251. package/esm2020/lib/components/calendar/calendar.component.mjs +0 -237
  252. package/esm2020/lib/components/confirm-delete/confirm-delete.component.mjs +0 -64
  253. package/esm2020/lib/components/delete/delete.component.mjs +0 -12
  254. package/esm2020/lib/components/draganddrop-list/draganddrop-list.component.mjs +0 -61
  255. package/esm2020/lib/components/dropdown/dropdown.component.mjs +0 -26
  256. package/esm2020/lib/components/edit-in-place/edit-in-place.component.mjs +0 -202
  257. package/esm2020/lib/components/expansion/accordion/accordion.component.mjs +0 -74
  258. package/esm2020/lib/components/expansion/expansion-panel/expansion-panel.directive.mjs +0 -88
  259. package/esm2020/lib/components/expansion/expansion-panel-header/expansion-panel-header.directive.mjs +0 -49
  260. package/esm2020/lib/components/filters/filters.component.mjs +0 -41
  261. package/esm2020/lib/components/free-popin/free-popin.component.mjs +0 -66
  262. package/esm2020/lib/components/header-page/header-page.component.mjs +0 -42
  263. package/esm2020/lib/components/hn/h2/h2.component.mjs +0 -13
  264. package/esm2020/lib/components/hn/h3/h3.component.mjs +0 -18
  265. package/esm2020/lib/components/hn/h4/h4.component.mjs +0 -18
  266. package/esm2020/lib/components/image/image.component.mjs +0 -17
  267. package/esm2020/lib/components/info/info.component.mjs +0 -12
  268. package/esm2020/lib/components/inputs/input/input.component.mjs +0 -184
  269. package/esm2020/lib/components/inputs/input-search/input-search.component.mjs +0 -65
  270. package/esm2020/lib/components/link/link.component.mjs +0 -57
  271. package/esm2020/lib/components/logo/logo.component.mjs +0 -20
  272. package/esm2020/lib/components/mosaic/mosaic.component.mjs +0 -81
  273. package/esm2020/lib/components/multiple-search/multiple-search.component.mjs +0 -115
  274. package/esm2020/lib/components/multiple-search-plus/multiple-search-plus.component.mjs +0 -97
  275. package/esm2020/lib/components/pagination/pagination.component.mjs +0 -50
  276. package/esm2020/lib/components/pagination/pagination.module.mjs +0 -33
  277. package/esm2020/lib/components/pagination/pipes/array-pages.pipe.mjs +0 -28
  278. package/esm2020/lib/components/pagination/pipes/custom-text.pipe.mjs +0 -34
  279. package/esm2020/lib/components/pagination/pipes/is-last-page.pipe.mjs +0 -25
  280. package/esm2020/lib/components/popin/popin.component.mjs +0 -73
  281. package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +0 -75
  282. package/esm2020/lib/components/radio/radio.component.mjs +0 -38
  283. package/esm2020/lib/components/radio-legacy/radio.component.mjs +0 -58
  284. package/esm2020/lib/components/row/row.component.mjs +0 -144
  285. package/esm2020/lib/components/search/search.component.mjs +0 -86
  286. package/esm2020/lib/components/select/option/select-option.directive.mjs +0 -98
  287. package/esm2020/lib/components/select/select/select.component.mjs +0 -198
  288. package/esm2020/lib/components/select/select/select.directive.mjs +0 -175
  289. package/esm2020/lib/components/select/select/value-change.service.mjs +0 -190
  290. package/esm2020/lib/components/select-in-text/select-in-text.component.mjs +0 -103
  291. package/esm2020/lib/components/selected-list/selected-list.component.mjs +0 -62
  292. package/esm2020/lib/components/separator/separator.component.mjs +0 -17
  293. package/esm2020/lib/components/settings/settings.component.mjs +0 -12
  294. package/esm2020/lib/components/shared-components.module.mjs +0 -438
  295. package/esm2020/lib/components/snackbar/snackbar.component.mjs +0 -85
  296. package/esm2020/lib/components/state/state.component.mjs +0 -16
  297. package/esm2020/lib/components/summary/summary.component.mjs +0 -41
  298. package/esm2020/lib/components/switch/switch.component.mjs +0 -89
  299. package/esm2020/lib/components/table/directives/checkBoxRow.directive.mjs +0 -92
  300. package/esm2020/lib/components/table/directives/column.directive.mjs +0 -42
  301. package/esm2020/lib/components/table/directives/columnHeader.directive.mjs +0 -199
  302. package/esm2020/lib/components/table/shared/filters-table.service.mjs +0 -68
  303. package/esm2020/lib/components/table/shared/table-checkbox-id.service.mjs +0 -20
  304. package/esm2020/lib/components/table/table.component.mjs +0 -146
  305. package/esm2020/lib/components/tabs/tabs.component.mjs +0 -99
  306. package/esm2020/lib/components/tooltip/tooltip.component.mjs +0 -30
  307. package/esm2020/lib/components/upload/upload.component.mjs +0 -36
  308. package/esm2020/lib/components/wrapper/wrapper.component.mjs +0 -18
  309. package/esm2020/lib/components/wrapper-blocs/wrapper-blocs.component.mjs +0 -19
  310. package/esm2020/lib/directives/auto-hide/auto-hide.directive.mjs +0 -50
  311. package/esm2020/lib/directives/keyboard-events/keypress-enter.directive.mjs +0 -25
  312. package/esm2020/lib/directives/keyboard-events/only-numbers.directive.mjs +0 -45
  313. package/esm2020/lib/directives/keyboard-events/two-digital-decimal-number.directive.mjs +0 -36
  314. package/esm2020/lib/directives/ng-var.directive.mjs +0 -32
  315. package/esm2020/lib/directives/zindex-toggle/zindex-toggle.directive.mjs +0 -44
  316. package/esm2020/lib/pipes/find-option-selected-field.pipe.mjs +0 -29
  317. package/esm2020/lib/pipes/tree/format-object-to-recursif-tree.pipe.mjs +0 -41
  318. package/esm2020/lib/pipes/tree/format-object-to-simple-tree.pipe.mjs +0 -49
  319. package/esm2020/lib/services/dom.service.mjs +0 -59
  320. package/esm2020/lib/services/history.service.mjs +0 -53
  321. package/esm2020/lib/services/multiple-selection.service.mjs +0 -62
  322. package/esm2020/lib/utils/html-container.class.mjs +0 -30
  323. package/esm2020/lib/utils/uuid.mjs +0 -8
  324. package/esm2020/lib/wizi-components.module.mjs +0 -34
  325. package/fesm2015/wizishop-angular-components.mjs +0 -7023
  326. package/fesm2015/wizishop-angular-components.mjs.map +0 -1
  327. package/fesm2020/wizishop-angular-components.mjs.map +0 -1
  328. package/wizishop-angular-components-15.1.112.tgz +0 -0
  329. /package/{esm2020 → esm2022}/lib/animations/show/opacity.animation.mjs +0 -0
  330. /package/{esm2020 → esm2022}/lib/components/breadcrumbs/breadcrumbs.dto.mjs +0 -0
  331. /package/{esm2020 → esm2022}/lib/components/expansion/accordion/accordion-item.interface.mjs +0 -0
  332. /package/{esm2020 → esm2022}/lib/components/expansion/accordion/accordion-item.token.mjs +0 -0
  333. /package/{esm2020 → esm2022}/lib/components/expansion/expansion-panel-header/expansion-panel-header.interface.mjs +0 -0
  334. /package/{esm2020 → esm2022}/lib/components/expansion/expansion-panel-header/expansion-panel-header.token.mjs +0 -0
  335. /package/{esm2020 → esm2022}/lib/components/inputs/input-with-select/option-item.dto.mjs +0 -0
  336. /package/{esm2020 → esm2022}/lib/components/select/call-to-action.model.mjs +0 -0
  337. /package/{esm2020 → esm2022}/lib/components/select/option/option-selection-handler.interface.mjs +0 -0
  338. /package/{esm2020 → esm2022}/lib/components/select/option/option-selection-handler.token.mjs +0 -0
  339. /package/{esm2020 → esm2022}/lib/components/select/select-items.dto.mjs +0 -0
  340. /package/{esm2020 → esm2022}/lib/components/table/shared/distinct-until-table-filters-changed.mjs +0 -0
  341. /package/{esm2020 → esm2022}/lib/components/tree/tree.dto.mjs +0 -0
  342. /package/{esm2020 → esm2022}/lib/utils/array.mjs +0 -0
  343. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  344. /package/{esm2020 → esm2022}/wizishop-angular-components.mjs +0 -0
@@ -1,198 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostBinding, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { filter, takeUntil } from 'rxjs/operators';
4
- import { ValueChangeService } from './value-change.service';
5
- import { Subject } from 'rxjs';
6
- import { SelectSearchTriggerComponent } from '../select-search-trigger/select-search-trigger.component';
7
- import { DOWN_ARROW, ENTER, ESCAPE, hasModifierKey, LEFT_ARROW, RIGHT_ARROW, TAB, UP_ARROW, } from '@angular/cdk/keycodes';
8
- import { LabelComponent } from '../../common/label/label.component';
9
- import { SelectDirective } from './select.directive';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "./value-change.service";
12
- import * as i2 from "@angular/common";
13
- import * as i3 from "../../../directives/auto-hide/auto-hide.directive";
14
- import * as i4 from "../../../directives/zindex-toggle/zindex-toggle.directive";
15
- import * as i5 from "ngx-perfect-scrollbar";
16
- import * as i6 from "@ngx-translate/core";
17
- export class SelectComponent extends SelectDirective {
18
- /** Whether the component is required. */
19
- get required() {
20
- return this._required ?? false;
21
- }
22
- set required(value) {
23
- this._required = value;
24
- }
25
- get selectedOptionContent() {
26
- return this.valueChangeService.selectedOptionContent;
27
- }
28
- ;
29
- set keepPanelOpen(keepPanelOpen) {
30
- this.openPanel = keepPanelOpen;
31
- this._keepPanelOpen = keepPanelOpen;
32
- }
33
- get keepPanelOpen() {
34
- return this._keepPanelOpen;
35
- }
36
- set openPanel(openPanel) {
37
- const wasOpen = this._openPanel;
38
- this._openPanel = this.keepPanelOpen || openPanel;
39
- if (openPanel) {
40
- this.customSearchTrigger?.setFocus();
41
- }
42
- if (wasOpen) {
43
- this.onSelectTouch(this.value);
44
- }
45
- }
46
- get openPanel() {
47
- return this._openPanel;
48
- }
49
- constructor(valueChangeService) {
50
- super(valueChangeService);
51
- this.valueChangeService = valueChangeService;
52
- //! Refacto improve sroll on mobile, see with Pauline
53
- // angular material select https://github.com/angular/components/blob/main/src/material/select/select.ts
54
- this.role = 'combobox';
55
- this.small = false;
56
- this._openPanel = false;
57
- this.openPanelChange = new EventEmitter();
58
- this.tabIndex = -1;
59
- this._searchByTyping = true;
60
- this.isDestroyed$ = new Subject();
61
- this.isKeyBoardAction = false;
62
- this.skipIfTriggeredByKeyboardAction = () => {
63
- if (!this.isKeyBoardAction) {
64
- return true;
65
- }
66
- this.isKeyBoardAction = false;
67
- return false;
68
- };
69
- this.onSelectTouch = () => { };
70
- }
71
- ngOnInit() {
72
- super.ngOnInit();
73
- this.closeTabOnValueChange();
74
- }
75
- closeTabOnValueChange() {
76
- this.valueChangeService.valueChange$.pipe(takeUntil(this.isDestroyed$), filter(this.skipIfTriggeredByKeyboardAction)).subscribe(() => {
77
- this.onClosePanel();
78
- });
79
- }
80
- onTogglePanel() {
81
- this.openPanel = !this.openPanel;
82
- this.openPanelChange.emit(this.openPanel);
83
- }
84
- onClosePanel() {
85
- this.openPanel = false;
86
- this.openPanelChange.emit(this.openPanel);
87
- }
88
- onKeydown(event) {
89
- const keyCode = event.keyCode;
90
- if (event.keyCode === TAB) {
91
- // go to the next element with tabindex
92
- if (this.openPanel) {
93
- this.openPanel = false;
94
- }
95
- return;
96
- }
97
- if (this.disabled) {
98
- return;
99
- }
100
- const actionTriggered = this.openPanel ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);
101
- if (actionTriggered) {
102
- return;
103
- }
104
- this.isKeyBoardAction = true;
105
- super.onKeydown(event);
106
- }
107
- handleKeyboardActionWithSearch(event) {
108
- const keyCode = event.keyCode;
109
- if (keyCode === DOWN_ARROW) {
110
- this.isKeyBoardAction = true;
111
- this.valueChangeService.selectNextOption();
112
- return true;
113
- }
114
- if (keyCode === UP_ARROW) {
115
- this.isKeyBoardAction = true;
116
- this.valueChangeService.selectPreviousOption();
117
- return true;
118
- }
119
- return false;
120
- }
121
- /** Handles keyboard events while the select is closed. */
122
- _handleClosedKeydown(event) {
123
- const keyCode = event.keyCode;
124
- const isArrowKey = keyCode === DOWN_ARROW ||
125
- keyCode === UP_ARROW ||
126
- keyCode === LEFT_ARROW ||
127
- keyCode === RIGHT_ARROW;
128
- const isOpenKey = keyCode === ENTER;
129
- // Open the select on ALT + arrow key to match the native <select>
130
- if ((isOpenKey && !hasModifierKey(event)) ||
131
- (event.altKey && isArrowKey)) {
132
- this.openPanel = true;
133
- return true;
134
- }
135
- return false;
136
- }
137
- /** Handles keyboard events when the selected is open. */
138
- _handleOpenKeydown(event) {
139
- const keyCode = event.keyCode;
140
- const isArrowKey = keyCode === DOWN_ARROW ||
141
- keyCode === UP_ARROW ||
142
- keyCode === LEFT_ARROW ||
143
- keyCode === RIGHT_ARROW;
144
- const isEscapeKey = keyCode === ESCAPE || keyCode === ENTER || keyCode === TAB;
145
- if ((isArrowKey && event.altKey) || isEscapeKey) {
146
- // Close the select on ALT + arrow key to match the native <select>
147
- this.openPanel = false;
148
- if (this.customSearchTrigger && keyCode !== TAB) {
149
- // If a escape key is used with the search, the focus on the select is loosed. And we can not interact with the select anymore.
150
- this.selectHeader.nativeElement.focus();
151
- }
152
- return true;
153
- }
154
- return false;
155
- }
156
- registerOnTouched(fn) {
157
- this.onSelectTouch = fn;
158
- }
159
- ngOnDestroy() {
160
- this.isDestroyed$.next();
161
- this.isDestroyed$.complete();
162
- }
163
- }
164
- SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: SelectComponent, deps: [{ token: i1.ValueChangeService }], target: i0.ɵɵFactoryTarget.Component });
165
- SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: SelectComponent, selector: "wac-select", inputs: { required: "required", small: "small", keepPanelOpen: "keepPanelOpen", openPanel: "openPanel" }, outputs: { openPanelChange: "openPanelChange" }, host: { properties: { "attr.role": "this.role" } }, providers: [
166
- { provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true },
167
- ValueChangeService
168
- ], queries: [{ propertyName: "customSearchTrigger", first: true, predicate: SelectSearchTriggerComponent, descendants: true }, { propertyName: "label", first: true, predicate: LabelComponent, descendants: true }], viewQueries: [{ propertyName: "selectHeader", first: true, predicate: ["selectHeader"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p *ngIf=\"!!label\" class=\"wac-select__label\">\r\n <ng-content select=\"wac-label, .wac-label\" ></ng-content>\r\n</p>\r\n\r\n<div\r\n class=\"wac-select\"\r\n wzAutoHide\r\n (clickOutside)=\"onClosePanel()\"\r\n [triggerElement]=\"'wac-select__header__selection'\"\r\n [zIndexToggle]=\"openPanel\"\r\n [ngClass]=\"{'small': small}\"\r\n >\r\n\r\n <div #selectHeader class=\"wac-select__header\" [ngClass]=\"{ 'select-disabled' : disabled }\" (click)=\"!disabled && onTogglePanel()\" tabindex=\"0\">\r\n\r\n <ng-container [ngTemplateOutlet]=\"openPanel ? openPanelTrigger : closePanelTrigger\" >\r\n\r\n <ng-template #closePanelTrigger>\r\n <ng-container [ngTemplateOutlet]=\"defaultTrigger\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #openPanelTrigger>\r\n <ng-content *ngIf=\"!!customSearchTrigger; else defaultTrigger\" select=\"wac-select-search-trigger\" ></ng-content>\r\n </ng-template>\r\n\r\n <ng-template #defaultTrigger>\r\n <ng-content *ngIf=\"!selectedOptionContent\" select=\"wac-placeholder,[role=placeholder]\"></ng-content>\r\n <div\r\n class=\"wac-select__header__selection wac-option__placeholder\"\r\n *ngIf=\"!!selectedOptionContent\"\r\n [innerHtml]=\"selectedOptionContent\">\r\n </div>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <span class=\"wac-select__header__chevron\"><i class=\"fas fa-chevron-down\"></i></span>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"wac-select__content\" *ngIf=\"!disabled\" [ngClass]=\"{ hidden: !openPanel, open: openPanel }\">\r\n\r\n <perfect-scrollbar [config]=\"{ suppressScrollX: true }\">\r\n <ng-content\r\n select=\"wac-option-call-to-action, wac-option, option, .option, [selectOption]\">\r\n </ng-content>\r\n </perfect-scrollbar>\r\n\r\n <div *ngIf=\"!optionChildren?.length\" class=\"wac-select__content__empty\">\r\n <span>{{'wac.datatable.noresult' | translate}}</span>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }, { kind: "directive", type: i4.ZindexToggleDirective, selector: "[zIndexToggle]", inputs: ["zIndexToggle"], outputs: ["onEventChange"] }, { kind: "component", type: i5.PerfectScrollbarComponent, selector: "perfect-scrollbar", inputs: ["disabled", "usePSClass", "autoPropagation", "scrollIndicators", "config"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: SelectComponent, decorators: [{
170
- type: Component,
171
- args: [{ selector: 'wac-select', providers: [
172
- { provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true },
173
- ValueChangeService
174
- ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: "<p *ngIf=\"!!label\" class=\"wac-select__label\">\r\n <ng-content select=\"wac-label, .wac-label\" ></ng-content>\r\n</p>\r\n\r\n<div\r\n class=\"wac-select\"\r\n wzAutoHide\r\n (clickOutside)=\"onClosePanel()\"\r\n [triggerElement]=\"'wac-select__header__selection'\"\r\n [zIndexToggle]=\"openPanel\"\r\n [ngClass]=\"{'small': small}\"\r\n >\r\n\r\n <div #selectHeader class=\"wac-select__header\" [ngClass]=\"{ 'select-disabled' : disabled }\" (click)=\"!disabled && onTogglePanel()\" tabindex=\"0\">\r\n\r\n <ng-container [ngTemplateOutlet]=\"openPanel ? openPanelTrigger : closePanelTrigger\" >\r\n\r\n <ng-template #closePanelTrigger>\r\n <ng-container [ngTemplateOutlet]=\"defaultTrigger\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template #openPanelTrigger>\r\n <ng-content *ngIf=\"!!customSearchTrigger; else defaultTrigger\" select=\"wac-select-search-trigger\" ></ng-content>\r\n </ng-template>\r\n\r\n <ng-template #defaultTrigger>\r\n <ng-content *ngIf=\"!selectedOptionContent\" select=\"wac-placeholder,[role=placeholder]\"></ng-content>\r\n <div\r\n class=\"wac-select__header__selection wac-option__placeholder\"\r\n *ngIf=\"!!selectedOptionContent\"\r\n [innerHtml]=\"selectedOptionContent\">\r\n </div>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <span class=\"wac-select__header__chevron\"><i class=\"fas fa-chevron-down\"></i></span>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"wac-select__content\" *ngIf=\"!disabled\" [ngClass]=\"{ hidden: !openPanel, open: openPanel }\">\r\n\r\n <perfect-scrollbar [config]=\"{ suppressScrollX: true }\">\r\n <ng-content\r\n select=\"wac-option-call-to-action, wac-option, option, .option, [selectOption]\">\r\n </ng-content>\r\n </perfect-scrollbar>\r\n\r\n <div *ngIf=\"!optionChildren?.length\" class=\"wac-select__content__empty\">\r\n <span>{{'wac.datatable.noresult' | translate}}</span>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n" }]
175
- }], ctorParameters: function () { return [{ type: i1.ValueChangeService }]; }, propDecorators: { role: [{
176
- type: HostBinding,
177
- args: ['attr.role']
178
- }], customSearchTrigger: [{
179
- type: ContentChild,
180
- args: [SelectSearchTriggerComponent]
181
- }], label: [{
182
- type: ContentChild,
183
- args: [LabelComponent]
184
- }], selectHeader: [{
185
- type: ViewChild,
186
- args: ['selectHeader']
187
- }], required: [{
188
- type: Input
189
- }], small: [{
190
- type: Input
191
- }], keepPanelOpen: [{
192
- type: Input
193
- }], openPanel: [{
194
- type: Input
195
- }], openPanelChange: [{
196
- type: Output
197
- }] } });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2TCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDeEcsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLGNBQWMsRUFDZCxVQUFVLEVBQ1YsV0FBVyxFQUNYLEdBQUcsRUFDSCxRQUFRLEdBQ1QsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7OztBQWFyRCxNQUFNLE9BQU8sZUFBOEIsU0FBUSxlQUE2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c0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVmFsdWVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi92YWx1ZS1jaGFuZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2VsZWN0U2VhcmNoVHJpZ2dlckNvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1zZWFyY2gtdHJpZ2dlci9zZWxlY3Qtc2VhcmNoLXRyaWdnZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBET1dOX0FSUk9XLFxyXG4gIEVOVEVSLFxyXG4gIEVTQ0FQRSxcclxuICBoYXNNb2RpZmllcktleSxcclxuICBMRUZUX0FSUk9XLFxyXG4gIFJJR0hUX0FSUk9XLFxyXG4gIFRBQixcclxuICBVUF9BUlJPVyxcclxufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9sYWJlbC9sYWJlbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3REaXJlY3RpdmUgfSBmcm9tICcuL3NlbGVjdC5kaXJlY3RpdmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd2FjLXNlbGVjdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogU2VsZWN0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxyXG4gICAgVmFsdWVDaGFuZ2VTZXJ2aWNlXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbXBvbmVudDxUT3B0aW9uVmFsdWU+IGV4dGVuZHMgU2VsZWN0RGlyZWN0aXZlPFRPcHRpb25WYWx1ZT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8hIFJlZmFjdG8gaW1wcm92ZSBzcm9sbCBvbiBtb2JpbGUsIHNlZSB3aXRoIFBhdWxpbmVcclxuICAvLyBhbmd1bGFyIG1hdGVyaWFsIHNlbGVjdCBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2Jsb2IvbWFpbi9zcmMvbWF0ZXJpYWwvc2VsZWN0L3NlbGVjdC50c1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHJvbGUgPSAnY29tYm9ib3gnO1xyXG5cclxuICBAQ29udGVudENoaWxkKFNlbGVjdFNlYXJjaFRyaWdnZXJDb21wb25lbnQpIGN1c3RvbVNlYXJjaFRyaWdnZXI6IFNlbGVjdFNlYXJjaFRyaWdnZXJDb21wb25lbnQ7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoTGFiZWxDb21wb25lbnQpIGxhYmVsOiBMYWJlbENvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0SGVhZGVyJykgc2VsZWN0SGVhZGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIHJlcXVpcmVkLiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGdldCBzZWxlY3RlZE9wdGlvbkNvbnRlbnQoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWxlY3RlZE9wdGlvbkNvbnRlbnQ7XHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgc21hbGwgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQga2VlcFBhbmVsT3BlbihrZWVwUGFuZWxPcGVuOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm9wZW5QYW5lbCA9IGtlZXBQYW5lbE9wZW47XHJcbiAgICB0aGlzLl9rZWVwUGFuZWxPcGVuID0ga2VlcFBhbmVsT3BlbjtcclxuICB9XHJcblxyXG4gIGdldCBrZWVwUGFuZWxPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2tlZXBQYW5lbE9wZW4gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfa2VlcFBhbmVsT3BlbjogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgb3BlblBhbmVsKG9wZW5QYW5lbDogYm9vbGVhbikge1xyXG4gICAgY29uc3Qgd2FzT3BlbiA9IHRoaXMuX29wZW5QYW5lbDtcclxuICAgIHRoaXMuX29wZW5QYW5lbCA9IHRoaXMua2VlcFBhbmVsT3BlbiB8fCBvcGVuUGFuZWw7XHJcblxyXG4gICAgaWYgKG9wZW5QYW5lbCkge1xyXG4gICAgICB0aGlzLmN1c3RvbVNlYXJjaFRyaWdnZXI/LnNldEZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdhc09wZW4pIHtcclxuICAgICAgdGhpcy5vblNlbGVjdFRvdWNoKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG9wZW5QYW5lbCgpIDogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3BlblBhbmVsO1xyXG4gIH1cclxuICBfb3BlblBhbmVsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBvcGVuUGFuZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIG92ZXJyaWRlIHRhYkluZGV4OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgb3ZlcnJpZGUgX3NlYXJjaEJ5VHlwaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaXNEZXN0cm95ZWQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBpc0tleUJvYXJkQWN0aW9uID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHZhbHVlQ2hhbmdlU2VydmljZTogVmFsdWVDaGFuZ2VTZXJ2aWNlPFRPcHRpb25WYWx1ZT4sXHJcbiAgICApIHtcclxuICAgICAgc3VwZXIodmFsdWVDaGFuZ2VTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5jbG9zZVRhYk9uVmFsdWVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VUYWJPblZhbHVlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZVNlcnZpY2UudmFsdWVDaGFuZ2UkLnBpcGUodGFrZVVudGlsKHRoaXMuaXNEZXN0cm95ZWQkKSwgZmlsdGVyKHRoaXMuc2tpcElmVHJpZ2dlcmVkQnlLZXlib2FyZEFjdGlvbikpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMub25DbG9zZVBhbmVsKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2tpcElmVHJpZ2dlcmVkQnlLZXlib2FyZEFjdGlvbiA9ICgpID0+IHtcclxuICAgIGlmKCF0aGlzLmlzS2V5Qm9hcmRBY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzS2V5Qm9hcmRBY3Rpb24gPSBmYWxzZTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uVG9nZ2xlUGFuZWwoKSB7XHJcbiAgICB0aGlzLm9wZW5QYW5lbCA9ICF0aGlzLm9wZW5QYW5lbDtcclxuICAgIHRoaXMub3BlblBhbmVsQ2hhbmdlLmVtaXQodGhpcy5vcGVuUGFuZWwpO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZVBhbmVsKCkge1xyXG4gICAgdGhpcy5vcGVuUGFuZWwgPSBmYWxzZTtcclxuICAgIHRoaXMub3BlblBhbmVsQ2hhbmdlLmVtaXQodGhpcy5vcGVuUGFuZWwpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBUQUIpIHtcclxuICAgICAgLy8gZ28gdG8gdGhlIG5leHQgZWxlbWVudCB3aXRoIHRhYmluZGV4XHJcbiAgICAgIGlmICh0aGlzLm9wZW5QYW5lbCkge1xyXG4gICAgICAgIHRoaXMub3BlblBhbmVsID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFjdGlvblRyaWdnZXJlZCA9IHRoaXMub3BlblBhbmVsID8gdGhpcy5faGFuZGxlT3BlbktleWRvd24oZXZlbnQpIDogdGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihldmVudCk7XHJcblxyXG4gICAgaWYgKGFjdGlvblRyaWdnZXJlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzS2V5Qm9hcmRBY3Rpb24gPSB0cnVlO1xyXG4gICAgc3VwZXIub25LZXlkb3duKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUtleWJvYXJkQWN0aW9uV2l0aFNlYXJjaChldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IERPV05fQVJST1cpIHtcclxuICAgICAgdGhpcy5pc0tleUJvYXJkQWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZVNlcnZpY2Uuc2VsZWN0TmV4dE9wdGlvbigpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChrZXlDb2RlID09PSBVUF9BUlJPVykge1xyXG4gICAgICB0aGlzLmlzS2V5Qm9hcmRBY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWxlY3RQcmV2aW91c09wdGlvbigpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyB3aGlsZSB0aGUgc2VsZWN0IGlzIGNsb3NlZC4gKi9cclxuICBwcml2YXRlIF9oYW5kbGVDbG9zZWRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcclxuICAgIGNvbnN0IGlzQXJyb3dLZXkgPVxyXG4gICAgICBrZXlDb2RlID09PSBET1dOX0FSUk9XIHx8XHJcbiAgICAgIGtleUNvZGUgPT09IFVQX0FSUk9XIHx8XHJcbiAgICAgIGtleUNvZGUgPT09IExFRlRfQVJST1cgfHxcclxuICAgICAga2V5Q29kZSA9PT0gUklHSFRfQVJST1c7XHJcbiAgICBjb25zdCBpc09wZW5LZXkgPSBrZXlDb2RlID09PSBFTlRFUjtcclxuICAgIC8vIE9wZW4gdGhlIHNlbGVjdCBvbiBBTFQgKyBhcnJvdyBrZXkgdG8gbWF0Y2ggdGhlIG5hdGl2ZSA8c2VsZWN0PlxyXG4gICAgaWYgKFxyXG4gICAgICAoaXNPcGVuS2V5ICYmICFoYXNNb2RpZmllcktleShldmVudCkpIHx8XHJcbiAgICAgIChldmVudC5hbHRLZXkgJiYgaXNBcnJvd0tleSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLm9wZW5QYW5lbCA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyB3aGVuIHRoZSBzZWxlY3RlZCBpcyBvcGVuLiAqL1xyXG4gIHByaXZhdGUgX2hhbmRsZU9wZW5LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcclxuICAgIGNvbnN0IGlzQXJyb3dLZXkgPVxyXG4gICAgICBrZXlDb2RlID09PSBET1dOX0FSUk9XIHx8XHJcbiAgICAgIGtleUNvZGUgPT09IFVQX0FSUk9XIHx8XHJcbiAgICAgIGtleUNvZGUgPT09IExFRlRfQVJST1cgfHxcclxuICAgICAga2V5Q29kZSA9PT0gUklHSFRfQVJST1c7XHJcbiAgICBjb25zdCBpc0VzY2FwZUtleSA9IGtleUNvZGUgPT09IEVTQ0FQRSB8fCBrZXlDb2RlID09PSBFTlRFUiB8fCBrZXlDb2RlID09PSBUQUI7XHJcblxyXG4gICAgaWYgKChpc0Fycm93S2V5ICYmIGV2ZW50LmFsdEtleSkgfHwgaXNFc2NhcGVLZXkpIHtcclxuICAgICAgLy8gQ2xvc2UgdGhlIHNlbGVjdCBvbiBBTFQgKyBhcnJvdyBrZXkgdG8gbWF0Y2ggdGhlIG5hdGl2ZSA8c2VsZWN0PlxyXG4gICAgICB0aGlzLm9wZW5QYW5lbCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VhcmNoVHJpZ2dlciAmJiBrZXlDb2RlICE9PSBUQUIpIHtcclxuICAgICAgICAvLyBJZiBhIGVzY2FwZSBrZXkgaXMgdXNlZCB3aXRoIHRoZSBzZWFyY2gsIHRoZSBmb2N1cyBvbiB0aGUgc2VsZWN0IGlzIGxvb3NlZC4gQW5kIHdlIGNhbiBub3QgaW50ZXJhY3Qgd2l0aCB0aGUgc2VsZWN0IGFueW1vcmUuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RIZWFkZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0VG91Y2g6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gIG92ZXJyaWRlIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpe1xyXG4gICAgdGhpcy5vblNlbGVjdFRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuaXNEZXN0cm95ZWQkLm5leHQoKTtcclxuICAgIHRoaXMuaXNEZXN0cm95ZWQkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxwICpuZ0lmPVwiISFsYWJlbFwiIGNsYXNzPVwid2FjLXNlbGVjdF9fbGFiZWxcIj5cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCJ3YWMtbGFiZWwsIC53YWMtbGFiZWxcIiA+PC9uZy1jb250ZW50PlxyXG48L3A+XHJcblxyXG48ZGl2XHJcbiAgY2xhc3M9XCJ3YWMtc2VsZWN0XCJcclxuICB3ekF1dG9IaWRlXHJcbiAgKGNsaWNrT3V0c2lkZSk9XCJvbkNsb3NlUGFuZWwoKVwiXHJcbiAgW3RyaWdnZXJFbGVtZW50XT1cIid3YWMtc2VsZWN0X19oZWFkZXJfX3NlbGVjdGlvbidcIlxyXG4gIFt6SW5kZXhUb2dnbGVdPVwib3BlblBhbmVsXCJcclxuICBbbmdDbGFzc109XCJ7J3NtYWxsJzogc21hbGx9XCJcclxuICA+XHJcblxyXG4gICAgPGRpdiAjc2VsZWN0SGVhZGVyIGNsYXNzPVwid2FjLXNlbGVjdF9faGVhZGVyXCIgW25nQ2xhc3NdPVwieyAnc2VsZWN0LWRpc2FibGVkJyA6IGRpc2FibGVkIH1cIiAoY2xpY2spPVwiIWRpc2FibGVkICYmIG9uVG9nZ2xlUGFuZWwoKVwiIHRhYmluZGV4PVwiMFwiPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJvcGVuUGFuZWwgPyBvcGVuUGFuZWxUcmlnZ2VyIDogY2xvc2VQYW5lbFRyaWdnZXJcIiA+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY2xvc2VQYW5lbFRyaWdnZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRlZmF1bHRUcmlnZ2VyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNvcGVuUGFuZWxUcmlnZ2VyPlxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhIWN1c3RvbVNlYXJjaFRyaWdnZXI7IGVsc2UgZGVmYXVsdFRyaWdnZXJcIiBzZWxlY3Q9XCJ3YWMtc2VsZWN0LXNlYXJjaC10cmlnZ2VyXCIgPjwvbmctY29udGVudD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUcmlnZ2VyPlxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhc2VsZWN0ZWRPcHRpb25Db250ZW50XCIgc2VsZWN0PVwid2FjLXBsYWNlaG9sZGVyLFtyb2xlPXBsYWNlaG9sZGVyXVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJ3YWMtc2VsZWN0X19oZWFkZXJfX3NlbGVjdGlvbiB3YWMtb3B0aW9uX19wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiISFzZWxlY3RlZE9wdGlvbkNvbnRlbnRcIlxyXG4gICAgICAgICAgICBbaW5uZXJIdG1sXT1cInNlbGVjdGVkT3B0aW9uQ29udGVudFwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ3YWMtc2VsZWN0X19oZWFkZXJfX2NoZXZyb25cIj48aSBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLWRvd25cIj48L2k+PC9zcGFuPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwid2FjLXNlbGVjdF9fY29udGVudFwiICpuZ0lmPVwiIWRpc2FibGVkXCIgW25nQ2xhc3NdPVwieyBoaWRkZW46ICFvcGVuUGFuZWwsIG9wZW46IG9wZW5QYW5lbCB9XCI+XHJcblxyXG4gICAgICA8cGVyZmVjdC1zY3JvbGxiYXIgW2NvbmZpZ109XCJ7IHN1cHByZXNzU2Nyb2xsWDogdHJ1ZSB9XCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnRcclxuICAgICAgICAgIHNlbGVjdD1cIndhYy1vcHRpb24tY2FsbC10by1hY3Rpb24sIHdhYy1vcHRpb24sIG9wdGlvbiwgLm9wdGlvbiwgW3NlbGVjdE9wdGlvbl1cIj5cclxuICAgICAgICA8L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvcGVyZmVjdC1zY3JvbGxiYXI+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIW9wdGlvbkNoaWxkcmVuPy5sZW5ndGhcIiBjbGFzcz1cIndhYy1zZWxlY3RfX2NvbnRlbnRfX2VtcHR5XCI+XHJcbiAgICAgICAgPHNwYW4+e3snd2FjLmRhdGF0YWJsZS5ub3Jlc3VsdCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,175 +0,0 @@
1
- import { DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, A, Z, ZERO, NINE, TAB } from '@angular/cdk/keycodes';
2
- import { ContentChildren, Directive, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { startWith, Subject, takeUntil } from 'rxjs';
5
- import { OPTION_SELECTION_HANDLER } from '../option/option-selection-handler.token';
6
- import { ValueChangeService } from './value-change.service';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "./value-change.service";
9
- export class SelectDirective {
10
- get tabindex() {
11
- return this.tabIndex;
12
- }
13
- get isSelectDisabled() {
14
- return this.disabled;
15
- }
16
- /** Handles all keydown events on the select. */
17
- onKeydown(event) {
18
- if (event.keyCode === TAB) {
19
- return;
20
- }
21
- if (this.disabled) {
22
- return;
23
- }
24
- this.handleKeyboardAction(event);
25
- }
26
- set value(value) {
27
- this._value = value;
28
- if (!this.optionChildren) {
29
- return;
30
- }
31
- this.valueChangeService.assignValue(value);
32
- }
33
- get value() {
34
- return this._value;
35
- }
36
- get multiple() {
37
- return this._multiple;
38
- }
39
- set multiple(value) {
40
- this._multiple = value;
41
- this.valueChangeService.setMultiple(value);
42
- }
43
- set disabled(disabled) {
44
- this._disabled = disabled;
45
- this.valueChangeService.setDisabledState(disabled);
46
- }
47
- get disabled() {
48
- return this._disabled;
49
- }
50
- get searchByTyping() {
51
- return this._searchByTyping;
52
- }
53
- set searchByTyping(value) {
54
- this._searchByTyping = value;
55
- }
56
- constructor(valueChangeService) {
57
- this.valueChangeService = valueChangeService;
58
- this.valueChange = new EventEmitter();
59
- this._multiple = false;
60
- this._disabled = false;
61
- this.tabIndex = 0;
62
- this._searchByTyping = false;
63
- this.isDestroyed$ = new Subject();
64
- // ControlValueAccessor methods
65
- this.onChange = () => { };
66
- this.onTouch = () => { };
67
- }
68
- ngOnInit() {
69
- this.handleValueChange();
70
- }
71
- ngAfterViewInit() {
72
- this.handleOptionChildren();
73
- }
74
- handleValueChange() {
75
- this.valueChangeService.valueChange$.pipe(takeUntil(this.isDestroyed$)).subscribe(value => {
76
- this._value = value;
77
- this.valueChange.emit(this.value);
78
- this.onChange(this.value);
79
- this.onTouch(this.value);
80
- });
81
- }
82
- handleOptionChildren() {
83
- this.optionChildren.changes.pipe(takeUntil(this.isDestroyed$), startWith(this.optionChildren)).subscribe(optionChildren => {
84
- this.valueChangeService.handleSelectOptionsChange(optionChildren, this.value);
85
- });
86
- }
87
- /** Handles keyboard events when the selected is open. */
88
- handleKeyboardAction(event) {
89
- if (!this.searchByTyping) {
90
- return;
91
- }
92
- const keyCode = event.keyCode;
93
- const isArrowKey = keyCode === DOWN_ARROW ||
94
- keyCode === UP_ARROW ||
95
- keyCode === LEFT_ARROW ||
96
- keyCode === RIGHT_ARROW;
97
- const isTyping = (keyCode >= A && keyCode <= Z) || (keyCode >= ZERO && keyCode <= NINE);
98
- if (isArrowKey) {
99
- event.preventDefault(); // prevents the page from scrolling
100
- // select the next option on arrow key down
101
- if (keyCode === DOWN_ARROW || keyCode === RIGHT_ARROW) {
102
- this.valueChangeService.selectNextOption();
103
- return;
104
- }
105
- this.valueChangeService.selectPreviousOption();
106
- return;
107
- }
108
- if (isTyping) {
109
- this.valueChangeService.searchOptionByFirstLetter(event.key);
110
- return;
111
- }
112
- }
113
- writeValue(value) {
114
- if (typeof value === 'undefined') {
115
- return;
116
- }
117
- this.value = value;
118
- }
119
- registerOnChange(fn) {
120
- this.onChange = fn;
121
- }
122
- registerOnTouched(fn) {
123
- this.onTouch = fn;
124
- }
125
- setDisabledState(isDisabled) {
126
- this.disabled = isDisabled;
127
- }
128
- ;
129
- ngOnDestroy() {
130
- this.isDestroyed$.next();
131
- this.isDestroyed$.complete();
132
- }
133
- }
134
- SelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: SelectDirective, deps: [{ token: i1.ValueChangeService }], target: i0.ɵɵFactoryTarget.Directive });
135
- SelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.5", type: SelectDirective, isStandalone: true, selector: "[wacSelect]", inputs: { value: "value", multiple: "multiple", disabled: "disabled", tabIndex: "tabIndex", searchByTyping: "searchByTyping" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.tabindex": "this.tabindex", "class.wac-select-disabled": "this.isSelectDisabled" } }, providers: [
136
- { provide: NG_VALUE_ACCESSOR, useExisting: SelectDirective, multi: true },
137
- ValueChangeService
138
- ], queries: [{ propertyName: "optionChildren", predicate: OPTION_SELECTION_HANDLER, descendants: true }], exportAs: ["wacSelect"], ngImport: i0 });
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: SelectDirective, decorators: [{
140
- type: Directive,
141
- args: [{
142
- selector: '[wacSelect]',
143
- providers: [
144
- { provide: NG_VALUE_ACCESSOR, useExisting: SelectDirective, multi: true },
145
- ValueChangeService
146
- ],
147
- exportAs: 'wacSelect',
148
- standalone: true
149
- }]
150
- }], ctorParameters: function () { return [{ type: i1.ValueChangeService }]; }, propDecorators: { tabindex: [{
151
- type: HostBinding,
152
- args: ['attr.tabindex']
153
- }], isSelectDisabled: [{
154
- type: HostBinding,
155
- args: ['class.wac-select-disabled']
156
- }], onKeydown: [{
157
- type: HostListener,
158
- args: ['keydown', ['$event']]
159
- }], optionChildren: [{
160
- type: ContentChildren,
161
- args: [OPTION_SELECTION_HANDLER, { descendants: true }]
162
- }], value: [{
163
- type: Input
164
- }], valueChange: [{
165
- type: Output
166
- }], multiple: [{
167
- type: Input
168
- }], disabled: [{
169
- type: Input
170
- }], tabIndex: [{
171
- type: Input
172
- }], searchByTyping: [{
173
- type: Input
174
- }] } });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC9zZWxlY3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdHLE9BQU8sRUFBaUIsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNoSyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFZNUQsTUFBTSxPQUFPLGVBQWU7SUFFeEIsSUFBa0MsUUFBUTtRQUN4QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQThDLGdCQUFnQjtRQUM1RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELGdEQUFnRDtJQUNYLFNBQVMsQ0FBQyxLQUFvQjtRQUNqRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFO1lBQ3pCLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPO1NBQ1I7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S0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBV0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRixjQUFjO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9XTl9BUlJPVywgVVBfQVJST1csIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBBLCBaLCBaRVJPLCBOSU5FLCBUQUIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb250ZW50Q2hpbGRyZW4sIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgc3RhcnRXaXRoLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgT3B0aW9uU2VsZWN0aW9uSGFuZGxlciB9IGZyb20gJy4uL29wdGlvbi9vcHRpb24tc2VsZWN0aW9uLWhhbmRsZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgT1BUSU9OX1NFTEVDVElPTl9IQU5ETEVSIH0gZnJvbSAnLi4vb3B0aW9uL29wdGlvbi1zZWxlY3Rpb24taGFuZGxlci50b2tlbic7XHJcbmltcG9ydCB7IFZhbHVlQ2hhbmdlU2VydmljZSB9IGZyb20gJy4vdmFsdWUtY2hhbmdlLnNlcnZpY2UnO1xyXG5cclxuQERpcmVjdGl2ZShcclxuICB7XHJcbiAgICBzZWxlY3RvcjogJ1t3YWNTZWxlY3RdJyxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBTZWxlY3REaXJlY3RpdmUsIG11bHRpOiB0cnVlIH0sXHJcbiAgICAgICAgVmFsdWVDaGFuZ2VTZXJ2aWNlXHJcbiAgICAgIF0sXHJcbiAgICBleHBvcnRBczogJ3dhY1NlbGVjdCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3REaXJlY3RpdmU8VE9wdGlvblZhbHVlPiBpbXBsZW1lbnRzICBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpIGdldCB0YWJpbmRleCgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGFiSW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy53YWMtc2VsZWN0LWRpc2FibGVkJykgZ2V0IGlzU2VsZWN0RGlzYWJsZWQoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIGFsbCBrZXlkb3duIGV2ZW50cyBvbiB0aGUgc2VsZWN0LiAqL1xyXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVEFCKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRBY3Rpb24oZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oT1BUSU9OX1NFTEVDVElPTl9IQU5ETEVSIGFzIGFueSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBvcHRpb25DaGlsZHJlbiE6IFF1ZXJ5TGlzdDxPcHRpb25TZWxlY3Rpb25IYW5kbGVyPFRPcHRpb25WYWx1ZT4+O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgdmFsdWUodmFsdWU6IFRPcHRpb25WYWx1ZSB8IFRPcHRpb25WYWx1ZVtdKSB7XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICBpZiAoIXRoaXMub3B0aW9uQ2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLmFzc2lnblZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmFsdWUoKSA6IFRPcHRpb25WYWx1ZSB8IFRPcHRpb25WYWx1ZVtdIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG4gICAgX3ZhbHVlOiBUT3B0aW9uVmFsdWUgfCBUT3B0aW9uVmFsdWVbXTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX211bHRpcGxlO1xyXG4gICAgfVxyXG4gICAgc2V0IG11bHRpcGxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgIHRoaXMuX211bHRpcGxlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNldE11bHRpcGxlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX211bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkKTtcclxuICAgIH1cclxuICAgIGdldCBkaXNhYmxlZCgpIDogYm9vbGVhbiB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICAgIH1cclxuICAgIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICBASW5wdXQoKSB0YWJJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBASW5wdXQoKSBcclxuICAgIGdldCBzZWFyY2hCeVR5cGluZygpOiBib29sZWFuIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEJ5VHlwaW5nO1xyXG4gICAgfVxyXG4gICAgc2V0IHNlYXJjaEJ5VHlwaW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaEJ5VHlwaW5nID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBfc2VhcmNoQnlUeXBpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBpc0Rlc3Ryb3llZCQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB2YWx1ZUNoYW5nZVNlcnZpY2U6IFZhbHVlQ2hhbmdlU2VydmljZTxUT3B0aW9uVmFsdWU+KSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlT3B0aW9uQ2hpbGRyZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZVZhbHVlQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnZhbHVlQ2hhbmdlJC5waXBlKHRha2VVbnRpbCh0aGlzLmlzRGVzdHJveWVkJCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgIHRoaXMub25Ub3VjaCh0aGlzLnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU9wdGlvbkNoaWxkcmVuKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9uQ2hpbGRyZW4uY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmlzRGVzdHJveWVkJCksIHN0YXJ0V2l0aCh0aGlzLm9wdGlvbkNoaWxkcmVuKSkuc3Vic2NyaWJlKG9wdGlvbkNoaWxkcmVuID0+IHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZVNlcnZpY2UuaGFuZGxlU2VsZWN0T3B0aW9uc0NoYW5nZShvcHRpb25DaGlsZHJlbiwgdGhpcy52YWx1ZSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyB3aGVuIHRoZSBzZWxlY3RlZCBpcyBvcGVuLiAqL1xyXG4gICAgcHJvdGVjdGVkIGhhbmRsZUtleWJvYXJkQWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgIGlmICghdGhpcy5zZWFyY2hCeVR5cGluZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcclxuICAgICAgY29uc3QgaXNBcnJvd0tleSA9XHJcbiAgICAgICAga2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fFxyXG4gICAgICAgIGtleUNvZGUgPT09IFVQX0FSUk9XIHx8XHJcbiAgICAgICAga2V5Q29kZSA9PT0gTEVGVF9BUlJPVyB8fFxyXG4gICAgICAgIGtleUNvZGUgPT09IFJJR0hUX0FSUk9XO1xyXG4gICAgICBjb25zdCBpc1R5cGluZyA9IChrZXlDb2RlID49IEEgJiYga2V5Q29kZSA8PSBaKSB8fCAoa2V5Q29kZSA+PSBaRVJPICYmIGtleUNvZGUgPD0gTklORSk7XHJcbiAgICAgIGlmIChpc0Fycm93S2V5KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudHMgdGhlIHBhZ2UgZnJvbSBzY3JvbGxpbmdcclxuICAgICAgICAvLyBzZWxlY3QgdGhlIG5leHQgb3B0aW9uIG9uIGFycm93IGtleSBkb3duXHJcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IERPV05fQVJST1cgfHwga2V5Q29kZSA9PT0gUklHSFRfQVJST1cpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNlbGVjdE5leHRPcHRpb24oKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZVNlcnZpY2Uuc2VsZWN0UHJldmlvdXNPcHRpb24oKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc1R5cGluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNlYXJjaE9wdGlvbkJ5Rmlyc3RMZXR0ZXIoZXZlbnQua2V5KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgbWV0aG9kc1xyXG5cclxuICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG5cclxuICAgIG9uVG91Y2g6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KXtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpe1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KXtcclxuICAgICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgfTtcclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgdGhpcy5pc0Rlc3Ryb3llZCQubmV4dCgpO1xyXG4gICAgICB0aGlzLmlzRGVzdHJveWVkJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=