@fundamental-ngx/core 0.58.2-rc.0 → 0.58.2

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 (297) hide show
  1. package/fesm2022/fundamental-ngx-core-action-bar.mjs +26 -26
  2. package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
  3. package/fesm2022/fundamental-ngx-core-action-sheet.mjs +20 -20
  4. package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  5. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs +28 -28
  6. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs.map +1 -1
  7. package/fesm2022/fundamental-ngx-core-avatar-group.mjs +34 -34
  8. package/fesm2022/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  9. package/fesm2022/fundamental-ngx-core-avatar.mjs +10 -10
  10. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  11. package/fesm2022/fundamental-ngx-core-bar.mjs +25 -25
  12. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  13. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +10 -10
  14. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  15. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +15 -15
  16. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  17. package/fesm2022/fundamental-ngx-core-button.mjs +15 -15
  18. package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
  19. package/fesm2022/fundamental-ngx-core-calendar.mjs +40 -40
  20. package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
  21. package/fesm2022/fundamental-ngx-core-card.mjs +130 -126
  22. package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
  23. package/fesm2022/fundamental-ngx-core-carousel.mjs +19 -19
  24. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  25. package/fesm2022/fundamental-ngx-core-checkbox.mjs +7 -7
  26. package/fesm2022/fundamental-ngx-core-checkbox.mjs.map +1 -1
  27. package/fesm2022/fundamental-ngx-core-combobox.mjs +16 -16
  28. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-core-content-density.mjs +25 -25
  30. package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-core-date-picker.mjs +13 -13
  32. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +13 -13
  34. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-core-datetime.mjs +30 -30
  36. package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-core-dialog.mjs +64 -64
  38. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs +52 -52
  40. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +13 -13
  42. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-core-facets.mjs +17 -17
  44. package/fesm2022/fundamental-ngx-core-facets.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-core-feed-input.mjs +17 -17
  46. package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +22 -22
  48. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-core-file-uploader.mjs +16 -16
  50. package/fesm2022/fundamental-ngx-core-file-uploader.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +13 -13
  52. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  53. package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs +7 -7
  54. package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs.map +1 -1
  55. package/fesm2022/fundamental-ngx-core-form.mjs +70 -70
  56. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  57. package/fesm2022/fundamental-ngx-core-formatted-text.mjs +8 -8
  58. package/fesm2022/fundamental-ngx-core-formatted-text.mjs.map +1 -1
  59. package/fesm2022/fundamental-ngx-core-generic-tag.mjs +7 -7
  60. package/fesm2022/fundamental-ngx-core-generic-tag.mjs.map +1 -1
  61. package/fesm2022/fundamental-ngx-core-grid-list.mjs +47 -47
  62. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  63. package/fesm2022/fundamental-ngx-core-icon.mjs +8 -8
  64. package/fesm2022/fundamental-ngx-core-icon.mjs.map +1 -1
  65. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +19 -19
  66. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  67. package/fesm2022/fundamental-ngx-core-infinite-scroll.mjs +10 -8
  68. package/fesm2022/fundamental-ngx-core-infinite-scroll.mjs.map +1 -1
  69. package/fesm2022/fundamental-ngx-core-info-label.mjs +7 -7
  70. package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
  71. package/fesm2022/fundamental-ngx-core-inline-help.mjs +7 -7
  72. package/fesm2022/fundamental-ngx-core-inline-help.mjs.map +1 -1
  73. package/fesm2022/fundamental-ngx-core-input-group.mjs +19 -19
  74. package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
  75. package/fesm2022/fundamental-ngx-core-layout-grid.mjs +17 -17
  76. package/fesm2022/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  77. package/fesm2022/fundamental-ngx-core-layout-panel.mjs +31 -31
  78. package/fesm2022/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  79. package/fesm2022/fundamental-ngx-core-link.mjs +7 -7
  80. package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
  81. package/fesm2022/fundamental-ngx-core-list.mjs +80 -80
  82. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-core-menu.mjs +58 -56
  84. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-core-message-box.mjs +37 -37
  86. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-message-page.mjs +19 -19
  88. package/fesm2022/fundamental-ngx-core-message-page.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-message-strip.mjs +25 -25
  90. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-message-toast.mjs +17 -17
  92. package/fesm2022/fundamental-ngx-core-message-toast.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +19 -19
  94. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-mobile-mode.mjs +3 -3
  96. package/fesm2022/fundamental-ngx-core-mobile-mode.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +22 -22
  98. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-multi-input.mjs +15 -15
  100. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  101. package/fesm2022/fundamental-ngx-core-nested-list.mjs +40 -40
  102. package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
  103. package/fesm2022/fundamental-ngx-core-notification.mjs +88 -88
  104. package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
  105. package/fesm2022/fundamental-ngx-core-object-attribute.mjs +7 -7
  106. package/fesm2022/fundamental-ngx-core-object-attribute.mjs.map +1 -1
  107. package/fesm2022/fundamental-ngx-core-object-identifier.mjs +11 -11
  108. package/fesm2022/fundamental-ngx-core-object-identifier.mjs.map +1 -1
  109. package/fesm2022/fundamental-ngx-core-object-marker.mjs +7 -7
  110. package/fesm2022/fundamental-ngx-core-object-marker.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-core-object-number.mjs +7 -7
  112. package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-core-object-status.mjs +7 -7
  114. package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +31 -31
  116. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-core-pagination.mjs +11 -11
  118. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-core-panel.mjs +19 -19
  120. package/fesm2022/fundamental-ngx-core-panel.mjs.map +1 -1
  121. package/fesm2022/fundamental-ngx-core-popover.mjs +42 -42
  122. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  123. package/fesm2022/fundamental-ngx-core-product-switch.mjs +13 -13
  124. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  125. package/fesm2022/fundamental-ngx-core-progress-indicator.mjs +7 -7
  126. package/fesm2022/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
  127. package/fesm2022/fundamental-ngx-core-quick-view.mjs +37 -37
  128. package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
  129. package/fesm2022/fundamental-ngx-core-radio.mjs +7 -7
  130. package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
  131. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +10 -10
  132. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  133. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +10 -10
  134. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  135. package/fesm2022/fundamental-ngx-core-scroll-spy.mjs +7 -7
  136. package/fesm2022/fundamental-ngx-core-scroll-spy.mjs.map +1 -1
  137. package/fesm2022/fundamental-ngx-core-scrollbar.mjs +7 -7
  138. package/fesm2022/fundamental-ngx-core-scrollbar.mjs.map +1 -1
  139. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +7 -7
  140. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  141. package/fesm2022/fundamental-ngx-core-select.mjs +20 -20
  142. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  143. package/fesm2022/fundamental-ngx-core-settings.mjs +52 -52
  144. package/fesm2022/fundamental-ngx-core-settings.mjs.map +1 -1
  145. package/fesm2022/fundamental-ngx-core-shared.mjs +3 -3
  146. package/fesm2022/fundamental-ngx-core-shared.mjs.map +1 -1
  147. package/fesm2022/fundamental-ngx-core-shellbar.mjs +88 -75
  148. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +13 -13
  150. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-skeleton.mjs +12 -10
  152. package/fesm2022/fundamental-ngx-core-skeleton.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-slider.mjs +10 -10
  154. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-split-button.mjs +10 -10
  156. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-status-indicator.mjs +7 -7
  158. package/fesm2022/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-step-input.mjs +13 -9
  160. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  161. package/fesm2022/fundamental-ngx-core-switch.mjs +7 -7
  162. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  163. package/fesm2022/fundamental-ngx-core-table.mjs +49 -49
  164. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  165. package/fesm2022/fundamental-ngx-core-tabs.mjs +52 -52
  166. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  167. package/fesm2022/fundamental-ngx-core-tests.mjs.map +1 -1
  168. package/fesm2022/fundamental-ngx-core-text.mjs +8 -8
  169. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  170. package/fesm2022/fundamental-ngx-core-theming.mjs +7 -7
  171. package/fesm2022/fundamental-ngx-core-theming.mjs.map +1 -1
  172. package/fesm2022/fundamental-ngx-core-tile.mjs +94 -94
  173. package/fesm2022/fundamental-ngx-core-tile.mjs.map +1 -1
  174. package/fesm2022/fundamental-ngx-core-time-picker.mjs +8 -8
  175. package/fesm2022/fundamental-ngx-core-time-picker.mjs.map +1 -1
  176. package/fesm2022/fundamental-ngx-core-time.mjs +11 -11
  177. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  178. package/fesm2022/fundamental-ngx-core-timeline.mjs +43 -43
  179. package/fesm2022/fundamental-ngx-core-timeline.mjs.map +1 -1
  180. package/fesm2022/fundamental-ngx-core-title.mjs +8 -8
  181. package/fesm2022/fundamental-ngx-core-title.mjs.map +1 -1
  182. package/fesm2022/fundamental-ngx-core-token.mjs +19 -15
  183. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  184. package/fesm2022/fundamental-ngx-core-toolbar.mjs +47 -47
  185. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  186. package/fesm2022/fundamental-ngx-core-tree.mjs +32 -32
  187. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  188. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +37 -37
  189. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  190. package/fesm2022/fundamental-ngx-core-user-menu.mjs +64 -64
  191. package/fesm2022/fundamental-ngx-core-user-menu.mjs.map +1 -1
  192. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +13 -13
  193. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
  194. package/fesm2022/fundamental-ngx-core-wizard.mjs +28 -28
  195. package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
  196. package/fesm2022/fundamental-ngx-core.mjs +4 -4
  197. package/fesm2022/fundamental-ngx-core.mjs.map +1 -1
  198. package/package.json +113 -113
  199. package/{types/fundamental-ngx-core-shellbar.d.ts → shellbar/index.d.ts} +21 -13
  200. package/{types/fundamental-ngx-core-toolbar.d.ts → toolbar/index.d.ts} +7 -8
  201. /package/{types/fundamental-ngx-core-action-bar.d.ts → action-bar/index.d.ts} +0 -0
  202. /package/{types/fundamental-ngx-core-action-sheet.d.ts → action-sheet/index.d.ts} +0 -0
  203. /package/{types/fundamental-ngx-core-avatar.d.ts → avatar/index.d.ts} +0 -0
  204. /package/{types/fundamental-ngx-core-avatar-group.d.ts → avatar-group/index.d.ts} +0 -0
  205. /package/{types/fundamental-ngx-core-avatar-group-legacy.d.ts → avatar-group-legacy/index.d.ts} +0 -0
  206. /package/{types/fundamental-ngx-core-bar.d.ts → bar/index.d.ts} +0 -0
  207. /package/{types/fundamental-ngx-core-breadcrumb.d.ts → breadcrumb/index.d.ts} +0 -0
  208. /package/{types/fundamental-ngx-core-busy-indicator.d.ts → busy-indicator/index.d.ts} +0 -0
  209. /package/{types/fundamental-ngx-core-button.d.ts → button/index.d.ts} +0 -0
  210. /package/{types/fundamental-ngx-core-calendar.d.ts → calendar/index.d.ts} +0 -0
  211. /package/{types/fundamental-ngx-core-card.d.ts → card/index.d.ts} +0 -0
  212. /package/{types/fundamental-ngx-core-carousel.d.ts → carousel/index.d.ts} +0 -0
  213. /package/{types/fundamental-ngx-core-checkbox.d.ts → checkbox/index.d.ts} +0 -0
  214. /package/{types/fundamental-ngx-core-combobox.d.ts → combobox/index.d.ts} +0 -0
  215. /package/{types/fundamental-ngx-core-content-density.d.ts → content-density/index.d.ts} +0 -0
  216. /package/{types/fundamental-ngx-core-date-picker.d.ts → date-picker/index.d.ts} +0 -0
  217. /package/{types/fundamental-ngx-core-datetime.d.ts → datetime/index.d.ts} +0 -0
  218. /package/{types/fundamental-ngx-core-datetime-picker.d.ts → datetime-picker/index.d.ts} +0 -0
  219. /package/{types/fundamental-ngx-core-dialog.d.ts → dialog/index.d.ts} +0 -0
  220. /package/{types/fundamental-ngx-core-dynamic-page.d.ts → dynamic-page/index.d.ts} +0 -0
  221. /package/{types/fundamental-ngx-core-dynamic-side-content.d.ts → dynamic-side-content/index.d.ts} +0 -0
  222. /package/{types/fundamental-ngx-core-facets.d.ts → facets/index.d.ts} +0 -0
  223. /package/{types/fundamental-ngx-core-feed-input.d.ts → feed-input/index.d.ts} +0 -0
  224. /package/{types/fundamental-ngx-core-feed-list-item.d.ts → feed-list-item/index.d.ts} +0 -0
  225. /package/{types/fundamental-ngx-core-file-uploader.d.ts → file-uploader/index.d.ts} +0 -0
  226. /package/{types/fundamental-ngx-core-fixed-card-layout.d.ts → fixed-card-layout/index.d.ts} +0 -0
  227. /package/{types/fundamental-ngx-core-flexible-column-layout.d.ts → flexible-column-layout/index.d.ts} +0 -0
  228. /package/{types/fundamental-ngx-core-form.d.ts → form/index.d.ts} +0 -0
  229. /package/{types/fundamental-ngx-core-formatted-text.d.ts → formatted-text/index.d.ts} +0 -0
  230. /package/{types/fundamental-ngx-core-generic-tag.d.ts → generic-tag/index.d.ts} +0 -0
  231. /package/{types/fundamental-ngx-core-grid-list.d.ts → grid-list/index.d.ts} +0 -0
  232. /package/{types/fundamental-ngx-core-icon.d.ts → icon/index.d.ts} +0 -0
  233. /package/{types/fundamental-ngx-core-illustrated-message.d.ts → illustrated-message/index.d.ts} +0 -0
  234. /package/{types/fundamental-ngx-core.d.ts → index.d.ts} +0 -0
  235. /package/{types/fundamental-ngx-core-infinite-scroll.d.ts → infinite-scroll/index.d.ts} +0 -0
  236. /package/{types/fundamental-ngx-core-info-label.d.ts → info-label/index.d.ts} +0 -0
  237. /package/{types/fundamental-ngx-core-inline-help.d.ts → inline-help/index.d.ts} +0 -0
  238. /package/{types/fundamental-ngx-core-input-group.d.ts → input-group/index.d.ts} +0 -0
  239. /package/{types/fundamental-ngx-core-layout-grid.d.ts → layout-grid/index.d.ts} +0 -0
  240. /package/{types/fundamental-ngx-core-layout-panel.d.ts → layout-panel/index.d.ts} +0 -0
  241. /package/{types/fundamental-ngx-core-link.d.ts → link/index.d.ts} +0 -0
  242. /package/{types/fundamental-ngx-core-list.d.ts → list/index.d.ts} +0 -0
  243. /package/{types/fundamental-ngx-core-menu.d.ts → menu/index.d.ts} +0 -0
  244. /package/{types/fundamental-ngx-core-message-box.d.ts → message-box/index.d.ts} +0 -0
  245. /package/{types/fundamental-ngx-core-message-page.d.ts → message-page/index.d.ts} +0 -0
  246. /package/{types/fundamental-ngx-core-message-strip.d.ts → message-strip/index.d.ts} +0 -0
  247. /package/{types/fundamental-ngx-core-message-toast.d.ts → message-toast/index.d.ts} +0 -0
  248. /package/{types/fundamental-ngx-core-micro-process-flow.d.ts → micro-process-flow/index.d.ts} +0 -0
  249. /package/{types/fundamental-ngx-core-mobile-mode.d.ts → mobile-mode/index.d.ts} +0 -0
  250. /package/{types/fundamental-ngx-core-multi-combobox.d.ts → multi-combobox/index.d.ts} +0 -0
  251. /package/{types/fundamental-ngx-core-multi-input.d.ts → multi-input/index.d.ts} +0 -0
  252. /package/{types/fundamental-ngx-core-nested-list.d.ts → nested-list/index.d.ts} +0 -0
  253. /package/{types/fundamental-ngx-core-notification.d.ts → notification/index.d.ts} +0 -0
  254. /package/{types/fundamental-ngx-core-object-attribute.d.ts → object-attribute/index.d.ts} +0 -0
  255. /package/{types/fundamental-ngx-core-object-identifier.d.ts → object-identifier/index.d.ts} +0 -0
  256. /package/{types/fundamental-ngx-core-object-marker.d.ts → object-marker/index.d.ts} +0 -0
  257. /package/{types/fundamental-ngx-core-object-number.d.ts → object-number/index.d.ts} +0 -0
  258. /package/{types/fundamental-ngx-core-object-status.d.ts → object-status/index.d.ts} +0 -0
  259. /package/{types/fundamental-ngx-core-overflow-layout.d.ts → overflow-layout/index.d.ts} +0 -0
  260. /package/{types/fundamental-ngx-core-pagination.d.ts → pagination/index.d.ts} +0 -0
  261. /package/{types/fundamental-ngx-core-panel.d.ts → panel/index.d.ts} +0 -0
  262. /package/{types/fundamental-ngx-core-popover.d.ts → popover/index.d.ts} +0 -0
  263. /package/{types/fundamental-ngx-core-product-switch.d.ts → product-switch/index.d.ts} +0 -0
  264. /package/{types/fundamental-ngx-core-progress-indicator.d.ts → progress-indicator/index.d.ts} +0 -0
  265. /package/{types/fundamental-ngx-core-quick-view.d.ts → quick-view/index.d.ts} +0 -0
  266. /package/{types/fundamental-ngx-core-radio.d.ts → radio/index.d.ts} +0 -0
  267. /package/{types/fundamental-ngx-core-rating-indicator.d.ts → rating-indicator/index.d.ts} +0 -0
  268. /package/{types/fundamental-ngx-core-resizable-card-layout.d.ts → resizable-card-layout/index.d.ts} +0 -0
  269. /package/{types/fundamental-ngx-core-scroll-spy.d.ts → scroll-spy/index.d.ts} +0 -0
  270. /package/{types/fundamental-ngx-core-scrollbar.d.ts → scrollbar/index.d.ts} +0 -0
  271. /package/{types/fundamental-ngx-core-segmented-button.d.ts → segmented-button/index.d.ts} +0 -0
  272. /package/{types/fundamental-ngx-core-select.d.ts → select/index.d.ts} +0 -0
  273. /package/{types/fundamental-ngx-core-settings.d.ts → settings/index.d.ts} +0 -0
  274. /package/{types/fundamental-ngx-core-shared.d.ts → shared/index.d.ts} +0 -0
  275. /package/{types/fundamental-ngx-core-side-navigation.d.ts → side-navigation/index.d.ts} +0 -0
  276. /package/{types/fundamental-ngx-core-skeleton.d.ts → skeleton/index.d.ts} +0 -0
  277. /package/{types/fundamental-ngx-core-slider.d.ts → slider/index.d.ts} +0 -0
  278. /package/{types/fundamental-ngx-core-split-button.d.ts → split-button/index.d.ts} +0 -0
  279. /package/{types/fundamental-ngx-core-status-indicator.d.ts → status-indicator/index.d.ts} +0 -0
  280. /package/{types/fundamental-ngx-core-step-input.d.ts → step-input/index.d.ts} +0 -0
  281. /package/{types/fundamental-ngx-core-switch.d.ts → switch/index.d.ts} +0 -0
  282. /package/{types/fundamental-ngx-core-table.d.ts → table/index.d.ts} +0 -0
  283. /package/{types/fundamental-ngx-core-tabs.d.ts → tabs/index.d.ts} +0 -0
  284. /package/{types/fundamental-ngx-core-tests.d.ts → tests/index.d.ts} +0 -0
  285. /package/{types/fundamental-ngx-core-text.d.ts → text/index.d.ts} +0 -0
  286. /package/{types/fundamental-ngx-core-theming.d.ts → theming/index.d.ts} +0 -0
  287. /package/{types/fundamental-ngx-core-tile.d.ts → tile/index.d.ts} +0 -0
  288. /package/{types/fundamental-ngx-core-time.d.ts → time/index.d.ts} +0 -0
  289. /package/{types/fundamental-ngx-core-time-picker.d.ts → time-picker/index.d.ts} +0 -0
  290. /package/{types/fundamental-ngx-core-timeline.d.ts → timeline/index.d.ts} +0 -0
  291. /package/{types/fundamental-ngx-core-title.d.ts → title/index.d.ts} +0 -0
  292. /package/{types/fundamental-ngx-core-token.d.ts → token/index.d.ts} +0 -0
  293. /package/{types/fundamental-ngx-core-tree.d.ts → tree/index.d.ts} +0 -0
  294. /package/{types/fundamental-ngx-core-upload-collection.d.ts → upload-collection/index.d.ts} +0 -0
  295. /package/{types/fundamental-ngx-core-user-menu.d.ts → user-menu/index.d.ts} +0 -0
  296. /package/{types/fundamental-ngx-core-vertical-navigation.d.ts → vertical-navigation/index.d.ts} +0 -0
  297. /package/{types/fundamental-ngx-core-wizard.d.ts → wizard/index.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-carousel.mjs","sources":["../../../../libs/core/carousel/carousel-item.directive.ts","../../../../libs/core/carousel/carousel-item/carousel-item.component.ts","../../../../libs/core/carousel/carousel-item/carousel-item.component.html","../../../../libs/core/carousel/carousel.service.ts","../../../../libs/core/carousel/i18n/carousel-resources.ts","../../../../libs/core/carousel/carousel.component.ts","../../../../libs/core/carousel/carousel.component.html","../../../../libs/core/carousel/carousel.directive.ts","../../../../libs/core/carousel/carousel.module.ts","../../../../libs/core/carousel/fundamental-ngx-core-carousel.ts"],"sourcesContent":["import { Directive, ElementRef, HostBinding, Input } from '@angular/core';\n\nlet carouselItemCounter = 0;\n\n@Directive({\n selector: '[fd-carousel-item], [fdCarouselItem]',\n exportAs: 'fdCarouselItem',\n standalone: true\n})\nexport class CarouselItemDirective<T = unknown> {\n /** Value of the item , to keep some information inside */\n @Input()\n value: T;\n\n /** Initial height value, needed when carousel is inside popover */\n @Input()\n initialHeight: number;\n\n /** Initial height value, needed when carousel is inside popover */\n @Input()\n initialWidth: number;\n\n /** Carousel Id, it has some default value if not set, */\n @Input()\n @HostBinding('attr.id')\n id: string = 'carousel-item-id-' + carouselItemCounter++;\n\n /** @hidden */\n constructor(private readonly _elementRef: ElementRef<HTMLElement>) {}\n\n /** Native element */\n get element(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n\n /** Width of element */\n getWidth(): number {\n return this.element.getBoundingClientRect().width || this.initialWidth;\n }\n\n /** Height of element */\n getHeight(): number {\n return this.element.getBoundingClientRect().height || this.initialHeight;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n signal,\n ViewEncapsulation\n} from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport { CarouselItemInterface } from '../carousel.service';\n\nexport type Visibility = 'visible' | 'hidden';\n\nlet carouselItemCounter = 0;\n\n@Component({\n selector: 'fd-carousel-item',\n templateUrl: './carousel-item.component.html',\n styles: [\n `\n .fd-carousel__slides {\n min-width: initial !important;\n }\n .fd-carousel__item--active {\n display: flex;\n max-width: 100%;\n }\n `\n ],\n host: {\n role: 'option',\n class: 'fd-carousel__item fd-carousel__item--active',\n '[attr.aria-setsize]': 'ariaSetsize()',\n '[attr.aria-posinset]': 'ariaPosinset()',\n '[attr.aria-selected]': 'ariaSelected()',\n '[attr.aria-hidden]': 'ariaHidden()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [BusyIndicatorComponent]\n})\nexport class CarouselItemComponent<T = any> implements CarouselItemInterface {\n /** Id of the Carousel items. */\n @Input()\n @HostBinding('attr.id')\n id = `fd-carousel-item-${carouselItemCounter++}`;\n\n /** Sets aria-label attribute for carousel item */\n @Input()\n @HostBinding('attr.aria-label')\n ariaLabel: Nullable<string>;\n\n /** Sets aria-labelledby attribute for carousel item */\n @Input()\n @HostBinding('attr.aria-labelledby')\n ariaLabelledBy: Nullable<string>;\n\n /** Sets aria-describedby attribute for carousel item */\n @Input()\n @HostBinding('attr.aria-describedby')\n ariaDescribedBy: Nullable<string>;\n\n /**\n * Loading indicator when item is not yet loaded\n */\n @Input()\n loading = false;\n\n /** Sets tooltip for carousel item */\n @Input()\n @HostBinding('attr.title')\n title = null;\n\n /** Initial height value, needed when carousel is inside popover */\n @Input()\n initialHeight: number;\n\n /** Initial height value, needed when carousel is inside popover */\n @Input()\n initialWidth: number;\n\n /** Value of carousel item */\n @Input()\n value: T;\n\n /** @hidden Hide/show slide, useful for managing tab order */\n @HostBinding('style.visibility')\n _visibility: Visibility = 'visible';\n\n /** @hidden value for aria-setsize attribute */\n ariaSetsize = signal<number>(0);\n\n /** @hidden value for aria-posinset attribute */\n ariaPosinset = signal<number>(0);\n\n /** @hidden value for aria-selected attribute */\n ariaSelected = signal<boolean>(false);\n\n /** @hidden value for aria-hidden attribute */\n ariaHidden = signal<boolean>(false);\n\n /** @hidden */\n set visibility(visibility: Visibility) {\n this._visibility = visibility;\n }\n\n get visibility(): Visibility {\n return this._visibility;\n }\n\n /** @hidden */\n constructor(private readonly _elementRef: ElementRef<HTMLElement>) {}\n\n /** Native element */\n get element(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n\n /** Width of element */\n getWidth(): number {\n return this.element.getBoundingClientRect().width || this.initialWidth;\n }\n\n /** Height of element */\n getHeight(): number {\n return this.element.getBoundingClientRect().height || this.initialHeight;\n }\n}\n","<fd-busy-indicator [loading]=\"loading\" [style.max-width.%]=\"100\">\n <ng-content></ng-content>\n</fd-busy-indicator>\n","import {\n DOCUMENT,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Injectable,\n OnDestroy,\n QueryList,\n inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Observable, fromEvent, merge } from 'rxjs';\n\nexport const DEFAULT_TRANSITION_DURATION = '150ms';\n\nexport interface CarouselItemInterface {\n element: HTMLElement;\n getHeight(): number;\n getWidth(): number;\n}\n\nexport interface CarouselConfig {\n /** Defines if carousel items are placed vertically */\n vertical?: boolean;\n /** Amount of visible elements in carousel */\n elementsAtOnce?: number;\n /** Defines if support for gestures, like touch swipe or mouse drag should be enabled */\n gestureSupport?: boolean;\n /** Defines if carousel should move elements to sides. It allows to slide infinitely in one direction */\n infinite?: boolean;\n /** Transition time of CSS translate, `150ms` by default */\n transition?: string;\n}\n\nexport interface PanEndOutput {\n item: CarouselItemInterface;\n after: boolean;\n}\n\n/** @dynamic */\n@Injectable({\n providedIn: 'root'\n})\nexport class CarouselService implements OnDestroy {\n /** Event thrown when element is dragged. Emits \"true\" when drag starts and \"false\" when drag ends. */\n readonly dragStateChange$: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event thrown, when active element is changed */\n readonly activeChange$: EventEmitter<PanEndOutput> = new EventEmitter<PanEndOutput>();\n\n /** Configuration for carousel */\n config: CarouselConfig;\n\n /** Initial active item of carousel, position first + offset */\n active: Nullable<CarouselItemInterface>;\n\n /** Set to true for rtl mode */\n isRtl = false;\n\n /** carousel items query list */\n items: QueryList<CarouselItemInterface>;\n\n /** Current transition value in px */\n set currentTransitionPx(currentTransitionPx: number) {\n this._currentTransitionPx = currentTransitionPx;\n }\n get currentTransitionPx(): number {\n return this._currentTransitionPx;\n }\n\n /** @hidden */\n private get elementsAtOnce(): number {\n const num = this.config?.elementsAtOnce ?? 1;\n\n return Math.max(1, num);\n }\n\n /** @hidden */\n private _lastDistance = 0;\n\n /** @hidden */\n private _currentTransitionPx = 0;\n\n /** @hidden */\n private _element: HTMLElement;\n\n /** @hidden */\n private _initialDragPosition = 0;\n\n /** @hidden */\n private _lastDragPosition = 0;\n\n /** @hidden */\n private _listenToMouseMove = false;\n /** @hidden */\n private _dragStarted = false;\n\n /**\n * @hidden\n */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(@Inject(DOCUMENT) private readonly _document: Document | null) {}\n\n /** @hidden */\n ngOnDestroy(): void {\n this.activeChange$.complete();\n this.dragStateChange$.complete();\n }\n\n /** set initial values for the service */\n initialise(\n config: CarouselConfig,\n items: QueryList<CarouselItemInterface>,\n listElementReference: ElementRef\n ): void {\n this.config = config;\n this.setElement(listElementReference);\n this.setItems(items);\n\n if (this.config.gestureSupport) {\n this._setupGestures();\n }\n }\n\n /** update config value for the service */\n updateConfig(config: CarouselConfig): void {\n this.config = config;\n }\n\n /** set element ref */\n setElement(elementRef: ElementRef): void {\n this._element = elementRef.nativeElement;\n }\n\n /** set items and assign active item, if not already there */\n setItems(items: QueryList<CarouselItemInterface>): void {\n this.items = items;\n\n if (!this.active) {\n this.active = this.items.first;\n }\n }\n\n /** Change active element */\n goToItem(item: CarouselItemInterface, smooth?: boolean): void {\n let index = this._getIndexOfItem(item);\n if (this.config.infinite) {\n this._centerActive(index);\n\n index = this._getIndexOfItem(item);\n }\n\n this._transitionToIndex(index, smooth);\n }\n\n /** pick next element and set it active */\n pickNext(): void {\n if (!this.active) {\n this.active = this.items.first;\n }\n\n const activeItemIndex = this._getIndexOfItem(this.active);\n const itemToActivate = this.items.get(activeItemIndex + 1) ?? this.items.first;\n\n this.goToItem(itemToActivate, true);\n this.active = itemToActivate;\n }\n\n /** pick previous element and set it active */\n pickPrevious(): void {\n if (!this.active) {\n this.active = this.items.get(2);\n }\n\n const activeItemIndex = this._getIndexOfItem(this.active);\n let itemToActivate = this.items.get(activeItemIndex - 1);\n\n // case where slides can move infinitely in one direction\n // handle case where on-load activeItemIndex = 0 and activeItemIndex - 1 returns undefined item from item array.\n if (!itemToActivate) {\n itemToActivate = this.items.last;\n }\n\n this.goToItem(itemToActivate, true);\n this.active = itemToActivate;\n }\n\n /** @hidden */\n private _centerActive(index: number): void {\n const size = this._getSize(this.items.first);\n if (isNaN(size)) {\n return;\n }\n const middleIndex = Math.ceil(this.items.length / 2);\n const offset = Math.ceil(this.elementsAtOnce / 2);\n const missingItems = index + offset - middleIndex;\n const array = this.items.toArray();\n\n if (missingItems > 0) {\n for (let i = 0; i < missingItems; i++) {\n const item = array.shift();\n item && array.push(item);\n }\n } else {\n for (let i = 0; i < Math.abs(missingItems); i++) {\n const item = array.pop();\n item && array.unshift(item);\n }\n }\n\n /** Changing order of elements in QueryList and Native HTML */\n this.items.reset(array);\n this.items.forEach((item) => item.element.parentNode?.appendChild(item.element));\n\n /**\n * For proper animation it's needed to transform elements,\n * by changing transition by amount of elements placed at top/bottom\n */\n this._element.style.transitionDuration = '0s';\n this._transitionCarousel(this._currentTransitionPx + this._getSize(this.items.first) * missingItems);\n }\n\n /** @hidden */\n private _transitionToIndex(index: number, smooth?: boolean): void {\n let transitionPx: number = this._getSize(this.items.first) * index;\n\n this._element.style.transitionDuration = smooth ? this._getTransition() : '0s';\n\n if (!this.isRtl || (this.config.vertical && this.isRtl)) {\n transitionPx = -transitionPx;\n }\n\n this._transitionCarousel(transitionPx);\n }\n\n /** @hidden Get closes element, based on current transition */\n private _getClosest(): CarouselItemInterface {\n /** If transition is positive, it should go to first element */\n if (\n !this.config.infinite &&\n ((!this.config.vertical &&\n ((!this.isRtl && this._currentTransitionPx > 0) || (this.isRtl && this._currentTransitionPx < 0))) ||\n (this.config.vertical && this._currentTransitionPx > 0))\n ) {\n return this.items.first;\n }\n\n const size = this._getSize(this.items.first);\n\n /** When scroll is after half of element, then ext one should be active */\n const halfApproached: boolean = Math.abs(this._currentTransitionPx % size) > size / 2;\n /**\n * Index based on transition px divided by size of elements,\n * every element should have same width, otherwise it should be looped through all elements,\n * which is not good for performance\n */\n let index = Math.ceil(Math.abs(this._currentTransitionPx / size));\n\n // When elementsAtOnce > 1, swiping should stop at last index - elementsAtOnce\n const elementsAtOnce = this.elementsAtOnce;\n if (!this.config.infinite && elementsAtOnce > 1) {\n // When there're less items in the carousel than the area might display, it should stop to first\n if (this.items.length < elementsAtOnce) {\n return this.items.first;\n }\n\n if (index + elementsAtOnce >= this.items.length) {\n return this.items.get(this.items.length - elementsAtOnce) ?? this.items.first;\n }\n }\n\n index = index + (halfApproached ? 0 : -1);\n const item = this.items.get(index);\n\n /** Checking if transition went out of scope of array */\n return item || this.items.last;\n }\n\n /** @hidden */\n private _getIndexOfItem(item?: CarouselItemInterface): number {\n if (!item) {\n return -1;\n }\n return this.items.toArray().findIndex((_item) => _item === item);\n }\n\n /** @hidden Getting size of carousel, width for horizontal, height for vertical */\n private _getSize(item: CarouselItemInterface): number {\n if (this.config.vertical) {\n return item.getHeight();\n }\n\n return item.getWidth();\n }\n\n /** @hidden */\n private _handlePan(delta: number): void {\n const distance = delta - this._lastDistance;\n\n this._lastDistance = delta;\n\n this._transitionCarousel(this._currentTransitionPx + distance);\n }\n\n /** @hidden */\n private _handlePanEnd(delta: number): void {\n this._handlePan(delta);\n\n const closestItem: CarouselItemInterface = this._getClosest();\n\n this.goToItem(closestItem, true);\n\n if (!this.active) {\n this.active = closestItem;\n this.activeChange$.emit({\n item: closestItem,\n after: delta < 0\n });\n } else if (this.active !== closestItem) {\n this.active = closestItem;\n this.activeChange$.emit({\n item: closestItem,\n after: delta < 0\n });\n }\n\n this.dragStateChange$.emit(false);\n this._lastDistance = 0;\n }\n\n /**\n * @hidden Animates the carousel to the currently selected slide.\n */\n private _transitionCarousel(transitionPx: number): void {\n this._currentTransitionPx = transitionPx;\n const axis = this.config.vertical ? 'Y' : 'X';\n\n this._element.style.transform = `translate${axis}(${this._currentTransitionPx}px)`;\n }\n\n /** @hidden Pam Start handler, removes transition duration, */\n private _handlePanStart(): void {\n this._element.style.transitionDuration = '0s';\n this.dragStateChange$.emit(true);\n }\n\n /** @hidden */\n private _setupGestures(): void {\n this._setupDragStart();\n this._setupDrag();\n this._setupDragEnd();\n }\n\n /** @hidden */\n private _subscribeToEvents(\n events: string[],\n element: HTMLElement | Document,\n callback: (event: MouseEvent | TouchEvent) => void\n ): void {\n merge(events.map((e) => fromEvent<MouseEvent | TouchEvent>(element, e, { passive: true }))).forEach(\n (evt: Observable<MouseEvent | TouchEvent>) => {\n evt.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((event) => {\n callback(event);\n });\n }\n );\n }\n\n /** @hidden */\n private _setupDragStart(): void {\n const events = ['mousedown', 'touchstart'];\n\n this._subscribeToEvents(events, this._element, (event) => {\n this._listenToMouseMove = true;\n this._lastDragPosition = this._initialDragPosition = this._getDragCoordinate(event);\n this._handlePanStart();\n });\n }\n\n /** @hidden */\n private _setupDrag(): void {\n const events = ['mousemove', 'touchmove'];\n\n if (!this._document) {\n throw new Error(\n `Could not setup drag event subscription. Expected to get document ref, got ${this._document} instead`\n );\n }\n\n this._subscribeToEvents(events, this._document, (event) => {\n const coordinate = this._getDragCoordinate(event);\n\n if (!this._listenToMouseMove || coordinate === this._lastDragPosition) {\n return;\n }\n\n this._dragStarted = true;\n this._handlePan(this._getDraggedDelta(coordinate));\n });\n }\n\n /** @hidden */\n private _setupDragEnd(): void {\n const events = ['mouseup', 'touchend'];\n\n if (!this._document) {\n throw new Error(\n `Could not setup drag event subscription. Expected to get document ref, got ${this._document} instead`\n );\n }\n\n this._subscribeToEvents(events, this._document, (event) => {\n if (!this._listenToMouseMove) {\n return;\n }\n\n if (this._dragStarted) {\n this._handlePanEnd(this._getDraggedDelta(this._getDragCoordinate(event)));\n } else {\n this.dragStateChange$.emit(false);\n }\n\n this._listenToMouseMove = false;\n this._dragStarted = false;\n });\n }\n\n /** @hidden */\n private _getTransition(): string {\n return this.config?.transition ?? DEFAULT_TRANSITION_DURATION;\n }\n\n /** @hidden */\n private _getDraggedDelta(offset: number): number {\n this._lastDragPosition = offset;\n\n return offset - this._initialDragPosition;\n }\n\n /** @hidden */\n private _getDragCoordinate(event: MouseEvent | TouchEvent): number {\n let coordinates: Touch | MouseEvent;\n\n if (this._isTouchEvent(event)) {\n coordinates = event.touches[0] || event.changedTouches[0];\n } else {\n coordinates = event;\n }\n\n return this.config.vertical ? coordinates.pageY : coordinates.pageX;\n }\n\n /** @hidden */\n private _isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n return window.TouchEvent && event instanceof TouchEvent;\n }\n}\n","export interface FdCarouselResourceStrings {\n fd_carousel_of?: string;\n fd_carousel_reader?: string;\n}\n\nexport const CarouselResourceStringsEN: FdCarouselResourceStrings = {\n fd_carousel_of: 'of',\n fd_carousel_reader: 'Displaying item'\n};\n","import { Direction } from '@angular/cdk/bidi';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n computed,\n effect,\n inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyUtil, RtlService, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { merge } from 'rxjs';\nimport { debounceTime, take } from 'rxjs/operators';\nimport { CarouselItemComponent } from './carousel-item/carousel-item.component';\nimport { CarouselConfig, CarouselItemInterface, CarouselService, PanEndOutput } from './carousel.service';\nimport { CarouselResourceStringsEN, FdCarouselResourceStrings } from './i18n/carousel-resources';\n\n/** Page limit to switch to numerical indicator */\nconst ICON_PAGE_INDICATOR_LIMIT = 8;\nexport type PageIndicatorsOrientation = 'bottom' | 'top';\n\nexport type CarouselBackgroundOptions = 'translucent' | 'transparent' | 'solid';\n\nexport enum SlideDirection {\n None,\n NEXT,\n PREVIOUS\n}\nexport interface FittingSlidesAndWidth {\n width: number;\n slides: number;\n}\nlet carouselCounter = 0;\n\nclass CarouselActiveSlides {\n constructor(\n public readonly activeItems: CarouselItemComponent[],\n public readonly slideDirection: string\n ) {}\n}\n\n@Component({\n selector: 'fd-carousel',\n templateUrl: './carousel.component.html',\n styleUrl: './carousel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [CarouselService],\n host: {\n '[style.width]': 'width'\n },\n imports: [NgTemplateOutlet, NgClass, ButtonComponent, FdTranslatePipe]\n})\nexport class CarouselComponent implements AfterContentInit, AfterViewInit, AfterViewChecked, OnChanges {\n /** ID for the Carousel. */\n @Input()\n @HostBinding('attr.id')\n id = `fd-carousel-${carouselCounter++}`;\n\n /** Sets aria-label attribute for carousel */\n @Input()\n ariaLabel = null;\n\n /** Sets aria-labelledby attribute for carousel */\n @Input()\n ariaLabelledBy: string;\n\n /** Sets aria-describedby attribute for carousel */\n @Input()\n ariaDescribedBy: string;\n\n /** Sets position of page indicator container. Default position is bottom. */\n @Input()\n pageIndicatorsOrientation: PageIndicatorsOrientation = 'bottom';\n\n /** Height for carousel container */\n @Input()\n height: string;\n\n /** Width for carousel container */\n @Input()\n width = '100%';\n\n /** If carousel is in circular loop */\n @Input()\n loop = false;\n\n /** Shows/hides optional navigation button */\n @Input()\n navigation = true;\n\n /** Show navigation button in page indicator container or inside content. Default is page indicator container on true value */\n @Input()\n navigatorInPageIndicator = true;\n\n /** Convert to Numeric page indicator */\n @Input()\n numericIndicator = false;\n\n /** Shows/hides optional page indicator container */\n @Input()\n pageIndicatorContainer = true;\n\n /** Shows/hides optional page indicator */\n @Input()\n pageIndicator = true;\n\n /**\n * An accessor that sets the resource strings.\n * By default it uses EN resources.\n */\n @Input()\n set resourceStrings(value: FdCarouselResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * An accessor that returns the resource strings.\n */\n get resourceStrings(): FdCarouselResourceStrings {\n return this._resourceStrings;\n }\n\n /** Sets sliding duration in millie seconds. Default is 150 */\n @Input()\n slideTransitionDuration = 150;\n\n /** Is swipe enabled */\n @Input()\n swipeEnabled = true;\n\n /** Is carousel is vertical. Default value is false. */\n @Input()\n vertical = false;\n\n /** Whether to hide top border of the Pagination Container. */\n @Input()\n noPaginationContainerBorder = false;\n\n /** Background configuration for the Content container. */\n @Input()\n contentBackground: CarouselBackgroundOptions = 'translucent';\n\n /** Background configuration for the Pagination container */\n @Input()\n pageIndicatorBackground: CarouselBackgroundOptions = 'solid';\n\n /** Number of items to be visible at a time */\n @Input()\n set visibleSlidesCount(value: number | 'auto') {\n this._visibleSlidesCount = value;\n this._visibleSlidesNumericCount = this._getVisibleSlidesCount();\n }\n\n get visibleSlidesCount(): number | 'auto' {\n return this._visibleSlidesCount;\n }\n\n /** An event that is emitted after a slide transition has happened */\n @Output()\n readonly slideChange: EventEmitter<CarouselActiveSlides> = new EventEmitter<CarouselActiveSlides>();\n\n /** @hidden */\n @ContentChildren(CarouselItemComponent, {\n descendants: true\n })\n slides: QueryList<CarouselItemComponent>;\n\n /** @hidden */\n @ViewChild('slideContainer')\n slideContainer: ElementRef;\n\n /** Carousel container element. */\n @ViewChild('carouselContainer')\n carouselContainer: ElementRef;\n\n /** @hidden Start index of currently active items */\n currentActiveSlidesStartIndex = 0;\n\n /** @hidden End index of currently active items */\n currentActiveSlidesEndIndex = 0;\n\n /** @hidden an array of id(s) of currently active item(s) */\n currentActiveSlidesIds: string[] = [];\n\n /** @hidden the total number of slides in the carousel */\n totalSlides = 0;\n\n /** @hidden handles rtl service */\n readonly _dir$ = computed<Direction>(() => (this._rtl$() ? 'rtl' : 'ltr'));\n\n /** @hidden Make left navigation button disabled */\n leftButtonDisabled = false;\n\n /** @hidden Make right navigation button disabled */\n rightButtonDisabled = false;\n\n /** @hidden Fake array for counting number of page indicator */\n pageIndicatorsCountArray: number[] = [];\n\n /** @hidden */\n _slidesWrapperSize = 0;\n\n /** @hidden A string containing the id(s) of the active item(s) */\n ariaActivedescendant: string;\n\n /** @hidden */\n get _contentSizePx(): string {\n return this._slidesWrapperSize ? `${this._slidesWrapperSize}px` : this.width;\n }\n\n /** @hidden */\n private _visibleSlidesCount: number | 'auto' = 1;\n\n /** @hidden */\n private _visibleSlidesNumericCount = 1;\n\n /** @hidden */\n private _resourceStrings = CarouselResourceStringsEN;\n\n /** @hidden */\n private _config: CarouselConfig = {};\n\n /** @hidden */\n private _slidesCopy: CarouselItemComponent[] = [];\n\n /** @hidden */\n private _previousVisibleSlidesCount: number;\n\n /** @hidden */\n private _slideSwiped = false;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _rtl$ = computed(() => !!this._rtlService?.rtlSignal());\n\n /** @hidden */\n constructor(\n private readonly _elementRef: ElementRef<HTMLElement>,\n private readonly _renderer: Renderer2,\n private readonly _changeDetectorRef: ChangeDetectorRef,\n private readonly _carouselService: CarouselService,\n private readonly _zone: NgZone\n ) {\n effect(() => {\n const isRtl = this._rtl$();\n this._carouselService.isRtl = isRtl;\n if (this._carouselService.items && this._carouselService.active) {\n this._carouselService.goToItem(this._carouselService.active, false);\n }\n });\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n handleKeyboardEvent(event: KeyboardEvent): void {\n if (\n KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW]) ||\n (this.vertical && KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW]))\n ) {\n event.preventDefault();\n\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n this._rtl$() ? this.next() : this.previous();\n }\n if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n this._rtl$() ? this.previous() : this.next();\n }\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.previous();\n }\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.next();\n }\n this.carouselContainer.nativeElement.focus();\n }\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.visibleSlidesCount && this.slides?.length > 0) {\n this._notifySlideChange(SlideDirection.None);\n }\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n // On carousel load, display first slide + number of slide visible\n this.currentActiveSlidesStartIndex = 0;\n this.currentActiveSlidesEndIndex = this._visibleSlidesNumericCount - 1;\n this.currentActiveSlidesIds = [];\n this.totalSlides = this.slides.length;\n\n this.slides.forEach((slide, index) => {\n const isActive = index >= this.currentActiveSlidesStartIndex && index <= this.currentActiveSlidesEndIndex;\n\n slide.ariaSetsize.set(this.totalSlides);\n slide.ariaPosinset.set(index + 1);\n slide.ariaHidden.set(!isActive);\n slide.ariaSelected.set(isActive);\n\n if (isActive) {\n this.currentActiveSlidesIds.push(slide.id);\n }\n });\n\n this.ariaActivedescendant = this.currentActiveSlidesIds.join(' ');\n\n // Change pagination display to numeric, if item count is more than 8\n if (this.slides.length > ICON_PAGE_INDICATOR_LIMIT) {\n this.numericIndicator = true;\n }\n if (this.slides.length > 0) {\n this._initializeCarousel();\n } else {\n this.leftButtonDisabled = true;\n this.rightButtonDisabled = true;\n\n // Disable swipe when there is no carousel item\n this.swipeEnabled = false;\n this.navigation = false;\n }\n\n // Keep copy of original slide array, for indicator purpose.\n // In case of looped carousel, original slides array changes.\n this._slidesCopy = this.slides.toArray();\n this._subscribeServiceEvents();\n\n // Subscribe to dynamic update of slides\n this.slides.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => this._onSlideUpdates());\n this._changeDetectorRef.markForCheck();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._initializeServiceConfig();\n this._carouselService.initialise(this._config, this.slides, this.slideContainer);\n this._previousVisibleSlidesCount = this._visibleSlidesNumericCount;\n this._resizeContentContainer();\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n if (this._previousVisibleSlidesCount && this._previousVisibleSlidesCount !== this._visibleSlidesNumericCount) {\n this._initializeCarousel();\n this._initializeServiceConfig();\n this._carouselService.updateConfig(this._config);\n this._previousVisibleSlidesCount = this._visibleSlidesNumericCount;\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /** @hidden */\n get _showNavigationButtonInPageIndicatorContainer(): boolean {\n return this.navigatorInPageIndicator && this.pageIndicatorsCountArray.length > 1;\n }\n\n /** @hidden */\n get _showNavigationButtonInContent(): boolean {\n return !this.navigatorInPageIndicator && this.pageIndicatorsCountArray.length > 1;\n }\n\n /** @hidden */\n get _showPageIndicatorContainer(): boolean {\n return this.pageIndicatorContainer && (this.pageIndicatorsCountArray.length > 0 || this.numericIndicator);\n }\n\n /** @hidden */\n get getPageIndicatorLabel(): string {\n return `${this.currentActiveSlidesStartIndex + 1} ${this.resourceStrings.fd_carousel_of} ${\n this.pageIndicatorsCountArray.length\n }`;\n }\n\n /** @hidden */\n get screenReaderLabel(): string {\n return `${this.resourceStrings.fd_carousel_reader} ${this.currentActiveSlidesStartIndex + 1} ${\n this.resourceStrings.fd_carousel_of\n } ${this.pageIndicatorsCountArray.length}`;\n }\n\n /** @hidden */\n _focus(): void {\n const el = this._elementRef.nativeElement;\n if (el !== document.activeElement) {\n el.focus({\n preventScroll: true\n });\n }\n }\n\n /** Transitions to the previous slide in the carousel. */\n previous(): void {\n if (!this.loop && this.currentActiveSlidesStartIndex <= 0) {\n return;\n }\n this.rightButtonDisabled = false;\n this._adjustActiveItemPosition(SlideDirection.PREVIOUS);\n this._preventDefaultBtnFocus();\n this._carouselService.pickPrevious();\n this._notifySlideChange(SlideDirection.PREVIOUS);\n this._changeDetectorRef.detectChanges();\n }\n\n /** Transitions to the next slide in the carousel. */\n next(): void {\n if (!this.loop && this.currentActiveSlidesStartIndex >= this.pageIndicatorsCountArray.length - 1) {\n return;\n }\n\n // Moving to next slide\n this.leftButtonDisabled = false;\n this._adjustActiveItemPosition(SlideDirection.NEXT);\n this._preventDefaultBtnFocus();\n this._carouselService.pickNext();\n this._notifySlideChange(SlideDirection.NEXT);\n this._changeDetectorRef.detectChanges();\n }\n\n /** @hidden Subscribe to carousel service events */\n private _subscribeServiceEvents(): void {\n this._carouselService.activeChange$.subscribe((event) => this._onSlideSwipe(event));\n this._carouselService.dragStateChange$.subscribe((event) => this._onSlideDrag(event));\n }\n\n /**\n * @hidden Prevent native focus flow related to button, if button will be disable on focus state.\n * It works only if carousel is not in circular loop.\n */\n private _preventDefaultBtnFocus(): void {\n if (this.loop) {\n return;\n }\n const isFirst = this.currentActiveSlidesStartIndex === 0;\n const isLast = this.currentActiveSlidesStartIndex === this.pageIndicatorsCountArray.length - 1;\n if (isFirst || isLast) {\n this._elementRef.nativeElement.focus({\n preventScroll: true\n });\n }\n }\n\n /** @hidden Adjust position of active item, based on slide direction */\n private _adjustActiveItemPosition(slideDirection: SlideDirection, step: number = 1): void {\n // Move one step in the direction\n const positionAdjustment = slideDirection === SlideDirection.NEXT ? step : -step;\n this.currentActiveSlidesStartIndex = this.currentActiveSlidesStartIndex + positionAdjustment;\n\n // If carousel set to loop\n if (this.loop) {\n if (this.currentActiveSlidesStartIndex < 0) {\n this.currentActiveSlidesStartIndex = this.slides.length + this.currentActiveSlidesStartIndex;\n } else if (this.currentActiveSlidesStartIndex >= this.slides.length) {\n this.currentActiveSlidesStartIndex = this.currentActiveSlidesStartIndex % this.slides.length;\n }\n } else {\n this._buttonVisibility();\n }\n }\n\n /** @hidden Handles navigation button visibility */\n private _buttonVisibility(): void {\n if (!this.loop) {\n // Need to disable navigation button if either direction limit has reached.\n if (this.currentActiveSlidesStartIndex === 0) {\n this.leftButtonDisabled = true;\n this.rightButtonDisabled = false;\n } else if (this.slides.length - 1 === this.currentActiveSlidesStartIndex) {\n this.rightButtonDisabled = true;\n this.leftButtonDisabled = false;\n } else if (\n this._visibleSlidesNumericCount > 1 &&\n this.currentActiveSlidesStartIndex + this._visibleSlidesNumericCount >= this.slides.length\n ) {\n this.rightButtonDisabled = true;\n } else {\n this.leftButtonDisabled = false;\n this.rightButtonDisabled = false;\n }\n if (this.slides.length === 1) {\n this.leftButtonDisabled = true;\n this.rightButtonDisabled = true;\n }\n }\n }\n\n /** @hidden Handle when slide is added or removed */\n private _onSlideUpdates(): void {\n this._slidesCopy = this.slides.toArray();\n this.currentActiveSlidesStartIndex = 0;\n this._carouselService.initialise(this._config, this.slides, this.slideContainer);\n this._carouselService.active = null;\n if (this.vertical) {\n this._renderer.setStyle(this.slideContainer?.nativeElement, 'transform', 'translateY(0px)');\n } else {\n this._renderer.setStyle(this.slideContainer?.nativeElement, 'transform', 'translateX(0px)');\n }\n this._initializeCarousel();\n this._changeDetectorRef.detectChanges();\n }\n\n /** @hidden Initialize carousel with visible items */\n private _initializeCarousel(): void {\n this._zone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n // Handles navigator button enabled/disabled state\n this._buttonVisibility();\n let arrayLength: number;\n // set page indicator count with fake array, to use in template\n if (this.loop && this._visibleSlidesNumericCount > 1) {\n // If loop with multi item visible.\n arrayLength = this.slides.length;\n } else {\n arrayLength = this.slides.length - this._visibleSlidesNumericCount + 1;\n }\n const pageIndicatorsIfZeroCount = this.slides.length === 0 ? 0 : 1;\n this.pageIndicatorsCountArray = new Array(arrayLength > 0 ? arrayLength : pageIndicatorsIfZeroCount);\n this._goToFirstItem();\n this.slides.forEach((_slide, index) => {\n if (\n index >= this.currentActiveSlidesStartIndex &&\n index < this.currentActiveSlidesStartIndex + this._visibleSlidesNumericCount\n ) {\n _slide.visibility = 'visible';\n } else {\n _slide.visibility = 'hidden';\n }\n });\n this._changeDetectorRef.detectChanges();\n });\n }\n\n /** @hidden */\n private _goToFirstItem(): void {\n if (\n this.pageIndicatorsCountArray.length === 0 &&\n this._carouselService.currentTransitionPx !== 0 &&\n this.slides.length > 1\n ) {\n this.currentActiveSlidesStartIndex = 0;\n this._carouselService.goToItem(this.slides.first);\n }\n }\n\n /** @hidden Initialize config for Carousel service */\n private _initializeServiceConfig(): void {\n this._config.vertical = this.vertical;\n this._config.elementsAtOnce = this._visibleSlidesNumericCount;\n this._config.gestureSupport = this.swipeEnabled;\n this._config.infinite = this.loop;\n this._config.transition = String(this.slideTransitionDuration) + 'ms';\n // Carousel service expects transition in string format with unit.\n }\n\n /**\n * @hidden Returns the slide swapping steps\n */\n private _getStepTaken(event: PanEndOutput, actualActiveSlideIndex: number): number {\n let stepsCalculated: number;\n if (\n (!this._rtl$() && event.after) ||\n (this._rtl$() && !event.after && !this.vertical) ||\n (this.vertical && event.after)\n ) {\n if (actualActiveSlideIndex === 0 && this.currentActiveSlidesStartIndex === 0) {\n stepsCalculated = 0;\n } else if (actualActiveSlideIndex > this.currentActiveSlidesStartIndex) {\n stepsCalculated = actualActiveSlideIndex - this.currentActiveSlidesStartIndex;\n } else {\n stepsCalculated = this.slides.length - this.currentActiveSlidesStartIndex + actualActiveSlideIndex;\n }\n } else {\n // Special case, when first left swipe before slides are rotated in carousel service\n if (actualActiveSlideIndex === 0 && this.currentActiveSlidesStartIndex === 0) {\n stepsCalculated = 0;\n } else if (actualActiveSlideIndex < this.currentActiveSlidesStartIndex) {\n stepsCalculated = this.currentActiveSlidesStartIndex - actualActiveSlideIndex;\n } else {\n stepsCalculated = this.currentActiveSlidesStartIndex + this.slides.length - actualActiveSlideIndex;\n }\n }\n return stepsCalculated;\n }\n\n /** @hidden Handles notification on visible slide change */\n private _notifySlideChange(slideDirection: SlideDirection, firstActiveSlide?: CarouselItemInterface | null): void {\n const activeSlides: CarouselItemComponent[] = [];\n let firstActiveSlideIndex: number;\n if (this.loop) {\n firstActiveSlide = this._carouselService.active;\n }\n if (firstActiveSlide) {\n firstActiveSlideIndex = this.slides.toArray().findIndex((_item) => _item === firstActiveSlide);\n } else {\n firstActiveSlideIndex = this.currentActiveSlidesStartIndex;\n }\n for (let activeSlideIndex = 0; activeSlideIndex < this._visibleSlidesNumericCount; activeSlideIndex++) {\n const index = firstActiveSlideIndex + activeSlideIndex;\n const slide = this.slides.get(index);\n if (slide) {\n activeSlides.push(slide);\n slide.visibility = 'visible';\n }\n }\n this._manageSlideVisibility(firstActiveSlideIndex);\n const direction = slideDirection === SlideDirection.NEXT ? 'Next' : 'Previous';\n this.slideChange.emit(new CarouselActiveSlides(activeSlides, direction));\n }\n\n /** @hidden Manages visibility for slides. Useful in managing tab order */\n private _manageSlideVisibility(firstActiveSlideIndex: number): void {\n setTimeout(() => {\n const lastActiveSlideIndex = firstActiveSlideIndex + this._visibleSlidesNumericCount;\n\n this.currentActiveSlidesIds = [];\n\n this.slides.forEach((slide, index) => {\n const isVisible = index >= firstActiveSlideIndex && index < lastActiveSlideIndex;\n\n // Only update visibility if it has changed\n if (slide.visibility !== (isVisible ? 'visible' : 'hidden')) {\n slide.visibility = isVisible ? 'visible' : 'hidden';\n }\n\n if (isVisible) {\n this.currentActiveSlidesIds.push(slide.id);\n }\n\n slide.ariaHidden.set(!isVisible);\n slide.ariaSelected.set(isVisible);\n });\n\n this.ariaActivedescendant = this.currentActiveSlidesIds.join(' ');\n\n this._changeDetectorRef.markForCheck();\n }, this.slideTransitionDuration);\n }\n\n /** @hidden On Swiping of slide, manage page indicator */\n private _onSlideSwipe(event: PanEndOutput): void {\n this._slideSwiped = true;\n const firstActiveSlide = event.item;\n const actualActiveSlideIndex = this._slidesCopy.findIndex((_slide) => _slide === firstActiveSlide);\n const stepTaken = this._getStepTaken(event, actualActiveSlideIndex);\n if (stepTaken > 0) {\n let slideDirection: SlideDirection;\n if (!this._rtl$()) {\n slideDirection = event.after ? SlideDirection.NEXT : SlideDirection.PREVIOUS;\n } else {\n // vertical carousel slide direction is same in ltr and rtl\n if (this.vertical) {\n slideDirection = event.after ? SlideDirection.NEXT : SlideDirection.PREVIOUS;\n } else {\n slideDirection = event.after ? SlideDirection.PREVIOUS : SlideDirection.NEXT;\n }\n }\n this._adjustActiveItemPosition(slideDirection, stepTaken);\n this._notifySlideChange(slideDirection, firstActiveSlide);\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /**\n * @hidden Making slides visible when slides are dragged. Otherwise, it looses the effect.\n */\n private _onSlideDrag(isDragging: boolean): void {\n if (isDragging) {\n this.slides.forEach((_slide) => {\n _slide.visibility = 'visible';\n });\n this._slideSwiped = false;\n this._changeDetectorRef.markForCheck();\n } else {\n // After slide limit reached, if dragging starts then revert visibility\n if (!this._slideSwiped && !this.loop) {\n this._manageSlideVisibility(this.currentActiveSlidesStartIndex);\n }\n }\n }\n\n /**\n * @hidden\n * Resizes inner carousel container to fit all items in the viewport and hide those which are not fully in it.\n */\n private _resizeContentContainer(): void {\n merge(\n resizeObservable(this.slideContainer.nativeElement),\n resizeObservable(this.carouselContainer.nativeElement)\n )\n .pipe(debounceTime(100), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n const { width, slides } = this._getFittingSlidesAndWidth();\n\n if (this.visibleSlidesCount === 'auto') {\n this._visibleSlidesNumericCount = slides;\n const totalSlides = this.slides.length;\n\n let needleSlideIndex = this.currentActiveSlidesStartIndex;\n\n // If amount of slides insufficient to fill whole carousel, slide back a bit.\n if (this.currentActiveSlidesStartIndex + slides > totalSlides) {\n needleSlideIndex =\n this.currentActiveSlidesStartIndex -\n (this.currentActiveSlidesStartIndex + slides - totalSlides);\n }\n\n const needleSlide = this.slides.get(needleSlideIndex);\n\n this.currentActiveSlidesStartIndex = needleSlideIndex;\n\n this._carouselService.active = needleSlide;\n\n // Refresh carousel config and transition to the current slide.\n this._initializeCarousel();\n\n needleSlide && this._carouselService.goToItem(needleSlide);\n this._notifySlideChange(SlideDirection.None);\n }\n\n if (this._slidesWrapperSize !== width) {\n this._slidesWrapperSize = width;\n }\n\n this._changeDetectorRef.detectChanges();\n });\n }\n\n /**\n * @hidden\n * Calculates how many slides can be shown within current carousel viewport.\n * @returns Object containing fitting slides count and total width of those slides.\n */\n private _getFittingSlidesAndWidth(): FittingSlidesAndWidth {\n if (!this.carouselContainer) {\n return {\n width: 0,\n slides: 1\n };\n }\n const { width } = this.carouselContainer.nativeElement.getBoundingClientRect();\n let maxSize = 0;\n let slidesCount = 0;\n const carouselSlides = this.slides.toArray();\n const previousSlides = carouselSlides.splice(0, this.currentActiveSlidesStartIndex);\n const getSlides = (slides: CarouselItemComponent[]): void => {\n for (const slide of slides) {\n const slideWidth = slide.getWidth();\n if (!slideWidth) {\n break;\n }\n const newSize = maxSize + slideWidth;\n if (newSize > width) {\n break;\n }\n maxSize = newSize;\n slidesCount++;\n }\n };\n getSlides(carouselSlides);\n\n // If with of the rest of the slides is lesser than carouse's viewport, add previous slides to it.\n if (maxSize < width) {\n getSlides(previousSlides);\n }\n return {\n width: maxSize,\n slides: slidesCount\n };\n }\n\n /** @hidden */\n private _getVisibleSlidesCount(): number {\n if (this._visibleSlidesCount !== 'auto') {\n return this._visibleSlidesCount;\n }\n const { slides } = this._getFittingSlidesAndWidth();\n return slides;\n }\n}\n","<section\n class=\"fd-carousel\"\n [class.fd-carousel--no-navigation]=\"!navigation\"\n tabindex=\"0\"\n [style.height]=\"height\"\n [style.width]=\"width\"\n [attr.dir]=\"_dir$()\"\n role=\"listbox\"\n aria-roledescription=\"Carousel\"\n [attr.aria-activedescendant]=\"ariaActivedescendant\"\n #carouselContainer\n (click)=\"_focus()\"\n>\n @if (_showPageIndicatorContainer && pageIndicatorsOrientation === 'top') {\n <ng-template [ngTemplateOutlet]=\"pageIndicatorContainer\"></ng-template>\n }\n <div\n class=\"fd-carousel__content\"\n [class.fd-carousel__content--horizontal]=\"!vertical\"\n [ngClass]=\"'fd-carousel__content--' + contentBackground\"\n [style.width]=\"_contentSizePx\"\n >\n @if (_showNavigationButtonInContent) {\n <ng-template [ngTemplateOutlet]=\"buttonLeft\"></ng-template>\n }\n <div #slideContainer class=\"fd-carousel__slides\">\n <ng-content></ng-content>\n </div>\n @if (_showNavigationButtonInContent) {\n <ng-template [ngTemplateOutlet]=\"buttonRight\"></ng-template>\n }\n </div>\n @if (_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom') {\n <ng-template [ngTemplateOutlet]=\"pageIndicatorContainer\"></ng-template>\n }\n <div [style.display]=\"'none'\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n {{ screenReaderLabel }}\n </div>\n</section>\n<ng-template #pageIndicatorContainer>\n <div\n class=\"fd-carousel__page-indicator-container\"\n [class.fd-carousel__page-indicator-container--no-border]=\"noPaginationContainerBorder\"\n [ngClass]=\"'fd-carousel__page-indicator-container--' + pageIndicatorBackground\"\n >\n @if (_showNavigationButtonInPageIndicatorContainer) {\n <ng-template [ngTemplateOutlet]=\"buttonLeft\"></ng-template>\n }\n <ng-template [ngTemplateOutlet]=\"pageIndicators\"> </ng-template>\n @if (_showNavigationButtonInPageIndicatorContainer) {\n <ng-template [ngTemplateOutlet]=\"buttonRight\"></ng-template>\n }\n </div>\n</ng-template>\n<ng-template #pageIndicators>\n @if (numericIndicator) {\n <div class=\"fd-carousel__page-indicators\">\n @if (pageIndicator) {\n <div class=\"fd-carousel__text\" dir=\"ltr\">\n {{ getPageIndicatorLabel }}\n </div>\n }\n </div>\n }\n @if (!numericIndicator && _showNavigationButtonInPageIndicatorContainer) {\n <div class=\"fd-carousel__page-indicators\" [attr.dir]=\"_dir$()\">\n @if (pageIndicator) {\n @for (item of pageIndicatorsCountArray; track item; let i = $index) {\n <span\n role=\"img\"\n [attr.aria-label]=\"\n 'coreCarousel.pageIndicatorLabel' | fdTranslate: { itemNum: i + 1, totalNum: totalSlides }\n \"\n class=\"fd-carousel__page-indicator\"\n [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n ></span>\n }\n }\n </div>\n }\n</ng-template>\n<ng-template #buttonLeft>\n <button\n fd-button\n role=\"button\"\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--left]=\"!vertical\"\n [class.fd-carousel__button--up]=\"vertical\"\n [style.z-index]=\"1\"\n [attr.aria-label]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n (click)=\"previous(); $event.stopPropagation()\"\n [disabled]=\"leftButtonDisabled\"\n [attr.title]=\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-up' : 'slim-arrow-left'\"\n ></button>\n</ng-template>\n<ng-template #buttonRight>\n <button\n fd-button\n role=\"button\"\n class=\"fd-carousel__button\"\n [class.fd-carousel__button--right]=\"!vertical\"\n [class.fd-carousel__button--down]=\"vertical\"\n [style.z-index]=\"1\"\n [attr.aria-label]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n (click)=\"next(); $event.stopPropagation()\"\n [disabled]=\"rightButtonDisabled\"\n [attr.title]=\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\"\n [glyph]=\"vertical ? 'slim-arrow-down' : 'slim-arrow-right'\"\n ></button>\n</ng-template>\n","import {\n AfterContentInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n QueryList\n} from '@angular/core';\n\nimport { CarouselItemDirective } from './carousel-item.directive';\nimport { CarouselConfig, CarouselService, PanEndOutput } from './carousel.service';\n\n@Directive({\n selector: '[fdCarousel]',\n host: {\n class: 'fd-carousel_'\n },\n providers: [CarouselService],\n standalone: true\n})\nexport class CarouselDirective implements AfterContentInit {\n /** Configuration for carousel */\n @Input()\n config: CarouselConfig;\n\n /** Initial active item of carousel, position first + offset */\n @Input()\n active: CarouselItemDirective;\n\n /** @hidden */\n get carouselService(): CarouselService {\n return this._carouselService;\n }\n\n /** Event thrown, when active element is changed */\n @Output()\n readonly activeChange: EventEmitter<PanEndOutput> = new EventEmitter<PanEndOutput>();\n\n /** Event thrown when element is dragged. Emits \"true\" when drag starts and \"false\" when drag ends. */\n @Output()\n readonly dragStateChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** @hidden */\n @ContentChildren(CarouselItemDirective, { descendants: true })\n items: QueryList<CarouselItemDirective>;\n\n /** @hidden */\n constructor(\n private readonly _elementRef: ElementRef,\n private readonly _carouselService: CarouselService\n ) {}\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._carouselService.initialise(this.config, this.items, this._elementRef);\n\n this._carouselService.activeChange$.subscribe((event) => this.activeChange.emit(event));\n this._carouselService.dragStateChange$.subscribe((event) => this.dragStateChange.emit(event));\n }\n\n /** Change active element */\n goToItem(item: CarouselItemDirective, smooth?: boolean): void {\n this._carouselService.goToItem(item, smooth);\n }\n\n /** Pick previous carousel item */\n pickPrevious(): void {\n this._carouselService.pickPrevious();\n }\n\n /** Pick next carousel item */\n pickNext(): void {\n this._carouselService.pickNext();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CarouselItemDirective } from './carousel-item.directive';\nimport { CarouselItemComponent } from './carousel-item/carousel-item.component';\nimport { CarouselComponent } from './carousel.component';\nimport { CarouselDirective } from './carousel.directive';\nimport { CarouselService } from './carousel.service';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [CarouselItemDirective, CarouselDirective, CarouselComponent, CarouselItemComponent],\n exports: [CarouselItemDirective, CarouselDirective, CarouselComponent, CarouselItemComponent],\n providers: [CarouselService]\n})\nexport class CarouselModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["carouselItemCounter","i1.CarouselService"],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-carousel.mjs","sources":["../tmp-esm2022/carousel/carousel-item.directive.js","../tmp-esm2022/carousel/carousel-item/carousel-item.component.js","../tmp-esm2022/carousel/carousel.service.js","../tmp-esm2022/carousel/i18n/carousel-resources.js","../tmp-esm2022/carousel/carousel.component.js","../tmp-esm2022/carousel/carousel.directive.js","../tmp-esm2022/carousel/carousel.module.js","../tmp-esm2022/carousel/fundamental-ngx-core-carousel.js"],"sourcesContent":["import { Directive, ElementRef, HostBinding, Input } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nlet carouselItemCounter = 0;\nexport class CarouselItemDirective {\n /** @hidden */\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n /** Carousel Id, it has some default value if not set, */\n this.id = 'carousel-item-id-' + carouselItemCounter++;\n }\n /** Native element */\n get element() {\n return this._elementRef.nativeElement;\n }\n /** Width of element */\n getWidth() {\n return this.element.getBoundingClientRect().width || this.initialWidth;\n }\n /** Height of element */\n getHeight() {\n return this.element.getBoundingClientRect().height || this.initialHeight;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselItemDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: CarouselItemDirective, isStandalone: true, selector: \"[fd-carousel-item], [fdCarouselItem]\", inputs: { value: \"value\", initialHeight: \"initialHeight\", initialWidth: \"initialWidth\", id: \"id\" }, host: { properties: { \"attr.id\": \"this.id\" } }, exportAs: [\"fdCarouselItem\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fd-carousel-item], [fdCarouselItem]',\n exportAs: 'fdCarouselItem',\n standalone: true\n }]\n }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { value: [{\n type: Input\n }], initialHeight: [{\n type: Input\n }], initialWidth: [{\n type: Input\n }], id: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.id']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2Fyb3VzZWwvY2Fyb3VzZWwtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFMUUsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFPNUIsTUFBTSxPQUFPLHFCQUFxQjtJQWtCOUIsY0FBYztJQUNkLFlBQTZCLFdBQW9DO1FBQXBDLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQU5qRSwwREFBMEQ7UUFHMUQsT0FBRSxHQUFXLG1CQUFtQixHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFHVyxDQUFDO0lBRXJFLHNCQUFzQjtJQUN0QixJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQzFDLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNFLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzdFLENBQUM7OEdBbENRLHFCQUFxQjtrR0FBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQUxqQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxzQ0FBc0M7b0JBQ2hELFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjsrRUFJRyxLQUFLO3NCQURKLEtBQUs7Z0JBS04sYUFBYTtzQkFEWixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFNTixFQUFFO3NCQUZELEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmxldCBjYXJvdXNlbEl0ZW1Db3VudGVyID0gMDtcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmQtY2Fyb3VzZWwtaXRlbV0sIFtmZENhcm91c2VsSXRlbV0nLFxuICAgIGV4cG9ydEFzOiAnZmRDYXJvdXNlbEl0ZW0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlPFQgPSB1bmtub3duPiB7XG4gICAgLyoqIFZhbHVlIG9mIHRoZSBpdGVtICwgdG8ga2VlcCBzb21lIGluZm9ybWF0aW9uIGluc2lkZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWU6IFQ7XG5cbiAgICAvKiogSW5pdGlhbCBoZWlnaHQgdmFsdWUsIG5lZWRlZCB3aGVuIGNhcm91c2VsIGlzIGluc2lkZSBwb3BvdmVyICovXG4gICAgQElucHV0KClcbiAgICBpbml0aWFsSGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKiogSW5pdGlhbCBoZWlnaHQgdmFsdWUsIG5lZWRlZCB3aGVuIGNhcm91c2VsIGlzIGluc2lkZSBwb3BvdmVyICovXG4gICAgQElucHV0KClcbiAgICBpbml0aWFsV2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBDYXJvdXNlbCBJZCwgaXQgaGFzIHNvbWUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc2V0LCAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQ6IHN0cmluZyA9ICdjYXJvdXNlbC1pdGVtLWlkLScgKyBjYXJvdXNlbEl0ZW1Db3VudGVyKys7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxuXG4gICAgLyoqIE5hdGl2ZSBlbGVtZW50ICAqL1xuICAgIGdldCBlbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogV2lkdGggb2YgZWxlbWVudCAqL1xuICAgIGdldFdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgdGhpcy5pbml0aWFsV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEhlaWdodCBvZiBlbGVtZW50ICovXG4gICAgZ2V0SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IHx8IHRoaXMuaW5pdGlhbEhlaWdodDtcbiAgICB9XG59XG4iXX0=","import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input, signal, ViewEncapsulation } from '@angular/core';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport * as i0 from \"@angular/core\";\nlet carouselItemCounter = 0;\nexport class CarouselItemComponent {\n /** @hidden */\n set visibility(visibility) {\n this._visibility = visibility;\n }\n get visibility() {\n return this._visibility;\n }\n /** @hidden */\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n /** Id of the Carousel items. */\n this.id = `fd-carousel-item-${carouselItemCounter++}`;\n /**\n * Loading indicator when item is not yet loaded\n */\n this.loading = false;\n /** Sets tooltip for carousel item */\n this.title = null;\n /** @hidden Hide/show slide, useful for managing tab order */\n this._visibility = 'visible';\n /** @hidden value for aria-setsize attribute */\n this.ariaSetsize = signal(0, ...(ngDevMode ? [{ debugName: \"ariaSetsize\" }] : []));\n /** @hidden value for aria-posinset attribute */\n this.ariaPosinset = signal(0, ...(ngDevMode ? [{ debugName: \"ariaPosinset\" }] : []));\n /** @hidden value for aria-selected attribute */\n this.ariaSelected = signal(false, ...(ngDevMode ? [{ debugName: \"ariaSelected\" }] : []));\n /** @hidden value for aria-hidden attribute */\n this.ariaHidden = signal(false, ...(ngDevMode ? [{ debugName: \"ariaHidden\" }] : []));\n }\n /** Native element */\n get element() {\n return this._elementRef.nativeElement;\n }\n /** Width of element */\n getWidth() {\n return this.element.getBoundingClientRect().width || this.initialWidth;\n }\n /** Height of element */\n getHeight() {\n return this.element.getBoundingClientRect().height || this.initialHeight;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselItemComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.4\", type: CarouselItemComponent, isStandalone: true, selector: \"fd-carousel-item\", inputs: { id: \"id\", ariaLabel: \"ariaLabel\", ariaLabelledBy: \"ariaLabelledBy\", ariaDescribedBy: \"ariaDescribedBy\", loading: \"loading\", title: \"title\", initialHeight: \"initialHeight\", initialWidth: \"initialWidth\", value: \"value\" }, host: { attributes: { \"role\": \"option\" }, properties: { \"attr.aria-setsize\": \"ariaSetsize()\", \"attr.aria-posinset\": \"ariaPosinset()\", \"attr.aria-selected\": \"ariaSelected()\", \"attr.aria-hidden\": \"ariaHidden()\", \"attr.id\": \"this.id\", \"attr.aria-label\": \"this.ariaLabel\", \"attr.aria-labelledby\": \"this.ariaLabelledBy\", \"attr.aria-describedby\": \"this.ariaDescribedBy\", \"attr.title\": \"this.title\", \"style.visibility\": \"this._visibility\" }, classAttribute: \"fd-carousel__item fd-carousel__item--active\" }, ngImport: i0, template: \"<fd-busy-indicator [loading]=\\\"loading\\\" [style.max-width.%]=\\\"100\\\">\\n <ng-content></ng-content>\\n</fd-busy-indicator>\\n\", styles: [\".fd-carousel__slides{min-width:initial!important}.fd-carousel__item--active{display:flex;max-width:100%}\\n\"], dependencies: [{ kind: \"component\", type: BusyIndicatorComponent, selector: \"fd-busy-indicator\", inputs: [\"loading\", \"size\", \"block\", \"ariaLabel\", \"ariaValueText\", \"title\", \"label\", \"ariaLive\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-carousel-item', host: {\n role: 'option',\n class: 'fd-carousel__item fd-carousel__item--active',\n '[attr.aria-setsize]': 'ariaSetsize()',\n '[attr.aria-posinset]': 'ariaPosinset()',\n '[attr.aria-selected]': 'ariaSelected()',\n '[attr.aria-hidden]': 'ariaHidden()'\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [BusyIndicatorComponent], template: \"<fd-busy-indicator [loading]=\\\"loading\\\" [style.max-width.%]=\\\"100\\\">\\n <ng-content></ng-content>\\n</fd-busy-indicator>\\n\", styles: [\".fd-carousel__slides{min-width:initial!important}.fd-carousel__item--active{display:flex;max-width:100%}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { id: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.id']\n }], ariaLabel: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-label']\n }], ariaLabelledBy: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-labelledby']\n }], ariaDescribedBy: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-describedby']\n }], loading: [{\n type: Input\n }], title: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.title']\n }], initialHeight: [{\n type: Input\n }], initialWidth: [{\n type: Input\n }], value: [{\n type: Input\n }], _visibility: [{\n type: HostBinding,\n args: ['style.visibility']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2Fyb3VzZWwvY2Fyb3VzZWwtaXRlbS9jYXJvdXNlbC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYXJvdXNlbC9jYXJvdXNlbC1pdGVtL2Nhcm91c2VsLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFLOUUsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUE0QjVCLE1BQU0sT0FBTyxxQkFBcUI7SUE0RDlCLGNBQWM7SUFDZCxJQUFJLFVBQVUsQ0FBQyxVQUFzQjtRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO0lBQ2QsWUFBNkIsV0FBb0M7UUFBcEMsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBckVqRSxnQ0FBZ0M7UUFHaEMsT0FBRSxHQUFHLG9CQUFvQixtQkFBbUIsRUFBRSxFQUFFLENBQUM7UUFpQmpEOztXQUVHO1FBRUgsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixxQ0FBcUM7UUFHckMsVUFBSyxHQUFHLElBQUksQ0FBQztRQWNiLDZEQUE2RDtRQUU3RCxnQkFBVyxHQUFlLFNBQVMsQ0FBQztRQUVwQywrQ0FBK0M7UUFDL0MsZ0JBQVcsR0FBRyxNQUFNLENBQVMsQ0FBQyx1REFBQyxDQUFDO1FBRWhDLGdEQUFnRDtRQUNoRCxpQkFBWSxHQUFHLE1BQU0sQ0FBUyxDQUFDLHdEQUFDLENBQUM7UUFFakMsZ0RBQWdEO1FBQ2hELGlCQUFZLEdBQUcsTUFBTSxDQUFVLEtBQUssd0RBQUMsQ0FBQztRQUV0Qyw4Q0FBOEM7UUFDOUMsZUFBVSxHQUFHLE1BQU0sQ0FBVSxLQUFLLHNEQUFDLENBQUM7SUFZZ0MsQ0FBQztJQUVyRSxzQkFBc0I7SUFDdEIsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUMxQyxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzRSxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM3RSxDQUFDOzhHQXJGUSxxQkFBcUI7a0dBQXJCLHFCQUFxQixzeUJDM0NsQyw4SEFHQSxvS0RzQ2Msc0JBQXNCOzsyRkFFdkIscUJBQXFCO2tCQTFCakMsU0FBUzsrQkFDSSxrQkFBa0IsUUFhdEI7d0JBQ0YsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsS0FBSyxFQUFFLDZDQUE2Qzt3QkFDcEQscUJBQXFCLEVBQUUsZUFBZTt3QkFDdEMsc0JBQXNCLEVBQUUsZ0JBQWdCO3dCQUN4QyxzQkFBc0IsRUFBRSxnQkFBZ0I7d0JBQ3hDLG9CQUFvQixFQUFFLGNBQWM7cUJBQ3ZDLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCLENBQUMsc0JBQXNCLENBQUM7K0VBTWpDLEVBQUU7c0JBRkQsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxTQUFTO2dCQU10QixTQUFTO3NCQUZSLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsaUJBQWlCO2dCQU05QixjQUFjO3NCQUZiLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsc0JBQXNCO2dCQU1uQyxlQUFlO3NCQUZkLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsdUJBQXVCO2dCQU9wQyxPQUFPO3NCQUROLEtBQUs7Z0JBTU4sS0FBSztzQkFGSixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLFlBQVk7Z0JBS3pCLGFBQWE7c0JBRFosS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsV0FBVzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIHNpZ25hbCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnVzeUluZGljYXRvckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXN5LWluZGljYXRvcic7XG5pbXBvcnQgeyBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UgfSBmcm9tICcuLi9jYXJvdXNlbC5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgVmlzaWJpbGl0eSA9ICd2aXNpYmxlJyB8ICdoaWRkZW4nO1xuXG5sZXQgY2Fyb3VzZWxJdGVtQ291bnRlciA9IDA7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2Fyb3VzZWwtaXRlbScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhcm91c2VsLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgICAgICAuZmQtY2Fyb3VzZWxfX3NsaWRlcyB7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiBpbml0aWFsICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuZmQtY2Fyb3VzZWxfX2l0ZW0tLWFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIGBcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgcm9sZTogJ29wdGlvbicsXG4gICAgICAgIGNsYXNzOiAnZmQtY2Fyb3VzZWxfX2l0ZW0gZmQtY2Fyb3VzZWxfX2l0ZW0tLWFjdGl2ZScsXG4gICAgICAgICdbYXR0ci5hcmlhLXNldHNpemVdJzogJ2FyaWFTZXRzaXplKCknLFxuICAgICAgICAnW2F0dHIuYXJpYS1wb3NpbnNldF0nOiAnYXJpYVBvc2luc2V0KCknLFxuICAgICAgICAnW2F0dHIuYXJpYS1zZWxlY3RlZF0nOiAnYXJpYVNlbGVjdGVkKCknLFxuICAgICAgICAnW2F0dHIuYXJpYS1oaWRkZW5dJzogJ2FyaWFIaWRkZW4oKSdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaW1wb3J0czogW0J1c3lJbmRpY2F0b3JDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIENhcm91c2VsSXRlbUNvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIENhcm91c2VsSXRlbUludGVyZmFjZSB7XG4gICAgLyoqIElkIG9mIHRoZSBDYXJvdXNlbCBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQgPSBgZmQtY2Fyb3VzZWwtaXRlbS0ke2Nhcm91c2VsSXRlbUNvdW50ZXIrK31gO1xuXG4gICAgLyoqIFNldHMgYXJpYS1sYWJlbCBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsIGl0ZW0gKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogU2V0cyBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIGZvciBjYXJvdXNlbCBpdGVtICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JylcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBTZXRzIGFyaWEtZGVzY3JpYmVkYnkgYXR0cmlidXRlIGZvciBjYXJvdXNlbCBpdGVtICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpXG4gICAgYXJpYURlc2NyaWJlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBpbmRpY2F0b3Igd2hlbiBpdGVtIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKiogU2V0cyB0b29sdGlwIGZvciBjYXJvdXNlbCBpdGVtICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGl0bGUnKVxuICAgIHRpdGxlID0gbnVsbDtcblxuICAgIC8qKiBJbml0aWFsIGhlaWdodCB2YWx1ZSwgbmVlZGVkIHdoZW4gY2Fyb3VzZWwgaXMgaW5zaWRlIHBvcG92ZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGluaXRpYWxIZWlnaHQ6IG51bWJlcjtcblxuICAgIC8qKiBJbml0aWFsIGhlaWdodCB2YWx1ZSwgbmVlZGVkIHdoZW4gY2Fyb3VzZWwgaXMgaW5zaWRlIHBvcG92ZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGluaXRpYWxXaWR0aDogbnVtYmVyO1xuXG4gICAgLyoqIFZhbHVlIG9mIGNhcm91c2VsIGl0ZW0gKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbHVlOiBUO1xuXG4gICAgLyoqIEBoaWRkZW4gSGlkZS9zaG93IHNsaWRlLCB1c2VmdWwgZm9yIG1hbmFnaW5nIHRhYiBvcmRlciAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUudmlzaWJpbGl0eScpXG4gICAgX3Zpc2liaWxpdHk6IFZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG5cbiAgICAvKiogQGhpZGRlbiB2YWx1ZSBmb3IgYXJpYS1zZXRzaXplIGF0dHJpYnV0ZSAqL1xuICAgIGFyaWFTZXRzaXplID0gc2lnbmFsPG51bWJlcj4oMCk7XG5cbiAgICAvKiogQGhpZGRlbiB2YWx1ZSBmb3IgYXJpYS1wb3NpbnNldCBhdHRyaWJ1dGUgKi9cbiAgICBhcmlhUG9zaW5zZXQgPSBzaWduYWw8bnVtYmVyPigwKTtcblxuICAgIC8qKiBAaGlkZGVuIHZhbHVlIGZvciBhcmlhLXNlbGVjdGVkIGF0dHJpYnV0ZSAqL1xuICAgIGFyaWFTZWxlY3RlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiB2YWx1ZSBmb3IgYXJpYS1oaWRkZW4gYXR0cmlidXRlICovXG4gICAgYXJpYUhpZGRlbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldCB2aXNpYmlsaXR5KHZpc2liaWxpdHk6IFZpc2liaWxpdHkpIHtcbiAgICAgICAgdGhpcy5fdmlzaWJpbGl0eSA9IHZpc2liaWxpdHk7XG4gICAgfVxuXG4gICAgZ2V0IHZpc2liaWxpdHkoKTogVmlzaWJpbGl0eSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmlsaXR5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgICAvKiogTmF0aXZlIGVsZW1lbnQgICovXG4gICAgZ2V0IGVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBXaWR0aCBvZiBlbGVtZW50ICovXG4gICAgZ2V0V2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCB0aGlzLmluaXRpYWxXaWR0aDtcbiAgICB9XG5cbiAgICAvKiogSGVpZ2h0IG9mIGVsZW1lbnQgKi9cbiAgICBnZXRIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgfHwgdGhpcy5pbml0aWFsSGVpZ2h0O1xuICAgIH1cbn1cbiIsIjxmZC1idXN5LWluZGljYXRvciBbbG9hZGluZ109XCJsb2FkaW5nXCIgW3N0eWxlLm1heC13aWR0aC4lXT1cIjEwMFwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZmQtYnVzeS1pbmRpY2F0b3I+XG4iXX0=","import { DOCUMENT, DestroyRef, EventEmitter, Inject, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, merge } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport const DEFAULT_TRANSITION_DURATION = '150ms';\n/** @dynamic */\nexport class CarouselService {\n /** Current transition value in px */\n set currentTransitionPx(currentTransitionPx) {\n this._currentTransitionPx = currentTransitionPx;\n }\n get currentTransitionPx() {\n return this._currentTransitionPx;\n }\n /** @hidden */\n get elementsAtOnce() {\n const num = this.config?.elementsAtOnce ?? 1;\n return Math.max(1, num);\n }\n /** @hidden */\n constructor(_document) {\n this._document = _document;\n /** Event thrown when element is dragged. Emits \"true\" when drag starts and \"false\" when drag ends. */\n this.dragStateChange$ = new EventEmitter();\n /** Event thrown, when active element is changed */\n this.activeChange$ = new EventEmitter();\n /** Set to true for rtl mode */\n this.isRtl = false;\n /** @hidden */\n this._lastDistance = 0;\n /** @hidden */\n this._currentTransitionPx = 0;\n /** @hidden */\n this._initialDragPosition = 0;\n /** @hidden */\n this._lastDragPosition = 0;\n /** @hidden */\n this._listenToMouseMove = false;\n /** @hidden */\n this._dragStarted = false;\n /**\n * @hidden\n */\n this._destroyRef = inject(DestroyRef);\n }\n /** @hidden */\n ngOnDestroy() {\n this.activeChange$.complete();\n this.dragStateChange$.complete();\n }\n /** set initial values for the service */\n initialise(config, items, listElementReference) {\n this.config = config;\n this.setElement(listElementReference);\n this.setItems(items);\n if (this.config.gestureSupport) {\n this._setupGestures();\n }\n }\n /** update config value for the service */\n updateConfig(config) {\n this.config = config;\n }\n /** set element ref */\n setElement(elementRef) {\n this._element = elementRef.nativeElement;\n }\n /** set items and assign active item, if not already there */\n setItems(items) {\n this.items = items;\n if (!this.active) {\n this.active = this.items.first;\n }\n }\n /** Change active element */\n goToItem(item, smooth) {\n let index = this._getIndexOfItem(item);\n if (this.config.infinite) {\n this._centerActive(index);\n index = this._getIndexOfItem(item);\n }\n this._transitionToIndex(index, smooth);\n }\n /** pick next element and set it active */\n pickNext() {\n if (!this.active) {\n this.active = this.items.first;\n }\n const activeItemIndex = this._getIndexOfItem(this.active);\n const itemToActivate = this.items.get(activeItemIndex + 1) ?? this.items.first;\n this.goToItem(itemToActivate, true);\n this.active = itemToActivate;\n }\n /** pick previous element and set it active */\n pickPrevious() {\n if (!this.active) {\n this.active = this.items.get(2);\n }\n const activeItemIndex = this._getIndexOfItem(this.active);\n let itemToActivate = this.items.get(activeItemIndex - 1);\n // case where slides can move infinitely in one direction\n // handle case where on-load activeItemIndex = 0 and activeItemIndex - 1 returns undefined item from item array.\n if (!itemToActivate) {\n itemToActivate = this.items.last;\n }\n this.goToItem(itemToActivate, true);\n this.active = itemToActivate;\n }\n /** @hidden */\n _centerActive(index) {\n const size = this._getSize(this.items.first);\n if (isNaN(size)) {\n return;\n }\n const middleIndex = Math.ceil(this.items.length / 2);\n const offset = Math.ceil(this.elementsAtOnce / 2);\n const missingItems = index + offset - middleIndex;\n const array = this.items.toArray();\n if (missingItems > 0) {\n for (let i = 0; i < missingItems; i++) {\n const item = array.shift();\n item && array.push(item);\n }\n }\n else {\n for (let i = 0; i < Math.abs(missingItems); i++) {\n const item = array.pop();\n item && array.unshift(item);\n }\n }\n /** Changing order of elements in QueryList and Native HTML */\n this.items.reset(array);\n this.items.forEach((item) => item.element.parentNode?.appendChild(item.element));\n /**\n * For proper animation it's needed to transform elements,\n * by changing transition by amount of elements placed at top/bottom\n */\n this._element.style.transitionDuration = '0s';\n this._transitionCarousel(this._currentTransitionPx + this._getSize(this.items.first) * missingItems);\n }\n /** @hidden */\n _transitionToIndex(index, smooth) {\n let transitionPx = this._getSize(this.items.first) * index;\n this._element.style.transitionDuration = smooth ? this._getTransition() : '0s';\n if (!this.isRtl || (this.config.vertical && this.isRtl)) {\n transitionPx = -transitionPx;\n }\n this._transitionCarousel(transitionPx);\n }\n /** @hidden Get closes element, based on current transition */\n _getClosest() {\n /** If transition is positive, it should go to first element */\n if (!this.config.infinite &&\n ((!this.config.vertical &&\n ((!this.isRtl && this._currentTransitionPx > 0) || (this.isRtl && this._currentTransitionPx < 0))) ||\n (this.config.vertical && this._currentTransitionPx > 0))) {\n return this.items.first;\n }\n const size = this._getSize(this.items.first);\n /** When scroll is after half of element, then ext one should be active */\n const halfApproached = Math.abs(this._currentTransitionPx % size) > size / 2;\n /**\n * Index based on transition px divided by size of elements,\n * every element should have same width, otherwise it should be looped through all elements,\n * which is not good for performance\n */\n let index = Math.ceil(Math.abs(this._currentTransitionPx / size));\n // When elementsAtOnce > 1, swiping should stop at last index - elementsAtOnce\n const elementsAtOnce = this.elementsAtOnce;\n if (!this.config.infinite && elementsAtOnce > 1) {\n // When there're less items in the carousel than the area might display, it should stop to first\n if (this.items.length < elementsAtOnce) {\n return this.items.first;\n }\n if (index + elementsAtOnce >= this.items.length) {\n return this.items.get(this.items.length - elementsAtOnce) ?? this.items.first;\n }\n }\n index = index + (halfApproached ? 0 : -1);\n const item = this.items.get(index);\n /** Checking if transition went out of scope of array */\n return item || this.items.last;\n }\n /** @hidden */\n _getIndexOfItem(item) {\n if (!item) {\n return -1;\n }\n return this.items.toArray().findIndex((_item) => _item === item);\n }\n /** @hidden Getting size of carousel, width for horizontal, height for vertical */\n _getSize(item) {\n if (this.config.vertical) {\n return item.getHeight();\n }\n return item.getWidth();\n }\n /** @hidden */\n _handlePan(delta) {\n const distance = delta - this._lastDistance;\n this._lastDistance = delta;\n this._transitionCarousel(this._currentTransitionPx + distance);\n }\n /** @hidden */\n _handlePanEnd(delta) {\n this._handlePan(delta);\n const closestItem = this._getClosest();\n this.goToItem(closestItem, true);\n if (!this.active) {\n this.active = closestItem;\n this.activeChange$.emit({\n item: closestItem,\n after: delta < 0\n });\n }\n else if (this.active !== closestItem) {\n this.active = closestItem;\n this.activeChange$.emit({\n item: closestItem,\n after: delta < 0\n });\n }\n this.dragStateChange$.emit(false);\n this._lastDistance = 0;\n }\n /**\n * @hidden Animates the carousel to the currently selected slide.\n */\n _transitionCarousel(transitionPx) {\n this._currentTransitionPx = transitionPx;\n const axis = this.config.vertical ? 'Y' : 'X';\n this._element.style.transform = `translate${axis}(${this._currentTransitionPx}px)`;\n }\n /** @hidden Pam Start handler, removes transition duration, */\n _handlePanStart() {\n this._element.style.transitionDuration = '0s';\n this.dragStateChange$.emit(true);\n }\n /** @hidden */\n _setupGestures() {\n this._setupDragStart();\n this._setupDrag();\n this._setupDragEnd();\n }\n /** @hidden */\n _subscribeToEvents(events, element, callback) {\n merge(events.map((e) => fromEvent(element, e, { passive: true }))).forEach((evt) => {\n evt.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((event) => {\n callback(event);\n });\n });\n }\n /** @hidden */\n _setupDragStart() {\n const events = ['mousedown', 'touchstart'];\n this._subscribeToEvents(events, this._element, (event) => {\n this._listenToMouseMove = true;\n this._lastDragPosition = this._initialDragPosition = this._getDragCoordinate(event);\n this._handlePanStart();\n });\n }\n /** @hidden */\n _setupDrag() {\n const events = ['mousemove', 'touchmove'];\n if (!this._document) {\n throw new Error(`Could not setup drag event subscription. Expected to get document ref, got ${this._document} instead`);\n }\n this._subscribeToEvents(events, this._document, (event) => {\n const coordinate = this._getDragCoordinate(event);\n if (!this._listenToMouseMove || coordinate === this._lastDragPosition) {\n return;\n }\n this._dragStarted = true;\n this._handlePan(this._getDraggedDelta(coordinate));\n });\n }\n /** @hidden */\n _setupDragEnd() {\n const events = ['mouseup', 'touchend'];\n if (!this._document) {\n throw new Error(`Could not setup drag event subscription. Expected to get document ref, got ${this._document} instead`);\n }\n this._subscribeToEvents(events, this._document, (event) => {\n if (!this._listenToMouseMove) {\n return;\n }\n if (this._dragStarted) {\n this._handlePanEnd(this._getDraggedDelta(this._getDragCoordinate(event)));\n }\n else {\n this.dragStateChange$.emit(false);\n }\n this._listenToMouseMove = false;\n this._dragStarted = false;\n });\n }\n /** @hidden */\n _getTransition() {\n return this.config?.transition ?? DEFAULT_TRANSITION_DURATION;\n }\n /** @hidden */\n _getDraggedDelta(offset) {\n this._lastDragPosition = offset;\n return offset - this._initialDragPosition;\n }\n /** @hidden */\n _getDragCoordinate(event) {\n let coordinates;\n if (this._isTouchEvent(event)) {\n coordinates = event.touches[0] || event.changedTouches[0];\n }\n else {\n coordinates = event;\n }\n return this.config.vertical ? coordinates.pageY : coordinates.pageX;\n }\n /** @hidden */\n _isTouchEvent(event) {\n return window.TouchEvent && event instanceof TouchEvent;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [{ type: Document, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYXJvdXNlbC9jYXJvdXNlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxRQUFRLEVBQ1IsVUFBVSxFQUVWLFlBQVksRUFDWixNQUFNLEVBQ04sVUFBVSxFQUdWLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQWMsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFcEQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsT0FBTyxDQUFDO0FBMEJuRCxlQUFlO0FBSWYsTUFBTSxPQUFPLGVBQWU7SUFtQnhCLHFDQUFxQztJQUNyQyxJQUFJLG1CQUFtQixDQUFDLG1CQUEyQjtRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBWSxjQUFjO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUEyQkQsY0FBYztJQUNkLFlBQStDLFNBQTBCO1FBQTFCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBM0R6RSxzR0FBc0c7UUFDN0YscUJBQWdCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFL0UsbURBQW1EO1FBQzFDLGtCQUFhLEdBQStCLElBQUksWUFBWSxFQUFnQixDQUFDO1FBUXRGLCtCQUErQjtRQUMvQixV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Q29udGVudCI6WyJpbXBvcnQge1xuICAgIERPQ1VNRU5ULFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgT25EZXN0cm95LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb21FdmVudCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVFJBTlNJVElPTl9EVVJBVElPTiA9ICcxNTBtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlIHtcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBnZXRIZWlnaHQoKTogbnVtYmVyO1xuICAgIGdldFdpZHRoKCk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJvdXNlbENvbmZpZyB7XG4gICAgLyoqIERlZmluZXMgaWYgY2Fyb3VzZWwgaXRlbXMgYXJlIHBsYWNlZCB2ZXJ0aWNhbGx5ICovXG4gICAgdmVydGljYWw/OiBib29sZWFuO1xuICAgIC8qKiBBbW91bnQgb2YgdmlzaWJsZSBlbGVtZW50cyBpbiBjYXJvdXNlbCAqL1xuICAgIGVsZW1lbnRzQXRPbmNlPzogbnVtYmVyO1xuICAgIC8qKiBEZWZpbmVzIGlmIHN1cHBvcnQgZm9yIGdlc3R1cmVzLCBsaWtlIHRvdWNoIHN3aXBlIG9yIG1vdXNlIGRyYWcgc2hvdWxkIGJlIGVuYWJsZWQgKi9cbiAgICBnZXN0dXJlU3VwcG9ydD86IGJvb2xlYW47XG4gICAgLyoqIERlZmluZXMgaWYgY2Fyb3VzZWwgc2hvdWxkIG1vdmUgZWxlbWVudHMgdG8gc2lkZXMuIEl0IGFsbG93cyB0byBzbGlkZSBpbmZpbml0ZWx5IGluIG9uZSBkaXJlY3Rpb24gKi9cbiAgICBpbmZpbml0ZT86IGJvb2xlYW47XG4gICAgLyoqIFRyYW5zaXRpb24gdGltZSBvZiBDU1MgdHJhbnNsYXRlLCBgMTUwbXNgIGJ5IGRlZmF1bHQgKi9cbiAgICB0cmFuc2l0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhbkVuZE91dHB1dCB7XG4gICAgaXRlbTogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlO1xuICAgIGFmdGVyOiBib29sZWFuO1xufVxuXG4vKiogQGR5bmFtaWMgKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKiogRXZlbnQgdGhyb3duIHdoZW4gZWxlbWVudCBpcyBkcmFnZ2VkLiBFbWl0cyBcInRydWVcIiB3aGVuIGRyYWcgc3RhcnRzIGFuZCBcImZhbHNlXCIgd2hlbiBkcmFnIGVuZHMuICovXG4gICAgcmVhZG9ubHkgZHJhZ1N0YXRlQ2hhbmdlJDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiBhY3RpdmUgZWxlbWVudCBpcyBjaGFuZ2VkICovXG4gICAgcmVhZG9ubHkgYWN0aXZlQ2hhbmdlJDogRXZlbnRFbWl0dGVyPFBhbkVuZE91dHB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhbkVuZE91dHB1dD4oKTtcblxuICAgIC8qKiBDb25maWd1cmF0aW9uIGZvciBjYXJvdXNlbCAqL1xuICAgIGNvbmZpZzogQ2Fyb3VzZWxDb25maWc7XG5cbiAgICAvKiogSW5pdGlhbCBhY3RpdmUgaXRlbSBvZiBjYXJvdXNlbCwgcG9zaXRpb24gZmlyc3QgKyBvZmZzZXQgKi9cbiAgICBhY3RpdmU6IE51bGxhYmxlPENhcm91c2VsSXRlbUludGVyZmFjZT47XG5cbiAgICAvKiogU2V0IHRvIHRydWUgZm9yIHJ0bCBtb2RlICovXG4gICAgaXNSdGwgPSBmYWxzZTtcblxuICAgIC8qKiBjYXJvdXNlbCBpdGVtcyBxdWVyeSBsaXN0ICovXG4gICAgaXRlbXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1JbnRlcmZhY2U+O1xuXG4gICAgLyoqIEN1cnJlbnQgdHJhbnNpdGlvbiB2YWx1ZSBpbiBweCAqL1xuICAgIHNldCBjdXJyZW50VHJhbnNpdGlvblB4KGN1cnJlbnRUcmFuc2l0aW9uUHg6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ID0gY3VycmVudFRyYW5zaXRpb25QeDtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRUcmFuc2l0aW9uUHgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBlbGVtZW50c0F0T25jZSgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBudW0gPSB0aGlzLmNvbmZpZz8uZWxlbWVudHNBdE9uY2UgPz8gMTtcblxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMSwgbnVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3REaXN0YW5jZSA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbnRUcmFuc2l0aW9uUHggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbERyYWdQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3REcmFnUG9zaXRpb24gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub01vdXNlTW92ZSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHJhZ1N0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudDogRG9jdW1lbnQgfCBudWxsKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIHRoZSBzZXJ2aWNlICovXG4gICAgaW5pdGlhbGlzZShcbiAgICAgICAgY29uZmlnOiBDYXJvdXNlbENvbmZpZyxcbiAgICAgICAgaXRlbXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1JbnRlcmZhY2U+LFxuICAgICAgICBsaXN0RWxlbWVudFJlZmVyZW5jZTogRWxlbWVudFJlZlxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KGxpc3RFbGVtZW50UmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtcyhpdGVtcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmdlc3R1cmVTdXBwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXR1cEdlc3R1cmVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogdXBkYXRlIGNvbmZpZyB2YWx1ZSBmb3IgdGhlIHNlcnZpY2UgKi9cbiAgICB1cGRhdGVDb25maWcoY29uZmlnOiBDYXJvdXNlbENvbmZpZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICAvKiogc2V0IGVsZW1lbnQgcmVmICovXG4gICAgc2V0RWxlbWVudChlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIHNldCBpdGVtcyBhbmQgYXNzaWduIGFjdGl2ZSBpdGVtLCBpZiBub3QgYWxyZWFkeSB0aGVyZSAqL1xuICAgIHNldEl0ZW1zKGl0ZW1zOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxJdGVtSW50ZXJmYWNlPik6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLml0ZW1zLmZpcnN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENoYW5nZSBhY3RpdmUgZWxlbWVudCAqL1xuICAgIGdvVG9JdGVtKGl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbShpdGVtKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmluZmluaXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9jZW50ZXJBY3RpdmUoaW5kZXgpO1xuXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRvSW5kZXgoaW5kZXgsIHNtb290aCk7XG4gICAgfVxuXG4gICAgLyoqIHBpY2sgbmV4dCBlbGVtZW50IGFuZCBzZXQgaXQgYWN0aXZlICovXG4gICAgcGlja05leHQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1JbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKHRoaXMuYWN0aXZlKTtcbiAgICAgICAgY29uc3QgaXRlbVRvQWN0aXZhdGUgPSB0aGlzLml0ZW1zLmdldChhY3RpdmVJdGVtSW5kZXggKyAxKSA/PyB0aGlzLml0ZW1zLmZpcnN0O1xuXG4gICAgICAgIHRoaXMuZ29Ub0l0ZW0oaXRlbVRvQWN0aXZhdGUsIHRydWUpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGl0ZW1Ub0FjdGl2YXRlO1xuICAgIH1cblxuICAgIC8qKiBwaWNrIHByZXZpb3VzIGVsZW1lbnQgYW5kIHNldCBpdCBhY3RpdmUgKi9cbiAgICBwaWNrUHJldmlvdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5nZXQoMik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbSh0aGlzLmFjdGl2ZSk7XG4gICAgICAgIGxldCBpdGVtVG9BY3RpdmF0ZSA9IHRoaXMuaXRlbXMuZ2V0KGFjdGl2ZUl0ZW1JbmRleCAtIDEpO1xuXG4gICAgICAgIC8vIGNhc2Ugd2hlcmUgc2xpZGVzIGNhbiBtb3ZlIGluZmluaXRlbHkgaW4gb25lIGRpcmVjdGlvblxuICAgICAgICAvLyBoYW5kbGUgY2FzZSB3aGVyZSBvbi1sb2FkIGFjdGl2ZUl0ZW1JbmRleCA9IDAgYW5kIGFjdGl2ZUl0ZW1JbmRleCAtIDEgcmV0dXJucyB1bmRlZmluZWQgaXRlbSBmcm9tIGl0ZW0gYXJyYXkuXG4gICAgICAgIGlmICghaXRlbVRvQWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGl0ZW1Ub0FjdGl2YXRlID0gdGhpcy5pdGVtcy5sYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nb1RvSXRlbShpdGVtVG9BY3RpdmF0ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gaXRlbVRvQWN0aXZhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jZW50ZXJBY3RpdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fZ2V0U2l6ZSh0aGlzLml0ZW1zLmZpcnN0KTtcbiAgICAgICAgaWYgKGlzTmFOKHNpemUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlkZGxlSW5kZXggPSBNYXRoLmNlaWwodGhpcy5pdGVtcy5sZW5ndGggLyAyKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5jZWlsKHRoaXMuZWxlbWVudHNBdE9uY2UgLyAyKTtcbiAgICAgICAgY29uc3QgbWlzc2luZ0l0ZW1zID0gaW5kZXggKyBvZmZzZXQgLSBtaWRkbGVJbmRleDtcbiAgICAgICAgY29uc3QgYXJyYXkgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcblxuICAgICAgICBpZiAobWlzc2luZ0l0ZW1zID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNzaW5nSXRlbXM7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBhcnJheS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGl0ZW0gJiYgYXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5hYnMobWlzc2luZ0l0ZW1zKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGFycmF5LnBvcCgpO1xuICAgICAgICAgICAgICAgIGl0ZW0gJiYgYXJyYXkudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBDaGFuZ2luZyBvcmRlciBvZiBlbGVtZW50cyBpbiBRdWVyeUxpc3QgYW5kIE5hdGl2ZSBIVE1MICovXG4gICAgICAgIHRoaXMuaXRlbXMucmVzZXQoYXJyYXkpO1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0uZWxlbWVudC5wYXJlbnROb2RlPy5hcHBlbmRDaGlsZChpdGVtLmVsZW1lbnQpKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogRm9yIHByb3BlciBhbmltYXRpb24gaXQncyBuZWVkZWQgdG8gdHJhbnNmb3JtIGVsZW1lbnRzLFxuICAgICAgICAgKiBieSBjaGFuZ2luZyB0cmFuc2l0aW9uIGJ5IGFtb3VudCBvZiBlbGVtZW50cyBwbGFjZWQgYXQgdG9wL2JvdHRvbVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uQ2Fyb3VzZWwodGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCArIHRoaXMuX2dldFNpemUodGhpcy5pdGVtcy5maXJzdCkgKiBtaXNzaW5nSXRlbXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJhbnNpdGlvblRvSW5kZXgoaW5kZXg6IG51bWJlciwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgdHJhbnNpdGlvblB4OiBudW1iZXIgPSB0aGlzLl9nZXRTaXplKHRoaXMuaXRlbXMuZmlyc3QpICogaW5kZXg7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBzbW9vdGggPyB0aGlzLl9nZXRUcmFuc2l0aW9uKCkgOiAnMHMnO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1J0bCB8fCAodGhpcy5jb25maWcudmVydGljYWwgJiYgdGhpcy5pc1J0bCkpIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb25QeCA9IC10cmFuc2l0aW9uUHg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uQ2Fyb3VzZWwodHJhbnNpdGlvblB4KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBHZXQgY2xvc2VzIGVsZW1lbnQsIGJhc2VkIG9uIGN1cnJlbnQgdHJhbnNpdGlvbiAqL1xuICAgIHByaXZhdGUgX2dldENsb3Nlc3QoKTogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlIHtcbiAgICAgICAgLyoqIElmIHRyYW5zaXRpb24gaXMgcG9zaXRpdmUsIGl0IHNob3VsZCBnbyB0byBmaXJzdCBlbGVtZW50ICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZy5pbmZpbml0ZSAmJlxuICAgICAgICAgICAgKCghdGhpcy5jb25maWcudmVydGljYWwgJiZcbiAgICAgICAgICAgICAgICAoKCF0aGlzLmlzUnRsICYmIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPiAwKSB8fCAodGhpcy5pc1J0bCAmJiB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4IDwgMCkpKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLmNvbmZpZy52ZXJ0aWNhbCAmJiB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ID4gMCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlyc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fZ2V0U2l6ZSh0aGlzLml0ZW1zLmZpcnN0KTtcblxuICAgICAgICAvKiogV2hlbiBzY3JvbGwgaXMgYWZ0ZXIgaGFsZiBvZiBlbGVtZW50LCB0aGVuIGV4dCBvbmUgc2hvdWxkIGJlIGFjdGl2ZSAqL1xuICAgICAgICBjb25zdCBoYWxmQXBwcm9hY2hlZDogYm9vbGVhbiA9IE1hdGguYWJzKHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggJSBzaXplKSA+IHNpemUgLyAyO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kZXggYmFzZWQgb24gdHJhbnNpdGlvbiBweCBkaXZpZGVkIGJ5IHNpemUgb2YgZWxlbWVudHMsXG4gICAgICAgICAqIGV2ZXJ5IGVsZW1lbnQgc2hvdWxkIGhhdmUgc2FtZSB3aWR0aCwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBsb29wZWQgdGhyb3VnaCBhbGwgZWxlbWVudHMsXG4gICAgICAgICAqIHdoaWNoIGlzIG5vdCBnb29kIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICAgKi9cbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5jZWlsKE1hdGguYWJzKHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggLyBzaXplKSk7XG5cbiAgICAgICAgLy8gV2hlbiBlbGVtZW50c0F0T25jZSA+IDEsIHN3aXBpbmcgc2hvdWxkIHN0b3AgYXQgbGFzdCBpbmRleCAtIGVsZW1lbnRzQXRPbmNlXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzQXRPbmNlID0gdGhpcy5lbGVtZW50c0F0T25jZTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5pbmZpbml0ZSAmJiBlbGVtZW50c0F0T25jZSA+IDEpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gdGhlcmUncmUgbGVzcyBpdGVtcyBpbiB0aGUgY2Fyb3VzZWwgdGhhbiB0aGUgYXJlYSBtaWdodCBkaXNwbGF5LCBpdCBzaG91bGQgc3RvcCB0byBmaXJzdFxuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoIDwgZWxlbWVudHNBdE9uY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluZGV4ICsgZWxlbWVudHNBdE9uY2UgPj0gdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5nZXQodGhpcy5pdGVtcy5sZW5ndGggLSBlbGVtZW50c0F0T25jZSkgPz8gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ID0gaW5kZXggKyAoaGFsZkFwcHJvYWNoZWQgPyAwIDogLTEpO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcy5nZXQoaW5kZXgpO1xuXG4gICAgICAgIC8qKiBDaGVja2luZyBpZiB0cmFuc2l0aW9uIHdlbnQgb3V0IG9mIHNjb3BlIG9mIGFycmF5ICovXG4gICAgICAgIHJldHVybiBpdGVtIHx8IHRoaXMuaXRlbXMubGFzdDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEluZGV4T2ZJdGVtKGl0ZW0/OiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy50b0FycmF5KCkuZmluZEluZGV4KChfaXRlbSkgPT4gX2l0ZW0gPT09IGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEdldHRpbmcgc2l6ZSBvZiBjYXJvdXNlbCwgd2lkdGggZm9yIGhvcml6b250YWwsIGhlaWdodCBmb3IgdmVydGljYWwgKi9cbiAgICBwcml2YXRlIF9nZXRTaXplKGl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0SGVpZ2h0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbS5nZXRXaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUGFuKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkZWx0YSAtIHRoaXMuX2xhc3REaXN0YW5jZTtcblxuICAgICAgICB0aGlzLl9sYXN0RGlzdGFuY2UgPSBkZWx0YTtcblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uQ2Fyb3VzZWwodGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCArIGRpc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVBhbkVuZChkZWx0YTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hhbmRsZVBhbihkZWx0YSk7XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdEl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSA9IHRoaXMuX2dldENsb3Nlc3QoKTtcblxuICAgICAgICB0aGlzLmdvVG9JdGVtKGNsb3Nlc3RJdGVtLCB0cnVlKTtcblxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGNsb3Nlc3RJdGVtO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmVtaXQoe1xuICAgICAgICAgICAgICAgIGl0ZW06IGNsb3Nlc3RJdGVtLFxuICAgICAgICAgICAgICAgIGFmdGVyOiBkZWx0YSA8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlICE9PSBjbG9zZXN0SXRlbSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBjbG9zZXN0SXRlbTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlJC5lbWl0KHtcbiAgICAgICAgICAgICAgICBpdGVtOiBjbG9zZXN0SXRlbSxcbiAgICAgICAgICAgICAgICBhZnRlcjogZGVsdGEgPCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5fbGFzdERpc3RhbmNlID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEFuaW1hdGVzIHRoZSBjYXJvdXNlbCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNsaWRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3RyYW5zaXRpb25DYXJvdXNlbCh0cmFuc2l0aW9uUHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ID0gdHJhbnNpdGlvblB4O1xuICAgICAgICBjb25zdCBheGlzID0gdGhpcy5jb25maWcudmVydGljYWwgPyAnWScgOiAnWCc7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlJHtheGlzfSgke3RoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHh9cHgpYDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBQYW0gU3RhcnQgaGFuZGxlciwgcmVtb3ZlcyB0cmFuc2l0aW9uIGR1cmF0aW9uLCAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVBhblN0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBHZXN0dXJlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0dXBEcmFnU3RhcnQoKTtcbiAgICAgICAgdGhpcy5fc2V0dXBEcmFnKCk7XG4gICAgICAgIHRoaXMuX3NldHVwRHJhZ0VuZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9FdmVudHMoXG4gICAgICAgIGV2ZW50czogc3RyaW5nW10sXG4gICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsXG4gICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB2b2lkXG4gICAgKTogdm9pZCB7XG4gICAgICAgIG1lcmdlKGV2ZW50cy5tYXAoKGUpID0+IGZyb21FdmVudDxNb3VzZUV2ZW50IHwgVG91Y2hFdmVudD4oZWxlbWVudCwgZSwgeyBwYXNzaXZlOiB0cnVlIH0pKSkuZm9yRWFjaChcbiAgICAgICAgICAgIChldnQ6IE9ic2VydmFibGU8TW91c2VFdmVudCB8IFRvdWNoRXZlbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZ0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldHVwRHJhZ1N0YXJ0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSBbJ21vdXNlZG93bicsICd0b3VjaHN0YXJ0J107XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9FdmVudHMoZXZlbnRzLCB0aGlzLl9lbGVtZW50LCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvTW91c2VNb3ZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2xhc3REcmFnUG9zaXRpb24gPSB0aGlzLl9pbml0aWFsRHJhZ1Bvc2l0aW9uID0gdGhpcy5fZ2V0RHJhZ0Nvb3JkaW5hdGUoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUGFuU3RhcnQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cERyYWcoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFsnbW91c2Vtb3ZlJywgJ3RvdWNobW92ZSddO1xuXG4gICAgICAgIGlmICghdGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgQ291bGQgbm90IHNldHVwIGRyYWcgZXZlbnQgc3Vic2NyaXB0aW9uLiBFeHBlY3RlZCB0byBnZXQgZG9jdW1lbnQgcmVmLCBnb3QgJHt0aGlzLl9kb2N1bWVudH0gaW5zdGVhZGBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb0V2ZW50cyhldmVudHMsIHRoaXMuX2RvY3VtZW50LCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGUgPSB0aGlzLl9nZXREcmFnQ29vcmRpbmF0ZShldmVudCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlzdGVuVG9Nb3VzZU1vdmUgfHwgY29vcmRpbmF0ZSA9PT0gdGhpcy5fbGFzdERyYWdQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUGFuKHRoaXMuX2dldERyYWdnZWREZWx0YShjb29yZGluYXRlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBEcmFnRW5kKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSBbJ21vdXNldXAnLCAndG91Y2hlbmQnXTtcblxuICAgICAgICBpZiAoIXRoaXMuX2RvY3VtZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvdWxkIG5vdCBzZXR1cCBkcmFnIGV2ZW50IHN1YnNjcmlwdGlvbi4gRXhwZWN0ZWQgdG8gZ2V0IGRvY3VtZW50IHJlZiwgZ290ICR7dGhpcy5fZG9jdW1lbnR9IGluc3RlYWRgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9FdmVudHMoZXZlbnRzLCB0aGlzLl9kb2N1bWVudCwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2xpc3RlblRvTW91c2VNb3ZlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fZHJhZ1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVQYW5FbmQodGhpcy5fZ2V0RHJhZ2dlZERlbHRhKHRoaXMuX2dldERyYWdDb29yZGluYXRlKGV2ZW50KSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGF0ZUNoYW5nZSQuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvTW91c2VNb3ZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9kcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFRyYW5zaXRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnPy50cmFuc2l0aW9uID8/IERFRkFVTFRfVFJBTlNJVElPTl9EVVJBVElPTjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldERyYWdnZWREZWx0YShvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHRoaXMuX2xhc3REcmFnUG9zaXRpb24gPSBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG9mZnNldCAtIHRoaXMuX2luaXRpYWxEcmFnUG9zaXRpb247XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXREcmFnQ29vcmRpbmF0ZShldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiBudW1iZXIge1xuICAgICAgICBsZXQgY29vcmRpbmF0ZXM6IFRvdWNoIHwgTW91c2VFdmVudDtcblxuICAgICAgICBpZiAodGhpcy5faXNUb3VjaEV2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMgPSBldmVudC50b3VjaGVzWzBdIHx8IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy52ZXJ0aWNhbCA/IGNvb3JkaW5hdGVzLnBhZ2VZIDogY29vcmRpbmF0ZXMucGFnZVg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc1RvdWNoRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogZXZlbnQgaXMgVG91Y2hFdmVudCB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuVG91Y2hFdmVudCAmJiBldmVudCBpbnN0YW5jZW9mIFRvdWNoRXZlbnQ7XG4gICAgfVxufVxuIl19","export const CarouselResourceStringsEN = {\n fd_carousel_of: 'of',\n fd_carousel_reader: 'Displaying item'\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtcmVzb3VyY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2Nhcm91c2VsL2kxOG4vY2Fyb3VzZWwtcmVzb3VyY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUE4QjtJQUNoRSxjQUFjLEVBQUUsSUFBSTtJQUNwQixrQkFBa0IsRUFBRSxpQkFBaUI7Q0FDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRmRDYXJvdXNlbFJlc291cmNlU3RyaW5ncyB7XG4gICAgZmRfY2Fyb3VzZWxfb2Y/OiBzdHJpbmc7XG4gICAgZmRfY2Fyb3VzZWxfcmVhZGVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3NFTjogRmRDYXJvdXNlbFJlc291cmNlU3RyaW5ncyA9IHtcbiAgICBmZF9jYXJvdXNlbF9vZjogJ29mJyxcbiAgICBmZF9jYXJvdXNlbF9yZWFkZXI6ICdEaXNwbGF5aW5nIGl0ZW0nXG59O1xuIl19","import { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostBinding, HostListener, Input, NgZone, Output, QueryList, Renderer2, ViewChild, ViewEncapsulation, computed, effect, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyUtil, RtlService, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { merge } from 'rxjs';\nimport { debounceTime, take } from 'rxjs/operators';\nimport { CarouselItemComponent } from './carousel-item/carousel-item.component';\nimport { CarouselService } from './carousel.service';\nimport { CarouselResourceStringsEN } from './i18n/carousel-resources';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./carousel.service\";\n/** Page limit to switch to numerical indicator */\nconst ICON_PAGE_INDICATOR_LIMIT = 8;\nexport var SlideDirection;\n(function (SlideDirection) {\n SlideDirection[SlideDirection[\"None\"] = 0] = \"None\";\n SlideDirection[SlideDirection[\"NEXT\"] = 1] = \"NEXT\";\n SlideDirection[SlideDirection[\"PREVIOUS\"] = 2] = \"PREVIOUS\";\n})(SlideDirection || (SlideDirection = {}));\nlet carouselCounter = 0;\nclass CarouselActiveSlides {\n constructor(activeItems, slideDirection) {\n this.activeItems = activeItems;\n this.slideDirection = slideDirection;\n }\n}\nexport class CarouselComponent {\n /**\n * An accessor that sets the resource strings.\n * By default it uses EN resources.\n */\n set resourceStrings(value) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n /**\n * An accessor that returns the resource strings.\n */\n get resourceStrings() {\n return this._resourceStrings;\n }\n /** Number of items to be visible at a time */\n set visibleSlidesCount(value) {\n this._visibleSlidesCount = value;\n this._visibleSlidesNumericCount = this._getVisibleSlidesCount();\n }\n get visibleSlidesCount() {\n return this._visibleSlidesCount;\n }\n /** @hidden */\n get _contentSizePx() {\n return this._slidesWrapperSize ? `${this._slidesWrapperSize}px` : this.width;\n }\n /** @hidden */\n constructor(_elementRef, _renderer, _changeDetectorRef, _carouselService, _zone) {\n this._elementRef = _elementRef;\n this._renderer = _renderer;\n this._changeDetectorRef = _changeDetectorRef;\n this._carouselService = _carouselService;\n this._zone = _zone;\n /** ID for the Carousel. */\n this.id = `fd-carousel-${carouselCounter++}`;\n /** Sets aria-label attribute for carousel */\n this.ariaLabel = null;\n /** Sets position of page indicator container. Default position is bottom. */\n this.pageIndicatorsOrientation = 'bottom';\n /** Width for carousel container */\n this.width = '100%';\n /** If carousel is in circular loop */\n this.loop = false;\n /** Shows/hides optional navigation button */\n this.navigation = true;\n /** Show navigation button in page indicator container or inside content. Default is page indicator container on true value */\n this.navigatorInPageIndicator = true;\n /** Convert to Numeric page indicator */\n this.numericIndicator = false;\n /** Shows/hides optional page indicator container */\n this.pageIndicatorContainer = true;\n /** Shows/hides optional page indicator */\n this.pageIndicator = true;\n /** Sets sliding duration in millie seconds. Default is 150 */\n this.slideTransitionDuration = 150;\n /** Is swipe enabled */\n this.swipeEnabled = true;\n /** Is carousel is vertical. Default value is false. */\n this.vertical = false;\n /** Whether to hide top border of the Pagination Container. */\n this.noPaginationContainerBorder = false;\n /** Background configuration for the Content container. */\n this.contentBackground = 'translucent';\n /** Background configuration for the Pagination container */\n this.pageIndicatorBackground = 'solid';\n /** An event that is emitted after a slide transition has happened */\n this.slideChange = new EventEmitter();\n /** @hidden Start index of currently active items */\n this.currentActiveSlidesStartIndex = 0;\n /** @hidden End index of currently active items */\n this.currentActiveSlidesEndIndex = 0;\n /** @hidden an array of id(s) of currently active item(s) */\n this.currentActiveSlidesIds = [];\n /** @hidden the total number of slides in the carousel */\n this.totalSlides = 0;\n /** @hidden handles rtl service */\n this._dir$ = computed(() => (this._rtl$() ? 'rtl' : 'ltr'), ...(ngDevMode ? [{ debugName: \"_dir$\" }] : []));\n /** @hidden Make left navigation button disabled */\n this.leftButtonDisabled = false;\n /** @hidden Make right navigation button disabled */\n this.rightButtonDisabled = false;\n /** @hidden Fake array for counting number of page indicator */\n this.pageIndicatorsCountArray = [];\n /** @hidden */\n this._slidesWrapperSize = 0;\n /** @hidden */\n this._visibleSlidesCount = 1;\n /** @hidden */\n this._visibleSlidesNumericCount = 1;\n /** @hidden */\n this._resourceStrings = CarouselResourceStringsEN;\n /** @hidden */\n this._config = {};\n /** @hidden */\n this._slidesCopy = [];\n /** @hidden */\n this._slideSwiped = false;\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._rtlService = inject(RtlService, {\n optional: true\n });\n /** @hidden */\n this._rtl$ = computed(() => !!this._rtlService?.rtlSignal(), ...(ngDevMode ? [{ debugName: \"_rtl$\" }] : []));\n effect(() => {\n const isRtl = this._rtl$();\n this._carouselService.isRtl = isRtl;\n if (this._carouselService.items && this._carouselService.active) {\n this._carouselService.goToItem(this._carouselService.active, false);\n }\n });\n }\n /** @hidden */\n handleKeyboardEvent(event) {\n if (KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW]) ||\n (this.vertical && KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW]))) {\n event.preventDefault();\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n this._rtl$() ? this.next() : this.previous();\n }\n if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n this._rtl$() ? this.previous() : this.next();\n }\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.previous();\n }\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.next();\n }\n this.carouselContainer.nativeElement.focus();\n }\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (changes.visibleSlidesCount && this.slides?.length > 0) {\n this._notifySlideChange(SlideDirection.None);\n }\n }\n /** @hidden */\n ngAfterContentInit() {\n // On carousel load, display first slide + number of slide visible\n this.currentActiveSlidesStartIndex = 0;\n this.currentActiveSlidesEndIndex = this._visibleSlidesNumericCount - 1;\n this.currentActiveSlidesIds = [];\n this.totalSlides = this.slides.length;\n this.slides.forEach((slide, index) => {\n const isActive = index >= this.currentActiveSlidesStartIndex && index <= this.currentActiveSlidesEndIndex;\n slide.ariaSetsize.set(this.totalSlides);\n slide.ariaPosinset.set(index + 1);\n slide.ariaHidden.set(!isActive);\n slide.ariaSelected.set(isActive);\n if (isActive) {\n this.currentActiveSlidesIds.push(slide.id);\n }\n });\n this.ariaActivedescendant = this.currentActiveSlidesIds.join(' ');\n // Change pagination display to numeric, if item count is more than 8\n if (this.slides.length > ICON_PAGE_INDICATOR_LIMIT) {\n this.numericIndicator = true;\n }\n if (this.slides.length > 0) {\n this._initializeCarousel();\n }\n else {\n this.leftButtonDisabled = true;\n this.rightButtonDisabled = true;\n // Disable swipe when there is no carousel item\n this.swipeEnabled = false;\n this.navigation = false;\n }\n // Keep copy of original slide array, for indicator purpose.\n // In case of looped carousel, original slides array changes.\n this._slidesCopy = this.slides.toArray();\n this._subscribeServiceEvents();\n // Subscribe to dynamic update of slides\n this.slides.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => this._onSlideUpdates());\n this._changeDetectorRef.markForCheck();\n }\n /** @hidden */\n ngAfterViewInit() {\n this._initializeServiceConfig();\n this._carouselService.initialise(this._config, this.slides, this.slideContainer);\n this._previousVisibleSlidesCount = this._visibleSlidesNumericCount;\n this._resizeContentContainer();\n }\n /** @hidden */\n ngAfterViewChecked() {\n if (this._previousVisibleSlidesCount && this._previousVisibleSlidesCount !== this._visibleSlidesNumericCount) {\n this._initializeCarousel();\n this._initializeServiceConfig();\n this._carouselService.updateConfig(this._config);\n this._previousVisibleSlidesCount = this._visibleSlidesNumericCount;\n this._changeDetectorRef.detectChanges();\n }\n }\n /** @hidden */\n get _showNavigationButtonInPageIndicatorContainer() {\n return this.navigatorInPageIndicator && this.pageIndicatorsCountArray.length > 1;\n }\n /** @hidden */\n get _showNavigationButtonInContent() {\n return !this.navigatorInPageIndicator && this.pageIndicatorsCountArray.length > 1;\n }\n /** @hidden */\n get _showPageIndicatorContainer() {\n return this.pageIndicatorContainer && (this.pageIndicatorsCountArray.length > 0 || this.numericIndicator);\n }\n /** @hidden */\n get getPageIndicatorLabel() {\n return `${this.currentActiveSlidesStartIndex + 1} ${this.resourceStrings.fd_carousel_of} ${this.pageIndicatorsCountArray.length}`;\n }\n /** @hidden */\n get screenReaderLabel() {\n return `${this.resourceStrings.fd_carousel_reader} ${this.currentActiveSlidesStartIndex + 1} ${this.resourceStrings.fd_carousel_of} ${this.pageIndicatorsCountArray.length}`;\n }\n /** @hidden */\n _focus() {\n const el = this._elementRef.nativeElement;\n if (el !== document.activeElement) {\n el.focus({\n preventScroll: true\n });\n }\n }\n /** Transitions to the previous slide in the carousel. */\n previous() {\n if (!this.loop && this.currentActiveSlidesStartIndex <= 0) {\n return;\n }\n this.rightButtonDisabled = false;\n this._adjustActiveItemPosition(SlideDirection.PREVIOUS);\n this._preventDefaultBtnFocus();\n this._carouselService.pickPrevious();\n this._notifySlideChange(SlideDirection.PREVIOUS);\n this._changeDetectorRef.detectChanges();\n }\n /** Transitions to the next slide in the carousel. */\n next() {\n if (!this.loop && this.currentActiveSlidesStartIndex >= this.pageIndicatorsCountArray.length - 1) {\n return;\n }\n // Moving to next slide\n this.leftButtonDisabled = false;\n this._adjustActiveItemPosition(SlideDirection.NEXT);\n this._preventDefaultBtnFocus();\n this._carouselService.pickNext();\n this._notifySlideChange(SlideDirection.NEXT);\n this._changeDetectorRef.detectChanges();\n }\n /** @hidden Subscribe to carousel service events */\n _subscribeServiceEvents() {\n this._carouselService.activeChange$.subscribe((event) => this._onSlideSwipe(event));\n this._carouselService.dragStateChange$.subscribe((event) => this._onSlideDrag(event));\n }\n /**\n * @hidden Prevent native focus flow related to button, if button will be disable on focus state.\n * It works only if carousel is not in circular loop.\n */\n _preventDefaultBtnFocus() {\n if (this.loop) {\n return;\n }\n const isFirst = this.currentActiveSlidesStartIndex === 0;\n const isLast = this.currentActiveSlidesStartIndex === this.pageIndicatorsCountArray.length - 1;\n if (isFirst || isLast) {\n this._elementRef.nativeElement.focus({\n preventScroll: true\n });\n }\n }\n /** @hidden Adjust position of active item, based on slide direction */\n _adjustActiveItemPosition(slideDirection, step = 1) {\n // Move one step in the direction\n const positionAdjustment = slideDirection === SlideDirection.NEXT ? step : -step;\n this.currentActiveSlidesStartIndex = this.currentActiveSlidesStartIndex + positionAdjustment;\n // If carousel set to loop\n if (this.loop) {\n if (this.currentActiveSlidesStartIndex < 0) {\n this.currentActiveSlidesStartIndex = this.slides.length + this.currentActiveSlidesStartIndex;\n }\n else if (this.currentActiveSlidesStartIndex >= this.slides.length) {\n this.currentActiveSlidesStartIndex = this.currentActiveSlidesStartIndex % this.slides.length;\n }\n }\n else {\n this._buttonVisibility();\n }\n }\n /** @hidden Handles navigation button visibility */\n _buttonVisibility() {\n if (!this.loop) {\n // Need to disable navigation button if either direction limit has reached.\n if (this.currentActiveSlidesStartIndex === 0) {\n this.leftButtonDisabled = true;\n this.rightButtonDisabled = false;\n }\n else if (this.slides.length - 1 === this.currentActiveSlidesStartIndex) {\n this.rightButtonDisabled = true;\n this.leftButtonDisabled = false;\n }\n else if (this._visibleSlidesNumericCount > 1 &&\n this.currentActiveSlidesStartIndex + this._visibleSlidesNumericCount >= this.slides.length) {\n this.rightButtonDisabled = true;\n }\n else {\n this.leftButtonDisabled = false;\n this.rightButtonDisabled = false;\n }\n if (this.slides.length === 1) {\n this.leftButtonDisabled = true;\n this.rightButtonDisabled = true;\n }\n }\n }\n /** @hidden Handle when slide is added or removed */\n _onSlideUpdates() {\n this._slidesCopy = this.slides.toArray();\n this.currentActiveSlidesStartIndex = 0;\n this._carouselService.initialise(this._config, this.slides, this.slideContainer);\n this._carouselService.active = null;\n if (this.vertical) {\n this._renderer.setStyle(this.slideContainer?.nativeElement, 'transform', 'translateY(0px)');\n }\n else {\n this._renderer.setStyle(this.slideContainer?.nativeElement, 'transform', 'translateX(0px)');\n }\n this._initializeCarousel();\n this._changeDetectorRef.detectChanges();\n }\n /** @hidden Initialize carousel with visible items */\n _initializeCarousel() {\n this._zone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n // Handles navigator button enabled/disabled state\n this._buttonVisibility();\n let arrayLength;\n // set page indicator count with fake array, to use in template\n if (this.loop && this._visibleSlidesNumericCount > 1) {\n // If loop with multi item visible.\n arrayLength = this.slides.length;\n }\n else {\n arrayLength = this.slides.length - this._visibleSlidesNumericCount + 1;\n }\n const pageIndicatorsIfZeroCount = this.slides.length === 0 ? 0 : 1;\n this.pageIndicatorsCountArray = new Array(arrayLength > 0 ? arrayLength : pageIndicatorsIfZeroCount);\n this._goToFirstItem();\n this.slides.forEach((_slide, index) => {\n if (index >= this.currentActiveSlidesStartIndex &&\n index < this.currentActiveSlidesStartIndex + this._visibleSlidesNumericCount) {\n _slide.visibility = 'visible';\n }\n else {\n _slide.visibility = 'hidden';\n }\n });\n this._changeDetectorRef.detectChanges();\n });\n }\n /** @hidden */\n _goToFirstItem() {\n if (this.pageIndicatorsCountArray.length === 0 &&\n this._carouselService.currentTransitionPx !== 0 &&\n this.slides.length > 1) {\n this.currentActiveSlidesStartIndex = 0;\n this._carouselService.goToItem(this.slides.first);\n }\n }\n /** @hidden Initialize config for Carousel service */\n _initializeServiceConfig() {\n this._config.vertical = this.vertical;\n this._config.elementsAtOnce = this._visibleSlidesNumericCount;\n this._config.gestureSupport = this.swipeEnabled;\n this._config.infinite = this.loop;\n this._config.transition = String(this.slideTransitionDuration) + 'ms';\n // Carousel service expects transition in string format with unit.\n }\n /**\n * @hidden Returns the slide swapping steps\n */\n _getStepTaken(event, actualActiveSlideIndex) {\n let stepsCalculated;\n if ((!this._rtl$() && event.after) ||\n (this._rtl$() && !event.after && !this.vertical) ||\n (this.vertical && event.after)) {\n if (actualActiveSlideIndex === 0 && this.currentActiveSlidesStartIndex === 0) {\n stepsCalculated = 0;\n }\n else if (actualActiveSlideIndex > this.currentActiveSlidesStartIndex) {\n stepsCalculated = actualActiveSlideIndex - this.currentActiveSlidesStartIndex;\n }\n else {\n stepsCalculated = this.slides.length - this.currentActiveSlidesStartIndex + actualActiveSlideIndex;\n }\n }\n else {\n // Special case, when first left swipe before slides are rotated in carousel service\n if (actualActiveSlideIndex === 0 && this.currentActiveSlidesStartIndex === 0) {\n stepsCalculated = 0;\n }\n else if (actualActiveSlideIndex < this.currentActiveSlidesStartIndex) {\n stepsCalculated = this.currentActiveSlidesStartIndex - actualActiveSlideIndex;\n }\n else {\n stepsCalculated = this.currentActiveSlidesStartIndex + this.slides.length - actualActiveSlideIndex;\n }\n }\n return stepsCalculated;\n }\n /** @hidden Handles notification on visible slide change */\n _notifySlideChange(slideDirection, firstActiveSlide) {\n const activeSlides = [];\n let firstActiveSlideIndex;\n if (this.loop) {\n firstActiveSlide = this._carouselService.active;\n }\n if (firstActiveSlide) {\n firstActiveSlideIndex = this.slides.toArray().findIndex((_item) => _item === firstActiveSlide);\n }\n else {\n firstActiveSlideIndex = this.currentActiveSlidesStartIndex;\n }\n for (let activeSlideIndex = 0; activeSlideIndex < this._visibleSlidesNumericCount; activeSlideIndex++) {\n const index = firstActiveSlideIndex + activeSlideIndex;\n const slide = this.slides.get(index);\n if (slide) {\n activeSlides.push(slide);\n slide.visibility = 'visible';\n }\n }\n this._manageSlideVisibility(firstActiveSlideIndex);\n const direction = slideDirection === SlideDirection.NEXT ? 'Next' : 'Previous';\n this.slideChange.emit(new CarouselActiveSlides(activeSlides, direction));\n }\n /** @hidden Manages visibility for slides. Useful in managing tab order */\n _manageSlideVisibility(firstActiveSlideIndex) {\n setTimeout(() => {\n const lastActiveSlideIndex = firstActiveSlideIndex + this._visibleSlidesNumericCount;\n this.currentActiveSlidesIds = [];\n this.slides.forEach((slide, index) => {\n const isVisible = index >= firstActiveSlideIndex && index < lastActiveSlideIndex;\n // Only update visibility if it has changed\n if (slide.visibility !== (isVisible ? 'visible' : 'hidden')) {\n slide.visibility = isVisible ? 'visible' : 'hidden';\n }\n if (isVisible) {\n this.currentActiveSlidesIds.push(slide.id);\n }\n slide.ariaHidden.set(!isVisible);\n slide.ariaSelected.set(isVisible);\n });\n this.ariaActivedescendant = this.currentActiveSlidesIds.join(' ');\n this._changeDetectorRef.markForCheck();\n }, this.slideTransitionDuration);\n }\n /** @hidden On Swiping of slide, manage page indicator */\n _onSlideSwipe(event) {\n this._slideSwiped = true;\n const firstActiveSlide = event.item;\n const actualActiveSlideIndex = this._slidesCopy.findIndex((_slide) => _slide === firstActiveSlide);\n const stepTaken = this._getStepTaken(event, actualActiveSlideIndex);\n if (stepTaken > 0) {\n let slideDirection;\n if (!this._rtl$()) {\n slideDirection = event.after ? SlideDirection.NEXT : SlideDirection.PREVIOUS;\n }\n else {\n // vertical carousel slide direction is same in ltr and rtl\n if (this.vertical) {\n slideDirection = event.after ? SlideDirection.NEXT : SlideDirection.PREVIOUS;\n }\n else {\n slideDirection = event.after ? SlideDirection.PREVIOUS : SlideDirection.NEXT;\n }\n }\n this._adjustActiveItemPosition(slideDirection, stepTaken);\n this._notifySlideChange(slideDirection, firstActiveSlide);\n this._changeDetectorRef.detectChanges();\n }\n }\n /**\n * @hidden Making slides visible when slides are dragged. Otherwise, it looses the effect.\n */\n _onSlideDrag(isDragging) {\n if (isDragging) {\n this.slides.forEach((_slide) => {\n _slide.visibility = 'visible';\n });\n this._slideSwiped = false;\n this._changeDetectorRef.markForCheck();\n }\n else {\n // After slide limit reached, if dragging starts then revert visibility\n if (!this._slideSwiped && !this.loop) {\n this._manageSlideVisibility(this.currentActiveSlidesStartIndex);\n }\n }\n }\n /**\n * @hidden\n * Resizes inner carousel container to fit all items in the viewport and hide those which are not fully in it.\n */\n _resizeContentContainer() {\n merge(resizeObservable(this.slideContainer.nativeElement), resizeObservable(this.carouselContainer.nativeElement))\n .pipe(debounceTime(100), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n const { width, slides } = this._getFittingSlidesAndWidth();\n if (this.visibleSlidesCount === 'auto') {\n this._visibleSlidesNumericCount = slides;\n const totalSlides = this.slides.length;\n let needleSlideIndex = this.currentActiveSlidesStartIndex;\n // If amount of slides insufficient to fill whole carousel, slide back a bit.\n if (this.currentActiveSlidesStartIndex + slides > totalSlides) {\n needleSlideIndex =\n this.currentActiveSlidesStartIndex -\n (this.currentActiveSlidesStartIndex + slides - totalSlides);\n }\n const needleSlide = this.slides.get(needleSlideIndex);\n this.currentActiveSlidesStartIndex = needleSlideIndex;\n this._carouselService.active = needleSlide;\n // Refresh carousel config and transition to the current slide.\n this._initializeCarousel();\n needleSlide && this._carouselService.goToItem(needleSlide);\n this._notifySlideChange(SlideDirection.None);\n }\n if (this._slidesWrapperSize !== width) {\n this._slidesWrapperSize = width;\n }\n this._changeDetectorRef.detectChanges();\n });\n }\n /**\n * @hidden\n * Calculates how many slides can be shown within current carousel viewport.\n * @returns Object containing fitting slides count and total width of those slides.\n */\n _getFittingSlidesAndWidth() {\n if (!this.carouselContainer) {\n return {\n width: 0,\n slides: 1\n };\n }\n const { width } = this.carouselContainer.nativeElement.getBoundingClientRect();\n let maxSize = 0;\n let slidesCount = 0;\n const carouselSlides = this.slides.toArray();\n const previousSlides = carouselSlides.splice(0, this.currentActiveSlidesStartIndex);\n const getSlides = (slides) => {\n for (const slide of slides) {\n const slideWidth = slide.getWidth();\n if (!slideWidth) {\n break;\n }\n const newSize = maxSize + slideWidth;\n if (newSize > width) {\n break;\n }\n maxSize = newSize;\n slidesCount++;\n }\n };\n getSlides(carouselSlides);\n // If with of the rest of the slides is lesser than carouse's viewport, add previous slides to it.\n if (maxSize < width) {\n getSlides(previousSlides);\n }\n return {\n width: maxSize,\n slides: slidesCount\n };\n }\n /** @hidden */\n _getVisibleSlidesCount() {\n if (this._visibleSlidesCount !== 'auto') {\n return this._visibleSlidesCount;\n }\n const { slides } = this._getFittingSlidesAndWidth();\n return slides;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.CarouselService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CarouselComponent, isStandalone: true, selector: \"fd-carousel\", inputs: { id: \"id\", ariaLabel: \"ariaLabel\", ariaLabelledBy: \"ariaLabelledBy\", ariaDescribedBy: \"ariaDescribedBy\", pageIndicatorsOrientation: \"pageIndicatorsOrientation\", height: \"height\", width: \"width\", loop: \"loop\", navigation: \"navigation\", navigatorInPageIndicator: \"navigatorInPageIndicator\", numericIndicator: \"numericIndicator\", pageIndicatorContainer: \"pageIndicatorContainer\", pageIndicator: \"pageIndicator\", resourceStrings: \"resourceStrings\", slideTransitionDuration: \"slideTransitionDuration\", swipeEnabled: \"swipeEnabled\", vertical: \"vertical\", noPaginationContainerBorder: \"noPaginationContainerBorder\", contentBackground: \"contentBackground\", pageIndicatorBackground: \"pageIndicatorBackground\", visibleSlidesCount: \"visibleSlidesCount\" }, outputs: { slideChange: \"slideChange\" }, host: { listeners: { \"keydown\": \"handleKeyboardEvent($event)\" }, properties: { \"style.width\": \"width\", \"attr.id\": \"this.id\" } }, providers: [CarouselService], queries: [{ propertyName: \"slides\", predicate: CarouselItemComponent, descendants: true }], viewQueries: [{ propertyName: \"slideContainer\", first: true, predicate: [\"slideContainer\"], descendants: true }, { propertyName: \"carouselContainer\", first: true, predicate: [\"carouselContainer\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<section\\n class=\\\"fd-carousel\\\"\\n [class.fd-carousel--no-navigation]=\\\"!navigation\\\"\\n tabindex=\\\"0\\\"\\n [style.height]=\\\"height\\\"\\n [style.width]=\\\"width\\\"\\n [attr.dir]=\\\"_dir$()\\\"\\n role=\\\"listbox\\\"\\n aria-roledescription=\\\"Carousel\\\"\\n [attr.aria-activedescendant]=\\\"ariaActivedescendant\\\"\\n #carouselContainer\\n (click)=\\\"_focus()\\\"\\n>\\n @if (_showPageIndicatorContainer && pageIndicatorsOrientation === 'top') {\\n <ng-template [ngTemplateOutlet]=\\\"pageIndicatorContainer\\\"></ng-template>\\n }\\n <div\\n class=\\\"fd-carousel__content\\\"\\n [class.fd-carousel__content--horizontal]=\\\"!vertical\\\"\\n [ngClass]=\\\"'fd-carousel__content--' + contentBackground\\\"\\n [style.width]=\\\"_contentSizePx\\\"\\n >\\n @if (_showNavigationButtonInContent) {\\n <ng-template [ngTemplateOutlet]=\\\"buttonLeft\\\"></ng-template>\\n }\\n <div #slideContainer class=\\\"fd-carousel__slides\\\">\\n <ng-content></ng-content>\\n </div>\\n @if (_showNavigationButtonInContent) {\\n <ng-template [ngTemplateOutlet]=\\\"buttonRight\\\"></ng-template>\\n }\\n </div>\\n @if (_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom') {\\n <ng-template [ngTemplateOutlet]=\\\"pageIndicatorContainer\\\"></ng-template>\\n }\\n <div [style.display]=\\\"'none'\\\" role=\\\"region\\\" [attr.id]=\\\"id + '-accessibility'\\\" aria-live=\\\"polite\\\" dir=\\\"ltr\\\">\\n {{ screenReaderLabel }}\\n </div>\\n</section>\\n<ng-template #pageIndicatorContainer>\\n <div\\n class=\\\"fd-carousel__page-indicator-container\\\"\\n [class.fd-carousel__page-indicator-container--no-border]=\\\"noPaginationContainerBorder\\\"\\n [ngClass]=\\\"'fd-carousel__page-indicator-container--' + pageIndicatorBackground\\\"\\n >\\n @if (_showNavigationButtonInPageIndicatorContainer) {\\n <ng-template [ngTemplateOutlet]=\\\"buttonLeft\\\"></ng-template>\\n }\\n <ng-template [ngTemplateOutlet]=\\\"pageIndicators\\\"> </ng-template>\\n @if (_showNavigationButtonInPageIndicatorContainer) {\\n <ng-template [ngTemplateOutlet]=\\\"buttonRight\\\"></ng-template>\\n }\\n </div>\\n</ng-template>\\n<ng-template #pageIndicators>\\n @if (numericIndicator) {\\n <div class=\\\"fd-carousel__page-indicators\\\">\\n @if (pageIndicator) {\\n <div class=\\\"fd-carousel__text\\\" dir=\\\"ltr\\\">\\n {{ getPageIndicatorLabel }}\\n </div>\\n }\\n </div>\\n }\\n @if (!numericIndicator && _showNavigationButtonInPageIndicatorContainer) {\\n <div class=\\\"fd-carousel__page-indicators\\\" [attr.dir]=\\\"_dir$()\\\">\\n @if (pageIndicator) {\\n @for (item of pageIndicatorsCountArray; track item; let i = $index) {\\n <span\\n role=\\\"img\\\"\\n [attr.aria-label]=\\\"\\n 'coreCarousel.pageIndicatorLabel' | fdTranslate: { itemNum: i + 1, totalNum: totalSlides }\\n \\\"\\n class=\\\"fd-carousel__page-indicator\\\"\\n [class.fd-carousel__page-indicator--active]=\\\"i === currentActiveSlidesStartIndex\\\"\\n ></span>\\n }\\n }\\n </div>\\n }\\n</ng-template>\\n<ng-template #buttonLeft>\\n <button\\n fd-button\\n role=\\\"button\\\"\\n class=\\\"fd-carousel__button\\\"\\n [class.fd-carousel__button--left]=\\\"!vertical\\\"\\n [class.fd-carousel__button--up]=\\\"vertical\\\"\\n [style.z-index]=\\\"1\\\"\\n [attr.aria-label]=\\\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\\\"\\n (click)=\\\"previous(); $event.stopPropagation()\\\"\\n [disabled]=\\\"leftButtonDisabled\\\"\\n [attr.title]=\\\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\\\"\\n [glyph]=\\\"vertical ? 'slim-arrow-up' : 'slim-arrow-left'\\\"\\n ></button>\\n</ng-template>\\n<ng-template #buttonRight>\\n <button\\n fd-button\\n role=\\\"button\\\"\\n class=\\\"fd-carousel__button\\\"\\n [class.fd-carousel__button--right]=\\\"!vertical\\\"\\n [class.fd-carousel__button--down]=\\\"vertical\\\"\\n [style.z-index]=\\\"1\\\"\\n [attr.aria-label]=\\\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\\\"\\n (click)=\\\"next(); $event.stopPropagation()\\\"\\n [disabled]=\\\"rightButtonDisabled\\\"\\n [attr.title]=\\\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\\\"\\n [glyph]=\\\"vertical ? 'slim-arrow-down' : 'slim-arrow-right'\\\"\\n ></button>\\n</ng-template>\\n\", styles: [\".fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;max-width:100%;min-width:15.5rem;width:100%}.fd-carousel:after,.fd-carousel:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel .fd-carousel__button+.fd-carousel__button{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-carousel__content{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);flex-basis:100%;overflow:hidden;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;-webkit-box-shadow:var(--sapContent_Shadow0);box-shadow:var(--sapContent_Shadow0);margin-block:0;margin-inline:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{left:50%;-webkit-transform:translateX(-50%);transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{-webkit-transform:rotate(0deg);transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;-ms-touch-action:pan-y;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:normal;margin-block:0;margin-inline:0;min-height:-webkit-fit-content;min-height:-moz-fit-content;min-height:fit-content;padding-block:0;padding-inline:0;-ms-touch-action:pan-x;touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);--fdMessage_Page_Container_Corner_Radius:0}.fd-carousel__slides:after,.fd-carousel__slides:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;height:100%;line-height:0}.fd-carousel__item:after,.fd-carousel__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border-top:var(--fdCarousel_Pagination_Border);max-height:3.5rem;min-height:2.75rem;padding-block:.375rem;padding-inline:.5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:9rem;padding-block:.5rem;padding-inline:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:normal;list-style-type:none;margin-block:0;margin-inline:0;margin-inline:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding-block:0;padding-inline:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:.25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;display:var(--fdCarousel_Button_Display);height:2.125rem;margin-block:.25rem;margin-inline:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding-block:0;padding-inline:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/carousel.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-carousel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CarouselService], host: {\n '[style.width]': 'width'\n }, imports: [NgTemplateOutlet, NgClass, ButtonComponent, FdTranslatePipe], template: \"<section\\n class=\\\"fd-carousel\\\"\\n [class.fd-carousel--no-navigation]=\\\"!navigation\\\"\\n tabindex=\\\"0\\\"\\n [style.height]=\\\"height\\\"\\n [style.width]=\\\"width\\\"\\n [attr.dir]=\\\"_dir$()\\\"\\n role=\\\"listbox\\\"\\n aria-roledescription=\\\"Carousel\\\"\\n [attr.aria-activedescendant]=\\\"ariaActivedescendant\\\"\\n #carouselContainer\\n (click)=\\\"_focus()\\\"\\n>\\n @if (_showPageIndicatorContainer && pageIndicatorsOrientation === 'top') {\\n <ng-template [ngTemplateOutlet]=\\\"pageIndicatorContainer\\\"></ng-template>\\n }\\n <div\\n class=\\\"fd-carousel__content\\\"\\n [class.fd-carousel__content--horizontal]=\\\"!vertical\\\"\\n [ngClass]=\\\"'fd-carousel__content--' + contentBackground\\\"\\n [style.width]=\\\"_contentSizePx\\\"\\n >\\n @if (_showNavigationButtonInContent) {\\n <ng-template [ngTemplateOutlet]=\\\"buttonLeft\\\"></ng-template>\\n }\\n <div #slideContainer class=\\\"fd-carousel__slides\\\">\\n <ng-content></ng-content>\\n </div>\\n @if (_showNavigationButtonInContent) {\\n <ng-template [ngTemplateOutlet]=\\\"buttonRight\\\"></ng-template>\\n }\\n </div>\\n @if (_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom') {\\n <ng-template [ngTemplateOutlet]=\\\"pageIndicatorContainer\\\"></ng-template>\\n }\\n <div [style.display]=\\\"'none'\\\" role=\\\"region\\\" [attr.id]=\\\"id + '-accessibility'\\\" aria-live=\\\"polite\\\" dir=\\\"ltr\\\">\\n {{ screenReaderLabel }}\\n </div>\\n</section>\\n<ng-template #pageIndicatorContainer>\\n <div\\n class=\\\"fd-carousel__page-indicator-container\\\"\\n [class.fd-carousel__page-indicator-container--no-border]=\\\"noPaginationContainerBorder\\\"\\n [ngClass]=\\\"'fd-carousel__page-indicator-container--' + pageIndicatorBackground\\\"\\n >\\n @if (_showNavigationButtonInPageIndicatorContainer) {\\n <ng-template [ngTemplateOutlet]=\\\"buttonLeft\\\"></ng-template>\\n }\\n <ng-template [ngTemplateOutlet]=\\\"pageIndicators\\\"> </ng-template>\\n @if (_showNavigationButtonInPageIndicatorContainer) {\\n <ng-template [ngTemplateOutlet]=\\\"buttonRight\\\"></ng-template>\\n }\\n </div>\\n</ng-template>\\n<ng-template #pageIndicators>\\n @if (numericIndicator) {\\n <div class=\\\"fd-carousel__page-indicators\\\">\\n @if (pageIndicator) {\\n <div class=\\\"fd-carousel__text\\\" dir=\\\"ltr\\\">\\n {{ getPageIndicatorLabel }}\\n </div>\\n }\\n </div>\\n }\\n @if (!numericIndicator && _showNavigationButtonInPageIndicatorContainer) {\\n <div class=\\\"fd-carousel__page-indicators\\\" [attr.dir]=\\\"_dir$()\\\">\\n @if (pageIndicator) {\\n @for (item of pageIndicatorsCountArray; track item; let i = $index) {\\n <span\\n role=\\\"img\\\"\\n [attr.aria-label]=\\\"\\n 'coreCarousel.pageIndicatorLabel' | fdTranslate: { itemNum: i + 1, totalNum: totalSlides }\\n \\\"\\n class=\\\"fd-carousel__page-indicator\\\"\\n [class.fd-carousel__page-indicator--active]=\\\"i === currentActiveSlidesStartIndex\\\"\\n ></span>\\n }\\n }\\n </div>\\n }\\n</ng-template>\\n<ng-template #buttonLeft>\\n <button\\n fd-button\\n role=\\\"button\\\"\\n class=\\\"fd-carousel__button\\\"\\n [class.fd-carousel__button--left]=\\\"!vertical\\\"\\n [class.fd-carousel__button--up]=\\\"vertical\\\"\\n [style.z-index]=\\\"1\\\"\\n [attr.aria-label]=\\\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\\\"\\n (click)=\\\"previous(); $event.stopPropagation()\\\"\\n [disabled]=\\\"leftButtonDisabled\\\"\\n [attr.title]=\\\"'coreCarousel.leftNavigationBtnLabel' | fdTranslate\\\"\\n [glyph]=\\\"vertical ? 'slim-arrow-up' : 'slim-arrow-left'\\\"\\n ></button>\\n</ng-template>\\n<ng-template #buttonRight>\\n <button\\n fd-button\\n role=\\\"button\\\"\\n class=\\\"fd-carousel__button\\\"\\n [class.fd-carousel__button--right]=\\\"!vertical\\\"\\n [class.fd-carousel__button--down]=\\\"vertical\\\"\\n [style.z-index]=\\\"1\\\"\\n [attr.aria-label]=\\\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\\\"\\n (click)=\\\"next(); $event.stopPropagation()\\\"\\n [disabled]=\\\"rightButtonDisabled\\\"\\n [attr.title]=\\\"'coreCarousel.rightNavigationBtnLabel' | fdTranslate\\\"\\n [glyph]=\\\"vertical ? 'slim-arrow-down' : 'slim-arrow-right'\\\"\\n ></button>\\n</ng-template>\\n\", styles: [\".fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;max-width:100%;min-width:15.5rem;width:100%}.fd-carousel:after,.fd-carousel:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel .fd-carousel__button+.fd-carousel__button{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-carousel__content{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);flex-basis:100%;overflow:hidden;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;-webkit-box-shadow:var(--sapContent_Shadow0);box-shadow:var(--sapContent_Shadow0);margin-block:0;margin-inline:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{left:50%;-webkit-transform:translateX(-50%);transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{-webkit-transform:rotate(0deg);transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;-ms-touch-action:pan-y;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:normal;margin-block:0;margin-inline:0;min-height:-webkit-fit-content;min-height:-moz-fit-content;min-height:fit-content;padding-block:0;padding-inline:0;-ms-touch-action:pan-x;touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);--fdMessage_Page_Container_Corner_Radius:0}.fd-carousel__slides:after,.fd-carousel__slides:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;height:100%;line-height:0}.fd-carousel__item:after,.fd-carousel__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border-top:var(--fdCarousel_Pagination_Border);max-height:3.5rem;min-height:2.75rem;padding-block:.375rem;padding-inline:.5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:9rem;padding-block:.5rem;padding-inline:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:normal;list-style-type:none;margin-block:0;margin-inline:0;margin-inline:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding-block:0;padding-inline:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:.25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;display:var(--fdCarousel_Button_Display);height:2.125rem;margin-block:.25rem;margin-inline:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding-block:0;padding-inline:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/carousel.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.CarouselService }, { type: i0.NgZone }], propDecorators: { id: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.id']\n }], ariaLabel: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], ariaDescribedBy: [{\n type: Input\n }], pageIndicatorsOrientation: [{\n type: Input\n }], height: [{\n type: Input\n }], width: [{\n type: Input\n }], loop: [{\n type: Input\n }], navigation: [{\n type: Input\n }], navigatorInPageIndicator: [{\n type: Input\n }], numericIndicator: [{\n type: Input\n }], pageIndicatorContainer: [{\n type: Input\n }], pageIndicator: [{\n type: Input\n }], resourceStrings: [{\n type: Input\n }], slideTransitionDuration: [{\n type: Input\n }], swipeEnabled: [{\n type: Input\n }], vertical: [{\n type: Input\n }], noPaginationContainerBorder: [{\n type: Input\n }], contentBackground: [{\n type: Input\n }], pageIndicatorBackground: [{\n type: Input\n }], visibleSlidesCount: [{\n type: Input\n }], slideChange: [{\n type: Output\n }], slides: [{\n type: ContentChildren,\n args: [CarouselItemComponent, {\n descendants: true\n }]\n }], slideContainer: [{\n type: ViewChild,\n args: ['slideContainer']\n }], carouselContainer: [{\n type: ViewChild,\n args: ['carouselContainer']\n }], handleKeyboardEvent: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFJSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUVULFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMs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QUR0QixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sMkJBQTJCO3NCQUQxQixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBS0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQVlHLFdBQVc7c0JBRG5CLE1BQU07Z0JBT1AsTUFBTTtzQkFITCxlQUFlO3VCQUFDLHFCQUFxQixFQUFFO3dCQUNwQyxXQUFXLEVBQUUsSUFBSTtxQkFDcEI7Z0JBS0QsY0FBYztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQjtnQkFLM0IsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQjtnQkF5RjlCLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBjb21wdXRlZCxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgS2V5VXRpbCwgUnRsU2VydmljZSwgcmVzaXplT2JzZXJ2YWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXJvdXNlbEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2Nhcm91c2VsLWl0ZW0vY2Fyb3VzZWwtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxDb25maWcsIENhcm91c2VsSXRlbUludGVyZmFjZSwgQ2Fyb3VzZWxTZXJ2aWNlLCBQYW5FbmRPdXRwdXQgfSBmcm9tICcuL2Nhcm91c2VsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3NFTiwgRmRDYXJvdXNlbFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4vaTE4bi9jYXJvdXNlbC1yZXNvdXJjZXMnO1xuXG4vKiogUGFnZSBsaW1pdCB0byBzd2l0Y2ggdG8gbnVtZXJpY2FsIGluZGljYXRvciAqL1xuY29uc3QgSUNPTl9QQUdFX0lORElDQVRPUl9MSU1JVCA9IDg7XG5leHBvcnQgdHlwZSBQYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uID0gJ2JvdHRvbScgfCAndG9wJztcblxuZXhwb3J0IHR5cGUgQ2Fyb3VzZWxCYWNrZ3JvdW5kT3B0aW9ucyA9ICd0cmFuc2x1Y2VudCcgfCAndHJhbnNwYXJlbnQnIHwgJ3NvbGlkJztcblxuZXhwb3J0IGVudW0gU2xpZGVEaXJlY3Rpb24ge1xuICAgIE5vbmUsXG4gICAgTkVYVCxcbiAgICBQUkVWSU9VU1xufVxuZXhwb3J0IGludGVyZmFjZSBGaXR0aW5nU2xpZGVzQW5kV2lkdGgge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgc2xpZGVzOiBudW1iZXI7XG59XG5sZXQgY2Fyb3VzZWxDb3VudGVyID0gMDtcblxuY2xhc3MgQ2Fyb3VzZWxBY3RpdmVTbGlkZXMge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlSXRlbXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc2xpZGVEaXJlY3Rpb246IHN0cmluZ1xuICAgICkge31cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYXJvdXNlbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY2Fyb3VzZWwuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbQ2Fyb3VzZWxTZXJ2aWNlXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUud2lkdGhdJzogJ3dpZHRoJ1xuICAgIH0sXG4gICAgaW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MsIEJ1dHRvbkNvbXBvbmVudCwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqIElEIGZvciB0aGUgQ2Fyb3VzZWwuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGlkID0gYGZkLWNhcm91c2VsLSR7Y2Fyb3VzZWxDb3VudGVyKyt9YDtcblxuICAgIC8qKiBTZXRzIGFyaWEtbGFiZWwgYXR0cmlidXRlIGZvciBjYXJvdXNlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsID0gbnVsbDtcblxuICAgIC8qKiBTZXRzIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgYXJpYS1kZXNjcmliZWRieSBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhRGVzY3JpYmVkQnk6IHN0cmluZztcblxuICAgIC8qKiBTZXRzIHBvc2l0aW9uIG9mIHBhZ2UgaW5kaWNhdG9yIGNvbnRhaW5lci4gRGVmYXVsdCBwb3NpdGlvbiBpcyBib3R0b20uICovXG4gICAgQElucHV0KClcbiAgICBwYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uOiBQYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uID0gJ2JvdHRvbSc7XG5cbiAgICAvKiogSGVpZ2h0IGZvciBjYXJvdXNlbCBjb250YWluZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqIFdpZHRoIGZvciBjYXJvdXNlbCBjb250YWluZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIHdpZHRoID0gJzEwMCUnO1xuXG4gICAgLyoqIElmIGNhcm91c2VsIGlzIGluIGNpcmN1bGFyIGxvb3AgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvb3AgPSBmYWxzZTtcblxuICAgIC8qKiBTaG93cy9oaWRlcyBvcHRpb25hbCBuYXZpZ2F0aW9uIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogU2hvdyBuYXZpZ2F0aW9uIGJ1dHRvbiBpbiBwYWdlIGluZGljYXRvciBjb250YWluZXIgb3IgaW5zaWRlIGNvbnRlbnQuIERlZmF1bHQgaXMgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyIG9uIHRydWUgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRvckluUGFnZUluZGljYXRvciA9IHRydWU7XG5cbiAgICAvKiogQ29udmVydCB0byBOdW1lcmljIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgQElucHV0KClcbiAgICBudW1lcmljSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvckNvbnRhaW5lciA9IHRydWU7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VJbmRpY2F0b3IgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBGZENhcm91c2VsUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHNsaWRpbmcgZHVyYXRpb24gaW4gbWlsbGllIHNlY29uZHMuIERlZmF1bHQgaXMgMTUwICovXG4gICAgQElucHV0KClcbiAgICBzbGlkZVRyYW5zaXRpb25EdXJhdGlvbiA9IDE1MDtcblxuICAgIC8qKiBJcyBzd2lwZSBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBzd2lwZUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqIElzIGNhcm91c2VsIGlzIHZlcnRpY2FsLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGhpZGUgdG9wIGJvcmRlciBvZiB0aGUgUGFnaW5hdGlvbiBDb250YWluZXIuICovXG4gICAgQElucHV0KClcbiAgICBub1BhZ2luYXRpb25Db250YWluZXJCb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBCYWNrZ3JvdW5kIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb250ZW50IGNvbnRhaW5lci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRlbnRCYWNrZ3JvdW5kOiBDYXJvdXNlbEJhY2tncm91bmRPcHRpb25zID0gJ3RyYW5zbHVjZW50JztcblxuICAgIC8qKiBCYWNrZ3JvdW5kIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBQYWdpbmF0aW9uIGNvbnRhaW5lciAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvckJhY2tncm91bmQ6IENhcm91c2VsQmFja2dyb3VuZE9wdGlvbnMgPSAnc29saWQnO1xuXG4gICAgLyoqIE51bWJlciBvZiBpdGVtcyB0byBiZSB2aXNpYmxlIGF0IGEgdGltZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZpc2libGVTbGlkZXNDb3VudCh2YWx1ZTogbnVtYmVyIHwgJ2F1dG8nKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID0gdGhpcy5fZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk7XG4gICAgfVxuXG4gICAgZ2V0IHZpc2libGVTbGlkZXNDb3VudCgpOiBudW1iZXIgfCAnYXV0bycge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVNsaWRlc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgYSBzbGlkZSB0cmFuc2l0aW9uIGhhcyBoYXBwZW5lZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNsaWRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Q2Fyb3VzZWxBY3RpdmVTbGlkZXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJvdXNlbEFjdGl2ZVNsaWRlcz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihDYXJvdXNlbEl0ZW1Db21wb25lbnQsIHtcbiAgICAgICAgZGVzY2VuZGFudHM6IHRydWVcbiAgICB9KVxuICAgIHNsaWRlczogUXVlcnlMaXN0PENhcm91c2VsSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NsaWRlQ29udGFpbmVyJylcbiAgICBzbGlkZUNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBDYXJvdXNlbCBjb250YWluZXIgZWxlbWVudC4gKi9cbiAgICBAVmlld0NoaWxkKCdjYXJvdXNlbENvbnRhaW5lcicpXG4gICAgY2Fyb3VzZWxDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiBTdGFydCBpbmRleCBvZiBjdXJyZW50bHkgYWN0aXZlIGl0ZW1zICovXG4gICAgY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gRW5kIGluZGV4IG9mIGN1cnJlbnRseSBhY3RpdmUgaXRlbXMgKi9cbiAgICBjdXJyZW50QWN0aXZlU2xpZGVzRW5kSW5kZXggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gYW4gYXJyYXkgb2YgaWQocykgb2YgY3VycmVudGx5IGFjdGl2ZSBpdGVtKHMpICovXG4gICAgY3VycmVudEFjdGl2ZVNsaWRlc0lkczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xpZGVzIGluIHRoZSBjYXJvdXNlbCAqL1xuICAgIHRvdGFsU2xpZGVzID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIGhhbmRsZXMgcnRsIHNlcnZpY2UgKi9cbiAgICByZWFkb25seSBfZGlyJCA9IGNvbXB1dGVkPERpcmVjdGlvbj4oKCkgPT4gKHRoaXMuX3J0bCQoKSA/ICdydGwnIDogJ2x0cicpKTtcblxuICAgIC8qKiBAaGlkZGVuIE1ha2UgbGVmdCBuYXZpZ2F0aW9uIGJ1dHRvbiBkaXNhYmxlZCAqL1xuICAgIGxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gTWFrZSByaWdodCBuYXZpZ2F0aW9uIGJ1dHRvbiBkaXNhYmxlZCAqL1xuICAgIHJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIEZha2UgYXJyYXkgZm9yIGNvdW50aW5nIG51bWJlciBvZiBwYWdlIGluZGljYXRvciAqL1xuICAgIHBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheTogbnVtYmVyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NsaWRlc1dyYXBwZXJTaXplID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGlkKHMpIG9mIHRoZSBhY3RpdmUgaXRlbShzKSAqL1xuICAgIGFyaWFBY3RpdmVkZXNjZW5kYW50OiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY29udGVudFNpemVQeCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2xpZGVzV3JhcHBlclNpemUgPyBgJHt0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZX1weGAgOiB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlzaWJsZVNsaWRlc0NvdW50OiBudW1iZXIgfCAnYXV0bycgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3NFTjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBDYXJvdXNlbENvbmZpZyA9IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zbGlkZXNDb3B5OiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zbGlkZVN3aXBlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlID0gaW5qZWN0KFJ0bFNlcnZpY2UsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcnRsJCA9IGNvbXB1dGVkKCgpID0+ICEhdGhpcy5fcnRsU2VydmljZT8ucnRsU2lnbmFsKCkpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2Fyb3VzZWxTZXJ2aWNlOiBDYXJvdXNlbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3pvbmU6IE5nWm9uZVxuICAgICkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNSdGwgPSB0aGlzLl9ydGwkKCk7XG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaXNSdGwgPSBpc1J0bDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaXRlbXMgJiYgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5nb1RvSXRlbSh0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0xFRlRfQVJST1csIFJJR0hUX0FSUk9XXSkgfHxcbiAgICAgICAgICAgICh0aGlzLnZlcnRpY2FsICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbVVBfQVJST1csIERPV05fQVJST1ddKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcnRsJCgpID8gdGhpcy5uZXh0KCkgOiB0aGlzLnByZXZpb3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3J0bCQoKSA/IHRoaXMucHJldmlvdXMoKSA6IHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy52aXNpYmxlU2xpZGVzQ291bnQgJiYgdGhpcy5zbGlkZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeVNsaWRlQ2hhbmdlKFNsaWRlRGlyZWN0aW9uLk5vbmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIE9uIGNhcm91c2VsIGxvYWQsIGRpc3BsYXkgZmlyc3Qgc2xpZGUgKyBudW1iZXIgb2Ygc2xpZGUgdmlzaWJsZVxuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzRW5kSW5kZXggPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50IC0gMTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzSWRzID0gW107XG4gICAgICAgIHRoaXMudG90YWxTbGlkZXMgPSB0aGlzLnNsaWRlcy5sZW5ndGg7XG5cbiAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoc2xpZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGluZGV4ID49IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggJiYgaW5kZXggPD0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzRW5kSW5kZXg7XG5cbiAgICAgICAgICAgIHNsaWRlLmFyaWFTZXRzaXplLnNldCh0aGlzLnRvdGFsU2xpZGVzKTtcbiAgICAgICAgICAgIHNsaWRlLmFyaWFQb3NpbnNldC5zZXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIHNsaWRlLmFyaWFIaWRkZW4uc2V0KCFpc0FjdGl2ZSk7XG4gICAgICAgICAgICBzbGlkZS5hcmlhU2VsZWN0ZWQuc2V0KGlzQWN0aXZlKTtcblxuICAgICAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzSWRzLnB1c2goc2xpZGUuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFyaWFBY3RpdmVkZXNjZW5kYW50ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzSWRzLmpvaW4oJyAnKTtcblxuICAgICAgICAvLyBDaGFuZ2UgcGFnaW5hdGlvbiBkaXNwbGF5IHRvIG51bWVyaWMsIGlmIGl0ZW0gY291bnQgaXMgbW9yZSB0aGFuIDhcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCA+IElDT05fUEFHRV9JTkRJQ0FUT1JfTElNSVQpIHtcbiAgICAgICAgICAgIHRoaXMubnVtZXJpY0luZGljYXRvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYXJvdXNlbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBzd2lwZSB3aGVuIHRoZXJlIGlzIG5vIGNhcm91c2VsIGl0ZW1cbiAgICAgICAgICAgIHRoaXMuc3dpcGVFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEtlZXAgY29weSBvZiBvcmlnaW5hbCBzbGlkZSBhcnJheSwgZm9yIGluZGljYXRvciBwdXJwb3NlLlxuICAgICAgICAvLyBJbiBjYXNlIG9mIGxvb3BlZCBjYXJvdXNlbCwgb3JpZ2luYWwgc2xpZGVzIGFycmF5IGNoYW5nZXMuXG4gICAgICAgIHRoaXMuX3NsaWRlc0NvcHkgPSB0aGlzLnNsaWRlcy50b0FycmF5KCk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVNlcnZpY2VFdmVudHMoKTtcblxuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gZHluYW1pYyB1cGRhdGUgb2Ygc2xpZGVzXG4gICAgICAgIHRoaXMuc2xpZGVzLmNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9vblNsaWRlVXBkYXRlcygpKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVTZXJ2aWNlQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5pbml0aWFsaXNlKHRoaXMuX2NvbmZpZywgdGhpcy5zbGlkZXMsIHRoaXMuc2xpZGVDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCA9IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQ7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZUNvbnRlbnRDb250YWluZXIoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzVmlzaWJsZVNsaWRlc0NvdW50ICYmIHRoaXMuX3ByZXZpb3VzVmlzaWJsZVNsaWRlc0NvdW50ICE9PSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50KSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2Fyb3VzZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVTZXJ2aWNlQ29uZmlnKCk7XG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UudXBkYXRlQ29uZmlnKHRoaXMuX2NvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCA9IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQ7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd05hdmlnYXRpb25CdXR0b25JblBhZ2VJbmRpY2F0b3JDb250YWluZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRvckluUGFnZUluZGljYXRvciAmJiB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggPiAxO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zaG93TmF2aWdhdGlvbkJ1dHRvbkluQ29udGVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5hdmlnYXRvckluUGFnZUluZGljYXRvciAmJiB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggPiAxO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zaG93UGFnZUluZGljYXRvckNvbnRhaW5lcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZUluZGljYXRvckNvbnRhaW5lciAmJiAodGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMCB8fCB0aGlzLm51bWVyaWNJbmRpY2F0b3IpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGdldFBhZ2VJbmRpY2F0b3JMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIDF9ICR7dGhpcy5yZXNvdXJjZVN0cmluZ3MuZmRfY2Fyb3VzZWxfb2Z9ICR7XG4gICAgICAgICAgICB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGhcbiAgICAgICAgfWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2NyZWVuUmVhZGVyTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMucmVzb3VyY2VTdHJpbmdzLmZkX2Nhcm91c2VsX3JlYWRlcn0gJHt0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgMX0gJHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmZkX2Nhcm91c2VsX29mXG4gICAgICAgIH0gJHt0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGh9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mb2N1cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChlbCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgZWwuZm9jdXMoe1xuICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRyYW5zaXRpb25zIHRvIHRoZSBwcmV2aW91cyBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuICovXG4gICAgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sb29wICYmIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGp1c3RBY3RpdmVJdGVtUG9zaXRpb24oU2xpZGVEaXJlY3Rpb24uUFJFVklPVVMpO1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdEJ0bkZvY3VzKCk7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5waWNrUHJldmlvdXMoKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uUFJFVklPVVMpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIFRyYW5zaXRpb25zIHRvIHRoZSBuZXh0IHNsaWRlIGluIHRoZSBjYXJvdXNlbC4gKi9cbiAgICBuZXh0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID49IHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmluZyB0byBuZXh0IHNsaWRlXG4gICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FkanVzdEFjdGl2ZUl0ZW1Qb3NpdGlvbihTbGlkZURpcmVjdGlvbi5ORVhUKTtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHRCdG5Gb2N1cygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UucGlja05leHQoKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uTkVYVCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTdWJzY3JpYmUgdG8gY2Fyb3VzZWwgc2VydmljZSBldmVudHMgKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVTZXJ2aWNlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlQ2hhbmdlJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLl9vblNsaWRlU3dpcGUoZXZlbnQpKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmRyYWdTdGF0ZUNoYW5nZSQuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5fb25TbGlkZURyYWcoZXZlbnQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIFByZXZlbnQgbmF0aXZlIGZvY3VzIGZsb3cgcmVsYXRlZCB0byBidXR0b24sIGlmIGJ1dHRvbiB3aWxsIGJlIGRpc2FibGUgb24gZm9jdXMgc3RhdGUuXG4gICAgICogSXQgd29ya3Mgb25seSBpZiBjYXJvdXNlbCBpcyBub3QgaW4gY2lyY3VsYXIgbG9vcC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9wcmV2ZW50RGVmYXVsdEJ0bkZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNGaXJzdCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDA7XG4gICAgICAgIGNvbnN0IGlzTGFzdCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChpc0ZpcnN0IHx8IGlzTGFzdCkge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEFkanVzdCBwb3NpdGlvbiBvZiBhY3RpdmUgaXRlbSwgYmFzZWQgb24gc2xpZGUgZGlyZWN0aW9uICovXG4gICAgcHJpdmF0ZSBfYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKHNsaWRlRGlyZWN0aW9uOiBTbGlkZURpcmVjdGlvbiwgc3RlcDogbnVtYmVyID0gMSk6IHZvaWQge1xuICAgICAgICAvLyBNb3ZlIG9uZSBzdGVwIGluIHRoZSBkaXJlY3Rpb25cbiAgICAgICAgY29uc3QgcG9zaXRpb25BZGp1c3RtZW50ID0gc2xpZGVEaXJlY3Rpb24gPT09IFNsaWRlRGlyZWN0aW9uLk5FWFQgPyBzdGVwIDogLXN0ZXA7XG4gICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgcG9zaXRpb25BZGp1c3RtZW50O1xuXG4gICAgICAgIC8vIElmIGNhcm91c2VsIHNldCB0byBsb29wXG4gICAgICAgIGlmICh0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSB0aGlzLnNsaWRlcy5sZW5ndGggKyB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID49IHRoaXMuc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICUgdGhpcy5zbGlkZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYnV0dG9uVmlzaWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlcyBuYXZpZ2F0aW9uIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgcHJpdmF0ZSBfYnV0dG9uVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gZGlzYWJsZSBuYXZpZ2F0aW9uIGJ1dHRvbiBpZiBlaXRoZXIgZGlyZWN0aW9uIGxpbWl0IGhhcyByZWFjaGVkLlxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCAtIDEgPT09IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPiAxICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPj0gdGhpcy5zbGlkZXMubGVuZ3RoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlIHdoZW4gc2xpZGUgaXMgYWRkZWQgb3IgcmVtb3ZlZCAqL1xuICAgIHByaXZhdGUgX29uU2xpZGVVcGRhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zbGlkZXNDb3B5ID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmluaXRpYWxpc2UodGhpcy5fY29uZmlnLCB0aGlzLnNsaWRlcywgdGhpcy5zbGlkZUNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zbGlkZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGVZKDBweCknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlWCgwcHgpJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBJbml0aWFsaXplIGNhcm91c2VsIHdpdGggdmlzaWJsZSBpdGVtcyAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVDYXJvdXNlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEhhbmRsZXMgbmF2aWdhdG9yIGJ1dHRvbiBlbmFibGVkL2Rpc2FibGVkIHN0YXRlXG4gICAgICAgICAgICB0aGlzLl9idXR0b25WaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICBsZXQgYXJyYXlMZW5ndGg6IG51bWJlcjtcbiAgICAgICAgICAgIC8vIHNldCBwYWdlIGluZGljYXRvciBjb3VudCB3aXRoIGZha2UgYXJyYXksIHRvIHVzZSBpbiB0ZW1wbGF0ZVxuICAgICAgICAgICAgaWYgKHRoaXMubG9vcCAmJiB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID4gMSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGxvb3Agd2l0aCBtdWx0aSBpdGVtIHZpc2libGUuXG4gICAgICAgICAgICAgICAgYXJyYXlMZW5ndGggPSB0aGlzLnNsaWRlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5TGVuZ3RoID0gdGhpcy5zbGlkZXMubGVuZ3RoIC0gdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYWdlSW5kaWNhdG9yc0lmWmVyb0NvdW50ID0gdGhpcy5zbGlkZXMubGVuZ3RoID09PSAwID8gMCA6IDE7XG4gICAgICAgICAgICB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheSA9IG5ldyBBcnJheShhcnJheUxlbmd0aCA+IDAgPyBhcnJheUxlbmd0aCA6IHBhZ2VJbmRpY2F0b3JzSWZaZXJvQ291bnQpO1xuICAgICAgICAgICAgdGhpcy5fZ29Ub0ZpcnN0SXRlbSgpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoX3NsaWRlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPj0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmRleCA8IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIF9zbGlkZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9zbGlkZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ29Ub0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuY3VycmVudFRyYW5zaXRpb25QeCAhPT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5zbGlkZXMubGVuZ3RoID4gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmdvVG9JdGVtKHRoaXMuc2xpZGVzLmZpcnN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEluaXRpYWxpemUgY29uZmlnIGZvciBDYXJvdXNlbCBzZXJ2aWNlICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVNlcnZpY2VDb25maWcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZy52ZXJ0aWNhbCA9IHRoaXMudmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5lbGVtZW50c0F0T25jZSA9IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQ7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5nZXN0dXJlU3VwcG9ydCA9IHRoaXMuc3dpcGVFbmFibGVkO1xuICAgICAgICB0aGlzLl9jb25maWcuaW5maW5pdGUgPSB0aGlzLmxvb3A7XG4gICAgICAgIHRoaXMuX2NvbmZpZy50cmFuc2l0aW9uID0gU3RyaW5nKHRoaXMuc2xpZGVUcmFuc2l0aW9uRHVyYXRpb24pICsgJ21zJztcbiAgICAgICAgLy8gQ2Fyb3VzZWwgc2VydmljZSBleHBlY3RzIHRyYW5zaXRpb24gaW4gc3RyaW5nIGZvcm1hdCB3aXRoIHVuaXQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBSZXR1cm5zIHRoZSBzbGlkZSBzd2FwcGluZyBzdGVwc1xuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFN0ZXBUYWtlbihldmVudDogUGFuRW5kT3V0cHV0LCBhY3R1YWxBY3RpdmVTbGlkZUluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgc3RlcHNDYWxjdWxhdGVkOiBudW1iZXI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICghdGhpcy5fcnRsJCgpICYmIGV2ZW50LmFmdGVyKSB8fFxuICAgICAgICAgICAgKHRoaXMuX3J0bCQoKSAmJiAhZXZlbnQuYWZ0ZXIgJiYgIXRoaXMudmVydGljYWwpIHx8XG4gICAgICAgICAgICAodGhpcy52ZXJ0aWNhbCAmJiBldmVudC5hZnRlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9PT0gMCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA+IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4IC0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gdGhpcy5zbGlkZXMubGVuZ3RoIC0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UsIHdoZW4gZmlyc3QgbGVmdCBzd2lwZSBiZWZvcmUgc2xpZGVzIGFyZSByb3RhdGVkIGluIGNhcm91c2VsIHNlcnZpY2VcbiAgICAgICAgICAgIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID09PSAwICYmIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4IDwgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggLSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgdGhpcy5zbGlkZXMubGVuZ3RoIC0gYWN0dWFsQWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RlcHNDYWxjdWxhdGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZXMgbm90aWZpY2F0aW9uIG9uIHZpc2libGUgc2xpZGUgY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbm90aWZ5U2xpZGVDaGFuZ2Uoc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uLCBmaXJzdEFjdGl2ZVNsaWRlPzogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3RpdmVTbGlkZXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdID0gW107XG4gICAgICAgIGxldCBmaXJzdEFjdGl2ZVNsaWRlSW5kZXg6IG51bWJlcjtcbiAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuICAgICAgICAgICAgZmlyc3RBY3RpdmVTbGlkZSA9IHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0QWN0aXZlU2xpZGUpIHtcbiAgICAgICAgICAgIGZpcnN0QWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGFjdGl2ZVNsaWRlSW5kZXggPSAwOyBhY3RpdmVTbGlkZUluZGV4IDwgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudDsgYWN0aXZlU2xpZGVJbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGZpcnN0QWN0aXZlU2xpZGVJbmRleCArIGFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBzbGlkZSA9IHRoaXMuc2xpZGVzLmdldChpbmRleCk7XG4gICAgICAgICAgICBpZiAoc2xpZGUpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgICAgICAgICAgc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYW5hZ2VTbGlkZVZpc2liaWxpdHkoZmlyc3RBY3RpdmVTbGlkZUluZGV4KTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc2xpZGVEaXJlY3Rpb24gPT09IFNsaWRlRGlyZWN0aW9uLk5FWFQgPyAnTmV4dCcgOiAnUHJldmlvdXMnO1xuICAgICAgICB0aGlzLnNsaWRlQ2hhbmdlLmVtaXQobmV3IENhcm91c2VsQWN0aXZlU2xpZGVzKGFjdGl2ZVNsaWRlcywgZGlyZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWFuYWdlcyB2aXNpYmlsaXR5IGZvciBzbGlkZXMuIFVzZWZ1bCBpbiBtYW5hZ2luZyB0YWIgb3JkZXIgKi9cbiAgICBwcml2YXRlIF9tYW5hZ2VTbGlkZVZpc2liaWxpdHkoZmlyc3RBY3RpdmVTbGlkZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYXN0QWN0aXZlU2xpZGVJbmRleCA9IGZpcnN0QWN0aXZlU2xpZGVJbmRleCArIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQ7XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc0lkcyA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKChzbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBpbmRleCA+PSBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggJiYgaW5kZXggPCBsYXN0QWN0aXZlU2xpZGVJbmRleDtcblxuICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHZpc2liaWxpdHkgaWYgaXQgaGFzIGNoYW5nZWRcbiAgICAgICAgICAgICAgICBpZiAoc2xpZGUudmlzaWJpbGl0eSAhPT0gKGlzVmlzaWJsZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKSkge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZS52aXNpYmlsaXR5ID0gaXNWaXNpYmxlID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNJZHMucHVzaChzbGlkZS5pZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2xpZGUuYXJpYUhpZGRlbi5zZXQoIWlzVmlzaWJsZSk7XG4gICAgICAgICAgICAgICAgc2xpZGUuYXJpYVNlbGVjdGVkLnNldChpc1Zpc2libGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuYXJpYUFjdGl2ZWRlc2NlbmRhbnQgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNJZHMuam9pbignICcpO1xuXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSwgdGhpcy5zbGlkZVRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT24gU3dpcGluZyBvZiBzbGlkZSwgbWFuYWdlIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZVN3aXBlKGV2ZW50OiBQYW5FbmRPdXRwdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2xpZGVTd2lwZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaXJzdEFjdGl2ZVNsaWRlID0gZXZlbnQuaXRlbTtcbiAgICAgICAgY29uc3QgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuX3NsaWRlc0NvcHkuZmluZEluZGV4KChfc2xpZGUpID0+IF9zbGlkZSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIGNvbnN0IHN0ZXBUYWtlbiA9IHRoaXMuX2dldFN0ZXBUYWtlbihldmVudCwgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCk7XG4gICAgICAgIGlmIChzdGVwVGFrZW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9ydGwkKCkpIHtcbiAgICAgICAgICAgICAgICBzbGlkZURpcmVjdGlvbiA9IGV2ZW50LmFmdGVyID8gU2xpZGVEaXJlY3Rpb24uTkVYVCA6IFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB2ZXJ0aWNhbCBjYXJvdXNlbCBzbGlkZSBkaXJlY3Rpb24gaXMgc2FtZSBpbiBsdHIgYW5kIHJ0bFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlRGlyZWN0aW9uID0gZXZlbnQuYWZ0ZXIgPyBTbGlkZURpcmVjdGlvbi5ORVhUIDogU2xpZGVEaXJlY3Rpb24uUFJFVklPVVM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVEaXJlY3Rpb24gPSBldmVudC5hZnRlciA/IFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTIDogU2xpZGVEaXJlY3Rpb24uTkVYVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9hZGp1c3RBY3RpdmVJdGVtUG9zaXRpb24oc2xpZGVEaXJlY3Rpb24sIHN0ZXBUYWtlbik7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnlTbGlkZUNoYW5nZShzbGlkZURpcmVjdGlvbiwgZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIE1ha2luZyBzbGlkZXMgdmlzaWJsZSB3aGVuIHNsaWRlcyBhcmUgZHJhZ2dlZC4gT3RoZXJ3aXNlLCBpdCBsb29zZXMgdGhlIGVmZmVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9vblNsaWRlRHJhZyhpc0RyYWdnaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChpc0RyYWdnaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKChfc2xpZGUpID0+IHtcbiAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fc2xpZGVTd2lwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQWZ0ZXIgc2xpZGUgbGltaXQgcmVhY2hlZCwgaWYgZHJhZ2dpbmcgc3RhcnRzIHRoZW4gcmV2ZXJ0IHZpc2liaWxpdHlcbiAgICAgICAgICAgIGlmICghdGhpcy5fc2xpZGVTd2lwZWQgJiYgIXRoaXMubG9vcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZVNsaWRlVmlzaWJpbGl0eSh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXNpemVzIGlubmVyIGNhcm91c2VsIGNvbnRhaW5lciB0byBmaXQgYWxsIGl0ZW1zIGluIHRoZSB2aWV3cG9ydCBhbmQgaGlkZSB0aG9zZSB3aGljaCBhcmUgbm90IGZ1bGx5IGluIGl0LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Jlc2l6ZUNvbnRlbnRDb250YWluZXIoKTogdm9pZCB7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLnNsaWRlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpLFxuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLmNhcm91c2VsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBzbGlkZXMgfSA9IHRoaXMuX2dldEZpdHRpbmdTbGlkZXNBbmRXaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVNsaWRlc0NvdW50ID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCA9IHNsaWRlcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxTbGlkZXMgPSB0aGlzLnNsaWRlcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5lZWRsZVNsaWRlSW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGFtb3VudCBvZiBzbGlkZXMgaW5zdWZmaWNpZW50IHRvIGZpbGwgd2hvbGUgY2Fyb3VzZWwsIHNsaWRlIGJhY2sgYSBiaXQuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgc2xpZGVzID4gdG90YWxTbGlkZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRsZVNsaWRlSW5kZXggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgc2xpZGVzIC0gdG90YWxTbGlkZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZGxlU2xpZGUgPSB0aGlzLnNsaWRlcy5nZXQobmVlZGxlU2xpZGVJbmRleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IG5lZWRsZVNsaWRlSW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSA9IG5lZWRsZVNsaWRlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZnJlc2ggY2Fyb3VzZWwgY29uZmlnIGFuZCB0cmFuc2l0aW9uIHRvIHRoZSBjdXJyZW50IHNsaWRlLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2Fyb3VzZWwoKTtcblxuICAgICAgICAgICAgICAgICAgICBuZWVkbGVTbGlkZSAmJiB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuZ29Ub0l0ZW0obmVlZGxlU2xpZGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZnlTbGlkZUNoYW5nZShTbGlkZURpcmVjdGlvbi5Ob25lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2xpZGVzV3JhcHBlclNpemUgIT09IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NsaWRlc1dyYXBwZXJTaXplID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGN1bGF0ZXMgaG93IG1hbnkgc2xpZGVzIGNhbiBiZSBzaG93biB3aXRoaW4gY3VycmVudCBjYXJvdXNlbCB2aWV3cG9ydC5cbiAgICAgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBmaXR0aW5nIHNsaWRlcyBjb3VudCBhbmQgdG90YWwgd2lkdGggb2YgdGhvc2Ugc2xpZGVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEZpdHRpbmdTbGlkZXNBbmRXaWR0aCgpOiBGaXR0aW5nU2xpZGVzQW5kV2lkdGgge1xuICAgICAgICBpZiAoIXRoaXMuY2Fyb3VzZWxDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgc2xpZGVzOiAxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuY2Fyb3VzZWxDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgbGV0IG1heFNpemUgPSAwO1xuICAgICAgICBsZXQgc2xpZGVzQ291bnQgPSAwO1xuICAgICAgICBjb25zdCBjYXJvdXNlbFNsaWRlcyA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTbGlkZXMgPSBjYXJvdXNlbFNsaWRlcy5zcGxpY2UoMCwgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCk7XG4gICAgICAgIGNvbnN0IGdldFNsaWRlcyA9IChzbGlkZXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNsaWRlIG9mIHNsaWRlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlV2lkdGggPSBzbGlkZS5nZXRXaWR0aCgpO1xuICAgICAgICAgICAgICAgIGlmICghc2xpZGVXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U2l6ZSA9IG1heFNpemUgKyBzbGlkZVdpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChuZXdTaXplID4gd2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1heFNpemUgPSBuZXdTaXplO1xuICAgICAgICAgICAgICAgIHNsaWRlc0NvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGdldFNsaWRlcyhjYXJvdXNlbFNsaWRlcyk7XG5cbiAgICAgICAgLy8gSWYgd2l0aCBvZiB0aGUgcmVzdCBvZiB0aGUgc2xpZGVzIGlzIGxlc3NlciB0aGFuIGNhcm91c2UncyB2aWV3cG9ydCwgYWRkIHByZXZpb3VzIHNsaWRlcyB0byBpdC5cbiAgICAgICAgaWYgKG1heFNpemUgPCB3aWR0aCkge1xuICAgICAgICAgICAgZ2V0U2xpZGVzKHByZXZpb3VzU2xpZGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IG1heFNpemUsXG4gICAgICAgICAgICBzbGlkZXM6IHNsaWRlc0NvdW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWaXNpYmxlU2xpZGVzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudCAhPT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVNsaWRlc0NvdW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc2xpZGVzIH0gPSB0aGlzLl9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTtcbiAgICAgICAgcmV0dXJuIHNsaWRlcztcbiAgICB9XG59XG4iLCI8c2VjdGlvblxuICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxcIlxuICAgIFtjbGFzcy5mZC1jYXJvdXNlbC0tbm8tbmF2aWdhdGlvbl09XCIhbmF2aWdhdGlvblwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcbiAgICBbYXR0ci5kaXJdPVwiX2RpciQoKVwiXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIGFyaWEtcm9sZWRlc2NyaXB0aW9uPVwiQ2Fyb3VzZWxcIlxuICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJhcmlhQWN0aXZlZGVzY2VuZGFudFwiXG4gICAgI2Nhcm91c2VsQ29udGFpbmVyXG4gICAgKGNsaWNrKT1cIl9mb2N1cygpXCJcbj5cbiAgICBAaWYgKF9zaG93UGFnZUluZGljYXRvckNvbnRhaW5lciAmJiBwYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uID09PSAndG9wJykge1xuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwicGFnZUluZGljYXRvckNvbnRhaW5lclwiPjwvbmctdGVtcGxhdGU+XG4gICAgfVxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fY29udGVudFwiXG4gICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fY29udGVudC0taG9yaXpvbnRhbF09XCIhdmVydGljYWxcIlxuICAgICAgICBbbmdDbGFzc109XCInZmQtY2Fyb3VzZWxfX2NvbnRlbnQtLScgKyBjb250ZW50QmFja2dyb3VuZFwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJfY29udGVudFNpemVQeFwiXG4gICAgPlxuICAgICAgICBAaWYgKF9zaG93TmF2aWdhdGlvbkJ1dHRvbkluQ29udGVudCkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ1dHRvbkxlZnRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgI3NsaWRlQ29udGFpbmVyIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3NsaWRlc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJidXR0b25SaWdodFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICBAaWYgKF9zaG93UGFnZUluZGljYXRvckNvbnRhaW5lciAmJiBwYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwicGFnZUluZGljYXRvckNvbnRhaW5lclwiPjwvbmctdGVtcGxhdGU+XG4gICAgfVxuICAgIDxkaXYgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCIgcm9sZT1cInJlZ2lvblwiIFthdHRyLmlkXT1cImlkICsgJy1hY2Nlc3NpYmlsaXR5J1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGRpcj1cImx0clwiPlxuICAgICAgICB7eyBzY3JlZW5SZWFkZXJMYWJlbCB9fVxuICAgIDwvZGl2PlxuPC9zZWN0aW9uPlxuPG5nLXRlbXBsYXRlICNwYWdlSW5kaWNhdG9yQ29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3ItY29udGFpbmVyXCJcbiAgICAgICAgW2NsYXNzLmZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvci1jb250YWluZXItLW5vLWJvcmRlcl09XCJub1BhZ2luYXRpb25Db250YWluZXJCb3JkZXJcIlxuICAgICAgICBbbmdDbGFzc109XCInZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yLWNvbnRhaW5lci0tJyArIHBhZ2VJbmRpY2F0b3JCYWNrZ3JvdW5kXCJcbiAgICA+XG4gICAgICAgIEBpZiAoX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyKSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uTGVmdFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhZ2VJbmRpY2F0b3JzXCI+IDwvbmctdGVtcGxhdGU+XG4gICAgICAgIEBpZiAoX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyKSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uUmlnaHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwYWdlSW5kaWNhdG9ycz5cbiAgICBAaWYgKG51bWVyaWNJbmRpY2F0b3IpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvcnNcIj5cbiAgICAgICAgICAgIEBpZiAocGFnZUluZGljYXRvcikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jYXJvdXNlbF9fdGV4dFwiIGRpcj1cImx0clwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRQYWdlSW5kaWNhdG9yTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoIW51bWVyaWNJbmRpY2F0b3IgJiYgX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JzXCIgW2F0dHIuZGlyXT1cIl9kaXIkKClcIj5cbiAgICAgICAgICAgIEBpZiAocGFnZUluZGljYXRvcikge1xuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgcGFnZUluZGljYXRvcnNDb3VudEFycmF5OyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImltZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3JlQ2Fyb3VzZWwucGFnZUluZGljYXRvckxhYmVsJyB8IGZkVHJhbnNsYXRlOiB7IGl0ZW1OdW06IGkgKyAxLCB0b3RhbE51bTogdG90YWxTbGlkZXMgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3ItLWFjdGl2ZV09XCJpID09PSBjdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNidXR0b25MZWZ0PlxuICAgIDxidXR0b25cbiAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImZkLWNhcm91c2VsX19idXR0b25cIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2J1dHRvbi0tbGVmdF09XCIhdmVydGljYWxcIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2J1dHRvbi0tdXBdPVwidmVydGljYWxcIlxuICAgICAgICBbc3R5bGUuei1pbmRleF09XCIxXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUNhcm91c2VsLmxlZnROYXZpZ2F0aW9uQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwicHJldmlvdXMoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxlZnRCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cIidjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFtnbHlwaF09XCJ2ZXJ0aWNhbCA/ICdzbGltLWFycm93LXVwJyA6ICdzbGltLWFycm93LWxlZnQnXCJcbiAgICA+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNidXR0b25SaWdodD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fYnV0dG9uXCJcbiAgICAgICAgW2NsYXNzLmZkLWNhcm91c2VsX19idXR0b24tLXJpZ2h0XT1cIiF2ZXJ0aWNhbFwiXG4gICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fYnV0dG9uLS1kb3duXT1cInZlcnRpY2FsXCJcbiAgICAgICAgW3N0eWxlLnotaW5kZXhdPVwiMVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVDYXJvdXNlbC5yaWdodE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGljayk9XCJuZXh0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyaWdodEJ1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwiJ2NvcmVDYXJvdXNlbC5yaWdodE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFtnbHlwaF09XCJ2ZXJ0aWNhbCA/ICdzbGltLWFycm93LWRvd24nIDogJ3NsaW0tYXJyb3ctcmlnaHQnXCJcbiAgICA+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19","import { ContentChildren, Directive, ElementRef, EventEmitter, Input, Output, QueryList } from '@angular/core';\nimport { CarouselItemDirective } from './carousel-item.directive';\nimport { CarouselService } from './carousel.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./carousel.service\";\nexport class CarouselDirective {\n /** @hidden */\n get carouselService() {\n return this._carouselService;\n }\n /** @hidden */\n constructor(_elementRef, _carouselService) {\n this._elementRef = _elementRef;\n this._carouselService = _carouselService;\n /** Event thrown, when active element is changed */\n this.activeChange = new EventEmitter();\n /** Event thrown when element is dragged. Emits \"true\" when drag starts and \"false\" when drag ends. */\n this.dragStateChange = new EventEmitter();\n }\n /** @hidden */\n ngAfterContentInit() {\n this._carouselService.initialise(this.config, this.items, this._elementRef);\n this._carouselService.activeChange$.subscribe((event) => this.activeChange.emit(event));\n this._carouselService.dragStateChange$.subscribe((event) => this.dragStateChange.emit(event));\n }\n /** Change active element */\n goToItem(item, smooth) {\n this._carouselService.goToItem(item, smooth);\n }\n /** Pick previous carousel item */\n pickPrevious() {\n this._carouselService.pickPrevious();\n }\n /** Pick next carousel item */\n pickNext() {\n this._carouselService.pickNext();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselDirective, deps: [{ token: i0.ElementRef }, { token: i1.CarouselService }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: CarouselDirective, isStandalone: true, selector: \"[fdCarousel]\", inputs: { config: \"config\", active: \"active\" }, outputs: { activeChange: \"activeChange\", dragStateChange: \"dragStateChange\" }, host: { classAttribute: \"fd-carousel_\" }, providers: [CarouselService], queries: [{ propertyName: \"items\", predicate: CarouselItemDirective, descendants: true }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fdCarousel]',\n host: {\n class: 'fd-carousel_'\n },\n providers: [CarouselService],\n standalone: true\n }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.CarouselService }], propDecorators: { config: [{\n type: Input\n }], active: [{\n type: Input\n }], activeChange: [{\n type: Output\n }], dragStateChange: [{\n type: Output\n }], items: [{\n type: ContentChildren,\n args: [CarouselItemDirective, { descendants: true }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2Nhcm91c2VsL2Nhcm91c2VsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBa0IsZUFBZSxFQUFnQixNQUFNLG9CQUFvQixDQUFDOzs7QUFVbkYsTUFBTSxPQUFPLGlCQUFpQjtJQVMxQixjQUFjO0lBQ2QsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQWNELGNBQWM7SUFDZCxZQUNxQixXQUF1QixFQUN2QixnQkFBaUM7UUFEakMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQWZ0RCxtREFBbUQ7UUFFMUMsaUJBQVksR0FBK0IsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFckYsc0dBQXNHO1FBRTdGLG9CQUFlLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7SUFVM0UsQ0FBQztJQUVKLGNBQWM7SUFDZCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLFFBQVEsQ0FBQyxJQUEyQixFQUFFLE1BQWdCO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsWUFBWTtRQUNSLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLFFBQVE7UUFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckMsQ0FBQzs4R0FyRFEsaUJBQWlCO2tHQUFqQixpQkFBaUIsb09BSGYsQ0FBQyxlQUFlLENBQUMsZ0RBMEJYLHFCQUFxQjs7MkZBdkI3QixpQkFBaUI7a0JBUjdCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsY0FBYztxQkFDeEI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDbkI7NkdBSUcsTUFBTTtzQkFETCxLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFVRyxZQUFZO3NCQURwQixNQUFNO2dCQUtFLGVBQWU7c0JBRHZCLE1BQU07Z0JBS1AsS0FBSztzQkFESixlQUFlO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENhcm91c2VsSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vY2Fyb3VzZWwtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxDb25maWcsIENhcm91c2VsU2VydmljZSwgUGFuRW5kT3V0cHV0IH0gZnJvbSAnLi9jYXJvdXNlbC5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmRDYXJvdXNlbF0nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZC1jYXJvdXNlbF8nXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtDYXJvdXNlbFNlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICAvKiogQ29uZmlndXJhdGlvbiBmb3IgY2Fyb3VzZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbmZpZzogQ2Fyb3VzZWxDb25maWc7XG5cbiAgICAvKiogSW5pdGlhbCBhY3RpdmUgaXRlbSBvZiBjYXJvdXNlbCwgcG9zaXRpb24gZmlyc3QgKyBvZmZzZXQgKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2Fyb3VzZWxTZXJ2aWNlKCk6IENhcm91c2VsU2VydmljZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJvdXNlbFNlcnZpY2U7XG4gICAgfVxuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiBhY3RpdmUgZWxlbWVudCBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biB3aGVuIGVsZW1lbnQgaXMgZHJhZ2dlZC4gRW1pdHMgXCJ0cnVlXCIgd2hlbiBkcmFnIHN0YXJ0cyBhbmQgXCJmYWxzZVwiIHdoZW4gZHJhZyBlbmRzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGRyYWdTdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKENhcm91c2VsSXRlbURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIGl0ZW1zOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxJdGVtRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2Nhcm91c2VsU2VydmljZTogQ2Fyb3VzZWxTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5pbml0aWFsaXNlKHRoaXMuY29uZmlnLCB0aGlzLml0ZW1zLCB0aGlzLl9lbGVtZW50UmVmKTtcblxuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlQ2hhbmdlJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGV2ZW50KSk7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5kcmFnU3RhdGVDaGFuZ2UkLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuZHJhZ1N0YXRlQ2hhbmdlLmVtaXQoZXZlbnQpKTtcbiAgICB9XG5cbiAgICAvKiogQ2hhbmdlIGFjdGl2ZSBlbGVtZW50ICovXG4gICAgZ29Ub0l0ZW0oaXRlbTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlLCBzbW9vdGg/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5nb1RvSXRlbShpdGVtLCBzbW9vdGgpO1xuICAgIH1cblxuICAgIC8qKiBQaWNrIHByZXZpb3VzIGNhcm91c2VsIGl0ZW0gKi9cbiAgICBwaWNrUHJldmlvdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5waWNrUHJldmlvdXMoKTtcbiAgICB9XG5cbiAgICAvKiogUGljayBuZXh0IGNhcm91c2VsIGl0ZW0gKi9cbiAgICBwaWNrTmV4dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLnBpY2tOZXh0KCk7XG4gICAgfVxufVxuIl19","import { NgModule } from '@angular/core';\nimport { CarouselItemDirective } from './carousel-item.directive';\nimport { CarouselItemComponent } from './carousel-item/carousel-item.component';\nimport { CarouselComponent } from './carousel.component';\nimport { CarouselDirective } from './carousel.directive';\nimport { CarouselService } from './carousel.service';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\nexport class CarouselModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselModule, imports: [CarouselItemDirective, CarouselDirective, CarouselComponent, CarouselItemComponent], exports: [CarouselItemDirective, CarouselDirective, CarouselComponent, CarouselItemComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselModule, providers: [CarouselService], imports: [CarouselComponent, CarouselItemComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CarouselModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CarouselItemDirective, CarouselDirective, CarouselComponent, CarouselItemComponent],\n exports: [CarouselItemDirective, CarouselDirective, CarouselComponent, CarouselItemComponent],\n providers: [CarouselService]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2Nhcm91c2VsL2Nhcm91c2VsLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFFckQ7OztHQUdHO0FBTUgsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBSmIscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLGFBQ2xGLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQjsrR0FHbkYsY0FBYyxhQUZaLENBQUMsZUFBZSxDQUFDLFlBRndCLGlCQUFpQixFQUFFLHFCQUFxQjs7MkZBSW5GLGNBQWM7a0JBTDFCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUM7b0JBQzdGLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDO29CQUM3RixTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUM7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcm91c2VsSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vY2Fyb3VzZWwtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJvdXNlbC1pdGVtL2Nhcm91c2VsLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhcm91c2VsQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJvdXNlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxEaXJlY3RpdmUgfSBmcm9tICcuL2Nhcm91c2VsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDYXJvdXNlbFNlcnZpY2UgfSBmcm9tICcuL2Nhcm91c2VsLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiBVc2UgZGlyZWN0IGltcG9ydHMgb2YgY29tcG9uZW50cyBhbmQgZGlyZWN0aXZlcy5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlLCBDYXJvdXNlbERpcmVjdGl2ZSwgQ2Fyb3VzZWxDb21wb25lbnQsIENhcm91c2VsSXRlbUNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0Nhcm91c2VsSXRlbURpcmVjdGl2ZSwgQ2Fyb3VzZWxEaXJlY3RpdmUsIENhcm91c2VsQ29tcG9uZW50LCBDYXJvdXNlbEl0ZW1Db21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW0Nhcm91c2VsU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtY2Fyb3VzZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2Fyb3VzZWwvZnVuZGFtZW50YWwtbmd4LWNvcmUtY2Fyb3VzZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["carouselItemCounter","i1.CarouselService"],"mappings":"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"}