@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
@@ -10,5 +10,5 @@ export declare class NiceModalOpenerDirective<T, Return, Data> {
10
10
  constructor(dialog: MatDialog, modal: Type<T>, options: MatDialogConfig<Data>);
11
11
  open(): void;
12
12
  static ɵfac: i0.ɵɵFactoryDeclaration<NiceModalOpenerDirective<any, any, any>, never>;
13
- static ɵdir: i0.ɵɵDirectiveDeclaration<NiceModalOpenerDirective<any, any, any>, never, never, { "modalData": "modalData"; }, { "modalAfterClosed": "modalAfterClosed"; }, never, never, false, never>;
13
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NiceModalOpenerDirective<any, any, any>, never, never, { "modalData": { "alias": "modalData"; "required": false; }; }, { "modalAfterClosed": "modalAfterClosed"; }, never, never, false, never>;
14
14
  }
@@ -6,5 +6,5 @@ export declare class RerenderDirective {
6
6
  set rerender(_: any);
7
7
  constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef);
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<RerenderDirective, never>;
9
- static ɵdir: i0.ɵɵDirectiveDeclaration<RerenderDirective, "[rerender]", never, { "rerender": "rerender"; }, {}, never, never, true, never>;
9
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RerenderDirective, "[rerender]", never, { "rerender": { "alias": "rerender"; "required": false; }; }, {}, never, never, true, never>;
10
10
  }
@@ -13,6 +13,6 @@ export declare class ResolveDirective<T> {
13
13
  constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef);
14
14
  static ngTemplateContextGuard<T>(directive: ResolveDirective<T>, ctx: any): ctx is ResolveDirectiveContext<T>;
15
15
  static ɵfac: i0.ɵɵFactoryDeclaration<ResolveDirective<any>, never>;
16
- static ɵdir: i0.ɵɵDirectiveDeclaration<ResolveDirective<any>, "[resolve]", never, { "resolve": "resolve"; }, {}, never, never, true, never>;
16
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ResolveDirective<any>, "[resolve]", never, { "resolve": { "alias": "resolve"; "required": false; }; }, {}, never, never, true, never>;
17
17
  }
18
18
  export {};
@@ -108,5 +108,5 @@ export declare class NiceScrollbarDirective implements OnChanges, OnInit, OnDest
108
108
  */
109
109
  private _destroy;
110
110
  static ɵfac: i0.ɵɵFactoryDeclaration<NiceScrollbarDirective, never>;
111
- static ɵdir: i0.ɵɵDirectiveDeclaration<NiceScrollbarDirective, "[niceScrollbar]", ["niceScrollbar"], { "niceScrollbar": "niceScrollbar"; "niceScrollbarOptions": "niceScrollbarOptions"; }, {}, never, never, false, never>;
111
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NiceScrollbarDirective, "[niceScrollbar]", ["niceScrollbar"], { "niceScrollbar": { "alias": "niceScrollbar"; "required": false; }; "niceScrollbarOptions": { "alias": "niceScrollbarOptions"; "required": false; }; }, {}, never, never, false, never>;
112
112
  }
package/package.json CHANGED
@@ -1,29 +1,26 @@
1
1
  {
2
2
  "name": "@recursyve/nice-ui-kit.v2",
3
- "version": "15.0.0-beta.131",
3
+ "version": "16.0.0-beta.134",
4
4
  "exports": {
5
5
  ".": {
6
6
  "sass": "./_index.scss",
7
7
  "types": "./index.d.ts",
8
- "esm2020": "./esm2020/recursyve-nice-ui-kit.v2.mjs",
9
- "es2020": "./fesm2020/recursyve-nice-ui-kit.v2.mjs",
10
- "es2015": "./fesm2015/recursyve-nice-ui-kit.v2.mjs",
11
- "node": "./fesm2015/recursyve-nice-ui-kit.v2.mjs",
12
- "default": "./fesm2020/recursyve-nice-ui-kit.v2.mjs"
8
+ "esm2022": "./esm2022/recursyve-nice-ui-kit.v2.mjs",
9
+ "esm": "./esm2022/recursyve-nice-ui-kit.v2.mjs",
10
+ "default": "./fesm2022/recursyve-nice-ui-kit.v2.mjs"
13
11
  },
14
12
  "./package.json": {
15
13
  "default": "./package.json"
16
14
  }
17
15
  },
18
16
  "peerDependencies": {
19
- "@angular/cdk": "^15.0.0",
20
- "@angular/common": "^15.0.0",
21
- "@angular/core": "^15.0.0",
22
- "@angular/forms": "^15.0.0",
23
- "@angular/material": "^15.0.0",
24
- "@ngx-translate/core": "^14.0.0",
25
- "@recursyve/ngx-form-generator": ">= 15.0.0-beta.42",
26
- "ngx-mask": "^15.0.0",
17
+ "@angular/cdk": "^16.0.0",
18
+ "@angular/common": "^16.0.0",
19
+ "@angular/core": "^16.0.0",
20
+ "@angular/forms": "^16.0.0",
21
+ "@angular/material": "^16.0.0",
22
+ "@recursyve/ngx-form-generator": ">= 16.0.0-beta.47",
23
+ "ngx-mask": "^16.0.0",
27
24
  "perfect-scrollbar": "^1.5.5",
28
25
  "uuid": ">= 9.0.0"
29
26
  },
@@ -32,11 +29,7 @@
32
29
  "lottie-web": "~5.12.0",
33
30
  "class-transformer": "^0.5.1"
34
31
  },
35
- "module": "fesm2015/recursyve-nice-ui-kit.v2.mjs",
36
- "es2020": "fesm2020/recursyve-nice-ui-kit.v2.mjs",
37
- "esm2020": "esm2020/recursyve-nice-ui-kit.v2.mjs",
38
- "fesm2020": "fesm2020/recursyve-nice-ui-kit.v2.mjs",
39
- "fesm2015": "fesm2015/recursyve-nice-ui-kit.v2.mjs",
32
+ "module": "fesm2022/recursyve-nice-ui-kit.v2.mjs",
40
33
  "typings": "index.d.ts",
41
34
  "sideEffects": false
42
35
  }
