@ethlete/cdk 3.3.1 → 3.5.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 (211) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/esm2022/lib/components/accordion/components/accordion/accordion.component.mjs +3 -3
  3. package/esm2022/lib/components/accordion/components/accordion-group/accordion-group.component.mjs +3 -3
  4. package/esm2022/lib/components/accordion/partials/accordion-hint/accordion-hint.directive.mjs +3 -3
  5. package/esm2022/lib/components/accordion/partials/accordion-hint-wrapper/accordion-hint-wrapper.directive.mjs +3 -3
  6. package/esm2022/lib/components/accordion/partials/accordion-label/accordion-label.directive.mjs +3 -3
  7. package/esm2022/lib/components/accordion/partials/accordion-label-wrapper/accordion-label-wrapper.directive.mjs +3 -3
  8. package/esm2022/lib/components/bracket/components/bracket/bracket.component.mjs +3 -3
  9. package/esm2022/lib/components/bracket/directives/bracket-match/bracket-match.directive.mjs +3 -3
  10. package/esm2022/lib/components/bracket/directives/bracket-round/bracket-round.directive.mjs +3 -3
  11. package/esm2022/lib/components/bracket/partials/bracket-match/bracket-match.component.mjs +3 -3
  12. package/esm2022/lib/components/bracket/partials/bracket-round-header/bracket-round-header.component.mjs +3 -3
  13. package/esm2022/lib/components/button/components/button/button.component.mjs +3 -3
  14. package/esm2022/lib/components/button/components/query-button/query-button.component.mjs +6 -6
  15. package/esm2022/lib/components/button/directives/button/button.directive.mjs +3 -3
  16. package/esm2022/lib/components/button/directives/query-button/query-button.directive.mjs +39 -9
  17. package/esm2022/lib/components/forms/components/checkbox/components/checkbox/checkbox.component.mjs +3 -3
  18. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-field/checkbox-field.component.mjs +3 -3
  19. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-group/checkbox-group.component.mjs +3 -3
  20. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox/checkbox.directive.mjs +3 -3
  21. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-field/checkbox-field.directive.mjs +3 -3
  22. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group/checkbox-group.directive.mjs +3 -3
  23. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group-control/checkbox-group-control.directive.mjs +3 -3
  24. package/esm2022/lib/components/forms/components/error/components/error/error.component.mjs +3 -3
  25. package/esm2022/lib/components/forms/components/input/components/date-input/date-input.component.mjs +3 -3
  26. package/esm2022/lib/components/forms/components/input/components/email-input/email-input.component.mjs +3 -3
  27. package/esm2022/lib/components/forms/components/input/components/input-field/input-field.component.mjs +3 -3
  28. package/esm2022/lib/components/forms/components/input/components/number-input/number-input.component.mjs +3 -3
  29. package/esm2022/lib/components/forms/components/input/components/password-input/password-input.component.mjs +3 -3
  30. package/esm2022/lib/components/forms/components/input/components/search-input/search-input.component.mjs +3 -3
  31. package/esm2022/lib/components/forms/components/input/components/text-input/text-input.component.mjs +3 -3
  32. package/esm2022/lib/components/forms/components/input/components/textarea-input/textarea-input.component.mjs +3 -3
  33. package/esm2022/lib/components/forms/components/input/directives/autosize-textarea/autosize-textarea.directive.mjs +3 -3
  34. package/esm2022/lib/components/forms/components/input/directives/date-input/date-input.directive.mjs +3 -3
  35. package/esm2022/lib/components/forms/components/input/directives/email-input/email-input.directive.mjs +3 -3
  36. package/esm2022/lib/components/forms/components/input/directives/number-input/number-input.directive.mjs +3 -3
  37. package/esm2022/lib/components/forms/components/input/directives/password-input/password-input.directive.mjs +3 -3
  38. package/esm2022/lib/components/forms/components/input/directives/search-input/search-input.directive.mjs +3 -3
  39. package/esm2022/lib/components/forms/components/input/directives/text-input/text-input.directive.mjs +3 -3
  40. package/esm2022/lib/components/forms/components/input/directives/textarea-input/textarea-input.directive.mjs +3 -3
  41. package/esm2022/lib/components/forms/components/input/partials/password-input-toggle/password-input-toggle.component.mjs +3 -3
  42. package/esm2022/lib/components/forms/components/input/partials/search-input-clear/search-input-clear.component.mjs +3 -3
  43. package/esm2022/lib/components/forms/components/label/components/label/label.component.mjs +3 -3
  44. package/esm2022/lib/components/forms/components/label/directives/label-suffix/label-suffix.directive.mjs +3 -3
  45. package/esm2022/lib/components/forms/components/radio/components/radio/radio.component.mjs +3 -3
  46. package/esm2022/lib/components/forms/components/radio/components/radio-field/radio-field.component.mjs +3 -3
  47. package/esm2022/lib/components/forms/components/radio/components/radio-group/radio-group.component.mjs +3 -3
  48. package/esm2022/lib/components/forms/components/radio/directives/radio/radio.directive.mjs +3 -3
  49. package/esm2022/lib/components/forms/components/radio/directives/radio-field/radio-field.directive.mjs +3 -3
  50. package/esm2022/lib/components/forms/components/radio/directives/radio-group/radio-group.directive.mjs +3 -3
  51. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button/segmented-button.component.mjs +3 -3
  52. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-field/segmented-button-field.component.mjs +3 -3
  53. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-group/segmented-button-group.component.mjs +3 -3
  54. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.mjs +4 -4
  55. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.mjs +4 -4
  56. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-group/segmented-button-group.directive.mjs +4 -4
  57. package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.mjs +47 -473
  58. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +481 -10
  59. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-option-template/combobox-option-template.directive.mjs +3 -3
  60. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-option-template/index.mjs +2 -0
  61. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-selected-option-template/combobox-selected-option-template.directive.mjs +3 -3
  62. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox-selected-option-template/index.mjs +2 -0
  63. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.mjs +8 -7
  64. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.mjs +9 -9
  65. package/esm2022/lib/components/forms/components/select/components/combobox/private/combobox.private.errors.mjs +22 -0
  66. package/esm2022/lib/components/forms/components/select/components/combobox/private/combobox.private.types.mjs +5 -0
  67. package/esm2022/lib/components/forms/components/select/components/combobox/private/index.mjs +3 -0
  68. package/esm2022/lib/components/forms/components/select/components/native-select/components/native-select/native-select.component.mjs +3 -3
  69. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-input/native-select-input.directive.mjs +3 -3
  70. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-option/native-select-option.directive.mjs +3 -3
  71. package/esm2022/lib/components/forms/components/select/components/native-select/partials/native-select-option/native-select-option.component.mjs +3 -3
  72. package/esm2022/lib/components/forms/components/select/components/select/components/select/select.component.mjs +3 -3
  73. package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +3 -3
  74. package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.mjs +3 -3
  75. package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.mjs +3 -3
  76. package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.mjs +3 -3
  77. package/esm2022/lib/components/forms/components/select/components/select/partials/select-option/select-option.component.mjs +3 -3
  78. package/esm2022/lib/components/forms/components/select/components/select-field/select-field.component.mjs +3 -3
  79. package/esm2022/lib/components/forms/components/select/directives/select-field/select-field.directive.mjs +3 -3
  80. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-field/selection-list-field.component.mjs +3 -3
  81. package/esm2022/lib/components/forms/components/selection-list/components/selection-list-option/selection-list-option.component.mjs +3 -3
  82. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-field/selection-list-field.directive.mjs +4 -4
  83. package/esm2022/lib/components/forms/components/selection-list/directives/selection-list-option/selection-list-option.directive.mjs +4 -5
  84. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle/slide-toggle.component.mjs +3 -3
  85. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle-field/slide-toggle-field.component.mjs +3 -3
  86. package/esm2022/lib/components/forms/components/slide-toggle/directives/slide-toggle/slide-toggle.directive.mjs +3 -3
  87. package/esm2022/lib/components/forms/components/slider/components/slider/slider.component.mjs +3 -3
  88. package/esm2022/lib/components/forms/components/slider/components/slider-field/slider-field.component.mjs +3 -3
  89. package/esm2022/lib/components/forms/directives/dynamic-form-field/dynamic-form-field.directive.mjs +3 -3
  90. package/esm2022/lib/components/forms/directives/dynamic-form-group/dynamic-form-group.directive.mjs +3 -3
  91. package/esm2022/lib/components/forms/directives/if-input-empty/if-input-empty.directive.mjs +3 -3
  92. package/esm2022/lib/components/forms/directives/if-input-filled/if-input-filled.directive.mjs +3 -3
  93. package/esm2022/lib/components/forms/directives/input/input.directive.mjs +3 -3
  94. package/esm2022/lib/components/forms/directives/input-prefix/input-prefix.directive.mjs +3 -3
  95. package/esm2022/lib/components/forms/directives/input-suffix/input-suffix.directive.mjs +3 -3
  96. package/esm2022/lib/components/forms/directives/native-input-ref/native-input-ref.directive.mjs +3 -3
  97. package/esm2022/lib/components/forms/directives/static-form-field/static-form-field.directive.mjs +3 -3
  98. package/esm2022/lib/components/forms/directives/static-form-group/static-form-group.directive.mjs +3 -3
  99. package/esm2022/lib/components/forms/directives/writeable-input/writeable-input.directive.mjs +3 -3
  100. package/esm2022/lib/components/forms/services/default-validator-errors.service.mjs +3 -3
  101. package/esm2022/lib/components/forms/services/form-field-state.service.mjs +3 -3
  102. package/esm2022/lib/components/forms/services/form-group-state.service.mjs +3 -3
  103. package/esm2022/lib/components/forms/services/input-state.service.mjs +3 -3
  104. package/esm2022/lib/components/forms/utils/decorated-form-field.base.mjs +3 -3
  105. package/esm2022/lib/components/forms/utils/decorated-input.base.mjs +3 -3
  106. package/esm2022/lib/components/forms/utils/input.base.mjs +3 -3
  107. package/esm2022/lib/components/icons/chevron-icon/chevron-icon.component.mjs +3 -3
  108. package/esm2022/lib/components/masonry/components/masonry/masonry.component.mjs +3 -3
  109. package/esm2022/lib/components/masonry/partials/masonry-item/masonry-item.component.mjs +3 -3
  110. package/esm2022/lib/components/overlay/components/bottom-sheet/components/bottom-sheet-container/bottom-sheet-container.component.mjs +3 -3
  111. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/bottom-sheet-container-base.component.mjs +3 -3
  112. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-drag-handle/bottom-sheet-drag-handle.component.mjs +3 -3
  113. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-title/bottom-sheet-title.directive.mjs +5 -15
  114. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-base.service.mjs +3 -3
  115. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-swipe-handler.service.mjs +3 -3
  116. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet.service.mjs +3 -3
  117. package/esm2022/lib/components/overlay/components/dialog/components/dialog-container/dialog-container.component.mjs +3 -3
  118. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-close/dialog-close.directive.mjs +3 -3
  119. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-container-base/dialog-container-base.component.mjs +3 -3
  120. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-title/dialog-title.directive.mjs +5 -15
  121. package/esm2022/lib/components/overlay/components/dialog/services/dialog-base.service.mjs +3 -3
  122. package/esm2022/lib/components/overlay/components/dialog/services/dialog.service.mjs +3 -3
  123. package/esm2022/lib/components/overlay/components/menu/context-menu-trigger.mjs +6 -6
  124. package/esm2022/lib/components/overlay/components/menu/menu-aim.mjs +6 -6
  125. package/esm2022/lib/components/overlay/components/menu/menu-bar.mjs +3 -3
  126. package/esm2022/lib/components/overlay/components/menu/menu-base.mjs +3 -3
  127. package/esm2022/lib/components/overlay/components/menu/menu-group.mjs +3 -3
  128. package/esm2022/lib/components/overlay/components/menu/menu-item-checkbox.mjs +3 -3
  129. package/esm2022/lib/components/overlay/components/menu/menu-item-radio.mjs +3 -3
  130. package/esm2022/lib/components/overlay/components/menu/menu-item-selectable.mjs +3 -3
  131. package/esm2022/lib/components/overlay/components/menu/menu-item.mjs +3 -3
  132. package/esm2022/lib/components/overlay/components/menu/menu-module.mjs +4 -4
  133. package/esm2022/lib/components/overlay/components/menu/menu-stack.mjs +3 -3
  134. package/esm2022/lib/components/overlay/components/menu/menu-trigger-base.mjs +3 -3
  135. package/esm2022/lib/components/overlay/components/menu/menu-trigger.mjs +3 -3
  136. package/esm2022/lib/components/overlay/components/menu/menu.mjs +3 -3
  137. package/esm2022/lib/components/overlay/components/toggletip/components/toggletip/toggletip.component.mjs +3 -3
  138. package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.mjs +3 -3
  139. package/esm2022/lib/components/overlay/components/tooltip/components/tooltip/tooltip.component.mjs +3 -3
  140. package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.mjs +3 -3
  141. package/esm2022/lib/components/overlay/directives/dynamic-overlay-title/dynamic-overlay-title.directive.mjs +5 -15
  142. package/esm2022/lib/components/overlay/services/dynamic-overlay.service.mjs +3 -3
  143. package/esm2022/lib/components/pagination/components/pagination/pagination.component.mjs +3 -3
  144. package/esm2022/lib/components/pagination/partials/pagination-link/pagination-link.directive.mjs +3 -3
  145. package/esm2022/lib/components/pagination/services/pagination-head.service.mjs +3 -3
  146. package/esm2022/lib/components/picture/picture-data.directive.mjs +3 -3
  147. package/esm2022/lib/components/picture/picture.component.mjs +3 -3
  148. package/esm2022/lib/components/progress-spinner/progress-spinner.component.mjs +3 -3
  149. package/esm2022/lib/components/query-error/components/query-error/query-error.component.mjs +3 -3
  150. package/esm2022/lib/components/query-error/directives/query-error/query-error.directive.mjs +3 -3
  151. package/esm2022/lib/components/scrollable/components/scrollable/scrollable.component.mjs +3 -3
  152. package/esm2022/lib/components/skeleton/components/skeleton/skeleton.component.mjs +3 -3
  153. package/esm2022/lib/components/skeleton/partials/skeleton-item/skeleton-item.component.mjs +3 -3
  154. package/esm2022/lib/components/sort/components/sort-header/sort-header.component.mjs +3 -3
  155. package/esm2022/lib/components/sort/partials/sort/sort.directive.mjs +3 -3
  156. package/esm2022/lib/components/sort/services/sort-header-intl.mjs +3 -3
  157. package/esm2022/lib/components/table/components/table/table.component.mjs +3 -3
  158. package/esm2022/lib/components/table/partials/cells/cell/cell.directive.mjs +3 -3
  159. package/esm2022/lib/components/table/partials/cells/cell-def/cell-def.directive.mjs +3 -3
  160. package/esm2022/lib/components/table/partials/cells/column-def/column-def.directive.mjs +3 -3
  161. package/esm2022/lib/components/table/partials/cells/footer-cell/footer-cell.directive.mjs +3 -3
  162. package/esm2022/lib/components/table/partials/cells/footer-cell-def/footer-cell-def.directive.mjs +3 -3
  163. package/esm2022/lib/components/table/partials/cells/header-cell/header-cell.directive.mjs +3 -3
  164. package/esm2022/lib/components/table/partials/cells/header-cell-def/header-cell-def.directive.mjs +3 -3
  165. package/esm2022/lib/components/table/partials/cells/text-column/text-column.component.mjs +3 -3
  166. package/esm2022/lib/components/table/partials/rows/footer-row/footer-row.component.mjs +3 -3
  167. package/esm2022/lib/components/table/partials/rows/footer-row-def/footer-row-def.directive.mjs +3 -3
  168. package/esm2022/lib/components/table/partials/rows/header-row/header-row.component.mjs +3 -3
  169. package/esm2022/lib/components/table/partials/rows/header-row-def/header-row-def.directive.mjs +3 -3
  170. package/esm2022/lib/components/table/partials/rows/no-data-row/no-data-row.directive.mjs +3 -3
  171. package/esm2022/lib/components/table/partials/rows/recycle-rows/recycle-rows.directive.mjs +3 -3
  172. package/esm2022/lib/components/table/partials/rows/row/row.component.mjs +3 -3
  173. package/esm2022/lib/components/table/partials/rows/row-def/row-def.directive.mjs +3 -3
  174. package/esm2022/lib/components/table/partials/table-busy/table-busy.directive.mjs +3 -3
  175. package/esm2022/lib/components/table/partials/table-busy-outlet/table-busy-outlet.directive.mjs +3 -3
  176. package/esm2022/lib/components/tabs/components/inline-tabs/inline-tabs.component.mjs +3 -3
  177. package/esm2022/lib/components/tabs/components/nav-tabs/nav-tabs.component.mjs +3 -3
  178. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab/inline-tab.component.mjs +3 -3
  179. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body/inline-tab-body.component.mjs +3 -3
  180. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body-host/inline-tab-body-host.directive.mjs +3 -3
  181. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-content/inline-tab-content.directive.mjs +3 -3
  182. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-header/inline-tab-header.component.mjs +3 -3
  183. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label/inline-tab-label.directive.mjs +3 -3
  184. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label-wrapper/inline-tab-label-wrapper.directive.mjs +3 -3
  185. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tab-link/nav-tab-link.directive.mjs +3 -3
  186. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tabs-outlet/nav-tabs-outlet.component.mjs +3 -3
  187. package/esm2022/lib/components/tabs/utils/active-tab-underline.util.mjs +3 -3
  188. package/esm2022/lib/components/tabs/utils/paginated-tab-header.directive.mjs +3 -3
  189. package/esm2022/lib/services/swipe-handler.service.mjs +3 -3
  190. package/esm2022/lib/types/public-api.mjs +1 -2
  191. package/fesm2022/ethlete-cdk.mjs +872 -806
  192. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  193. package/lib/components/button/components/query-button/query-button.component.d.ts +1 -1
  194. package/lib/components/button/directives/query-button/query-button.directive.d.ts +13 -1
  195. package/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.d.ts +1 -1
  196. package/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.d.ts +1 -1
  197. package/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.d.ts +7 -71
  198. package/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.d.ts +84 -4
  199. package/lib/components/forms/components/select/components/combobox/directives/combobox-option-template/index.d.ts +1 -0
  200. package/lib/components/forms/components/select/components/combobox/directives/combobox-selected-option-template/index.d.ts +1 -0
  201. package/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.d.ts +3 -2
  202. package/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.d.ts +1 -1
  203. package/lib/components/forms/components/select/components/combobox/private/combobox.private.errors.d.ts +11 -0
  204. package/lib/components/forms/components/select/components/combobox/private/combobox.private.types.d.ts +26 -0
  205. package/lib/components/forms/components/select/components/combobox/private/index.d.ts +2 -0
  206. package/lib/components/forms/components/selection-list/directives/selection-list-field/selection-list-field.directive.d.ts +1 -2
  207. package/lib/components/forms/components/selection-list/directives/selection-list-option/selection-list-option.directive.d.ts +1 -1
  208. package/lib/types/public-api.d.ts +0 -1
  209. package/package.json +4 -4
  210. package/esm2022/lib/types/value.types.mjs +0 -2
  211. package/lib/types/value.types.d.ts +0 -2
