@ethlete/cdk 4.48.0 → 4.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (657) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/fesm2022/ethlete-cdk.mjs +964 -880
  3. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  4. package/lib/components/bracket/components/new-bracket/bracket-new.d.ts +1620 -0
  5. package/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATA_DOUBLE_SYNC.d.ts +149 -0
  6. package/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATA_SINGLE.d.ts +184 -0
  7. package/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATA_SWISS.d.ts +214 -0
  8. package/lib/components/bracket/stories/dummy-data/ET_DUMMY_DATE_DOUBLE_ASYNC.d.ts +149 -0
  9. package/lib/components/bracket/stories/dummy-data/FIFA_DUMMY_DATA_DOUBLE.d.ts +1640 -0
  10. package/lib/components/bracket/stories/dummy-data/FIFA_DUMMY_DATA_SINGLE.d.ts +2388 -0
  11. package/lib/components/bracket/stories/dummy-data/index.d.ts +6 -0
  12. package/lib/components/forms/utils/decorated-form-field.base.d.ts +1 -1
  13. package/lib/components/forms/utils/decorated-input.base.d.ts +1 -1
  14. package/lib/components/forms/utils/input.base.d.ts +1 -1
  15. package/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-base.service.d.ts +1 -1
  16. package/lib/components/overlay/components/dialog/services/dialog-base.service.d.ts +1 -1
  17. package/lib/components/query-error/directives/query-error/query-error.directive.d.ts +1 -1
  18. package/lib/components/tabs/utils/paginated-tab-header.directive.d.ts +1 -1
  19. package/package.json +8 -10
  20. package/esm2022/ethlete-cdk.mjs +0 -5
  21. package/esm2022/index.mjs +0 -24
  22. package/esm2022/lib/components/accordion/accordion.imports.mjs +0 -15
  23. package/esm2022/lib/components/accordion/components/accordion/accordion.component.animations.mjs +0 -9
  24. package/esm2022/lib/components/accordion/components/accordion/accordion.component.constants.mjs +0 -3
  25. package/esm2022/lib/components/accordion/components/accordion/accordion.component.mjs +0 -76
  26. package/esm2022/lib/components/accordion/components/accordion/index.mjs +0 -4
  27. package/esm2022/lib/components/accordion/components/accordion-group/accordion-group.component.mjs +0 -53
  28. package/esm2022/lib/components/accordion/components/accordion-group/index.mjs +0 -2
  29. package/esm2022/lib/components/accordion/partials/accordion-hint/accordion-hint.directive.mjs +0 -17
  30. package/esm2022/lib/components/accordion/partials/accordion-hint/index.mjs +0 -2
  31. package/esm2022/lib/components/accordion/partials/accordion-hint-wrapper/accordion-hint-wrapper.directive.constants.mjs +0 -3
  32. package/esm2022/lib/components/accordion/partials/accordion-hint-wrapper/accordion-hint-wrapper.directive.mjs +0 -20
  33. package/esm2022/lib/components/accordion/partials/accordion-hint-wrapper/index.mjs +0 -3
  34. package/esm2022/lib/components/accordion/partials/accordion-label/accordion-label.directive.mjs +0 -17
  35. package/esm2022/lib/components/accordion/partials/accordion-label/index.mjs +0 -2
  36. package/esm2022/lib/components/accordion/partials/accordion-label-wrapper/accordion-label-wrapper.directive.constants.mjs +0 -3
  37. package/esm2022/lib/components/accordion/partials/accordion-label-wrapper/accordion-label-wrapper.directive.mjs +0 -20
  38. package/esm2022/lib/components/accordion/partials/accordion-label-wrapper/index.mjs +0 -3
  39. package/esm2022/lib/components/accordion/public-api/index.mjs +0 -8
  40. package/esm2022/lib/components/bracket/bracket.imports.mjs +0 -5
  41. package/esm2022/lib/components/bracket/components/bracket/bracket.component.mjs +0 -333
  42. package/esm2022/lib/components/bracket/components/bracket/bracket.component.types.mjs +0 -2
  43. package/esm2022/lib/components/bracket/components/bracket/index.mjs +0 -3
  44. package/esm2022/lib/components/bracket/components/new-bracket/bracket-new.mjs +0 -942
  45. package/esm2022/lib/components/bracket/components/new-bracket/draw-man.mjs +0 -197
  46. package/esm2022/lib/components/bracket/components/new-bracket/grid-definitions.mjs +0 -47
  47. package/esm2022/lib/components/bracket/components/new-bracket/grid-placements.mjs +0 -105
  48. package/esm2022/lib/components/bracket/components/new-bracket/index.mjs +0 -8
  49. package/esm2022/lib/components/bracket/components/new-bracket/journey-highlight.mjs +0 -18
  50. package/esm2022/lib/components/bracket/components/new-bracket/new-bracket-default-match.component.mjs +0 -17
  51. package/esm2022/lib/components/bracket/components/new-bracket/new-bracket-default-round-header.component.mjs +0 -16
  52. package/esm2022/lib/components/bracket/components/new-bracket/new-bracket.component.mjs +0 -107
  53. package/esm2022/lib/components/bracket/constants/bracket.constants.mjs +0 -12
  54. package/esm2022/lib/components/bracket/constants/index.mjs +0 -2
  55. package/esm2022/lib/components/bracket/directives/bracket-match/bracket-match.directive.mjs +0 -19
  56. package/esm2022/lib/components/bracket/directives/bracket-match/index.mjs +0 -2
  57. package/esm2022/lib/components/bracket/directives/bracket-round/bracket-round.directive.mjs +0 -19
  58. package/esm2022/lib/components/bracket/directives/bracket-round/index.mjs +0 -2
  59. package/esm2022/lib/components/bracket/partials/bracket-match/bracket-match.component.mjs +0 -19
  60. package/esm2022/lib/components/bracket/partials/bracket-match/index.mjs +0 -2
  61. package/esm2022/lib/components/bracket/partials/bracket-round-header/bracket-round-header.component.mjs +0 -19
  62. package/esm2022/lib/components/bracket/partials/bracket-round-header/index.mjs +0 -2
  63. package/esm2022/lib/components/bracket/public-api/index.mjs +0 -14
  64. package/esm2022/lib/components/bracket/types/bracket-config.types.mjs +0 -2
  65. package/esm2022/lib/components/bracket/types/bracket.types.mjs +0 -2
  66. package/esm2022/lib/components/bracket/types/index.mjs +0 -3
  67. package/esm2022/lib/components/bracket/utils/bracket-config.utils.mjs +0 -13
  68. package/esm2022/lib/components/bracket/utils/bracket.utils.mjs +0 -339
  69. package/esm2022/lib/components/bracket/utils/index.mjs +0 -3
  70. package/esm2022/lib/components/button/button.imports.mjs +0 -4
  71. package/esm2022/lib/components/button/components/button/button.component.mjs +0 -18
  72. package/esm2022/lib/components/button/components/button/index.mjs +0 -2
  73. package/esm2022/lib/components/button/components/query-button/index.mjs +0 -2
  74. package/esm2022/lib/components/button/components/query-button/query-button.component.mjs +0 -26
  75. package/esm2022/lib/components/button/directives/button/button.directive.mjs +0 -69
  76. package/esm2022/lib/components/button/directives/button/index.mjs +0 -2
  77. package/esm2022/lib/components/button/directives/query-button/index.mjs +0 -2
  78. package/esm2022/lib/components/button/directives/query-button/query-button.directive.mjs +0 -136
  79. package/esm2022/lib/components/button/public-api/index.mjs +0 -6
  80. package/esm2022/lib/components/carousel/carousel.component.mjs +0 -51
  81. package/esm2022/lib/components/carousel/carousel.directive.mjs +0 -150
  82. package/esm2022/lib/components/carousel/carousel.imports.mjs +0 -12
  83. package/esm2022/lib/components/carousel/controls/carousel-item-nav.component.mjs +0 -64
  84. package/esm2022/lib/components/carousel/controls/carousel-item-nav.directive.mjs +0 -34
  85. package/esm2022/lib/components/carousel/controls/carousel-next-button.directive.mjs +0 -45
  86. package/esm2022/lib/components/carousel/controls/carousel-previous-button.directive.mjs +0 -45
  87. package/esm2022/lib/components/carousel/controls/carousel-toggle-auto-play-button.directive.mjs +0 -43
  88. package/esm2022/lib/components/carousel/controls/index.mjs +0 -6
  89. package/esm2022/lib/components/carousel/et-carousel-item.component.mjs +0 -24
  90. package/esm2022/lib/components/carousel/et-carousel-item.directive.mjs +0 -46
  91. package/esm2022/lib/components/carousel/public-api/index.mjs +0 -7
  92. package/esm2022/lib/components/filter/public-api/index.mjs +0 -7
  93. package/esm2022/lib/components/filter/rich-filter/components/rich-filter-host/index.mjs +0 -2
  94. package/esm2022/lib/components/filter/rich-filter/components/rich-filter-host/rich-filter-host.component.mjs +0 -70
  95. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button/index.mjs +0 -2
  96. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button/rich-filter-button.directive.mjs +0 -32
  97. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button-slot/index.mjs +0 -2
  98. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button-slot/rich-filter-button-slot.directive.mjs +0 -32
  99. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-content/index.mjs +0 -2
  100. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-content/rich-filter-content.directive.mjs +0 -32
  101. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-top/index.mjs +0 -2
  102. package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-top/rich-filter-top.directive.mjs +0 -29
  103. package/esm2022/lib/components/filter/rich-filter/rich-filter.imports.mjs +0 -13
  104. package/esm2022/lib/components/forms/components/checkbox/checkbox.imports.mjs +0 -13
  105. package/esm2022/lib/components/forms/components/checkbox/components/checkbox/checkbox.component.mjs +0 -24
  106. package/esm2022/lib/components/forms/components/checkbox/components/checkbox/index.mjs +0 -2
  107. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-field/checkbox-field.component.mjs +0 -47
  108. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-field/index.mjs +0 -2
  109. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-group/checkbox-group.component.mjs +0 -17
  110. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-group/index.mjs +0 -2
  111. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox/checkbox.directive.mjs +0 -40
  112. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox/index.mjs +0 -2
  113. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-field/checkbox-field.directive.mjs +0 -39
  114. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-field/index.mjs +0 -2
  115. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group/checkbox-group.directive.mjs +0 -83
  116. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group/index.mjs +0 -2
  117. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group-control/checkbox-group-control.directive.mjs +0 -31
  118. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group-control/index.mjs +0 -2
  119. package/esm2022/lib/components/forms/components/error/components/error/error.component.mjs +0 -55
  120. package/esm2022/lib/components/forms/components/error/components/error/index.mjs +0 -2
  121. package/esm2022/lib/components/forms/components/input/components/color-input/color-input.component.mjs +0 -24
  122. package/esm2022/lib/components/forms/components/input/components/color-input/index.mjs +0 -2
  123. package/esm2022/lib/components/forms/components/input/components/date-input/date-input.component.mjs +0 -27
  124. package/esm2022/lib/components/forms/components/input/components/date-input/index.mjs +0 -2
  125. package/esm2022/lib/components/forms/components/input/components/date-time-input/date-time-input.component.mjs +0 -27
  126. package/esm2022/lib/components/forms/components/input/components/date-time-input/index.mjs +0 -2
  127. package/esm2022/lib/components/forms/components/input/components/email-input/email-input.component.mjs +0 -24
  128. package/esm2022/lib/components/forms/components/input/components/email-input/index.mjs +0 -2
  129. package/esm2022/lib/components/forms/components/input/components/input-field/index.mjs +0 -2
  130. package/esm2022/lib/components/forms/components/input/components/input-field/input-field.component.mjs +0 -55
  131. package/esm2022/lib/components/forms/components/input/components/number-input/index.mjs +0 -2
  132. package/esm2022/lib/components/forms/components/input/components/number-input/number-input.component.mjs +0 -27
  133. package/esm2022/lib/components/forms/components/input/components/password-input/index.mjs +0 -2
  134. package/esm2022/lib/components/forms/components/input/components/password-input/password-input.component.mjs +0 -24
  135. package/esm2022/lib/components/forms/components/input/components/search-input/index.mjs +0 -2
  136. package/esm2022/lib/components/forms/components/input/components/search-input/search-input.component.mjs +0 -24
  137. package/esm2022/lib/components/forms/components/input/components/tel-input/index.mjs +0 -2
  138. package/esm2022/lib/components/forms/components/input/components/tel-input/tel-input.component.mjs +0 -24
  139. package/esm2022/lib/components/forms/components/input/components/text-input/index.mjs +0 -2
  140. package/esm2022/lib/components/forms/components/input/components/text-input/text-input.component.mjs +0 -24
  141. package/esm2022/lib/components/forms/components/input/components/textarea-input/index.mjs +0 -2
  142. package/esm2022/lib/components/forms/components/input/components/textarea-input/textarea-input.component.mjs +0 -32
  143. package/esm2022/lib/components/forms/components/input/components/time-input/index.mjs +0 -2
  144. package/esm2022/lib/components/forms/components/input/components/time-input/time-input.component.mjs +0 -24
  145. package/esm2022/lib/components/forms/components/input/directives/autosize-textarea/autosize-textarea.directive.mjs +0 -51
  146. package/esm2022/lib/components/forms/components/input/directives/autosize-textarea/index.mjs +0 -2
  147. package/esm2022/lib/components/forms/components/input/directives/color-input/color-input.directive.mjs +0 -50
  148. package/esm2022/lib/components/forms/components/input/directives/color-input/index.mjs +0 -2
  149. package/esm2022/lib/components/forms/components/input/directives/date-input/date-input.directive.mjs +0 -61
  150. package/esm2022/lib/components/forms/components/input/directives/date-input/index.mjs +0 -2
  151. package/esm2022/lib/components/forms/components/input/directives/date-time-input/date-time-input.directive.mjs +0 -61
  152. package/esm2022/lib/components/forms/components/input/directives/date-time-input/index.mjs +0 -2
  153. package/esm2022/lib/components/forms/components/input/directives/email-input/email-input.directive.mjs +0 -50
  154. package/esm2022/lib/components/forms/components/input/directives/email-input/index.mjs +0 -2
  155. package/esm2022/lib/components/forms/components/input/directives/if-supports-show-picker/if-supports-show-picker.directive.mjs +0 -78
  156. package/esm2022/lib/components/forms/components/input/directives/if-supports-show-picker/index.mjs +0 -2
  157. package/esm2022/lib/components/forms/components/input/directives/number-input/index.mjs +0 -2
  158. package/esm2022/lib/components/forms/components/input/directives/number-input/number-input.directive.mjs +0 -51
  159. package/esm2022/lib/components/forms/components/input/directives/password-input/index.mjs +0 -2
  160. package/esm2022/lib/components/forms/components/input/directives/password-input/password-input.directive.mjs +0 -54
  161. package/esm2022/lib/components/forms/components/input/directives/search-input/index.mjs +0 -2
  162. package/esm2022/lib/components/forms/components/input/directives/search-input/search-input.directive.mjs +0 -58
  163. package/esm2022/lib/components/forms/components/input/directives/show-picker-trigger/index.mjs +0 -2
  164. package/esm2022/lib/components/forms/components/input/directives/show-picker-trigger/show-picker-trigger.directive.mjs +0 -42
  165. package/esm2022/lib/components/forms/components/input/directives/tel-input/index.mjs +0 -2
  166. package/esm2022/lib/components/forms/components/input/directives/tel-input/tel-input.directive.mjs +0 -50
  167. package/esm2022/lib/components/forms/components/input/directives/text-input/index.mjs +0 -2
  168. package/esm2022/lib/components/forms/components/input/directives/text-input/text-input.directive.mjs +0 -50
  169. package/esm2022/lib/components/forms/components/input/directives/textarea-input/index.mjs +0 -2
  170. package/esm2022/lib/components/forms/components/input/directives/textarea-input/textarea-input.directive.mjs +0 -50
  171. package/esm2022/lib/components/forms/components/input/directives/time-input/index.mjs +0 -2
  172. package/esm2022/lib/components/forms/components/input/directives/time-input/time-input.directive.mjs +0 -61
  173. package/esm2022/lib/components/forms/components/input/input.imports.mjs +0 -47
  174. package/esm2022/lib/components/forms/components/input/partials/password-input-toggle/index.mjs +0 -2
  175. package/esm2022/lib/components/forms/components/input/partials/password-input-toggle/password-input-toggle.component.mjs +0 -22
  176. package/esm2022/lib/components/forms/components/input/partials/search-input-clear/index.mjs +0 -2
  177. package/esm2022/lib/components/forms/components/input/partials/search-input-clear/search-input-clear.component.mjs +0 -22
  178. package/esm2022/lib/components/forms/components/label/components/label/index.mjs +0 -2
  179. package/esm2022/lib/components/forms/components/label/components/label/label.component.mjs +0 -51
  180. package/esm2022/lib/components/forms/components/label/directives/label-suffix/index.mjs +0 -2
  181. package/esm2022/lib/components/forms/components/label/directives/label-suffix/label-suffix.directive.mjs +0 -27
  182. package/esm2022/lib/components/forms/components/label/label.imports.mjs +0 -4
  183. package/esm2022/lib/components/forms/components/radio/components/radio/index.mjs +0 -2
  184. package/esm2022/lib/components/forms/components/radio/components/radio/radio.component.mjs +0 -29
  185. package/esm2022/lib/components/forms/components/radio/components/radio-field/index.mjs +0 -2
  186. package/esm2022/lib/components/forms/components/radio/components/radio-field/radio-field.component.mjs +0 -27
  187. package/esm2022/lib/components/forms/components/radio/components/radio-group/index.mjs +0 -2
  188. package/esm2022/lib/components/forms/components/radio/components/radio-group/radio-group.component.mjs +0 -45
  189. package/esm2022/lib/components/forms/components/radio/directives/radio/index.mjs +0 -2
  190. package/esm2022/lib/components/forms/components/radio/directives/radio/radio.directive.mjs +0 -60
  191. package/esm2022/lib/components/forms/components/radio/directives/radio-field/index.mjs +0 -2
  192. package/esm2022/lib/components/forms/components/radio/directives/radio-field/radio-field.directive.mjs +0 -36
  193. package/esm2022/lib/components/forms/components/radio/directives/radio-group/index.mjs +0 -2
  194. package/esm2022/lib/components/forms/components/radio/directives/radio-group/radio-group.directive.mjs +0 -30
  195. package/esm2022/lib/components/forms/components/radio/radio.imports.mjs +0 -6
  196. package/esm2022/lib/components/forms/components/radio/types/index.mjs +0 -2
  197. package/esm2022/lib/components/forms/components/radio/types/radio.types.mjs +0 -2
  198. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button/index.mjs +0 -2
  199. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button/segmented-button.component.mjs +0 -38
  200. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-field/index.mjs +0 -2
  201. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-field/segmented-button-field.component.mjs +0 -25
  202. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-group/index.mjs +0 -2
  203. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-group/segmented-button-group.component.mjs +0 -51
  204. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button/index.mjs +0 -2
  205. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.mjs +0 -70
  206. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-field/index.mjs +0 -2
  207. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.mjs +0 -36
  208. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-group/index.mjs +0 -2
  209. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-group/segmented-button-group.directive.mjs +0 -63
  210. package/esm2022/lib/components/forms/components/segmented-button/segmented-button.imports.mjs +0 -9
  211. package/esm2022/lib/components/forms/components/select/components/combobox/combobox.imports.mjs +0 -23
  212. package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.mjs +0 -78
  213. package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/index.mjs +0 -2
  214. package/esm2022/lib/components/forms/components/select/components/combobox/constants/combobox.constants.mjs +0 -6
  215. package/esm2022/lib/components/forms/components/select/components/combobox/constants/index.mjs +0 -2
  216. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +0 -658
  217. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/index.mjs +0 -2
  218. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/combobox-body-empty-template.directive.mjs +0 -30
  219. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-empty-template/index.mjs +0 -2
  220. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/combobox-body-error-template.directive.mjs +0 -30
  221. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-error-template/index.mjs +0 -2
  222. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/combobox-body-loading-template.directive.mjs +0 -30
  223. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-loading-template/index.mjs +0 -2
  224. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-more-items-hint-template/combobox-body-more-items-hint-template.directive.mjs +0 -30
  225. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-body-more-items-hint-template/index.mjs +0 -2
  226. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-option-template/combobox-option-template.directive.mjs +0 -30
  227. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-option-template/index.mjs +0 -2
  228. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-selected-option-template/combobox-selected-option-template.directive.mjs +0 -30
  229. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-selected-option-template/index.mjs +0 -2
  230. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.mjs +0 -78
  231. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/index.mjs +0 -2
  232. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.mjs +0 -71
  233. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/index.mjs +0 -2
  234. package/esm2022/lib/components/forms/components/select/components/combobox/private/combobox.private.errors.mjs +0 -22
  235. package/esm2022/lib/components/forms/components/select/components/combobox/private/combobox.private.types.mjs +0 -5
  236. package/esm2022/lib/components/forms/components/select/components/combobox/private/index.mjs +0 -3
  237. package/esm2022/lib/components/forms/components/select/components/combobox/types/combobox.types.mjs +0 -2
  238. package/esm2022/lib/components/forms/components/select/components/combobox/types/index.mjs +0 -2
  239. package/esm2022/lib/components/forms/components/select/components/combobox/utils/combobox-config.utils.mjs +0 -13
  240. package/esm2022/lib/components/forms/components/select/components/combobox/utils/index.mjs +0 -2
  241. package/esm2022/lib/components/forms/components/select/components/native-select/components/native-select/index.mjs +0 -2
  242. package/esm2022/lib/components/forms/components/select/components/native-select/components/native-select/native-select.component.mjs +0 -24
  243. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-input/index.mjs +0 -2
  244. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-input/native-select-input.directive.mjs +0 -58
  245. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-option/index.mjs +0 -2
  246. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-option/native-select-option.directive.mjs +0 -45
  247. package/esm2022/lib/components/forms/components/select/components/native-select/native-select.imports.mjs +0 -19
  248. package/esm2022/lib/components/forms/components/select/components/native-select/partials/native-select-option/index.mjs +0 -2
  249. package/esm2022/lib/components/forms/components/select/components/native-select/partials/native-select-option/native-select-option.component.mjs +0 -32
  250. package/esm2022/lib/components/forms/components/select/components/native-select/types/index.mjs +0 -2
  251. package/esm2022/lib/components/forms/components/select/components/native-select/types/select.types.mjs +0 -2
  252. package/esm2022/lib/components/forms/components/select/components/select/components/select/index.mjs +0 -2
  253. package/esm2022/lib/components/forms/components/select/components/select/components/select/select.component.mjs +0 -37
  254. package/esm2022/lib/components/forms/components/select/components/select/directives/select/index.mjs +0 -2
  255. package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +0 -303
  256. package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/index.mjs +0 -2
  257. package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.mjs +0 -53
  258. package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/index.mjs +0 -2
  259. package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.mjs +0 -106
  260. package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/index.mjs +0 -2
  261. package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.mjs +0 -41
  262. package/esm2022/lib/components/forms/components/select/components/select/partials/select-option/index.mjs +0 -2
  263. package/esm2022/lib/components/forms/components/select/components/select/partials/select-option/select-option.component.mjs +0 -28
  264. package/esm2022/lib/components/forms/components/select/components/select/private/index.mjs +0 -2
  265. package/esm2022/lib/components/forms/components/select/components/select/private/select.private.types.mjs +0 -2
  266. package/esm2022/lib/components/forms/components/select/components/select/select.imports.mjs +0 -15
  267. package/esm2022/lib/components/forms/components/select/components/select-field/index.mjs +0 -2
  268. package/esm2022/lib/components/forms/components/select/components/select-field/select-field.component.mjs +0 -58
  269. package/esm2022/lib/components/forms/components/select/directives/select-field/index.mjs +0 -2
  270. package/esm2022/lib/components/forms/components/select/directives/select-field/select-field.directive.mjs +0 -19
  271. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-field/index.mjs +0 -2
  272. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-field/selection-list-field.component.mjs +0 -40
  273. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-option/index.mjs +0 -2
  274. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-option/selection-list-option.component.mjs +0 -29
  275. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-field/index.mjs +0 -2
  276. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-field/selection-list-field.directive.mjs +0 -125
  277. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-option/index.mjs +0 -2
  278. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-option/selection-list-option.directive.mjs +0 -110
  279. package/esm2022/lib/components/forms/components/selection-list/selection-list.imports.mjs +0 -4
  280. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle/index.mjs +0 -2
  281. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle/slide-toggle.component.mjs +0 -24
  282. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle-field/index.mjs +0 -2
  283. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle-field/slide-toggle-field.component.mjs +0 -53
  284. package/esm2022/lib/components/forms/components/slide-toggle/directives/slide-toggle/index.mjs +0 -2
  285. package/esm2022/lib/components/forms/components/slide-toggle/directives/slide-toggle/slide-toggle.directive.mjs +0 -38
  286. package/esm2022/lib/components/forms/components/slide-toggle/slide-toggle.imports.mjs +0 -5
  287. package/esm2022/lib/components/forms/components/slider/components/slider/index.mjs +0 -2
  288. package/esm2022/lib/components/forms/components/slider/components/slider/slider.component.mjs +0 -331
  289. package/esm2022/lib/components/forms/components/slider/components/slider-field/index.mjs +0 -2
  290. package/esm2022/lib/components/forms/components/slider/components/slider-field/slider-field.component.mjs +0 -53
  291. package/esm2022/lib/components/forms/components/slider/slider.imports.mjs +0 -5
  292. package/esm2022/lib/components/forms/directives/dynamic-form-field/dynamic-form-field.directive.mjs +0 -41
  293. package/esm2022/lib/components/forms/directives/dynamic-form-field/index.mjs +0 -2
  294. package/esm2022/lib/components/forms/directives/dynamic-form-group/dynamic-form-group.directive.mjs +0 -41
  295. package/esm2022/lib/components/forms/directives/dynamic-form-group/index.mjs +0 -2
  296. package/esm2022/lib/components/forms/directives/expose-input-vars/expose-input-vars.directive.mjs +0 -83
  297. package/esm2022/lib/components/forms/directives/expose-input-vars/index.mjs +0 -2
  298. package/esm2022/lib/components/forms/directives/if-input-empty/if-input-empty.directive.mjs +0 -40
  299. package/esm2022/lib/components/forms/directives/if-input-empty/index.mjs +0 -2
  300. package/esm2022/lib/components/forms/directives/if-input-filled/if-input-filled.directive.mjs +0 -40
  301. package/esm2022/lib/components/forms/directives/if-input-filled/index.mjs +0 -2
  302. package/esm2022/lib/components/forms/directives/input/index.mjs +0 -2
  303. package/esm2022/lib/components/forms/directives/input/input.directive.mjs +0 -314
  304. package/esm2022/lib/components/forms/directives/input-prefix/index.mjs +0 -2
  305. package/esm2022/lib/components/forms/directives/input-prefix/input-prefix.directive.mjs +0 -30
  306. package/esm2022/lib/components/forms/directives/input-suffix/index.mjs +0 -2
  307. package/esm2022/lib/components/forms/directives/input-suffix/input-suffix.directive.mjs +0 -30
  308. package/esm2022/lib/components/forms/directives/native-input-ref/index.mjs +0 -2
  309. package/esm2022/lib/components/forms/directives/native-input-ref/native-input-ref.directive.mjs +0 -19
  310. package/esm2022/lib/components/forms/directives/static-form-field/index.mjs +0 -2
  311. package/esm2022/lib/components/forms/directives/static-form-field/static-form-field.directive.mjs +0 -76
  312. package/esm2022/lib/components/forms/directives/static-form-group/index.mjs +0 -2
  313. package/esm2022/lib/components/forms/directives/static-form-group/static-form-group.directive.mjs +0 -29
  314. package/esm2022/lib/components/forms/directives/writeable-input/index.mjs +0 -2
  315. package/esm2022/lib/components/forms/directives/writeable-input/writeable-input.directive.mjs +0 -57
  316. package/esm2022/lib/components/forms/public-api/index.mjs +0 -113
  317. package/esm2022/lib/components/forms/services/default-validator-errors.service.mjs +0 -54
  318. package/esm2022/lib/components/forms/services/form-field-state.service.mjs +0 -32
  319. package/esm2022/lib/components/forms/services/form-group-state.service.mjs +0 -21
  320. package/esm2022/lib/components/forms/services/index.mjs +0 -5
  321. package/esm2022/lib/components/forms/services/input-state.service.mjs +0 -72
  322. package/esm2022/lib/components/forms/types/index.mjs +0 -2
  323. package/esm2022/lib/components/forms/types/input.types.mjs +0 -2
  324. package/esm2022/lib/components/forms/utils/decorated-form-field.base.mjs +0 -19
  325. package/esm2022/lib/components/forms/utils/decorated-input.base.mjs +0 -48
  326. package/esm2022/lib/components/forms/utils/form-changes-tracker.util.mjs +0 -31
  327. package/esm2022/lib/components/forms/utils/index.mjs +0 -5
  328. package/esm2022/lib/components/forms/utils/input.base.mjs +0 -27
  329. package/esm2022/lib/components/icons/chevron-icon/chevron-icon.component.mjs +0 -37
  330. package/esm2022/lib/components/icons/chevron-icon/index.mjs +0 -2
  331. package/esm2022/lib/components/icons/icon.imports.mjs +0 -4
  332. package/esm2022/lib/components/icons/public-api/index.mjs +0 -4
  333. package/esm2022/lib/components/icons/times-icon/index.mjs +0 -2
  334. package/esm2022/lib/components/icons/times-icon/times-icon.component.mjs +0 -37
  335. package/esm2022/lib/components/masonry/components/masonry/index.mjs +0 -2
  336. package/esm2022/lib/components/masonry/components/masonry/masonry.component.mjs +0 -213
  337. package/esm2022/lib/components/masonry/masonry.imports.mjs +0 -4
  338. package/esm2022/lib/components/masonry/partials/masonry-item/index.mjs +0 -2
  339. package/esm2022/lib/components/masonry/partials/masonry-item/masonry-item.component.mjs +0 -74
  340. package/esm2022/lib/components/masonry/public-api/index.mjs +0 -5
  341. package/esm2022/lib/components/masonry/types/index.mjs +0 -2
  342. package/esm2022/lib/components/masonry/types/masonry.types.mjs +0 -2
  343. package/esm2022/lib/components/overlay/components/bottom-sheet/bottom-sheet.imports.mjs +0 -21
  344. package/esm2022/lib/components/overlay/components/bottom-sheet/components/bottom-sheet-container/bottom-sheet-container.component.mjs +0 -54
  345. package/esm2022/lib/components/overlay/components/bottom-sheet/components/bottom-sheet-container/index.mjs +0 -2
  346. package/esm2022/lib/components/overlay/components/bottom-sheet/constants/bottom-sheet.constants.mjs +0 -56
  347. package/esm2022/lib/components/overlay/components/bottom-sheet/constants/index.mjs +0 -2
  348. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/bottom-sheet-container-base.component.mjs +0 -46
  349. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/index.mjs +0 -2
  350. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-drag-handle/bottom-sheet-drag-handle.component.mjs +0 -115
  351. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-drag-handle/index.mjs +0 -2
  352. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-title/bottom-sheet-title.directive.mjs +0 -42
  353. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-title/index.mjs +0 -2
  354. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-base.service.mjs +0 -117
  355. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-swipe-handler.service.mjs +0 -57
  356. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet.service.mjs +0 -34
  357. package/esm2022/lib/components/overlay/components/bottom-sheet/services/index.mjs +0 -4
  358. package/esm2022/lib/components/overlay/components/bottom-sheet/types/bottom-sheet.types.mjs +0 -2
  359. package/esm2022/lib/components/overlay/components/bottom-sheet/types/index.mjs +0 -2
  360. package/esm2022/lib/components/overlay/components/bottom-sheet/utils/bottom-sheet-config.mjs +0 -10
  361. package/esm2022/lib/components/overlay/components/bottom-sheet/utils/bottom-sheet-ref.mjs +0 -96
  362. package/esm2022/lib/components/overlay/components/bottom-sheet/utils/bottom-sheet.utils.mjs +0 -22
  363. package/esm2022/lib/components/overlay/components/bottom-sheet/utils/index.mjs +0 -4
  364. package/esm2022/lib/components/overlay/components/dialog/components/dialog-container/dialog-container.component.mjs +0 -54
  365. package/esm2022/lib/components/overlay/components/dialog/components/dialog-container/index.mjs +0 -2
  366. package/esm2022/lib/components/overlay/components/dialog/constants/dialog.constants.mjs +0 -52
  367. package/esm2022/lib/components/overlay/components/dialog/constants/index.mjs +0 -2
  368. package/esm2022/lib/components/overlay/components/dialog/dialog.imports.mjs +0 -17
  369. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-close/dialog-close.directive.mjs +0 -67
  370. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-close/index.mjs +0 -2
  371. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-container-base/dialog-container-base.component.mjs +0 -46
  372. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-container-base/index.mjs +0 -2
  373. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-title/dialog-title.directive.mjs +0 -42
  374. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-title/index.mjs +0 -2
  375. package/esm2022/lib/components/overlay/components/dialog/services/dialog-base.service.mjs +0 -112
  376. package/esm2022/lib/components/overlay/components/dialog/services/dialog.service.mjs +0 -34
  377. package/esm2022/lib/components/overlay/components/dialog/services/index.mjs +0 -3
  378. package/esm2022/lib/components/overlay/components/dialog/types/dialog.types.mjs +0 -2
  379. package/esm2022/lib/components/overlay/components/dialog/types/index.mjs +0 -2
  380. package/esm2022/lib/components/overlay/components/dialog/utils/dialog-config.mjs +0 -10
  381. package/esm2022/lib/components/overlay/components/dialog/utils/dialog-ref.mjs +0 -127
  382. package/esm2022/lib/components/overlay/components/dialog/utils/dialog.utils.mjs +0 -22
  383. package/esm2022/lib/components/overlay/components/dialog/utils/index.mjs +0 -4
  384. package/esm2022/lib/components/overlay/components/menu/components/menu/index.mjs +0 -2
  385. package/esm2022/lib/components/overlay/components/menu/components/menu/menu.component.mjs +0 -202
  386. package/esm2022/lib/components/overlay/components/menu/components/menu-checkbox-item/index.mjs +0 -2
  387. package/esm2022/lib/components/overlay/components/menu/components/menu-checkbox-item/menu-checkbox-item.component.mjs +0 -86
  388. package/esm2022/lib/components/overlay/components/menu/components/menu-container/index.mjs +0 -2
  389. package/esm2022/lib/components/overlay/components/menu/components/menu-container/menu-container.component.mjs +0 -47
  390. package/esm2022/lib/components/overlay/components/menu/components/menu-radio-item/index.mjs +0 -2
  391. package/esm2022/lib/components/overlay/components/menu/components/menu-radio-item/menu-radio-item.component.mjs +0 -77
  392. package/esm2022/lib/components/overlay/components/menu/directives/menu-checkbox-group/index.mjs +0 -2
  393. package/esm2022/lib/components/overlay/components/menu/directives/menu-checkbox-group/menu-checkbox-group.directive.mjs +0 -31
  394. package/esm2022/lib/components/overlay/components/menu/directives/menu-group/index.mjs +0 -2
  395. package/esm2022/lib/components/overlay/components/menu/directives/menu-group/menu-group.directive.mjs +0 -43
  396. package/esm2022/lib/components/overlay/components/menu/directives/menu-group-title/index.mjs +0 -2
  397. package/esm2022/lib/components/overlay/components/menu/directives/menu-group-title/menu-group-title.directive.mjs +0 -41
  398. package/esm2022/lib/components/overlay/components/menu/directives/menu-item/index.mjs +0 -2
  399. package/esm2022/lib/components/overlay/components/menu/directives/menu-item/menu-item.directive.mjs +0 -98
  400. package/esm2022/lib/components/overlay/components/menu/directives/menu-radio-group/index.mjs +0 -2
  401. package/esm2022/lib/components/overlay/components/menu/directives/menu-radio-group/menu-radio-group.directive.mjs +0 -45
  402. package/esm2022/lib/components/overlay/components/menu/directives/menu-search-template/index.mjs +0 -2
  403. package/esm2022/lib/components/overlay/components/menu/directives/menu-search-template/menu-search-template.directive.mjs +0 -29
  404. package/esm2022/lib/components/overlay/components/menu/directives/menu-trigger/index.mjs +0 -2
  405. package/esm2022/lib/components/overlay/components/menu/directives/menu-trigger/menu-trigger.directive.mjs +0 -183
  406. package/esm2022/lib/components/overlay/components/menu/menu.imports.mjs +0 -23
  407. package/esm2022/lib/components/overlay/components/menu-deprecated/context-menu-trigger.mjs +0 -165
  408. package/esm2022/lib/components/overlay/components/menu-deprecated/index.mjs +0 -17
  409. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-aim.mjs +0 -136
  410. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-bar.mjs +0 -112
  411. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-base.mjs +0 -171
  412. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-errors.mjs +0 -7
  413. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-group.mjs +0 -25
  414. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-interface.mjs +0 -3
  415. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-item-checkbox.mjs +0 -38
  416. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-item-radio.mjs +0 -55
  417. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-item-selectable.mjs +0 -38
  418. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-item.mjs +0 -212
  419. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-module.mjs +0 -58
  420. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-stack.mjs +0 -99
  421. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-trigger-base.mjs +0 -80
  422. package/esm2022/lib/components/overlay/components/menu-deprecated/menu-trigger.mjs +0 -250
  423. package/esm2022/lib/components/overlay/components/menu-deprecated/menu.mjs +0 -115
  424. package/esm2022/lib/components/overlay/components/menu-deprecated/pointer-focus-tracker.mjs +0 -29
  425. package/esm2022/lib/components/overlay/components/overlay/components/overlay-container/index.mjs +0 -2
  426. package/esm2022/lib/components/overlay/components/overlay/components/overlay-container/overlay-container.component.mjs +0 -287
  427. package/esm2022/lib/components/overlay/components/overlay/constants/index.mjs +0 -2
  428. package/esm2022/lib/components/overlay/components/overlay/constants/overlay.constants.mjs +0 -26
  429. package/esm2022/lib/components/overlay/components/overlay/overlay.imports.mjs +0 -40
  430. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-back-or-close/index.mjs +0 -2
  431. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-back-or-close/overlay-back-or-close.directive.mjs +0 -43
  432. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-body/index.mjs +0 -2
  433. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-body/overlay-body.component.mjs +0 -134
  434. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-close/index.mjs +0 -2
  435. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-close/overlay-close.directive.mjs +0 -61
  436. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-footer/index.mjs +0 -2
  437. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-footer/overlay-footer.directive.mjs +0 -45
  438. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-header/index.mjs +0 -2
  439. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-header/overlay-header.directive.mjs +0 -45
  440. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-header-template/index.mjs +0 -2
  441. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-header-template/overlay-header-template.directive.mjs +0 -50
  442. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-main/index.mjs +0 -2
  443. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-main/overlay-main.directive.mjs +0 -53
  444. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-route-header-template-outlet/index.mjs +0 -2
  445. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-route-header-template-outlet/overlay-route-header-template-outlet.component.mjs +0 -41
  446. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-router-link/index.mjs +0 -2
  447. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-router-link/overlay-router-link.directive.mjs +0 -46
  448. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-router-outlet/index.mjs +0 -2
  449. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-router-outlet/overlay-router-outlet.component.mjs +0 -137
  450. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-router-outlet-disabled-template/index.mjs +0 -2
  451. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-router-outlet-disabled-template/overlay-router-outlet-disabled-template.directive.mjs +0 -26
  452. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-shared-route-template/index.mjs +0 -2
  453. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-shared-route-template/overlay-shared-route-template.directive.mjs +0 -26
  454. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-shared-route-template-outlet/index.mjs +0 -2
  455. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-shared-route-template-outlet/overlay-shared-route-template-outlet.component.mjs +0 -26
  456. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-sidebar/index.mjs +0 -2
  457. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-sidebar/overlay-sidebar.component.mjs +0 -54
  458. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-sidebar-page/index.mjs +0 -2
  459. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-sidebar-page/overlay-sidebar-page.component.mjs +0 -52
  460. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-title/index.mjs +0 -2
  461. package/esm2022/lib/components/overlay/components/overlay/partials/overlay-title/overlay-title.directive.mjs +0 -39
  462. package/esm2022/lib/components/overlay/components/overlay/services/index.mjs +0 -2
  463. package/esm2022/lib/components/overlay/components/overlay/services/overlay.service.mjs +0 -313
  464. package/esm2022/lib/components/overlay/components/overlay/types/index.mjs +0 -2
  465. package/esm2022/lib/components/overlay/components/overlay/types/overlay.types.mjs +0 -6
  466. package/esm2022/lib/components/overlay/components/overlay/utils/filter-overlay.mjs +0 -124
  467. package/esm2022/lib/components/overlay/components/overlay/utils/index.mjs +0 -10
  468. package/esm2022/lib/components/overlay/components/overlay/utils/overlay-config.mjs +0 -7
  469. package/esm2022/lib/components/overlay/components/overlay/utils/overlay-handler-link.directive.mjs +0 -33
  470. package/esm2022/lib/components/overlay/components/overlay/utils/overlay-handler.mjs +0 -159
  471. package/esm2022/lib/components/overlay/components/overlay/utils/overlay-position-builder.mjs +0 -224
  472. package/esm2022/lib/components/overlay/components/overlay/utils/overlay-ref.mjs +0 -173
  473. package/esm2022/lib/components/overlay/components/overlay/utils/overlay-router.mjs +0 -190
  474. package/esm2022/lib/components/overlay/components/overlay/utils/overlay.utils.mjs +0 -13
  475. package/esm2022/lib/components/overlay/components/overlay/utils/sidebar-overlay.mjs +0 -54
  476. package/esm2022/lib/components/overlay/components/toggletip/components/toggletip/index.mjs +0 -2
  477. package/esm2022/lib/components/overlay/components/toggletip/components/toggletip/toggletip.component.mjs +0 -69
  478. package/esm2022/lib/components/overlay/components/toggletip/constants/index.mjs +0 -2
  479. package/esm2022/lib/components/overlay/components/toggletip/constants/toggletip.constants.mjs +0 -12
  480. package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/index.mjs +0 -2
  481. package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.mjs +0 -136
  482. package/esm2022/lib/components/overlay/components/toggletip/partials/toggletip-close/index.mjs +0 -2
  483. package/esm2022/lib/components/overlay/components/toggletip/partials/toggletip-close/toggletip-close.directive.mjs +0 -25
  484. package/esm2022/lib/components/overlay/components/toggletip/toggletip.imports.mjs +0 -3
  485. package/esm2022/lib/components/overlay/components/toggletip/types/index.mjs +0 -2
  486. package/esm2022/lib/components/overlay/components/toggletip/types/toggletip.types.mjs +0 -2
  487. package/esm2022/lib/components/overlay/components/toggletip/utils/index.mjs +0 -3
  488. package/esm2022/lib/components/overlay/components/toggletip/utils/toggletip-config.mjs +0 -6
  489. package/esm2022/lib/components/overlay/components/toggletip/utils/toggletip.util.mjs +0 -6
  490. package/esm2022/lib/components/overlay/components/tooltip/components/tooltip/index.mjs +0 -2
  491. package/esm2022/lib/components/overlay/components/tooltip/components/tooltip/tooltip.component.mjs +0 -67
  492. package/esm2022/lib/components/overlay/components/tooltip/constants/index.mjs +0 -2
  493. package/esm2022/lib/components/overlay/components/tooltip/constants/tooltip.constants.mjs +0 -12
  494. package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/index.mjs +0 -2
  495. package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.mjs +0 -171
  496. package/esm2022/lib/components/overlay/components/tooltip/tooltip.imports.mjs +0 -3
  497. package/esm2022/lib/components/overlay/components/tooltip/types/index.mjs +0 -2
  498. package/esm2022/lib/components/overlay/components/tooltip/types/tooltip.types.mjs +0 -2
  499. package/esm2022/lib/components/overlay/components/tooltip/utils/index.mjs +0 -3
  500. package/esm2022/lib/components/overlay/components/tooltip/utils/tooltip-config.mjs +0 -6
  501. package/esm2022/lib/components/overlay/components/tooltip/utils/tooltip.util.mjs +0 -6
  502. package/esm2022/lib/components/overlay/directives/dynamic-overlay-title/dynamic-overlay-title.directive.mjs +0 -49
  503. package/esm2022/lib/components/overlay/directives/dynamic-overlay-title/index.mjs +0 -2
  504. package/esm2022/lib/components/overlay/directives/overlay-close-auto-blocker/index.mjs +0 -2
  505. package/esm2022/lib/components/overlay/directives/overlay-close-auto-blocker/overlay-close-auto-blocker.directive.mjs +0 -51
  506. package/esm2022/lib/components/overlay/public-api/index.mjs +0 -72
  507. package/esm2022/lib/components/overlay/services/dynamic-overlay.service.mjs +0 -31
  508. package/esm2022/lib/components/overlay/services/index.mjs +0 -2
  509. package/esm2022/lib/components/overlay/types/dynamic-overlay.types.mjs +0 -2
  510. package/esm2022/lib/components/overlay/types/index.mjs +0 -2
  511. package/esm2022/lib/components/overlay/utils/index.mjs +0 -2
  512. package/esm2022/lib/components/overlay/utils/overlay-dismiss-checker.util.mjs +0 -105
  513. package/esm2022/lib/components/pagination/components/pagination/index.mjs +0 -2
  514. package/esm2022/lib/components/pagination/components/pagination/pagination.component.mjs +0 -110
  515. package/esm2022/lib/components/pagination/pagination.imports.mjs +0 -3
  516. package/esm2022/lib/components/pagination/partials/pagination-link/index.mjs +0 -2
  517. package/esm2022/lib/components/pagination/partials/pagination-link/pagination-link.directive.mjs +0 -32
  518. package/esm2022/lib/components/pagination/public-api/index.mjs +0 -7
  519. package/esm2022/lib/components/pagination/services/index.mjs +0 -2
  520. package/esm2022/lib/components/pagination/services/pagination-head.service.mjs +0 -74
  521. package/esm2022/lib/components/pagination/types/index.mjs +0 -2
  522. package/esm2022/lib/components/pagination/types/pagination.types.mjs +0 -2
  523. package/esm2022/lib/components/pagination/utils/index.mjs +0 -2
  524. package/esm2022/lib/components/pagination/utils/pagination.util.mjs +0 -98
  525. package/esm2022/lib/components/picture/components/picture/index.mjs +0 -2
  526. package/esm2022/lib/components/picture/components/picture/picture.component.mjs +0 -56
  527. package/esm2022/lib/components/picture/public-api/index.mjs +0 -4
  528. package/esm2022/lib/components/picture/types/picture.types.mjs +0 -2
  529. package/esm2022/lib/components/picture/utils/picture.utils.mjs +0 -31
  530. package/esm2022/lib/components/progress-spinner/index.mjs +0 -2
  531. package/esm2022/lib/components/progress-spinner/progress-spinner.component.mjs +0 -94
  532. package/esm2022/lib/components/query-error/components/query-error/index.mjs +0 -2
  533. package/esm2022/lib/components/query-error/components/query-error/query-error.component.mjs +0 -27
  534. package/esm2022/lib/components/query-error/directives/query-error/index.mjs +0 -2
  535. package/esm2022/lib/components/query-error/directives/query-error/query-error.directive.mjs +0 -432
  536. package/esm2022/lib/components/query-error/public-api/index.mjs +0 -4
  537. package/esm2022/lib/components/query-error/types/index.mjs +0 -2
  538. package/esm2022/lib/components/query-error/types/query-error.types.mjs +0 -2
  539. package/esm2022/lib/components/scrollable/components/scrollable/index.mjs +0 -2
  540. package/esm2022/lib/components/scrollable/components/scrollable/scrollable.component.mjs +0 -510
  541. package/esm2022/lib/components/scrollable/components/scrollable-placeholder/index.mjs +0 -2
  542. package/esm2022/lib/components/scrollable/components/scrollable-placeholder/scrollable-placeholder.component.mjs +0 -26
  543. package/esm2022/lib/components/scrollable/directives/scrollable-ignore-child/index.mjs +0 -2
  544. package/esm2022/lib/components/scrollable/directives/scrollable-ignore-child/scrollable-ignore-child.directive.mjs +0 -44
  545. package/esm2022/lib/components/scrollable/directives/scrollable-is-active-child/index.mjs +0 -2
  546. package/esm2022/lib/components/scrollable/directives/scrollable-is-active-child/scrollable-is-active-child.directive.mjs +0 -45
  547. package/esm2022/lib/components/scrollable/directives/scrollable-loading-template/index.mjs +0 -2
  548. package/esm2022/lib/components/scrollable/directives/scrollable-loading-template/scrollable-loading-template.directive.mjs +0 -31
  549. package/esm2022/lib/components/scrollable/directives/scrollable-placeholder-item-template/index.mjs +0 -2
  550. package/esm2022/lib/components/scrollable/directives/scrollable-placeholder-item-template/scrollable-placeholder-item-template.directive.mjs +0 -26
  551. package/esm2022/lib/components/scrollable/directives/scrollable-placeholder-overlay-template/index.mjs +0 -2
  552. package/esm2022/lib/components/scrollable/directives/scrollable-placeholder-overlay-template/scrollable-placeholder-overlay-template.directive.mjs +0 -26
  553. package/esm2022/lib/components/scrollable/public-api/index.mjs +0 -10
  554. package/esm2022/lib/components/scrollable/scrollable.imports.mjs +0 -17
  555. package/esm2022/lib/components/scrollable/types/index.mjs +0 -2
  556. package/esm2022/lib/components/scrollable/types/scrollable.types.mjs +0 -2
  557. package/esm2022/lib/components/skeleton/components/skeleton/index.mjs +0 -2
  558. package/esm2022/lib/components/skeleton/components/skeleton/skeleton.component.mjs +0 -25
  559. package/esm2022/lib/components/skeleton/partials/skeleton-item/index.mjs +0 -2
  560. package/esm2022/lib/components/skeleton/partials/skeleton-item/skeleton-item.component.mjs +0 -19
  561. package/esm2022/lib/components/skeleton/public-api/index.mjs +0 -4
  562. package/esm2022/lib/components/skeleton/skeleton.imports.mjs +0 -4
  563. package/esm2022/lib/components/sort/components/sort-header/index.mjs +0 -3
  564. package/esm2022/lib/components/sort/components/sort-header/sort-header.component.mjs +0 -198
  565. package/esm2022/lib/components/sort/components/sort-header/sort-header.types.mjs +0 -2
  566. package/esm2022/lib/components/sort/partials/sort/index.mjs +0 -3
  567. package/esm2022/lib/components/sort/partials/sort/sort.directive.mjs +0 -184
  568. package/esm2022/lib/components/sort/partials/sort/sort.types.mjs +0 -2
  569. package/esm2022/lib/components/sort/public-api/index.mjs +0 -6
  570. package/esm2022/lib/components/sort/services/index.mjs +0 -2
  571. package/esm2022/lib/components/sort/services/sort-header-intl.mjs +0 -23
  572. package/esm2022/lib/components/sort/sort.imports.mjs +0 -8
  573. package/esm2022/lib/components/sort/types/index.mjs +0 -2
  574. package/esm2022/lib/components/sort/types/sort-direction.mjs +0 -2
  575. package/esm2022/lib/components/table/components/table/index.mjs +0 -2
  576. package/esm2022/lib/components/table/components/table/table.component.mjs +0 -145
  577. package/esm2022/lib/components/table/constants/index.mjs +0 -2
  578. package/esm2022/lib/components/table/constants/table-data-source.constants.mjs +0 -2
  579. package/esm2022/lib/components/table/partials/cells/cell/cell.directive.mjs +0 -18
  580. package/esm2022/lib/components/table/partials/cells/cell/index.mjs +0 -2
  581. package/esm2022/lib/components/table/partials/cells/cell-def/cell-def.directive.mjs +0 -16
  582. package/esm2022/lib/components/table/partials/cells/cell-def/index.mjs +0 -2
  583. package/esm2022/lib/components/table/partials/cells/column-def/column-def.directive.mjs +0 -44
  584. package/esm2022/lib/components/table/partials/cells/column-def/index.mjs +0 -2
  585. package/esm2022/lib/components/table/partials/cells/footer-cell/footer-cell.directive.mjs +0 -18
  586. package/esm2022/lib/components/table/partials/cells/footer-cell/index.mjs +0 -2
  587. package/esm2022/lib/components/table/partials/cells/footer-cell-def/footer-cell-def.directive.mjs +0 -16
  588. package/esm2022/lib/components/table/partials/cells/footer-cell-def/index.mjs +0 -2
  589. package/esm2022/lib/components/table/partials/cells/header-cell/header-cell.directive.mjs +0 -19
  590. package/esm2022/lib/components/table/partials/cells/header-cell/index.mjs +0 -2
  591. package/esm2022/lib/components/table/partials/cells/header-cell-def/header-cell-def.directive.mjs +0 -16
  592. package/esm2022/lib/components/table/partials/cells/header-cell-def/index.mjs +0 -2
  593. package/esm2022/lib/components/table/partials/cells/text-column/index.mjs +0 -2
  594. package/esm2022/lib/components/table/partials/cells/text-column/text-column.component.mjs +0 -53
  595. package/esm2022/lib/components/table/partials/rows/footer-row/footer-row.component.mjs +0 -26
  596. package/esm2022/lib/components/table/partials/rows/footer-row/index.mjs +0 -2
  597. package/esm2022/lib/components/table/partials/rows/footer-row-def/footer-row-def.directive.mjs +0 -26
  598. package/esm2022/lib/components/table/partials/rows/footer-row-def/index.mjs +0 -2
  599. package/esm2022/lib/components/table/partials/rows/header-row/header-row.component.mjs +0 -26
  600. package/esm2022/lib/components/table/partials/rows/header-row/index.mjs +0 -2
  601. package/esm2022/lib/components/table/partials/rows/header-row-def/header-row-def.directive.mjs +0 -26
  602. package/esm2022/lib/components/table/partials/rows/header-row-def/index.mjs +0 -2
  603. package/esm2022/lib/components/table/partials/rows/no-data-row/index.mjs +0 -2
  604. package/esm2022/lib/components/table/partials/rows/no-data-row/no-data-row.directive.mjs +0 -20
  605. package/esm2022/lib/components/table/partials/rows/recycle-rows/index.mjs +0 -2
  606. package/esm2022/lib/components/table/partials/rows/recycle-rows/recycle-rows.directive.mjs +0 -16
  607. package/esm2022/lib/components/table/partials/rows/row/index.mjs +0 -2
  608. package/esm2022/lib/components/table/partials/rows/row/row.component.mjs +0 -26
  609. package/esm2022/lib/components/table/partials/rows/row-def/index.mjs +0 -2
  610. package/esm2022/lib/components/table/partials/rows/row-def/row-def.directive.mjs +0 -26
  611. package/esm2022/lib/components/table/partials/table-busy/index.mjs +0 -2
  612. package/esm2022/lib/components/table/partials/table-busy/table-busy.directive.mjs +0 -18
  613. package/esm2022/lib/components/table/partials/table-busy-outlet/index.mjs +0 -2
  614. package/esm2022/lib/components/table/partials/table-busy-outlet/table-busy-outlet.directive.mjs +0 -15
  615. package/esm2022/lib/components/table/public-api/index.mjs +0 -24
  616. package/esm2022/lib/components/table/table.imports.mjs +0 -39
  617. package/esm2022/lib/components/table/types/index.mjs +0 -2
  618. package/esm2022/lib/components/table/types/table-data-source.types.mjs +0 -2
  619. package/esm2022/lib/components/table/utils/index.mjs +0 -2
  620. package/esm2022/lib/components/table/utils/table-data-source.mjs +0 -168
  621. package/esm2022/lib/components/tabs/animations/index.mjs +0 -2
  622. package/esm2022/lib/components/tabs/animations/tabs.animations.mjs +0 -26
  623. package/esm2022/lib/components/tabs/components/inline-tabs/index.mjs +0 -2
  624. package/esm2022/lib/components/tabs/components/inline-tabs/inline-tabs.component.mjs +0 -257
  625. package/esm2022/lib/components/tabs/components/nav-tabs/index.mjs +0 -2
  626. package/esm2022/lib/components/tabs/components/nav-tabs/nav-tabs.component.mjs +0 -82
  627. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab/index.mjs +0 -2
  628. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab/inline-tab.component.mjs +0 -88
  629. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body/index.mjs +0 -2
  630. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body/inline-tab-body.component.mjs +0 -133
  631. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body-host/index.mjs +0 -2
  632. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body-host/inline-tab-body-host.directive.mjs +0 -25
  633. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-content/index.mjs +0 -2
  634. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-content/inline-tab-content.directive.mjs +0 -22
  635. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-header/index.mjs +0 -2
  636. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-header/inline-tab-header.component.mjs +0 -34
  637. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label/index.mjs +0 -2
  638. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label/inline-tab-label.directive.mjs +0 -30
  639. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label-wrapper/index.mjs +0 -2
  640. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label-wrapper/inline-tab-label-wrapper.directive.mjs +0 -42
  641. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tab-link/index.mjs +0 -2
  642. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tab-link/nav-tab-link.directive.mjs +0 -177
  643. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tabs-outlet/index.mjs +0 -2
  644. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tabs-outlet/nav-tabs-outlet.component.mjs +0 -37
  645. package/esm2022/lib/components/tabs/public-api/index.mjs +0 -16
  646. package/esm2022/lib/components/tabs/tab.imports.mjs +0 -25
  647. package/esm2022/lib/components/tabs/types/index.mjs +0 -2
  648. package/esm2022/lib/components/tabs/types/tab-config.types.mjs +0 -3
  649. package/esm2022/lib/components/tabs/utils/active-tab-underline.util.mjs +0 -112
  650. package/esm2022/lib/components/tabs/utils/index.mjs +0 -3
  651. package/esm2022/lib/components/tabs/utils/paginated-tab-header.directive.mjs +0 -272
  652. package/esm2022/lib/services/index.mjs +0 -2
  653. package/esm2022/lib/services/swipe-handler.service.mjs +0 -102
  654. package/esm2022/lib/types/index.mjs +0 -2
  655. package/esm2022/lib/types/swipe.types.mjs +0 -2
  656. package/esm2022/lib/utils/floating-ui.utils.mjs +0 -15
  657. package/esm2022/lib/utils/index.mjs +0 -2
