@recursyve/nice-ui-kit.v2 13.2.0-beta.98 → 14.0.0-beta.100

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 (204) hide show
  1. package/esm2020/lib/api/interceptors/transform-response.interceptor.mjs +3 -3
  2. package/esm2020/lib/components/alert/alert.component.mjs +3 -3
  3. package/esm2020/lib/components/alert/alert.module.mjs +4 -4
  4. package/esm2020/lib/components/alert/alert.service.mjs +3 -3
  5. package/esm2020/lib/components/assets-carousel/assets-carousel.component.mjs +33 -17
  6. package/esm2020/lib/components/assets-carousel/assets-carousel.module.mjs +4 -4
  7. package/esm2020/lib/components/async-typeahead/async-typeahead.component.mjs +15 -9
  8. package/esm2020/lib/components/async-typeahead/async-typeahead.module.mjs +4 -4
  9. package/esm2020/lib/components/async-typeahead/providers/async-typeahead.service.mjs +3 -3
  10. package/esm2020/lib/components/base-form/base-form.component.mjs +3 -3
  11. package/esm2020/lib/components/base-form/base-form.module.mjs +4 -4
  12. package/esm2020/lib/components/base-form/form-submit.directive.mjs +3 -3
  13. package/esm2020/lib/components/card/card.component.mjs +3 -3
  14. package/esm2020/lib/components/card/card.module.mjs +4 -4
  15. package/esm2020/lib/components/carousel/carousel.component.mjs +3 -3
  16. package/esm2020/lib/components/carousel/carousel.module.mjs +4 -4
  17. package/esm2020/lib/components/carousel/picture-modal/picture-modal.component.mjs +3 -3
  18. package/esm2020/lib/components/carousel/picture-modal/picture-modal.service.mjs +3 -3
  19. package/esm2020/lib/components/carousel/pipe/carousel-layout.pipe.mjs +3 -3
  20. package/esm2020/lib/components/date-range-picker/components/header/header.component.mjs +57 -0
  21. package/esm2020/lib/components/date-range-picker/components/range-preset/range-preset.component.mjs +107 -0
  22. package/esm2020/lib/components/date-range-picker/date-range-picker.component.mjs +74 -0
  23. package/esm2020/lib/components/date-range-picker/date-range-picker.module.mjs +56 -0
  24. package/esm2020/lib/components/date-range-picker/index.mjs +2 -0
  25. package/esm2020/lib/components/date-range-picker/providers/date-range-picker.service.mjs +17 -0
  26. package/esm2020/lib/components/date-range-picker/public-api.mjs +3 -0
  27. package/esm2020/lib/components/drawer/drawer.component.mjs +3 -3
  28. package/esm2020/lib/components/drawer/drawer.module.mjs +4 -4
  29. package/esm2020/lib/components/drawer/drawer.service.mjs +3 -3
  30. package/esm2020/lib/components/export-bottom-sheet/export-bottom-sheet.component.mjs +3 -3
  31. package/esm2020/lib/components/export-bottom-sheet/export-bottom-sheet.module.mjs +4 -4
  32. package/esm2020/lib/components/export-bottom-sheet/providers/export-bottom-sheet.service.mjs +6 -6
  33. package/esm2020/lib/components/form-error/control-status.directive.mjs +4 -4
  34. package/esm2020/lib/components/form-error/form-error.component.mjs +3 -3
  35. package/esm2020/lib/components/form-error/form-error.module.mjs +4 -4
  36. package/esm2020/lib/components/horizontal-stepper/horizontal-stepper.component.mjs +3 -3
  37. package/esm2020/lib/components/horizontal-stepper/horizontal-stepper.module.mjs +4 -4
  38. package/esm2020/lib/components/horizontal-stepper/step.component.mjs +3 -3
  39. package/esm2020/lib/components/image-cropper/image-cropper.component.mjs +8 -8
  40. package/esm2020/lib/components/image-cropper/image-cropper.module.mjs +4 -4
  41. package/esm2020/lib/components/layout/layout.component.mjs +3 -3
  42. package/esm2020/lib/components/layout/layout.module.mjs +4 -4
  43. package/esm2020/lib/components/loading-spinner/loading-spinner.component.mjs +3 -3
  44. package/esm2020/lib/components/loading-spinner/loading-spinner.module.mjs +4 -4
  45. package/esm2020/lib/components/loading-spinner/loading.directive.mjs +3 -3
  46. package/esm2020/lib/components/lottie/lottie.component.mjs +3 -3
  47. package/esm2020/lib/components/lottie/lottie.module.mjs +4 -4
  48. package/esm2020/lib/components/navigation/directives/show-hint.directive.mjs +163 -0
  49. package/esm2020/lib/components/navigation/horizontal/components/basic/basic.component.mjs +3 -3
  50. package/esm2020/lib/components/navigation/horizontal/components/branch/branch.component.mjs +6 -5
  51. package/esm2020/lib/components/navigation/horizontal/components/divider/divider.component.mjs +3 -3
  52. package/esm2020/lib/components/navigation/horizontal/components/spacer/spacer.component.mjs +3 -3
  53. package/esm2020/lib/components/navigation/horizontal/horizontal.component.mjs +6 -5
  54. package/esm2020/lib/components/navigation/navigation.component.mjs +3 -3
  55. package/esm2020/lib/components/navigation/navigation.module.mjs +18 -7
  56. package/esm2020/lib/components/navigation/navigation.service.mjs +3 -3
  57. package/esm2020/lib/components/navigation/navigation.types.mjs +1 -1
  58. package/esm2020/lib/components/navigation/pipes/should-hide.pipe.mjs +31 -0
  59. package/esm2020/lib/components/navigation/pipes/should-show-hint.pipe.mjs +32 -0
  60. package/esm2020/lib/components/navigation/providers/hide-item.resolver.mjs +3 -0
  61. package/esm2020/lib/components/navigation/providers/hint.resolver.mjs +3 -0
  62. package/esm2020/lib/components/navigation/providers/hint.service.mjs +20 -0
  63. package/esm2020/lib/components/navigation/public-api.mjs +3 -1
  64. package/esm2020/lib/components/navigation/vertical/components/aside/aside.component.mjs +3 -3
  65. package/esm2020/lib/components/navigation/vertical/components/basic/basic.component.mjs +8 -6
  66. package/esm2020/lib/components/navigation/vertical/components/collapsable/collapsable.component.mjs +9 -17
  67. package/esm2020/lib/components/navigation/vertical/components/divider/divider.component.mjs +3 -3
  68. package/esm2020/lib/components/navigation/vertical/components/group/group.component.mjs +6 -5
  69. package/esm2020/lib/components/navigation/vertical/components/spacer/spacer.component.mjs +3 -3
  70. package/esm2020/lib/components/navigation/vertical/vertical.component.mjs +33 -16
  71. package/esm2020/lib/components/public-api.mjs +2 -1
  72. package/esm2020/lib/components/search-bar/search-bar.component.mjs +3 -3
  73. package/esm2020/lib/components/search-bar/search-bar.module.mjs +4 -4
  74. package/esm2020/lib/components/sweet-alert/public-api.mjs +2 -1
  75. package/esm2020/lib/components/sweet-alert/sweet-alert.component.mjs +3 -3
  76. package/esm2020/lib/components/sweet-alert/sweet-alert.directive.mjs +37 -0
  77. package/esm2020/lib/components/sweet-alert/sweet-alert.module.mjs +9 -7
  78. package/esm2020/lib/components/sweet-alert/sweet-alert.service.mjs +24 -7
  79. package/esm2020/lib/components/toast/toast.component.mjs +3 -3
  80. package/esm2020/lib/components/toast/toast.module.mjs +4 -4
  81. package/esm2020/lib/components/toast/toast.service.mjs +3 -3
  82. package/esm2020/lib/components/toggle-button-group/toggle-button-group.component.mjs +3 -3
  83. package/esm2020/lib/components/toggle-button-group/toggle-button-group.module.mjs +4 -4
  84. package/esm2020/lib/components/toggle-button-group/toggle-button.component.mjs +3 -3
  85. package/esm2020/lib/components/typeahead/directives/options-scroll.directive.mjs +3 -3
  86. package/esm2020/lib/components/typeahead/directives/options-scroll.module.mjs +4 -4
  87. package/esm2020/lib/components/typeahead/typeahead.component.mjs +3 -3
  88. package/esm2020/lib/components/typeahead/typeahead.module.mjs +4 -4
  89. package/esm2020/lib/directives/autofocus/autofocus.directive.mjs +3 -3
  90. package/esm2020/lib/directives/autofocus/autofocus.module.mjs +4 -4
  91. package/esm2020/lib/directives/autogrow/autogrow.directive.mjs +3 -3
  92. package/esm2020/lib/directives/autogrow/autogrow.module.mjs +4 -4
  93. package/esm2020/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.mjs +39 -0
  94. package/esm2020/lib/directives/chip-async-typeahead/index.mjs +2 -0
  95. package/esm2020/lib/directives/chip-async-typeahead/public-api.mjs +2 -0
  96. package/esm2020/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.mjs +14 -0
  97. package/esm2020/lib/directives/chip-list/chip-list-items/chip-list-items.component.mjs +46 -0
  98. package/esm2020/lib/directives/chip-list/chip-list.constant.mjs +3 -0
  99. package/esm2020/lib/directives/chip-list/chip-list.directive.mjs +127 -0
  100. package/esm2020/lib/directives/chip-list/chip-list.module.mjs +40 -0
  101. package/esm2020/lib/directives/chip-list/index.mjs +2 -0
  102. package/esm2020/lib/directives/chip-list/public-api.mjs +5 -0
  103. package/esm2020/lib/directives/dropzone/dropzone.directive.mjs +3 -3
  104. package/esm2020/lib/directives/dropzone/dropzone.module.mjs +4 -4
  105. package/esm2020/lib/directives/image-error-placeholder/image-error-placeholder.directive.mjs +3 -3
  106. package/esm2020/lib/directives/image-error-placeholder/image-error-placeholder.module.mjs +4 -4
  107. package/esm2020/lib/directives/material/material.module.mjs +4 -4
  108. package/esm2020/lib/directives/material/nice-material-style.directive.mjs +3 -3
  109. package/esm2020/lib/directives/material/nice-rounded-style.directive.mjs +3 -3
  110. package/esm2020/lib/directives/modals/modal-on-click.directive.mjs +3 -3
  111. package/esm2020/lib/directives/modals/modal-opener.directive.mjs +3 -3
  112. package/esm2020/lib/directives/public-api.mjs +3 -1
  113. package/esm2020/lib/directives/scroll-reset/scroll-reset.directive.mjs +3 -3
  114. package/esm2020/lib/directives/scroll-reset/scroll-reset.module.mjs +4 -4
  115. package/esm2020/lib/directives/scrollbar/scrollbar.directive.mjs +3 -3
  116. package/esm2020/lib/directives/scrollbar/scrollbar.module.mjs +4 -4
  117. package/esm2020/lib/directives/stop-propagation/click-stop-propagation.directive.mjs +3 -3
  118. package/esm2020/lib/directives/stop-propagation/stop-propagation.module.mjs +4 -4
  119. package/esm2020/lib/directives/window/prevent-close-window.directive.mjs +3 -3
  120. package/esm2020/lib/directives/window/window-directive.module.mjs +4 -4
  121. package/esm2020/lib/nice.module.mjs +5 -5
  122. package/esm2020/lib/pipes/boolean.pipe.mjs +3 -3
  123. package/esm2020/lib/pipes/capitalize-first-letter.pipe.mjs +3 -3
  124. package/esm2020/lib/pipes/ceil.pipe.mjs +3 -3
  125. package/esm2020/lib/pipes/entries.pipe.mjs +3 -3
  126. package/esm2020/lib/pipes/find-by-key.pipe.mjs +3 -3
  127. package/esm2020/lib/pipes/first-letter.pipe.mjs +3 -3
  128. package/esm2020/lib/pipes/floor.pipe.mjs +3 -3
  129. package/esm2020/lib/pipes/join-if-defined.pipe.mjs +3 -3
  130. package/esm2020/lib/pipes/link.pipe.mjs +3 -3
  131. package/esm2020/lib/pipes/localized-boolean.pipe.mjs +3 -3
  132. package/esm2020/lib/pipes/localized-currency.pipe.mjs +3 -3
  133. package/esm2020/lib/pipes/localized-date-only.pipe.mjs +3 -3
  134. package/esm2020/lib/pipes/localized-date.pipe.mjs +3 -3
  135. package/esm2020/lib/pipes/minutes-to-time.pipe.mjs +3 -3
  136. package/esm2020/lib/pipes/number-to-ordinal-indicator.pipe.mjs +3 -3
  137. package/esm2020/lib/pipes/pad.pipe.mjs +3 -3
  138. package/esm2020/lib/pipes/phone.pipe.mjs +3 -3
  139. package/esm2020/lib/pipes/pipes.module.mjs +4 -4
  140. package/esm2020/lib/pipes/postal-code.pipe.mjs +3 -3
  141. package/esm2020/lib/pipes/range.pipe.mjs +3 -3
  142. package/esm2020/lib/pipes/round.pipe.mjs +3 -3
  143. package/esm2020/lib/pipes/sanitize-bypass.pipe.mjs +3 -3
  144. package/esm2020/lib/pipes/seconds-to-time.pipe.mjs +3 -3
  145. package/esm2020/lib/providers/config/config.module.mjs +4 -4
  146. package/esm2020/lib/providers/config/config.service.mjs +3 -3
  147. package/esm2020/lib/providers/media-watcher/media-watcher.module.mjs +4 -4
  148. package/esm2020/lib/providers/media-watcher/media-watcher.service.mjs +3 -3
  149. package/esm2020/lib/providers/overlay/dynamic-overlay-container.service.mjs +3 -3
  150. package/esm2020/lib/providers/overlay/dynamic-overlay.service.mjs +3 -3
  151. package/esm2020/lib/providers/splash-screen/splash-screen.module.mjs +4 -4
  152. package/esm2020/lib/providers/splash-screen/splash-screen.service.mjs +3 -3
  153. package/esm2020/lib/providers/utils/utils.module.mjs +4 -4
  154. package/esm2020/lib/providers/utils/utils.service.mjs +3 -3
  155. package/fesm2015/recursyve-nice-ui-kit.v2.mjs +2175 -1354
  156. package/fesm2015/recursyve-nice-ui-kit.v2.mjs.map +1 -1
  157. package/fesm2020/recursyve-nice-ui-kit.v2.mjs +2173 -1361
  158. package/fesm2020/recursyve-nice-ui-kit.v2.mjs.map +1 -1
  159. package/lib/components/assets-carousel/assets-carousel.component.d.ts +6 -1
  160. package/lib/components/async-typeahead/async-typeahead.component.d.ts +4 -3
  161. package/lib/components/date-range-picker/components/header/header.component.d.ts +20 -0
  162. package/lib/components/date-range-picker/components/range-preset/range-preset.component.d.ts +23 -0
  163. package/lib/components/date-range-picker/date-range-picker.component.d.ts +29 -0
  164. package/lib/components/date-range-picker/date-range-picker.module.d.ts +18 -0
  165. package/lib/components/date-range-picker/index.d.ts +1 -0
  166. package/lib/components/date-range-picker/providers/date-range-picker.service.d.ts +8 -0
  167. package/lib/components/date-range-picker/public-api.d.ts +2 -0
  168. package/lib/components/form-error/control-status.directive.d.ts +3 -5
  169. package/lib/components/navigation/directives/show-hint.directive.d.ts +36 -0
  170. package/lib/components/navigation/navigation.module.d.ts +13 -10
  171. package/lib/components/navigation/navigation.types.d.ts +8 -1
  172. package/lib/components/navigation/pipes/should-hide.pipe.d.ts +11 -0
  173. package/lib/components/navigation/pipes/should-show-hint.pipe.d.ts +12 -0
  174. package/lib/components/navigation/providers/hide-item.resolver.d.ts +5 -0
  175. package/lib/components/navigation/providers/hint.resolver.d.ts +4 -0
  176. package/lib/components/navigation/providers/hint.service.d.ts +9 -0
  177. package/lib/components/navigation/public-api.d.ts +2 -0
  178. package/lib/components/navigation/vertical/vertical.component.d.ts +6 -2
  179. package/lib/components/public-api.d.ts +1 -0
  180. package/lib/components/sweet-alert/public-api.d.ts +1 -0
  181. package/lib/components/sweet-alert/sweet-alert.directive.d.ts +13 -0
  182. package/lib/components/sweet-alert/sweet-alert.module.d.ts +7 -6
  183. package/lib/components/sweet-alert/sweet-alert.service.d.ts +11 -0
  184. package/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.d.ts +14 -0
  185. package/lib/directives/chip-async-typeahead/index.d.ts +1 -0
  186. package/lib/directives/chip-async-typeahead/public-api.d.ts +1 -0
  187. package/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.d.ts +8 -0
  188. package/lib/directives/chip-list/chip-list-items/chip-list-items.component.d.ts +26 -0
  189. package/lib/directives/chip-list/chip-list.constant.d.ts +2 -0
  190. package/lib/directives/chip-list/chip-list.directive.d.ts +29 -0
  191. package/lib/directives/chip-list/chip-list.module.d.ts +14 -0
  192. package/lib/directives/chip-list/index.d.ts +1 -0
  193. package/lib/directives/chip-list/public-api.d.ts +4 -0
  194. package/lib/directives/public-api.d.ts +2 -0
  195. package/lib/utils/array.utils.d.ts +1 -1
  196. package/package.json +9 -9
  197. package/src/lib/components/assets-carousel/assets-carousel.theme.scss +44 -38
  198. package/src/lib/components/chip-list/chip-list.theme.scss +14 -0
  199. package/src/lib/components/chip-list/components/item-list/item-list.theme.scss +37 -0
  200. package/src/lib/components/date-range-picker/date-range-picker.theme.scss +47 -0
  201. package/src/lib/components/navigation/vertical/styles/appearances/default.theme.scss +38 -0
  202. package/src/lib/components/navigation/vertical/styles/appearances/dense.theme.scss +2 -2
  203. package/src/lib/directives/chip-list/chip-list-items/chip-list-items.theme.scss +35 -0
  204. package/src/lib/nice.theme.scss +7 -0
