@recursyve/nice-ui-kit.v2 15.0.0-beta.131 → 16.0.0-beta.134

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 (400) hide show
  1. package/esm2022/lib/animations/defaults.mjs +32 -0
  2. package/{esm2020 → esm2022}/lib/api/interceptors/transform-response.interceptor.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/components/alert/alert.component.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/components/alert/alert.module.mjs +9 -9
  5. package/{esm2020 → esm2022}/lib/components/alert/alert.service.mjs +4 -4
  6. package/esm2022/lib/components/assets-carousel/assets-carousel.component.mjs +283 -0
  7. package/{esm2020 → esm2022}/lib/components/assets-carousel/assets-carousel.module.mjs +19 -19
  8. package/{esm2020 → esm2022}/lib/components/assets-carousel/directives/assets-carousel-active-content.directive.mjs +4 -4
  9. package/esm2022/lib/components/async-typeahead/async-typeahead.component.mjs +451 -0
  10. package/{esm2020 → esm2022}/lib/components/async-typeahead/async-typeahead.module.mjs +21 -21
  11. package/{esm2020 → esm2022}/lib/components/async-typeahead/providers/async-typeahead.service.mjs +4 -4
  12. package/{esm2020 → esm2022}/lib/components/base-form/base-form.component.mjs +4 -4
  13. package/{esm2020 → esm2022}/lib/components/base-form/base-form.module.mjs +5 -5
  14. package/{esm2020 → esm2022}/lib/components/base-form/form-submit.directive.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/components/card/card.component.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/components/card/card.module.mjs +5 -5
  17. package/{esm2020 → esm2022}/lib/components/carousel/carousel.component.mjs +4 -4
  18. package/esm2022/lib/components/carousel/carousel.module.mjs +40 -0
  19. package/{esm2020 → esm2022}/lib/components/carousel/picture-modal/picture-modal.component.mjs +4 -4
  20. package/{esm2020 → esm2022}/lib/components/carousel/picture-modal/picture-modal.service.mjs +4 -4
  21. package/{esm2020 → esm2022}/lib/components/carousel/pipe/carousel-layout.pipe.mjs +4 -4
  22. package/{esm2020 → esm2022}/lib/components/collapsable/collapsable.component.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/components/collapsable/collapsable.module.mjs +7 -7
  24. package/{esm2020 → esm2022}/lib/components/date-range-picker/components/header/header.component.mjs +4 -4
  25. package/{esm2020 → esm2022}/lib/components/date-range-picker/components/range-preset/range-preset.component.mjs +4 -4
  26. package/esm2022/lib/components/date-range-picker/date-range-picker.component.mjs +95 -0
  27. package/{esm2020 → esm2022}/lib/components/date-range-picker/date-range-picker.module.mjs +21 -21
  28. package/{esm2020 → esm2022}/lib/components/date-range-picker/providers/date-range-picker.service.mjs +4 -4
  29. package/{esm2020 → esm2022}/lib/components/drawer/drawer.component.mjs +4 -4
  30. package/{esm2020 → esm2022}/lib/components/drawer/drawer.module.mjs +7 -7
  31. package/{esm2020 → esm2022}/lib/components/drawer/drawer.service.mjs +4 -4
  32. package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/export-bottom-sheet.component.mjs +4 -4
  33. package/esm2022/lib/components/export-bottom-sheet/export-bottom-sheet.module.mjs +45 -0
  34. package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/providers/export-bottom-sheet.service.mjs +7 -7
  35. package/{esm2020 → esm2022}/lib/components/form-error/control-status.directive.mjs +4 -4
  36. package/esm2022/lib/components/form-error/form-error.component.mjs +53 -0
  37. package/{esm2020 → esm2022}/lib/components/form-error/form-error.module.mjs +5 -5
  38. package/esm2022/lib/components/horizontal-stepper/horizontal-stepper.component.mjs +34 -0
  39. package/{esm2020 → esm2022}/lib/components/horizontal-stepper/horizontal-stepper.module.mjs +9 -9
  40. package/{esm2020 → esm2022}/lib/components/horizontal-stepper/step.component.mjs +6 -6
  41. package/esm2022/lib/components/image-cropper/image-cropper.component.mjs +1269 -0
  42. package/{esm2020 → esm2022}/lib/components/image-cropper/image-cropper.module.mjs +5 -5
  43. package/{esm2020 → esm2022}/lib/components/layout/layout.component.mjs +4 -4
  44. package/{esm2020 → esm2022}/lib/components/layout/layout.module.mjs +5 -5
  45. package/{esm2020 → esm2022}/lib/components/loading-spinner/loading-spinner.component.mjs +4 -4
  46. package/{esm2020 → esm2022}/lib/components/loading-spinner/loading-spinner.module.mjs +9 -9
  47. package/{esm2020 → esm2022}/lib/components/loading-spinner/loading.directive.mjs +4 -4
  48. package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.component.mjs +4 -4
  49. package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.directive.mjs +4 -4
  50. package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.module.mjs +5 -5
  51. package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.service.mjs +4 -4
  52. package/{esm2020 → esm2022}/lib/components/lottie/lottie.component.mjs +4 -4
  53. package/{esm2020 → esm2022}/lib/components/lottie/lottie.module.mjs +5 -5
  54. package/{esm2020 → esm2022}/lib/components/navigation/components/hint-component-base.mjs +4 -4
  55. package/{esm2020 → esm2022}/lib/components/navigation/directives/show-hint.directive.mjs +4 -4
  56. package/esm2022/lib/components/navigation/horizontal/components/basic/basic.component.mjs +62 -0
  57. package/{esm2020 → esm2022}/lib/components/navigation/horizontal/components/branch/branch.component.mjs +7 -7
  58. package/{esm2020 → esm2022}/lib/components/navigation/horizontal/components/divider/divider.component.mjs +4 -4
  59. package/{esm2020 → esm2022}/lib/components/navigation/horizontal/components/spacer/spacer.component.mjs +4 -4
  60. package/esm2022/lib/components/navigation/horizontal/horizontal.component.mjs +50 -0
  61. package/esm2022/lib/components/navigation/navigation.component.mjs +83 -0
  62. package/esm2022/lib/components/navigation/navigation.module.mjs +108 -0
  63. package/{esm2020 → esm2022}/lib/components/navigation/navigation.service.mjs +4 -4
  64. package/{esm2020 → esm2022}/lib/components/navigation/pipes/should-hide.pipe.mjs +4 -4
  65. package/{esm2020 → esm2022}/lib/components/navigation/pipes/should-show-hint.pipe.mjs +4 -4
  66. package/esm2022/lib/components/navigation/pipes/translate-with-context.pipe.mjs +25 -0
  67. package/{esm2020 → esm2022}/lib/components/navigation/providers/hint.service.mjs +4 -4
  68. package/esm2022/lib/components/navigation/providers/translation-context.service.mjs +16 -0
  69. package/{esm2020 → esm2022}/lib/components/navigation/vertical/components/aside/aside.component.mjs +6 -6
  70. package/esm2022/lib/components/navigation/vertical/components/basic/basic.component.mjs +76 -0
  71. package/{esm2020 → esm2022}/lib/components/navigation/vertical/components/collapsable/collapsable.component.mjs +8 -8
  72. package/{esm2020 → esm2022}/lib/components/navigation/vertical/components/divider/divider.component.mjs +4 -4
  73. package/esm2022/lib/components/navigation/vertical/components/group/group.component.mjs +75 -0
  74. package/{esm2020 → esm2022}/lib/components/navigation/vertical/components/spacer/spacer.component.mjs +4 -4
  75. package/esm2022/lib/components/navigation/vertical/vertical.component.mjs +599 -0
  76. package/esm2022/lib/components/search-bar/search-bar.component.mjs +76 -0
  77. package/{esm2020 → esm2022}/lib/components/search-bar/search-bar.module.mjs +13 -13
  78. package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.component.mjs +4 -4
  79. package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.directive.mjs +4 -4
  80. package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.module.mjs +5 -5
  81. package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.service.mjs +4 -4
  82. package/{esm2020 → esm2022}/lib/components/toast/toast.component.mjs +4 -4
  83. package/{esm2020 → esm2022}/lib/components/toast/toast.module.mjs +5 -5
  84. package/{esm2020 → esm2022}/lib/components/toast/toast.service.mjs +4 -4
  85. package/esm2022/lib/components/toggle-button-group/toggle-button-group.component.mjs +134 -0
  86. package/{esm2020 → esm2022}/lib/components/toggle-button-group/toggle-button-group.module.mjs +7 -7
  87. package/{esm2020 → esm2022}/lib/components/toggle-button-group/toggle-button.component.mjs +4 -4
  88. package/esm2022/lib/components/translation-form/components/textarea/translation-form-textarea.component.mjs +38 -0
  89. package/esm2022/lib/components/translation-form/components/textfield/translation-form-textfield.component.mjs +26 -0
  90. package/{esm2020 → esm2022}/lib/components/translation-form/components/translation-form.component.mjs +4 -4
  91. package/{esm2020 → esm2022}/lib/components/translation-form/components/translation-form.module.mjs +19 -19
  92. package/{esm2020 → esm2022}/lib/components/translation-form/directives/translation-context.directive.mjs +4 -4
  93. package/{esm2020 → esm2022}/lib/components/translation-form/providers/nice-translation-form.service.mjs +4 -4
  94. package/{esm2020 → esm2022}/lib/components/translation-form/toggle/translation-toggle.component.mjs +4 -4
  95. package/{esm2020 → esm2022}/lib/components/translation-form/validators/require-for-languages.validator.mjs +4 -4
  96. package/{esm2020 → esm2022}/lib/components/typeahead/directives/options-scroll.directive.mjs +4 -4
  97. package/{esm2020 → esm2022}/lib/components/typeahead/directives/options-scroll.module.mjs +5 -5
  98. package/{esm2020 → esm2022}/lib/components/typeahead/typeahead.component.mjs +9 -9
  99. package/{esm2020 → esm2022}/lib/components/typeahead/typeahead.module.mjs +25 -25
  100. package/{esm2020 → esm2022}/lib/directives/autofocus/autofocus.directive.mjs +4 -4
  101. package/{esm2020 → esm2022}/lib/directives/autofocus/autofocus.module.mjs +5 -5
  102. package/{esm2020 → esm2022}/lib/directives/autogrow/autogrow.directive.mjs +4 -4
  103. package/{esm2020 → esm2022}/lib/directives/autogrow/autogrow.module.mjs +5 -5
  104. package/{esm2020 → esm2022}/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.mjs +4 -4
  105. package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.mjs +4 -4
  106. package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list-items/chip-list-items.component.mjs +4 -4
  107. package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list.directive.mjs +4 -4
  108. package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list.module.mjs +5 -5
  109. package/{esm2020 → esm2022}/lib/directives/draggable-list/draggable-list.directive.mjs +4 -4
  110. package/{esm2020 → esm2022}/lib/directives/draggable-list/draggable-list.module.mjs +5 -5
  111. package/{esm2020 → esm2022}/lib/directives/dropzone/dropzone.directive.mjs +4 -4
  112. package/{esm2020 → esm2022}/lib/directives/dropzone/dropzone.module.mjs +5 -5
  113. package/{esm2020 → esm2022}/lib/directives/image-error-placeholder/image-error-placeholder.directive.mjs +4 -4
  114. package/{esm2020 → esm2022}/lib/directives/image-error-placeholder/image-error-placeholder.module.mjs +5 -5
  115. package/{esm2020 → esm2022}/lib/directives/material/material.module.mjs +7 -7
  116. package/{esm2020 → esm2022}/lib/directives/material/nice-material-style.directive.mjs +4 -4
  117. package/{esm2020 → esm2022}/lib/directives/material/nice-rounded-style.directive.mjs +4 -4
  118. package/{esm2020 → esm2022}/lib/directives/modals/modal-on-click.directive.mjs +4 -4
  119. package/{esm2020 → esm2022}/lib/directives/modals/modal-opener.directive.mjs +4 -4
  120. package/{esm2020 → esm2022}/lib/directives/rerender/rerender.directive.mjs +4 -4
  121. package/{esm2020 → esm2022}/lib/directives/resolve/resolve.directive.mjs +4 -4
  122. package/{esm2020 → esm2022}/lib/directives/scroll-reset/scroll-reset.directive.mjs +4 -4
  123. package/{esm2020 → esm2022}/lib/directives/scroll-reset/scroll-reset.module.mjs +5 -5
  124. package/{esm2020 → esm2022}/lib/directives/scrollbar/scrollbar.directive.mjs +4 -4
  125. package/{esm2020 → esm2022}/lib/directives/scrollbar/scrollbar.module.mjs +5 -5
  126. package/{esm2020 → esm2022}/lib/directives/stop-propagation/click-stop-propagation.directive.mjs +4 -4
  127. package/{esm2020 → esm2022}/lib/directives/stop-propagation/stop-propagation.module.mjs +5 -5
  128. package/{esm2020 → esm2022}/lib/directives/window/prevent-close-window.directive.mjs +4 -4
  129. package/{esm2020 → esm2022}/lib/directives/window/window-directive.module.mjs +5 -5
  130. package/esm2022/lib/nice.module.mjs +124 -0
  131. package/{esm2020 → esm2022}/lib/pipes/boolean.pipe.mjs +4 -4
  132. package/{esm2020 → esm2022}/lib/pipes/capitalize-first-letter.pipe.mjs +4 -4
  133. package/{esm2020 → esm2022}/lib/pipes/ceil.pipe.mjs +4 -4
  134. package/{esm2020 → esm2022}/lib/pipes/entries.pipe.mjs +4 -4
  135. package/{esm2020 → esm2022}/lib/pipes/find-by-key.pipe.mjs +4 -4
  136. package/{esm2020 → esm2022}/lib/pipes/first-letter.pipe.mjs +4 -4
  137. package/{esm2020 → esm2022}/lib/pipes/floor.pipe.mjs +4 -4
  138. package/{esm2020 → esm2022}/lib/pipes/join-if-defined.pipe.mjs +4 -4
  139. package/{esm2020 → esm2022}/lib/pipes/link.pipe.mjs +4 -4
  140. package/{esm2020 → esm2022}/lib/pipes/localized-boolean.pipe.mjs +4 -4
  141. package/{esm2020 → esm2022}/lib/pipes/localized-currency.pipe.mjs +4 -4
  142. package/{esm2020 → esm2022}/lib/pipes/localized-date-only.pipe.mjs +4 -4
  143. package/{esm2020 → esm2022}/lib/pipes/localized-date.pipe.mjs +4 -4
  144. package/{esm2020 → esm2022}/lib/pipes/minutes-to-time.pipe.mjs +4 -4
  145. package/{esm2020 → esm2022}/lib/pipes/number-to-ordinal-indicator.pipe.mjs +4 -4
  146. package/{esm2020 → esm2022}/lib/pipes/pad.pipe.mjs +4 -4
  147. package/{esm2020 → esm2022}/lib/pipes/phone.pipe.mjs +4 -4
  148. package/{esm2020 → esm2022}/lib/pipes/pipes.module.mjs +72 -72
  149. package/{esm2020 → esm2022}/lib/pipes/postal-code.pipe.mjs +4 -4
  150. package/{esm2020 → esm2022}/lib/pipes/range.pipe.mjs +4 -4
  151. package/{esm2020 → esm2022}/lib/pipes/round.pipe.mjs +4 -4
  152. package/{esm2020 → esm2022}/lib/pipes/sanitize-bypass.pipe.mjs +4 -4
  153. package/{esm2020 → esm2022}/lib/pipes/seconds-to-time.pipe.mjs +4 -4
  154. package/{esm2020 → esm2022}/lib/pipes/track-by-prop.pipe.mjs +4 -4
  155. package/{esm2020 → esm2022}/lib/providers/config/config.module.mjs +5 -5
  156. package/{esm2020 → esm2022}/lib/providers/config/config.service.mjs +4 -4
  157. package/{esm2020 → esm2022}/lib/providers/media-watcher/media-watcher.module.mjs +7 -7
  158. package/{esm2020 → esm2022}/lib/providers/media-watcher/media-watcher.service.mjs +4 -4
  159. package/{esm2020 → esm2022}/lib/providers/overlay/dynamic-overlay-container.service.mjs +4 -4
  160. package/{esm2020 → esm2022}/lib/providers/overlay/dynamic-overlay.service.mjs +4 -4
  161. package/{esm2020 → esm2022}/lib/providers/splash-screen/splash-screen.module.mjs +7 -7
  162. package/{esm2020 → esm2022}/lib/providers/splash-screen/splash-screen.service.mjs +4 -4
  163. package/{esm2020 → esm2022}/lib/providers/utils/utils.module.mjs +5 -5
  164. package/{esm2020 → esm2022}/lib/providers/utils/utils.service.mjs +4 -4
  165. package/esm2022/lib/utils/regex.utils.mjs +11 -0
  166. package/{fesm2020 → fesm2022}/recursyve-nice-ui-kit.v2.mjs +948 -905
  167. package/fesm2022/recursyve-nice-ui-kit.v2.mjs.map +1 -0
  168. package/lib/components/alert/alert.component.d.ts +1 -1
  169. package/lib/components/assets-carousel/assets-carousel.component.d.ts +1 -1
  170. package/lib/components/async-typeahead/async-typeahead.component.d.ts +1 -1
  171. package/lib/components/base-form/base-form.component.d.ts +1 -1
  172. package/lib/components/base-form/form-submit.directive.d.ts +1 -1
  173. package/lib/components/card/card.component.d.ts +1 -1
  174. package/lib/components/carousel/carousel.component.d.ts +1 -1
  175. package/lib/components/collapsable/collapsable.component.d.ts +1 -1
  176. package/lib/components/date-range-picker/date-range-picker.component.d.ts +1 -1
  177. package/lib/components/drawer/drawer.component.d.ts +1 -1
  178. package/lib/components/form-error/form-error.component.d.ts +1 -1
  179. package/lib/components/image-cropper/image-cropper.component.d.ts +2 -2
  180. package/lib/components/loading-spinner/loading-spinner.component.d.ts +1 -1
  181. package/lib/components/loading-spinner/loading.directive.d.ts +1 -1
  182. package/lib/components/loading-toast/loading-toast.component.d.ts +1 -1
  183. package/lib/components/loading-toast/loading-toast.directive.d.ts +1 -1
  184. package/lib/components/lottie/lottie.component.d.ts +1 -1
  185. package/lib/components/navigation/directives/show-hint.directive.d.ts +1 -1
  186. package/lib/components/navigation/horizontal/components/basic/basic.component.d.ts +1 -1
  187. package/lib/components/navigation/horizontal/components/branch/branch.component.d.ts +1 -1
  188. package/lib/components/navigation/horizontal/components/divider/divider.component.d.ts +1 -1
  189. package/lib/components/navigation/horizontal/components/spacer/spacer.component.d.ts +1 -1
  190. package/lib/components/navigation/horizontal/horizontal.component.d.ts +4 -2
  191. package/lib/components/navigation/navigation.component.d.ts +3 -1
  192. package/lib/components/navigation/navigation.module.d.ts +12 -11
  193. package/lib/components/navigation/pipes/translate-with-context.pipe.d.ts +12 -0
  194. package/lib/components/navigation/providers/translation-context.service.d.ts +8 -0
  195. package/lib/components/navigation/vertical/components/aside/aside.component.d.ts +1 -1
  196. package/lib/components/navigation/vertical/components/basic/basic.component.d.ts +1 -1
  197. package/lib/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +1 -1
  198. package/lib/components/navigation/vertical/components/divider/divider.component.d.ts +1 -1
  199. package/lib/components/navigation/vertical/components/group/group.component.d.ts +1 -1
  200. package/lib/components/navigation/vertical/components/spacer/spacer.component.d.ts +1 -1
  201. package/lib/components/navigation/vertical/vertical.component.d.ts +4 -2
  202. package/lib/components/search-bar/search-bar.component.d.ts +1 -1
  203. package/lib/components/sweet-alert/sweet-alert.directive.d.ts +1 -1
  204. package/lib/components/toggle-button-group/toggle-button-group.component.d.ts +1 -1
  205. package/lib/components/toggle-button-group/toggle-button.component.d.ts +1 -1
  206. package/lib/components/translation-form/components/textarea/translation-form-textarea.component.d.ts +1 -1
  207. package/lib/components/translation-form/components/translation-form.component.d.ts +1 -1
  208. package/lib/components/translation-form/validators/require-for-languages.validator.d.ts +1 -1
  209. package/lib/components/typeahead/directives/options-scroll.directive.d.ts +1 -1
  210. package/lib/components/typeahead/typeahead.component.d.ts +1 -1
  211. package/lib/directives/autogrow/autogrow.directive.d.ts +1 -1
  212. package/lib/directives/chip-list/chip-list-items/chip-list-items.component.d.ts +1 -1
  213. package/lib/directives/chip-list/chip-list.directive.d.ts +1 -1
  214. package/lib/directives/draggable-list/draggable-list.directive.d.ts +1 -1
  215. package/lib/directives/image-error-placeholder/image-error-placeholder.directive.d.ts +1 -1
  216. package/lib/directives/modals/modal-opener.directive.d.ts +1 -1
  217. package/lib/directives/rerender/rerender.directive.d.ts +1 -1
  218. package/lib/directives/resolve/resolve.directive.d.ts +1 -1
  219. package/lib/directives/scrollbar/scrollbar.directive.d.ts +1 -1
  220. package/package.json +12 -19
  221. package/esm2020/lib/animations/defaults.mjs +0 -32
  222. package/esm2020/lib/components/assets-carousel/assets-carousel.component.mjs +0 -283
  223. package/esm2020/lib/components/async-typeahead/async-typeahead.component.mjs +0 -451
  224. package/esm2020/lib/components/carousel/carousel.module.mjs +0 -41
  225. package/esm2020/lib/components/date-range-picker/date-range-picker.component.mjs +0 -95
  226. package/esm2020/lib/components/export-bottom-sheet/export-bottom-sheet.module.mjs +0 -45
  227. package/esm2020/lib/components/form-error/form-error.component.mjs +0 -53
  228. package/esm2020/lib/components/horizontal-stepper/horizontal-stepper.component.mjs +0 -34
  229. package/esm2020/lib/components/image-cropper/image-cropper.component.mjs +0 -1269
  230. package/esm2020/lib/components/navigation/horizontal/components/basic/basic.component.mjs +0 -62
  231. package/esm2020/lib/components/navigation/horizontal/horizontal.component.mjs +0 -46
  232. package/esm2020/lib/components/navigation/navigation.component.mjs +0 -76
  233. package/esm2020/lib/components/navigation/navigation.module.mjs +0 -105
  234. package/esm2020/lib/components/navigation/vertical/components/basic/basic.component.mjs +0 -76
  235. package/esm2020/lib/components/navigation/vertical/components/group/group.component.mjs +0 -75
  236. package/esm2020/lib/components/navigation/vertical/vertical.component.mjs +0 -595
  237. package/esm2020/lib/components/search-bar/search-bar.component.mjs +0 -76
  238. package/esm2020/lib/components/toggle-button-group/toggle-button-group.component.mjs +0 -134
  239. package/esm2020/lib/components/translation-form/components/textarea/translation-form-textarea.component.mjs +0 -38
  240. package/esm2020/lib/components/translation-form/components/textfield/translation-form-textfield.component.mjs +0 -26
  241. package/esm2020/lib/nice.module.mjs +0 -124
  242. package/esm2020/lib/utils/regex.utils.mjs +0 -11
  243. package/fesm2015/recursyve-nice-ui-kit.v2.mjs +0 -11867
  244. package/fesm2015/recursyve-nice-ui-kit.v2.mjs.map +0 -1
  245. package/fesm2020/recursyve-nice-ui-kit.v2.mjs.map +0 -1
  246. /package/{esm2020 → esm2022}/lib/animations/expand-collapse.mjs +0 -0
  247. /package/{esm2020 → esm2022}/lib/animations/fade.mjs +0 -0
  248. /package/{esm2020 → esm2022}/lib/animations/index.mjs +0 -0
  249. /package/{esm2020 → esm2022}/lib/animations/public-api.mjs +0 -0
  250. /package/{esm2020 → esm2022}/lib/animations/shake.mjs +0 -0
  251. /package/{esm2020 → esm2022}/lib/animations/slide.mjs +0 -0
  252. /package/{esm2020 → esm2022}/lib/animations/zoom.mjs +0 -0
  253. /package/{esm2020 → esm2022}/lib/api/exceptions/api.exception.mjs +0 -0
  254. /package/{esm2020 → esm2022}/lib/api/exceptions/exception.factory.mjs +0 -0
  255. /package/{esm2020 → esm2022}/lib/api/index.mjs +0 -0
  256. /package/{esm2020 → esm2022}/lib/api/nice.api.mjs +0 -0
  257. /package/{esm2020 → esm2022}/lib/api/public-api.mjs +0 -0
  258. /package/{esm2020 → esm2022}/lib/components/alert/alert.types.mjs +0 -0
  259. /package/{esm2020 → esm2022}/lib/components/alert/index.mjs +0 -0
  260. /package/{esm2020 → esm2022}/lib/components/alert/public-api.mjs +0 -0
  261. /package/{esm2020 → esm2022}/lib/components/assets-carousel/assets-carousel.constant.mjs +0 -0
  262. /package/{esm2020 → esm2022}/lib/components/assets-carousel/index.mjs +0 -0
  263. /package/{esm2020 → esm2022}/lib/components/assets-carousel/public-api.mjs +0 -0
  264. /package/{esm2020 → esm2022}/lib/components/async-typeahead/async-typeahead.constant.mjs +0 -0
  265. /package/{esm2020 → esm2022}/lib/components/async-typeahead/index.mjs +0 -0
  266. /package/{esm2020 → esm2022}/lib/components/async-typeahead/providers/async-typeahead.provider.mjs +0 -0
  267. /package/{esm2020 → esm2022}/lib/components/async-typeahead/public-api.mjs +0 -0
  268. /package/{esm2020 → esm2022}/lib/components/base-form/index.mjs +0 -0
  269. /package/{esm2020 → esm2022}/lib/components/base-form/nice-base.form.mjs +0 -0
  270. /package/{esm2020 → esm2022}/lib/components/base-form/public-api.mjs +0 -0
  271. /package/{esm2020 → esm2022}/lib/components/card/card.types.mjs +0 -0
  272. /package/{esm2020 → esm2022}/lib/components/card/index.mjs +0 -0
  273. /package/{esm2020 → esm2022}/lib/components/card/public-api.mjs +0 -0
  274. /package/{esm2020 → esm2022}/lib/components/carousel/index.mjs +0 -0
  275. /package/{esm2020 → esm2022}/lib/components/carousel/picture-modal/index.mjs +0 -0
  276. /package/{esm2020 → esm2022}/lib/components/carousel/picture-modal/public-api.mjs +0 -0
  277. /package/{esm2020 → esm2022}/lib/components/carousel/public-api.mjs +0 -0
  278. /package/{esm2020 → esm2022}/lib/components/collapsable/index.mjs +0 -0
  279. /package/{esm2020 → esm2022}/lib/components/collapsable/public-api.mjs +0 -0
  280. /package/{esm2020 → esm2022}/lib/components/date-range-picker/index.mjs +0 -0
  281. /package/{esm2020 → esm2022}/lib/components/date-range-picker/public-api.mjs +0 -0
  282. /package/{esm2020 → esm2022}/lib/components/drawer/drawer.types.mjs +0 -0
  283. /package/{esm2020 → esm2022}/lib/components/drawer/index.mjs +0 -0
  284. /package/{esm2020 → esm2022}/lib/components/drawer/public-api.mjs +0 -0
  285. /package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/index.mjs +0 -0
  286. /package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/models/export-strategy.model.mjs +0 -0
  287. /package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/public-api.mjs +0 -0
  288. /package/{esm2020 → esm2022}/lib/components/form-error/index.mjs +0 -0
  289. /package/{esm2020 → esm2022}/lib/components/form-error/public-api.mjs +0 -0
  290. /package/{esm2020 → esm2022}/lib/components/horizontal-stepper/index.mjs +0 -0
  291. /package/{esm2020 → esm2022}/lib/components/horizontal-stepper/public-api.mjs +0 -0
  292. /package/{esm2020 → esm2022}/lib/components/image-cropper/index.mjs +0 -0
  293. /package/{esm2020 → esm2022}/lib/components/image-cropper/public-api.mjs +0 -0
  294. /package/{esm2020 → esm2022}/lib/components/image-cropper/resize-canvas.mjs +0 -0
  295. /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
  296. /package/{esm2020 → esm2022}/lib/components/layout/index.mjs +0 -0
  297. /package/{esm2020 → esm2022}/lib/components/layout/public-api.mjs +0 -0
  298. /package/{esm2020 → esm2022}/lib/components/loading-spinner/index.mjs +0 -0
  299. /package/{esm2020 → esm2022}/lib/components/loading-spinner/loading.constant.mjs +0 -0
  300. /package/{esm2020 → esm2022}/lib/components/loading-spinner/public-api.mjs +0 -0
  301. /package/{esm2020 → esm2022}/lib/components/loading-toast/index.mjs +0 -0
  302. /package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.constant.mjs +0 -0
  303. /package/{esm2020 → esm2022}/lib/components/loading-toast/public-api.mjs +0 -0
  304. /package/{esm2020 → esm2022}/lib/components/loading-toast/rxjs/show-loading-toast.operator.mjs +0 -0
  305. /package/{esm2020 → esm2022}/lib/components/lottie/index.mjs +0 -0
  306. /package/{esm2020 → esm2022}/lib/components/lottie/public-api.mjs +0 -0
  307. /package/{esm2020 → esm2022}/lib/components/navigation/index.mjs +0 -0
  308. /package/{esm2020 → esm2022}/lib/components/navigation/navigation.types.mjs +0 -0
  309. /package/{esm2020 → esm2022}/lib/components/navigation/providers/hide-item.resolver.mjs +0 -0
  310. /package/{esm2020 → esm2022}/lib/components/navigation/providers/hint.resolver.mjs +0 -0
  311. /package/{esm2020 → esm2022}/lib/components/navigation/public-api.mjs +0 -0
  312. /package/{esm2020 → esm2022}/lib/components/public-api.mjs +0 -0
  313. /package/{esm2020 → esm2022}/lib/components/search-bar/index.mjs +0 -0
  314. /package/{esm2020 → esm2022}/lib/components/search-bar/public-api.mjs +0 -0
  315. /package/{esm2020 → esm2022}/lib/components/sweet-alert/index.mjs +0 -0
  316. /package/{esm2020 → esm2022}/lib/components/sweet-alert/public-api.mjs +0 -0
  317. /package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.constant.mjs +0 -0
  318. /package/{esm2020 → esm2022}/lib/components/toast/index.mjs +0 -0
  319. /package/{esm2020 → esm2022}/lib/components/toast/public-api.mjs +0 -0
  320. /package/{esm2020 → esm2022}/lib/components/toast/rxjs/show-success-or-error-toast.operator.mjs +0 -0
  321. /package/{esm2020 → esm2022}/lib/components/toast/rxjs/show-toast.operator.mjs +0 -0
  322. /package/{esm2020 → esm2022}/lib/components/toast/toast.constant.mjs +0 -0
  323. /package/{esm2020 → esm2022}/lib/components/toggle-button-group/index.mjs +0 -0
  324. /package/{esm2020 → esm2022}/lib/components/toggle-button-group/public-api.mjs +0 -0
  325. /package/{esm2020 → esm2022}/lib/components/translation-form/decorators/translation-form-group.decorator.mjs +0 -0
  326. /package/{esm2020 → esm2022}/lib/components/translation-form/index.mjs +0 -0
  327. /package/{esm2020 → esm2022}/lib/components/translation-form/public-api.mjs +0 -0
  328. /package/{esm2020 → esm2022}/lib/components/translation-form/translation.form.mjs +0 -0
  329. /package/{esm2020 → esm2022}/lib/components/typeahead/index.mjs +0 -0
  330. /package/{esm2020 → esm2022}/lib/components/typeahead/public-api.mjs +0 -0
  331. /package/{esm2020 → esm2022}/lib/directives/autofocus/index.mjs +0 -0
  332. /package/{esm2020 → esm2022}/lib/directives/autofocus/public-api.mjs +0 -0
  333. /package/{esm2020 → esm2022}/lib/directives/autogrow/index.mjs +0 -0
  334. /package/{esm2020 → esm2022}/lib/directives/autogrow/public-api.mjs +0 -0
  335. /package/{esm2020 → esm2022}/lib/directives/chip-async-typeahead/index.mjs +0 -0
  336. /package/{esm2020 → esm2022}/lib/directives/chip-async-typeahead/public-api.mjs +0 -0
  337. /package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list.constant.mjs +0 -0
  338. /package/{esm2020 → esm2022}/lib/directives/chip-list/index.mjs +0 -0
  339. /package/{esm2020 → esm2022}/lib/directives/chip-list/public-api.mjs +0 -0
  340. /package/{esm2020 → esm2022}/lib/directives/draggable-list/index.mjs +0 -0
  341. /package/{esm2020 → esm2022}/lib/directives/draggable-list/public-api.mjs +0 -0
  342. /package/{esm2020 → esm2022}/lib/directives/dropzone/index.mjs +0 -0
  343. /package/{esm2020 → esm2022}/lib/directives/dropzone/public-api.mjs +0 -0
  344. /package/{esm2020 → esm2022}/lib/directives/image-error-placeholder/index.mjs +0 -0
  345. /package/{esm2020 → esm2022}/lib/directives/image-error-placeholder/public-api.mjs +0 -0
  346. /package/{esm2020 → esm2022}/lib/directives/index.mjs +0 -0
  347. /package/{esm2020 → esm2022}/lib/directives/material/index.mjs +0 -0
  348. /package/{esm2020 → esm2022}/lib/directives/material/public-api.mjs +0 -0
  349. /package/{esm2020 → esm2022}/lib/directives/modals/index.mjs +0 -0
  350. /package/{esm2020 → esm2022}/lib/directives/modals/public-api.mjs +0 -0
  351. /package/{esm2020 → esm2022}/lib/directives/public-api.mjs +0 -0
  352. /package/{esm2020 → esm2022}/lib/directives/rerender/index.mjs +0 -0
  353. /package/{esm2020 → esm2022}/lib/directives/rerender/public-api.mjs +0 -0
  354. /package/{esm2020 → esm2022}/lib/directives/resolve/index.mjs +0 -0
  355. /package/{esm2020 → esm2022}/lib/directives/resolve/public-api.mjs +0 -0
  356. /package/{esm2020 → esm2022}/lib/directives/scroll-reset/index.mjs +0 -0
  357. /package/{esm2020 → esm2022}/lib/directives/scroll-reset/public-api.mjs +0 -0
  358. /package/{esm2020 → esm2022}/lib/directives/scrollbar/index.mjs +0 -0
  359. /package/{esm2020 → esm2022}/lib/directives/scrollbar/public-api.mjs +0 -0
  360. /package/{esm2020 → esm2022}/lib/directives/scrollbar/scrollbar.types.mjs +0 -0
  361. /package/{esm2020 → esm2022}/lib/directives/stop-propagation/index.mjs +0 -0
  362. /package/{esm2020 → esm2022}/lib/directives/stop-propagation/public-api.mjs +0 -0
  363. /package/{esm2020 → esm2022}/lib/directives/window/index.mjs +0 -0
  364. /package/{esm2020 → esm2022}/lib/directives/window/public-api.mjs +0 -0
  365. /package/{esm2020 → esm2022}/lib/pipes/index.mjs +0 -0
  366. /package/{esm2020 → esm2022}/lib/pipes/public-api.mjs +0 -0
  367. /package/{esm2020 → esm2022}/lib/providers/config/config.constants.mjs +0 -0
  368. /package/{esm2020 → esm2022}/lib/providers/config/config.model.mjs +0 -0
  369. /package/{esm2020 → esm2022}/lib/providers/config/index.mjs +0 -0
  370. /package/{esm2020 → esm2022}/lib/providers/config/public-api.mjs +0 -0
  371. /package/{esm2020 → esm2022}/lib/providers/index.mjs +0 -0
  372. /package/{esm2020 → esm2022}/lib/providers/media-watcher/index.mjs +0 -0
  373. /package/{esm2020 → esm2022}/lib/providers/media-watcher/public-api.mjs +0 -0
  374. /package/{esm2020 → esm2022}/lib/providers/public-api.mjs +0 -0
  375. /package/{esm2020 → esm2022}/lib/providers/splash-screen/index.mjs +0 -0
  376. /package/{esm2020 → esm2022}/lib/providers/splash-screen/public-api.mjs +0 -0
  377. /package/{esm2020 → esm2022}/lib/providers/utils/index.mjs +0 -0
  378. /package/{esm2020 → esm2022}/lib/providers/utils/public-api.mjs +0 -0
  379. /package/{esm2020 → esm2022}/lib/types/constructor.mjs +0 -0
  380. /package/{esm2020 → esm2022}/lib/utils/array.utils.mjs +0 -0
  381. /package/{esm2020 → esm2022}/lib/utils/case.utils.mjs +0 -0
  382. /package/{esm2020 → esm2022}/lib/utils/colors.utils.mjs +0 -0
  383. /package/{esm2020 → esm2022}/lib/utils/date.utils.mjs +0 -0
  384. /package/{esm2020 → esm2022}/lib/utils/file.utils.mjs +0 -0
  385. /package/{esm2020 → esm2022}/lib/utils/font-awesome.utils.mjs +0 -0
  386. /package/{esm2020 → esm2022}/lib/utils/form-data.utils.mjs +0 -0
  387. /package/{esm2020 → esm2022}/lib/utils/http-status.utils.mjs +0 -0
  388. /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
  389. /package/{esm2020 → esm2022}/lib/utils/keyboard.utils.mjs +0 -0
  390. /package/{esm2020 → esm2022}/lib/utils/lexorank.utils.mjs +0 -0
  391. /package/{esm2020 → esm2022}/lib/utils/modal.utils.mjs +0 -0
  392. /package/{esm2020 → esm2022}/lib/utils/number.utils.mjs +0 -0
  393. /package/{esm2020 → esm2022}/lib/utils/object.utils.mjs +0 -0
  394. /package/{esm2020 → esm2022}/lib/utils/promise.utils.mjs +0 -0
  395. /package/{esm2020 → esm2022}/lib/utils/public-api.mjs +0 -0
  396. /package/{esm2020 → esm2022}/lib/utils/query-params.utils.mjs +0 -0
  397. /package/{esm2020 → esm2022}/lib/utils/type.utils.mjs +0 -0
  398. /package/{esm2020 → esm2022}/lib/utils/url.utils.mjs +0 -0
  399. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  400. /package/{esm2020 → esm2022}/recursyve-nice-ui-kit.v2.mjs +0 -0