@@ -1,25 +1,496 @@
1
- import { Directive, InjectionToken } from '@angular/core';
1
+ import { A, ENTER, ESCAPE, TAB } from '@angular/cdk/keycodes';
2
+ import { ContentChild, Directive, EventEmitter, InjectionToken, Input, Output, TemplateRef, booleanAttribute, inject, isDevMode, } from '@angular/core';
3
+ import { ActiveSelectionModel, AnimatedOverlayDirective, SelectionModel, createDestroy, createReactiveBindings, isEmptyArray, isObjectArray, isPrimitiveArray, } from '@ethlete/core';
4
+ import { BehaviorSubject, catchError, combineLatest, debounceTime, distinctUntilChanged, filter, map, skip, skipWhile, take, takeUntil, tap, throwError, } from 'rxjs';
5
+ import { INPUT_TOKEN } from '../../../../../../directives';
6
+ import { ComboboxOptionType, assetComboboxBodyComponentSet, comboboxError, } from '../../private';
7
+ import { isOptionDisabled } from '../../utils';
8
+ import { COMBOBOX_OPTION_TEMPLATE_TOKEN } from '../combobox-option-template';
9
+ import { COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN } from '../combobox-selected-option-template';
2
10
  import * as i0 from "@angular/core";
3
- export const COMBOBOX_DIR_TOKEN = new InjectionToken('ET_COMBOBOX_INPUT_TOKEN');
11
+ export const COMBOBOX_TOKEN = new InjectionToken('ET_COMBOBOX_INPUT_TOKEN');
4
12
  export class ComboboxDirective {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ComboboxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
6
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: ComboboxDirective, isStandalone: true, providers: [
13
+ //#region Inputs
14
+ get options() {
15
+ return this._selectionModel.getFilteredOptions();
16
+ }
17
+ set options(value) {
18
+ this._selectionModel.setOptions(value);
19
+ }
20
+ set initialValue(value) {
21
+ this._selectionModel.setSelection(value);
22
+ this._initialValue$.next(value);
23
+ }
24
+ get filterInternal() {
25
+ return this._filterInternal$.value;
26
+ }
27
+ set filterInternal(value) {
28
+ const val = booleanAttribute(value);
29
+ this._filterInternal$.next(val);
30
+ if (!val) {
31
+ this._selectionModel.setFilter('');
32
+ }
33
+ else {
34
+ this._selectionModel.setFilter(this._currentFilter);
35
+ }
36
+ }
37
+ get loading() {
38
+ return this._loading$.value;
39
+ }
40
+ set loading(value) {
41
+ this._loading$.next(booleanAttribute(value));
42
+ }
43
+ get error() {
44
+ return this._error$.value;
45
+ }
46
+ set error(value) {
47
+ this._error$.next(value);
48
+ }
49
+ get placeholder() {
50
+ return this._placeholder$.value;
51
+ }
52
+ set placeholder(value) {
53
+ this._placeholder$.next(value);
54
+ }
55
+ set multiple(value) {
56
+ this._selectionModel.setAllowMultiple(booleanAttribute(value));
57
+ }
58
+ set bindLabel(value) {
59
+ this._selectionModel.setLabelBinding(value);
60
+ }
61
+ set bindValue(value) {
62
+ this._selectionModel.setValueBinding(value);
63
+ }
64
+ set bindKey(value) {
65
+ this._selectionModel.setKeyBinding(value);
66
+ }
67
+ get allowCustomValues() {
68
+ return this._allowCustomValues$.value;
69
+ }
70
+ set allowCustomValues(value) {
71
+ this._allowCustomValues$.next(booleanAttribute(value));
72
+ }
73
+ get optionComponent() {
74
+ return this._optionComponent$.value;
75
+ }
76
+ set optionComponent(component) {
77
+ this._optionComponent$.next(component);
78
+ }
79
+ get selectedOptionComponent() {
80
+ return this._selectedOptionComponent$.value;
81
+ }
82
+ set selectedOptionComponent(component) {
83
+ this._selectedOptionComponent$.next(component);
84
+ }
85
+ //#endregion
86
+ //#region Members
87
+ get _currentFilter() {
88
+ return this._currentFilter$.value;
89
+ }
90
+ get _isOpen() {
91
+ return this._animatedOverlay.isMounted;
92
+ }
93
+ set optionTemplate(value) {
94
+ this._optionTemplate$.next(value ?? null);
95
+ }
96
+ set selectedOptionTemplate(value) {
97
+ this._selectedOptionTemplate$.next(value ?? null);
98
+ }
99
+ //#endregion
100
+ //#region Lifecycle
101
+ constructor() {
102
+ //#region Injects
103
+ this._destroy$ = createDestroy();
104
+ this._input = inject(INPUT_TOKEN);
105
+ this._animatedOverlay = inject(AnimatedOverlayDirective);
106
+ this._initialValue$ = new BehaviorSubject(null);
107
+ this._filterInternal$ = new BehaviorSubject(false);
108
+ this._loading$ = new BehaviorSubject(false);
109
+ this.loading$ = this._loading$.asObservable();
110
+ this._error$ = new BehaviorSubject(null);
111
+ this.emptyText = 'No results found';
112
+ this._placeholder$ = new BehaviorSubject(null);
113
+ this._allowCustomValues$ = new BehaviorSubject(false);
114
+ this._optionComponent$ = new BehaviorSubject(null);
115
+ this._selectedOptionComponent$ = new BehaviorSubject(null);
116
+ //#endregion
117
+ //#region Outputs
118
+ this.filterChange = new EventEmitter();
119
+ this._currentFilter$ = new BehaviorSubject('');
120
+ this._isOpen$ = this._animatedOverlay.isMounted$;
121
+ this._selectionModel = new SelectionModel();
122
+ this._activeSelectionModel = new ActiveSelectionModel();
123
+ this.selectedOptions$ = this._selectionModel.selection$;
124
+ this.multiple$ = this._selectionModel.allowMultiple$;
125
+ this.options$ = this._selectionModel.filteredOptions$;
126
+ this.rawOptions$ = this._selectionModel.options$;
127
+ this._optionTemplate$ = new BehaviorSubject(null);
128
+ this._selectedOptionTemplate$ = new BehaviorSubject(null);
129
+ this._bindings = createReactiveBindings({
130
+ attribute: 'class.et-combobox--loading',
131
+ observable: this._loading$,
132
+ }, {
133
+ attribute: 'class.et-combobox--error',
134
+ observable: this._error$.pipe(map((v) => !!v)),
135
+ }, {
136
+ attribute: 'class.et-combobox--open',
137
+ observable: this._isOpen$,
138
+ }, {
139
+ attribute: 'class.et-select-field--multiple',
140
+ observable: this.multiple$,
141
+ }, {
142
+ attribute: 'class.et-select-field--open',
143
+ observable: this._isOpen$,
144
+ });
145
+ this._comboboxBodyComponent = null;
146
+ //#endregion
147
+ //#region Computes
148
+ this.customOptionTpl$ = this._optionTemplate$.asObservable();
149
+ this.customOptionComponent$ = this._optionComponent$.asObservable();
150
+ this.customSelectedOptionTpl$ = this._selectedOptionTemplate$.asObservable();
151
+ this.customSelectedOptionComponent$ = this._selectedOptionComponent$.asObservable();
152
+ this.trackByOptionKeyFn = (index, item) => this._selectionModel.getKey(item);
153
+ this._activeSelectionModel.setSelectionModel(this._selectionModel);
154
+ this._animatedOverlay.placement = 'bottom';
155
+ this._animatedOverlay.fallbackPlacements = ['bottom', 'top'];
156
+ this._animatedOverlay.autoResize = true;
157
+ }
158
+ ngOnInit() {
159
+ this._initDispatchFilterChanges();
160
+ if (isDevMode()) {
161
+ this._debugValidateComboboxConfig();
162
+ this._debugValidateOptionAndInitialValueSchema();
163
+ }
164
+ this._selectionModel.value$
165
+ .pipe(takeUntil(this._destroy$), tap((value) => {
166
+ this._input._updateValue(value);
167
+ this._setFilterFromInputValue();
168
+ }))
169
+ .subscribe();
170
+ this._input.nativeInputRef$
171
+ .pipe(takeUntil(this._destroy$), debounceTime(0), filter((ref) => !!ref?.element.nativeElement), tap(() => this._updateFilter(this._currentFilter)), take(1))
172
+ .subscribe();
173
+ }
174
+ //#endregion
175
+ //#region Public Methods
176
+ setBodyComponent(component) {
177
+ this._comboboxBodyComponent = component;
178
+ }
179
+ getOptionLabel(option) {
180
+ return this._selectionModel.getLabel$(option);
181
+ }
182
+ getOptionValue(option) {
183
+ return this._selectionModel.getValue$(option);
184
+ }
185
+ removeSelectedOption(option) {
186
+ this._selectionModel.removeSelectedOption(option);
187
+ this._input._markAsTouched();
188
+ }
189
+ open() {
190
+ assetComboboxBodyComponentSet(this._comboboxBodyComponent);
191
+ if (this._isOpen || this._input.disabled || this._animatedOverlay.isMounting)
192
+ return;
193
+ this._animatedOverlay.mount({
194
+ component: this._comboboxBodyComponent,
195
+ mirrorWidth: true,
196
+ });
197
+ }
198
+ close() {
199
+ if (!this._isOpen || this._animatedOverlay.isUnmounting)
200
+ return;
201
+ this._animatedOverlay.unmount();
202
+ }
203
+ selectInputAndOpen() {
204
+ if (this._input.disabled)
205
+ return;
206
+ this._input.nativeInputRef?.element.nativeElement.select();
207
+ this.open();
208
+ }
209
+ writeValueFromOption(option) {
210
+ this._input._markAsTouched();
211
+ if (this._selectionModel.allowMultiple) {
212
+ this._selectionModel.toggleSelectedOption(option);
213
+ }
214
+ else {
215
+ this._selectionModel.addSelectedOption(option);
216
+ }
217
+ if (!this._selectionModel.allowMultiple) {
218
+ this.close();
219
+ this._setFilterFromInputValue();
220
+ }
221
+ else {
222
+ this._updateFilter('');
223
+ }
224
+ }
225
+ isOptionSelected(option) {
226
+ return this._selectionModel.isSelected$(option);
227
+ }
228
+ isOptionActive(option) {
229
+ return this._activeSelectionModel.activeOption$.pipe(map((activeOption) => activeOption === option));
230
+ }
231
+ //#endregion
232
+ //#region Protected Methods
233
+ _processKeydownEvent(event) {
234
+ const keyCode = event.keyCode;
235
+ const isOpen = this._isOpen;
236
+ const isMultiple = this._selectionModel.allowMultiple;
237
+ const canAddCustomValue = this.allowCustomValues;
238
+ const value = event.target.value;
239
+ const hasFilterValue = !!value;
240
+ const result = {};
241
+ if (keyCode === ENTER) {
242
+ event.preventDefault();
243
+ event.stopPropagation();
244
+ // The user typed a custom value and pressed enter. Add it to the selected options.
245
+ // FIXME: Currently it is impossible to select the active option with the keyboard if canAddCustomValue is true.
246
+ // To fix this, the active option should also include the origin it got active from (keyboard or programmatic).
247
+ // The "value" changing should put the combobox into a "use the custom input on enter" mode.
248
+ // The "active option" changing via keyboard should put the combobox into a "use the active option on enter" mode.
249
+ if (canAddCustomValue && hasFilterValue) {
250
+ result.optionAction = { type: 'add', option: value };
251
+ }
252
+ else {
253
+ const activeOption = this._activeSelectionModel.activeOption;
254
+ if (activeOption) {
255
+ if (isMultiple) {
256
+ result.optionAction = { type: 'toggle', option: activeOption };
257
+ }
258
+ else {
259
+ result.optionAction = { type: 'add', option: activeOption };
260
+ }
261
+ }
262
+ }
263
+ if (isMultiple) {
264
+ result.setFilter = '';
265
+ }
266
+ else {
267
+ result.overlayOperation = 'close';
268
+ }
269
+ return this._interpretKeyHandlerResult(result);
270
+ }
271
+ if (keyCode === ESCAPE) {
272
+ if (isOpen) {
273
+ result.overlayOperation = 'close';
274
+ }
275
+ else if (!isMultiple) {
276
+ result.setFilter = '';
277
+ result.optionAction = 'clear';
278
+ }
279
+ return this._interpretKeyHandlerResult(result);
280
+ }
281
+ if (keyCode === TAB) {
282
+ result.overlayOperation = 'close';
283
+ return this._interpretKeyHandlerResult(result);
284
+ }
285
+ if (!isOpen) {
286
+ result.overlayOperation = 'open';
287
+ }
288
+ this._activeSelectionModel.evaluateKeyboardEvent(event);
289
+ if (keyCode === A && event.ctrlKey && isMultiple) {
290
+ result.optionAction = 'toggleAll';
291
+ event.preventDefault();
292
+ }
293
+ return this._interpretKeyHandlerResult(result);
294
+ }
295
+ _processInputEvent(event) {
296
+ const value = event.target.value;
297
+ this._updateFilter(value);
298
+ }
299
+ _handleBlurEvent() {
300
+ this._input._markAsTouched();
301
+ this._input._setShouldDisplayError(true);
302
+ if (this._selectionModel.allowMultiple) {
303
+ this._updateFilter('');
304
+ return;
305
+ }
306
+ if (this._currentFilter === '') {
307
+ this._selectionModel.clearSelectedOptions();
308
+ return;
309
+ }
310
+ this._setFilterFromInputValue();
311
+ }
312
+ //#endregion
313
+ //#region Private Methods
314
+ _initDispatchFilterChanges() {
315
+ this._currentFilter$
316
+ .pipe(skipWhile(() => this.filterInternal), debounceTime(300), distinctUntilChanged(), takeUntil(this._destroy$), tap((v) => this.filterChange.emit(v)))
317
+ .subscribe();
318
+ }
319
+ _updateFilter(value) {
320
+ if (this._input.nativeInputRef && this._input.nativeInputRef.element.nativeElement.value !== value) {
321
+ this._input.nativeInputRef.element.nativeElement.value = value;
322
+ }
323
+ if (this._currentFilter === value)
324
+ return;
325
+ this._currentFilter$.next(value);
326
+ if (this.filterInternal) {
327
+ this._selectionModel.setFilter(value);
328
+ }
329
+ }
330
+ _setFilterFromInputValue() {
331
+ if (this._selectionModel.allowMultiple)
332
+ return;
333
+ const value = this._input.value;
334
+ if (!value || Array.isArray(value)) {
335
+ this._updateFilter('');
336
+ return;
337
+ }
338
+ const option = this._selectionModel.getOptionByValue(value);
339
+ if (!option)
340
+ return;
341
+ const label = this._selectionModel.getLabel(option);
342
+ if (typeof label !== 'string')
343
+ return;
344
+ this._updateFilter(label);
345
+ }
346
+ _interpretKeyHandlerResult(result) {
347
+ if (result.overlayOperation === 'close') {
348
+ this.close();
349
+ }
350
+ else if (result.overlayOperation === 'open') {
351
+ this.open();
352
+ }
353
+ if (result.setFilter !== undefined) {
354
+ this._updateFilter(result.setFilter);
355
+ }
356
+ if (result.optionAction) {
357
+ if (typeof result.optionAction === 'string') {
358
+ if (result.optionAction === 'clear') {
359
+ this._selectionModel.clearSelectedOptions();
360
+ }
361
+ else if (result.optionAction === 'toggleAll') {
362
+ this._selectionModel.toggleAllSelectedOptions();
363
+ }
364
+ }
365
+ else {
366
+ const { type, option } = result.optionAction;
367
+ if (isOptionDisabled(option))
368
+ return;
369
+ if (type === 'add') {
370
+ this._selectionModel.addSelectedOption(option);
371
+ }
372
+ if (type === 'remove') {
373
+ this._selectionModel.removeSelectedOption(option);
374
+ }
375
+ if (type === 'toggle') {
376
+ this._selectionModel.toggleSelectedOption(option);
377
+ }
378
+ }
379
+ }
380
+ }
381
+ //#endregion
382
+ //#region Dev mode
383
+ _debugValidateComboboxConfig(isRetry = false) {
384
+ combineLatest([this._selectionModel.labelBinding$, this._selectionModel.valueBinding$, this._allowCustomValues$])
385
+ .pipe(skip(isRetry ? 1 : 0), // Skip if retrying to avoid infinite loop
386
+ debounceTime(0), takeUntil(this._destroy$), map(([bindLabel, bindValue, allowCustomValues]) => {
387
+ const shouldBeObjects = bindLabel && bindValue && !allowCustomValues;
388
+ if (shouldBeObjects) {
389
+ return ComboboxOptionType.Object;
390
+ }
391
+ return ComboboxOptionType.Primitive;
392
+ }), tap((expectedOptionType) => {
393
+ const options = this._selectionModel.options;
394
+ if (isEmptyArray(options)) {
395
+ return;
396
+ }
397
+ if (expectedOptionType === ComboboxOptionType.Object) {
398
+ if (!isObjectArray(options)) {
399
+ throw comboboxError('options_object_mismatch', true, options);
400
+ }
401
+ }
402
+ else if (expectedOptionType === ComboboxOptionType.Primitive) {
403
+ if (!isPrimitiveArray(options)) {
404
+ throw comboboxError('options_primitive_mismatch', true, options);
405
+ }
406
+ }
407
+ }), catchError((e) => {
408
+ this._debugValidateComboboxConfig(true);
409
+ return throwError(() => e);
410
+ }))
411
+ .subscribe();
412
+ }
413
+ _debugValidateOptionAndInitialValueSchema(isRetry = false) {
414
+ combineLatest([this.options$, this._initialValue$])
415
+ .pipe(skip(isRetry ? 1 : 0), // Skip if retrying to avoid infinite loop
416
+ takeUntil(this._destroy$), tap(([options, initialValue]) => {
417
+ if (initialValue === null || initialValue === undefined)
418
+ return;
419
+ const isPrimitive = isPrimitiveArray(options);
420
+ const initialValueIsPrimitive = this.multiple
421
+ ? isPrimitiveArray(initialValue)
422
+ : typeof initialValue !== 'object';
423
+ if (isPrimitive) {
424
+ if (!initialValueIsPrimitive) {
425
+ throw comboboxError('init_val_primitive_mismatch', true, { initialValue, options });
426
+ }
427
+ }
428
+ else {
429
+ if (initialValueIsPrimitive) {
430
+ throw comboboxError('init_val_object_mismatch', true, { initialValue, options });
431
+ }
432
+ }
433
+ }), catchError((e) => {
434
+ this._debugValidateOptionAndInitialValueSchema(true);
435
+ return throwError(() => e);
436
+ }))
437
+ .subscribe();
438
+ }
439
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
440
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: ComboboxDirective, isStandalone: true, inputs: { options: "options", initialValue: "initialValue", filterInternal: "filterInternal", loading: "loading", error: "error", emptyText: "emptyText", placeholder: "placeholder", multiple: "multiple", bindLabel: "bindLabel", bindValue: "bindValue", bindKey: "bindKey", allowCustomValues: "allowCustomValues", optionComponent: "optionComponent", selectedOptionComponent: "selectedOptionComponent" }, outputs: { filterChange: "filterChange" }, providers: [
7
441
  {
8
- provide: COMBOBOX_DIR_TOKEN,
442
+ provide: COMBOBOX_TOKEN,
9
443
  useExisting: ComboboxDirective,
10
444
  },
11
- ], ngImport: i0 }); }
445
+ ], queries: [{ propertyName: "optionTemplate", first: true, predicate: COMBOBOX_OPTION_TEMPLATE_TOKEN, descendants: true, read: TemplateRef }, { propertyName: "selectedOptionTemplate", first: true, predicate: COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN, descendants: true, read: TemplateRef }], ngImport: i0 }); }
12
446
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ComboboxDirective, decorators: [{
447
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxDirective, decorators: [{
14
448
  type: Directive,
15
449
  args: [{
16
450
  standalone: true,
17
451
  providers: [
18
452
  {
19
- provide: COMBOBOX_DIR_TOKEN,
453
+ provide: COMBOBOX_TOKEN,
20
454
  useExisting: ComboboxDirective,
21
455
  },
22
456
  ],
23
457
  }]
24
- }] });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvZGlyZWN0aXZlcy9jb21ib2JveC9jb21ib2JveC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTFELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFvQix5QkFBeUIsQ0FBQyxDQUFDO0FBV25HLE1BQU0sT0FBTyxpQkFBaUI7OEdBQWpCLGlCQUFpQjtrR0FBakIsaUJBQWlCLGlDQVBqQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFdBQVcsRUFBRSxpQkFBaUI7YUFDL0I7U0FDRjs7MkZBRVUsaUJBQWlCO2tCQVQ3QixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxtQkFBbUI7eUJBQy9CO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgQ09NQk9CT1hfRElSX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPENvbWJvYm94RGlyZWN0aXZlPignRVRfQ09NQk9CT1hfSU5QVVRfVE9LRU4nKTtcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENPTUJPQk9YX0RJUl9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBDb21ib2JveERpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveERpcmVjdGl2ZSB7fVxuIl19
458
+ }], ctorParameters: function () { return []; }, propDecorators: { options: [{
459
+ type: Input,
460
+ args: [{ required: true }]
461
+ }], initialValue: [{
462
+ type: Input
463
+ }], filterInternal: [{
464
+ type: Input
465
+ }], loading: [{
466
+ type: Input
467
+ }], error: [{
468
+ type: Input
469
+ }], emptyText: [{
470
+ type: Input
471
+ }], placeholder: [{
472
+ type: Input
473
+ }], multiple: [{
474
+ type: Input
475
+ }], bindLabel: [{
476
+ type: Input
477
+ }], bindValue: [{
478
+ type: Input
479
+ }], bindKey: [{
480
+ type: Input
481
+ }], allowCustomValues: [{
482
+ type: Input
483
+ }], optionComponent: [{
484
+ type: Input
485
+ }], selectedOptionComponent: [{
486
+ type: Input
487
+ }], filterChange: [{
488
+ type: Output
489
+ }], optionTemplate: [{
490
+ type: ContentChild,
491
+ args: [COMBOBOX_OPTION_TEMPLATE_TOKEN, { read: TemplateRef }]
492
+ }], selectedOptionTemplate: [{
493
+ type: ContentChild,
494
+ args: [COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN, { read: TemplateRef }]
495
+ }] } });
496
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvZGlyZWN0aXZlcy9jb21ib2JveC9jb21ib2JveC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTlELE9BQU8sRUFDTCxZQUFZLEVBQ1osU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEVBQ2QsS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBRVgsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLG9CQUFvQixFQUVwQix3QkFBd0IsRUFDeEIsY0FBYyxFQUVkLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxFQUNiLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEdBQUcsRUFDSCxJQUFJLEVBQ0osU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNILFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBSWxCLDZCQUE2QixFQUM3QixhQUFhLEdBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9D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dGVudCI6WyJpbXBvcnQgeyBBLCBFTlRFUiwgRVNDQVBFLCBUQUIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBUcmFja0J5RnVuY3Rpb24sXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbiAgaXNEZXZNb2RlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2ZVNlbGVjdGlvbk1vZGVsLFxuICBBbmltYXRlZE92ZXJsYXlDb21wb25lbnRCYXNlLFxuICBBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmUsXG4gIFNlbGVjdGlvbk1vZGVsLFxuICBTZWxlY3Rpb25Nb2RlbEJpbmRpbmcsXG4gIGNyZWF0ZURlc3Ryb3ksXG4gIGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MsXG4gIGlzRW1wdHlBcnJheSxcbiAgaXNPYmplY3RBcnJheSxcbiAgaXNQcmltaXRpdmVBcnJheSxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBza2lwLFxuICBza2lwV2hpbGUsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElOUFVUX1RPS0VOIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge1xuICBDb21ib2JveE9wdGlvblR5cGUsXG4gIENvbXBvbmVudFdpdGhPcHRpb24sXG4gIEtleUhhbmRsZXJSZXN1bHQsXG4gIFRlbXBsYXRlUmVmV2l0aE9wdGlvbixcbiAgYXNzZXRDb21ib2JveEJvZHlDb21wb25lbnRTZXQsXG4gIGNvbWJvYm94RXJyb3IsXG59IGZyb20gJy4uLy4uL3ByaXZhdGUnO1xuaW1wb3J0IHsgaXNPcHRpb25EaXNhYmxlZCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENPTUJPQk9YX09QVElPTl9URU1QTEFURV9UT0tFTiB9IGZyb20gJy4uL2NvbWJvYm94LW9wdGlvbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBDT01CT0JPWF9TRUxFQ1RFRF9PUFRJT05fVEVNUExBVEVfVE9LRU4gfSBmcm9tICcuLi9jb21ib2JveC1zZWxlY3RlZC1vcHRpb24tdGVtcGxhdGUnO1xuXG5leHBvcnQgY29uc3QgQ09NQk9CT1hfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tYm9ib3hEaXJlY3RpdmU+KCdFVF9DT01CT0JPWF9JTlBVVF9UT0tFTicpO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQ09NQk9CT1hfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogQ29tYm9ib3hEaXJlY3RpdmUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyNyZWdpb24gSW5qZWN0c1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dCA9IGluamVjdChJTlBVVF9UT0tFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGVkT3ZlcmxheSA9XG4gICAgaW5qZWN0PEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZTxBbmltYXRlZE92ZXJsYXlDb21wb25lbnRCYXNlPj4oQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlKTtcblxuICAvLyNyZWdpb24gSW5wdXRzXG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldEZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG4gIHNldCBvcHRpb25zKHZhbHVlOiB1bmtub3duW10pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRPcHRpb25zKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBpbml0aWFsVmFsdWUodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24odmFsdWUpO1xuICAgIHRoaXMuX2luaXRpYWxWYWx1ZSQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfaW5pdGlhbFZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4obnVsbCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGZpbHRlckludGVybmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJJbnRlcm5hbCQudmFsdWU7XG4gIH1cbiAgc2V0IGZpbHRlckludGVybmFsKHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3QgdmFsID0gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fZmlsdGVySW50ZXJuYWwkLm5leHQodmFsKTtcblxuICAgIGlmICghdmFsKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRGaWx0ZXIoJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRGaWx0ZXIodGhpcy5fY3VycmVudEZpbHRlcik7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2ZpbHRlckludGVybmFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nJC52YWx1ZTtcbiAgfVxuICBzZXQgbG9hZGluZyh2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX2xvYWRpbmckLm5leHQoYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSkpO1xuICB9XG4gIHByaXZhdGUgX2xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRpbmckID0gdGhpcy5fbG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGVycm9yKCkge1xuICAgIHJldHVybiB0aGlzLl9lcnJvciQudmFsdWU7XG4gIH1cbiAgc2V0IGVycm9yKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fZXJyb3IkLm5leHQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX2Vycm9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4obnVsbCk7XG5cbiAgQElucHV0KClcbiAgZW1wdHlUZXh0ID0gJ05vIHJlc3VsdHMgZm91bmQnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXIkLnZhbHVlO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9wbGFjZWhvbGRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBtdWx0aXBsZSh2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldEFsbG93TXVsdGlwbGUoYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGJpbmRMYWJlbCh2YWx1ZTogU2VsZWN0aW9uTW9kZWxCaW5kaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldExhYmVsQmluZGluZyh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgYmluZFZhbHVlKHZhbHVlOiBTZWxlY3Rpb25Nb2RlbEJpbmRpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0VmFsdWVCaW5kaW5nKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBiaW5kS2V5KHZhbHVlOiBTZWxlY3Rpb25Nb2RlbEJpbmRpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0S2V5QmluZGluZyh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgYWxsb3dDdXN0b21WYWx1ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93Q3VzdG9tVmFsdWVzJC52YWx1ZTtcbiAgfVxuICBzZXQgYWxsb3dDdXN0b21WYWx1ZXModmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9hbGxvd0N1c3RvbVZhbHVlcyQubmV4dChib29sZWFuQXR0cmlidXRlKHZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBfYWxsb3dDdXN0b21WYWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgQElucHV0KClcbiAgZ2V0IG9wdGlvbkNvbXBvbmVudCgpOiBDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkNvbXBvbmVudCQudmFsdWU7XG4gIH1cbiAgc2V0IG9wdGlvbkNvbXBvbmVudChjb21wb25lbnQ6IENvbXBvbmVudFdpdGhPcHRpb24gfCBudWxsKSB7XG4gICAgdGhpcy5fb3B0aW9uQ29tcG9uZW50JC5uZXh0KGNvbXBvbmVudCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uQ29tcG9uZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29tcG9uZW50V2l0aE9wdGlvbiB8IG51bGw+KG51bGwpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZE9wdGlvbkNvbXBvbmVudCgpOiBDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkT3B0aW9uQ29tcG9uZW50JC52YWx1ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRPcHRpb25Db21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9uQ29tcG9uZW50JC5uZXh0KGNvbXBvbmVudCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRPcHRpb25Db21wb25lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb21wb25lbnRXaXRoT3B0aW9uIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIE91dHB1dHNcblxuICBAT3V0cHV0KClcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBNZW1iZXJzXG5cbiAgcHJpdmF0ZSBnZXQgX2N1cnJlbnRGaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGaWx0ZXIkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRGaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBwcml2YXRlIGdldCBfaXNPcGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNNb3VudGVkO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzT3BlbiQgPSB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNNb3VudGVkJDtcblxuICByZWFkb25seSBfc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWwoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlU2VsZWN0aW9uTW9kZWwgPSBuZXcgQWN0aXZlU2VsZWN0aW9uTW9kZWwoKTtcblxuICByZWFkb25seSBzZWxlY3RlZE9wdGlvbnMkID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0aW9uJDtcbiAgcmVhZG9ubHkgbXVsdGlwbGUkID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuYWxsb3dNdWx0aXBsZSQ7XG4gIHJlYWRvbmx5IG9wdGlvbnMkID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZmlsdGVyZWRPcHRpb25zJDtcbiAgcmVhZG9ubHkgcmF3T3B0aW9ucyQgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5vcHRpb25zJDtcblxuICBAQ29udGVudENoaWxkKENPTUJPQk9YX09QVElPTl9URU1QTEFURV9UT0tFTiwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBzZXQgb3B0aW9uVGVtcGxhdGUodmFsdWU6IFRlbXBsYXRlUmVmV2l0aE9wdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX29wdGlvblRlbXBsYXRlJC5uZXh0KHZhbHVlID8/IG51bGwpO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWZXaXRoT3B0aW9uIHwgbnVsbD4obnVsbCk7XG5cbiAgQENvbnRlbnRDaGlsZChDT01CT0JPWF9TRUxFQ1RFRF9PUFRJT05fVEVNUExBVEVfVE9LRU4sIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgc2V0IHNlbGVjdGVkT3B0aW9uVGVtcGxhdGUodmFsdWU6IFRlbXBsYXRlUmVmV2l0aE9wdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9uVGVtcGxhdGUkLm5leHQodmFsdWUgPz8gbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRPcHRpb25UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmV2l0aE9wdGlvbiB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IF9iaW5kaW5ncyA9IGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MoXG4gICAge1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtY29tYm9ib3gtLWxvYWRpbmcnLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5fbG9hZGluZyQsXG4gICAgfSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1jb21ib2JveC0tZXJyb3InLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5fZXJyb3IkLnBpcGUobWFwKCh2KSA9PiAhIXYpKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LWNvbWJvYm94LS1vcGVuJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuX2lzT3BlbiQsXG4gICAgfSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1zZWxlY3QtZmllbGQtLW11bHRpcGxlJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMubXVsdGlwbGUkLFxuICAgIH0sXG4gICAge1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtc2VsZWN0LWZpZWxkLS1vcGVuJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuX2lzT3BlbiQsXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIF9jb21ib2JveEJvZHlDb21wb25lbnQ6IENvbXBvbmVudFR5cGU8QW5pbWF0ZWRPdmVybGF5Q29tcG9uZW50QmFzZT4gfCBudWxsID0gbnVsbDtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gQ29tcHV0ZXNcblxuICByZWFkb25seSBjdXN0b21PcHRpb25UcGwkID0gdGhpcy5fb3B0aW9uVGVtcGxhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjdXN0b21PcHRpb25Db21wb25lbnQkID0gdGhpcy5fb3B0aW9uQ29tcG9uZW50JC5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgY3VzdG9tU2VsZWN0ZWRPcHRpb25UcGwkID0gdGhpcy5fc2VsZWN0ZWRPcHRpb25UZW1wbGF0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IGN1c3RvbVNlbGVjdGVkT3B0aW9uQ29tcG9uZW50JCA9IHRoaXMuX3NlbGVjdGVkT3B0aW9uQ29tcG9uZW50JC5hc09ic2VydmFibGUoKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gTGlmZWN5Y2xlXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5fc2VsZWN0aW9uTW9kZWwpO1xuXG4gICAgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LnBsYWNlbWVudCA9ICdib3R0b20nO1xuICAgIHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5mYWxsYmFja1BsYWNlbWVudHMgPSBbJ2JvdHRvbScsICd0b3AnXTtcbiAgICB0aGlzLl9hbmltYXRlZE92ZXJsYXkuYXV0b1Jlc2l6ZSA9IHRydWU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0RGlzcGF0Y2hGaWx0ZXJDaGFuZ2VzKCk7XG5cbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIHRoaXMuX2RlYnVnVmFsaWRhdGVDb21ib2JveENvbmZpZygpO1xuICAgICAgdGhpcy5fZGVidWdWYWxpZGF0ZU9wdGlvbkFuZEluaXRpYWxWYWx1ZVNjaGVtYSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnZhbHVlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLl9pbnB1dC5fdXBkYXRlVmFsdWUodmFsdWUpO1xuICAgICAgICAgIHRoaXMuX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5faW5wdXQubmF0aXZlSW5wdXRSZWYkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICBmaWx0ZXIoKHJlZikgPT4gISFyZWY/LmVsZW1lbnQubmF0aXZlRWxlbWVudCksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl91cGRhdGVGaWx0ZXIodGhpcy5fY3VycmVudEZpbHRlcikpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgc2V0Qm9keUNvbXBvbmVudChjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8QW5pbWF0ZWRPdmVybGF5Q29tcG9uZW50QmFzZT4pIHtcbiAgICB0aGlzLl9jb21ib2JveEJvZHlDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gIH1cblxuICBnZXRPcHRpb25MYWJlbChvcHRpb246IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0TGFiZWwkKG9wdGlvbik7XG4gIH1cblxuICBnZXRPcHRpb25WYWx1ZShvcHRpb246IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0VmFsdWUkKG9wdGlvbik7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb246IHVua25vd24pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuXG4gICAgdGhpcy5faW5wdXQuX21hcmtBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgYXNzZXRDb21ib2JveEJvZHlDb21wb25lbnRTZXQodGhpcy5fY29tYm9ib3hCb2R5Q29tcG9uZW50KTtcblxuICAgIGlmICh0aGlzLl9pc09wZW4gfHwgdGhpcy5faW5wdXQuZGlzYWJsZWQgfHwgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LmlzTW91bnRpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5tb3VudCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMuX2NvbWJvYm94Qm9keUNvbXBvbmVudCxcbiAgICAgIG1pcnJvcldpZHRoOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pc09wZW4gfHwgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LmlzVW5tb3VudGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LnVubW91bnQoKTtcbiAgfVxuXG4gIHNlbGVjdElucHV0QW5kT3BlbigpIHtcbiAgICBpZiAodGhpcy5faW5wdXQuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIHRoaXMuX2lucHV0Lm5hdGl2ZUlucHV0UmVmPy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgdGhpcy5vcGVuKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlRnJvbU9wdGlvbihvcHRpb246IHVua25vd24pIHtcbiAgICB0aGlzLl9pbnB1dC5fbWFya0FzVG91Y2hlZCgpO1xuXG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZVNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hbGxvd011bHRpcGxlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB0aGlzLl9zZXRGaWx0ZXJGcm9tSW5wdXRWYWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cGRhdGVGaWx0ZXIoJycpO1xuICAgIH1cbiAgfVxuXG4gIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQkKG9wdGlvbik7XG4gIH1cblxuICBpc09wdGlvbkFjdGl2ZShvcHRpb246IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZWwuYWN0aXZlT3B0aW9uJC5waXBlKG1hcCgoYWN0aXZlT3B0aW9uKSA9PiBhY3RpdmVPcHRpb24gPT09IG9wdGlvbikpO1xuICB9XG5cbiAgdHJhY2tCeU9wdGlvbktleUZuOiBUcmFja0J5RnVuY3Rpb248dW5rbm93bj4gPSAoaW5kZXgsIGl0ZW0pID0+IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldEtleShpdGVtKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHJvdGVjdGVkIE1ldGhvZHNcblxuICBfcHJvY2Vzc0tleWRvd25FdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuX2lzT3BlbjtcbiAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuYWxsb3dNdWx0aXBsZTtcbiAgICBjb25zdCBjYW5BZGRDdXN0b21WYWx1ZSA9IHRoaXMuYWxsb3dDdXN0b21WYWx1ZXM7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIGNvbnN0IGhhc0ZpbHRlclZhbHVlID0gISF2YWx1ZTtcblxuICAgIGNvbnN0IHJlc3VsdDogS2V5SGFuZGxlclJlc3VsdCA9IHt9O1xuXG4gICAgaWYgKGtleUNvZGUgPT09IEVOVEVSKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIC8vIFRoZSB1c2VyIHR5cGVkIGEgY3VzdG9tIHZhbHVlIGFuZCBwcmVzc2VkIGVudGVyLiBBZGQgaXQgdG8gdGhlIHNlbGVjdGVkIG9wdGlvbnMuXG4gICAgICAvLyBGSVhNRTogQ3VycmVudGx5IGl0IGlzIGltcG9zc2libGUgdG8gc2VsZWN0IHRoZSBhY3RpdmUgb3B0aW9uIHdpdGggdGhlIGtleWJvYXJkIGlmIGNhbkFkZEN1c3RvbVZhbHVlIGlzIHRydWUuXG4gICAgICAvLyBUbyBmaXggdGhpcywgdGhlIGFjdGl2ZSBvcHRpb24gc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgb3JpZ2luIGl0IGdvdCBhY3RpdmUgZnJvbSAoa2V5Ym9hcmQgb3IgcHJvZ3JhbW1hdGljKS5cbiAgICAgIC8vIFRoZSBcInZhbHVlXCIgY2hhbmdpbmcgc2hvdWxkIHB1dCB0aGUgY29tYm9ib3ggaW50byBhIFwidXNlIHRoZSBjdXN0b20gaW5wdXQgb24gZW50ZXJcIiBtb2RlLlxuICAgICAgLy8gVGhlIFwiYWN0aXZlIG9wdGlvblwiIGNoYW5naW5nIHZpYSBrZXlib2FyZCBzaG91bGQgcHV0IHRoZSBjb21ib2JveCBpbnRvIGEgXCJ1c2UgdGhlIGFjdGl2ZSBvcHRpb24gb24gZW50ZXJcIiBtb2RlLlxuICAgICAgaWYgKGNhbkFkZEN1c3RvbVZhbHVlICYmIGhhc0ZpbHRlclZhbHVlKSB7XG4gICAgICAgIHJlc3VsdC5vcHRpb25BY3Rpb24gPSB7IHR5cGU6ICdhZGQnLCBvcHRpb246IHZhbHVlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhY3RpdmVPcHRpb24gPSB0aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlbC5hY3RpdmVPcHRpb247XG5cbiAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgICAgICByZXN1bHQub3B0aW9uQWN0aW9uID0geyB0eXBlOiAndG9nZ2xlJywgb3B0aW9uOiBhY3RpdmVPcHRpb24gfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9IHsgdHlwZTogJ2FkZCcsIG9wdGlvbjogYWN0aXZlT3B0aW9uIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgIHJlc3VsdC5zZXRGaWx0ZXIgPSAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID0gJ2Nsb3NlJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2ludGVycHJldEtleUhhbmRsZXJSZXN1bHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gRVNDQVBFKSB7XG4gICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgIHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID0gJ2Nsb3NlJztcbiAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgICAgcmVzdWx0LnNldEZpbHRlciA9ICcnO1xuICAgICAgICByZXN1bHQub3B0aW9uQWN0aW9uID0gJ2NsZWFyJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2ludGVycHJldEtleUhhbmRsZXJSZXN1bHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gVEFCKSB7XG4gICAgICByZXN1bHQub3ZlcmxheU9wZXJhdGlvbiA9ICdjbG9zZSc7XG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICAgIH1cblxuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICByZXN1bHQub3ZlcmxheU9wZXJhdGlvbiA9ICdvcGVuJztcbiAgICB9XG5cbiAgICB0aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlbC5ldmFsdWF0ZUtleWJvYXJkRXZlbnQoZXZlbnQpO1xuXG4gICAgaWYgKGtleUNvZGUgPT09IEEgJiYgZXZlbnQuY3RybEtleSAmJiBpc011bHRpcGxlKSB7XG4gICAgICByZXN1bHQub3B0aW9uQWN0aW9uID0gJ3RvZ2dsZUFsbCc7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pbnRlcnByZXRLZXlIYW5kbGVyUmVzdWx0KHJlc3VsdCk7XG4gIH1cblxuICBfcHJvY2Vzc0lucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuXG4gICAgdGhpcy5fdXBkYXRlRmlsdGVyKHZhbHVlKTtcbiAgfVxuXG4gIF9oYW5kbGVCbHVyRXZlbnQoKSB7XG4gICAgdGhpcy5faW5wdXQuX21hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLl9pbnB1dC5fc2V0U2hvdWxkRGlzcGxheUVycm9yKHRydWUpO1xuXG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcignJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGaWx0ZXIgPT09ICcnKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhclNlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXG5cbiAgcHJpdmF0ZSBfaW5pdERpc3BhdGNoRmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZSgoKSA9PiB0aGlzLmZpbHRlckludGVybmFsKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgodikgPT4gdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh2KSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVGaWx0ZXIodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl9pbnB1dC5uYXRpdmVJbnB1dFJlZiAmJiB0aGlzLl9pbnB1dC5uYXRpdmVJbnB1dFJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9pbnB1dC5uYXRpdmVJbnB1dFJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudEZpbHRlciA9PT0gdmFsdWUpIHJldHVybjtcblxuICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIkLm5leHQodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVySW50ZXJuYWwpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldEZpbHRlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RmlsdGVyRnJvbUlucHV0VmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHJldHVybjtcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5faW5wdXQudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLl91cGRhdGVGaWx0ZXIoJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldE9wdGlvbkJ5VmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKCFvcHRpb24pIHJldHVybjtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0TGFiZWwob3B0aW9uKTtcblxuICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSByZXR1cm47XG5cbiAgICB0aGlzLl91cGRhdGVGaWx0ZXIobGFiZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQ6IEtleUhhbmRsZXJSZXN1bHQpIHtcbiAgICBpZiAocmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPT09ICdjbG9zZScpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID09PSAnb3BlbicpIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuc2V0RmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcihyZXN1bHQuc2V0RmlsdGVyKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbikge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQub3B0aW9uQWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbiA9PT0gJ2NsZWFyJykge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyU2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbiA9PT0gJ3RvZ2dsZUFsbCcpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGVBbGxTZWxlY3RlZE9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCBvcHRpb24gfSA9IHJlc3VsdC5vcHRpb25BY3Rpb247XG5cbiAgICAgICAgaWYgKGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnYWRkJykge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBEZXYgbW9kZVxuXG4gIHByaXZhdGUgX2RlYnVnVmFsaWRhdGVDb21ib2JveENvbmZpZyhpc1JldHJ5ID0gZmFsc2UpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5sYWJlbEJpbmRpbmckLCB0aGlzLl9zZWxlY3Rpb25Nb2RlbC52YWx1ZUJpbmRpbmckLCB0aGlzLl9hbGxvd0N1c3RvbVZhbHVlcyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoaXNSZXRyeSA/IDEgOiAwKSwgLy8gU2tpcCBpZiByZXRyeWluZyB0byBhdm9pZCBpbmZpbml0ZSBsb29wXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgbWFwKChbYmluZExhYmVsLCBiaW5kVmFsdWUsIGFsbG93Q3VzdG9tVmFsdWVzXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3VsZEJlT2JqZWN0cyA9IGJpbmRMYWJlbCAmJiBiaW5kVmFsdWUgJiYgIWFsbG93Q3VzdG9tVmFsdWVzO1xuXG4gICAgICAgICAgaWYgKHNob3VsZEJlT2JqZWN0cykge1xuICAgICAgICAgICAgcmV0dXJuIENvbWJvYm94T3B0aW9uVHlwZS5PYmplY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIENvbWJvYm94T3B0aW9uVHlwZS5QcmltaXRpdmU7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKGV4cGVjdGVkT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5vcHRpb25zO1xuXG4gICAgICAgICAgaWYgKGlzRW1wdHlBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChleHBlY3RlZE9wdGlvblR5cGUgPT09IENvbWJvYm94T3B0aW9uVHlwZS5PYmplY3QpIHtcbiAgICAgICAgICAgIGlmICghaXNPYmplY3RBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgICB0aHJvdyBjb21ib2JveEVycm9yKCdvcHRpb25zX29iamVjdF9taXNtYXRjaCcsIHRydWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRPcHRpb25UeXBlID09PSBDb21ib2JveE9wdGlvblR5cGUuUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJpbWl0aXZlQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgY29tYm9ib3hFcnJvcignb3B0aW9uc19wcmltaXRpdmVfbWlzbWF0Y2gnLCB0cnVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWdWYWxpZGF0ZUNvbWJvYm94Q29uZmlnKHRydWUpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlYnVnVmFsaWRhdGVPcHRpb25BbmRJbml0aWFsVmFsdWVTY2hlbWEoaXNSZXRyeSA9IGZhbHNlKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zJCwgdGhpcy5faW5pdGlhbFZhbHVlJF0pXG4gICAgICAucGlwZShcbiAgICAgICAgc2tpcChpc1JldHJ5ID8gMSA6IDApLCAvLyBTa2lwIGlmIHJldHJ5aW5nIHRvIGF2b2lkIGluZmluaXRlIGxvb3BcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFwKChbb3B0aW9ucywgaW5pdGlhbFZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmIChpbml0aWFsVmFsdWUgPT09IG51bGwgfHwgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmVBcnJheShvcHRpb25zKTtcbiAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWVJc1ByaW1pdGl2ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICAgID8gaXNQcmltaXRpdmVBcnJheShpbml0aWFsVmFsdWUpXG4gICAgICAgICAgICA6IHR5cGVvZiBpbml0aWFsVmFsdWUgIT09ICdvYmplY3QnO1xuXG4gICAgICAgICAgaWYgKGlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICBpZiAoIWluaXRpYWxWYWx1ZUlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICAgIHRocm93IGNvbWJvYm94RXJyb3IoJ2luaXRfdmFsX3ByaW1pdGl2ZV9taXNtYXRjaCcsIHRydWUsIHsgaW5pdGlhbFZhbHVlLCBvcHRpb25zIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbFZhbHVlSXNQcmltaXRpdmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgY29tYm9ib3hFcnJvcignaW5pdF92YWxfb2JqZWN0X21pc21hdGNoJywgdHJ1ZSwgeyBpbml0aWFsVmFsdWUsIG9wdGlvbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RlYnVnVmFsaWRhdGVPcHRpb25BbmRJbml0aWFsVmFsdWVTY2hlbWEodHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -5,15 +5,15 @@ export class ComboboxOptionTemplateDirective {
5
5
  constructor() {
6
6
  this.template = inject(TemplateRef);
7
7
  }
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ComboboxOptionTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
9
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: ComboboxOptionTemplateDirective, isStandalone: true, selector: "ng-template[etComboboxOptionTemplate]", providers: [
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxOptionTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
9
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: ComboboxOptionTemplateDirective, isStandalone: true, selector: "ng-template[etComboboxOptionTemplate]", providers: [
10
10
  {
11
11
  provide: COMBOBOX_OPTION_TEMPLATE_TOKEN,
12
12
  useExisting: ComboboxOptionTemplateDirective,
13
13
  },
14
14
  ], exportAs: ["etComboboxOptionTemplate"], ngImport: i0 }); }
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ComboboxOptionTemplateDirective, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxOptionTemplateDirective, decorators: [{
17
17
  type: Directive,
18
18
  args: [{
19
19
  selector: 'ng-template[etComboboxOptionTemplate]',
@@ -0,0 +1,2 @@
1
+ export * from './public-api';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9jb21ib2JveC9kaXJlY3RpdmVzL2NvbWJvYm94LW9wdGlvbi10ZW1wbGF0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -5,15 +5,15 @@ export class ComboboxSelectedOptionTemplateDirective {
5
5
  constructor() {
6
6
  this.template = inject(TemplateRef);
7
7
  }
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ComboboxSelectedOptionTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
9
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: ComboboxSelectedOptionTemplateDirective, isStandalone: true, selector: "ng-template[etComboboxSelectedOptionTemplate]", providers: [
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxSelectedOptionTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
9
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: ComboboxSelectedOptionTemplateDirective, isStandalone: true, selector: "ng-template[etComboboxSelectedOptionTemplate]", providers: [
10
10
  {
11
11
  provide: COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN,
12
12
  useExisting: ComboboxSelectedOptionTemplateDirective,
13
13
  },
14
14
  ], exportAs: ["etComboboxSelectedOptionTemplate"], ngImport: i0 }); }
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ComboboxSelectedOptionTemplateDirective, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ComboboxSelectedOptionTemplateDirective, decorators: [{
17
17
  type: Directive,
18
18
  args: [{
19
19
  selector: 'ng-template[etComboboxSelectedOptionTemplate]',
@@ -0,0 +1,2 @@
1
+ export * from './public-api';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9jb21ib2JveC9kaXJlY3RpdmVzL2NvbWJvYm94LXNlbGVjdGVkLW9wdGlvbi10ZW1wbGF0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=