@@ -20,9 +20,9 @@ export class NiceTransformResponseInterceptor {
20
20
  }));
21
21
  }
22
22
  }
23
- NiceTransformResponseInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceTransformResponseInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
24
- NiceTransformResponseInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceTransformResponseInterceptor });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceTransformResponseInterceptor, decorators: [{
23
+ NiceTransformResponseInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceTransformResponseInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
24
+ NiceTransformResponseInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceTransformResponseInterceptor });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceTransformResponseInterceptor, decorators: [{
26
26
  type: Injectable
27
27
  }] });
28
28
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLXJlc3BvbnNlLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9hcGkvaW50ZXJjZXB0b3JzL3RyYW5zZm9ybS1yZXNwb25zZS5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQTZDLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFckMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksZ0JBQWdCLENBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFHMUUsTUFBTSxPQUFPLGdDQUFnQztJQUNsQyxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUNyRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUN4QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDUixJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUU7Z0JBQy9CLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNQLE9BQU8sS0FBSyxDQUFDO2lCQUNoQjtnQkFFRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7b0JBQ2YsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQztpQkFDMUMsQ0FBQyxDQUFDO2FBQ047WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7NkhBbEJRLGdDQUFnQztpSUFBaEMsZ0NBQWdDOzJGQUFoQyxnQ0FBZ0M7a0JBRDVDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ29udGV4dFRva2VuLCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHBsYWluVG9JbnN0YW5jZSB9IGZyb20gXCJjbGFzcy10cmFuc2Zvcm1lclwiO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmV4cG9ydCBjb25zdCBUUkFOU0ZPUk1fVFlQRSA9IG5ldyBIdHRwQ29udGV4dFRva2VuPFR5cGU8YW55Pj4oKCkgPT4gbnVsbCk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOaWNlVHJhbnNmb3JtUmVzcG9uc2VJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gICAgcHVibGljIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gcmVxLmNvbnRleHQuZ2V0KFRSQU5TRk9STV9UWVBFKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuY2xvbmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcGxhaW5Ub0luc3RhbmNlKHR5cGUsIGV2ZW50LmJvZHkpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -170,9 +170,9 @@ export class NiceAlertComponent {
170
170
  this._changeDetectorRef.markForCheck();
171
171
  }
172
172
  }