@@ -1,595 +0,0 @@
1
- import { animate, AnimationBuilder, style } from "@angular/animations";
2
- import { coerceBooleanProperty } from "@angular/cdk/coercion";
3
- import { ScrollStrategyOptions } from "@angular/cdk/overlay";
4
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, QueryList, Renderer2, ViewChild, ViewChildren, ViewEncapsulation } from "@angular/core";
5
- import { NavigationEnd, Router } from "@angular/router";
6
- import { merge, ReplaySubject } from "rxjs";
7
- import { delay, filter, takeUntil } from "rxjs/operators";
8
- import { niceAnimations } from "../../../animations";
9
- import { NiceScrollbarDirective } from "../../../directives/scrollbar";
10
- import { NiceUtilsService } from "../../../providers/utils";
11
- import { NiceNavigationComponent } from "../navigation.component";
12
- import { NiceNavigationService } from "../navigation.service";
13
- import { NiceNavigationHintService } from "../providers/hint.service";
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "../navigation.service";
16
- import * as i2 from "../../../providers/utils";
17
- import * as i3 from "@angular/animations";
18
- import * as i4 from "@angular/router";
19
- import * as i5 from "@angular/cdk/overlay";
20
- import * as i6 from "../providers/hint.service";
21
- import * as i7 from "@angular/common";
22
- import * as i8 from "../../../directives/scrollbar/scrollbar.directive";
23
- import * as i9 from "./components/aside/aside.component";
24
- import * as i10 from "./components/basic/basic.component";
25
- import * as i11 from "./components/collapsable/collapsable.component";
26
- import * as i12 from "./components/divider/divider.component";
27
- import * as i13 from "./components/group/group.component";
28
- import * as i14 from "./components/spacer/spacer.component";
29
- import * as i15 from "../pipes/should-hide.pipe";
30
- export class NiceVerticalNavigationComponent extends NiceNavigationComponent {
31
- set navigation(navigation) {
32
- this._navigation = navigation;
33
- this._changeDetectorRef.markForCheck();
34
- }
35
- get navigation() {
36
- return this._navigation;
37
- }
38
- set forceHovered(forceHovered) {
39
- this._forceHovered = forceHovered;
40
- this.hoveredChanged.next((this.hovered || this._forceHovered) || this.hasHint);
41
- this._changeDetectorRef.markForCheck();
42
- }
43
- /**
44
- * Constructor
45
- */
46
- constructor(_changeDetectorRef, _niceNavigationService, _niceUtilsService, _animationBuilder, _elementRef, _renderer2, _router, _scrollStrategyOptions, _hintService) {
47
- super(_changeDetectorRef, _niceNavigationService, _niceUtilsService);
48
- this._animationBuilder = _animationBuilder;
49
- this._elementRef = _elementRef;
50
- this._renderer2 = _renderer2;
51
- this._router = _router;
52
- this._scrollStrategyOptions = _scrollStrategyOptions;
53
- this._hintService = _hintService;
54
- this._forceHovered = false;
55
- this._animationsEnabled = false;
56
- this._scrollStrategy = this._scrollStrategyOptions.block();
57
- this.name = this._niceUtilsService.randomId();
58
- this.appearance = "default";
59
- this.autoCollapse = true;
60
- this.inner = false;
61
- this.mode = "side";
62
- this.opened = true;
63
- this.hovered = false;
64
- this.hasHint = false;
65
- this.position = "left";
66
- this.showTooltips = false;
67
- this.transparentOverlay = false;
68
- this.tooltipPosition = "after";
69
- this.appearanceChanged = new EventEmitter();
70
- this.modeChanged = new EventEmitter();
71
- this.openedChanged = new EventEmitter();
72
- this.hoveredChanged = new EventEmitter();
73
- this.positionChanged = new EventEmitter();
74
- this.activeAsideItemId = null;
75
- this.onCollapsableItemCollapsed = new ReplaySubject(1);
76
- this.onCollapsableItemExpanded = new ReplaySubject(1);
77
- this._handleAsideOverlayClick = () => {
78
- this.closeAside();
79
- };
80
- this._handleOverlayClick = () => {
81
- this.close();
82
- };
83
- }
84
- // -----------------------------------------------------------------------------------------------------
85
- // @ Accessors
86
- // -----------------------------------------------------------------------------------------------------
87
- /**
88
- * Host binding for component classes
89
- */
90
- get classList() {
91
- return {
92
- "nice-vertical-navigation-animations-enabled": this._animationsEnabled,
93
- [`nice-vertical-navigation-appearance-${this.appearance}`]: true,
94
- "nice-vertical-navigation-hover": this.hovered || this._forceHovered,
95
- "nice-vertical-navigation-inner": this.inner,
96
- "nice-vertical-navigation-mode-over": this.mode === "over",
97
- "nice-vertical-navigation-mode-side": this.mode === "side",
98
- "nice-vertical-navigation-opened": this.opened,
99
- "nice-vertical-navigation-position-left": this.position === "left",
100
- "nice-vertical-navigation-position-right": this.position === "right",
101
- "nice-vertical-navigation-has-hint": this.hasHint
102
- };
103
- }
104
- /**
105
- * Host binding for component inline styles
106
- */
107
- get styleList() {
108
- return {
109
- "visibility": this.opened ? "visible" : "hidden"
110
- };
111
- }
112
- /**
113
- * Setter for niceScrollbarDirectives
114
- */
115
- set niceScrollbarDirectives(niceScrollbarDirectives) {
116
- // Store the directives
117
- this._niceScrollbarDirectives = niceScrollbarDirectives;
118
- // Return if there are no directives
119
- if (niceScrollbarDirectives.length === 0) {
120
- return;
121
- }
122
- // Unsubscribe the previous subscriptions
123
- if (this._niceScrollbarDirectivesSubscription) {
124
- this._niceScrollbarDirectivesSubscription.unsubscribe();
125
- }
126
- // Update the scrollbars on collapsable items' collapse/expand
127
- this._niceScrollbarDirectivesSubscription =
128
- merge(this.onCollapsableItemCollapsed, this.onCollapsableItemExpanded)
129
- .pipe(takeUntil(this._unsubscribeAll), delay(250))
130
- .subscribe(() => {
131
- // Loop through the scrollbars and update them
132
- niceScrollbarDirectives.forEach((niceScrollbarDirective) => {
133
- niceScrollbarDirective.update();
134
- });
135
- });
136
- }
137
- // -----------------------------------------------------------------------------------------------------
138
- // @ Lifecycle hooks
139
- // -----------------------------------------------------------------------------------------------------
140
- /**
141
- * On changes
142
- *
143
- * @param changes
144
- */
145
- ngOnChanges(changes) {
146
- super.ngOnChanges(changes);
147
- // Appearance
148
- if ("appearance" in changes) {
149
- // Execute the observable
150
- this.appearanceChanged.next(changes.appearance.currentValue);
151
- }
152
- // Inner
153
- if ("inner" in changes) {
154
- // Coerce the value to a boolean
155
- this.inner = coerceBooleanProperty(changes.inner.currentValue);
156
- }
157
- // Mode
158
- if ("mode" in changes) {
159
- // Get the previous and current values
160
- const currentMode = changes.mode.currentValue;
161
- const previousMode = changes.mode.previousValue;
162
- // Disable the animations
163
- this._disableAnimations();
164
- // If the mode changes: 'over -> side'
165
- if (previousMode === "over" && currentMode === "side") {
166
- // Hide the overlay
167
- this._hideOverlay();
168
- }
169
- // If the mode changes: 'side -> over'
170
- if (previousMode === "side" && currentMode === "over") {
171
- // Close the aside
172
- this.closeAside();
173
- // If the navigation is opened
174
- if (this.opened) {
175
- // Show the overlay
176
- this._showOverlay();
177
- }
178
- }
179
- // Execute the observable
180
- this.modeChanged.next(currentMode);
181
- // Enable the animations after a delay
182
- // The delay must be bigger than the current transition-duration
183
- // to make sure nothing will be animated while the mode changing
184
- setTimeout(() => {
185
- this._enableAnimations();
186
- }, 500);
187
- }
188
- // Opened
189
- if ("opened" in changes) {
190
- // Coerce the value to a boolean
191
- this.opened = coerceBooleanProperty(changes.opened.currentValue);
192
- // Open/close the navigation
193
- this._toggleOpened(this.opened);
194
- }
195
- // Position
196
- if ("position" in changes) {
197
- // Execute the observable
198
- this.positionChanged.next(changes.position.currentValue);
199
- }
200
- // Transparent overlay
201
- if ("transparentOverlay" in changes) {
202
- // Coerce the value to a boolean
203
- this.transparentOverlay = coerceBooleanProperty(changes.transparentOverlay.currentValue);
204
- }
205
- }
206
- /**
207
- * On init
208
- */
209
- ngOnInit() {
210
- super.ngOnInit();
211
- // Make sure the name input is not an empty string
212
- if (this.name === "") {
213
- this.name = this._niceUtilsService.randomId();
214
- }
215
- // Subscribe to the 'NavigationEnd' event
216
- this._router.events
217
- .pipe(filter(event => event instanceof NavigationEnd), takeUntil(this._unsubscribeAll))
218
- .subscribe(() => {
219
- // If the mode is 'over' and the navigation is opened...
220
- if (this.mode === "over" && this.opened) {
221
- // Close the navigation
222
- this.close();
223
- }
224
- // If the mode is 'side' and the aside is active...
225
- if (this.mode === "side" && this.activeAsideItemId) {
226
- // Close the aside
227
- this.closeAside();
228
- }
229
- });
230
- this._hintService.hasActiveHint$.pipe(takeUntil(this._unsubscribeAll)).subscribe(hasHint => {
231
- this.hasHint = hasHint;
232
- this.hoveredChanged.next((this.hovered || this._forceHovered) || this.hasHint);
233
- });
234
- }
235
- /**
236
- * After view init
237
- */
238
- ngAfterViewInit() {
239
- setTimeout(() => {
240
- // Return if 'navigation content' element does not exist
241
- if (!this._navigationContentEl) {
242
- return;
243
- }
244
- // If 'navigation content' element doesn't have
245
- // perfect scrollbar activated on it...
246
- if (!this._navigationContentEl.nativeElement.classList.contains("ps")) {
247
- // Find the active item
248
- const activeItem = this._navigationContentEl.nativeElement.querySelector(".nice-vertical-navigation-item-active");
249
- // If the active item exists, scroll it into view
250
- if (activeItem) {
251
- activeItem.scrollIntoView();
252
- }
253
- }
254
- // Otherwise
255
- else {
256
- // Go through all the scrollbar directives
257
- this._niceScrollbarDirectives.forEach((niceScrollbarDirective) => {
258
- // Skip if not enabled
259
- if (!niceScrollbarDirective.isEnabled()) {
260
- return;
261
- }
262
- // Scroll to the active element
263
- niceScrollbarDirective.scrollToElement(".nice-vertical-navigation-item-active", -120, true);
264
- });
265
- }
266
- });
267
- }
268
- // -----------------------------------------------------------------------------------------------------
269
- // @ Public methods
270
- // -----------------------------------------------------------------------------------------------------
271
- /**
272
- * Open the navigation
273
- */
274
- open() {
275
- // Return if the navigation is already open
276
- if (this.opened) {
277
- return;
278
- }
279
- // Set the opened
280
- this._toggleOpened(true);
281
- }
282
- /**
283
- * Close the navigation
284
- */
285
- close() {
286
- // Return if the navigation is already closed
287
- if (!this.opened) {
288
- return;
289
- }
290
- // Close the aside
291
- this.closeAside();
292
- // Set the opened
293
- this._toggleOpened(false);
294
- }
295
- /**
296
- * Toggle the navigation
297
- */
298
- toggle() {
299
- // Toggle
300
- if (this.opened) {
301
- this.close();
302
- }
303
- else {
304
- this.open();
305
- }
306
- }
307
- /**
308
- * Open the aside
309
- */
310
- openAside(item) {
311
- // Return if the item is disabled
312
- if (item.disabled || !item.id) {
313
- return;
314
- }
315
- // Open
316
- this.activeAsideItemId = item.id;
317
- // Show the aside overlay
318
- this._showAsideOverlay();
319
- // Mark for check
320
- this._changeDetectorRef.markForCheck();
321
- }
322
- /**
323
- * Close the aside
324
- */
325
- closeAside() {
326
- // Close
327
- this.activeAsideItemId = null;
328
- // Hide the aside overlay
329
- this._hideAsideOverlay();
330
- // Mark for check
331
- this._changeDetectorRef.markForCheck();
332
- }
333
- /**
334
- * Toggle the aside
335
- */
336
- toggleAside(item) {
337
- // Toggle
338
- if (this.activeAsideItemId === item.id) {
339
- this.closeAside();
340
- }
341
- else {
342
- this.openAside(item);
343
- }
344
- }
345
- // -----------------------------------------------------------------------------------------------------
346
- // @ Private methods
347
- // -----------------------------------------------------------------------------------------------------
348
- /**
349
- * Enable the animations
350
- *
351
- * @private
352
- */
353
- _enableAnimations() {
354
- // Return if the animations are already enabled
355
- if (this._animationsEnabled) {
356
- return;
357
- }
358
- // Enable the animations
359
- this._animationsEnabled = true;
360
- }
361
- /**
362
- * Disable the animations
363
- *
364
- * @private
365
- */
366
- _disableAnimations() {
367
- // Return if the animations are already disabled
368
- if (!this._animationsEnabled) {
369
- return;
370
- }
371
- // Disable the animations
372
- this._animationsEnabled = false;
373
- }
374
- /**
375
- * Show the overlay
376
- *
377
- * @private
378
- */
379
- _showOverlay() {
380
- // Return if there is already an overlay
381
- if (this._asideOverlay) {
382
- return;
383
- }
384
- // Create the overlay element
385
- this._overlay = this._renderer2.createElement("div");
386
- // Add a class to the overlay element
387
- this._overlay.classList.add("nice-vertical-navigation-overlay");
388
- // Add a class depending on the transparentOverlay option
389
- if (this.transparentOverlay) {
390
- this._overlay.classList.add("nice-vertical-navigation-overlay-transparent");
391
- }
392
- // Append the overlay to the parent of the navigation
393
- this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);
394
- // Enable block scroll strategy
395
- this._scrollStrategy.enable();
396
- // Create the enter animation and attach it to the player
397
- this._player = this._animationBuilder.build([
398
- animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 1 }))
399
- ]).create(this._overlay);
400
- // Play the animation
401
- this._player.play();
402
- // Add an event listener to the overlay
403
- this._overlay.addEventListener("click", this._handleOverlayClick);
404
- }
405
- /**
406
- * Hide the overlay
407
- *
408
- * @private
409
- */
410
- _hideOverlay() {
411
- if (!this._overlay) {
412
- return;
413
- }
414
- // Create the leave animation and attach it to the player
415
- this._player = this._animationBuilder.build([
416
- animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 0 }))
417
- ]).create(this._overlay);
418
- // Play the animation
419
- this._player.play();
420
- // Once the animation is done...
421
- this._player.onDone(() => {
422
- // If the overlay still exists...
423
- if (this._overlay) {
424
- // Remove the event listener
425
- this._overlay.removeEventListener("click", this._handleOverlayClick);
426
- // Remove the overlay
427
- this._overlay.parentNode.removeChild(this._overlay);
428
- this._overlay = null;
429
- }
430
- // Disable block scroll strategy
431
- this._scrollStrategy.disable();
432
- });
433
- }
434
- /**
435
- * Show the aside overlay
436
- *
437
- * @private
438
- */
439
- _showAsideOverlay() {
440
- // Return if there is already an overlay
441
- if (this._asideOverlay) {
442
- return;
443
- }
444
- // Create the aside overlay element
445
- this._asideOverlay = this._renderer2.createElement("div");
446
- // Add a class to the aside overlay element
447
- this._asideOverlay.classList.add("nice-vertical-navigation-aside-overlay");
448
- // Append the aside overlay to the parent of the navigation
449
- this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._asideOverlay);
450
- // Create the enter animation and attach it to the player
451
- this._player =
452
- this._animationBuilder
453
- .build([
454
- animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 1 }))
455
- ]).create(this._asideOverlay);
456
- // Play the animation
457
- this._player.play();
458
- // Add an event listener to the aside overlay
459
- this._asideOverlay.addEventListener("click", this._handleAsideOverlayClick);
460
- }
461
- /**
462
- * Hide the aside overlay
463
- *
464
- * @private
465
- */
466
- _hideAsideOverlay() {
467
- if (!this._asideOverlay) {
468
- return;
469
- }
470
- // Create the leave animation and attach it to the player
471
- this._player =
472
- this._animationBuilder
473
- .build([
474
- animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 0 }))
475
- ]).create(this._asideOverlay);
476
- // Play the animation
477
- this._player.play();
478
- // Once the animation is done...
479
- this._player.onDone(() => {
480
- // If the aside overlay still exists...
481
- if (this._asideOverlay) {
482
- // Remove the event listener
483
- this._asideOverlay.removeEventListener("click", this._handleAsideOverlayClick);
484
- // Remove the aside overlay
485
- this._asideOverlay.parentNode.removeChild(this._asideOverlay);
486
- this._asideOverlay = null;
487
- }
488
- });
489
- }
490
- /**
491
- * On mouseenter
492
- */
493
- _onMouseenter() {
494
- // Enable the animations
495
- this._enableAnimations();
496
- // Set the hovered
497
- this.hovered = true;
498
- this.hoveredChanged.next(this.hovered || this._forceHovered);
499
- }
500
- /**
501
- * On mouseleave
502
- */
503
- _onMouseleave() {
504
- // Enable the animations
505
- this._enableAnimations();
506
- // Set the hovered
507
- this.hovered = false;
508
- this.hoveredChanged.next(this.hovered || this._forceHovered || this.hasHint);
509
- }
510
- /**
511
- * Open/close the navigation
512
- *
513
- * @param open
514
- * @private
515
- */
516
- _toggleOpened(open) {
517
- // Set the opened
518
- this.opened = open;
519
- // Enable the animations
520
- this._enableAnimations();
521
- // If the navigation opened, and the mode
522
- // is 'over', show the overlay
523
- if (this.mode === "over") {
524
- if (this.opened) {
525
- this._showOverlay();
526
- }
527
- else {
528
- this._hideOverlay();
529
- }
530
- }
531
- // Execute the observable
532
- this.openedChanged.next(open);
533
- }
534
- }
535
- NiceVerticalNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceVerticalNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NiceNavigationService }, { token: i2.NiceUtilsService }, { token: i3.AnimationBuilder }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i4.Router }, { token: i5.ScrollStrategyOptions }, { token: i6.NiceNavigationHintService }], target: i0.ɵɵFactoryTarget.Component });
536
- NiceVerticalNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NiceVerticalNavigationComponent, selector: "nice-vertical-navigation", inputs: { name: "name", appearance: "appearance", autoCollapse: "autoCollapse", inner: "inner", mode: "mode", opened: "opened", hovered: "hovered", hasHint: "hasHint", position: "position", showTooltips: "showTooltips", transparentOverlay: "transparentOverlay", tooltipPosition: "tooltipPosition", navigation: "navigation" }, outputs: { appearanceChanged: "appearanceChanged", modeChanged: "modeChanged", openedChanged: "openedChanged", hoveredChanged: "hoveredChanged", positionChanged: "positionChanged" }, host: { listeners: { "mouseenter": "_onMouseenter()", "mouseleave": "_onMouseleave()" }, properties: { "class": "this.classList", "style": "this.styleList" } }, viewQueries: [{ propertyName: "_navigationContentEl", first: true, predicate: ["navigationContent"], descendants: true }, { propertyName: "niceScrollbarDirectives", predicate: NiceScrollbarDirective, descendants: true }], exportAs: ["niceVerticalNavigation"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NiceScrollbarDirective, selector: "[niceScrollbar]", inputs: ["niceScrollbar", "niceScrollbarOptions"], exportAs: ["niceScrollbar"] }, { kind: "component", type: i9.NiceVerticalNavigationAsideItemComponent, selector: "nice-vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "name", "showTooltips", "skipChildren", "tooltipPosition"] }, { kind: "component", type: i10.NiceVerticalNavigationBasicItemComponent, selector: "nice-vertical-navigation-basic-item", inputs: ["item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i11.NiceVerticalNavigationCollapsableItemComponent, selector: "nice-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i12.NiceVerticalNavigationDividerItemComponent, selector: "nice-vertical-navigation-divider-item", inputs: ["item", "name"] }, { kind: "component", type: i13.NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i14.NiceVerticalNavigationSpacerItemComponent, selector: "nice-vertical-navigation-spacer-item", inputs: ["item", "name"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i15.NiceShouldHidePipe, name: "niceShouldHide" }], animations: niceAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
537
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceVerticalNavigationComponent, decorators: [{
538
- type: Component,
539
- args: [{ selector: "nice-vertical-navigation", animations: niceAnimations, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: "niceVerticalNavigation", template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n" }]
540
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NiceNavigationService }, { type: i2.NiceUtilsService }, { type: i3.AnimationBuilder }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i4.Router }, { type: i5.ScrollStrategyOptions }, { type: i6.NiceNavigationHintService }]; }, propDecorators: { name: [{
541
- type: Input
542
- }], appearance: [{
543
- type: Input
544
- }], autoCollapse: [{
545
- type: Input
546
- }], inner: [{
547
- type: Input
548
- }], mode: [{
549
- type: Input
550
- }], opened: [{
551
- type: Input
552
- }], hovered: [{
553
- type: Input
554
- }], hasHint: [{
555
- type: Input
556
- }], position: [{
557
- type: Input
558
- }], showTooltips: [{
559
- type: Input
560
- }], transparentOverlay: [{
561
- type: Input
562
- }], tooltipPosition: [{
563
- type: Input
564
- }], appearanceChanged: [{
565
- type: Output
566
- }], modeChanged: [{
567
- type: Output
568
- }], openedChanged: [{
569
- type: Output
570
- }], hoveredChanged: [{
571
- type: Output
572
- }], positionChanged: [{
573
- type: Output
574
- }], _navigationContentEl: [{
575
- type: ViewChild,
576
- args: ["navigationContent"]
577
- }], navigation: [{
578
- type: Input
579
- }], classList: [{
580
- type: HostBinding,
581
- args: ["class"]
582
- }], styleList: [{
583
- type: HostBinding,
584
- args: ["style"]
585
- }], niceScrollbarDirectives: [{
586
- type: ViewChildren,
587
- args: [NiceScrollbarDirective]
588
- }], _onMouseenter: [{
589
- type: HostListener,
590
- args: ["mouseenter"]
591
- }], _onMouseleave: [{
592
- type: HostListener,
593
- args: ["mouseleave"]
594
- }] } });
595
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBa0IscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStC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ciwgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQgeyBTY3JvbGxTdHJhdGVneSwgU2Nyb2xsU3RyYXRlZ3lPcHRpb25zIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IG1lcmdlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBuaWNlQW5pbWF0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9hbmltYXRpb25zXCI7XG5pbXBvcnQgeyBOaWNlU2Nyb2xsYmFyRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvc2Nyb2xsYmFyXCI7XG5pbXBvcnQgeyBOaWNlVXRpbHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3Byb3ZpZGVycy91dGlsc1wiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vbmF2aWdhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IE5pY2VOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gICAgTmljZU5hdmlnYXRpb25JdGVtLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25BcHBlYXJhbmNlLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Nb2RlLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Qb3NpdGlvblxufSBmcm9tIFwiLi4vbmF2aWdhdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25IaW50U2VydmljZSB9IGZyb20gXCIuLi9wcm92aWRlcnMvaGludC5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvblwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vdmVydGljYWwuY29tcG9uZW50Lmh0bWxcIixcbiAgICBhbmltYXRpb25zOiBuaWNlQW5pbWF0aW9ucyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGV4cG9ydEFzOiBcIm5pY2VWZXJ0aWNhbE5hdmlnYXRpb25cIlxufSlcbmV4cG9ydCBjbGFzcyBOaWNlVmVydGljYWxOYXZpZ2F0aW9uQ29tcG9uZW50IGV4dGVuZHMgTmljZU5hdmlnYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBwdWJsaWMgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2lubmVyOiBCb29sZWFuSW5wdXQ7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBwdWJsaWMgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29wZW5lZDogQm9vbGVhbklucHV0O1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgcHVibGljIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV90cmFuc3BhcmVudE92ZXJsYXk6IEJvb2xlYW5JbnB1dDtcblxuICAgIHByaXZhdGUgX2ZvcmNlSG92ZXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2FuaW1hdGlvbnNFbmFibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYXNpZGVPdmVybGF5OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVBc2lkZU92ZXJsYXlDbGljazogYW55O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZU92ZXJsYXlDbGljazogYW55O1xuICAgIHByaXZhdGUgX292ZXJsYXk6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgX3BsYXllcjogQW5pbWF0aW9uUGxheWVyO1xuICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneSA9IHRoaXMuX3Njcm9sbFN0cmF0ZWd5T3B0aW9ucy5ibG9jaygpO1xuICAgIHByaXZhdGUgX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzITogUXVlcnlMaXN0PE5pY2VTY3JvbGxiYXJEaXJlY3RpdmU+O1xuICAgIHByaXZhdGUgX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSB0aGlzLl9uaWNlVXRpbHNTZXJ2aWNlLnJhbmRvbUlkKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhcHBlYXJhbmNlOiBOaWNlVmVydGljYWxOYXZpZ2F0aW9uQXBwZWFyYW5jZSA9IFwiZGVmYXVsdFwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b0NvbGxhcHNlID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlubmVyID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtb2RlOiBOaWNlVmVydGljYWxOYXZpZ2F0aW9uTW9kZSA9IFwic2lkZVwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3BlbmVkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhvdmVyZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhhc0hpbnQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBvc2l0aW9uOiBOaWNlVmVydGljYWxOYXZpZ2F0aW9uUG9zaXRpb24gPSBcImxlZnRcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dUb29sdGlwcyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHJhbnNwYXJlbnRPdmVybGF5ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0b29sdGlwUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9IFwiYWZ0ZXJcIjtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBhcHBlYXJhbmNlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TmljZVZlcnRpY2FsTmF2aWdhdGlvbkFwcGVhcmFuY2U+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Nb2RlPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IG9wZW5lZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgaG92ZXJlZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlVmVydGljYWxOYXZpZ2F0aW9uUG9zaXRpb24+KCk7XG5cbiAgICBAVmlld0NoaWxkKFwibmF2aWdhdGlvbkNvbnRlbnRcIilcbiAgICBwcml2YXRlIF9uYXZpZ2F0aW9uQ29udGVudEVsOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG5hdmlnYXRpb24obmF2aWdhdGlvbjogTmljZU5hdmlnYXRpb25JdGVtW10pIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvbiA9IG5hdmlnYXRpb247XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IG5hdmlnYXRpb24oKTogTmljZU5hdmlnYXRpb25JdGVtW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGZvcmNlSG92ZXJlZChmb3JjZUhvdmVyZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZm9yY2VIb3ZlcmVkID0gZm9yY2VIb3ZlcmVkO1xuICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQoKHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQpIHx8IHRoaXMuaGFzSGludCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhY3RpdmVBc2lkZUl0ZW1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIG9uQ29sbGFwc2FibGVJdGVtQ29sbGFwc2VkID0gbmV3IFJlcGxheVN1YmplY3Q8TmljZU5hdmlnYXRpb25JdGVtPigxKTtcbiAgICBwdWJsaWMgb25Db2xsYXBzYWJsZUl0ZW1FeHBhbmRlZCA9IG5ldyBSZXBsYXlTdWJqZWN0PE5pY2VOYXZpZ2F0aW9uSXRlbT4oMSk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBfbmljZU5hdmlnYXRpb25TZXJ2aWNlOiBOaWNlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIF9uaWNlVXRpbHNTZXJ2aWNlOiBOaWNlVXRpbHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9hbmltYXRpb25CdWlsZGVyOiBBbmltYXRpb25CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5T3B0aW9uczogU2Nyb2xsU3RyYXRlZ3lPcHRpb25zLFxuICAgICAgICBwcml2YXRlIF9oaW50U2VydmljZTogTmljZU5hdmlnYXRpb25IaW50U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYsIF9uaWNlTmF2aWdhdGlvblNlcnZpY2UsIF9uaWNlVXRpbHNTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLl9oYW5kbGVBc2lkZU92ZXJsYXlDbGljayA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9oYW5kbGVPdmVybGF5Q2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBAIEFjY2Vzc29yc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBIb3N0IGJpbmRpbmcgZm9yIGNvbXBvbmVudCBjbGFzc2VzXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3NcIilcbiAgICBwdWJsaWMgZ2V0IGNsYXNzTGlzdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYW5pbWF0aW9ucy1lbmFibGVkXCI6IHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkLFxuICAgICAgICAgICAgW2BuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXBwZWFyYW5jZS0ke3RoaXMuYXBwZWFyYW5jZX1gXTogdHJ1ZSxcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWhvdmVyXCI6IHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pbm5lclwiOiB0aGlzLmlubmVyLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tbW9kZS1vdmVyXCI6IHRoaXMubW9kZSA9PT0gXCJvdmVyXCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1tb2RlLXNpZGVcIjogdGhpcy5tb2RlID09PSBcInNpZGVcIixcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW9wZW5lZFwiOiB0aGlzLm9wZW5lZCxcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXBvc2l0aW9uLWxlZnRcIjogdGhpcy5wb3NpdGlvbiA9PT0gXCJsZWZ0XCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1wb3NpdGlvbi1yaWdodFwiOiB0aGlzLnBvc2l0aW9uID09PSBcInJpZ2h0XCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1oYXMtaGludFwiOiB0aGlzLmhhc0hpbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIb3N0IGJpbmRpbmcgZm9yIGNvbXBvbmVudCBpbmxpbmUgc3R5bGVzXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKFwic3R5bGVcIilcbiAgICBwdWJsaWMgZ2V0IHN0eWxlTGlzdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCI6IHRoaXMub3BlbmVkID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dGVyIGZvciBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1xuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oTmljZVNjcm9sbGJhckRpcmVjdGl2ZSlcbiAgICBwdWJsaWMgc2V0IG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzOiBRdWVyeUxpc3Q8TmljZVNjcm9sbGJhckRpcmVjdGl2ZT4pIHtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGRpcmVjdGl2ZXNcbiAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMgPSBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcztcblxuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgYXJlIG5vIGRpcmVjdGl2ZXNcbiAgICAgICAgaWYgKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgdGhlIHByZXZpb3VzIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgaWYgKHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzY3JvbGxiYXJzIG9uIGNvbGxhcHNhYmxlIGl0ZW1zJyBjb2xsYXBzZS9leHBhbmRcbiAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24gPVxuICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNhYmxlSXRlbUNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2FibGVJdGVtRXhwYW5kZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgICAgICAgICAgICAgICAgICAgZGVsYXkoMjUwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHNjcm9sbGJhcnMgYW5kIHVwZGF0ZSB0aGVtXG4gICAgICAgICAgICAgICAgICAgIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzLmZvckVhY2goKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBMaWZlY3ljbGUgaG9va3NcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogT24gY2hhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcblxuICAgICAgICAvLyBBcHBlYXJhbmNlXG4gICAgICAgIGlmIChcImFwcGVhcmFuY2VcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICB0aGlzLmFwcGVhcmFuY2VDaGFuZ2VkLm5leHQoY2hhbmdlcy5hcHBlYXJhbmNlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbm5lclxuICAgICAgICBpZiAoXCJpbm5lclwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgdmFsdWUgdG8gYSBib29sZWFuXG4gICAgICAgICAgICB0aGlzLmlubmVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMuaW5uZXIuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vZGVcbiAgICAgICAgaWYgKFwibW9kZVwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQgdmFsdWVzXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9kZSA9IGNoYW5nZXMubW9kZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c01vZGUgPSBjaGFuZ2VzLm1vZGUucHJldmlvdXNWYWx1ZTtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgY2hhbmdlczogJ292ZXIgLT4gc2lkZSdcbiAgICAgICAgICAgIGlmIChwcmV2aW91c01vZGUgPT09IFwib3ZlclwiICYmIGN1cnJlbnRNb2RlID09PSBcInNpZGVcIikge1xuICAgICAgICAgICAgICAgIC8vIEhpZGUgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kZSBjaGFuZ2VzOiAnc2lkZSAtPiBvdmVyJ1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzTW9kZSA9PT0gXCJzaWRlXCIgJiYgY3VycmVudE1vZGUgPT09IFwib3ZlclwiKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGFzaWRlXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBpcyBvcGVuZWRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdyB0aGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93T3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICAgICAgdGhpcy5tb2RlQ2hhbmdlZC5uZXh0KGN1cnJlbnRNb2RlKTtcblxuICAgICAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zIGFmdGVyIGEgZGVsYXlcbiAgICAgICAgICAgIC8vIFRoZSBkZWxheSBtdXN0IGJlIGJpZ2dlciB0aGFuIHRoZSBjdXJyZW50IHRyYW5zaXRpb24tZHVyYXRpb25cbiAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdpbGwgYmUgYW5pbWF0ZWQgd2hpbGUgdGhlIG1vZGUgY2hhbmdpbmdcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPcGVuZWRcbiAgICAgICAgaWYgKFwib3BlbmVkXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSB2YWx1ZSB0byBhIGJvb2xlYW5cbiAgICAgICAgICAgIHRoaXMub3BlbmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMub3BlbmVkLmN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIE9wZW4vY2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5lZCh0aGlzLm9wZW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQb3NpdGlvblxuICAgICAgICBpZiAoXCJwb3NpdGlvblwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG9ic2VydmFibGVcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25DaGFuZ2VkLm5leHQoY2hhbmdlcy5wb3NpdGlvbi5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJhbnNwYXJlbnQgb3ZlcmxheVxuICAgICAgICBpZiAoXCJ0cmFuc3BhcmVudE92ZXJsYXlcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBDb2VyY2UgdGhlIHZhbHVlIHRvIGEgYm9vbGVhblxuICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVudE92ZXJsYXkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoY2hhbmdlcy50cmFuc3BhcmVudE92ZXJsYXkuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGluaXRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlucHV0IGlzIG5vdCBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgaWYgKHRoaXMubmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5fbmljZVV0aWxzU2VydmljZS5yYW5kb21JZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSAnTmF2aWdhdGlvbkVuZCcgZXZlbnRcbiAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgaXMgJ292ZXInIGFuZCB0aGUgbmF2aWdhdGlvbiBpcyBvcGVuZWQuLi5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcIm92ZXJcIiAmJiB0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgbmF2aWdhdGlvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgaXMgJ3NpZGUnIGFuZCB0aGUgYXNpZGUgaXMgYWN0aXZlLi4uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJzaWRlXCIgJiYgdGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgYXNpZGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5faGludFNlcnZpY2UuaGFzQWN0aXZlSGludCQucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKS5zdWJzY3JpYmUoaGFzSGludCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhc0hpbnQgPSBoYXNIaW50O1xuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KCh0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkKSB8fCB0aGlzLmhhc0hpbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZnRlciB2aWV3IGluaXRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgLy8gUmV0dXJuIGlmICduYXZpZ2F0aW9uIGNvbnRlbnQnIGVsZW1lbnQgZG9lcyBub3QgZXhpc3RcbiAgICAgICAgICAgIGlmICghdGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgJ25hdmlnYXRpb24gY29udGVudCcgZWxlbWVudCBkb2Vzbid0IGhhdmVcbiAgICAgICAgICAgIC8vIHBlcmZlY3Qgc2Nyb2xsYmFyIGFjdGl2YXRlZCBvbiBpdC4uLlxuICAgICAgICAgICAgaWYgKCF0aGlzLl9uYXZpZ2F0aW9uQ29udGVudEVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicHNcIikpIHtcbiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBhY3RpdmUgaXRlbVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9uYXZpZ2F0aW9uQ29udGVudEVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1hY3RpdmVcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYWN0aXZlIGl0ZW0gZXhpc3RzLCBzY3JvbGwgaXQgaW50byB2aWV3XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXRlbS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwgdGhlIHNjcm9sbGJhciBkaXJlY3RpdmVzXG4gICAgICAgICAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMuZm9yRWFjaCgobmljZVNjcm9sbGJhckRpcmVjdGl2ZSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgbm90IGVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBTY3JvbGwgdG8gdGhlIGFjdGl2ZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUuc2Nyb2xsVG9FbGVtZW50KFwiLm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWFjdGl2ZVwiLCAtMTIwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBAIFB1YmxpYyBtZXRob2RzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gdGhlIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIGFscmVhZHkgb3BlblxuICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgb3BlbmVkXG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5lZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIGFscmVhZHkgY2xvc2VkXG4gICAgICAgIGlmICghdGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsb3NlIHRoZSBhc2lkZVxuICAgICAgICB0aGlzLmNsb3NlQXNpZGUoKTtcblxuICAgICAgICAvLyBTZXQgdGhlIG9wZW5lZFxuICAgICAgICB0aGlzLl90b2dnbGVPcGVuZWQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSB0aGUgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgICAgIC8vIFRvZ2dsZVxuICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiB0aGUgYXNpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbkFzaWRlKGl0ZW06IE5pY2VOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIGl0ZW0gaXMgZGlzYWJsZWRcbiAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQgfHwgIWl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wZW5cbiAgICAgICAgdGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCA9IGl0ZW0uaWQ7XG5cbiAgICAgICAgLy8gU2hvdyB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAgICB0aGlzLl9zaG93QXNpZGVPdmVybGF5KCk7XG5cbiAgICAgICAgLy8gTWFyayBmb3IgY2hlY2tcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIGFzaWRlXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlQXNpZGUoKTogdm9pZCB7XG4gICAgICAgIC8vIENsb3NlXG4gICAgICAgIHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQgPSBudWxsO1xuXG4gICAgICAgIC8vIEhpZGUgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5faGlkZUFzaWRlT3ZlcmxheSgpO1xuXG4gICAgICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSB0aGUgYXNpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlQXNpZGUoaXRlbTogTmljZU5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIC8vIFRvZ2dsZVxuICAgICAgICBpZiAodGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCA9PT0gaXRlbS5pZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Bc2lkZShpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBQcml2YXRlIG1ldGhvZHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2VuYWJsZUFuaW1hdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgYW5pbWF0aW9ucyBhcmUgYWxyZWFkeSBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLl9hbmltYXRpb25zRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVBbmltYXRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIGFuaW1hdGlvbnMgYXJlIGFscmVhZHkgZGlzYWJsZWRcbiAgICAgICAgaWYgKCF0aGlzLl9hbmltYXRpb25zRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9hbmltYXRpb25zRW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2hvd092ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIG92ZXJsYXlcbiAgICAgICAgaWYgKHRoaXMuX2FzaWRlT3ZlcmxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fb3ZlcmxheSA9IHRoaXMuX3JlbmRlcmVyMi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNsYXNzIHRvIHRoZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fb3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW92ZXJsYXlcIik7XG5cbiAgICAgICAgLy8gQWRkIGEgY2xhc3MgZGVwZW5kaW5nIG9uIHRoZSB0cmFuc3BhcmVudE92ZXJsYXkgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50T3ZlcmxheSkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW92ZXJsYXktdHJhbnNwYXJlbnRcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBlbmQgdGhlIG92ZXJsYXkgdG8gdGhlIHBhcmVudCBvZiB0aGUgbmF2aWdhdGlvblxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQsIHRoaXMuX292ZXJsYXkpO1xuXG4gICAgICAgIC8vIEVuYWJsZSBibG9jayBzY3JvbGwgc3RyYXRlZ3lcbiAgICAgICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBlbnRlciBhbmltYXRpb24gYW5kIGF0dGFjaCBpdCB0byB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX3BsYXllciA9IHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXIuYnVpbGQoW1xuICAgICAgICAgICAgYW5pbWF0ZShcIjMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpXCIsIHN0eWxlKHtvcGFjaXR5OiAxfSkpXG4gICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9vdmVybGF5KTtcblxuICAgICAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAvLyBBZGQgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5fb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlT3ZlcmxheUNsaWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hpZGVPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX292ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgbGVhdmUgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPSB0aGlzLl9hbmltYXRpb25CdWlsZGVyLmJ1aWxkKFtcbiAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMH0pKVxuICAgICAgICBdKS5jcmVhdGUodGhpcy5fb3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gT25jZSB0aGUgYW5pbWF0aW9uIGlzIGRvbmUuLi5cbiAgICAgICAgdGhpcy5fcGxheWVyLm9uRG9uZSgoKSA9PiB7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBvdmVybGF5IHN0aWxsIGV4aXN0cy4uLlxuICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJsYXkpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlT3ZlcmxheUNsaWNrKTtcblxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9vdmVybGF5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBibG9jayBzY3JvbGwgc3RyYXRlZ3lcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdyB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG93QXNpZGVPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgYXNpZGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheSA9IHRoaXMuX3JlbmRlcmVyMi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNsYXNzIHRvIHRoZSBhc2lkZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtb3ZlcmxheVwiKTtcblxuICAgICAgICAvLyBBcHBlbmQgdGhlIGFzaWRlIG92ZXJsYXkgdG8gdGhlIHBhcmVudCBvZiB0aGUgbmF2aWdhdGlvblxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQsIHRoaXMuX2FzaWRlT3ZlcmxheSk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBlbnRlciBhbmltYXRpb24gYW5kIGF0dGFjaCBpdCB0byB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX3BsYXllciA9XG4gICAgICAgICAgICB0aGlzLl9hbmltYXRpb25CdWlsZGVyXG4gICAgICAgICAgICAgICAgLmJ1aWxkKFtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZShcIjMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpXCIsIHN0eWxlKHtvcGFjaXR5OiAxfSkpXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKHRoaXMuX2FzaWRlT3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQXNpZGVPdmVybGF5Q2xpY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGlkZUFzaWRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgbGVhdmUgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPVxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uQnVpbGRlclxuICAgICAgICAgICAgICAgIC5idWlsZChbXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMH0pKVxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9hc2lkZU92ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIE9uY2UgdGhlIGFuaW1hdGlvbiBpcyBkb25lLi4uXG4gICAgICAgIHRoaXMuX3BsYXllci5vbkRvbmUoKCkgPT4ge1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgYXNpZGUgb3ZlcmxheSBzdGlsbCBleGlzdHMuLi5cbiAgICAgICAgICAgIGlmICh0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVBc2lkZU92ZXJsYXlDbGljayk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9hc2lkZU92ZXJsYXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIG1vdXNlZW50ZXJcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKFwibW91c2VlbnRlclwiKVxuICAgIHB1YmxpYyBfb25Nb3VzZWVudGVyKCk6IHZvaWQge1xuICAgICAgICAvLyBFbmFibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fZW5hYmxlQW5pbWF0aW9ucygpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgaG92ZXJlZFxuICAgICAgICB0aGlzLmhvdmVyZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gbW91c2VsZWF2ZVxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIpXG4gICAgcHVibGljIF9vbk1vdXNlbGVhdmUoKTogdm9pZCB7XG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBob3ZlcmVkXG4gICAgICAgIHRoaXMuaG92ZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCB8fCB0aGlzLmhhc0hpbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4vY2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF90b2dnbGVPcGVuZWQob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvLyBTZXQgdGhlIG9wZW5lZFxuICAgICAgICB0aGlzLm9wZW5lZCA9IG9wZW47XG5cbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBvcGVuZWQsIGFuZCB0aGUgbW9kZVxuICAgICAgICAvLyBpcyAnb3ZlcicsIHNob3cgdGhlIG92ZXJsYXlcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJvdmVyXCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dPdmVybGF5KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGVPdmVybGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgIHRoaXMub3BlbmVkQ2hhbmdlZC5uZXh0KG9wZW4pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24td3JhcHBlclwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taGVhZGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuaWNlVmVydGljYWxOYXZpZ2F0aW9uSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ29udGVudCAtLT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbnRlbnRcIlxuICAgICAgICBuaWNlU2Nyb2xsYmFyXG4gICAgICAgIFtuaWNlU2Nyb2xsYmFyT3B0aW9uc109XCJ7IHdoZWVsUHJvcGFnYXRpb246IGlubmVyLCBzdXBwcmVzc1Njcm9sbFg6IHRydWUgfVwiXG4gICAgICAgICNuYXZpZ2F0aW9uQ29udGVudFxuICAgID5cbiAgICAgICAgPCEtLSBDb250ZW50IGhlYWRlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb250ZW50LWhlYWRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db250ZW50SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBJdGVtcyAtLT5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBuYXZpZ2F0aW9uOyB0cmFja0J5OiB0cmFja0J5Rm5cIiBbQC5kaXNhYmxlZF09XCIhYW5pbWF0ZU5leHROYXZDaGFuZ2VcIiBAc2xpZGVJblJpZ2h0PlxuICAgICAgICAgICAgPCEtLSBTa2lwIHRoZSBoaWRkZW4gaXRlbXMgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpdGVtIHwgbmljZVNob3VsZEhpZGUgfCBhc3luYylcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEFzaWRlIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2FzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1JZF09XCJhY3RpdmVBc2lkZUl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NraXBDaGlsZHJlbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBc2lkZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEJhc2ljIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYmFzaWMtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2Jhc2ljJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWJhc2ljLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIENvbGxhcHNhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29sbGFwc2FibGUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2NvbGxhcHNhYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29sbGFwc2FibGUtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gRGl2aWRlciAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWRpdmlkZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2RpdmlkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1kaXZpZGVyLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEdyb3VwIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2dyb3VwJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gU3BhY2VyIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tc3BhY2VyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzcGFjZXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1zcGFjZXItaXRlbT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENvbnRlbnQgZm9vdGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbnRlbnQtZm9vdGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmljZVZlcnRpY2FsTmF2aWdhdGlvbkNvbnRlbnRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Gb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gQXNpZGUgLS0+XG48ZGl2XG4gICAgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtd3JhcHBlclwiXG4gICAgKm5nSWY9XCJhY3RpdmVBc2lkZUl0ZW1JZFwiXG4gICAgbmljZVNjcm9sbGJhclxuICAgIFtuaWNlU2Nyb2xsYmFyT3B0aW9uc109XCJ7IHdoZWVsUHJvcGFnYXRpb246IGZhbHNlLCBzdXBwcmVzc1Njcm9sbFg6IHRydWUgfVwiXG4gICAgW0BmYWRlSW5MZWZ0XT1cInBvc2l0aW9uID09PSAnbGVmdCdcIlxuICAgIFtAZmFkZUluUmlnaHRdPVwicG9zaXRpb24gPT09ICdyaWdodCdcIlxuICAgIFtAZmFkZU91dExlZnRdPVwicG9zaXRpb24gPT09ICdsZWZ0J1wiXG4gICAgW0BmYWRlT3V0UmlnaHRdPVwicG9zaXRpb24gPT09ICdyaWdodCdcIlxuPlxuXG4gICAgPCEtLSBJdGVtcyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5hdmlnYXRpb247IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICA8IS0tIFNraXAgdGhlIGhpZGRlbiBpdGVtcyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpdGVtLmhpZGRlbiAmJiAhaXRlbS5oaWRkZW4oaXRlbSkpIHx8ICFpdGVtLmhpZGRlblwiPlxuICAgICAgICAgICAgPCEtLSBBc2lkZSAtLT5cbiAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnYXNpZGUnICYmIGl0ZW0uaWQgPT09IGFjdGl2ZUFzaWRlSXRlbUlkXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hc2lkZS1pdGVtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19