@@ -1,510 +0,0 @@
1
- import { NgClass, NgTemplateOutlet } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, ElementRef, ViewEncapsulation, booleanAttribute, computed, contentChild, contentChildren, effect, inject, input, isDevMode, numberAttribute, signal, viewChild, } from '@angular/core';
3
- import { outputFromObservable, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
4
- import { LetDirective, ObserveScrollStateDirective, createCanAnimateSignal, createIsRenderedSignal, getElementScrollCoordinates, getIntersectionInfo, signalClasses, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostStyles, signalStyles, useCursorDragScroll, } from '@ethlete/core';
5
- import { Subject, combineLatest, debounceTime, filter, fromEvent, map, of, switchMap, takeUntil, tap } from 'rxjs';
6
- import { ChevronIconComponent } from '../../../icons/chevron-icon';
7
- import { ScrollableIgnoreChildDirective, isScrollableChildIgnored } from '../../directives/scrollable-ignore-child';
8
- import { SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, ScrollableIsActiveChildDirective, } from '../../directives/scrollable-is-active-child';
9
- import { SCROLLABLE_LOADING_TEMPLATE_TOKEN } from '../../directives/scrollable-loading-template';
10
- import * as i0 from "@angular/core";
11
- // Thresholds for the intersection observer.
12
- const ELEMENT_INTERSECTION_THRESHOLD = [
13
- // 5% steps
14
- ...Array.from({ length: 21 }, (_, i) => i * 0.05),
15
- // Additional steps needed since display scaling can cause the intersection ratio to be slightly off.
16
- 0.01,
17
- 0.005,
18
- 0.001,
19
- 0.99,
20
- 0.995,
21
- 0.999,
22
- ];
23
- export class ScrollableComponent {
24
- constructor() {
25
- this._disableSnapping$ = new Subject();
26
- this._manualActiveNavigationIndex = signal(null);
27
- this.elementRef = inject(ElementRef);
28
- this.itemSize = input('auto');
29
- this.direction = input('horizontal');
30
- this.scrollableRole = input(null);
31
- this.scrollableClass = input(null);
32
- this.renderNavigation = input(false, { transform: booleanAttribute });
33
- this.renderMasks = input(true, { transform: booleanAttribute });
34
- this.renderButtons = input(true, { transform: booleanAttribute });
35
- this.buttonPosition = input('inside');
36
- this.renderScrollbars = input(false, { transform: booleanAttribute });
37
- this.stickyButtons = input(false, { transform: booleanAttribute });
38
- this.cursorDragScroll = input(true, { transform: booleanAttribute });
39
- this.disableActiveElementScrolling = input(false, { transform: booleanAttribute });
40
- this.scrollMode = input('container');
41
- this.snap = input(false, { transform: booleanAttribute });
42
- this.scrollMargin = input(0, { transform: numberAttribute });
43
- this.scrollOrigin = input('auto');
44
- this.darkenNonIntersectingItems = input(false, { transform: booleanAttribute });
45
- this.showLoadingTemplate = input(false, { transform: booleanAttribute });
46
- this.loadingTemplatePosition = input('end');
47
- this.scrollable = viewChild('scrollable');
48
- this.firstElement = viewChild('firstElement');
49
- this.lastElement = viewChild('lastElement');
50
- this.activeElementList = contentChildren(SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, { descendants: true });
51
- this.navigationDotsContainer = viewChild('navigationDotsContainer');
52
- this.firstNavigationDot = viewChild('navigationDot');
53
- this.loadingTemplate = contentChild(SCROLLABLE_LOADING_TEMPLATE_TOKEN);
54
- this.navigationDotDimensions = signalElementDimensions(this.firstNavigationDot);
55
- this.scrollState = signalElementScrollState(this.scrollable);
56
- this.isRendered = createIsRenderedSignal();
57
- this.canAnimate = createCanAnimateSignal();
58
- this.cursorDragScrollState = useCursorDragScroll(this.scrollable, {
59
- enabled: this.cursorDragScroll,
60
- allowedDirection: this.direction,
61
- });
62
- this.isCursorDragging$ = toObservable(this.cursorDragScrollState.isDragging);
63
- this.renderButtonsInside = computed(() => this.buttonPosition() === 'inside' && this.renderButtons());
64
- this.renderButtonsInFooter = computed(() => this.buttonPosition() === 'footer' && this.renderButtons());
65
- this.containerScrollState = signalElementScrollState(this.scrollable, {
66
- initialScrollPosition: computed(() => {
67
- const scrollable = this.scrollable()?.nativeElement;
68
- const activeElementList = this.activeElementList();
69
- if (!scrollable || !activeElementList.length || !this.isRendered.state())
70
- return null;
71
- const firstActive = activeElementList.find((a) => a.isActiveChildEnabled());
72
- if (firstActive && !this.disableActiveElementScrolling()) {
73
- return this.getElementScrollCoordinates({ element: firstActive.elementRef.nativeElement });
74
- }
75
- return null;
76
- }),
77
- });
78
- this.firstElementIntersection = signalElementIntersection(this.firstElement, {
79
- root: this.scrollable,
80
- enabled: this.isRendered.state,
81
- });
82
- this.lastElementIntersection = signalElementIntersection(this.lastElement, {
83
- root: this.scrollable,
84
- enabled: this.isRendered.state,
85
- });
86
- this.allScrollableChildren = signalElementChildren(this.scrollable);
87
- this.scrollableChildren = computed(() => this.allScrollableChildren().filter((c) => !isScrollableChildIgnored(c)));
88
- this.scrollableContentIntersections = signalElementIntersection(this.scrollableChildren, {
89
- root: this.scrollable,
90
- threshold: ELEMENT_INTERSECTION_THRESHOLD,
91
- enabled: this.isRendered.state,
92
- });
93
- this.scrollableContentIntersections$ = toObservable(this.scrollableContentIntersections);
94
- this.nonScrollableIntersections = computed(() => {
95
- const allIntersections = this.scrollableContentIntersections();
96
- return allIntersections.filter((i) => i.intersectionRatio !== 1).map((i) => i.target);
97
- }, { equal: (a, b) => a.length === b.length && a.every((v, i) => v === b[i]) });
98
- this.isAtStart = computed(() => {
99
- const intersection = this.firstElementIntersection()[0];
100
- if (!intersection)
101
- return false;
102
- return intersection.isIntersecting;
103
- });
104
- this.isAtEnd = computed(() => {
105
- const intersection = this.lastElementIntersection()[0];
106
- if (!intersection)
107
- return false;
108
- return intersection.isIntersecting;
109
- });
110
- this.canScroll = computed(() => this.direction() === 'horizontal'
111
- ? this.scrollState().canScrollHorizontally
112
- : this.scrollState().canScrollVertically);
113
- this.scrollableNavigation = computed(() => {
114
- const allIntersections = this.scrollableContentIntersections();
115
- const manualActiveNavigationIndex = this._manualActiveNavigationIndex();
116
- const highestIntersection = allIntersections.reduce((prev, curr) => {
117
- if (prev && prev.intersectionRatio > curr.intersectionRatio) {
118
- return prev;
119
- }
120
- return curr;
121
- }, allIntersections[0]);
122
- if (!highestIntersection) {
123
- return [];
124
- }
125
- const activeIndex = manualActiveNavigationIndex !== null
126
- ? manualActiveNavigationIndex
127
- : allIntersections.findIndex((i) => i === highestIntersection);
128
- return allIntersections.map((i, index) => ({
129
- isActive: manualActiveNavigationIndex !== null
130
- ? manualActiveNavigationIndex === index
131
- : i === highestIntersection && highestIntersection.intersectionRatio > 0,
132
- activeOffset: index === activeIndex ? 0 : Math.abs(index - activeIndex),
133
- element: i.target,
134
- }));
135
- }, { equal: (a, b) => a.length === b.length && a.every((v, i) => v.activeOffset === b[i]?.activeOffset) });
136
- this.activeIndex = computed(() => {
137
- const scrollableNavigation = this.scrollableNavigation();
138
- const activeIndex = scrollableNavigation.findIndex((element) => element.isActive);
139
- return activeIndex;
140
- });
141
- this.intersectionChange = outputFromObservable(this.scrollableContentIntersections$.pipe(takeUntilDestroyed(), debounceTime(50), map((entries) => entries.map((i, index) => ({
142
- index,
143
- element: i.target,
144
- intersectionRatio: i.intersectionRatio,
145
- isIntersecting: i.isIntersecting,
146
- })))));
147
- this.scrollStateChange = outputFromObservable(toObservable(computed(() => {
148
- const isAtStart = this.isAtStart();
149
- const isAtEnd = this.isAtEnd();
150
- const canScroll = this.canScroll();
151
- return {
152
- canScroll,
153
- isAtEnd: !!isAtEnd,
154
- isAtStart: !!isAtStart,
155
- };
156
- })));
157
- this.allChildElementClassBindings = signalClasses(this.scrollableChildren, {
158
- 'et-scrollable-item': signal(true),
159
- });
160
- this.nonFullIntersectingElementClassBindings = signalClasses(this.nonScrollableIntersections, {
161
- 'et-scrollable-item--not-intersecting': signal(true),
162
- });
163
- this.hostAttributeBindings = signalHostAttributes({
164
- 'item-size': this.itemSize,
165
- direction: this.direction,
166
- 'render-scrollbars': this.renderScrollbars,
167
- 'sticky-buttons': computed(() => this.stickyButtons() && this.renderButtonsInside()),
168
- });
169
- this.hostClassBindings = signalHostClasses({
170
- 'et-scrollable--can-scroll': this.canScroll,
171
- 'et-scrollable--is-at-start': this.isAtStart,
172
- 'et-scrollable--is-at-end': this.isAtEnd,
173
- 'et-scrollable--can-animate': this.canAnimate.state,
174
- 'et-scrollable--darken-non-intersecting-items': this.darkenNonIntersectingItems,
175
- });
176
- this.hostStyleBindings = signalHostStyles({
177
- '--item-count': computed(() => this.scrollableChildren().length),
178
- });
179
- this.scrollableDotsContainerStyleBindings = signalStyles(this.navigationDotsContainer, {
180
- // Responsible for centering the active dot in navigation bar by using 'translate'
181
- transform: computed(() => {
182
- const activeIndex = this.activeIndex();
183
- const childCount = this.scrollableChildren().length;
184
- const offset = this.getNavigationDotsContainerTranslate(childCount, activeIndex);
185
- const dir = this.direction() === 'horizontal' ? 'X' : 'Y';
186
- return `translate${dir}(${offset})`;
187
- }),
188
- });
189
- effect(() => {
190
- const enableSnapping = this.snap();
191
- if (enableSnapping) {
192
- this._enableSnapping();
193
- }
194
- else {
195
- this._disableSnapping();
196
- }
197
- });
198
- toObservable(this._manualActiveNavigationIndex)
199
- .pipe(filter((i) => i !== null), takeUntilDestroyed(), switchMap(() => {
200
- const scrollable = this.scrollable()?.nativeElement;
201
- if (!scrollable) {
202
- return of(null);
203
- }
204
- return fromEvent(scrollable, 'scroll');
205
- }), debounceTime(50), tap(() => this._manualActiveNavigationIndex.set(null)))
206
- .subscribe();
207
- this.isRendered.bind();
208
- }
209
- getNavigationDotsContainerTranslate(navigationDotCount, activeIndex) {
210
- if (navigationDotCount <= 5) {
211
- return '0px';
212
- }
213
- else {
214
- const dotContainerWidth = this.navigationDotDimensions().client?.width ?? 20;
215
- let offset = -(activeIndex - 2);
216
- if (activeIndex < 3) {
217
- offset = 0;
218
- }
219
- else if (activeIndex >= navigationDotCount - 3) {
220
- offset = 5 - navigationDotCount;
221
- }
222
- return `${offset * dotContainerWidth}px`;
223
- }
224
- }
225
- scrollOneContainerSize(direction) {
226
- const scrollElement = this.scrollable()?.nativeElement;
227
- if (!scrollElement) {
228
- return;
229
- }
230
- const parent = this.elementRef.nativeElement;
231
- const isSnappingEnabled = this.snap();
232
- if (isSnappingEnabled) {
233
- // If snapping is enabled we want to scroll to a position where no further snapping will happen after the scroll.
234
- const allIntersections = this.scrollableContentIntersections();
235
- const intersections = getIntersectionInfo(allIntersections);
236
- const relevantIntersection = direction === 'start' ? intersections?.partial.first : intersections?.partial.last;
237
- if (!relevantIntersection)
238
- return;
239
- const nextIndex = relevantIntersection.intersection.intersectionRatio !== 1
240
- ? relevantIntersection.index
241
- : direction === 'start'
242
- ? relevantIntersection.index - 1
243
- : relevantIntersection.index + 1;
244
- const element = allIntersections[nextIndex]?.target ||
245
- relevantIntersection.intersection.target;
246
- this.scrollToElement({
247
- element: element,
248
- origin: direction === 'end' ? 'start' : 'end',
249
- });
250
- }
251
- else {
252
- // Just scroll one size of the scrollable container.
253
- const scrollableSize = this.direction() === 'horizontal' ? parent.clientWidth : parent.clientHeight;
254
- const currentScroll = this.direction() === 'horizontal' ? scrollElement.scrollLeft : scrollElement.scrollTop;
255
- scrollElement.scrollTo({
256
- [this.direction() === 'horizontal' ? 'left' : 'top']: currentScroll + (direction === 'start' ? -scrollableSize : scrollableSize),
257
- behavior: 'smooth',
258
- });
259
- }
260
- }
261
- scrollOneItemSize(direction) {
262
- const allIntersections = this.scrollableContentIntersections();
263
- const scrollElement = this.scrollable()?.nativeElement;
264
- if (!allIntersections.length) {
265
- if (isDevMode()) {
266
- console.warn('No elements found to scroll to. Make sure to apply the isElement directive to the elements you want to scroll to.');
267
- }
268
- return;
269
- }
270
- const intersections = getIntersectionInfo(allIntersections);
271
- if (!intersections || !scrollElement)
272
- return;
273
- // Means the current element is bigger than the scrollable container.
274
- // In this case we should scroll to the start of the current element. If we are already there we should scroll to the end of the previous element.
275
- // This applies to the other direction as well.
276
- const isFirstAndLastIntersectionEqual = intersections.partial.first.intersection === intersections.partial.last.intersection;
277
- const scrollableRect = scrollElement.getBoundingClientRect();
278
- if (isFirstAndLastIntersectionEqual) {
279
- const intersection = intersections.partial.first.intersection.target.getBoundingClientRect();
280
- const isStartOfElementVisible = this.direction() === 'horizontal'
281
- ? Math.round(intersection.left) >= Math.round(scrollableRect.left)
282
- : Math.round(intersection.top) >= Math.round(scrollableRect.top);
283
- const isEndOfElementVisible = this.direction() === 'horizontal'
284
- ? Math.round(intersection.right) <= Math.round(scrollableRect.right)
285
- : Math.round(intersection.bottom) <= Math.round(scrollableRect.bottom);
286
- if (!isStartOfElementVisible || !isEndOfElementVisible) {
287
- if (direction === 'start') {
288
- if (isStartOfElementVisible) {
289
- // to the end of the previous element
290
- const previousIndex = intersections.partial.first.index - 1;
291
- const elementToScrollTo = allIntersections[previousIndex]?.target;
292
- if (!elementToScrollTo)
293
- return;
294
- this.scrollToElement({
295
- element: elementToScrollTo,
296
- origin: 'end',
297
- });
298
- this._manualActiveNavigationIndex.set(previousIndex);
299
- }
300
- else {
301
- // to the start of the current element
302
- this.scrollToElement({
303
- element: intersections.partial.first.intersection.target,
304
- origin: 'start',
305
- });
306
- this._manualActiveNavigationIndex.set(intersections.partial.first.index);
307
- }
308
- }
309
- else {
310
- if (isEndOfElementVisible) {
311
- // to the start of the next element
312
- const nextIndex = intersections.partial.last.index + 1;
313
- const elementToScrollTo = allIntersections[nextIndex]?.target;
314
- if (!elementToScrollTo)
315
- return;
316
- this.scrollToElement({
317
- element: elementToScrollTo,
318
- origin: 'start',
319
- });
320
- this._manualActiveNavigationIndex.set(nextIndex);
321
- }
322
- else {
323
- // to the end of the current element
324
- this.scrollToElement({
325
- element: intersections.partial.last.intersection.target,
326
- origin: 'end',
327
- });
328
- this._manualActiveNavigationIndex.set(intersections.partial.last.index);
329
- }
330
- }
331
- return;
332
- }
333
- }
334
- else if (this.scrollOrigin() === 'center') {
335
- // If the scroll origin is forced to be center we should always snap to the center of the next partial intersection in the scroll direction.
336
- const nextPartialIntersection = direction === 'start' ? intersections.partial.first : intersections.partial.last;
337
- const nextIndex = nextPartialIntersection.index;
338
- this.scrollToElement({
339
- element: nextPartialIntersection.intersection.target,
340
- origin: 'center',
341
- });
342
- this._manualActiveNavigationIndex.set(nextIndex);
343
- return;
344
- }
345
- const data = direction === 'start' ? intersections.partial.first : intersections.partial.last;
346
- let elementToScrollTo = data.intersection.target;
347
- let nextIndex = data.index;
348
- if (Math.round(data.intersection.intersectionRatio) === 1) {
349
- if (direction === 'start' && data.index === 0) {
350
- return;
351
- }
352
- if (direction === 'end' && data.index === allIntersections.length - 1) {
353
- return;
354
- }
355
- nextIndex = direction === 'start' ? data.index - 1 : data.index + 1;
356
- elementToScrollTo = allIntersections[nextIndex]?.target;
357
- if (!elementToScrollTo)
358
- return;
359
- }
360
- this.scrollToElement({
361
- element: elementToScrollTo,
362
- origin: direction,
363
- });
364
- this._manualActiveNavigationIndex.set(nextIndex);
365
- }
366
- getElementScrollCoordinates(options) {
367
- const scrollElement = this.scrollable()?.nativeElement;
368
- const { origin } = options;
369
- const forcedOrigin = this.scrollOrigin();
370
- return getElementScrollCoordinates({
371
- container: scrollElement,
372
- direction: this.direction() === 'horizontal' ? 'inline' : 'block',
373
- ...(this.direction() === 'horizontal'
374
- ? { scrollInlineMargin: this.scrollMargin() }
375
- : { scrollBlockMargin: this.scrollMargin() }),
376
- ...options,
377
- ...(forcedOrigin === 'auto' || options.ignoreForcedOrigin ? { origin } : { origin: forcedOrigin }),
378
- });
379
- }
380
- scrollToElement(options) {
381
- this.scrollable()?.nativeElement.scroll(this.getElementScrollCoordinates(options));
382
- }
383
- scrollToElementByIndex(options) {
384
- const elements = this.scrollableChildren();
385
- const element = elements[options.index];
386
- if (!element)
387
- return;
388
- this.scrollToElement({
389
- element,
390
- ...options,
391
- });
392
- }
393
- scrollToElementViaNavigation(elementIndex) {
394
- const element = this.scrollableChildren()[elementIndex];
395
- this._manualActiveNavigationIndex.set(elementIndex);
396
- this.scrollToElement({
397
- element,
398
- });
399
- }
400
- scrollToStartDirection() {
401
- if (this.scrollMode() === 'container') {
402
- this.scrollOneContainerSize('start');
403
- }
404
- else {
405
- this.scrollOneItemSize('start');
406
- }
407
- }
408
- scrollToEndDirection() {
409
- if (this.scrollMode() === 'container') {
410
- this.scrollOneContainerSize('end');
411
- }
412
- else {
413
- this.scrollOneItemSize('end');
414
- }
415
- }
416
- _enableSnapping() {
417
- combineLatest([this.scrollableContentIntersections$, this.isCursorDragging$])
418
- .pipe(filter(([, isDragging]) => !isDragging), map(([intersections]) => intersections), debounceTime(150), tap((allIntersections) => {
419
- const scrollElement = this.scrollable()?.nativeElement;
420
- if (!scrollElement)
421
- return;
422
- const intersections = getIntersectionInfo(allIntersections);
423
- if (!intersections)
424
- return;
425
- const isFirstAndLastIntersectionEqual = intersections.partial.first.intersection === intersections.partial.last.intersection;
426
- const scrollableRect = scrollElement.getBoundingClientRect();
427
- if (this.scrollOrigin() === 'center' && intersections.full.hasMultiple) {
428
- // If there is more than one fully visible element we should not snap at all.
429
- return;
430
- }
431
- else if (this.scrollOrigin() === 'center' && intersections.full.first.intersection) {
432
- // If there is already a fully visible element we should snap it to the center.
433
- this.scrollToElement({
434
- element: intersections.full.first.intersection.target,
435
- origin: 'center',
436
- });
437
- return;
438
- }
439
- else if (isFirstAndLastIntersectionEqual) {
440
- const intersection = intersections.partial.first.intersection.target.getBoundingClientRect();
441
- const isStartOfElementVisible = this.direction() === 'horizontal'
442
- ? intersection.left >= scrollableRect.left
443
- : intersection.top >= scrollableRect.top;
444
- const isEndOfElementVisible = this.direction() === 'horizontal'
445
- ? intersection.right <= scrollableRect.right
446
- : intersection.bottom <= scrollableRect.bottom;
447
- // Don't snap if neither the start nor the end of the current element is visible.
448
- // Otherwise this would result in parts of the element being inaccessible.
449
- if (!isStartOfElementVisible && !isEndOfElementVisible)
450
- return;
451
- // If the start of the element is visible we should snap to the start.
452
- if (isStartOfElementVisible) {
453
- this.scrollToElement({
454
- element: intersections.partial.first.intersection.target,
455
- origin: 'start',
456
- });
457
- return;
458
- }
459
- // If the end of the element is visible we should snap to the end.
460
- if (isEndOfElementVisible) {
461
- this.scrollToElement({
462
- element: intersections.partial.last.intersection.target,
463
- origin: 'end',
464
- });
465
- return;
466
- }
467
- }
468
- else if ((this.direction() === 'horizontal' &&
469
- intersections.partial.biggest.intersection.boundingClientRect.width > scrollableRect.width) ||
470
- (this.direction() === 'vertical' &&
471
- intersections.partial.biggest.intersection.boundingClientRect.height > scrollableRect.height)) {
472
- // If the current element is bigger than the scrollable container we should snap to the start of the current element if the scroll direction is forward
473
- // and to the end of the current element if the scroll direction is backwards.
474
- const origin = intersections.partial.biggest.index === intersections.partial.first.index ? 'end' : 'start';
475
- this.scrollToElement({
476
- element: intersections.partial.biggest.intersection.target,
477
- origin,
478
- ignoreForcedOrigin: true,
479
- });
480
- }
481
- else {
482
- // No special case. Just snap to the biggest intersection.
483
- this.scrollToElement({
484
- element: intersections.partial.biggest.intersection.target,
485
- });
486
- }
487
- }), takeUntil(this._disableSnapping$))
488
- .subscribe();
489
- }
490
- _disableSnapping() {
491
- this._disableSnapping$.next();
492
- }
493
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScrollableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
494
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, scrollableRole: { classPropertyName: "scrollableRole", publicName: "scrollableRole", isSignal: true, isRequired: false, transformFunction: null }, scrollableClass: { classPropertyName: "scrollableClass", publicName: "scrollableClass", isSignal: true, isRequired: false, transformFunction: null }, renderNavigation: { classPropertyName: "renderNavigation", publicName: "renderNavigation", isSignal: true, isRequired: false, transformFunction: null }, renderMasks: { classPropertyName: "renderMasks", publicName: "renderMasks", isSignal: true, isRequired: false, transformFunction: null }, renderButtons: { classPropertyName: "renderButtons", publicName: "renderButtons", isSignal: true, isRequired: false, transformFunction: null }, buttonPosition: { classPropertyName: "buttonPosition", publicName: "buttonPosition", isSignal: true, isRequired: false, transformFunction: null }, renderScrollbars: { classPropertyName: "renderScrollbars", publicName: "renderScrollbars", isSignal: true, isRequired: false, transformFunction: null }, stickyButtons: { classPropertyName: "stickyButtons", publicName: "stickyButtons", isSignal: true, isRequired: false, transformFunction: null }, cursorDragScroll: { classPropertyName: "cursorDragScroll", publicName: "cursorDragScroll", isSignal: true, isRequired: false, transformFunction: null }, disableActiveElementScrolling: { classPropertyName: "disableActiveElementScrolling", publicName: "disableActiveElementScrolling", isSignal: true, isRequired: false, transformFunction: null }, scrollMode: { classPropertyName: "scrollMode", publicName: "scrollMode", isSignal: true, isRequired: false, transformFunction: null }, snap: { classPropertyName: "snap", publicName: "snap", isSignal: true, isRequired: false, transformFunction: null }, scrollMargin: { classPropertyName: "scrollMargin", publicName: "scrollMargin", isSignal: true, isRequired: false, transformFunction: null }, scrollOrigin: { classPropertyName: "scrollOrigin", publicName: "scrollOrigin", isSignal: true, isRequired: false, transformFunction: null }, darkenNonIntersectingItems: { classPropertyName: "darkenNonIntersectingItems", publicName: "darkenNonIntersectingItems", isSignal: true, isRequired: false, transformFunction: null }, showLoadingTemplate: { classPropertyName: "showLoadingTemplate", publicName: "showLoadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplatePosition: { classPropertyName: "loadingTemplatePosition", publicName: "loadingTemplatePosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intersectionChange: "intersectionChange", scrollStateChange: "scrollStateChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "activeElementList", predicate: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, descendants: true, isSignal: true }, { propertyName: "loadingTemplate", first: true, predicate: SCROLLABLE_LOADING_TEMPLATE_TOKEN, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "scrollable", first: true, predicate: ["scrollable"], descendants: true, isSignal: true }, { propertyName: "firstElement", first: true, predicate: ["firstElement"], descendants: true, isSignal: true }, { propertyName: "lastElement", first: true, predicate: ["lastElement"], descendants: true, isSignal: true }, { propertyName: "navigationDotsContainer", first: true, predicate: ["navigationDotsContainer"], descendants: true, isSignal: true }, { propertyName: "firstNavigationDot", first: true, predicate: ["navigationDot"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n @if (loadingTemplatePosition() === 'start' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n <ng-content />\n @if (loadingTemplatePosition() === 'end' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if ((renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().length > 1)) && canScroll()) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter(),\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation()[i + 1]?.isActive || scrollableNavigation()[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation()[i + 1]?.isActive && !scrollableNavigation()[i - 1]?.isActive && !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n\n<ng-template #loadingTpl>\n @if (loadingTemplate(); as tpl) {\n @for (\n _ of tpl.repeat();\n track index;\n let index = $index;\n let even = $even;\n let odd = $odd;\n let first = $first;\n let last = $last\n ) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { index, even, odd, first, last }\" />\n }\n }\n</ng-template>\n", styles: [":where(.et-scrollable){--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container,.et-scrollable:not([render-scrollbars]) .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar,.et-scrollable:not([render-scrollbars]) .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-chevron-icon{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container,.et-scrollable:not([direction]) .et-scrollable-container{grid-auto-flow:column;grid-auto-columns:var(--_auto-size);overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button,.et-scrollable:not([direction]) .et-scrollable-mask,.et-scrollable:not([direction]) .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-chevron-icon,.et-scrollable:not([direction]) .et-scrollable-button--start .et-chevron-icon{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-chevron-icon,.et-scrollable:not([direction]) .et-scrollable-button--end .et-chevron-icon{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-flow:row;grid-auto-rows:var(--_auto-size);overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-chevron-icon{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-chevron-icon{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: ScrollableIgnoreChildDirective, selector: "[etScrollableIgnoreChild]", inputs: ["etScrollableIgnoreChild"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
495
- }
496
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScrollableComponent, decorators: [{
497
- type: Component,
498
- args: [{ selector: 'et-scrollable', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
499
- ObserveScrollStateDirective,
500
- NgClass,
501
- LetDirective,
502
- ChevronIconComponent,
503
- ScrollableIsActiveChildDirective,
504
- ScrollableIgnoreChildDirective,
505
- NgTemplateOutlet,
506
- ], host: {
507
- class: 'et-scrollable',
508
- }, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n @if (loadingTemplatePosition() === 'start' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n <ng-content />\n @if (loadingTemplatePosition() === 'end' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if ((renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().length > 1)) && canScroll()) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter(),\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation()[i + 1]?.isActive || scrollableNavigation()[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation()[i + 1]?.isActive && !scrollableNavigation()[i - 1]?.isActive && !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</ng-template>\n\n<ng-template #loadingTpl>\n @if (loadingTemplate(); as tpl) {\n @for (\n _ of tpl.repeat();\n track index;\n let index = $index;\n let even = $even;\n let odd = $odd;\n let first = $first;\n let last = $last\n ) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { index, even, odd, first, last }\" />\n }\n }\n</ng-template>\n", styles: [":where(.et-scrollable){--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container,.et-scrollable:not([render-scrollbars]) .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar,.et-scrollable:not([render-scrollbars]) .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-chevron-icon{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container,.et-scrollable:not([direction]) .et-scrollable-container{grid-auto-flow:column;grid-auto-columns:var(--_auto-size);overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button,.et-scrollable:not([direction]) .et-scrollable-mask,.et-scrollable:not([direction]) .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-chevron-icon,.et-scrollable:not([direction]) .et-scrollable-button--start .et-chevron-icon{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-chevron-icon,.et-scrollable:not([direction]) .et-scrollable-button--end .et-chevron-icon{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-flow:row;grid-auto-rows:var(--_auto-size);overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-chevron-icon{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-chevron-icon{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"] }]
509
- }], ctorParameters: () => [] });
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRyxPQUFPLEVBQ0wsWUFBWSxFQUVaLDJCQUEyQixFQUczQixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4QixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osbUJBQW1CLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxF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bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkLFxuICBjb250ZW50Q2hpbGRyZW4sXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgaXNEZXZNb2RlLFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIExldERpcmVjdGl2ZSxcbiAgTmdDbGFzc1R5cGUsXG4gIE9ic2VydmVTY3JvbGxTdGF0ZURpcmVjdGl2ZSxcbiAgU2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZSxcbiAgU2Nyb2xsVG9FbGVtZW50T3B0aW9ucyxcbiAgY3JlYXRlQ2FuQW5pbWF0ZVNpZ25hbCxcbiAgY3JlYXRlSXNSZW5kZXJlZFNpZ25hbCxcbiAgZ2V0RWxlbWVudFNjcm9sbENvb3JkaW5hdGVzLFxuICBnZXRJbnRlcnNlY3Rpb25JbmZvLFxuICBzaWduYWxDbGFzc2VzLFxuICBzaWduYWxFbGVtZW50Q2hpbGRyZW4sXG4gIHNpZ25hbEVsZW1lbnREaW1lbnNpb25zLFxuICBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uLFxuICBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUsXG4gIHNpZ25hbEhvc3RBdHRyaWJ1dGVzLFxuICBzaWduYWxIb3N0Q2xhc3NlcyxcbiAgc2lnbmFsSG9zdFN0eWxlcyxcbiAgc2lnbmFsU3R5bGVzLFxuICB1c2VDdXJzb3JEcmFnU2Nyb2xsLFxufSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoZXZyb25JY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvY2hldnJvbi1pY29uJztcbmltcG9ydCB7IFNjcm9sbGFibGVJZ25vcmVDaGlsZERpcmVjdGl2ZSwgaXNTY3JvbGxhYmxlQ2hpbGRJZ25vcmVkIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zY3JvbGxhYmxlLWlnbm9yZS1jaGlsZCc7XG5pbXBvcnQge1xuICBTQ1JPTExBQkxFX0lTX0FDVElWRV9DSElMRF9UT0tFTixcbiAgU2Nyb2xsYWJsZUlzQWN0aXZlQ2hpbGREaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2Nyb2xsYWJsZS1pcy1hY3RpdmUtY2hpbGQnO1xuaW1wb3J0IHsgU0NST0xMQUJMRV9MT0FESU5HX1RFTVBMQVRFX1RPS0VOIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zY3JvbGxhYmxlLWxvYWRpbmctdGVtcGxhdGUnO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZUludGVyc2VjdGlvbkNoYW5nZSwgU2Nyb2xsYWJsZVNjcm9sbE1vZGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8vIFRocmVzaG9sZHMgZm9yIHRoZSBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIuXG5jb25zdCBFTEVNRU5UX0lOVEVSU0VDVElPTl9USFJFU0hPTEQgPSBbXG4gIC8vIDUlIHN0ZXBzXG4gIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IDIxIH0sIChfLCBpKSA9PiBpICogMC4wNSksXG5cbiAgLy8gQWRkaXRpb25hbCBzdGVwcyBuZWVkZWQgc2luY2UgZGlzcGxheSBzY2FsaW5nIGNhbiBjYXVzZSB0aGUgaW50ZXJzZWN0aW9uIHJhdGlvIHRvIGJlIHNsaWdodGx5IG9mZi5cbiAgMC4wMSxcbiAgMC4wMDUsXG4gIDAuMDAxLFxuICAwLjk5LFxuICAwLjk5NSxcbiAgMC45OTksXG5dO1xuXG5pbnRlcmZhY2UgU2Nyb2xsYWJsZU5hdmlnYXRpb25JdGVtIHtcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG4gIGFjdGl2ZU9mZnNldDogbnVtYmVyO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuZXhwb3J0IHR5cGUgU2Nyb2xsYWJsZUJ1dHRvblBvc2l0aW9uID0gJ2luc2lkZScgfCAnZm9vdGVyJztcbmV4cG9ydCB0eXBlIFNjcm9sbGFibGVTY3JvbGxPcmlnaW4gPSAnYXV0bycgfCAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJztcbmV4cG9ydCB0eXBlIFNjcm9sbGFibGVEaXJlY3Rpb24gPSAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuZXhwb3J0IHR5cGUgU2Nyb2xsYWJsZUl0ZW1TaXplID0gJ2F1dG8nIHwgJ3NhbWUnIHwgJ2Z1bGwnO1xuZXhwb3J0IHR5cGUgU2Nyb2xsYWJsZUxvYWRpbmdUZW1wbGF0ZVBvc2l0aW9uID0gJ3N0YXJ0JyB8ICdlbmQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1zY3JvbGxhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Njcm9sbGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zY3JvbGxhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgT2JzZXJ2ZVNjcm9sbFN0YXRlRGlyZWN0aXZlLFxuICAgIE5nQ2xhc3MsXG4gICAgTGV0RGlyZWN0aXZlLFxuICAgIENoZXZyb25JY29uQ29tcG9uZW50LFxuICAgIFNjcm9sbGFibGVJc0FjdGl2ZUNoaWxkRGlyZWN0aXZlLFxuICAgIFNjcm9sbGFibGVJZ25vcmVDaGlsZERpcmVjdGl2ZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICBdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1zY3JvbGxhYmxlJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsYWJsZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgX2Rpc2FibGVTbmFwcGluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXggPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgaXRlbVNpemUgPSBpbnB1dDxTY3JvbGxhYmxlSXRlbVNpemU+KCdhdXRvJyk7XG4gIGRpcmVjdGlvbiA9IGlucHV0PFNjcm9sbGFibGVEaXJlY3Rpb24+KCdob3Jpem9udGFsJyk7XG4gIHNjcm9sbGFibGVSb2xlID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHNjcm9sbGFibGVDbGFzcyA9IGlucHV0PE5nQ2xhc3NUeXBlIHwgbnVsbD4obnVsbCk7XG4gIHJlbmRlck5hdmlnYXRpb24gPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gIHJlbmRlck1hc2tzID0gaW5wdXQodHJ1ZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gIHJlbmRlckJ1dHRvbnMgPSBpbnB1dCh0cnVlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgYnV0dG9uUG9zaXRpb24gPSBpbnB1dDxTY3JvbGxhYmxlQnV0dG9uUG9zaXRpb24+KCdpbnNpZGUnKTtcbiAgcmVuZGVyU2Nyb2xsYmFycyA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgc3RpY2t5QnV0dG9ucyA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgY3Vyc29yRHJhZ1Njcm9sbCA9IGlucHV0KHRydWUsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICBkaXNhYmxlQWN0aXZlRWxlbWVudFNjcm9sbGluZyA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgc2Nyb2xsTW9kZSA9IGlucHV0PFNjcm9sbGFibGVTY3JvbGxNb2RlPignY29udGFpbmVyJyk7XG4gIHNuYXAgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gIHNjcm9sbE1hcmdpbiA9IGlucHV0KDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG4gIHNjcm9sbE9yaWdpbiA9IGlucHV0PFNjcm9sbGFibGVTY3JvbGxPcmlnaW4+KCdhdXRvJyk7XG4gIGRhcmtlbk5vbkludGVyc2VjdGluZ0l0ZW1zID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICBzaG93TG9hZGluZ1RlbXBsYXRlID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICBsb2FkaW5nVGVtcGxhdGVQb3NpdGlvbiA9IGlucHV0PFNjcm9sbGFibGVMb2FkaW5nVGVtcGxhdGVQb3NpdGlvbj4oJ2VuZCcpO1xuXG4gIHNjcm9sbGFibGUgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdzY3JvbGxhYmxlJyk7XG4gIGZpcnN0RWxlbWVudCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2ZpcnN0RWxlbWVudCcpO1xuICBsYXN0RWxlbWVudCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2xhc3RFbGVtZW50Jyk7XG4gIGFjdGl2ZUVsZW1lbnRMaXN0ID0gY29udGVudENoaWxkcmVuKFNDUk9MTEFCTEVfSVNfQUNUSVZFX0NISUxEX1RPS0VOLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pO1xuICBuYXZpZ2F0aW9uRG90c0NvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ25hdmlnYXRpb25Eb3RzQ29udGFpbmVyJyk7XG4gIGZpcnN0TmF2aWdhdGlvbkRvdCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50Pj4oJ25hdmlnYXRpb25Eb3QnKTtcblxuICBsb2FkaW5nVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoU0NST0xMQUJMRV9MT0FESU5HX1RFTVBMQVRFX1RPS0VOKTtcblxuICBuYXZpZ2F0aW9uRG90RGltZW5zaW9ucyA9IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zKHRoaXMuZmlyc3ROYXZpZ2F0aW9uRG90KTtcbiAgc2Nyb2xsU3RhdGUgPSBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUodGhpcy5zY3JvbGxhYmxlKTtcblxuICBpc1JlbmRlcmVkID0gY3JlYXRlSXNSZW5kZXJlZFNpZ25hbCgpO1xuICBjYW5BbmltYXRlID0gY3JlYXRlQ2FuQW5pbWF0ZVNpZ25hbCgpO1xuXG4gIGN1cnNvckRyYWdTY3JvbGxTdGF0ZSA9IHVzZUN1cnNvckRyYWdTY3JvbGwodGhpcy5zY3JvbGxhYmxlLCB7XG4gICAgZW5hYmxlZDogdGhpcy5jdXJzb3JEcmFnU2Nyb2xsLFxuICAgIGFsbG93ZWREaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uLFxuICB9KTtcbiAgaXNDdXJzb3JEcmFnZ2luZyQgPSB0b09ic2VydmFibGUodGhpcy5jdXJzb3JEcmFnU2Nyb2xsU3RhdGUuaXNEcmFnZ2luZyk7XG5cbiAgcmVuZGVyQnV0dG9uc0luc2lkZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYnV0dG9uUG9zaXRpb24oKSA9PT0gJ2luc2lkZScgJiYgdGhpcy5yZW5kZXJCdXR0b25zKCkpO1xuICByZW5kZXJCdXR0b25zSW5Gb290ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmJ1dHRvblBvc2l0aW9uKCkgPT09ICdmb290ZXInICYmIHRoaXMucmVuZGVyQnV0dG9ucygpKTtcblxuICBjb250YWluZXJTY3JvbGxTdGF0ZSA9IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSh0aGlzLnNjcm9sbGFibGUsIHtcbiAgICBpbml0aWFsU2Nyb2xsUG9zaXRpb246IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbGFibGUgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRMaXN0ID0gdGhpcy5hY3RpdmVFbGVtZW50TGlzdCgpO1xuXG4gICAgICBpZiAoIXNjcm9sbGFibGUgfHwgIWFjdGl2ZUVsZW1lbnRMaXN0Lmxlbmd0aCB8fCAhdGhpcy5pc1JlbmRlcmVkLnN0YXRlKCkpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBmaXJzdEFjdGl2ZSA9IGFjdGl2ZUVsZW1lbnRMaXN0LmZpbmQoKGEpID0+IGEuaXNBY3RpdmVDaGlsZEVuYWJsZWQoKSk7XG5cbiAgICAgIGlmIChmaXJzdEFjdGl2ZSAmJiAhdGhpcy5kaXNhYmxlQWN0aXZlRWxlbWVudFNjcm9sbGluZygpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRTY3JvbGxDb29yZGluYXRlcyh7IGVsZW1lbnQ6IGZpcnN0QWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSksXG4gIH0pO1xuICBmaXJzdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKHRoaXMuZmlyc3RFbGVtZW50LCB7XG4gICAgcm9vdDogdGhpcy5zY3JvbGxhYmxlLFxuICAgIGVuYWJsZWQ6IHRoaXMuaXNSZW5kZXJlZC5zdGF0ZSxcbiAgfSk7XG4gIGxhc3RFbGVtZW50SW50ZXJzZWN0aW9uID0gc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbih0aGlzLmxhc3RFbGVtZW50LCB7XG4gICAgcm9vdDogdGhpcy5zY3JvbGxhYmxlLFxuICAgIGVuYWJsZWQ6IHRoaXMuaXNSZW5kZXJlZC5zdGF0ZSxcbiAgfSk7XG5cbiAgYWxsU2Nyb2xsYWJsZUNoaWxkcmVuID0gc2lnbmFsRWxlbWVudENoaWxkcmVuKHRoaXMuc2Nyb2xsYWJsZSk7XG4gIHNjcm9sbGFibGVDaGlsZHJlbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWxsU2Nyb2xsYWJsZUNoaWxkcmVuKCkuZmlsdGVyKChjKSA9PiAhaXNTY3JvbGxhYmxlQ2hpbGRJZ25vcmVkKGMpKSk7XG5cbiAgc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zID0gc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbih0aGlzLnNjcm9sbGFibGVDaGlsZHJlbiwge1xuICAgIHJvb3Q6IHRoaXMuc2Nyb2xsYWJsZSxcbiAgICB0aHJlc2hvbGQ6IEVMRU1FTlRfSU5URVJTRUNUSU9OX1RIUkVTSE9MRCxcbiAgICBlbmFibGVkOiB0aGlzLmlzUmVuZGVyZWQuc3RhdGUsXG4gIH0pO1xuICBzY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMkID0gdG9PYnNlcnZhYmxlKHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zKTtcblxuICBub25TY3JvbGxhYmxlSW50ZXJzZWN0aW9ucyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgICAgcmV0dXJuIGFsbEludGVyc2VjdGlvbnMuZmlsdGVyKChpKSA9PiBpLmludGVyc2VjdGlvblJhdGlvICE9PSAxKS5tYXAoKGkpID0+IGkudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB9LFxuICAgIHsgZXF1YWw6IChhLCBiKSA9PiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gYltpXSkgfSxcbiAgKTtcblxuICBpc0F0U3RhcnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaW50ZXJzZWN0aW9uID0gdGhpcy5maXJzdEVsZW1lbnRJbnRlcnNlY3Rpb24oKVswXTtcblxuICAgIGlmICghaW50ZXJzZWN0aW9uKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gaW50ZXJzZWN0aW9uLmlzSW50ZXJzZWN0aW5nO1xuICB9KTtcblxuICBpc0F0RW5kID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IHRoaXMubGFzdEVsZW1lbnRJbnRlcnNlY3Rpb24oKVswXTtcblxuICAgIGlmICghaW50ZXJzZWN0aW9uKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gaW50ZXJzZWN0aW9uLmlzSW50ZXJzZWN0aW5nO1xuICB9KTtcblxuICBjYW5TY3JvbGwgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgPyB0aGlzLnNjcm9sbFN0YXRlKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5XG4gICAgICA6IHRoaXMuc2Nyb2xsU3RhdGUoKS5jYW5TY3JvbGxWZXJ0aWNhbGx5LFxuICApO1xuXG4gIHNjcm9sbGFibGVOYXZpZ2F0aW9uID0gY29tcHV0ZWQ8U2Nyb2xsYWJsZU5hdmlnYXRpb25JdGVtW10+KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgICAgY29uc3QgbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID0gdGhpcy5fbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4KCk7XG5cbiAgICAgIGNvbnN0IGhpZ2hlc3RJbnRlcnNlY3Rpb24gPSBhbGxJbnRlcnNlY3Rpb25zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICBpZiAocHJldiAmJiBwcmV2LmludGVyc2VjdGlvblJhdGlvID4gY3Vyci5pbnRlcnNlY3Rpb25SYXRpbykge1xuICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnI7XG4gICAgICB9LCBhbGxJbnRlcnNlY3Rpb25zWzBdKTtcblxuICAgICAgaWYgKCFoaWdoZXN0SW50ZXJzZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aXZlSW5kZXggPVxuICAgICAgICBtYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXggIT09IG51bGxcbiAgICAgICAgICA/IG1hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleFxuICAgICAgICAgIDogYWxsSW50ZXJzZWN0aW9ucy5maW5kSW5kZXgoKGkpID0+IGkgPT09IGhpZ2hlc3RJbnRlcnNlY3Rpb24pO1xuXG4gICAgICByZXR1cm4gYWxsSW50ZXJzZWN0aW9ucy5tYXAoKGksIGluZGV4KSA9PiAoe1xuICAgICAgICBpc0FjdGl2ZTpcbiAgICAgICAgICBtYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID09PSBpbmRleFxuICAgICAgICAgICAgOiBpID09PSBoaWdoZXN0SW50ZXJzZWN0aW9uICYmIGhpZ2hlc3RJbnRlcnNlY3Rpb24uaW50ZXJzZWN0aW9uUmF0aW8gPiAwLFxuICAgICAgICBhY3RpdmVPZmZzZXQ6IGluZGV4ID09PSBhY3RpdmVJbmRleCA/IDAgOiBNYXRoLmFicyhpbmRleCAtIGFjdGl2ZUluZGV4KSxcbiAgICAgICAgZWxlbWVudDogaS50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICB9KSk7XG4gICAgfSxcbiAgICB7IGVxdWFsOiAoYSwgYikgPT4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoKHYsIGkpID0+IHYuYWN0aXZlT2Zmc2V0ID09PSBiW2ldPy5hY3RpdmVPZmZzZXQpIH0sXG4gICk7XG5cbiAgYWN0aXZlSW5kZXggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsYWJsZU5hdmlnYXRpb24gPSB0aGlzLnNjcm9sbGFibGVOYXZpZ2F0aW9uKCk7XG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSBzY3JvbGxhYmxlTmF2aWdhdGlvbi5maW5kSW5kZXgoKGVsZW1lbnQpID0+IGVsZW1lbnQuaXNBY3RpdmUpO1xuXG4gICAgcmV0dXJuIGFjdGl2ZUluZGV4O1xuICB9KTtcblxuICBpbnRlcnNlY3Rpb25DaGFuZ2UgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZTxTY3JvbGxhYmxlSW50ZXJzZWN0aW9uQ2hhbmdlW10+KFxuICAgIHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zJC5waXBlKFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgbWFwKChlbnRyaWVzKSA9PlxuICAgICAgICBlbnRyaWVzLm1hcCgoaSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZWxlbWVudDogaS50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgaW50ZXJzZWN0aW9uUmF0aW86IGkuaW50ZXJzZWN0aW9uUmF0aW8sXG4gICAgICAgICAgaXNJbnRlcnNlY3Rpbmc6IGkuaXNJbnRlcnNlY3RpbmcsXG4gICAgICAgIH0pKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBzY3JvbGxTdGF0ZUNoYW5nZSA9IG91dHB1dEZyb21PYnNlcnZhYmxlPFNjcm9sbE9ic2VydmVyU2Nyb2xsU3RhdGU+KFxuICAgIHRvT2JzZXJ2YWJsZShcbiAgICAgIGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaXNBdFN0YXJ0ID0gdGhpcy5pc0F0U3RhcnQoKTtcbiAgICAgICAgY29uc3QgaXNBdEVuZCA9IHRoaXMuaXNBdEVuZCgpO1xuICAgICAgICBjb25zdCBjYW5TY3JvbGwgPSB0aGlzLmNhblNjcm9sbCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2FuU2Nyb2xsLFxuICAgICAgICAgIGlzQXRFbmQ6ICEhaXNBdEVuZCxcbiAgICAgICAgICBpc0F0U3RhcnQ6ICEhaXNBdFN0YXJ0LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKSxcbiAgKTtcblxuICBhbGxDaGlsZEVsZW1lbnRDbGFzc0JpbmRpbmdzID0gc2lnbmFsQ2xhc3Nlcyh0aGlzLnNjcm9sbGFibGVDaGlsZHJlbiwge1xuICAgICdldC1zY3JvbGxhYmxlLWl0ZW0nOiBzaWduYWwodHJ1ZSksXG4gIH0pO1xuXG4gIG5vbkZ1bGxJbnRlcnNlY3RpbmdFbGVtZW50Q2xhc3NCaW5kaW5ncyA9IHNpZ25hbENsYXNzZXModGhpcy5ub25TY3JvbGxhYmxlSW50ZXJzZWN0aW9ucywge1xuICAgICdldC1zY3JvbGxhYmxlLWl0ZW0tLW5vdC1pbnRlcnNlY3RpbmcnOiBzaWduYWwodHJ1ZSksXG4gIH0pO1xuXG4gIGhvc3RBdHRyaWJ1dGVCaW5kaW5ncyA9IHNpZ25hbEhvc3RBdHRyaWJ1dGVzKHtcbiAgICAnaXRlbS1zaXplJzogdGhpcy5pdGVtU2l6ZSxcbiAgICBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uLFxuICAgICdyZW5kZXItc2Nyb2xsYmFycyc6IHRoaXMucmVuZGVyU2Nyb2xsYmFycyxcbiAgICAnc3RpY2t5LWJ1dHRvbnMnOiBjb21wdXRlZCgoKSA9PiB0aGlzLnN0aWNreUJ1dHRvbnMoKSAmJiB0aGlzLnJlbmRlckJ1dHRvbnNJbnNpZGUoKSksXG4gIH0pO1xuXG4gIGhvc3RDbGFzc0JpbmRpbmdzID0gc2lnbmFsSG9zdENsYXNzZXMoe1xuICAgICdldC1zY3JvbGxhYmxlLS1jYW4tc2Nyb2xsJzogdGhpcy5jYW5TY3JvbGwsXG4gICAgJ2V0LXNjcm9sbGFibGUtLWlzLWF0LXN0YXJ0JzogdGhpcy5pc0F0U3RhcnQsXG4gICAgJ2V0LXNjcm9sbGFibGUtLWlzLWF0LWVuZCc6IHRoaXMuaXNBdEVuZCxcbiAgICAnZXQtc2Nyb2xsYWJsZS0tY2FuLWFuaW1hdGUnOiB0aGlzLmNhbkFuaW1hdGUuc3RhdGUsXG4gICAgJ2V0LXNjcm9sbGFibGUtLWRhcmtlbi1ub24taW50ZXJzZWN0aW5nLWl0ZW1zJzogdGhpcy5kYXJrZW5Ob25JbnRlcnNlY3RpbmdJdGVtcyxcbiAgfSk7XG5cbiAgaG9zdFN0eWxlQmluZGluZ3MgPSBzaWduYWxIb3N0U3R5bGVzKHtcbiAgICAnLS1pdGVtLWNvdW50JzogY29tcHV0ZWQoKCkgPT4gdGhpcy5zY3JvbGxhYmxlQ2hpbGRyZW4oKS5sZW5ndGgpLFxuICB9KTtcblxuICBzY3JvbGxhYmxlRG90c0NvbnRhaW5lclN0eWxlQmluZGluZ3MgPSBzaWduYWxTdHlsZXModGhpcy5uYXZpZ2F0aW9uRG90c0NvbnRhaW5lciwge1xuICAgIC8vIFJlc3BvbnNpYmxlIGZvciBjZW50ZXJpbmcgdGhlIGFjdGl2ZSBkb3QgaW4gbmF2aWdhdGlvbiBiYXIgYnkgdXNpbmcgJ3RyYW5zbGF0ZSdcbiAgICB0cmFuc2Zvcm06IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleCgpO1xuICAgICAgY29uc3QgY2hpbGRDb3VudCA9IHRoaXMuc2Nyb2xsYWJsZUNoaWxkcmVuKCkubGVuZ3RoO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5nZXROYXZpZ2F0aW9uRG90c0NvbnRhaW5lclRyYW5zbGF0ZShjaGlsZENvdW50LCBhY3RpdmVJbmRleCk7XG4gICAgICBjb25zdCBkaXIgPSB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyAnWCcgOiAnWSc7XG5cbiAgICAgIHJldHVybiBgdHJhbnNsYXRlJHtkaXJ9KCR7b2Zmc2V0fSlgO1xuICAgIH0pLFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZW5hYmxlU25hcHBpbmcgPSB0aGlzLnNuYXAoKTtcblxuICAgICAgaWYgKGVuYWJsZVNuYXBwaW5nKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZVNuYXBwaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kaXNhYmxlU25hcHBpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXgpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChpKSA9PiBpICE9PSBudWxsKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZSA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgaWYgKCFzY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZyb21FdmVudChzY3JvbGxhYmxlLCAnc2Nyb2xsJyk7XG4gICAgICAgIH0pLFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4LnNldChudWxsKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmlzUmVuZGVyZWQuYmluZCgpO1xuICB9XG5cbiAgZ2V0TmF2aWdhdGlvbkRvdHNDb250YWluZXJUcmFuc2xhdGUobmF2aWdhdGlvbkRvdENvdW50OiBudW1iZXIsIGFjdGl2ZUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAobmF2aWdhdGlvbkRvdENvdW50IDw9IDUpIHtcbiAgICAgIHJldHVybiAnMHB4JztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZG90Q29udGFpbmVyV2lkdGggPSB0aGlzLm5hdmlnYXRpb25Eb3REaW1lbnNpb25zKCkuY2xpZW50Py53aWR0aCA/PyAyMDtcbiAgICAgIGxldCBvZmZzZXQgPSAtKGFjdGl2ZUluZGV4IC0gMik7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPCAzKSB7XG4gICAgICAgIG9mZnNldCA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUluZGV4ID49IG5hdmlnYXRpb25Eb3RDb3VudCAtIDMpIHtcbiAgICAgICAgb2Zmc2V0ID0gNSAtIG5hdmlnYXRpb25Eb3RDb3VudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgJHtvZmZzZXQgKiBkb3RDb250YWluZXJXaWR0aH1weGA7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsT25lQ29udGFpbmVyU2l6ZShkaXJlY3Rpb246ICdzdGFydCcgfCAnZW5kJykge1xuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghc2Nyb2xsRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3QgaXNTbmFwcGluZ0VuYWJsZWQgPSB0aGlzLnNuYXAoKTtcblxuICAgIGlmIChpc1NuYXBwaW5nRW5hYmxlZCkge1xuICAgICAgLy8gSWYgc25hcHBpbmcgaXMgZW5hYmxlZCB3ZSB3YW50IHRvIHNjcm9sbCB0byBhIHBvc2l0aW9uIHdoZXJlIG5vIGZ1cnRoZXIgc25hcHBpbmcgd2lsbCBoYXBwZW4gYWZ0ZXIgdGhlIHNjcm9sbC5cbiAgICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IGdldEludGVyc2VjdGlvbkluZm8oYWxsSW50ZXJzZWN0aW9ucyk7XG4gICAgICBjb25zdCByZWxldmFudEludGVyc2VjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyA/IGludGVyc2VjdGlvbnM/LnBhcnRpYWwuZmlyc3QgOiBpbnRlcnNlY3Rpb25zPy5wYXJ0aWFsLmxhc3Q7XG5cbiAgICAgIGlmICghcmVsZXZhbnRJbnRlcnNlY3Rpb24pIHJldHVybjtcblxuICAgICAgY29uc3QgbmV4dEluZGV4ID1cbiAgICAgICAgcmVsZXZhbnRJbnRlcnNlY3Rpb24uaW50ZXJzZWN0aW9uLmludGVyc2VjdGlvblJhdGlvICE9PSAxXG4gICAgICAgICAgPyByZWxldmFudEludGVyc2VjdGlvbi5pbmRleFxuICAgICAgICAgIDogZGlyZWN0aW9uID09PSAnc3RhcnQnXG4gICAgICAgICAgICA/IHJlbGV2YW50SW50ZXJzZWN0aW9uLmluZGV4IC0gMVxuICAgICAgICAgICAgOiByZWxldmFudEludGVyc2VjdGlvbi5pbmRleCArIDE7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnQgPVxuICAgICAgICAoYWxsSW50ZXJzZWN0aW9uc1tuZXh0SW5kZXhdPy50YXJnZXQgYXMgSFRNTEVsZW1lbnQpIHx8XG4gICAgICAgIChyZWxldmFudEludGVyc2VjdGlvbi5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcblxuICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBvcmlnaW46IGRpcmVjdGlvbiA9PT0gJ2VuZCcgPyAnc3RhcnQnIDogJ2VuZCcsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSnVzdCBzY3JvbGwgb25lIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgY29udGFpbmVyLlxuICAgICAgY29uc3Qgc2Nyb2xsYWJsZVNpemUgPSB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyBwYXJlbnQuY2xpZW50V2lkdGggOiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3QgY3VycmVudFNjcm9sbCA9IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgICBzY3JvbGxFbGVtZW50LnNjcm9sbFRvKHtcbiAgICAgICAgW3RoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICdsZWZ0JyA6ICd0b3AnXTpcbiAgICAgICAgICBjdXJyZW50U2Nyb2xsICsgKGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyA/IC1zY3JvbGxhYmxlU2l6ZSA6IHNjcm9sbGFibGVTaXplKSxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsT25lSXRlbVNpemUoZGlyZWN0aW9uOiAnc3RhcnQnIHwgJ2VuZCcpIHtcbiAgICBjb25zdCBhbGxJbnRlcnNlY3Rpb25zID0gdGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMoKTtcbiAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIWFsbEludGVyc2VjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdObyBlbGVtZW50cyBmb3VuZCB0byBzY3JvbGwgdG8uIE1ha2Ugc3VyZSB0byBhcHBseSB0aGUgaXNFbGVtZW50IGRpcmVjdGl2ZSB0byB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8gc2Nyb2xsIHRvLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IGdldEludGVyc2VjdGlvbkluZm8oYWxsSW50ZXJzZWN0aW9ucyk7XG5cbiAgICBpZiAoIWludGVyc2VjdGlvbnMgfHwgIXNjcm9sbEVsZW1lbnQpIHJldHVybjtcblxuICAgIC8vIE1lYW5zIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgYmlnZ2VyIHRoYW4gdGhlIHNjcm9sbGFibGUgY29udGFpbmVyLlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2Nyb2xsIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBlbGVtZW50LiBJZiB3ZSBhcmUgYWxyZWFkeSB0aGVyZSB3ZSBzaG91bGQgc2Nyb2xsIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGVsZW1lbnQuXG4gICAgLy8gVGhpcyBhcHBsaWVzIHRvIHRoZSBvdGhlciBkaXJlY3Rpb24gYXMgd2VsbC5cbiAgICBjb25zdCBpc0ZpcnN0QW5kTGFzdEludGVyc2VjdGlvbkVxdWFsID1cbiAgICAgIGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbnRlcnNlY3Rpb24gPT09IGludGVyc2VjdGlvbnMucGFydGlhbC5sYXN0LmludGVyc2VjdGlvbjtcbiAgICBjb25zdCBzY3JvbGxhYmxlUmVjdCA9IHNjcm9sbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAoaXNGaXJzdEFuZExhc3RJbnRlcnNlY3Rpb25FcXVhbCkge1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0LmludGVyc2VjdGlvbi50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSA9XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gTWF0aC5yb3VuZChpbnRlcnNlY3Rpb24ubGVmdCkgPj0gTWF0aC5yb3VuZChzY3JvbGxhYmxlUmVjdC5sZWZ0KVxuICAgICAgICAgIDogTWF0aC5yb3VuZChpbnRlcnNlY3Rpb24udG9wKSA+PSBNYXRoLnJvdW5kKHNjcm9sbGFibGVSZWN0LnRvcCk7XG5cbiAgICAgIGNvbnN0IGlzRW5kT2ZFbGVtZW50VmlzaWJsZSA9XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gTWF0aC5yb3VuZChpbnRlcnNlY3Rpb24ucmlnaHQpIDw9IE1hdGgucm91bmQoc2Nyb2xsYWJsZVJlY3QucmlnaHQpXG4gICAgICAgICAgOiBNYXRoLnJvdW5kKGludGVyc2VjdGlvbi5ib3R0b20pIDw9IE1hdGgucm91bmQoc2Nyb2xsYWJsZVJlY3QuYm90dG9tKTtcblxuICAgICAgaWYgKCFpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSB8fCAhaXNFbmRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICBpZiAoaXNTdGFydE9mRWxlbWVudFZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW5kZXggLSAxO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvU2Nyb2xsVG8gPSBhbGxJbnRlcnNlY3Rpb25zW3ByZXZpb3VzSW5kZXhdPy50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudFRvU2Nyb2xsVG8pIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudFRvU2Nyb2xsVG8sXG4gICAgICAgICAgICAgIG9yaWdpbjogJ2VuZCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleC5zZXQocHJldmlvdXNJbmRleCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBvcmlnaW46ICdzdGFydCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleC5zZXQoaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0LmluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzRW5kT2ZFbGVtZW50VmlzaWJsZSkge1xuICAgICAgICAgICAgLy8gdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGludGVyc2VjdGlvbnMucGFydGlhbC5sYXN0LmluZGV4ICsgMTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb1Njcm9sbFRvID0gYWxsSW50ZXJzZWN0aW9uc1tuZXh0SW5kZXhdPy50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudFRvU2Nyb2xsVG8pIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudFRvU2Nyb2xsVG8sXG4gICAgICAgICAgICAgIG9yaWdpbjogJ3N0YXJ0JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4LnNldChuZXh0SW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmxhc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgb3JpZ2luOiAnZW5kJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KGludGVyc2VjdGlvbnMucGFydGlhbC5sYXN0LmluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnNjcm9sbE9yaWdpbigpID09PSAnY2VudGVyJykge1xuICAgICAgLy8gSWYgdGhlIHNjcm9sbCBvcmlnaW4gaXMgZm9yY2VkIHRvIGJlIGNlbnRlciB3ZSBzaG91bGQgYWx3YXlzIHNuYXAgdG8gdGhlIGNlbnRlciBvZiB0aGUgbmV4dCBwYXJ0aWFsIGludGVyc2VjdGlvbiBpbiB0aGUgc2Nyb2xsIGRpcmVjdGlvbi5cbiAgICAgIGNvbnN0IG5leHRQYXJ0aWFsSW50ZXJzZWN0aW9uID0gZGlyZWN0aW9uID09PSAnc3RhcnQnID8gaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0IDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmxhc3Q7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPSBuZXh0UGFydGlhbEludGVyc2VjdGlvbi5pbmRleDtcblxuICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICBlbGVtZW50OiBuZXh0UGFydGlhbEludGVyc2VjdGlvbi5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICBvcmlnaW46ICdjZW50ZXInLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KG5leHRJbmRleCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gZGlyZWN0aW9uID09PSAnc3RhcnQnID8gaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmZpcnN0IDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmxhc3Q7XG4gICAgbGV0IGVsZW1lbnRUb1Njcm9sbFRvID0gZGF0YS5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBuZXh0SW5kZXggPSBkYXRhLmluZGV4O1xuXG4gICAgaWYgKE1hdGgucm91bmQoZGF0YS5pbnRlcnNlY3Rpb24uaW50ZXJzZWN0aW9uUmF0aW8pID09PSAxKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnc3RhcnQnICYmIGRhdGEuaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnZW5kJyAmJiBkYXRhLmluZGV4ID09PSBhbGxJbnRlcnNlY3Rpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0SW5kZXggPSBkaXJlY3Rpb24gPT09ICdzdGFydCcgPyBkYXRhLmluZGV4IC0gMSA6IGRhdGEuaW5kZXggKyAxO1xuXG4gICAgICBlbGVtZW50VG9TY3JvbGxUbyA9IGFsbEludGVyc2VjdGlvbnNbbmV4dEluZGV4XT8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBpZiAoIWVsZW1lbnRUb1Njcm9sbFRvKSByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgZWxlbWVudDogZWxlbWVudFRvU2Nyb2xsVG8sXG4gICAgICBvcmlnaW46IGRpcmVjdGlvbixcbiAgICB9KTtcblxuICAgIHRoaXMuX21hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleC5zZXQobmV4dEluZGV4KTtcbiAgfVxuXG4gIGdldEVsZW1lbnRTY3JvbGxDb29yZGluYXRlcyhvcHRpb25zOiBPbWl0PFNjcm9sbFRvRWxlbWVudE9wdGlvbnMsICdjb250YWluZXInPiAmIHsgaWdub3JlRm9yY2VkT3JpZ2luPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGZvcmNlZE9yaWdpbiA9IHRoaXMuc2Nyb2xsT3JpZ2luKCk7XG5cbiAgICByZXR1cm4gZ2V0RWxlbWVudFNjcm9sbENvb3JkaW5hdGVzKHtcbiAgICAgIGNvbnRhaW5lcjogc2Nyb2xsRWxlbWVudCxcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gJ2lubGluZScgOiAnYmxvY2snLFxuICAgICAgLi4uKHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHsgc2Nyb2xsSW5saW5lTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH1cbiAgICAgICAgOiB7IHNjcm9sbEJsb2NrTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH0pLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIC4uLihmb3JjZWRPcmlnaW4gPT09ICdhdXRvJyB8fCBvcHRpb25zLmlnbm9yZUZvcmNlZE9yaWdpbiA/IHsgb3JpZ2luIH0gOiB7IG9yaWdpbjogZm9yY2VkT3JpZ2luIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgc2Nyb2xsVG9FbGVtZW50KG9wdGlvbnM6IE9taXQ8U2Nyb2xsVG9FbGVtZW50T3B0aW9ucywgJ2NvbnRhaW5lcic+ICYgeyBpZ25vcmVGb3JjZWRPcmlnaW4/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudC5zY3JvbGwodGhpcy5nZXRFbGVtZW50U2Nyb2xsQ29vcmRpbmF0ZXMob3B0aW9ucykpO1xuICB9XG5cbiAgc2Nyb2xsVG9FbGVtZW50QnlJbmRleChcbiAgICBvcHRpb25zOiBPbWl0PFNjcm9sbFRvRWxlbWVudE9wdGlvbnMsICdjb250YWluZXInPiAmIHsgaW5kZXg6IG51bWJlcjsgaWdub3JlRm9yY2VkT3JpZ2luPzogYm9vbGVhbiB9LFxuICApIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuc2Nyb2xsYWJsZUNoaWxkcmVuKCk7XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW29wdGlvbnMuaW5kZXhdO1xuXG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm47XG5cbiAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzY3JvbGxUb0VsZW1lbnRWaWFOYXZpZ2F0aW9uKGVsZW1lbnRJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZUNoaWxkcmVuKClbZWxlbWVudEluZGV4XTtcbiAgICB0aGlzLl9tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXguc2V0KGVsZW1lbnRJbmRleCk7XG5cbiAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICBlbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNjcm9sbFRvU3RhcnREaXJlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc2Nyb2xsTW9kZSgpID09PSAnY29udGFpbmVyJykge1xuICAgICAgdGhpcy5zY3JvbGxPbmVDb250YWluZXJTaXplKCdzdGFydCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUl0ZW1TaXplKCdzdGFydCcpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzY3JvbGxUb0VuZERpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxNb2RlKCkgPT09ICdjb250YWluZXInKSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUNvbnRhaW5lclNpemUoJ2VuZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUl0ZW1TaXplKCdlbmQnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbmFibGVTbmFwcGluZygpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucyQsIHRoaXMuaXNDdXJzb3JEcmFnZ2luZyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoWywgaXNEcmFnZ2luZ10pID0+ICFpc0RyYWdnaW5nKSxcbiAgICAgICAgbWFwKChbaW50ZXJzZWN0aW9uc10pID0+IGludGVyc2VjdGlvbnMpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTUwKSxcbiAgICAgICAgdGFwKChhbGxJbnRlcnNlY3Rpb25zKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgaWYgKCFzY3JvbGxFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25zID0gZ2V0SW50ZXJzZWN0aW9uSW5mbyhhbGxJbnRlcnNlY3Rpb25zKTtcblxuICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9ucykgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgaXNGaXJzdEFuZExhc3RJbnRlcnNlY3Rpb25FcXVhbCA9XG4gICAgICAgICAgICBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW50ZXJzZWN0aW9uID09PSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwubGFzdC5pbnRlcnNlY3Rpb247XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVJlY3QgPSBzY3JvbGxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsT3JpZ2luKCkgPT09ICdjZW50ZXInICYmIGludGVyc2VjdGlvbnMuZnVsbC5oYXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBmdWxseSB2aXNpYmxlIGVsZW1lbnQgd2Ugc2hvdWxkIG5vdCBzbmFwIGF0IGFsbC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Nyb2xsT3JpZ2luKCkgPT09ICdjZW50ZXInICYmIGludGVyc2VjdGlvbnMuZnVsbC5maXJzdC5pbnRlcnNlY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBmdWxseSB2aXNpYmxlIGVsZW1lbnQgd2Ugc2hvdWxkIHNuYXAgaXQgdG8gdGhlIGNlbnRlci5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5mdWxsLmZpcnN0LmludGVyc2VjdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICAgIG9yaWdpbjogJ2NlbnRlcicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRmlyc3RBbmRMYXN0SW50ZXJzZWN0aW9uRXF1YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTdGFydE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICAgICAgICA/IGludGVyc2VjdGlvbi5sZWZ0ID49IHNjcm9sbGFibGVSZWN0LmxlZnRcbiAgICAgICAgICAgICAgICA6IGludGVyc2VjdGlvbi50b3AgPj0gc2Nyb2xsYWJsZVJlY3QudG9wO1xuXG4gICAgICAgICAgICBjb25zdCBpc0VuZE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICAgICAgICA/IGludGVyc2VjdGlvbi5yaWdodCA8PSBzY3JvbGxhYmxlUmVjdC5yaWdodFxuICAgICAgICAgICAgICAgIDogaW50ZXJzZWN0aW9uLmJvdHRvbSA8PSBzY3JvbGxhYmxlUmVjdC5ib3R0b207XG5cbiAgICAgICAgICAgIC8vIERvbid0IHNuYXAgaWYgbmVpdGhlciB0aGUgc3RhcnQgbm9yIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB2aXNpYmxlLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoaXMgd291bGQgcmVzdWx0IGluIHBhcnRzIG9mIHRoZSBlbGVtZW50IGJlaW5nIGluYWNjZXNzaWJsZS5cbiAgICAgICAgICAgIGlmICghaXNTdGFydE9mRWxlbWVudFZpc2libGUgJiYgIWlzRW5kT2ZFbGVtZW50VmlzaWJsZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSB3ZSBzaG91bGQgc25hcCB0byB0aGUgc3RhcnQuXG4gICAgICAgICAgICBpZiAoaXNTdGFydE9mRWxlbWVudFZpc2libGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMucGFydGlhbC5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgIG9yaWdpbjogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlIGVuZCBvZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIHdlIHNob3VsZCBzbmFwIHRvIHRoZSBlbmQuXG4gICAgICAgICAgICBpZiAoaXNFbmRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLnBhcnRpYWwubGFzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgIG9yaWdpbjogJ2VuZCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICh0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgJiZcbiAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLmJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCA+IHNjcm9sbGFibGVSZWN0LndpZHRoKSB8fFxuICAgICAgICAgICAgKHRoaXMuZGlyZWN0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgJiZcbiAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLmJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgPiBzY3JvbGxhYmxlUmVjdC5oZWlnaHQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGJpZ2dlciB0aGFuIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lciB3ZSBzaG91bGQgc25hcCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpZiB0aGUgc2Nyb2xsIGRpcmVjdGlvbiBpcyBmb3J3YXJkXG4gICAgICAgICAgICAvLyBhbmQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlbGVtZW50IGlmIHRoZSBzY3JvbGwgZGlyZWN0aW9uIGlzIGJhY2t3YXJkcy5cbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IGludGVyc2VjdGlvbnMucGFydGlhbC5iaWdnZXN0LmluZGV4ID09PSBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuZmlyc3QuaW5kZXggPyAnZW5kJyA6ICdzdGFydCc7XG5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5wYXJ0aWFsLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgICBpZ25vcmVGb3JjZWRPcmlnaW46IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gc3BlY2lhbCBjYXNlLiBKdXN0IHNuYXAgdG8gdGhlIGJpZ2dlc3QgaW50ZXJzZWN0aW9uLlxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLnBhcnRpYWwuYmlnZ2VzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rpc2FibGVTbmFwcGluZyQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZVNuYXBwaW5nKCkge1xuICAgIHRoaXMuX2Rpc2FibGVTbmFwcGluZyQubmV4dCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS13cmFwcGVyXCI+XG4gIDxkaXZcbiAgICAjc2Nyb2xsYWJsZVxuICAgIFthdHRyLnJvbGVdPVwic2Nyb2xsYWJsZVJvbGUoKSA/PyB1bmRlZmluZWRcIlxuICAgIFtuZ0NsYXNzXT1cInNjcm9sbGFibGVDbGFzcygpXCJcbiAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtY29udGFpbmVyXCJcbiAgPlxuICAgIDxkaXYgI2ZpcnN0RWxlbWVudCBjbGFzcz1cImV0LXNjcm9sbC1vYnNlcnZlci1maXJzdC1lbGVtZW50XCIgZXRTY3JvbGxhYmxlSWdub3JlQ2hpbGQ+PC9kaXY+XG4gICAgQGlmIChsb2FkaW5nVGVtcGxhdGVQb3NpdGlvbigpID09PSAnc3RhcnQnICYmIHNob3dMb2FkaW5nVGVtcGxhdGUoKSkge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdUcGxcIiAvPlxuICAgIH1cbiAgICA8bmctY29udGVudCAvPlxuICAgIEBpZiAobG9hZGluZ1RlbXBsYXRlUG9zaXRpb24oKSA9PT0gJ2VuZCcgJiYgc2hvd0xvYWRpbmdUZW1wbGF0ZSgpKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1RwbFwiIC8+XG4gICAgfVxuXG4gICAgPGRpdiAjbGFzdEVsZW1lbnQgY2xhc3M9XCJldC1zY3JvbGwtb2JzZXJ2ZXItbGFzdC1lbGVtZW50XCIgZXRTY3JvbGxhYmxlSWdub3JlQ2hpbGQ+PC9kaXY+XG4gIDwvZGl2PlxuXG4gIEBpZiAocmVuZGVyTWFza3MoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW1hc2tzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1tYXNrIGV0LXNjcm9sbGFibGUtbWFzay0tc3RhcnRcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW1hc2sgZXQtc2Nyb2xsYWJsZS1tYXNrLS1lbmRcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBpZiAocmVuZGVyQnV0dG9uc0luc2lkZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtYnV0dG9uc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcndhcmRCdXR0b25UcGxcIiAvPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJhY2t3YXJkQnV0dG9uVHBsXCIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbkBpZiAoKHJlbmRlckJ1dHRvbnNJbkZvb3RlcigpIHx8IChyZW5kZXJOYXZpZ2F0aW9uKCkgJiYgc2Nyb2xsYWJsZU5hdmlnYXRpb24oKS5sZW5ndGggPiAxKSkgJiYgY2FuU2Nyb2xsKCkpIHtcbiAgPGRpdlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdldC1zY3JvbGxhYmxlLWZvb3Rlci0td2l0aC1uYXZpZ2F0aW9uJzogcmVuZGVyTmF2aWdhdGlvbigpLFxuICAgICAgJ2V0LXNjcm9sbGFibGUtZm9vdGVyLS13aXRoLWJ1dHRvbnMnOiByZW5kZXJCdXR0b25zSW5Gb290ZXIoKSxcbiAgICB9XCJcbiAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtZm9vdGVyXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICA+XG4gICAgQGlmIChyZW5kZXJCdXR0b25zSW5Gb290ZXIoKSkge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcndhcmRCdXR0b25UcGxcIiAvPlxuICAgIH1cblxuICAgIEBpZiAocmVuZGVyTmF2aWdhdGlvbigpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1wcm9ncmVzcy1iYXJcIj5cbiAgICAgICAgPGRpdiAjbmF2aWdhdGlvbkRvdHNDb250YWluZXIgY2xhc3M9XCJldC1zY3JvbGxhYmxlLWRvdHMtY29udGFpbmVyXCI+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBzY3JvbGxhYmxlTmF2aWdhdGlvbigpOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAjbmF2aWdhdGlvbkRvdFxuICAgICAgICAgICAgICBbY2xhc3MuZXQtc2Nyb2xsYWJsZS1uYXZpZ2F0aW9uLWl0ZW0tLWFjdGl2ZV09XCJpdGVtLmlzQWN0aXZlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmV0LXNjcm9sbGFibGUtbmF2aWdhdGlvbi1pdGVtLS1jbG9zZV09XCJcbiAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTmF2aWdhdGlvbigpW2kgKyAxXT8uaXNBY3RpdmUgfHwgc2Nyb2xsYWJsZU5hdmlnYXRpb24oKVtpIC0gMV0/LmlzQWN0aXZlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5ldC1zY3JvbGxhYmxlLW5hdmlnYXRpb24taXRlbS0tZmFyXT1cIlxuICAgICAgICAgICAgICAgICFzY3JvbGxhYmxlTmF2aWdhdGlvbigpW2kgKyAxXT8uaXNBY3RpdmUgJiYgIXNjcm9sbGFibGVOYXZpZ2F0aW9uKClbaSAtIDFdPy5pc0FjdGl2ZSAmJiAhaXRlbS5pc0FjdGl2ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXR0ci5hY3RpdmUtb2Zmc2V0XT1cIml0ZW0uYWN0aXZlT2Zmc2V0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNjcm9sbFRvRWxlbWVudFZpYU5hdmlnYXRpb24oaSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtbmF2aWdhdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKHJlbmRlckJ1dHRvbnNJbkZvb3RlcigpKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFja3dhcmRCdXR0b25UcGxcIiAvPlxuICAgIH1cbiAgPC9kaXY+XG59XG5cbjxuZy10ZW1wbGF0ZSAjZm9yd2FyZEJ1dHRvblRwbD5cbiAgPGJ1dHRvblxuICAgIFtkaXNhYmxlZF09XCJpc0F0U3RhcnQoKVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbFRvU3RhcnREaXJlY3Rpb24oKVwiXG4gICAgY2xhc3M9XCJldC1zY3JvbGxhYmxlLWJ1dHRvbiBldC1zY3JvbGxhYmxlLWJ1dHRvbi0tc3RhcnRcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gID5cbiAgICA8ZXQtY2hldnJvbi1pY29uIC8+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNiYWNrd2FyZEJ1dHRvblRwbD5cbiAgPGJ1dHRvblxuICAgIFtkaXNhYmxlZF09XCJpc0F0RW5kKClcIlxuICAgIChjbGljayk9XCJzY3JvbGxUb0VuZERpcmVjdGlvbigpXCJcbiAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtYnV0dG9uIGV0LXNjcm9sbGFibGUtYnV0dG9uLS1lbmRcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gID5cbiAgICA8ZXQtY2hldnJvbi1pY29uIC8+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nVHBsPlxuICBAaWYgKGxvYWRpbmdUZW1wbGF0ZSgpOyBhcyB0cGwpIHtcbiAgICBAZm9yIChcbiAgICAgIF8gb2YgdHBsLnJlcGVhdCgpO1xuICAgICAgdHJhY2sgaW5kZXg7XG4gICAgICBsZXQgaW5kZXggPSAkaW5kZXg7XG4gICAgICBsZXQgZXZlbiA9ICRldmVuO1xuICAgICAgbGV0IG9kZCA9ICRvZGQ7XG4gICAgICBsZXQgZmlyc3QgPSAkZmlyc3Q7XG4gICAgICBsZXQgbGFzdCA9ICRsYXN0XG4gICAgKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsLnRlbXBsYXRlUmVmOyBjb250ZXh0OiB7IGluZGV4LCBldmVuLCBvZGQsIGZpcnN0LCBsYXN0IH1cIiAvPlxuICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==