173
- NiceAlertComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAlertComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NiceAlertService }, { token: i2.NiceUtilsService }], target: i0.ɵɵFactoryTarget.Component });
174
- NiceAlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: NiceAlertComponent, selector: "nice-alert", inputs: { appearance: "appearance", dismissed: "dismissed", dismissible: "dismissible", disableAnimation: "disableAnimation", name: "name", showIcon: "showIcon", type: "type", color: "color" }, outputs: { dismissedChanged: "dismissedChanged" }, host: { properties: { "class": "this.classList" } }, exportAs: ["niceAlert"], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"nice-alert-container\"\n *ngIf=\"!dismissible || dismissible && !dismissed\"\n [@fadeIn]=\"!dismissed && !disableAnimation\"\n [@fadeOut]=\"!dismissed && !disableAnimation\">\n\n <!-- Border -->\n <div\n class=\"nice-alert-border\"\n *ngIf=\"appearance === 'border'\"></div>\n\n <!-- Icon -->\n <div\n class=\"nice-alert-icon\"\n *ngIf=\"showIcon\">\n\n <!-- Custom icon -->\n <div class=\"nice-alert-custom-icon\">\n <ng-content select=\"[niceAlertIcon]\"></ng-content>\n </div>\n\n <!-- Default icons -->\n <div class=\"nice-alert-default-icon\">\n\n <mat-icon\n *ngIf=\"type === 'primary'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'accent'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warn'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'basic'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'info'\"\n [svgIcon]=\"'heroicons_solid:information-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'success'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warning'\"\n [svgIcon]=\"'heroicons_solid:exclamation'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'error'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n </div>\n\n </div>\n\n <!-- Content -->\n <div class=\"nice-alert-content\">\n\n <div class=\"nice-alert-title\">\n <ng-content select=\"[niceAlertTitle]\"></ng-content>\n </div>\n\n <div class=\"nice-alert-message\">\n <ng-content></ng-content>\n </div>\n\n </div>\n\n <!-- Dismiss button -->\n <button\n class=\"nice-alert-dismiss-button\"\n mat-icon-button\n (click)=\"dismiss()\">\n <mat-icon [svgIcon]=\"'heroicons_solid:x'\"></mat-icon>\n </button>\n\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], animations: niceAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
175
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAlertComponent, decorators: [{
173
+ NiceAlertComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAlertComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NiceAlertService }, { token: i2.NiceUtilsService }], target: i0.ɵɵFactoryTarget.Component });
174
+ NiceAlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", type: NiceAlertComponent, selector: "nice-alert", inputs: { appearance: "appearance", dismissed: "dismissed", dismissible: "dismissible", disableAnimation: "disableAnimation", name: "name", showIcon: "showIcon", type: "type", color: "color" }, outputs: { dismissedChanged: "dismissedChanged" }, host: { properties: { "class": "this.classList" } }, exportAs: ["niceAlert"], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"nice-alert-container\"\n *ngIf=\"!dismissible || dismissible && !dismissed\"\n [@fadeIn]=\"!dismissed && !disableAnimation\"\n [@fadeOut]=\"!dismissed && !disableAnimation\">\n\n <!-- Border -->\n <div\n class=\"nice-alert-border\"\n *ngIf=\"appearance === 'border'\"></div>\n\n <!-- Icon -->\n <div\n class=\"nice-alert-icon\"\n *ngIf=\"showIcon\">\n\n <!-- Custom icon -->\n <div class=\"nice-alert-custom-icon\">\n <ng-content select=\"[niceAlertIcon]\"></ng-content>\n </div>\n\n <!-- Default icons -->\n <div class=\"nice-alert-default-icon\">\n\n <mat-icon\n *ngIf=\"type === 'primary'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'accent'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warn'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'basic'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'info'\"\n [svgIcon]=\"'heroicons_solid:information-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'success'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warning'\"\n [svgIcon]=\"'heroicons_solid:exclamation'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'error'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n </div>\n\n </div>\n\n <!-- Content -->\n <div class=\"nice-alert-content\">\n\n <div class=\"nice-alert-title\">\n <ng-content select=\"[niceAlertTitle]\"></ng-content>\n </div>\n\n <div class=\"nice-alert-message\">\n <ng-content></ng-content>\n </div>\n\n </div>\n\n <!-- Dismiss button -->\n <button\n class=\"nice-alert-dismiss-button\"\n mat-icon-button\n (click)=\"dismiss()\">\n <mat-icon [svgIcon]=\"'heroicons_solid:x'\"></mat-icon>\n </button>\n\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], animations: niceAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAlertComponent, decorators: [{
176
176
  type: Component,
177
177
  args: [{ selector: "nice-alert", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: niceAnimations, exportAs: "niceAlert", template: "<div\n class=\"nice-alert-container\"\n *ngIf=\"!dismissible || dismissible && !dismissed\"\n [@fadeIn]=\"!dismissed && !disableAnimation\"\n [@fadeOut]=\"!dismissed && !disableAnimation\">\n\n <!-- Border -->\n <div\n class=\"nice-alert-border\"\n *ngIf=\"appearance === 'border'\"></div>\n\n <!-- Icon -->\n <div\n class=\"nice-alert-icon\"\n *ngIf=\"showIcon\">\n\n <!-- Custom icon -->\n <div class=\"nice-alert-custom-icon\">\n <ng-content select=\"[niceAlertIcon]\"></ng-content>\n </div>\n\n <!-- Default icons -->\n <div class=\"nice-alert-default-icon\">\n\n <mat-icon\n *ngIf=\"type === 'primary'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'accent'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warn'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'basic'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'info'\"\n [svgIcon]=\"'heroicons_solid:information-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'success'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warning'\"\n [svgIcon]=\"'heroicons_solid:exclamation'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'error'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n </div>\n\n </div>\n\n <!-- Content -->\n <div class=\"nice-alert-content\">\n\n <div class=\"nice-alert-title\">\n <ng-content select=\"[niceAlertTitle]\"></ng-content>\n </div>\n\n <div class=\"nice-alert-message\">\n <ng-content></ng-content>\n </div>\n\n </div>\n\n <!-- Dismiss button -->\n <button\n class=\"nice-alert-dismiss-button\"\n mat-icon-button\n (click)=\"dismiss()\">\n <mat-icon [svgIcon]=\"'heroicons_solid:x'\"></mat-icon>\n </button>\n\n</div>\n" }]
178
178
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NiceAlertService }, { type: i2.NiceUtilsService }]; }, propDecorators: { appearance: [{
@@ -6,14 +6,14 @@ import { NiceAlertComponent } from "./alert.component";
6
6
  import * as i0 from "@angular/core";
7
7
  export class NiceAlertModule {
8
8
  }
9
- NiceAlertModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAlertModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
- NiceAlertModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.3", ngImport: i0, type: NiceAlertModule, declarations: [NiceAlertComponent], imports: [CommonModule,
9
+ NiceAlertModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAlertModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ NiceAlertModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.3", ngImport: i0, type: NiceAlertModule, declarations: [NiceAlertComponent], imports: [CommonModule,
11
11
  MatButtonModule,
12
12
  MatIconModule], exports: [NiceAlertComponent] });