@@ -1,32 +0,0 @@
1
- import { animate, animation, style, transition, trigger, useAnimation } from "@angular/animations";
2
- export class NiceAnimationCurves {
3
- }
4
- NiceAnimationCurves.STANDARD_CURVE = "cubic-bezier(0.4, 0.0, 0.2, 1)";
5
- NiceAnimationCurves.DECELERATION_CURVE = "cubic-bezier(0.0, 0.0, 0.2, 1)";
6
- NiceAnimationCurves.ACCELERATION_CURVE = "cubic-bezier(0.4, 0.0, 1, 1)";
7
- NiceAnimationCurves.SHARP_CURVE = "cubic-bezier(0.4, 0.0, 0.6, 1)";
8
- export class NiceAnimationDurations {
9
- }
10
- NiceAnimationDurations.COMPLEX = "375ms";
11
- NiceAnimationDurations.ENTERING = "225ms";
12
- NiceAnimationDurations.EXITING = "195ms";
13
- const customAnimation = animation([
14
- style({
15
- opacity: "{{opacity}}",
16
- transform: "scale({{scale}}) translate3d({{x}}, {{y}}, {{z}})"
17
- }),
18
- animate("{{duration}} {{delay}} cubic-bezier(0.0, 0.0, 0.2, 1)", style("*"))
19
- ], {
20
- params: {
21
- duration: "200ms",
22
- delay: "0ms",
23
- opacity: "0",
24
- scale: "1",
25
- x: "0",
26
- y: "0",
27
- z: "0"
28
- }
29
- });
30
- const defaultAnimation = trigger("animate", [transition("void => *", [useAnimation(customAnimation)])]);
31
- export { defaultAnimation };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLXVpLWtpdC12Mi9zcmMvbGliL2FuaW1hdGlvbnMvZGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkcsTUFBTSxPQUFPLG1CQUFtQjs7QUFDckIsa0NBQWMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUNsRCxzQ0FBa0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUN0RCxzQ0FBa0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNwRCwrQkFBVyxHQUFHLGdDQUFnQyxDQUFDO0FBRzFELE1BQU0sT0FBTyxzQkFBc0I7O0FBQ3hCLDhCQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ2xCLCtCQUFRLEdBQUcsT0FBTyxDQUFDO0FBQ25CLDhCQUFPLEdBQUcsT0FBTyxDQUFDO0FBRzdCLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQztJQUM5QixLQUFLLENBQUM7UUFDRixPQUFPLEVBQUUsYUFBYTtRQUN0QixTQUFTLEVBQUUsbURBQW1EO0tBQ2pFLENBQUM7SUFDRixPQUFPLENBQUMsdURBQXVELEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQy9FLEVBQUU7SUFDQyxNQUFNLEVBQUU7UUFDSixRQUFRLEVBQUUsT0FBTztRQUNqQixLQUFLLEVBQUUsS0FBSztRQUNaLE9BQU8sRUFBRSxHQUFHO1FBQ1osS0FBSyxFQUFFLEdBQUc7UUFDVixDQUFDLEVBQUUsR0FBRztRQUNOLENBQUMsRUFBRSxHQUFHO1FBQ04sQ0FBQyxFQUFFLEdBQUc7S0FDVDtDQUNKLENBQUMsQ0FBQztBQUVILE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV4RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIGFuaW1hdGlvbiwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIsIHVzZUFuaW1hdGlvbiB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBOaWNlQW5pbWF0aW9uQ3VydmVzIHtcbiAgICBzdGF0aWMgU1RBTkRBUkRfQ1VSVkUgPSBcImN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKVwiO1xuICAgIHN0YXRpYyBERUNFTEVSQVRJT05fQ1VSVkUgPSBcImN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxKVwiO1xuICAgIHN0YXRpYyBBQ0NFTEVSQVRJT05fQ1VSVkUgPSBcImN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSlcIjtcbiAgICBzdGF0aWMgU0hBUlBfQ1VSVkUgPSBcImN1YmljLWJlemllcigwLjQsIDAuMCwgMC42LCAxKVwiO1xufVxuXG5leHBvcnQgY2xhc3MgTmljZUFuaW1hdGlvbkR1cmF0aW9ucyB7XG4gICAgc3RhdGljIENPTVBMRVggPSBcIjM3NW1zXCI7XG4gICAgc3RhdGljIEVOVEVSSU5HID0gXCIyMjVtc1wiO1xuICAgIHN0YXRpYyBFWElUSU5HID0gXCIxOTVtc1wiO1xufVxuXG5jb25zdCBjdXN0b21BbmltYXRpb24gPSBhbmltYXRpb24oW1xuICAgIHN0eWxlKHtcbiAgICAgICAgb3BhY2l0eTogXCJ7e29wYWNpdHl9fVwiLFxuICAgICAgICB0cmFuc2Zvcm06IFwic2NhbGUoe3tzY2FsZX19KSB0cmFuc2xhdGUzZCh7e3h9fSwge3t5fX0sIHt7en19KVwiXG4gICAgfSksXG4gICAgYW5pbWF0ZShcInt7ZHVyYXRpb259fSB7e2RlbGF5fX0gY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpXCIsIHN0eWxlKFwiKlwiKSlcbl0sIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZHVyYXRpb246IFwiMjAwbXNcIixcbiAgICAgICAgZGVsYXk6IFwiMG1zXCIsXG4gICAgICAgIG9wYWNpdHk6IFwiMFwiLFxuICAgICAgICBzY2FsZTogXCIxXCIsXG4gICAgICAgIHg6IFwiMFwiLFxuICAgICAgICB5OiBcIjBcIixcbiAgICAgICAgejogXCIwXCJcbiAgICB9XG59KTtcblxuY29uc3QgZGVmYXVsdEFuaW1hdGlvbiA9IHRyaWdnZXIoXCJhbmltYXRlXCIsIFt0cmFuc2l0aW9uKFwidm9pZCA9PiAqXCIsIFt1c2VBbmltYXRpb24oY3VzdG9tQW5pbWF0aW9uKV0pXSk7XG5cbmV4cG9ydCB7IGRlZmF1bHRBbmltYXRpb24gfTtcbiJdfQ==
@@ -1,283 +0,0 @@
1
- import { Component, ContentChild, ElementRef, EventEmitter, forwardRef, Inject, Input, Optional, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation, } from "@angular/core";
2
- import { NG_VALUE_ACCESSOR } from "@angular/forms";
3
- import { niceAnimations } from "../../animations";
4
- import { FileUtils } from "../../utils";
5
- import { NICE_ASSETS_CAROUSEL_OPTIONS } from "./assets-carousel.constant";
6
- import { NiceAssetsCarouselActiveContentDirective } from "./directives/assets-carousel-active-content.directive";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "@angular/material/icon";
10
- import * as i3 from "@angular/material/button";
11
- import * as i4 from "@angular/material/menu";
12
- import * as i5 from "@angular/material/core";
13
- import * as i6 from "../../directives/dropzone/dropzone.directive";
14
- import * as i7 from "@angular/material/progress-spinner";
15
- import * as i8 from "@ngx-translate/core";
16
- export class NiceAssetsCarouselComponent {
17
- set activeVideoElement(activeVideoElement) {
18
- this._activeVideoElement = activeVideoElement;
19
- if (!this._activeVideoElement || !this._assetsElement) {
20
- return;
21
- }
22
- this.startSyncVideo();
23
- }
24
- set assetsElement(assetsElement) {
25
- this._assetsElement = assetsElement;
26
- if (!this._activeVideoElement || !this._assetsElement) {
27
- return;
28
- }
29
- this.startSyncVideo();
30
- }
31
- set assets(assets) {
32
- this.writeValue(assets ?? []);
33
- }
34
- set activeTranslationPosition(position) {
35
- this._activeTranslationPosition = position;
36
- this.listStyle.transform = `translateX(calc((var(--nice-assets-carousel-asset-width) + var(--nice-assets-carousel-asset-gap)) * ${position}))`;
37
- }
38
- set activeAsset(position) {
39
- if (position < 0) {
40
- position = 0;
41
- }
42
- this._active = position;
43
- this._activeAsset = this._assets[this._active];
44
- this._lastAsset = this._active === this._assets.length - 1 || !this._assets.length;
45
- this._shouldTransform
46
- = ((this.edit && this.showAddAssetContainer) && this._active >= (this.visiblePreviewAsset - 1))
47
- || this._active >= this.visiblePreviewAsset;
48
- this.activeChange.emit(this._active);
49
- }
50
- constructor(options) {
51
- this.options = options;
52
- this._activeTranslationPosition = 0;
53
- this._active = 0;
54
- this._assets = [];
55
- this._lastAsset = true;
56
- this._shouldTransform = false;
57
- this.defaultColor = "primary";
58
- this.color = this.defaultColor;
59
- this.edit = false;
60
- this.loading = false;
61
- this.accept = [];
62
- this.customActions = [];
63
- this.multipleUpload = false;
64
- this.visiblePreviewAsset = 4;
65
- this.showAddAssetContainer = true;
66
- this.activeChange = new EventEmitter();
67
- this.removedAsset = new EventEmitter();
68
- this.listStyle = { transform: "translateX(0px)" };
69
- this._imagesMimeTypes = ["image/png", "image/jpeg", "image/webp", "image/avif"];
70
- if (!this.options) {
71
- this.options = {
72
- actionButtons: {
73
- addPhoto: {
74
- matIcon: "photo_camera"
75
- },
76
- moreOptions: {
77
- matIcon: "more_vert"
78
- },
79
- remove: {
80
- matIcon: "delete"
81
- }
82
- },
83
- addPhoto: {
84
- matIcon: "photo_camera"
85
- },
86
- leftArrow: {
87
- matIcon: "chevron_left"
88
- },
89
- rightArrow: {
90
- matIcon: "chevron_right"
91
- },
92
- upload: {
93
- matIcon: "file_upload"
94
- }
95
- };
96
- }
97
- }
98
- ngOnInit() {
99
- if (!this.accept?.length) {
100
- this.accept = [...this._imagesMimeTypes];
101
- }
102
- }
103
- ngOnChanges(changes) {
104
- if ("accept" in changes && this.accept) {
105
- const index = this.accept.indexOf("image/*");
106
- if (index >= 0) {
107
- this.accept.splice(index, 1);
108
- this.accept.push(...this._imagesMimeTypes);
109
- }
110
- }
111
- }
112
- writeValue(assets) {
113
- this._assets = assets ?? [];
114
- if (this._assets.length === 0) {
115
- this._activeAsset = null;
116
- this._lastAsset = true;
117
- }
118
- else if (this._assets.length > 0) {
119
- this._activeAsset = this._assets[this._active];
120
- }
121
- }
122
- registerOnChange(fn) {
123
- this.propagate = fn;
124
- }
125
- registerOnTouched(fn) { }
126
- clickLeft() {
127
- if (this._active) {
128
- this.activeAsset = this._active - 1;
129
- }
130
- if (this._activeTranslationPosition < 0) {
131
- this.activeTranslationPosition = this._activeTranslationPosition + 1;
132
- }
133
- }
134
- clickRight() {
135
- if (this._lastAsset) {
136
- return;
137
- }
138
- this.activeAsset = this._active + 1;
139
- if (this._shouldTransform) {
140
- this.activeTranslationPosition = this._activeTranslationPosition - 1;
141
- }
142
- }
143
- clickAsset(index) {
144
- let visibleAssets = (this.edit && this.showAddAssetContainer) ? (this.visiblePreviewAsset - 2) : (this.visiblePreviewAsset - 1);
145
- if (index < visibleAssets) {
146
- visibleAssets = index;
147
- }
148
- if (index >= 0) {
149
- this.activeTranslationPosition = (index - visibleAssets) * -1;
150
- }
151
- this.activeAsset = index;
152
- }
153
- async onFilesChange(event) {
154
- const files = event.target?.files;
155
- await this.onFilesDrop(files);
156
- this.inputElement.nativeElement.value = "";
157
- }
158
- async onFilesDrop(fileList) {
159
- let files = this.filterOutUnsupportedFiles(fileList);
160
- if (this.imagesProcessor) {
161
- files = await this.getProcessedFiles(files);
162
- }
163
- if (!files?.length) {
164
- return;
165
- }
166
- for (const file of files) {
167
- this._assets.push({
168
- file,
169
- type: file.type.split("/").shift(),
170
- base64: await FileUtils.getDataUrl(file)
171
- });
172
- }
173
- this.clickAsset(this._assets.length - 1);
174
- this.propagate?.(this._assets);
175
- }
176
- clickRemove() {
177
- this.removedAsset.emit(this._assets[this._active]);
178
- this._assets.splice(this._active, 1);
179
- if (this._lastAsset) {
180
- this.clickAsset(this._assets.length - 1);
181
- }
182
- else {
183
- this.clickAsset(this._active);
184
- }
185
- this.propagate?.(this._assets);
186
- }
187
- clickCustom(action) {
188
- action.action(this._active);
189
- }
190
- async startSyncVideo() {
191
- this._assetsElement.get(this._active).nativeElement.firstElementChild.pause();
192
- this._assetsElement.get(this._active).nativeElement.firstElementChild.currentTime = 0;
193
- this._activeVideoElement.nativeElement.currentTime = 0;
194
- await this._activeVideoElement.nativeElement.play();
195
- await this._assetsElement.get(this._active).nativeElement.firstElementChild.play();
196
- }
197
- filterOutUnsupportedFiles(fileList) {
198
- const files = [];
199
- for (let i = 0; i < fileList.length; i++) {
200
- const file = fileList.item(i);
201
- if (this.accept.some((accept) => {
202
- if (accept.endsWith("*")) {
203
- return file.type.startsWith(accept.replace("*", ""));
204
- }
205
- return accept === file.type;
206
- })) {
207
- files.push(file);
208
- }
209
- }
210
- return files;
211
- }
212
- async getProcessedFiles(files) {
213
- try {
214
- if (!files.length) {
215
- return null;
216
- }
217
- return await this.imagesProcessor(files);
218
- }
219
- catch (e) {
220
- return null;
221
- }
222
- }
223
- }
224
- NiceAssetsCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceAssetsCarouselComponent, deps: [{ token: NICE_ASSETS_CAROUSEL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
225
- NiceAssetsCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NiceAssetsCarouselComponent, selector: "nice-assets-carousel", inputs: { color: "color", edit: "edit", loading: "loading", accept: "accept", customActions: "customActions", imagesProcessor: "imagesProcessor", multipleUpload: "multipleUpload", visiblePreviewAsset: "visiblePreviewAsset", showAddAssetContainer: "showAddAssetContainer", assets: "assets" }, outputs: { activeChange: "activeChange", removedAsset: "removedAsset" }, providers: [
226
- {
227
- provide: NG_VALUE_ACCESSOR,
228
- useExisting: forwardRef(() => NiceAssetsCarouselComponent),
229
- multi: true
230
- }
231
- ], queries: [{ propertyName: "activeContent", first: true, predicate: NiceAssetsCarouselActiveContentDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "activeVideoElement", first: true, predicate: ["activeVideo"], descendants: true }, { propertyName: "assetsElement", predicate: ["assets"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div\n class=\"active-image\"\n matRipple\n [class.empty-state]=\"!_activeAsset\"\n (click)=\"edit && fileInput.click();\n $event.stopPropagation()\"\n >\n <div *ngIf=\"loading\" class=\"flex flex-row justify-center items-center h-full\">\n <mat-spinner [diameter]=\"32\"></mat-spinner>\n </div>\n <ng-container *ngIf=\"!loading\">\n <ng-container\n *ngIf=\"_activeAsset && activeContent\"\n [ngTemplateOutlet]=\"activeContent\"\n [ngTemplateOutletContext]=\"{ $implicit: _activeAsset}\"\n ></ng-container>\n <img\n *ngIf=\"_activeAsset?.type === 'image'\"\n (mouseover)=\"showOverlay=true\"\n [src]=\"_activeAsset.url ?? _activeAsset.base64\"\n draggable=\"false\"\n class=\"relative\"\n alt=\"active-image\"\n >\n <video #activeVideo *ngIf=\"_activeAsset?.type === 'video'\" draggable=\"false\" loop [src]=\"_activeAsset.url ?? _activeAsset.base64\"></video>\n\n <div class=\"empty-state-content\" *ngIf=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n <div class=\"text\">\n {{ \"nice_ui_kit.assets_carousel.upload_here\" | translate }}\n </div>\n </div>\n\n <div *ngIf=\"_activeAsset && showOverlay && edit\" class=\"active-image-overlay\">\n <div\n (mouseout)=\"showOverlay=false\"\n class=\"flex flex-col justify-center items-center w-full h-full\"\n >\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n </div>\n </div>\n\n <div *ngIf=\"edit\" class=\"active-buttons\">\n <button mat-icon-button (click)=\"fileInput.click(); $event.stopPropagation()\">\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.matIcon\">{{ options.actionButtons.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.svgIcon\" [svgIcon]=\"options.actionButtons.addPhoto.svgIcon\"></mat-icon>\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"assetActions\" (click)=\"$event.stopPropagation()\" [disabled]=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.matIcon\">{{ options.actionButtons.moreOptions.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.svgIcon\" [svgIcon]=\"options.actionButtons.moreOptions.svgIcon\"></mat-icon>\n </button>\n <mat-menu class=\"nice-asset-options-menu\" [xPosition]=\"'before'\" #assetActions=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let action of customActions\"\n (click)=\"clickCustom(action)\"\n >\n <mat-icon *ngIf=\"action.icon.matIcon\">{{ action.icon.matIcon }}</mat-icon>\n <mat-icon [svgIcon]=\"action.icon.svgIcon\" *ngIf=\"action.icon.svgIcon\"></mat-icon>\n <span>{{ action.name | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"clickRemove()\">\n <mat-icon *ngIf=\"options.actionButtons.remove.matIcon\">{{ options.actionButtons.remove.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.remove.svgIcon\" [svgIcon]=\"options.actionButtons.remove.svgIcon\"></mat-icon>\n <span>{{ \"nice_ui_kit.assets_carousel.delete\" | translate }}</span>\n </button>\n </mat-menu>\n </div>\n </ng-container>\n </div>\n\n <div class=\"carousel\">\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button left-arrow\" mat-icon-button [disabled]=\"!_active\" (click)=\"clickLeft()\">\n <mat-icon *ngIf=\"options.leftArrow.matIcon\">{{ options.leftArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.leftArrow.svgIcon\" [svgIcon]=\"options.leftArrow.svgIcon\"></mat-icon>\n </button>\n <div class=\"asset-list-container\">\n <div *ngIf=\"showAddAssetContainer && edit\" class=\"add-asset-container\">\n <div class=\"add-asset\" matRipple (click)=\"fileInput.click()\">\n <mat-icon *ngIf=\"options.addPhoto.matIcon\">{{ options.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.addPhoto.svgIcon\" [svgIcon]=\"options.addPhoto.svgIcon\"></mat-icon>\n </div>\n </div>\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div\n #assets\n class=\"asset\"\n *ngFor=\"let asset of _assets; let i = index\"\n (click)=\"clickAsset(i)\"\n [ngClass]=\"color\"\n [class.active]=\"_active === i\"\n >\n <ng-container>\n <img\n *ngIf=\"asset.type === 'image'\"\n draggable=\"false\"\n [src]=\"asset.url ?? asset.base64\"\n alt=\"add-image\"\n />\n <video\n *ngIf=\"asset.type === 'video'\"\n draggable=\"false\"\n loop\n [src]=\"asset.url ?? asset.base64\"\n ></video>\n </ng-container>\n </div>\n </div>\n </div>\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button right-arrow\" mat-icon-button [disabled]=\"_lastAsset\" (click)=\"clickRight()\">\n <mat-icon *ngIf=\"options.rightArrow.matIcon\">{{ options.rightArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.rightArrow.svgIcon\" [svgIcon]=\"options.rightArrow.svgIcon\"></mat-icon>\n </button>\n </div>\n</div>\n\n<input #fileInput type=\"file\" hidden [accept]=\"accept\" (change)=\"onFilesChange($event)\" [multiple]=\"multipleUpload\">\n", styles: [":root{--nice-assets-carousel-asset-width: 90px;--nice-assets-carousel-asset-height: 60px;--nice-assets-carousel-asset-gap: .75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i5.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i6.NiceDropzoneDirective, selector: "[niceDropzone]", outputs: ["filesDropped"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], animations: niceAnimations, encapsulation: i0.ViewEncapsulation.None });
232
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceAssetsCarouselComponent, decorators: [{
233
- type: Component,
234
- args: [{ selector: "nice-assets-carousel", encapsulation: ViewEncapsulation.None, animations: niceAnimations, providers: [
235
- {
236
- provide: NG_VALUE_ACCESSOR,
237
- useExisting: forwardRef(() => NiceAssetsCarouselComponent),
238
- multi: true
239
- }
240
- ], template: "<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div\n class=\"active-image\"\n matRipple\n [class.empty-state]=\"!_activeAsset\"\n (click)=\"edit && fileInput.click();\n $event.stopPropagation()\"\n >\n <div *ngIf=\"loading\" class=\"flex flex-row justify-center items-center h-full\">\n <mat-spinner [diameter]=\"32\"></mat-spinner>\n </div>\n <ng-container *ngIf=\"!loading\">\n <ng-container\n *ngIf=\"_activeAsset && activeContent\"\n [ngTemplateOutlet]=\"activeContent\"\n [ngTemplateOutletContext]=\"{ $implicit: _activeAsset}\"\n ></ng-container>\n <img\n *ngIf=\"_activeAsset?.type === 'image'\"\n (mouseover)=\"showOverlay=true\"\n [src]=\"_activeAsset.url ?? _activeAsset.base64\"\n draggable=\"false\"\n class=\"relative\"\n alt=\"active-image\"\n >\n <video #activeVideo *ngIf=\"_activeAsset?.type === 'video'\" draggable=\"false\" loop [src]=\"_activeAsset.url ?? _activeAsset.base64\"></video>\n\n <div class=\"empty-state-content\" *ngIf=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n <div class=\"text\">\n {{ \"nice_ui_kit.assets_carousel.upload_here\" | translate }}\n </div>\n </div>\n\n <div *ngIf=\"_activeAsset && showOverlay && edit\" class=\"active-image-overlay\">\n <div\n (mouseout)=\"showOverlay=false\"\n class=\"flex flex-col justify-center items-center w-full h-full\"\n >\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n </div>\n </div>\n\n <div *ngIf=\"edit\" class=\"active-buttons\">\n <button mat-icon-button (click)=\"fileInput.click(); $event.stopPropagation()\">\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.matIcon\">{{ options.actionButtons.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.svgIcon\" [svgIcon]=\"options.actionButtons.addPhoto.svgIcon\"></mat-icon>\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"assetActions\" (click)=\"$event.stopPropagation()\" [disabled]=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.matIcon\">{{ options.actionButtons.moreOptions.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.svgIcon\" [svgIcon]=\"options.actionButtons.moreOptions.svgIcon\"></mat-icon>\n </button>\n <mat-menu class=\"nice-asset-options-menu\" [xPosition]=\"'before'\" #assetActions=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let action of customActions\"\n (click)=\"clickCustom(action)\"\n >\n <mat-icon *ngIf=\"action.icon.matIcon\">{{ action.icon.matIcon }}</mat-icon>\n <mat-icon [svgIcon]=\"action.icon.svgIcon\" *ngIf=\"action.icon.svgIcon\"></mat-icon>\n <span>{{ action.name | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"clickRemove()\">\n <mat-icon *ngIf=\"options.actionButtons.remove.matIcon\">{{ options.actionButtons.remove.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.remove.svgIcon\" [svgIcon]=\"options.actionButtons.remove.svgIcon\"></mat-icon>\n <span>{{ \"nice_ui_kit.assets_carousel.delete\" | translate }}</span>\n </button>\n </mat-menu>\n </div>\n </ng-container>\n </div>\n\n <div class=\"carousel\">\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button left-arrow\" mat-icon-button [disabled]=\"!_active\" (click)=\"clickLeft()\">\n <mat-icon *ngIf=\"options.leftArrow.matIcon\">{{ options.leftArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.leftArrow.svgIcon\" [svgIcon]=\"options.leftArrow.svgIcon\"></mat-icon>\n </button>\n <div class=\"asset-list-container\">\n <div *ngIf=\"showAddAssetContainer && edit\" class=\"add-asset-container\">\n <div class=\"add-asset\" matRipple (click)=\"fileInput.click()\">\n <mat-icon *ngIf=\"options.addPhoto.matIcon\">{{ options.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.addPhoto.svgIcon\" [svgIcon]=\"options.addPhoto.svgIcon\"></mat-icon>\n </div>\n </div>\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div\n #assets\n class=\"asset\"\n *ngFor=\"let asset of _assets; let i = index\"\n (click)=\"clickAsset(i)\"\n [ngClass]=\"color\"\n [class.active]=\"_active === i\"\n >\n <ng-container>\n <img\n *ngIf=\"asset.type === 'image'\"\n draggable=\"false\"\n [src]=\"asset.url ?? asset.base64\"\n alt=\"add-image\"\n />\n <video\n *ngIf=\"asset.type === 'video'\"\n draggable=\"false\"\n loop\n [src]=\"asset.url ?? asset.base64\"\n ></video>\n </ng-container>\n </div>\n </div>\n </div>\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button right-arrow\" mat-icon-button [disabled]=\"_lastAsset\" (click)=\"clickRight()\">\n <mat-icon *ngIf=\"options.rightArrow.matIcon\">{{ options.rightArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.rightArrow.svgIcon\" [svgIcon]=\"options.rightArrow.svgIcon\"></mat-icon>\n </button>\n </div>\n</div>\n\n<input #fileInput type=\"file\" hidden [accept]=\"accept\" (change)=\"onFilesChange($event)\" [multiple]=\"multipleUpload\">\n", styles: [":root{--nice-assets-carousel-asset-width: 90px;--nice-assets-carousel-asset-height: 60px;--nice-assets-carousel-asset-gap: .75rem}\n"] }]
241
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
242
- type: Optional
243
- }, {
244
- type: Inject,
245
- args: [NICE_ASSETS_CAROUSEL_OPTIONS]
246
- }] }]; }, propDecorators: { inputElement: [{
247
- type: ViewChild,
248
- args: ["fileInput"]
249
- }], color: [{
250
- type: Input
251
- }], edit: [{
252
- type: Input
253
- }], loading: [{
254
- type: Input
255
- }], accept: [{
256
- type: Input
257
- }], customActions: [{
258
- type: Input
259
- }], imagesProcessor: [{
260
- type: Input
261
- }], multipleUpload: [{
262
- type: Input
263
- }], visiblePreviewAsset: [{
264
- type: Input
265
- }], showAddAssetContainer: [{
266
- type: Input
267
- }], activeContent: [{
268
- type: ContentChild,
269
- args: [NiceAssetsCarouselActiveContentDirective, { read: TemplateRef }]
270
- }], activeChange: [{
271
- type: Output
272
- }], removedAsset: [{
273
- type: Output
274
- }], activeVideoElement: [{
275
- type: ViewChild,
276
- args: ["activeVideo"]
277
- }], assetsElement: [{
278
- type: ViewChildren,
279
- args: ["assets"]
280
- }], assets: [{
281
- type: Input
282
- }] } });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7Ozs7Ozs7O0FBNENqSCxNQUFNLE9BQU8sMkJBQTJCO0lBeURwQyxJQUNXLGtCQUFrQixDQUFDLGtCQUFnRDtRQUMxRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFFOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkQsT0FBTztTQUNWO1FBRUQs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b250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBDYW5Db2xvciwgVGhlbWVQYWxldHRlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NvcmVcIjtcbmltcG9ydCB7IG5pY2VBbmltYXRpb25zIH0gZnJvbSBcIi4uLy4uL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7IEZpbGVVdGlscyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgTklDRV9BU1NFVFNfQ0FST1VTRUxfT1BUSU9OUyB9IGZyb20gXCIuL2Fzc2V0cy1jYXJvdXNlbC5jb25zdGFudFwiO1xuaW1wb3J0IHsgTmljZUFzc2V0c0Nhcm91c2VsQWN0aXZlQ29udGVudERpcmVjdGl2ZSB9IGZyb20gXCIuL2RpcmVjdGl2ZXMvYXNzZXRzLWNhcm91c2VsLWFjdGl2ZS1jb250ZW50LmRpcmVjdGl2ZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VBc3NldHMge1xuICAgIHR5cGU6IFwiaW1hZ2VcIiB8IFwidmlkZW9cIjtcbiAgICBpZD86IG51bWJlciB8IHN0cmluZztcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgYmFzZTY0Pzogc3RyaW5nO1xuICAgIGZpbGU/OiBGaWxlO1xufVxuXG5leHBvcnQgdHlwZSBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uID0geyBtYXRJY29uOiBzdHJpbmc7IHN2Z0ljb24/OiBzdHJpbmc7IH0gfCB7IG1hdEljb24/OiBzdHJpbmc7IHN2Z0ljb246IHN0cmluZzsgfTtcblxuZXhwb3J0IGludGVyZmFjZSBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25zIHtcbiAgICBpY29uOiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb246IChhY3RpdmU6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOaWNlQXNzZXRzQ2Fyb3VzZWxPcHRpb25zIHtcbiAgICBhY3Rpb25CdXR0b25zPzoge1xuICAgICAgICBtb3JlT3B0aW9ucz86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgICAgIGFkZFBob3RvPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICAgICAgcmVtb3ZlPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICB9O1xuICAgIGFkZFBob3RvPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICBsZWZ0QXJyb3c/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIHJpZ2h0QXJyb3c/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIHVwbG9hZD86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5pY2UtYXNzZXRzLWNhcm91c2VsXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiYXNzZXRzLWNhcm91c2VsLnRlbXBsYXRlLmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcImFzc2V0cy1jYXJvdXNlbC50aGVtZS5zY3NzXCJdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgYW5pbWF0aW9uczogbmljZUFuaW1hdGlvbnMsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmljZUFzc2V0c0Nhcm91c2VsQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5pY2VBc3NldHNDYXJvdXNlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQ2FuQ29sb3Ige1xuICAgIHB1YmxpYyBfYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IDA7XG4gICAgcHVibGljIF9hY3RpdmUgPSAwO1xuICAgIHB1YmxpYyBfYXNzZXRzOiBOaWNlQXNzZXRzW10gPSBbXTtcbiAgICBwdWJsaWMgX2FjdGl2ZUFzc2V0OiBOaWNlQXNzZXRzO1xuICAgIHB1YmxpYyBfbGFzdEFzc2V0ID0gdHJ1ZTtcbiAgICBwdWJsaWMgX3Nob3VsZFRyYW5zZm9ybSA9IGZhbHNlO1xuICAgIHB1YmxpYyBfYWN0aXZlVmlkZW9FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+O1xuICAgIHB1YmxpYyBfYXNzZXRzRWxlbWVudDogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PjtcbiAgICBwdWJsaWMgZGVmYXVsdENvbG9yOiBUaGVtZVBhbGV0dGUgPSBcInByaW1hcnlcIjtcblxuICAgIEBWaWV3Q2hpbGQoXCJmaWxlSW5wdXRcIilcbiAgICBwdWJsaWMgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sb3I6IFRoZW1lUGFsZXR0ZSA9IHRoaXMuZGVmYXVsdENvbG9yO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZWRpdCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWNjZXB0OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VzdG9tQWN0aW9uczogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uc1tdID0gW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbWFnZXNQcm9jZXNzb3I6IChmaWxlczogRmlsZVtdKSA9PiBQcm9taXNlPEZpbGVbXT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aXBsZVVwbG9hZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmlzaWJsZVByZXZpZXdBc3NldCA9IDQ7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93QWRkQXNzZXRDb250YWluZXIgPSB0cnVlO1xuXG4gICAgQENvbnRlbnRDaGlsZChOaWNlQXNzZXRzQ2Fyb3VzZWxBY3RpdmVDb250ZW50RGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGFjdGl2ZUNvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWN0aXZlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlZEFzc2V0ID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlQXNzZXRzPigpO1xuXG4gICAgcHVibGljIGxpc3RTdHlsZTogeyB0cmFuc2Zvcm06IHN0cmluZyB9ID0geyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgwcHgpXCIgfTtcblxuICAgIHB1YmxpYyBzaG93T3ZlcmxheTogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgX2ltYWdlc01pbWVUeXBlcyA9IFtcImltYWdlL3BuZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS93ZWJwXCIsIFwiaW1hZ2UvYXZpZlwiXTtcbiAgICBwcml2YXRlIHByb3BhZ2F0ZTogKGFzc2V0czogTmljZUFzc2V0c1tdKSA9PiB2b2lkO1xuXG4gICAgQFZpZXdDaGlsZChcImFjdGl2ZVZpZGVvXCIpXG4gICAgcHVibGljIHNldCBhY3RpdmVWaWRlb0VsZW1lbnQoYWN0aXZlVmlkZW9FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+KSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudCA9IGFjdGl2ZVZpZGVvRWxlbWVudDtcblxuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudCB8fCAhdGhpcy5fYXNzZXRzRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFydFN5bmNWaWRlbygpO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGRyZW4oXCJhc3NldHNcIilcbiAgICBwdWJsaWMgc2V0IGFzc2V0c0VsZW1lbnQoYXNzZXRzRWxlbWVudDogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+Pikge1xuICAgICAgICB0aGlzLl9hc3NldHNFbGVtZW50ID0gYXNzZXRzRWxlbWVudDtcblxuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudCB8fCAhdGhpcy5fYXNzZXRzRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFydFN5bmNWaWRlbygpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhc3NldHMoYXNzZXRzOiBOaWNlQXNzZXRzW10pIHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKGFzc2V0cyA/PyBbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXQgYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgdGhpcy5saXN0U3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoY2FsYygodmFyKC0tbmljZS1hc3NldHMtY2Fyb3VzZWwtYXNzZXQtd2lkdGgpICsgdmFyKC0tbmljZS1hc3NldHMtY2Fyb3VzZWwtYXNzZXQtZ2FwKSkgKiAke3Bvc2l0aW9ufSkpYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldCBhY3RpdmVBc3NldChwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHBvc2l0aW9uO1xuICAgICAgICB0aGlzLl9hY3RpdmVBc3NldCA9IHRoaXMuX2Fzc2V0c1t0aGlzLl9hY3RpdmVdO1xuICAgICAgICB0aGlzLl9sYXN0QXNzZXQgPSB0aGlzLl9hY3RpdmUgPT09IHRoaXMuX2Fzc2V0cy5sZW5ndGggLSAxIHx8ICF0aGlzLl9hc3NldHMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9zaG91bGRUcmFuc2Zvcm1cbiAgICAgICAgICAgID0gKCh0aGlzLmVkaXQgJiYgdGhpcy5zaG93QWRkQXNzZXRDb250YWluZXIpICYmIHRoaXMuX2FjdGl2ZSA+PSAodGhpcy52aXNpYmxlUHJldmlld0Fzc2V0IC0gMSkpXG4gICAgICAgICAgICB8fCB0aGlzLl9hY3RpdmUgPj0gdGhpcy52aXNpYmxlUHJldmlld0Fzc2V0O1xuICAgICAgICB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KHRoaXMuX2FjdGl2ZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChOSUNFX0FTU0VUU19DQVJPVVNFTF9PUFRJT05TKSBwdWJsaWMgcmVhZG9ubHkgb3B0aW9uczogTmljZUFzc2V0c0Nhcm91c2VsT3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGFjdGlvbkJ1dHRvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGhvdG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwicGhvdG9fY2FtZXJhXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbW9yZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwibW9yZV92ZXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJY29uOiBcImRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZFBob3RvOiB7XG4gICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwicGhvdG9fY2FtZXJhXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxlZnRBcnJvdzoge1xuICAgICAgICAgICAgICAgICAgICBtYXRJY29uOiBcImNoZXZyb25fbGVmdFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByaWdodEFycm93OiB7XG4gICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwiY2hldnJvbl9yaWdodFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1cGxvYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJmaWxlX3VwbG9hZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY2VwdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjY2VwdCA9IFsuLi50aGlzLl9pbWFnZXNNaW1lVHlwZXNdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFwiYWNjZXB0XCIgaW4gY2hhbmdlcyAmJiB0aGlzLmFjY2VwdCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFjY2VwdC5pbmRleE9mKFwiaW1hZ2UvKlwiKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY2NlcHQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2VwdC5wdXNoKC4uLnRoaXMuX2ltYWdlc01pbWVUeXBlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShhc3NldHM6IE5pY2VBc3NldHNbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hc3NldHMgPSBhc3NldHMgPz8gW107XG5cbiAgICAgICAgaWYgKHRoaXMuX2Fzc2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUFzc2V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RBc3NldCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXNzZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUFzc2V0ID0gdGhpcy5fYXNzZXRzW3RoaXMuX2FjdGl2ZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGFzc2V0czogTmljZUFzc2V0c1tdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoYXNzZXRzOiBOaWNlQXNzZXRzW10pID0+IHZvaWQpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgY2xpY2tMZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUFzc2V0ID0gdGhpcy5fYWN0aXZlIC0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uID0gdGhpcy5fYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiArIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RBc3NldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVBc3NldCA9IHRoaXMuX2FjdGl2ZSArIDE7XG4gICAgICAgIGlmICh0aGlzLl9zaG91bGRUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IHRoaXMuX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gLSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrQXNzZXQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgdmlzaWJsZUFzc2V0cyA9ICh0aGlzLmVkaXQgJiYgdGhpcy5zaG93QWRkQXNzZXRDb250YWluZXIpID8gKHRoaXMudmlzaWJsZVByZXZpZXdBc3NldCAtIDIpIDogKHRoaXMudmlzaWJsZVByZXZpZXdBc3NldCAtIDEpO1xuICAgICAgICBpZiAoaW5kZXggPCB2aXNpYmxlQXNzZXRzKSB7XG4gICAgICAgICAgICB2aXNpYmxlQXNzZXRzID0gaW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uID0gKGluZGV4IC0gdmlzaWJsZUFzc2V0cykgKiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlQXNzZXQgPSBpbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25GaWxlc0NoYW5nZShldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZmlsZXMgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy5maWxlcztcblxuICAgICAgICBhd2FpdCB0aGlzLm9uRmlsZXNEcm9wKGZpbGVzKTtcblxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25GaWxlc0Ryb3AoZmlsZUxpc3Q6IEZpbGVMaXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBmaWxlcyA9IHRoaXMuZmlsdGVyT3V0VW5zdXBwb3J0ZWRGaWxlcyhmaWxlTGlzdCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VzUHJvY2Vzc29yKSB7XG4gICAgICAgICAgICBmaWxlcyA9IGF3YWl0IHRoaXMuZ2V0UHJvY2Vzc2VkRmlsZXMoZmlsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2V0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZS5zcGxpdChcIi9cIikuc2hpZnQoKSBhcyBcImltYWdlXCIgfCBcInZpZGVvXCIsXG4gICAgICAgICAgICAgICAgYmFzZTY0OiBhd2FpdCBGaWxlVXRpbHMuZ2V0RGF0YVVybChmaWxlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsaWNrQXNzZXQodGhpcy5fYXNzZXRzLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZT8uKHRoaXMuX2Fzc2V0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrUmVtb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZWRBc3NldC5lbWl0KHRoaXMuX2Fzc2V0c1t0aGlzLl9hY3RpdmVdKTtcbiAgICAgICAgdGhpcy5fYXNzZXRzLnNwbGljZSh0aGlzLl9hY3RpdmUsIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLl9sYXN0QXNzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tBc3NldCh0aGlzLl9hc3NldHMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrQXNzZXQodGhpcy5fYWN0aXZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlPy4odGhpcy5fYXNzZXRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tDdXN0b20oYWN0aW9uOiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25zKTogdm9pZCB7XG4gICAgICAgIGFjdGlvbi5hY3Rpb24odGhpcy5fYWN0aXZlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnRTeW5jVmlkZW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICh0aGlzLl9hc3NldHNFbGVtZW50LmdldCh0aGlzLl9hY3RpdmUpLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTFZpZGVvRWxlbWVudCkucGF1c2UoKTtcbiAgICAgICAgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5jdXJyZW50VGltZSA9IDA7XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlVmlkZW9FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY3VycmVudFRpbWUgPSAwO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudC5uYXRpdmVFbGVtZW50LnBsYXkoKTtcbiAgICAgICAgYXdhaXQgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJPdXRVbnN1cHBvcnRlZEZpbGVzKGZpbGVMaXN0OiBGaWxlTGlzdCk6IEZpbGVbXSB7XG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZUxpc3QuaXRlbShpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjY2VwdC5zb21lKChhY2NlcHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0LmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoYWNjZXB0LnJlcGxhY2UoXCIqXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjZXB0ID09PSBmaWxlLnR5cGU7XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRQcm9jZXNzZWRGaWxlcyhmaWxlczogRmlsZVtdKTogUHJvbWlzZTxGaWxlW10gfCBudWxsPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbWFnZXNQcm9jZXNzb3IoZmlsZXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJvdXNlbC1jb250YWluZXJcIiBuaWNlRHJvcHpvbmUgKGZpbGVzRHJvcHBlZCk9XCJvbkZpbGVzRHJvcCgkZXZlbnQpXCI+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFjdGl2ZS1pbWFnZVwiXG4gICAgICAgIG1hdFJpcHBsZVxuICAgICAgICBbY2xhc3MuZW1wdHktc3RhdGVdPVwiIV9hY3RpdmVBc3NldFwiXG4gICAgICAgIChjbGljayk9XCJlZGl0ICYmIGZpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgID5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIGgtZnVsbFwiPlxuICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCIzMlwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIl9hY3RpdmVBc3NldCAmJiBhY3RpdmVDb250ZW50XCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhY3RpdmVDb250ZW50XCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IF9hY3RpdmVBc3NldH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiX2FjdGl2ZUFzc2V0Py50eXBlID09PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cInNob3dPdmVybGF5PXRydWVcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiX2FjdGl2ZUFzc2V0LnVybCA/PyBfYWN0aXZlQXNzZXQuYmFzZTY0XCJcbiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgICAgICAgICAgYWx0PVwiYWN0aXZlLWltYWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDx2aWRlbyAjYWN0aXZlVmlkZW8gKm5nSWY9XCJfYWN0aXZlQXNzZXQ/LnR5cGUgPT09ICd2aWRlbydcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIGxvb3AgW3NyY109XCJfYWN0aXZlQXNzZXQudXJsID8/IF9hY3RpdmVBc3NldC5iYXNlNjRcIj48L3ZpZGVvPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGUtY29udGVudFwiICpuZ0lmPVwiIV9hY3RpdmVBc3NldFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMudXBsb2FkLm1hdEljb25cIj57eyBvcHRpb25zLnVwbG9hZC5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLnVwbG9hZC5zdmdJY29uXCIgW3N2Z0ljb25dPVwib3B0aW9ucy51cGxvYWQuc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCJuaWNlX3VpX2tpdC5hc3NldHNfY2Fyb3VzZWwudXBsb2FkX2hlcmVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJfYWN0aXZlQXNzZXQgJiYgc2hvd092ZXJsYXkgJiYgZWRpdFwiIGNsYXNzPVwiYWN0aXZlLWltYWdlLW92ZXJsYXlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIChtb3VzZW91dCk9XCJzaG93T3ZlcmxheT1mYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdy1mdWxsIGgtZnVsbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLnVwbG9hZC5tYXRJY29uXCI+e3sgb3B0aW9ucy51cGxvYWQubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMudXBsb2FkLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLnVwbG9hZC5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZWRpdFwiIGNsYXNzPVwiYWN0aXZlLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8ubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5hZGRQaG90by5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLmFkZFBob3RvLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8uc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFzc2V0QWN0aW9uc1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbZGlzYWJsZWRdPVwiIV9hY3RpdmVBc3NldFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5tb3JlT3B0aW9ucy5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLm1vcmVPcHRpb25zLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMuc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51IGNsYXNzPVwibmljZS1hc3NldC1vcHRpb25zLW1lbnVcIiBbeFBvc2l0aW9uXT1cIidiZWZvcmUnXCIgI2Fzc2V0QWN0aW9ucz1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjdXN0b21BY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0N1c3RvbShhY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiYWN0aW9uLmljb24ubWF0SWNvblwiPnt7IGFjdGlvbi5pY29uLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cImFjdGlvbi5pY29uLnN2Z0ljb25cIiAqbmdJZj1cImFjdGlvbi5pY29uLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNsaWNrUmVtb3ZlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCJuaWNlX3VpX2tpdC5hc3NldHNfY2Fyb3VzZWwuZGVsZXRlXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWxcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dBZGRBc3NldENvbnRhaW5lciB8fCBfYWN0aXZlQXNzZXRcIiBjbGFzcz1cImFjdGlvbi1idXR0b24gbGVmdC1hcnJvd1wiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIV9hY3RpdmVcIiAoY2xpY2spPVwiY2xpY2tMZWZ0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMubGVmdEFycm93Lm1hdEljb25cIj57eyBvcHRpb25zLmxlZnRBcnJvdy5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFycm93c1wiICpuZ0lmPVwib3B0aW9ucy5sZWZ0QXJyb3cuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMubGVmdEFycm93LnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFzc2V0LWxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FkZEFzc2V0Q29udGFpbmVyICYmIGVkaXRcIiBjbGFzcz1cImFkZC1hc3NldC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWFzc2V0XCIgbWF0UmlwcGxlIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFkZFBob3RvLm1hdEljb25cIj57eyBvcHRpb25zLmFkZFBob3RvLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFkZFBob3RvLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFkZFBob3RvLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXQtbGlzdFwiIFtuZ1N0eWxlXT1cImxpc3RTdHlsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgI2Fzc2V0c1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFzc2V0IG9mIF9hc3NldHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tBc3NldChpKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJfYWN0aXZlID09PSBpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhc3NldC50eXBlID09PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhc3NldC51cmwgPz8gYXNzZXQuYmFzZTY0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJhZGQtaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXNzZXQudHlwZSA9PT0gJ3ZpZGVvJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImFzc2V0LnVybCA/PyBhc3NldC5iYXNlNjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmlkZW8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0FkZEFzc2V0Q29udGFpbmVyIHx8IF9hY3RpdmVBc3NldFwiIGNsYXNzPVwiYWN0aW9uLWJ1dHRvbiByaWdodC1hcnJvd1wiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiX2xhc3RBc3NldFwiIChjbGljayk9XCJjbGlja1JpZ2h0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMucmlnaHRBcnJvdy5tYXRJY29uXCI+e3sgb3B0aW9ucy5yaWdodEFycm93Lm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYXJyb3dzXCIgKm5nSWY9XCJvcHRpb25zLnJpZ2h0QXJyb3cuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMucmlnaHRBcnJvdy5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBoaWRkZW4gW2FjY2VwdF09XCJhY2NlcHRcIiAoY2hhbmdlKT1cIm9uRmlsZXNDaGFuZ2UoJGV2ZW50KVwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVVwbG9hZFwiPlxuIl19