13
- NiceAlertModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAlertModule, imports: [CommonModule,
13
+ NiceAlertModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAlertModule, imports: [CommonModule,
14
14
  MatButtonModule,
15
15
  MatIconModule] });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAlertModule, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAlertModule, decorators: [{
17
17
  type: NgModule,
18
18
  args: [{
19
19
  imports: [
@@ -47,9 +47,9 @@ export class NiceAlertService {
47
47
  this._onShow.next(name);
48
48
  }
49
49
  }
50
- NiceAlertService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAlertService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
51
- NiceAlertService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAlertService, providedIn: "root" });
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAlertService, decorators: [{
50
+ NiceAlertService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAlertService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
51
+ NiceAlertService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAlertService, providedIn: "root" });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAlertService, decorators: [{
53
53
  type: Injectable,
54
54
  args: [{
55
55
  providedIn: "root"
@@ -24,7 +24,11 @@ export class NiceAssetsCarouselComponent {
24
24
  this.edit = false;
25
25
  this.accept = ["image/*"];
26
26
  this.customActions = [];
27
+ this.multipleUpload = false;
28
+ this.visiblePreviewAsset = 4;
29
+ this.showAddAssetContainer = true;
27
30
  this.activeChange = new EventEmitter();
31
+ this.removedAsset = new EventEmitter();
28
32
  this.listStyle = { transform: "translateX(0px)" };
29
33
  if (!this.options) {
30
34
  this.options = {
@@ -73,7 +77,7 @@ export class NiceAssetsCarouselComponent {
73
77
  }
74
78
  set activeTranslationPosition(position) {
75
79
  this._activeTranslationPosition = position;
76
- this.listStyle.transform = `translateX(${position}px)`;
80
+ this.listStyle.transform = `translateX(calc((var(--nice-assets-carousel-asset-width) + var(--nice-assets-carousel-asset-gap)) * ${position}))`;
77
81
  }
78
82
  set activeAsset(position) {
79
83
  if (position < 0) {
@@ -82,17 +86,20 @@ export class NiceAssetsCarouselComponent {
82
86
  this._active = position;
83
87
  this._activeAsset = this._assets[this._active];
84
88
  this._lastAsset = this._active === this._assets.length - 1 || !this._assets.length;
85
- this._shouldTransform = (this.edit && this._active >= 3) || this._active >= 4;
89
+ this._shouldTransform
90
+ = ((this.edit && this.showAddAssetContainer) && this._active >= (this.visiblePreviewAsset - 1))
91
+ || this._active >= this.visiblePreviewAsset;
86
92
  this.activeChange.emit(this._active);
87
93
  }
88
94
  writeValue(assets) {
89
95
  this._assets = assets ?? [];
90
- if (this._assets?.length) {
91
- this._activeAsset = this._assets[this._active];
92
- }
93
- else {
96
+ if (this._assets.length === 0) {
97
+ this._activeAsset = null;
94
98
  this._lastAsset = true;
95
99
  }
100
+ else if (this._assets.length > 0) {
101
+ this._activeAsset = this._assets[this._active];
102
+ }
96
103
  }
97
104
  registerOnChange(fn) {
98
105
  this.propagate = fn;
@@ -103,7 +110,7 @@ export class NiceAssetsCarouselComponent {
103
110
  this.activeAsset = this._active - 1;
104
111
  }
105
112
  if (this._activeTranslationPosition < 0) {
106
- this.activeTranslationPosition = this._activeTranslationPosition + 102;
113
+ this.activeTranslationPosition = this._activeTranslationPosition + 1;
107
114
  }
108
115
  }
109
116
  clickRight() {
@@ -112,23 +119,23 @@ export class NiceAssetsCarouselComponent {
112
119
  }
113
120
  this.activeAsset = this._active + 1;
114
121
  if (this._shouldTransform) {
115
- this.activeTranslationPosition = this._activeTranslationPosition - 102;
122
+ this.activeTranslationPosition = this._activeTranslationPosition - 1;
116
123
  }
117
124
  }
118
125
  clickAsset(index) {
119
- let visibleAssets = this.edit ? 2 : 3;
126
+ let visibleAssets = (this.edit && this.showAddAssetContainer) ? (this.visiblePreviewAsset - 2) : (this.visiblePreviewAsset - 1);
120
127
  if (index < visibleAssets) {
121
128
  visibleAssets = index;
122
129
  }
123
130
  if (index >= 0) {
124
- this.activeTranslationPosition = (index - visibleAssets) * -102;
131
+ this.activeTranslationPosition = (index - visibleAssets) * -1;
125
132
  }
126
133
  this.activeAsset = index;
127
134
  }
128
135
  async onFilesChange(event) {
129
136
  const files = event.target?.files;
130
137
  await this.onFilesDrop(files);
131
- this.inputElement.nativeElement.files = null;
138
+ this.inputElement.nativeElement.value = "";
132
139
  }
133
140
  async onFilesDrop(files) {
134
141
  if (!files?.length) {
@@ -158,6 +165,7 @@ export class NiceAssetsCarouselComponent {
158
165
  }
159
166
  }
160
167
  clickRemove() {
168
+ this.removedAsset.emit(this._assets[this._active]);
161
169
  this._assets.splice(this._active, 1);
162
170
  if (this._lastAsset) {
163
171
  this.clickAsset(this._assets.length - 1);
@@ -178,15 +186,15 @@ export class NiceAssetsCarouselComponent {
178
186
  await this._assetsElement.get(this._active).nativeElement.firstElementChild.play();
179
187
  }
180
188
  }
181
- NiceAssetsCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAssetsCarouselComponent, deps: [{ token: NICE_ASSETS_CAROUSEL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
182
- NiceAssetsCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: NiceAssetsCarouselComponent, selector: "nice-assets-carousel", inputs: { color: "color", edit: "edit", accept: "accept", customActions: "customActions", assets: "assets" }, outputs: { activeChange: "activeChange" }, providers: [
189
+ NiceAssetsCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAssetsCarouselComponent, deps: [{ token: NICE_ASSETS_CAROUSEL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
190
+ NiceAssetsCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", type: NiceAssetsCarouselComponent, selector: "nice-assets-carousel", inputs: { color: "color", edit: "edit", accept: "accept", customActions: "customActions", multipleUpload: "multipleUpload", visiblePreviewAsset: "visiblePreviewAsset", showAddAssetContainer: "showAddAssetContainer", assets: "assets" }, outputs: { activeChange: "activeChange", removedAsset: "removedAsset" }, providers: [
183
191
  {
184
192
  provide: NG_VALUE_ACCESSOR,
185
193
  useExisting: forwardRef(() => NiceAssetsCarouselComponent),
186
194
  multi: true
187
195
  }
188
- ], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "activeVideoElement", first: true, predicate: ["activeVideo"], descendants: true }, { propertyName: "assetsElement", predicate: ["assets"], descendants: true }], ngImport: i0, template: "<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div class=\"active-image\" [class.empty-state]=\"!_activeAsset\" matRipple [matRippleDisabled]=\"!!_activeAsset\" (click)=\"!_activeAsset && fileInput.click()\">\n <img *ngIf=\"_activeAsset?.type === 'image'\" draggable=\"false\" [src]=\"_activeAsset.url ?? _activeAsset.base64\">\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\n <div class=\"text\">\n {{ \"nice_ui_kit.assets_carousel.upload_here\" | translate }}\n </div>\n </div>\n\n <div class=\"active-buttons\" *ngIf=\"edit\">\n <button mat-icon-button (click)=\"fileInput.click()\">\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\" [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\n <mat-menu class=\"nice-asset-options-menu\" [xPosition]=\"'before'\" #assetActions=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of customActions\" (click)=\"clickCustom(action)\">\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\n <div class=\"upload-overlay\">\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 class=\"carousel\">\n <button class=\"action-button\" 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\n <div class=\"asset-list-container\">\n <div class=\"add-asset-container\" *ngIf=\"edit\">\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\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div #assets class=\"asset\" *ngFor=\"let asset of _assets; let i = index\" (click)=\"clickAsset(i)\" [ngClass]=\"color\" [class.active]=\"_active === i\">\n <img *ngIf=\"asset.type === 'image'\" draggable=\"false\" [src]=\"asset.url ?? asset.base64\">\n <video *ngIf=\"asset.type === 'video'\" draggable=\"false\" loop [src]=\"asset.url ?? asset.base64\"></video>\n </div>\n </div>\n </div>\n\n <button class=\"action-button\" 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)\">\n", styles: [""], 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.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.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-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: "pipe", type: i7.TranslatePipe, name: "translate" }], animations: niceAnimations, encapsulation: i0.ViewEncapsulation.None });
189
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAssetsCarouselComponent, decorators: [{
196
+ ], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "activeVideoElement", first: true, predicate: ["activeVideo"], descendants: true }, { propertyName: "assetsElement", predicate: ["assets"], descendants: true }], ngImport: i0, template: "<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div class=\"active-image\"\n matRipple\n [class.empty-state]=\"!_activeAsset\"\n (click)=\"edit && fileInput.click(); $event.stopPropagation()\"\n >\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\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\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 </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\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div #assets class=\"asset\" *ngFor=\"let asset of _assets; let i = index\" (click)=\"clickAsset(i)\" [ngClass]=\"color\" [class.active]=\"_active === i\">\n <img *ngIf=\"asset.type === 'image'\" draggable=\"false\" [src]=\"asset.url ?? asset.base64\" alt=\"add-image\">\n <video *ngIf=\"asset.type === 'video'\" draggable=\"false\" loop [src]=\"asset.url ?? asset.base64\"></video>\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.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.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-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: "pipe", type: i7.TranslatePipe, name: "translate" }], animations: niceAnimations, encapsulation: i0.ViewEncapsulation.None });
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAssetsCarouselComponent, decorators: [{
190
198
  type: Component,
191
199
  args: [{ selector: "nice-assets-carousel", encapsulation: ViewEncapsulation.None, animations: niceAnimations, providers: [
192
200
  {
@@ -194,7 +202,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImpor
194
202
  useExisting: forwardRef(() => NiceAssetsCarouselComponent),
195
203
  multi: true
196
204
  }
197
- ], template: "<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div class=\"active-image\" [class.empty-state]=\"!_activeAsset\" matRipple [matRippleDisabled]=\"!!_activeAsset\" (click)=\"!_activeAsset && fileInput.click()\">\n <img *ngIf=\"_activeAsset?.type === 'image'\" draggable=\"false\" [src]=\"_activeAsset.url ?? _activeAsset.base64\">\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\n <div class=\"text\">\n {{ \"nice_ui_kit.assets_carousel.upload_here\" | translate }}\n </div>\n </div>\n\n <div class=\"active-buttons\" *ngIf=\"edit\">\n <button mat-icon-button (click)=\"fileInput.click()\">\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\" [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\n <mat-menu class=\"nice-asset-options-menu\" [xPosition]=\"'before'\" #assetActions=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of customActions\" (click)=\"clickCustom(action)\">\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\n <div class=\"upload-overlay\">\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 class=\"carousel\">\n <button class=\"action-button\" 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\n <div class=\"asset-list-container\">\n <div class=\"add-asset-container\" *ngIf=\"edit\">\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\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div #assets class=\"asset\" *ngFor=\"let asset of _assets; let i = index\" (click)=\"clickAsset(i)\" [ngClass]=\"color\" [class.active]=\"_active === i\">\n <img *ngIf=\"asset.type === 'image'\" draggable=\"false\" [src]=\"asset.url ?? asset.base64\">\n <video *ngIf=\"asset.type === 'video'\" draggable=\"false\" loop [src]=\"asset.url ?? asset.base64\"></video>\n </div>\n </div>\n </div>\n\n <button class=\"action-button\" 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)\">\n" }]
205
+ ], template: "<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div class=\"active-image\"\n matRipple\n [class.empty-state]=\"!_activeAsset\"\n (click)=\"edit && fileInput.click(); $event.stopPropagation()\"\n >\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\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\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 </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\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div #assets class=\"asset\" *ngFor=\"let asset of _assets; let i = index\" (click)=\"clickAsset(i)\" [ngClass]=\"color\" [class.active]=\"_active === i\">\n <img *ngIf=\"asset.type === 'image'\" draggable=\"false\" [src]=\"asset.url ?? asset.base64\" alt=\"add-image\">\n <video *ngIf=\"asset.type === 'video'\" draggable=\"false\" loop [src]=\"asset.url ?? asset.base64\"></video>\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"] }]
198
206
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
199
207
  type: Optional
200
208
  }, {
@@ -211,8 +219,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImpor
211
219
  type: Input
212
220
  }], customActions: [{
213
221
  type: Input
222
+ }], multipleUpload: [{
223
+ type: Input
224
+ }], visiblePreviewAsset: [{
225
+ type: Input
226
+ }], showAddAssetContainer: [{
227
+ type: Input
214
228
  }], activeChange: [{
215
229
  type: Output
230
+ }], removedAsset: [{
231
+ type: Output
216
232
  }], activeVideoElement: [{
217
233
  type: ViewChild,
218
234
  args: ["activeVideo"]
@@ -222,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImpor
222
238
  }], assets: [{
223
239
  type: Input
224
240
  }] } });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQUUsU0FBUyxFQUNqQixTQUFTLEVBQUUsWUFBWSxFQUN2QixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7QUE0QzFFLE1BQU0sT0FBTywyQkFBMkI7SUEyRXBDLFlBQThFLE9BQWtDO1FBQWxDLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBMUV6RywrQkFBMEIsR0FBRyxDQUFDLENBQUM7UUFDL0IsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FBRTNCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBR3pCLGlCQUFZLEdBQWlCLFNBQVMsQ0FBQztRQU12QyxVQUFL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QUR2QixZQUFZO3VCQUFDLFFBQVE7Z0JBV1gsTUFBTTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCwgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IENhbkNvbG9yLCBUaGVtZVBhbGV0dGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xuaW1wb3J0IHsgbmljZUFuaW1hdGlvbnMgfSBmcm9tIFwiLi4vLi4vYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHsgRmlsZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyBOSUNFX0FTU0VUU19DQVJPVVNFTF9PUFRJT05TIH0gZnJvbSBcIi4vYXNzZXRzLWNhcm91c2VsLmNvbnN0YW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmljZUFzc2V0cyB7XG4gICAgdHlwZTogXCJpbWFnZVwiIHwgXCJ2aWRlb1wiO1xuICAgIGlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIHVybD86IHN0cmluZztcbiAgICBiYXNlNjQ/OiBzdHJpbmc7XG4gICAgZmlsZT86IEZpbGU7XG59XG5cbmV4cG9ydCB0eXBlIE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb24gPSB7IG1hdEljb246IHN0cmluZzsgc3ZnSWNvbj86IHN0cmluZzsgfSB8IHsgbWF0SWNvbj86IHN0cmluZzsgc3ZnSWNvbjogc3RyaW5nOyB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbnMge1xuICAgIGljb246IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGFjdGlvbjogKGFjdGl2ZTogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VBc3NldHNDYXJvdXNlbE9wdGlvbnMge1xuICAgIGFjdGlvbkJ1dHRvbnM/OiB7XG4gICAgICAgIG1vcmVPcHRpb25zPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICAgICAgYWRkUGhvdG8/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgICAgICByZW1vdmU/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIH07XG4gICAgYWRkUGhvdG8/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIGxlZnRBcnJvdz86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgcmlnaHRBcnJvdz86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgdXBsb2FkPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS1hc3NldHMtY2Fyb3VzZWxcIixcbiAgICB0ZW1wbGF0ZVVybDogXCJhc3NldHMtY2Fyb3VzZWwudGVtcGxhdGUuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiYXNzZXRzLWNhcm91c2VsLnRoZW1lLnNjc3NcIl0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBhbmltYXRpb25zOiBuaWNlQW5pbWF0aW9ucyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOaWNlQXNzZXRzQ2Fyb3VzZWxDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmljZUFzc2V0c0Nhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIENhbkNvbG9yIHtcbiAgICBwdWJsaWMgX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPSAwO1xuICAgIHB1YmxpYyBfYWN0aXZlID0gMDtcbiAgICBwdWJsaWMgX2Fzc2V0czogTmljZUFzc2V0c1tdID0gW107XG4gICAgcHVibGljIF9hY3RpdmVBc3NldDogTmljZUFzc2V0cztcbiAgICBwdWJsaWMgX2xhc3RBc3NldCA9IHRydWU7XG4gICAgcHVibGljIF9zaG91bGRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgICBwdWJsaWMgX2FjdGl2ZVZpZGVvRWxlbWVudDogRWxlbWVudFJlZjxIVE1MVmlkZW9FbGVtZW50PjtcbiAgICBwdWJsaWMgX2Fzc2V0c0VsZW1lbnQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj47XG4gICAgcHVibGljIGRlZmF1bHRDb2xvcjogVGhlbWVQYWxldHRlID0gXCJwcmltYXJ5XCI7XG5cbiAgICBAVmlld0NoaWxkKFwiZmlsZUlucHV0XCIpXG4gICAgcHVibGljIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbG9yOiBUaGVtZVBhbGV0dGUgPSB0aGlzLmRlZmF1bHRDb2xvcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVkaXQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFjY2VwdDogc3RyaW5nW10gPSBbXCJpbWFnZS8qXCJdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VzdG9tQWN0aW9uczogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uc1tdID0gW107XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWN0aXZlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBwdWJsaWMgbGlzdFN0eWxlOiB7IHRyYW5zZm9ybTogc3RyaW5nIH0gPSB7IHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDBweClcIiB9O1xuXG4gICAgcHJpdmF0ZSBwcm9wYWdhdGU6IChhc3NldHM6IE5pY2VBc3NldHNbXSkgPT4gdm9pZDtcblxuICAgIEBWaWV3Q2hpbGQoXCJhY3RpdmVWaWRlb1wiKVxuICAgIHB1YmxpYyBzZXQgYWN0aXZlVmlkZW9FbGVtZW50KGFjdGl2ZVZpZGVvRWxlbWVudDogRWxlbWVudFJlZjxIVE1MVmlkZW9FbGVtZW50Pikge1xuICAgICAgICB0aGlzLl9hY3RpdmVWaWRlb0VsZW1lbnQgPSBhY3RpdmVWaWRlb0VsZW1lbnQ7XG4gICAgICAgIGlmICghdGhpcy5fYWN0aXZlVmlkZW9FbGVtZW50IHx8ICF0aGlzLl9hc3NldHNFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXJ0U3luY1ZpZGVvKCk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZHJlbihcImFzc2V0c1wiKVxuICAgIHB1YmxpYyBzZXQgYXNzZXRzRWxlbWVudChhc3NldHNFbGVtZW50OiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KSB7XG4gICAgICAgIHRoaXMuX2Fzc2V0c0VsZW1lbnQgPSBhc3NldHNFbGVtZW50O1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudCB8fCAhdGhpcy5fYXNzZXRzRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFydFN5bmNWaWRlbygpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhc3NldHMoYXNzZXRzOiBOaWNlQXNzZXRzW10pIHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKGFzc2V0cyA/PyBbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXQgYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgdGhpcy5saXN0U3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtwb3NpdGlvbn1weClgO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0IGFjdGl2ZUFzc2V0KHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlID0gcG9zaXRpb247XG4gICAgICAgIHRoaXMuX2FjdGl2ZUFzc2V0ID0gdGhpcy5fYXNzZXRzW3RoaXMuX2FjdGl2ZV07XG4gICAgICAgIHRoaXMuX2xhc3RBc3NldCA9IHRoaXMuX2FjdGl2ZSA9PT0gdGhpcy5fYXNzZXRzLmxlbmd0aCAtIDEgfHwgIXRoaXMuX2Fzc2V0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX3Nob3VsZFRyYW5zZm9ybSA9ICh0aGlzLmVkaXQgJiYgdGhpcy5fYWN0aXZlID49IDMpIHx8IHRoaXMuX2FjdGl2ZSA+PSA0O1xuICAgICAgICB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KHRoaXMuX2FjdGl2ZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChOSUNFX0FTU0VUU19DQVJPVVNFTF9PUFRJT05TKSBwdWJsaWMgcmVhZG9ubHkgb3B0aW9uczogTmljZUFzc2V0c0Nhcm91c2VsT3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGFjdGlvbkJ1dHRvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGhvdG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwicGhvdG9fY2FtZXJhXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbW9yZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwibW9yZV92ZXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJY29uOiBcImRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZFBob3RvOiB7XG4gICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwicGhvdG9fY2FtZXJhXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxlZnRBcnJvdzoge1xuICAgICAgICAgICAgICAgICAgICBtYXRJY29uOiBcImNoZXZyb25fbGVmdFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByaWdodEFycm93OiB7XG4gICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwiY2hldnJvbl9yaWdodFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1cGxvYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJmaWxlX3VwbG9hZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKGFzc2V0czogTmljZUFzc2V0c1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Fzc2V0cyA9IGFzc2V0cyA/PyBbXTtcbiAgICAgICAgaWYgKHRoaXMuX2Fzc2V0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVBc3NldCA9IHRoaXMuX2Fzc2V0c1t0aGlzLl9hY3RpdmVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEFzc2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoYXNzZXRzOiBOaWNlQXNzZXRzW10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGUgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IChhc3NldHM6IE5pY2VBc3NldHNbXSkgPT4gdm9pZCk6IHZvaWQge31cblxuICAgIHB1YmxpYyBjbGlja0xlZnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQXNzZXQgPSB0aGlzLl9hY3RpdmUgLSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPSB0aGlzLl9hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uICsgMTAyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9sYXN0QXNzZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlQXNzZXQgPSB0aGlzLl9hY3RpdmUgKyAxO1xuICAgICAgICBpZiAodGhpcy5fc2hvdWxkVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPSB0aGlzLl9hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uIC0gMTAyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrQXNzZXQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgdmlzaWJsZUFzc2V0cyA9IHRoaXMuZWRpdCA/IDIgOiAzO1xuICAgICAgICBpZiAoaW5kZXggPCB2aXNpYmxlQXNzZXRzKSB7XG4gICAgICAgICAgICB2aXNpYmxlQXNzZXRzID0gaW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uID0gKGluZGV4IC0gdmlzaWJsZUFzc2V0cykgKiAtMTAyO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVBc3NldCA9IGluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbkZpbGVzQ2hhbmdlKGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBmaWxlcyA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmZpbGVzO1xuICAgICAgICBhd2FpdCB0aGlzLm9uRmlsZXNEcm9wKGZpbGVzKTtcblxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZpbGVzID0gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25GaWxlc0Ryb3AoZmlsZXM6IEZpbGVMaXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghZmlsZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld0Fzc2V0c0FkZGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlcy5pdGVtKGkpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFjY2VwdC5zb21lKChhY2NlcHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0LmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoYWNjZXB0LnJlcGxhY2UoXCIqXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjZXB0ID09PSBmaWxlLnR5cGU7XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXdBc3NldHNBZGRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hc3NldHMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUuc3BsaXQoXCIvXCIpLnNoaWZ0KCkgYXMgXCJpbWFnZVwiIHwgXCJ2aWRlb1wiLFxuICAgICAgICAgICAgICAgIGJhc2U2NDogYXdhaXQgRmlsZVV0aWxzLmdldERhdGFVcmwoZmlsZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0Fzc2V0c0FkZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrQXNzZXQodGhpcy5fYXNzZXRzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGU/Lih0aGlzLl9hc3NldHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrUmVtb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hc3NldHMuc3BsaWNlKHRoaXMuX2FjdGl2ZSwgMSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2xhc3RBc3NldCkge1xuICAgICAgICAgICAgdGhpcy5jbGlja0Fzc2V0KHRoaXMuX2Fzc2V0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tBc3NldCh0aGlzLl9hY3RpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wYWdhdGU/Lih0aGlzLl9hc3NldHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0N1c3RvbShhY3Rpb246IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbih0aGlzLl9hY3RpdmUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdGFydFN5bmNWaWRlbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5wYXVzZSgpO1xuICAgICAgICAodGhpcy5fYXNzZXRzRWxlbWVudC5nZXQodGhpcy5fYWN0aXZlKS5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxWaWRlb0VsZW1lbnQpLmN1cnJlbnRUaW1lID0gMDtcblxuICAgICAgICB0aGlzLl9hY3RpdmVWaWRlb0VsZW1lbnQubmF0aXZlRWxlbWVudC5jdXJyZW50VGltZSA9IDA7XG4gICAgICAgIGF3YWl0IHRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudC5uYXRpdmVFbGVtZW50LnBsYXkoKTtcbiAgICAgICAgYXdhaXQgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5wbGF5KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcm91c2VsLWNvbnRhaW5lclwiIG5pY2VEcm9wem9uZSAoZmlsZXNEcm9wcGVkKT1cIm9uRmlsZXNEcm9wKCRldmVudClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aXZlLWltYWdlXCIgW2NsYXNzLmVtcHR5LXN0YXRlXT1cIiFfYWN0aXZlQXNzZXRcIiBtYXRSaXBwbGUgW21hdFJpcHBsZURpc2FibGVkXT1cIiEhX2FjdGl2ZUFzc2V0XCIgKGNsaWNrKT1cIiFfYWN0aXZlQXNzZXQgJiYgZmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyAqbmdJZj1cIl9hY3RpdmVBc3NldD8udHlwZSA9PT0gJ2ltYWdlJ1wiIGRyYWdnYWJsZT1cImZhbHNlXCIgW3NyY109XCJfYWN0aXZlQXNzZXQudXJsID8/IF9hY3RpdmVBc3NldC5iYXNlNjRcIj5cbiAgICAgICAgPHZpZGVvICNhY3RpdmVWaWRlbyAqbmdJZj1cIl9hY3RpdmVBc3NldD8udHlwZSA9PT0gJ3ZpZGVvJ1wiIGRyYWdnYWJsZT1cImZhbHNlXCIgbG9vcCBbc3JjXT1cIl9hY3RpdmVBc3NldC51cmwgPz8gX2FjdGl2ZUFzc2V0LmJhc2U2NFwiPjwvdmlkZW8+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlLWNvbnRlbnRcIiAqbmdJZj1cIiFfYWN0aXZlQXNzZXRcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMudXBsb2FkLm1hdEljb25cIj57eyBvcHRpb25zLnVwbG9hZC5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMudXBsb2FkLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLnVwbG9hZC5zdmdJY29uXCI+PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5cbiAgICAgICAgICAgICAgICB7eyBcIm5pY2VfdWlfa2l0LmFzc2V0c19jYXJvdXNlbC51cGxvYWRfaGVyZVwiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGl2ZS1idXR0b25zXCIgKm5nSWY9XCJlZGl0XCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8ubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5hZGRQaG90by5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8uc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMuYWN0aW9uQnV0dG9ucy5hZGRQaG90by5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFzc2V0QWN0aW9uc1wiIFtkaXNhYmxlZF09XCIhX2FjdGl2ZUFzc2V0XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLm1vcmVPcHRpb25zLm1hdEljb25cIj57eyBvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLm1vcmVPcHRpb25zLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMuc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPG1hdC1tZW51IGNsYXNzPVwibmljZS1hc3NldC1vcHRpb25zLW1lbnVcIiBbeFBvc2l0aW9uXT1cIidiZWZvcmUnXCIgI2Fzc2V0QWN0aW9ucz1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjdXN0b21BY3Rpb25zXCIgKGNsaWNrKT1cImNsaWNrQ3VzdG9tKGFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiYWN0aW9uLmljb24ubWF0SWNvblwiPnt7IGFjdGlvbi5pY29uLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiYWN0aW9uLmljb24uc3ZnSWNvblwiICpuZ0lmPVwiYWN0aW9uLmljb24uc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGFjdGlvbi5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2xpY2tSZW1vdmUoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLm1hdEljb25cIj57eyBvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMucmVtb3ZlLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcIm5pY2VfdWlfa2l0LmFzc2V0c19jYXJvdXNlbC5kZWxldGVcIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtb3ZlcmxheVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy51cGxvYWQubWF0SWNvblwiPnt7IG9wdGlvbnMudXBsb2FkLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy51cGxvYWQuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMudXBsb2FkLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIV9hY3RpdmVcIiAoY2xpY2spPVwiY2xpY2tMZWZ0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMubGVmdEFycm93Lm1hdEljb25cIj57eyBvcHRpb25zLmxlZnRBcnJvdy5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFycm93c1wiICpuZ0lmPVwib3B0aW9ucy5sZWZ0QXJyb3cuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMubGVmdEFycm93LnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXQtbGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtYXNzZXQtY29udGFpbmVyXCIgKm5nSWY9XCJlZGl0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1hc3NldFwiIG1hdFJpcHBsZSAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hZGRQaG90by5tYXRJY29uXCI+e3sgb3B0aW9ucy5hZGRQaG90by5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hZGRQaG90by5zdmdJY29uXCIgW3N2Z0ljb25dPVwib3B0aW9ucy5hZGRQaG90by5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXQtbGlzdFwiIFtuZ1N0eWxlXT1cImxpc3RTdHlsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgI2Fzc2V0cyBjbGFzcz1cImFzc2V0XCIgKm5nRm9yPVwibGV0IGFzc2V0IG9mIF9hc3NldHM7IGxldCBpID0gaW5kZXhcIiAoY2xpY2spPVwiY2xpY2tBc3NldChpKVwiIFtuZ0NsYXNzXT1cImNvbG9yXCIgW2NsYXNzLmFjdGl2ZV09XCJfYWN0aXZlID09PSBpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJhc3NldC50eXBlID09PSAnaW1hZ2UnXCIgZHJhZ2dhYmxlPVwiZmFsc2VcIiBbc3JjXT1cImFzc2V0LnVybCA/PyBhc3NldC5iYXNlNjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZpZGVvICpuZ0lmPVwiYXNzZXQudHlwZSA9PT0gJ3ZpZGVvJ1wiIGRyYWdnYWJsZT1cImZhbHNlXCIgbG9vcCBbc3JjXT1cImFzc2V0LnVybCA/PyBhc3NldC5iYXNlNjRcIj48L3ZpZGVvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCJfbGFzdEFzc2V0XCIgKGNsaWNrKT1cImNsaWNrUmlnaHQoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5yaWdodEFycm93Lm1hdEljb25cIj57eyBvcHRpb25zLnJpZ2h0QXJyb3cubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhcnJvd3NcIiAqbmdJZj1cIm9wdGlvbnMucmlnaHRBcnJvdy5zdmdJY29uXCIgW3N2Z0ljb25dPVwib3B0aW9ucy5yaWdodEFycm93LnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48aW5wdXQgI2ZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIGhpZGRlbiBbYWNjZXB0XT1cImFjY2VwdFwiIChjaGFuZ2UpPVwib25GaWxlc0NoYW5nZSgkZXZlbnQpXCI+XG4iXX0=
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtdWkta2l0LXYyL3NyYy9saWIvY29tcG9uZW50cy9hc3NldHMtY2Fyb3VzZWwvYXNzZXRzLWNhcm91c2VsLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQUUsU0FBUyxFQUNqQixTQUFTLEVBQUUsWUFBWSxFQUN2QixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7QUE0QzFFLE1BQU0sT0FBTywyQkFBMkI7SUEyRnBDLFlBQThFLE9BQWtDO1FBQWxDLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBMUZ6RywrQkFBMEIsR0FBRyxDQUFDLENBQUM7UUFDL0IsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FBRTNCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBR3pCLGlCQUFZLEdBQWlCLFNBQVMsQ0FBQztRQU12QyxVQUFL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QUFFLElBQUk7U0FDZDtLQUNKLHNUQzFETCxpbExBNEZBLHF6RER6Q2dCLGNBQWM7MkZBU2pCLDJCQUEyQjtrQkFkdkMsU0FBUzsrQkFDSSxzQkFBc0IsaUJBR2pCLGlCQUFpQixDQUFDLElBQUksY0FDekIsY0FBYyxhQUNmO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDOzRCQUMxRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjs7MEJBNkZZLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNEJBQTRCOzRDQS9FckQsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxXQUFXO2dCQUlmLEtBQUs7c0JBRFgsS0FBSztnQkFJQyxJQUFJO3NCQURWLEtBQUs7Z0JBSUMsTUFBTTtzQkFEWixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBSUMscUJBQXFCO3NCQUQzQixLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLE1BQU07Z0JBSUEsWUFBWTtzQkFEbEIsTUFBTTtnQkFVSSxrQkFBa0I7c0JBRDVCLFNBQVM7dUJBQUMsYUFBYTtnQkFXYixhQUFhO3NCQUR2QixZQUFZO3VCQUFDLFFBQVE7Z0JBV1gsTUFBTTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCwgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IENhbkNvbG9yLCBUaGVtZVBhbGV0dGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xuaW1wb3J0IHsgbmljZUFuaW1hdGlvbnMgfSBmcm9tIFwiLi4vLi4vYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHsgRmlsZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyBOSUNFX0FTU0VUU19DQVJPVVNFTF9PUFRJT05TIH0gZnJvbSBcIi4vYXNzZXRzLWNhcm91c2VsLmNvbnN0YW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmljZUFzc2V0cyB7XG4gICAgdHlwZTogXCJpbWFnZVwiIHwgXCJ2aWRlb1wiO1xuICAgIGlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIHVybD86IHN0cmluZztcbiAgICBiYXNlNjQ/OiBzdHJpbmc7XG4gICAgZmlsZT86IEZpbGU7XG59XG5cbmV4cG9ydCB0eXBlIE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb24gPSB7IG1hdEljb246IHN0cmluZzsgc3ZnSWNvbj86IHN0cmluZzsgfSB8IHsgbWF0SWNvbj86IHN0cmluZzsgc3ZnSWNvbjogc3RyaW5nOyB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbnMge1xuICAgIGljb246IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGFjdGlvbjogKGFjdGl2ZTogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VBc3NldHNDYXJvdXNlbE9wdGlvbnMge1xuICAgIGFjdGlvbkJ1dHRvbnM/OiB7XG4gICAgICAgIG1vcmVPcHRpb25zPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbiAgICAgICAgYWRkUGhvdG8/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgICAgICByZW1vdmU/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIH07XG4gICAgYWRkUGhvdG8/OiBOaWNlQXNzZXRzQ2Fyb3VzZWxBY3Rpb25JY29uO1xuICAgIGxlZnRBcnJvdz86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgcmlnaHRBcnJvdz86IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbkljb247XG4gICAgdXBsb2FkPzogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uSWNvbjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS1hc3NldHMtY2Fyb3VzZWxcIixcbiAgICB0ZW1wbGF0ZVVybDogXCJhc3NldHMtY2Fyb3VzZWwudGVtcGxhdGUuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiYXNzZXRzLWNhcm91c2VsLnRoZW1lLnNjc3NcIl0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBhbmltYXRpb25zOiBuaWNlQW5pbWF0aW9ucyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOaWNlQXNzZXRzQ2Fyb3VzZWxDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmljZUFzc2V0c0Nhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIENhbkNvbG9yIHtcbiAgICBwdWJsaWMgX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPSAwO1xuICAgIHB1YmxpYyBfYWN0aXZlID0gMDtcbiAgICBwdWJsaWMgX2Fzc2V0czogTmljZUFzc2V0c1tdID0gW107XG4gICAgcHVibGljIF9hY3RpdmVBc3NldDogTmljZUFzc2V0cztcbiAgICBwdWJsaWMgX2xhc3RBc3NldCA9IHRydWU7XG4gICAgcHVibGljIF9zaG91bGRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgICBwdWJsaWMgX2FjdGl2ZVZpZGVvRWxlbWVudDogRWxlbWVudFJlZjxIVE1MVmlkZW9FbGVtZW50PjtcbiAgICBwdWJsaWMgX2Fzc2V0c0VsZW1lbnQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj47XG4gICAgcHVibGljIGRlZmF1bHRDb2xvcjogVGhlbWVQYWxldHRlID0gXCJwcmltYXJ5XCI7XG5cbiAgICBAVmlld0NoaWxkKFwiZmlsZUlucHV0XCIpXG4gICAgcHVibGljIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbG9yOiBUaGVtZVBhbGV0dGUgPSB0aGlzLmRlZmF1bHRDb2xvcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVkaXQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFjY2VwdDogc3RyaW5nW10gPSBbXCJpbWFnZS8qXCJdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VzdG9tQWN0aW9uczogTmljZUFzc2V0c0Nhcm91c2VsQWN0aW9uc1tdID0gW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aXBsZVVwbG9hZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmlzaWJsZVByZXZpZXdBc3NldCA9IDQ7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93QWRkQXNzZXRDb250YWluZXIgPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGFjdGl2ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlbW92ZWRBc3NldCA9IG5ldyBFdmVudEVtaXR0ZXI8TmljZUFzc2V0cz4oKTtcblxuICAgIHB1YmxpYyBsaXN0U3R5bGU6IHsgdHJhbnNmb3JtOiBzdHJpbmcgfSA9IHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVgoMHB4KVwiIH07XG5cbiAgICBwdWJsaWMgc2hvd092ZXJsYXk6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIHByb3BhZ2F0ZTogKGFzc2V0czogTmljZUFzc2V0c1tdKSA9PiB2b2lkO1xuXG4gICAgQFZpZXdDaGlsZChcImFjdGl2ZVZpZGVvXCIpXG4gICAgcHVibGljIHNldCBhY3RpdmVWaWRlb0VsZW1lbnQoYWN0aXZlVmlkZW9FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+KSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudCA9IGFjdGl2ZVZpZGVvRWxlbWVudDtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmVWaWRlb0VsZW1lbnQgfHwgIXRoaXMuX2Fzc2V0c0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhcnRTeW5jVmlkZW8oKTtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkcmVuKFwiYXNzZXRzXCIpXG4gICAgcHVibGljIHNldCBhc3NldHNFbGVtZW50KGFzc2V0c0VsZW1lbnQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4pIHtcbiAgICAgICAgdGhpcy5fYXNzZXRzRWxlbWVudCA9IGFzc2V0c0VsZW1lbnQ7XG4gICAgICAgIGlmICghdGhpcy5fYWN0aXZlVmlkZW9FbGVtZW50IHx8ICF0aGlzLl9hc3NldHNFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXJ0U3luY1ZpZGVvKCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGFzc2V0cyhhc3NldHM6IE5pY2VBc3NldHNbXSkge1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUoYXNzZXRzID8/IFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldCBhY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICB0aGlzLmxpc3RTdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWChjYWxjKCh2YXIoLS1uaWNlLWFzc2V0cy1jYXJvdXNlbC1hc3NldC13aWR0aCkgKyB2YXIoLS1uaWNlLWFzc2V0cy1jYXJvdXNlbC1hc3NldC1nYXApKSAqICR7cG9zaXRpb259KSlgO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0IGFjdGl2ZUFzc2V0KHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlID0gcG9zaXRpb247XG4gICAgICAgIHRoaXMuX2FjdGl2ZUFzc2V0ID0gdGhpcy5fYXNzZXRzW3RoaXMuX2FjdGl2ZV07XG4gICAgICAgIHRoaXMuX2xhc3RBc3NldCA9IHRoaXMuX2FjdGl2ZSA9PT0gdGhpcy5fYXNzZXRzLmxlbmd0aCAtIDEgfHwgIXRoaXMuX2Fzc2V0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX3Nob3VsZFRyYW5zZm9ybVxuICAgICAgICAgICAgPSAoKHRoaXMuZWRpdCAmJiB0aGlzLnNob3dBZGRBc3NldENvbnRhaW5lcikgJiYgdGhpcy5fYWN0aXZlID49ICh0aGlzLnZpc2libGVQcmV2aWV3QXNzZXQgLSAxKSlcbiAgICAgICAgICAgIHx8IHRoaXMuX2FjdGl2ZSA+PSB0aGlzLnZpc2libGVQcmV2aWV3QXNzZXQ7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KE5JQ0VfQVNTRVRTX0NBUk9VU0VMX09QVElPTlMpIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBOaWNlQXNzZXRzQ2Fyb3VzZWxPcHRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uQnV0dG9uczoge1xuICAgICAgICAgICAgICAgICAgICBhZGRQaG90bzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJwaG90b19jYW1lcmFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtb3JlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJtb3JlX3ZlcnRcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWRkUGhvdG86IHtcbiAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJwaG90b19jYW1lcmFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbGVmdEFycm93OiB7XG4gICAgICAgICAgICAgICAgICAgIG1hdEljb246IFwiY2hldnJvbl9sZWZ0XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJpZ2h0QXJyb3c6IHtcbiAgICAgICAgICAgICAgICAgICAgbWF0SWNvbjogXCJjaGV2cm9uX3JpZ2h0XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVwbG9hZDoge1xuICAgICAgICAgICAgICAgICAgICBtYXRJY29uOiBcImZpbGVfdXBsb2FkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUoYXNzZXRzOiBOaWNlQXNzZXRzW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXNzZXRzID0gYXNzZXRzID8/IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLl9hc3NldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVBc3NldCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sYXN0QXNzZXQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2Fzc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVBc3NldCA9IHRoaXMuX2Fzc2V0c1t0aGlzLl9hY3RpdmVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChhc3NldHM6IE5pY2VBc3NldHNbXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKGFzc2V0czogTmljZUFzc2V0c1tdKSA9PiB2b2lkKTogdm9pZCB7fVxuXG4gICAgcHVibGljIGNsaWNrTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVBc3NldCA9IHRoaXMuX2FjdGl2ZSAtIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IHRoaXMuX2FjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9sYXN0QXNzZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlQXNzZXQgPSB0aGlzLl9hY3RpdmUgKyAxO1xuICAgICAgICBpZiAodGhpcy5fc2hvdWxkVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRyYW5zbGF0aW9uUG9zaXRpb24gPSB0aGlzLl9hY3RpdmVUcmFuc2xhdGlvblBvc2l0aW9uIC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0Fzc2V0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IHZpc2libGVBc3NldHMgPSAodGhpcy5lZGl0ICYmIHRoaXMuc2hvd0FkZEFzc2V0Q29udGFpbmVyKSA/ICh0aGlzLnZpc2libGVQcmV2aWV3QXNzZXQgLSAyKSA6ICh0aGlzLnZpc2libGVQcmV2aWV3QXNzZXQgLSAxKTtcbiAgICAgICAgaWYgKGluZGV4IDwgdmlzaWJsZUFzc2V0cykge1xuICAgICAgICAgICAgdmlzaWJsZUFzc2V0cyA9IGluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVHJhbnNsYXRpb25Qb3NpdGlvbiA9IChpbmRleCAtIHZpc2libGVBc3NldHMpICogLTE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZUFzc2V0ID0gaW5kZXg7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uRmlsZXNDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8uZmlsZXM7XG4gICAgICAgIGF3YWl0IHRoaXMub25GaWxlc0Ryb3AoZmlsZXMpO1xuXG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbkZpbGVzRHJvcChmaWxlczogRmlsZUxpc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3QXNzZXRzQWRkZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzLml0ZW0oaSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWNjZXB0LnNvbWUoKGFjY2VwdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhY2NlcHQuZW5kc1dpdGgoXCIqXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlLnR5cGUuc3RhcnRzV2l0aChhY2NlcHQucmVwbGFjZShcIipcIiwgXCJcIikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBhY2NlcHQgPT09IGZpbGUudHlwZTtcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5ld0Fzc2V0c0FkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2V0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZS5zcGxpdChcIi9cIikuc2hpZnQoKSBhcyBcImltYWdlXCIgfCBcInZpZGVvXCIsXG4gICAgICAgICAgICAgICAgYmFzZTY0OiBhd2FpdCBGaWxlVXRpbHMuZ2V0RGF0YVVybChmaWxlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3QXNzZXRzQWRkZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tBc3NldCh0aGlzLl9hc3NldHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZT8uKHRoaXMuX2Fzc2V0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tSZW1vdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlZEFzc2V0LmVtaXQodGhpcy5fYXNzZXRzW3RoaXMuX2FjdGl2ZV0pO1xuICAgICAgICB0aGlzLl9hc3NldHMuc3BsaWNlKHRoaXMuX2FjdGl2ZSwgMSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2xhc3RBc3NldCkge1xuICAgICAgICAgICAgdGhpcy5jbGlja0Fzc2V0KHRoaXMuX2Fzc2V0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tBc3NldCh0aGlzLl9hY3RpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wYWdhdGU/Lih0aGlzLl9hc3NldHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0N1c3RvbShhY3Rpb246IE5pY2VBc3NldHNDYXJvdXNlbEFjdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbih0aGlzLl9hY3RpdmUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdGFydFN5bmNWaWRlbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5wYXVzZSgpO1xuICAgICAgICAodGhpcy5fYXNzZXRzRWxlbWVudC5nZXQodGhpcy5fYWN0aXZlKS5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxWaWRlb0VsZW1lbnQpLmN1cnJlbnRUaW1lID0gMDtcblxuICAgICAgICB0aGlzLl9hY3RpdmVWaWRlb0VsZW1lbnQubmF0aXZlRWxlbWVudC5jdXJyZW50VGltZSA9IDA7XG4gICAgICAgIGF3YWl0IHRoaXMuX2FjdGl2ZVZpZGVvRWxlbWVudC5uYXRpdmVFbGVtZW50LnBsYXkoKTtcbiAgICAgICAgYXdhaXQgKHRoaXMuX2Fzc2V0c0VsZW1lbnQuZ2V0KHRoaXMuX2FjdGl2ZSkubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MVmlkZW9FbGVtZW50KS5wbGF5KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcm91c2VsLWNvbnRhaW5lclwiIG5pY2VEcm9wem9uZSAoZmlsZXNEcm9wcGVkKT1cIm9uRmlsZXNEcm9wKCRldmVudClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aXZlLWltYWdlXCJcbiAgICAgICAgIG1hdFJpcHBsZVxuICAgICAgICAgW2NsYXNzLmVtcHR5LXN0YXRlXT1cIiFfYWN0aXZlQXNzZXRcIlxuICAgICAgICAgKGNsaWNrKT1cImVkaXQgJiYgZmlsZUlucHV0LmNsaWNrKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgICAqbmdJZj1cIl9hY3RpdmVBc3NldD8udHlwZSA9PT0gJ2ltYWdlJ1wiXG4gICAgICAgICAgICAobW91c2VvdmVyKT1cInNob3dPdmVybGF5PXRydWVcIlxuICAgICAgICAgICAgW3NyY109XCJfYWN0aXZlQXNzZXQudXJsID8/IF9hY3RpdmVBc3NldC5iYXNlNjRcIlxuICAgICAgICAgICAgZHJhZ2dhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgICAgICBhbHQ9XCJhY3RpdmUtaW1hZ2VcIlxuICAgICAgICA+XG4gICAgICAgIDx2aWRlbyAjYWN0aXZlVmlkZW8gKm5nSWY9XCJfYWN0aXZlQXNzZXQ/LnR5cGUgPT09ICd2aWRlbydcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIGxvb3AgW3NyY109XCJfYWN0aXZlQXNzZXQudXJsID8/IF9hY3RpdmVBc3NldC5iYXNlNjRcIj48L3ZpZGVvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZS1jb250ZW50XCIgKm5nSWY9XCIhX2FjdGl2ZUFzc2V0XCI+XG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLnVwbG9hZC5tYXRJY29uXCI+e3sgb3B0aW9ucy51cGxvYWQubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLnVwbG9hZC5zdmdJY29uXCIgW3N2Z0ljb25dPVwib3B0aW9ucy51cGxvYWQuc3ZnSWNvblwiPjwvbWF0LWljb24+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCI+XG4gICAgICAgICAgICAgICAge3sgXCJuaWNlX3VpX2tpdC5hc3NldHNfY2Fyb3VzZWwudXBsb2FkX2hlcmVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJfYWN0aXZlQXNzZXQgJiYgc2hvd092ZXJsYXkgJiYgZWRpdFwiIGNsYXNzPVwiYWN0aXZlLWltYWdlLW92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAobW91c2VvdXQpPVwic2hvd092ZXJsYXk9ZmFsc2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdy1mdWxsIGgtZnVsbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy51cGxvYWQubWF0SWNvblwiPnt7IG9wdGlvbnMudXBsb2FkLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMudXBsb2FkLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLnVwbG9hZC5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZWRpdFwiIGNsYXNzPVwiYWN0aXZlLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLmFkZFBob3RvLm1hdEljb25cIj57eyBvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8ubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5hY3Rpb25CdXR0b25zLmFkZFBob3RvLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMuYWRkUGhvdG8uc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJhc3NldEFjdGlvbnNcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2Rpc2FibGVkXT1cIiFfYWN0aXZlQXNzZXRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5tb3JlT3B0aW9ucy5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFjdGlvbkJ1dHRvbnMubW9yZU9wdGlvbnMuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMuYWN0aW9uQnV0dG9ucy5tb3JlT3B0aW9ucy5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8bWF0LW1lbnUgY2xhc3M9XCJuaWNlLWFzc2V0LW9wdGlvbnMtbWVudVwiIFt4UG9zaXRpb25dPVwiJ2JlZm9yZSdcIiAjYXNzZXRBY3Rpb25zPVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGN1c3RvbUFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tDdXN0b20oYWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhY3Rpb24uaWNvbi5tYXRJY29uXCI+e3sgYWN0aW9uLmljb24ubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCJhY3Rpb24uaWNvbi5zdmdJY29uXCIgKm5nSWY9XCJhY3Rpb24uaWNvbi5zdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjbGlja1JlbW92ZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUubWF0SWNvblwiPnt7IG9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMuYWN0aW9uQnV0dG9ucy5yZW1vdmUuc3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IFwibmljZV91aV9raXQuYXNzZXRzX2Nhcm91c2VsLmRlbGV0ZVwiIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWxcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dBZGRBc3NldENvbnRhaW5lciB8fCBfYWN0aXZlQXNzZXRcIiBjbGFzcz1cImFjdGlvbi1idXR0b24gbGVmdC1hcnJvd1wiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIV9hY3RpdmVcIiAoY2xpY2spPVwiY2xpY2tMZWZ0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm9wdGlvbnMubGVmdEFycm93Lm1hdEljb25cIj57eyBvcHRpb25zLmxlZnRBcnJvdy5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFycm93c1wiICpuZ0lmPVwib3B0aW9ucy5sZWZ0QXJyb3cuc3ZnSWNvblwiIFtzdmdJY29uXT1cIm9wdGlvbnMubGVmdEFycm93LnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFzc2V0LWxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FkZEFzc2V0Q29udGFpbmVyICYmIGVkaXRcIiBjbGFzcz1cImFkZC1hc3NldC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWFzc2V0XCIgbWF0UmlwcGxlIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFkZFBob3RvLm1hdEljb25cIj57eyBvcHRpb25zLmFkZFBob3RvLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJvcHRpb25zLmFkZFBob3RvLnN2Z0ljb25cIiBbc3ZnSWNvbl09XCJvcHRpb25zLmFkZFBob3RvLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhc3NldC1saXN0XCIgW25nU3R5bGVdPVwibGlzdFN0eWxlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAjYXNzZXRzIGNsYXNzPVwiYXNzZXRcIiAqbmdGb3I9XCJsZXQgYXNzZXQgb2YgX2Fzc2V0czsgbGV0IGkgPSBpbmRleFwiIChjbGljayk9XCJjbGlja0Fzc2V0KGkpXCIgW25nQ2xhc3NdPVwiY29sb3JcIiBbY2xhc3MuYWN0aXZlXT1cIl9hY3RpdmUgPT09IGlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImFzc2V0LnR5cGUgPT09ICdpbWFnZSdcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIFtzcmNdPVwiYXNzZXQudXJsID8/IGFzc2V0LmJhc2U2NFwiIGFsdD1cImFkZC1pbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICA8dmlkZW8gKm5nSWY9XCJhc3NldC50eXBlID09PSAndmlkZW8nXCIgZHJhZ2dhYmxlPVwiZmFsc2VcIiBsb29wIFtzcmNdPVwiYXNzZXQudXJsID8/IGFzc2V0LmJhc2U2NFwiPjwvdmlkZW8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93QWRkQXNzZXRDb250YWluZXIgfHwgX2FjdGl2ZUFzc2V0XCIgY2xhc3M9XCJhY3Rpb24tYnV0dG9uIHJpZ2h0LWFycm93XCIgbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCJfbGFzdEFzc2V0XCIgKGNsaWNrKT1cImNsaWNrUmlnaHQoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwib3B0aW9ucy5yaWdodEFycm93Lm1hdEljb25cIj57eyBvcHRpb25zLnJpZ2h0QXJyb3cubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhcnJvd3NcIiAqbmdJZj1cIm9wdGlvbnMucmlnaHRBcnJvdy5zdmdJY29uXCIgW3N2Z0ljb25dPVwib3B0aW9ucy5yaWdodEFycm93LnN2Z0ljb25cIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48aW5wdXQgI2ZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIGhpZGRlbiBbYWNjZXB0XT1cImFjY2VwdFwiIChjaGFuZ2UpPVwib25GaWxlc0NoYW5nZSgkZXZlbnQpXCIgW211bHRpcGxlXT1cIm11bHRpcGxlVXBsb2FkXCI+XG4iXX0=
@@ -48,22 +48,22 @@ export class NiceAssetsCarouselModule {
48
48
  };
49
49
  }
50
50
  }
51
- NiceAssetsCarouselModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAssetsCarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52
- NiceAssetsCarouselModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.3", ngImport: i0, type: NiceAssetsCarouselModule, declarations: [NiceAssetsCarouselComponent], imports: [CommonModule,
51
+ NiceAssetsCarouselModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAssetsCarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52
+ NiceAssetsCarouselModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.3", ngImport: i0, type: NiceAssetsCarouselModule, declarations: [NiceAssetsCarouselComponent], imports: [CommonModule,
53
53
  MatIconModule,
54
54
  MatButtonModule,
55
55
  MatMenuModule,
56
56
  MatRippleModule,
57
57
  NiceDropzoneModule,
58
58
  TranslateModule], exports: [NiceAssetsCarouselComponent] });
59
- NiceAssetsCarouselModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAssetsCarouselModule, imports: [CommonModule,
59
+ NiceAssetsCarouselModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAssetsCarouselModule, imports: [CommonModule,
60
60
  MatIconModule,
61
61
  MatButtonModule,
62
62
  MatMenuModule,
63
63
  MatRippleModule,
64
64
  NiceDropzoneModule,
65
65
  TranslateModule] });
66
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NiceAssetsCarouselModule, decorators: [{
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceAssetsCarouselModule, decorators: [{
67
67
  type: NgModule,
68
68
  args: [{
69
69
  imports: [